mit zu beginnen, ich glaube, Sie haben Ihre latitude und longitude umgekehrt. Der Längengrad misst X, und der Breitengrad misst Y.
Der Breitengrad lässt sich leicht in eine Nord-Süd-Entfernung umwandeln. Wir wissen, dass 360 Grad ein vollständiger Kreis um die Erde durch die Pole ist, und that distance is 40008000 meters. Solange Sie die Fehler nicht berücksichtigen müssen, weil die Erde nicht perfekt kugelförmig ist, lautet die Formel deltaLatitude * 40008000/360
.
Der schwierige Teil ist die Umwandlung der Länge in X, wie Sie vermutet haben. Da es von der Breite abhängt, die Sie benötigen, um zu entscheiden, welchen Breitengrad Sie verwenden möchten, können Sie den Breitengrad Ihres Ursprungs, den Breitengrad Ihres Ziels oder einen beliebigen Punkt dazwischen wählen. Der Umfang am Äquator (Breite 0) beträgt 40075160 Meter. Der Umfang eines Kreises bei einem gegebenen Breitengrad ist proportional zum Kosinus, so dass die Formel deltaLongitude * 40075160 * cos(latitude)/360
lautet.
Bearbeiten: Ihr Kommentar zeigt an, dass Sie Probleme mit der Längengradformel hatten; Sie könnten Grad anstelle von Radiant im Aufruf zu cos
verwendet haben, das ist ein häufiger Anfängerfehler. Um sicherzugehen, dass es keine Zweideutigkeiten gibt, hier ist der Arbeitscode in Python.
def asRadians(degrees):
return degrees * pi/180
def getXYpos(relativeNullPoint, p):
""" Calculates X and Y distances in meters.
"""
deltaLatitude = p.latitude - relativeNullPoint.latitude
deltaLongitude = p.longitude - relativeNullPoint.longitude
latitudeCircumference = 40075160 * cos(asRadians(relativeNullPoint.latitude))
resultX = deltaLongitude * latitudeCircumference/360
resultY = deltaLatitude * 40008000/360
return resultX, resultY
Ich entschied mich für den relativenNullPoint-Breitengrad für die X-Berechnung. Dies hat den Vorteil, dass wenn Sie mehrere Punkte mit der gleichen Länge konvertieren, sie das gleiche X haben; Nord-Süd-Linien werden vertikal sein.
Nochmals bearbeiten: Ich hätte darauf hingewiesen, dass dies eine sehr einfache Formel ist und Sie sollten ihre Grenzen kennen. Offensichtlich ist die Erde nicht flach, so dass jeder Versuch, sie auf XY-Koordinaten abzubilden, einige Kompromisse mit sich bringt. Die oben abgeleitete Formel I funktioniert am besten, wenn die Fläche, die Sie konvertieren, klein genug ist, um flach zu sein, und die leichte Krümmung und Nichtparallelität von Nord-Süd-Linien ignoriert werden kann. Es gibt eine ganze Wissenschaft, um Projektionen zu kartografieren; Wenn Sie einige Möglichkeiten sehen möchten, wäre ein guter Ort zum Starten Wikipedia. Diese spezifische Projektion ist bekannt als the Equirectangular projection, mit etwas zusätzlicher Skalierung.
ok ich habe das versucht, und die Breitengradberechnung ist sehr genau :) aber die Längenmeterwerte sind immer den Faktor 1,3 zu groß für den Breitengrad im Test. Ich denke, es ist nicht eine gute Idee, nur durch diesen Faktor zu teilen, weil es wahrscheinlich für verschiedene Breitengrade unterschiedlich sein wird, vielleicht muss der Erdumfang in Bezug auf den aktuellen Breitengrad berechnet werden? –
@Sponge, überprüfen Sie das Update. –
vielen dank! funktioniert gut :) –