Je recherche un algorithme précis ou un service pour calculer la surface sur terre où les points sont calculés sur la base des coordonnées GPS.
J'utilise Google Map Api version 3 et je dessine des polygones sur la base de coordonnées enregistrées, mais je ne pense pas que les méthodes standard de calcul de l'aire du polygone tiendront compte des pentes (collines). Dois-je travailler sur les contours pour une telle chose?
Existe-t-il des services tiers peuvent être ArcGis ou un autre qui prend également en compte les pentes.
Oui, c'est définitivement possible. Il y a un tutoriel rapide avec un exemple de code ici:
La partie pertinente est la suivante:
google.maps.geometry.spherical.computeArea(yourPolygon.getPath());
Documentation officielle:
http://code.google.com/apis/maps/documentation/javascript/reference.html#spherical
La réponse de Brad
google.maps.geometry.spherical.computeArea(yourPolygon.getPath());
est correct, mais attention, il ne s'applique qu'aux polygones qui ne s'entrecoupent pas. Lorsque le polygone commence à s'entrecroiser, les choses vont terriblement mal. Vous pouvez l'essayer avec le lien que Brad a donné http://geojason.info/demos/line-length-polygon-area-google-maps-v3/ . Tracez simplement 4-5 lignes qui se croisent et commencez à jouer avec les sommets. Le calcul de l'aire paraîtra certainement faux.
Si vous n'êtes pas convaincu, voici un exemple:
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);
}
Le rapport de bogue 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