Google Maps map.getBounds () сразу после звонка на map.fitbounds
-
29-09-2019 - |
Вопрос
Я звоню GetBounds () прямо после звонка на Fitbounds (), и я подумал, что я получу действительную связанную, как карта, и масштабирует, чтобы соответствовать границам. К сожалению, GetBounds () возвращает ноль.
Код для воспроизведения это выглядит следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<style>
#map {
width: 800px;
height: 400px;
}
</style>
</head>
<body>
<div id='map'></div>
<script>
var myLatlng1 = new google.maps.LatLng(-38.397, 150.644);
var myLatlng2 = new google.maps.LatLng(-34.897, 150.844);
var myLatLngBounds = new google.maps.LatLngBounds(myLatlng1, myLatlng2);
var myOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(0, 0),
zoom: 0
}
var map = new google.maps.Map(document.getElementById("map"), myOptions);
map.fitBounds(myLatLngBounds);
console.log(map.getMapTypeId());
console.log(map.getZoom());
console.log(map.getBounds());
</script>
</body>
</html>
Есть ли что-то, что мне не хватает? Я не смог ничего найти в документах об этой ситуации. Ближайший я получаю, это записка на GetBounds, которые говорят:
Если карта еще не инициализирована (т.е. maptype все еще нулевой), или центр и зума не были установлены, а затем результат нулевой.
Обратите внимание, что GetZoom возвращается без undefined. Fitbounds () не устанавливает это значение?
РЕДАКТИРОВАТЬЯ обновил код с увеличением и центром по умолчанию, согласно предложениям Marcelo.
Решение
Вам придется получить границы после мероприятия BUNDS_CHANTED.
Другие советы
В виде @Crazyenigma предложил, вы можете получить границы после bounds_changed
Событие срабатывает:
map.fitBounds(myLatLngBounds);
google.maps.event.addListener(map, 'bounds_changed', function() {
console.log(map.getMapTypeId());
console.log(map.getZoom());
console.log(map.getBounds());
});
Вышесказанное будет распечатать следующее на вашу консоль:
roadmap
6
Object
Обратите внимание, что если вы хотите только getBounds
и сделать что-то один раз, вы должны заменить addListener
с addListenerOnce
(Спасибо, @ Томас).
Используйте AddListEneronce, когда Tilesloaded
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
map.setCenter(myLatLngBounds)
});
Ответ в вашей собственной цитате. Вы должны установить центр и увеличить для инициализации карты.
Обратите внимание, что в документах для спецификации объекта MAPOPTIONS Значения центра и зума помечены как обязательный:
http://code.google.com/apis/maps/documentation/javascript/reference.html#mapoptions.