Ho una mappa di proiezione Mercator come JPEG e vorrei sapere come correlare una determinata coordinata x, y alla sua latitudine e longitudine. Ho esaminato la funzione Gudermannian ma sinceramente non capisco come prendere quella funzione e applicarla. Vale a dire, quale input si aspetta? L'implementazione che ho trovato (JavaScript) sembra prendere un intervallo tra -PI e PI, ma qual è la correlazione tra il mio valore y in pixel e quell'intervallo?Come posso ottenere latitudine, longitudine da x, y su una mappa Mercator (JPEG)?
Inoltre, ho trovato questa funzione che prende una latitudine e restituisce la tessera per Google Maps, che utilizza anche Mercator. Sembrerebbe che se sapessi come invertire questa funzione, sarei molto vicino ad avere la mia risposta.
/*<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);
}
Se non ricordo male, Google utilizza una proiezione equirettangolare, non il Mercator. –
Sia Virtual Earth che Google utilizzano Mercator. –
Inoltre, la massima latitudine utile quando si usa Mercator non è di + -90 gradi - è di circa + -85.05112878 gradi. Il valore è infinito ai poli, quindi devi tapparlo e ignorare i poli. –