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);
    }
Si je me souviens bien, google utilise une projection équirectangulaire, pas la projection de mercator.
À 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