@ Питер На самом деле есть кое-что, что вы можете сделать на стороне сервера, используя 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 размером 320x320 пикселей с ZOOM_SCALING_FACTOR = 0,3838.Эта формула должна работать правильно для ЛЮБОЙ квадратной карты Google.Причина, по которой вы видите использование log_2, заключается в том, что карта Google удваивается в размере каждый раз, когда уровень масштабирования увеличивается на 1. Я также занимаюсь крайними случаями, когда точки почти совпадают друг с другом (zoomLevel = 21), и где весь глобусэто желаемое увеличение (zoomLevel = 1).
Хорошая особенность этой серверной части заключается в том, что вы освободили свой движок JavaScript от выполнения сложной (и потенциально расточительной) математики, которая может замедлить загрузку страницы и ухудшить ее.пользовательский опыт.