2013-08-28 37 views

Trả lời

1

Tôi không biết bất kỳ plugin Leaflet nào có thể thực hiện việc này cho bạn. Tuy nhiên, thuật toán để làm như vậy không quá phức tạp. Kiểm tra trang web này: http://www.mathopenref.com/coordpolygonarea2.html chứa thuật toán và nhiều ví dụ trực quan về cách thuật toán thực sự hoạt động.

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; 
} 

Để sử dụng thuật toán này với đa giác Tờ rơi, bạn sẽ lặp qua Polygon polygon.getLatLngs() để có được tất cả các lat/lon cặp. Đặt chúng thành hai mảng riêng biệt - một cho các tọa độ X, một cho tọa độ Y. Sử dụng các tham số này làm tham số cho hàm ở trên và cho số polygon.getLatLngs().length

Như trang web cho biết, việc đường dẫn đa giác bắt đầu ở đâu không quan trọng. Tuy nhiên, nếu bạn bắt đầu theo thứ tự ngược chiều kim đồng hồ, kết quả của bạn sẽ là số âm. Bạn có thể xử lý tất cả các trường hợp bằng cách đơn giản nhận giá trị tuyệt đối của bất kỳ hàm nào trả về.

+0

GeodesicArea không cho tôi bản đồ CRS đơn giản, phương pháp này tuy nhiên hoạt động hoàn hảo, vì vậy cảm ơn bạn! – Ecksters

9

Tôi đã sử dụng leaflet.draw (https://github.com/Leaflet/Leaflet.draw) để vẽ đa giác.

Và nó có chức năng GeodesicArea. Mẫu trong 'vẽ: được tạo'.

map.on('draw:created', function (e) { 
     var type = e.layerType, 
      layer = e.layer; 
      if (type === 'polygon') 
      { 
       var area = L.GeometryUtil.geodesicArea(layer.getLatLngs()) 
       ... 
Các vấn đề liên quan