В моем веб-приложении у меня есть координаты, которые я бы хотел изменить, чтобы имитировать «масштабирование» на картах google. Кажется, что масштабирование взад и вперед по картам google просто удваивает или уменьшает каждую сторону ограничивающей рамки. Так что моя функция, чтобы сделать это на сервере выглядит следующим образом:Алгоритм масштабирования Google Maps
private static decimal[] ZoomIn(decimal latMax, decimal lngMin, decimal latMin, decimal lngMax)
{
decimal lngAdjustment = (lngMax - lngMin) * .25m;
decimal latAdjustment = (latMax - latMin) * .25m;
return new[]
{
// North
latMax - latAdjustment,
// West
lngMin + lngAdjustment,
// South
latMin + latAdjustment,
// East
lngMax - lngAdjustment
};
}
Проблема с этим подходом является latAdjustment, что я делаю. По сравнению с фактическим увеличением с помощью управления картами google, это становится довольно точным при увеличении до уровня города. Тем не менее, это менее точно, чем больше вид увеличен. Я предполагаю, что это связано с проекцией Меркатора Земли, которую используют карты Google. Кто-нибудь знает о лучшей формуле или методе для имитации «увеличения»?
Обновление: Моя проблема связана не с тем, чтобы не знать правильную формулу, а по карте Google. Позвольте мне проиллюстрировать использование некоторых номеров примеров.
Возьмите Чикаго, сосредоточенных в 41.8563226156679, -87,7339862646484
И ограничительную рамку, окружающую эту точку:
- West: -87,984955197753800
- Восток: -87,483017331542900
- Юг: 41,546931599561100
- Север: 42.164224124684300
Наблюдая поведение карты Google, это ограничивающее окно увеличено на одном уровне будет: - Запад: -87,859470731201100 - Восток: -87,608501798095600 - Юг: 41,701813184067600 - Север: 42,010459667660800
(центр остался неизменным, нет отклонения от движения мыши и т. д. Я просто использовал кнопку ручного масштабирования, а не мышь)
Используя мою формулу выше, значения долготы выйдут правильно. Пример:
запад = запад + (запад - восток) * .25 -87,984955197753800 + ((-87,483017331542900 - -87,984955197753800) * .25) = -87,859470731201075
Однако та же формула не будет работать, если имея дело с широтой. Он находится рядом с правильными значениями, но достаточно, чтобы карта заметно изменилась. Этот эффект хуже с большими ограничивающими прямоугольниками и/или когда широта дальше от экватора. Я предполагаю, что это связано с проекцией мерцатора Земли. Класс Trig был давным-давно для меня, и на данный момент я не могу найти подходящую формулу для широты масштабирования для этой ситуации.
Является ли _only_ 'latAdjustment' неточным? – bcdan
@bcdan yes, lngAdjustment is corrent –
Похоже, что координаты края экрана неправильные. Каков ваш метод тестирования? Компьютер-зум? Прокрутка мыши? – bcdan