2010-09-19 9 views

Antwort

2

Zusätzlich zu den obigen Antworten gibt es die Open-Source-Bibliothek proj4js, die Transformationen zwischen verschiedenen Kartenprojektionen durchführt.Es wird intern von OpenLayers für diese Art von Dingen verwendet und unterstützt eine Reihe von populären Projektionen und Koordinatensystemen.

+1

weiter denkt, vorausgesetzt, Sie Bitmap eine Standard-Projektion ist, sollte es funktionieren, aber Sie würden Ihre eigenen Projektionsparameter (Meridian, Skalierung, usw.) haben zu bestimmen. Dies sollte möglich sein, aber möglicherweise nicht für den Kartenprojektionsanfänger. – winwaed

+1

Danke, ich konnte die benötigten Formeln aus der erwähnten Bibliothek extrahieren :) – gucki

0

Sie werden es nicht leicht finden, wenn Sie auf einem sehr kleinen arbeiten Maßstab (und in der Nähe des Äquators). Wikipedia's Geographic coordinate system ist ein guter Anfang ...

Der leichtere Weg könnte sein, etwas wie web mapping zu verwenden und bei deinen Breiten und Längen zu bleiben.

3

Es gibt viele Möglichkeiten, dieses Problem mit unterschiedlichem Grad an Präzision zu nähern. Sie laufen jedoch alle darauf hinaus, eine Projektion durchzuführen, die der Ihrer Karte entspricht.

Wenn Sie wissen, dass Ihre Karte von der Mercator-Projektionssorte ist, können die Breiten-/Längenkoordinaten einfach als X/Y behandelt, skaliert und entsprechend übersetzt werden. Das heißt, Sie würden eine einfache Axt + B und CY + D finden, die den Job erledigen.

Wenn Ihre Karte keine Mercator-Projektion ist (wie es wahrscheinlich nicht ist, wenn sie versucht, die Skala konsistent zu machen, wie es scheint), dann ist es am besten anzunehmen, dass es sich um eine "erdnahe" Projektion handelt . (Dies funktioniert bei kleinen Landmassen OK.) In diesem Fall müssen Sie das Lat/Long zuerst in ein dreidimensionales Koordinatensystem projizieren.

z=sin(lat) 
x=cos(lat)*sin(long) 
y=cos(lat)*cos(long) 

Positive z zeigt auf den Nordpol. Positive y zeigt auf 0, 0 und positive x Punkte auf lat 0 lang 90 (Ost) und positive lat/long sind Norden und Osten. Natürlich müssen Sie zuerst in Radiant konvertieren.

All dies geht von einer kugelförmigen Erde aus, die nicht genau stimmt, aber nahe genug, es sei denn, Sie feuern Mörsergranaten mit großer Reichweite ab.

Wie auch immer, sobald Sie Ihre XYZ haben, dann müssen Sie für die Karte drehen und skalieren. Um die Z-Achse zu drehen, subtrahieren Sie einfach die Basislänge, bevor Sie in drei Dimensionen projizieren. Tun Sie dies, um Ihre Karte auf Null-Längengrad für einfachste Mathematik zu zentrieren.

Sobald Sie dies getan haben, müssen Sie nur noch den Globus vorwärts drehen, bis Ihre ursprüngliche Karte nach vorne zeigt. Tun Sie dies mit einer 2-d-Drehung in der y-z-Achse. Verwenden Sie http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections, um diesen Teil herauszufinden.

Schließlich werden Ihre x, z-Koordinaten ziemlich gut mit den x-, y-Koordinaten Ihrer Karte übereinstimmen, für eine angemessene Skalierung/Umsetzung, wie zuvor beschrieben.