Google Maps API v3: можно ли установить Zoom после fitBounds? - PullRequest
196 голосов
/ 13 марта 2010

У меня есть набор точек, которые я хочу нанести на встроенную карту Google (API v3). Я бы хотел, чтобы границы вмещали все точки, если уровень масштабирования не слишком низкий (то есть слишком сильно уменьшен). Мой подход был такой:

var bounds = new google.maps.LatLngBounds();

// extend bounds with each point

gmap.fitBounds(bounds); 
gmap.setZoom( Math.max(6, gmap.getZoom()) );

Это не работает. Последняя строка "gmap.setZoom ()" не изменяет уровень масштабирования карты, если вызывается непосредственно после fitBounds.

Есть ли способ получить уровень масштабирования границ, не применяя его к карте? Другие идеи, чтобы решить эту проблему?

Ответы [ 23 ]

0 голосов
/ 17 июля 2010

Я не хотел бы предлагать это, но если вы должны попробовать - сначала позвоните

gmap.fitBounds(bounds);

Затем создайте новый Thread / AsyncTask, оставьте его в спящем режиме на 20-50 мс или около того, а затем вызовите

gmap.setZoom( Math.max(6, gmap.getZoom()) );

из потока пользовательского интерфейса (используйте обработчик или метод onPostExecute для AsyncTask).

Я не знаю, работает ли это, просто предложение. Кроме этого вам нужно как-то самостоятельно рассчитать уровень масштабирования по вашим точкам, проверить, не слишком ли он низкий, исправить его, а затем просто позвонить gmap.setZoom(correctedZoom)

0 голосов
/ 20 июля 2010

После расчета границ вы можете проверить расстояние между верхним левым и правым нижним углом; тогда вы можете понять уровень масштабирования, проверив расстояние (если расстояние слишком велико, уровень масштабирования будет низким), тогда вы можете выбрать, использовать ли метод setbound или setZoom.

0 голосов
/ 28 июля 2010

Все, что я сделал, это:

map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

И это работает на V3 API.

...