Wie bekomme ich die Breitengrad und Längengrad von x, y auf einer Mercator-Karte (JPEG)?
Habe ich eine Mercator-Projektion Karte als JPEG und ich würde gerne wissen, wie die Beziehung zwischen einer gegebenen x, y-Koordinate zu seiner Breite und Länge. Ich habe die Gudermannian Funktion, aber ich weiß es ehrlich gesagt nicht verstehen, wie man die Funktion und wenden Sie es. Nämlich, welcher Eingang es erwartet? Die Umsetzung fand ich (JavaScript -) scheint ein Bereich zwischen -PI und PI, aber was ist die Korrelation zwischen den y-Wert in Pixel und das Sortiment?
Also, ich fand diese Funktion, die eine Breite und gibt das Feld für die Google Maps, die auch verwendet Mercator. Es scheint, dass, wenn ich wusste, wie man die inverse dieser Funktion, würde ich ziemlich in der Nähe mit meiner Antwort.
/*<summary>Get the vertical tile number from a latitude
using Mercator projection formula</summary>*/
private int getMercatorLatitude(double lati)
{
double maxlat = Math.PI;
double lat = lati;
if (lat > 90) lat = lat - 180;
if (lat < -90) lat = lat + 180;
//conversion degre=>radians
double phi = Math.PI * lat /180;
double res;
//double temp = Math.Tan(Math.PI /4 - phi /2);
//res = Math.Log(temp);
res = 0.5 * Math.Log((1 + Math.Sin(phi)) /(1 - Math.Sin(phi)));
double maxTileY = Math.Pow(2, zoom);
int result = (int)(((1 - res /maxlat) /2) * (maxTileY));
return (result);
}
- Wenn ich mich richtig erinnere, verwendet google eine equirectangular Projektion, nicht der mercator.
- Sowohl Virtual Earth und Google Mercator.
- Auch die max-nützliche Breite bei Verwendung von Mercator ist nicht +-90 Grad, es ist etwa +-85.05112878 Grad. Der Wert ist unendlich an den Polen, so haben Sie es Mütze und ignorieren den Polen.
- Um wirklich das problem, Sie müssen auch wissen, die zoom-Stufe bei der Arbeit mit Fliesen.
- Ich bin ein wenig unklar, auf dieser. Willst du (x, y) -> (lat, long) oder (lat, lang) -> (x,y)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein code für Sie... Lassen Sie mich wissen, wenn Sie mehr Erklärung.
Google, etc., verwenden Sie "spherical Mercator", die Mercator-Projektion mit einem sphärischen Erde-Modell eher als die langsamere und komplexere elliptische Gleichungen.
Die Transformationen werden als Teil der OpenLayers-code:
http://docs.openlayers.org/library/spherical_mercator.html
Erich Mirabal Antwort war völlig korrekt (wenn auch nicht ganz vollständig).
Ich habe es gerade getestet mit einem 'theoretischen 256x256 Mercator-Kachel' (Google einzelne Kachel-version der Weltkarte).
Hier ein wenig mehr code (JavaScript, aber einfach zu Folgen) zu verdeutlichen.
Ich Lebe in Australien, bei einer Breite von etwa -33°.
152.88327883810192
Wenn Sie damit rechnen, 152 Pixel nach unten von der Spitze der Fliesen, die Sie finden Australien. Ich habe auch verifiziert, dass diese Antwort richtig ist, indem Sie vergleichen Sie das Ergebnis mit dem bekannt guten Funktionen.
Sicher zu sein, können wir Umgekehrt, dass die Berechnung:
Und wir sind zurückgekehrt -32.99613291758226.
Der schwierige Teil ist nicht in der Gudermannian Funktion, aber in der Umrechnung zwischen zwei Skalen.
Glücklicherweise als ziemlich faul und hassen diese Art der Skalierung Probleme, ich hatte auch schon eine kleine Funktion zu tun, die chaotisch Umstellung für mich.
... Und die JavaScript-Versionen der ursprünglichen Funktionen sind natürlich:
Ich getan habe, etwas ähnliches. Vor allem wenn man ein Bild von einem Teil der Welt. Eine zugeschnittene Karte oder einfach nur nicht eine komplette Weltkarte: https://stackoverflow.com/a/10401734/730823
Einen wichtigen Hinweis bei der Durchführung einer inversen ist, dass es keine solche Sache wie "die mercator-Karte", wie es der Fall mit den meisten anderen Kartenprojektionen. Jeder mercator-Karte in Existenz ist unterschiedlich, je nach dem Eingang phi-Wert. Laut wikipedia nutzt google 85.051129, und anderen Karten-Anbietern verwenden 85.05113. Daher ist die Eingabe von Werten zu Gudermannian muss angepasst werden auf z.B. GudermannianInv(85.05113).