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

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

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

概念

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

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

计算原理

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

对多边形划分格网

计算步骤

  • 使用外包矩形宽高的最小值作为网格的初始大小,生成覆盖多边形的网格
  • 依次判断每个网格距离多边形的最短距离,加上网格的对角线的一半记为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('<p>lxs!<br />This is a lxs popup.</p>')
                    .openOn(mymap);
            }
        })
        .addTo(mymap);
    

猜你喜欢

转载自blog.csdn.net/yue1241630499/article/details/107300240