Я работал над проектом, который включает добавление большого количества оверлеев в mkmapkit.
В настоящее время у меня есть рабочая формула для преобразования широты / долготы в xy, но я нашел, что теперь мне нужно сделать обратное.
Код, который я сейчас использую:
-(CGPoint)calculateXYLatitude:(float)latitude longitude:(float)longitude zoom:(int)zoom
{
CGPoint p;
float zm = (float)zoom;
float offset = (pow(2.0, zm-1.0));
float radius = offset/M_PI;
p.x = (offset + radius * longitude * M_PI / 180.0);
p.y = (offset - radius * logf((1.0 + sinf(latitude * M_PI / 180.0)) / (1.0 - sinf(latitude * M_PI / 180.0))) / 2.0);
return p;
}
Мне удалось перевернуть первую часть этой функции, это только последняя строка, которая поставила меня в тупик.
Пока у меня есть:
-(float)calculateLongitudeFromX:(float)x zoom:(int)zoom
{
float zm = (float)zoom;
float offset = (pow(2.0, zm-1.0));
float radius = offset/M_PI;
float longitude = (x - offset) * 180 / radius / M_PI;
return longitude;
}
Обе вышеперечисленные функции протестированы и отлично работают в моем проекте.
Мне нужно создать - (с плавающей точкой) CalculateLatitudeFromY: (с плавающей точкой) Y zoom: (int) метод масштабирования.
Любая помощь будет принята с благодарностью.