Ich entwickle gerade eine OpenLayers Kartierungsseite. Messungen können mit einem Linien- und einem Flächenwerkzeug durchgeführt werden. Beide sind derzeit so eingestellt, dass sie geodätische Messungen wie in der OpenLayers-API beschrieben berechnen .
Ich verwende eher geodätische Messungen als planare Messungen, da bei Benutzertests die Leute die Messungen des Werkzeugs für Entfernungen in Frage stellten, die sie bereits kannten (z. B. Fahren zwischen Städten).
Eine neue Funktion der Site besteht darin, dass ein Benutzer einen Kreis auf der Karte mit einem festgelegten Radius zeichnen kann. OpenLayers erlaubt nur das Zeichnen von Kreisen mit planaren Abständen. Wenn ein Benutzer den Kreis mit dem geodätischen Messwerkzeug misst, stimmen die Werte nicht überein. In der Abbildung unten beträgt der planare Radius des Kreises 10 km, die Messung der geodätischen Linie für den Durchmesser beträgt jedoch 12 km.
Dies wird einen Benutzer (und mich) zweifeln lassen, was richtig ist.
Wenn man sich diese Antwort ansieht, scheinen die meisten Desktop-GIS-Systeme dieses Problem zu "ignorieren" und planare Messungen und Entfernungen zurückzugeben. Was ist die beste Vorgehensweise in Bezug auf Benutzeroberfläche und Genauigkeit für planare und geodätische Messungen?
Aktualisieren
Ich habe dieses Google-Beispiel gefunden, das das Problem der Radien und der Mercator-Projektion veranschaulicht:
http://maps.forum.nu/gm_sensitive_circle2.html
Der JavaScript-Code zum Zeichnen des Kreises lautet wie folgt:
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);
}
Berücksichtigt dieser Kreis die Krümmung der Erde?
Endgültiges Update
Arbeitscode unter http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers
quelle
Antworten:
Wenn Sie im Browser zu Hause brauen, können Sie einen "Kreis" (der auf dem Bildschirm aufgrund Ihrer Projektion nicht rund ist, sondern durch ein Polygon mit so vielen Punkten angenähert wird, wie Sie zeichnen möchten) verwenden a die direkte Form von geodätischen Berechnungen: Wenn Sie einen Punkt, eine Richtung (Azimut) und eine Entfernung angeben, erhalten Sie den resultierenden Punkt. Gory Details: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method
Anscheinend hat bereits jemand eine Übersetzung in Javascript vorgenommen: http://www.movable Type.co.uk/scripts/latlong-vincenty-direct.html . Du Glückspilz!
So beenden Sie die Sache:
Prost!
quelle
Um einen geodätischen Kreis zu erhalten, können Sie die Pufferoperation im ESRI-Geometrie-Service verwenden.
Eine frei zugängliche finden Sie hier .
quelle