Ich habe einige erdzentrierte Koordinatenpunkte als Breiten- und Längengrad ( WGS-84 ).
Wie kann ich sie in kartesische Koordinaten (x, y, z) mit dem Ursprung im Erdmittelpunkt umwandeln?
mapping
geometry
geospatial
Daphshez
quelle
quelle
Antworten:
Ich habe kürzlich etwas Ähnliches mit der "Haversine-Formel" für WGS-84-Daten gemacht, die eine Ableitung des "Gesetzes der Haversine" mit sehr zufriedenstellenden Ergebnissen ist.
Ja, WGS-84 geht davon aus, dass die Erde ein Ellipsoid ist, aber ich glaube, dass Sie mit einem Ansatz wie der "Haversine-Formel" nur einen durchschnittlichen Fehler von etwa 0,5% erhalten, was in Ihrem Fall eine akzeptable Fehlermenge sein kann. Sie werden immer eine gewisse Fehlerquote haben, es sei denn, Sie sprechen von einer Entfernung von einigen Fuß und selbst dann gibt es theoretisch eine Krümmung der Erde ... Wenn Sie einen strengeren WGS-84-kompatiblen Ansatz benötigen, lesen Sie die "Vincenty-Formel".
Ich verstehe, woher Starblue kommt, aber bei guter Softwareentwicklung geht es oft um Kompromisse. Daher hängt alles von der Genauigkeit ab, die Sie für Ihre Arbeit benötigen. Beispielsweise kann das aus der "Manhattan Distance Formula" berechnete Ergebnis gegenüber dem Ergebnis aus der "Distance Formula" für bestimmte Situationen besser sein, da es rechnerisch kostengünstiger ist. Überlegen Sie: "Welcher Punkt ist am nächsten?" Szenarien, in denen Sie keine genaue Entfernungsmessung benötigen.
In Bezug auf die "Haversine-Formel" ist sie einfach zu implementieren und gut, da sie "sphärische Trigonometrie" anstelle eines "Law of Cosines" -basierten Ansatzes verwendet, der auf zweidimensionaler Trigonometrie basiert. Daher erhalten Sie ein gutes Gleichgewicht der Genauigkeit über Komplexität.
Ein Gentlemen namens Chris Veness hat eine großartige Website unter http://www.movable-type.co.uk/scripts/latlong.html , die einige der Konzepte erklärt, an denen Sie interessiert sind, und verschiedene programmatische Implementierungen demonstriert. Dies sollte auch Ihre X / Y-Konvertierungsfrage beantworten.
quelle
Hier ist die Antwort, die ich gefunden habe:
Nur um die Definition im kartesischen Koordinatensystem zu vervollständigen:
Die Konvertierung ist:
Wobei R der ungefähre Erdradius ist (z. B. 6371 km).
Wenn Ihre trigonometrischen Funktionen Bogenmaß erwarten (was sie wahrscheinlich tun), müssen Sie zuerst Ihren Längen- und Breitengrad in Bogenmaß umrechnen. Sie benötigen offensichtlich eine Dezimaldarstellung, nicht Grad \ Minuten \ Sekunden (siehe z. B. hier zur Konvertierung).
Die Formel für die Rückkonvertierung:
asin ist natürlich arc sinus. Lesen Sie über atan2 in Wikipedia . Vergessen Sie nicht, vom Bogenmaß in Grad zurückzurechnen.
Diese Seite enthält C # -Code dafür (beachten Sie, dass er sich stark von den Formeln unterscheidet) sowie eine Erklärung und ein schönes Diagramm, warum dies korrekt ist.
quelle
Theorie für die Konvertierung
GPS(WGS84)
in kartesische Koordinaten https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinatesFolgendes verwende ich:
Ich habe einen VB-Code angehängt , den ich geschrieben habe:
Bitte beachten Sie, dass die
h
Höhe über dem liegtWGS 84 ellipsoid
.Normalerweise
GPS
geben wirH
von obenMSL
Höhe. DieMSL
Höhe hat , um zu Höhe umgewandelt werden ,h
über dieWGS 84 ellipsoid
unter Verwendung des geopotentielle ModellEGM96
( Lemoine et al 1998 ).Dazu wird ein Raster der Geoidhöhendatei mit einer räumlichen Auflösung von 15 Bogenminuten interpoliert.
Oder wenn Sie ein gewisses Maß haben professionelles
GPS
hat AltitudeH
( msl, heigh über NHN ) undUNDULATION
die Beziehung zwischen demgeoid
und demellipsoid (m)
von dem gewählten Bezugspunkt Ausgang aus dem internen Tabelle. du kannst bekommenh = H(msl) + undulation
Zu XYZ durch kartesische Koordinaten:
quelle
Die proj.4- Software bietet ein Befehlszeilenprogramm, das die Konvertierung durchführen kann, z
Es bietet auch eine C-API . Insbesondere führt die Funktion
pj_geodetic_to_geocentric
die Konvertierung durch, ohne zuerst ein Projektionsobjekt einrichten zu müssen.quelle
In python3.x kann Folgendes ausgeführt werden:
quelle
Wenn Sie Koordinaten basierend auf einem Ellipsoid und nicht auf einer Kugel erhalten möchten, besuchen Sie http://en.wikipedia.org/wiki/Geodetic_system#From_geodetic_to_ECEF. Dort finden Sie die Formeln sowie die WGS84-Konstanten, die Sie für die Konvertierung benötigen .
Die dortigen Formeln berücksichtigen auch die Höhe relativ zur Referenzellipsoidoberfläche (nützlich, wenn Sie Höhendaten von einem GPS-Gerät erhalten).
quelle
Warum etwas implementieren, das bereits implementiert und getestet wurde?
Zum einen verfügt C # über die NetTopologySuite , den .NET-Port der JTS Topology Suite.
Insbesondere haben Sie einen schwerwiegenden Fehler in Ihrer Berechnung. Die Erde ist keine perfekte Kugel, und die Annäherung des Erdradius schneidet sie möglicherweise nicht für genaue Messungen.
Wenn es in einigen Fällen akzeptabel ist, Homebrew-Funktionen zu verwenden, ist GIS ein gutes Beispiel für ein Gebiet, in dem die Verwendung einer zuverlässigen, testgeprüften Bibliothek sehr bevorzugt wird.
quelle
quelle
java.lang.IllegalArgumentException: dimension must be <= 3
Sie können dies auf Java auf diese Weise tun.
quelle