我制作了一个网站,用Leaflet在OSM-Map
上绘制多边形。检查用单张绘制的多边形的大小l.draw.polyline
现在我想检查多边形的大小,因为多边形不能超过定义的大小,例如5平方公里。
有没有人有一个好主意来检查绘制的多边形的大小?
我制作了一个网站,用Leaflet在OSM-Map
上绘制多边形。检查用单张绘制的多边形的大小l.draw.polyline
现在我想检查多边形的大小,因为多边形不能超过定义的大小,例如5平方公里。
有没有人有一个好主意来检查绘制的多边形的大小?
我不知道任何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;
}
为了使用这种算法传单多边形,你会为了获得所有经/纬度对通过多边形polygon.getLatLngs()
迭代。把它们分成两个单独的数组 - 一个用于X坐标,一个用于Y坐标。使用这些作为上述功能的参数,并且对于numPoints
手polygon.getLatLngs().length
正如网页所说,它启动的多边形路径上的位置并不重要。但是,如果您以逆时针顺序开始,您的结果将为负值。您可以通过简单地获取该函数返回的绝对值来处理所有情况。
我已经使用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())
...
geodesicrea对我来说失败了一个简单的CRS地图,但这种方法可以完美地工作,所以谢谢! – Ecksters