Я использую Google Maps API v2. Я добавляю маркеры на карту, а затем масштабирую, чтобы они соответствовали этим маркерам. Это отлично работает, если карта видна, я делаю это. Но если нет - например, если у меня есть полоса вкладок, а вкладка карты не выбрана при загрузке страницы - тогда, когда я показываю карту, уровень масштабирования и центр неверны.
Вот простой тестовый пример (использует jQuery):
<script type="text/javascript">
var scale = Math.random() * 20;
$(document).ready(function() {
var $container = $('#container');
// $container.hide();
var map = new GMap2($('#map')[0]);
$container.show();
var markerBounds = new GLatLngBounds();
for (var i = 0; i < 10; i++) {
var randomPoint = new GLatLng(38.935394 + (Math.random() - 0.5) * scale, -77.061382 + (Math.random() - 0.5) * scale);
map.addOverlay(new GMarker(randomPoint));
markerBounds.extend(randomPoint);
}
map.setCenter(markerBounds.getCenter(), map.getBoundsZoomLevel(markerBounds));
});
</script>
<div id="container">
<div id="map" style="margin: 100px; width: 450px; height: 300px;"></div>
</div>
Это прекрасно работает, но если вы раскомментируете $container.hide()
, все будет уничтожено.
Есть ли способ заставить API Карт Google правильно работать с невидимым элементом div?
getBounds
(вызывается в getBoundsZoomLevel) возвращает видимую область карты, поэтому я предполагаю, что вам придется масштабировать, чтобы соответствовать событию щелчка на вкладке. Краткое изложение метода в v3 лучше, чем описание в v2: v3 Возвращает границы широты/долготы текущего окна просмотра. Если карта еще не инициализирована (т. е. тип карты по-прежнему равен нулю) или центр и масштаб не установлены, результат будет нулевым. Я не думаю, что getBounds сильно изменился между версиями. - person Jim Schubert   schedule 27.02.2010