使用多边形极点对多边形进行标注

使用多边形极点对多边形进行标注,polygon pole of inaccessibility

  • 对应文中名称为自己翻译,仅供参考

概念

多边形极点,定义为,多边形内距离边界最远的点。我这里用来这个点位来标注凹多边形的名称,如下图,计算多边形质心位置时,不一定会落在多边形为内部,此时可以用极点来表示改多边形内部的点。
使用多边形极点对多边形进行标注_第1张图片
使用多边形极点对多边形进行标注_第2张图片

第三方库, mapbox提供了js库来计算多边形的极点坐标

计算原理

  • 核心是通过划分规则格网,通过一定策略来确定极点位置

使用多边形极点对多边形进行标注_第3张图片

计算步骤

  • 使用外包矩形宽高的最小值作为网格的初始大小,生成覆盖多边形的网格
  • 依次判断每个网格距离多边形的最短距离,加上网格的对角线的一半记为max
  • 依次比较每个cell的max,取max最大的网格作为最优网格
  • 依据网格的最小尺寸对最优网格进行四分,迭代判断每个网格是否为最优网格
  • 迭代时,使用queue,仅判断最大max的网格

实例

  • leaflet实例如下:

    /*
    testdata为geojson数据
    将geometry的多个coordinates传入作为方法参数,设置网格的最小尺寸即可
    polylabel默认使用多边形的外边界进行计算
    */
    let lxs_data = L.geoJSON(
        testdata.features,
        {
           
            onEachFeature: (feature, layer) => {
           
                let polygon = feature.geometry.coordinates;
                let polypoint = polylabel(polygon, 0.001);
                var popup = L.popup()
                    .setLatLng([polypoint[1],polypoint[0]])
                    .setContent('

    lxs!
    This is a lxs popup.

    '
    ) .openOn(mymap); } }) .addTo(mymap);

你可能感兴趣的:(gis,polygon,label)