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

use*_*836 5 size polygon leaflet

我用Leaflet创建了一个网站来绘制多边形OSM-Map.

现在我想检查多边形的大小,因为多边形不得超过定义的大小,例如5平方公里.

有没有人有一个好主意检查绘制多边形的大小?

小智 9

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

它有geodesicArea功能.'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())
                ...
Run Code Online (Sandbox Code Playgroud)


Pat*_*k D 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;
}
Run Code Online (Sandbox Code Playgroud)

为了将此算法与 Leaflet 多边形一起使用,您将迭代多边形polygon.getLatLngs()以获得所有纬度/经度对。将它们放入两个单独的数组中 - 一个用于 X 坐标,一个用于 Y 坐标。使用这些作为上面函数的参数,然后将numPoints其传递给polygon.getLatLngs().length

正如网页所说,从多边形路径的何处开始并不重要。但是,如果您以逆时针顺序开始,您的结果将为负数。您可以通过简单地获取此函数返回的绝对值来处理所有情况。