当前位置: 首页 > 知识库问答 >
问题:

在Google Maps API v3中使用多标记自动居中地图

何博涛
2023-03-14
<script>
  function initialize() {
    var locations = [
      ['DESCRIPTION', 41.926979, 12.517385, 3],
      ['DESCRIPTION', 41.914873, 12.506486, 2],
      ['DESCRIPTION', 41.918574, 12.507201, 1]
    ];

    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 15,
      center: new google.maps.LatLng(41.923, 12.513),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var infowindow = new google.maps.InfoWindow();

    var marker, i;

    for (i = 0; i < locations.length; i++) {
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map
      });

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
          infowindow.setContent(locations[i][0]);
          infowindow.open(map, marker);
        }
      })(marker, i));
    }
  }

  function loadScript() {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' + 'callback=initialize';
    document.body.appendChild(script);
  }

  window.onload = loadScript;
</script>

<div id="map" style="width: 900px; height: 700px;"></div>

我正在寻找的是一种避免必须“手动”找到center的地图中心的方法:new google.maps.latlng(41.923,12.513)。有没有办法自动让地图以三个坐标为中心?

共有1个答案

苍温文
2023-03-14

有一种更简单的方法,通过扩展空的latlngbounds而不是从两个点显式创建一个latlngbounds。(详见本题)

添加到代码中的内容应该如下所示:

//create empty LatLngBounds object
var bounds = new google.maps.LatLngBounds();
var infowindow = new google.maps.InfoWindow();    

for (i = 0; i < locations.length; i++) {  
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i][1], locations[i][2]),
    map: map
  });

  //extend the bounds to include each marker's position
  bounds.extend(marker.position);

  google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() {
      infowindow.setContent(locations[i][0]);
      infowindow.open(map, marker);
    }
  })(marker, i));
}

//now fit the map to the newly inclusive bounds
map.fitBounds(bounds);

//(optional) restore the zoom level after the map is done scaling
var listener = google.maps.event.addListener(map, "idle", function () {
    map.setZoom(3);
    google.maps.event.removeListener(listener);
});

这样,你就可以使用任意的点数,而不需要事先知道顺序。

 类似资料:
  • 我需要一些帮助来绘制我正在绘制的地图。地图并不特别复杂,因为我是一个初学者,我有一堆带有信息窗口的标记(完成后还会有更多标记),单击标记或选择页面HTML端下拉菜单的相应项时可以打开这些标记。 当信息窗口打开时(在HTML菜单中单击或选择),我想做但自己找不到的是在地图上自动居中标记。我假设有某种函数可以分配给click或infowindow打开事件,但无法确定是哪种函数以及如何实现它。 我的代码

  • 我有一堆标记,我可以在其中加载到谷歌地图上。我的问题是,相机不在标记之上。我可以将它集中在我所有的标记之上吗? 我正在使用以下代码添加标记: 我在堆栈上看了看,发现了这个问题,和我的问题一样: Android谷歌地图API V2中心标记 但它背后没有太多的背景,也不知道如何实现它。

  • 因此,我试图找到一些关于如何在标记上居中地图的文档,但不知怎么的,它对我不起作用。 在Gmap3页面上的示例中,如果不将“中心”添加到地图选项中,它也可以正常工作,对我来说,即使使用“中心: latLng”也不行。 所以我尝试了一些不同的组合没有什么真的适合我... 然后我试着分别提取纬度和经度,并检查了我在一个允许输入lat和lng的网站上得到的数字,我意识到这些曲线不是标记的,所以我不知道我提

  • 在Gitlab将其标记引擎切换到CommonMark之后,向标记文件添加自定义样式就不再那么容易了。 我使用Gitlab已经有一段时间了,在最长的一段时间里,我喜欢我的readme.md文件看起来非常好,有一个居中的图标、标题和我的项目的描述。当他们切换引擎时,我所有的标记文件都依赖于这样的样式看起来真的很糟糕。 转换到Commonmark后,我如何在Gitlab中居中文本?

  • 我有一个图标img,并试图将其居中在一个卡片div中,但不知何故不起作用。我已经尝试了和和两者都没有帮助。我在下面附上了我的代码。感谢任何帮助。提前道谢。 null null