谷歌地图V3:适合和中心不合作

时间:2014-01-15 15:32:10

标签: javascript google-maps

以下代码在地图上显示教堂和牧师:

    var churchLatLng = new google.maps.LatLng(53.4, 0.14);

    var mapOptions = {
        center: churchLatLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    myMap = new google.maps.Map(document.getElementById('myDiv'), mapOptions);

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

    // Setting church marker
    new google.maps.Marker({
        position: churchLatLng,
        map: myMap,
    });

    bounds.extend(churchLatLng);

    var priestLatLng = new google.maps.LatLng(51.2,0.13);                               

    new google.maps.Marker({
       position: priestLatLng, 
       map: myMap
    });

    bounds.extend(priestLatLng);    

    myMap.fitBounds(bounds);    

代码使用选项“center”将教堂置于地图中心,使用“fitBounds”功能以适应所有标记(仅在此情况下为教堂和牧师)。

结果是地图边框设置为包含两个标记,但选项“center”不再起作用并被忽略。

我想要的是设定界限,但同时将教堂展示在地图的中心。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:4)

  1. 调用myMap.fitBounds设置边界以显示所有标记。
  2. 将地图更改为您喜欢的中心(在教堂上)
  3. 向bounds_changed事件添加一个监听器,当它触发时,检查地图边界是否包含牧师标记,如果是,则完成。
  4. 如果地图边界未包含牧师标记,则缩小一级(map.setZoom(map.getZoom() - 1))。

    myMap.fitBounds(bounds);
    google.maps.event.addListenerOnce(myMap,'bounds_changed',function() {
      google.maps.event.addListenerOnce(myMap, 'center_changed', function() {
        if (!myMap.getBounds().contains(priestLatLng)) {
          myMap.setZoom(myMap.getZoom()-1);
        }
      });
      myMap.setCenter(churchLatLng);
    });
    

答案 1 :(得分:0)

尝试使用eventlistener并等待边界发生变化(它可以异步) 类似的东西:

google.maps.event.addListenerOnce(myMap, 'bounds_changed', function(event) {
    myMap.setCenter(churchLatLng);
});