Je développe actuellement un site de cartographie OpenLayers. Les mesures peuvent être effectuées à l'aide d'un outil de ligne et d'un outil de zone. Ces deux paramètres sont actuellement définis pour calculer les mesures géodésiques comme indiqué dans l' API OpenLayers .
J'utilise des mesures géodésiques plutôt que des mesures planes car lors des tests utilisateurs, les gens ont remis en question les mesures de l'outil pour des distances qu'ils connaissaient déjà (comme la conduite entre les villes).
Une nouvelle fonctionnalité du site est de permettre à un utilisateur de dessiner un cercle sur la carte d'un rayon défini. OpenLayers permet uniquement de dessiner des cercles en utilisant des distances planes. Ainsi, lorsqu'un utilisateur mesure le cercle avec l'outil de mesure géodésique, les valeurs ne correspondent pas. Dans l'image ci-dessous, le rayon plan du cercle est de 10 km, mais la mesure de la ligne géodésique pour le diamètre est de 12 km.
De toute évidence, cela laissera un utilisateur (et moi-même) se demander ce qui est correct.
En regardant cette réponse, il semble que la plupart des systèmes SIG de bureau "ignorent" ce problème et renvoient des mesures et des distances planes. Quelle est donc la meilleure pratique en termes d'interface utilisateur et de précision pour gérer les mesures planaires et géodésiques?
Mise à jour
J'ai trouvé cet exemple Google qui illustre le problème des rayons et de la projection Mercator:
http://maps.forum.nu/gm_sensitive_circle2.html
Le code JavaScript pour dessiner le cercle est le suivant:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
Ce cercle tient-il compte de la courbure de la terre?
Mise à jour finale
Code de travail publié sur http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers
la source
Réponses:
Si vous êtes à la maison dans le navigateur, vous pouvez obtenir un "cercle" (il ne sera pas rond à l'écran en raison de votre projection; plutôt approximé par un polygone avec autant de points que vous souhaitez dessiner), utilisez a la forme directe des calculs géodésiques: étant donné un point, une direction (azimut) et une distance, il vous donne le point résultant. Détails sanglants: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method
On dirait que quelqu'un a déjà fait une traduction en javascript: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html . Quel chanceux êtes-vous!
Pour finir les choses:
À votre santé!
la source
Pour obtenir un cercle géodésique, vous pouvez utiliser l' opération de tampon dans le service de géométrie d'ESRI.
Un document librement accessible est disponible ici .
la source