Geodätische Messungen für Kreisradien verwenden?


15

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.

Alt-Text

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


1
Hier muss etwas nicht stimmen. Die Differenz darf über einen so kurzen Abstand zwischen der Geraden und der dem Sphäroid folgenden Linie nicht 20% betragen. etwas anderes muss beteiligt sein.
Nicklas Avén

4
Bei der Projektion handelt es sich höchstwahrscheinlich um Mercator, der nur am Äquator eine echte Skalierung aufweist (im Allgemeinen ist es tatsächlich möglich, Mercator-Projektionen mit einer echten Skalierung an einer anderen Stelle (auf einem einzigen Breitengrad) zu haben, aber die meisten globalen Parametrisierungen verwenden den Äquator). Und die Skalierungsfehler für Mercator sind in der Tat sehr hoch (tatsächlich unendlich an den Polen) und nehmen zu, wenn Sie von der tatsächlichen Skalierungsbreite nach Norden / Süden fahren.
Paul Ramsey

Die Messungen wurden bei 52 Grad Nord durchgeführt und sind in der Tat in der Mercator-Projektion. Bedeutet dies, dass clientseitige Features, die in Mercator gezeichnet wurden, sehr ungenaue Bereiche und Längen zurückgeben, es sei denn, sie befinden sich in der Nähe des Äquators?
Geographika

1
Ja, das ist so ziemlich der Fall. Projizieren Sie die Daten in Metern oder Fuß in ein lokales Raster, und alles wird gut.
Ian Turton

2
@ Paul Guter Anruf. Diese Daten geben jedoch nur an, dass die Projektion zylindrisch ist, wovon der Mercator eine ist. In echten zylindrischen Projektionen entspricht die horizontale Verzerrung sec (Breitengrad). Nach dieser Formel ergibt sich eine Verzerrung von 20 / 12.13 bei einem Breitengrad von 52.66 Grad; das ist genau der Breitengrad von Limerick.
Whuber

Antworten:


8

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:

  • Entscheiden Sie, wie klobig (Anzahl der Eckpunkte, nennen Sie es n) Sie das Endergebnis haben möchten.
  • Teilen Sie 360 ​​Grad in n Teile.
  • Bilden Sie ein Polygon mit (für i im Bereich (n): polygon.add (vincenty_direct (start_point, i * 360 / n, distance))
  • Beheben Sie nachträglich möglicherweise einige Irritationen bei der Projektion und Planarisierung:
    • Wenn Sie die typische Webkartenprojektion verwenden, die Sie mit ziemlicher Sicherheit verwenden, wird das resultierende Polygon in vertikaler Richtung stark gedehnt, wenn es sich einer Stange nähert.
    • Wenn das Ergebnispolygon die internationale Datumsgrenze überschreitet, kommt es ebenfalls zu einer echten Verzweigung.

Prost!


1
Die Vincenty-Methode wurde OpenLayers bereits im utils-Namespace hinzugefügt - dev.openlayers.org/apidocs/files/OpenLayers/…. Dies und Ihre Erklärung, insbesondere der Peilungsparameter, klären dies auf. Vielen Dank!
Geographika

:) Lass mich wissen, wie irritierend die "Irritationen" sind. Im Idealfall wäre das Reparieren bereits Teil von OpenLayers und es würde einfach funktionieren, aber ich bin mir nicht sicher.
Dan S.

3

OpenLayers erlaubt nur das Zeichnen von Kreisen mit planaren Abständen

Um einen geodätischen Kreis zu erhalten, können Sie die Pufferoperation im ESRI-Geometrie-Service verwenden.

... wenn die Einheit linear ist, z. B. Fuß oder Meter, wird eine geodätische Pufferung durchgeführt

Eine frei zugängliche finden Sie hier .


Vielen Dank für den nützlichen Link. Ich werde sehen, ob ich den Service anrufen und die Funktion in JavaScript aktualisieren kann. Mein einziges Anliegen wäre es, mich auf einen Webdienst zu verlassen, der jederzeit deaktiviert werden kann. Ich nehme an, dass der geodätisch gepufferte Punkt der genaue / reale 10-km-Kreis wäre.
Geographika

Der Kreis sollte genau sein, ich würde ihn jedoch mit Ihrem Messwerkzeug überprüfen. Ich denke, der Geometrie-Service ist Teil einer standardmäßigen ArcGis-Server-Installation. Wenn dieser Server in den Ruhestand geht, sollte es im Web viele weitere geben, aus denen Sie auswählen können. google.com/…
Kirk Kuykendall
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.