使用Leaflet l.draw.polyline绘制的多边形大小检查

6
我使用Leaflet制作了一个网站,在OSM-Map上绘制多边形。
现在我想要检查多边形的大小,因为多边形的大小不能超过一个定义好的尺寸,例如5平方千米。
有没有人有好的方法来检查绘制的多边形的大小?
3个回答

9

我使用了leaflet.draw(https://github.com/Leaflet/Leaflet.draw)来绘制一个多边形。

它有一个地理面积函数,可以在“ draw:created”中进行示例。

    map.on('draw:created', function (e) {
        var type = e.layerType,
            layer = e.layer;
            if (type === 'polygon') 
            {
                var area = L.GeometryUtil.geodesicArea(layer.getLatLngs())
                ...

1
您可以使用GeometryUtil.geodesicArea()来获取面积,如下所示:
let area = L.GeometryUtil.geodesicArea(layer.getLatLngs()[0]);

1
我不知道有哪些适合你的 Leaflet 插件可以完成此操作。但是,实现该操作的算法并不是非常复杂。请查看该网站: http://www.mathopenref.com/coordpolygonarea2.html,其中包含该算法以及许多视觉示例,可帮助你理解算法的工作原理。
function polygonArea(X, Y, numPoints) 
{ 
  area = 0;         // Accumulates area in the loop
  j = numPoints-1;  // The last vertex is the 'previous' one to the first

  for (i=0; i<numPoints; i++)
    { area = area +  (X[j]+X[i]) * (Y[j]-Y[i]); 
      j = i;  //j is previous vertex to i
    }
  return area/2;
}

为了在Leaflet多边形中使用此算法,您需要通过多边形进行迭代,以获取所有的纬度/经度对,将它们放入两个单独的数组中 - 一个用于X坐标,一个用于Y坐标。将它们作为上面的函数的参数,并将手动传递给

正如网页所说,从多边形路径的任何位置开始都没有关系。但是,如果您按逆时针顺序开始,结果将为负数。您可以通过仅获取此函数返回的绝对值来处理所有情况。


geodesicArea 在使用 Simple CRS 地图时对我来说出现了问题,但是这种方法完美地解决了问题,所以非常感谢! - Ecksters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接