5

fitBounds()を呼び出した直後にgetBounds()を呼び出していますが、マップが再配置され、境界に合わせてズームすると、有効な境界が返されると思いました。残念ながら、getBounds()はnilを返します。

これを再現するコードは次のとおりです。

<!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がまだnullの場合)、またはcenterとzoomが設定されていない場合、結果はnullになります。

getZoomも未定義を返すことに注意してください。fitBounds()はこの値を設定しませんか?

編集 Marceloの提案に従って、デフォルトのズームと中央でコードを更新しました。

4

4 に答える 4

8

@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何かを一度だけ実行したい場合はaddListeneraddListenerOnce(Thanks, @Tomas) に置き換える必要があることに注意してください。

于 2010-08-18T09:09:49.673 に答える
7

bounds_changedイベントの後に境界を取得する必要があります。

于 2010-08-17T21:23:38.560 に答える
0

tilesloaded 時に addListenerOnce を使用する

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ 
map.setCenter(myLatLngBounds)
});
于 2013-07-23T00:34:40.710 に答える
-1

答えはあなた自身の引用にあります。マップを初期化するには、中心とズームを設定する必要があります。

MapOptions オブジェクト仕様のドキュメントでは、center と zoom の値が必須としてマークされていることに注意してください。

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

于 2010-08-18T04:23:11.207 に答える