2013-04-28 2 views
9

Ich möchte GPS-Position (Breitengrad, Längengrad) in x, y-Koordinaten konvertieren. Ich habe viele Links zu diesem Thema gefunden und angewendet, aber es gibt mir nicht die richtige Antwort!konvertieren von Breite, Länge in x, y

Ich befolge diese Schritte, um die Antwort zu testen: (1) Erstens nehme ich zwei Positionen und berechne den Abstand zwischen ihnen mit Karten. (2) wandeln Sie dann die zwei Positionen in x, y Koordinaten um. (3) dann wieder Abstand zwischen den beiden Punkten in den x, y Koordinaten berechnen und sehen, ob es mir das gleiche Ergebnis in Punkt (1) oder nicht geben.

eine der lösung ich fand das folgende, aber es gibt mir keine richtige antwort!

latitude = Math.PI * latitude/180; 
longitude = Math.PI * longitude/180; 

// adjust position by radians 
latitude -= 1.570795765134; // subtract 90 degrees (in radians) 

// and switch z and y 
xPos = (app.radius) * Math.sin(latitude) * Math.cos(longitude); 
zPos = (app.radius) * Math.sin(latitude) * Math.sin(longitude); 
yPos = (app.radius) * Math.cos(latitude); 

auch habe ich versucht, diese link aber bei mir noch nicht gut!

Hilfe bei der Konvertierung von (Breite, Länge) in (x, y)?

Danke,

Antwort

23

keine exakte Lösung existiert

Es von der Kugel auf die Ebene keine isometrische Karte ist. Wenn Sie Lat/Lon-Koordinaten von der Kugel in x/y-Koordinaten in der Ebene konvertieren, können Sie nicht hoffen, dass alle Längen durch diese Operation erhalten bleiben. Sie müssen eine Art Deformation akzeptieren. Es existieren viele verschiedene Kartenprojektionen, die unterschiedliche Kompromisse zwischen Längen-, Winkel- und Flächenerhaltungen eingehen können. Für kleinere Teile der Erdoberfläche ist transverse Mercator ziemlich üblich. Sie haben vielleicht schon von UTM gehört. Aber es gibt many more.

Die von Ihnen angegebenen Formeln berechnen x/y/z, d. H. Einen Punkt im 3D-Raum. Aber selbst dort würden Sie nicht automatisch die richtigen Entfernungen ermitteln. Der kürzeste Abstand zwischen zwei Punkten auf der Oberfläche der Kugel würde durch diese Kugel gehen, während Entfernungen auf der Erde meist geodätische Längen sind, die der Oberfläche folgen. Also werden sie länger sein.

Approximation für kleine Flächen

Wenn der Teil der Oberfläche der Erde, die Sie ist relativ klein zeichnen möchten, dann können Sie eine sehr einfache Annäherung verwenden. Sie können einfach die horizontale Achse x verwenden, um den Längengrad λ zu bezeichnen, die vertikale Achse y, um den Breitengrad φ zu bezeichnen. Das Verhältnis zwischen diesen sollte jedoch nicht 1: 1 sein. Stattdessen sollten Sie cos (φ) als Seitenverhältnis verwenden, wobei φ einen Breitengrad nahe der Mitte Ihrer Karte bezeichnet. Um von Winkeln (gemessen in Radianten) in Längen zu konvertieren, multiplizieren Sie mit dem Radius der Erde (die in diesem Modell als Kugel angenommen wird).

  • x = r λ cos (φ)
  • y = r φ

Dies ist einfach equirectangular projection.In den meisten Fällen ist es möglich, cos (φ) nur einmal zu berechnen, was nachfolgende Berechnungen von großen Punktzahlen wirklich billig macht.

+0

Dank @MvG, ich bin nicht mit diesen Themen beteiligt, ich brauche nur Punkte auf einer Karte zu zeichnen, diese Punkte die Abstände zwischen ihnen nicht mehr als 50 Meter, gibt es einen einfachen Weg dafür? – noor

+0

@ alsadi90: Ich habe meine Antwort aktualisiert, um eine einfache Approximation für Ihren Anwendungsfall zu beschreiben. – MvG

+0

Danke, aber ich habe diese Fragen: hier λ und φ im Bogenmaß? auch über φ0, was schlägst du mir vor, wenn mein Bereich fast 50mx50m ist: – noor