使用多边形极点对多边形进行标注,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);