임베디드 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);