我製作了一個網站,用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