Карты Google map.getBounds () сразу после вызова map.fitBounds - PullRequest
5 голосов
/ 17 августа 2010

Я вызываю 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 () не устанавливает это значение?

EDIT Я обновил код с масштабом по умолчанию и центром, в соответствии с рекомендациями Марсело.

Ответы [ 4 ]

8 голосов
/ 18 августа 2010

Когда @ 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 (Спасибо, @Tomas).

7 голосов
/ 18 августа 2010

Вам нужно будет получить границы после события bounds_changed.

0 голосов
/ 23 июля 2013

Использовать addListenerOnce при загрузке плиток

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ 
map.setCenter(myLatLngBounds)
});
0 голосов
/ 18 августа 2010

Ответ в вашей собственной цитате. Вы должны установить центр и масштаб для карты, которая будет инициализирована.

Обратите внимание, что в документах для спецификации объекта MapOptions значения center и zoom помечены как required :

http://code.google.com/apis/maps/documentation/javascript/reference.html#MapOptions

...