Google Maps v3: Осуществление минуты масштабирует уровень при использовании fitBounds

Я тяну серию маркеров на карте (использующий v3 API карт).

В v2 у меня был следующий код:

  bounds = new GLatLngBounds();

  ... loop thru and put markers on map ...
  bounds.extend(point);
  ... end looping

  map.setCenter(bounds.getCenter());
  var level = map.getBoundsZoomLevel(bounds);
  if ( level == 1 ) 
    level = 5;
  map.setZoom(level > 6 ? 6 : level);

И это хорошо работает, чтобы гарантировать, что всегда был соответствующий уровень детализации, отображенный на карте.

Я пытаюсь копировать эту функциональность в v3, но setZoom и fitBounds, кажется, не сотрудничают:

... loop thru and put markers on the map
  var ll = new google.maps.LatLng(p.lat,p.lng);
  bounds.extend(ll);
... end loop

var zoom = map.getZoom();
map.setZoom(zoom > 6 ? 6 : zoom);
map.fitBounds(bounds);

Я попробовал другую перестановку (перемещающий fitBounds перед setZoom, например), но ничто, что я делаю с setZoom, кажется, не влияет на карту. Я пропускаю что-то? Существует ли способ сделать это?

71
задан mustafa.0x 19 April 2014 в 07:17
поделиться

1 ответ

В этом обсуждении на Google Groups я обнаружил, что в основном, когда вы делаете fitBounds, масштабирование происходит асинхронно, поэтому вам нужно захватить событие изменения масштаба и границ. Код в последнем сообщении сработал для меня с небольшим изменением... в существующем виде он полностью останавливает масштабирование больше 15, поэтому я использовал идею из четвертого сообщения, чтобы установить флаг, чтобы сделать это только в первый раз.

// Do other stuff to set up map
var map = new google.maps.Map(mapElement, myOptions);
// This is needed to set the zoom after fitbounds, 
google.maps.event.addListener(map, 'zoom_changed', function() {
    zoomChangeBoundsListener = 
        google.maps.event.addListener(map, 'bounds_changed', function(event) {
            if (this.getZoom() > 15 && this.initialZoom == true) {
                // Change max/min zoom here
                this.setZoom(15);
                this.initialZoom = false;
            }
        google.maps.event.removeListener(zoomChangeBoundsListener);
    });
});
map.initialZoom = true;
map.fitBounds(bounds);

Надеюсь, это поможет,

Энтони.

127
ответ дан 24 November 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: