[javascript] Google Maps API v3 : fitBounds 후에 줌을 설정할 수 있습니까?

임베디드 Google Map (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 바로 다음에 호출 된 경우 맵의 확대 / 축소 수준을 변경하지 않습니다.

지도에 적용하지 않고 범위의 확대 / 축소 수준을 얻는 방법이 있습니까? 이것을 해결할 다른 아이디어?



답변

편집 : 아래 Matt Diamond의 의견을 참조하십시오.

알았다! 이 시도:

map.fitBounds(bounds);
var listener = google.maps.event.addListener(map, "idle", function() {
  if (map.getZoom() > 16) map.setZoom(16);
  google.maps.event.removeListener(listener);
});

필요에 따라 수정하십시오.


답변

내 앱 중 하나에서 비슷한 문제를 해결했습니다. 나는 당신의 문제에 대한 당신의 설명에 약간 혼란 스러웠지만, 당신은 내가 가진 것과 같은 목표를 가지고 있다고 생각합니다 …

내 응용 프로그램에서 하나 이상의 마커를 플롯하고 맵이 모두 표시되도록하고 싶었습니다. 문제는 내가 fitBounds 메소드에만 의존하면 단일 지점이있을 때 확대 / 축소 수준이 최대가 될 것입니다.

해결책은 포인트가 많을 때는 fitBounds를 사용하고 포인트가 하나만 있으면 setCenter + setZoom을 사용하는 것이 었습니다.

if (pointCount > 1) {
  map.fitBounds(mapBounds);
}
else if (pointCount == 1) {
  map.setCenter(mapBounds.getCenter());
  map.setZoom(14);
}


답변

답변을 얻기 위해이 페이지를 여러 번 방문했으며 기존의 모든 답변이 도움이되었지만 내 문제를 정확하게 해결하지 못했습니다.

google.maps.event.addListenerOnce(googleMap, 'zoom_changed', function() {
    var oldZoom = googleMap.getZoom();
    googleMap.setZoom(oldZoom - 1); //Or whatever
});

기본적으로 ‘zoom_changed’이벤트는지도의 UI가 ‘유휴’이벤트를 기다릴 때 발생하는 “건너 뛰기”를 방지한다는 것을 알았습니다.

이것이 누군가를 돕기를 바랍니다!


답변

maxZoom을 미리 설정 한 다음 나중에 제거하여이 문제를 해결했습니다. 예를 들면 다음과 같습니다.

map.setOptions({ maxZoom: 15 });
map.fitBounds(bounds);
map.setOptions({ maxZoom: null });


답변

내가 실수하지 않으면 가능한 모든 줌 레벨로지도에 모든 포인트가 표시되기를 원한다고 가정합니다. 지도의 확대 / 축소 수준을 16 으로 초기화하여이 작업을 수행했습니다 (V3에서 가장 높은 확대 / 축소 수준인지 확실하지 않음).

var map = new google.maps.Map(document.getElementById('map_canvas'), {
  zoom: 16,
  center: marker_point,
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

그런 다음 나는 범위를 벗어났습니다.

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

// You can have a loop here of all you marker points
// Begin loop
bounds.extend(marker_point);
// End loop

map.fitBounds(bounds);

결과 : 성공!


답변

나는 사용한다:

gmap.setZoom(24); //this looks a high enough zoom value
gmap.fitBounds(bounds); //now the fitBounds should make the zoom value only less

코드에 따라 24보다 작고 필요한 확대 / 축소 수준을 사용하지만 어쨌든 확대 / 축소가 변경되어 축소 한 정도에 신경 쓰지 않을 것입니다.


답변

이것을 시도하십시오 :

map.fitBounds(bounds);

// CHANGE ZOOM LEVEL AFTER FITBOUNDS
zoomChangeBoundsListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
  if (this.getZoom()){
    this.setZoom(15);
  }
});
setTimeout(function(){
  google.maps.event.removeListener(zoomChangeBoundsListener)
}, 2000);