У меня есть проекционная карта Меркатора как JPEG, и я хотел бы знать, как связать заданную координату x, y с ее широтой и долготой. Я посмотрел на функцию Гудерманна, но я, честно говоря, не понимаю, как принять эту функцию и применить ее. А именно, какой вклад он ожидает? Реализация, которую я нашел (JavaScript), кажется, занимает диапазон между -PI и PI, но какова корреляция между моим значением y в пикселях и этим диапазоном?Как я могу получить широту, долготу от x, y на карте Меркатора (JPEG)?
Кроме того, я нашел эту функцию, которая занимает широту и возвращает плитку для Карт Google, в которой также используется Mercator. Казалось бы, если бы я знал, как отменить эту функцию, я был бы очень близок к тому, чтобы ответить.
/*<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);
}
Если я правильно помню, Google использует эквидистантную проекцию, а не Меркатора. –
Как Virtual Earth, так и Google используют Mercator. –
Кроме того, максимальная полезная широта при использовании Меркатора не составляет + -90 градусов - это примерно + -85.05112878 градусов. Величина - бесконечность на полюсах, поэтому вам нужно закрыть ее и игнорировать полюса. –