2010-11-24 2 views

ответ

1

Карты Google используются через библиотеку javascript, которая работает на стороне клиента (внутри браузера). На стороне сервера вы ничего не можете сделать.

Однако вы можете посмотреть размер рамки в javascript (на стороне клиента) и соответственно установить уровень масштабирования.

Мне любопытно: что вы делаете с картами google на стороне сервера?

+0

Но как вы это сделаете? – elvenbyte 2011-06-21 15:11:32

6

@Peter На самом деле есть что-то, что вы можете сделать на стороне сервера, используя Java. Вы можете рассчитать минимальные и максимальные значения широты/долготы от вашего ограничивающего прямоугольника, а затем использовать следующий код:

int zoomLevel; 
double latDiff = latMax - latMin; 
double lngDiff = lngMax - lngMin; 

double maxDiff = (lngDiff > latDiff) ? lngDiff : latDiff; 
if (maxDiff < 360/Math.pow(2, 20)) { 
    zoomLevel = 21; 
} else { 
    zoomLevel = (int) (-1*((Math.log(maxDiff)/Math.log(2)) - (Math.log(360)/Math.log(2)))); 
    if (zoomLevel < 1) 
     zoomLevel = 1; 
} 

Это работало хорошо для моей квадратным Google карте 320х320 пикселей, с ZOOM_SCALING_FACTOR = 0.3838. Эта формула должна корректно работать для ЛЮБОЙ квадратной карты Google. Причина, по которой вы используете log_2, заключается в том, что карта Google удваивается по размеру каждый раз, когда уровень масштабирования увеличивается на 1. Я также обрабатываю граничные случаи, когда точки почти совпадают друг с другом (zoomLevel = 21) и где весь земной шар - желаемое масштабирование (zoomLevel = 1).

Приятная вещь, связанная с этой серверной стороной, заключается в том, что вы освободили свой движок JavaScript от выполнения сложной (и потенциально расточительной) математики, которая может замедлить загрузку страницы и ухудшить работу пользователя.

+0

Спасибо вам хорошо. – Blamkin86 2015-12-08 22:13:38

 Смежные вопросы

  • Нет связанных вопросов^_^