Comment puis-je obtenir la latitude, la longitude à partir de x, y sur une carte de Mercator (JPEG)?
J'ai une carte en projection de Mercator en JPEG et je voudrais savoir comment relier un x, y coordonnées de latitude et de longitude. J'ai regardé le Gudermannian fonction, mais honnêtement, je ne comprends pas comment prendre cette fonction et de l'appliquer. À savoir, ce qui d'entrée est-il attendre? La mise en œuvre que j'ai trouvé (JavaScript) semble prendre une fourchette comprise entre -PI et PI, mais quelle est la corrélation entre mon y-valeur en pixels et la portée?
Aussi, j'ai trouvé une fonction qui prend une latitude et retourne la tuile pour Google Maps, qui utilise également Mercator. Il semblerait que si je savais comment à l'inverse de cette fonction, je serais assez proche pour avoir ma réponse.
/*<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);
}
À la fois Virtuelle de la Terre et de l'utilisation de Google Mercator.
Aussi, le max utiles latitude lors de l'utilisation de Mercator n'est pas +-90 degrés - il est d'environ +-85.05112878 degrés. La valeur est l'infini dans les pôles, vous avez pour couronner le tout et d'ignorer les pôles.
Pour vraiment terminer le problème, vous devez également connaître le niveau de zoom lorsque l'on travaille avec des tuiles.
Je suis un peu dans le flou sur ce. Voulez-vous faire (x, y) -> (lat, long) ou (lat, long) -> (x,y)?
OriginalL'auteur Matthew Wensing | 2009-07-22
Vous devez vous connecter pour publier un commentaire.
Voici un code pour vous... Laissez-moi savoir si vous avez besoin de plus d'explication.
Donc, si j'ai une carte de mercator image 1588 pixels de haut, et je veux savoir la latitude où y = 677, je voudrais comprendre 677 en termes de +PI-PI et appel Gudermannian(y_in_terms_of_pi)? Je me rends compte que c'est faux, mais vous pouvez voir où je suis bloqué mentalement ici ...
Par exemple, sur une 1588 pixels en hauteur cartographique mercator, 30.0 N est de 615 pixels à partir du haut. Mais si j'exprime 615 en termes de linéaire d'une gamme de PI (0)- PI (1588), j'ai 615 -> 0.70824318. Et l'appel de la ci-dessus Gudermannian(0.70824318) les rendements 37.5587, pas de 30,0.
Évidemment, le problème est la " exprimer 615 en termes de linéaire de plage. Alors, comment dois-je faire?
En gros, vous avez à faire quelque chose comme ceci: lat = Gudermannian(Ymax - ((y / Hauteur) * (Ymax - Ymin))); et Ymax Ymin sont donnés en prenant l'inverse de la Gudermannian de +-85.05112878 (ou de ce que les limites max et min des latitudes de votre image) et la Hauteur est la taille de votre image. Si vous êtes carrelage, cela permettra également de travailler aussi longtemps que vous remplacez le et Ymax Ymin avec la tuile limites et de la Hauteur avec la taille de la vignette. Cela fait-il sens?
OriginalL'auteur Erich Mirabal
Google, etc., utiliser "spherical Mercator", la projection de Mercator à l'aide d'une Terre sphérique modèle plutôt que le plus lent et plus complexe, équations elliptiques.
Les transformations sont disponibles dans le cadre de la OpenLayers code:
http://docs.openlayers.org/library/spherical_mercator.html
OriginalL'auteur Tim Sylvester
Erich Mirabal réponse était tout à fait correct (si pas complètement terminée).
Je viens de tester à l'aide d'un "théorique 256x256 Mercator tuile' (Google tuile unique version de la carte du monde).
Voici un peu plus de code (JavaScript, mais facile à suivre) afin d'élucider.
J'habite en Australie, à une latitude d'environ -33°.
152.88327883810192
Si vous comptez 152 pixels vers le bas à partir du haut de la tuile, vous trouverez l'Australie. J'ai aussi vérifié cette réponse est correcte en comparant le résultat de bonnes fonctions.
Pour être sûr, on peut inverser le calcul:
Et nous sommes retournés -32.99613291758226.
La partie la plus délicate n'est pas dans la Gudermannian fonction, mais dans la conversion entre les deux échelles.
Heureusement, étant plutôt paresseux, et détestant ce genre de mise à l'échelle des problèmes, j'ai déjà eu un peu de fonction pour le faire désordre de conversion pour moi.
Et le JavaScript les versions de l'origine des fonctions sont naturellement:
OriginalL'auteur Orwellophile
J'ai fait quelque chose de similaire. Surtout si vous avez une image à partir d'une partie du monde. Un recadrée carte ou une carte du monde: https://stackoverflow.com/a/10401734/730823
OriginalL'auteur Raphael
Une remarque importante lors de l'exécution d'un inverse est qu'il n'y a pas une telle chose comme "la cartographique mercator" comme c'est le cas avec la plupart des autres projections cartographiques. Chaque cartographique mercator dans l'existence est différente en fonction de l'entrée phi valeur. Selon wikipédia google utilise 85.051129, et d'autres carte des prestataires de 85.05113. Par conséquent, les valeurs d'entrée pour Gudermannian doit être adaptée en fonction sur, par exemple, GudermannianInv(85.05113).
OriginalL'auteur J Tileson