【问题标题】:checking size of Polygon drawn with Leaflet l.draw.polyline检查使用 Leaflet l.draw.polyline 绘制的多边形的大小
【发布时间】:2013-08-31 07:59:25
【问题描述】:

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

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

有没有人知道检查绘制的多边形的大小?

【问题讨论】:

    标签: size polygon leaflet


    【解决方案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 polygon.getLatLngs() 以获得所有纬度/经度对。将它们放入两个单独的数组中 - 一个用于 X 坐标,一个用于 Y 坐标。将这些用作上述函数的参数,对于 numPoints 将其交给 polygon.getLatLngs().length

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

    【讨论】:

    • 使用简单 CRS 地图的 geodesicArea 对我来说失败了,但是这种方法效果很好,所以谢谢!
    【解决方案2】:

    我使用 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())
                    ...
    

    【讨论】:

      【解决方案3】:

      您可以使用GeometryUtil.geodesicArea() 来获取该区域,如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 2019-05-08
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        相关资源
        最近更新 更多