2012-01-27 57 views
15

Tôi đang tìm một thuật toán chính xác hoặc một dịch vụ để tính toán diện tích bề mặt trên trái đất, nơi các điểm được tính trên cơ sở Tọa độ GPS.Tính diện tích đa giác được vẽ trên bản đồ google

Tôi đang sử dụng Google Map Api phiên bản 3 và vẽ đa giác dựa trên tọa độ đã ghi nhưng tôi không nghĩ cách tính toán diện tích đa giác chuẩn sẽ tính đến độ dốc (đồi). Tôi có cần phải làm việc trên các đường nét cho điều đó không?

Có bất kỳ dịch vụ bên thứ ba nào có thể là ArcGis hoặc một số dịch vụ khác cũng có tính đến các sườn dốc hay không.

Trả lời

31

Có, điều này chắc chắn là có thể. Có một hướng dẫn nhanh chóng với mã ví dụ ở đây:

https://web.archive.org/web/20130301120148/http://geojason.info/demos/line-length-polygon-area-google-maps-v3

Phần liên quan là thế này:

google.maps.geometry.spherical.computeArea(yourPolygon.getPath()); 

tài liệu chính thức:

http://code.google.com/apis/maps/documentation/javascript/reference.html#spherical

+0

sẽ API này đưa vào tài khoản độ cao của đất ?. Tôi sẽ nhận được tọa độ từ thiết bị GPS. –

+1

Không, nó giả định một quả cầu hình cầu hoàn toàn trơn tru. Âm thanh như những gì bạn thực sự muốn là diện tích bề mặt của mô hình độ cao kỹ thuật số. Điều này có thể được tính bằng hàm r.surf.area trong GRASS GIS, nhưng nếu bạn muốn biết nhiều hơn, bạn nên hỏi gis.stackexchange.com – Spacedman

+0

@Spacedman: Grass GIS có thể tích hợp với Google Maps không? –

9

Brad của câu trả lời

google.maps.geometry.spherical.computeArea(yourPolygon.getPath()); 

là chính xác, nhưng hãy cẩn thận, nó chỉ áp dụng cho các đa giác không tự giao nhau. Khi đa giác bắt đầu tự giao nhau, mọi thứ sẽ sai lầm khủng khiếp. Bạn có thể thử nó với liên kết Brad đã cho http://geojason.info/demos/line-length-polygon-area-google-maps-v3/. Chỉ cần vẽ 4-5 đường giao nhau và bắt đầu chơi với các đỉnh. Tính toán diện tích chắc chắn sẽ sai.

Nếu bạn không thuyết phục, đây là một ví dụ:

var map; 

    google.maps.visualRefresh = true; 

    google.maps.event.addDomListener(window, 'load', initialize); 

    function initialize() { 
     var mapOptions = { 
      center : new google.maps.LatLng(55.874, -4.287), 
      zoom : 16, 
      mapTypeId : google.maps.MapTypeId.ROADMAP 
     }; 
     map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions) 

     drawExample(); 
    } 

    function drawExample() { 
     var pathLeft = [new google.maps.LatLng(55.874, -4.292), 
      new google.maps.LatLng(55.875, -4.292), 
      new google.maps.LatLng(55.875, -4.290), 
      new google.maps.LatLng(55.876, -4.290), 
      new google.maps.LatLng(55.876, -4.291), 
      new google.maps.LatLng(55.874, -4.291)] 

     var polygonLeft = new google.maps.Polygon({ 
      path : pathLeft, 
      map: map 
     }); 

     var areaLeft = google.maps.geometry.spherical.computeArea(polygonLeft.getPath()); 

     var pathRight = [new google.maps.LatLng(55.874, -4.282), 
      new google.maps.LatLng(55.875, -4.282), 
      new google.maps.LatLng(55.875, -4.280), 
      new google.maps.LatLng(55.8753, -4.2807), 
      new google.maps.LatLng(55.876, -4.281), 
      new google.maps.LatLng(55.874, -4.281)] 

     var polygonRight = new google.maps.Polygon({ 
      path : pathRight, 
      map: map 
     }); 

     var areaRight = google.maps.geometry.spherical.computeArea(polygonRight.getPath()); 

     console.log("areaLeft: " + areaLeft + "\nareaRight: " + areaRight); 
    } 

Báo cáo lỗi http://code.google.com/p/gmaps-api-issues/issues/detail?id=5624&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Stars%20ApiType%20Internal&start=700#makechanges

Các vấn đề liên quan