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

时间:2013-08-28 09:51:19

标签: size polygon leaflet

我创建了一个使用Leaflet的网站,在OSM-Map上绘制多边形。

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

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

3 个答案:

答案 0 :(得分: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())
                ...

答案 1 :(得分: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多边形一起使用,您将遍历多边形polygon.getLatLngs()以获得所有纬度/经度对。将它们分成两个独立的数组 - 一个用于X坐标,一个用于Y坐标。将这些用作上述函数的参数,并numPoints将其polygon.getLatLngs().length

正如网页所说,无论多边形路径在何处开始都无关紧要。但是,如果以逆时针顺序开始,则结果为负数。您只需获取此函数返回的绝对值即可处理所有情况。

答案 2 :(得分:0)

您可以使用GeometryUtil.geodesicArea()来获得这样的区域:

let area = L.GeometryUtil.geodesicArea(layer.getLatLngs()[0]);