verwandeln Länge Breite in Meter
Brauche ich eine Funktion, die Karten, gps-Positionen, um x/y-Werte wie diese:
getXYpos(GeoPoint relativeNullPoint, GeoPoint p){
deltaLatitude=p.latitude-relativeNullPoint.latitude;
deltaLongitude=p.longitude-relativeNullPoint.longitude;
...
resultX=latitude (or west to east) distance in meters from p to relativeNullPoint
resultY=longitude (or south to north) distance in meters from p to relativeNullPoint
}
ich habe gesehen, einige Implementierungen von "Abstand von zwei geoPoints" aber Sie alle nur die Berechnung der Luftlinien-Entfernung.
ich denke, die deltaLongitude umgewandelt werden kann, in Metern direkt, aber der deltaLatitude richtet sich in die Länge. weiß jemand, wie dieses problem gelöst werden kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
So starten Sie mit, ich glaube, Sie haben Ihre latitude und Länge Umgekehrt. Längen-Maßnahmen X-und Breitengrad Maßnahmen, Y.
Die Breite ist leicht zu drehen in Nord-Süd-Abstand. Wir wissen, dass 360 Grad einen vollständigen Kreis um die Erde durch die Pole, und die Strecke 40008000 Meter. So lange, wie Sie nicht brauchen, um für die Fehler, die durch die Erde nicht perfekt kugelförmig, die Formel ist
deltaLatitude * 40008000 /360
.Der schwierige Teil ist die Konvertierung von Längen-X, wie Sie vermutete. Da kommt es auf die Breite, die Sie benötigen, um zu entscheiden, welche Breite Sie gehen zu verwenden - Sie können wählen, den Breitengrad Ihrer Herkunft, die Breite Ihres Reiseziel, oder einem beliebigen Punkt dazwischen. Der Umfang am äquator (Breitengrad 0) ist 40075160 Meter. Der Umfang eines Kreises bei gegebener Breite wird proportional zum Kosinus, also die Formel
deltaLongitude * 40075160 * cos(latitude) /360
.Edit: Ihr Kommentar zeigt an, Sie hatten einige Probleme mit der Länge der Formel; Sie möglicherweise verwendet haben Grad statt Bogenmaß im Aufruf
cos
, das ist eine gemeinsame rookie Fehler. Um sicherzustellen, gibt es keine Mehrdeutigkeiten, hier funktioniert der code in Python.Bleibe ich bei der relativeNullPoint Breite für die X-Berechnung. Dies hat den Vorteil, dass, wenn Sie konvertieren Sie mehrere Punkte mit der gleichen Länge, Sie haben die gleiche X; Nord-Süd-Linien vertikal.
Bearbeiten wieder: ich sollte haben darauf hingewiesen, dass dies eine sehr einfache Formel, und Sie sollten wissen, seine Grenzen. Offensichtlich ist die Erde ist nicht flach, so dass jeder Versuch, eine Karte zu XY-Koordinaten beinhaltet einige Kompromisse. Die Formel, die ich oben gefundenen funktioniert am besten, wenn das Gebiet, das Sie konvertieren, ist klein genug, zu prüfen, flache, und wo die leichte Krümmung und die nicht-Parallelität der Nord-Süd-Zeilen können ignoriert werden. Es gibt eine ganze Wissenschaft zu Kartenprojektionen; wenn Sie sehen wollen, einige Möglichkeiten, die ein guter Ort, um zu starten wäre Wikipedia. Diese spezifische Projektion ist bekannt als die Equirectangular Projektion, mit einigen zusätzlichen Skalierung.
Harvesine Funktion ist, was Sie brauchen.
Check it out auf beweglich-Typen gibt Es Entfernung, Peilung, Mittelpunkt und andere Sachen Javascript-Implementierung arbeitet wirklich gut.
UPDATE
Habe ich gefunden, eine Java-Implementierung von Harvesine Funktion in einem anderen stackoverflow-Frage
Gibt es Bibliotheken, die auf jstott.mich.uk für PHP, Java und Javascript, die dies tun, z.B.