Google 地图 JavaScript API - fitbounds 与 setCenter 一起使用

2023-11-29

我一直在寻找解决这个问题的方法,但我似乎找不到解决这个问题的东西。我得到的最接近的是这个线程。但这行不通。

我想做的是基于一组运行良好的标记来运行 fitbounds。但我还想根据用户位置(plunk 中的弹跳标记)将地图居中,并仍将所有标记保留在地图视图中。 如果我尝试在 fitBounds 之后设置 Center,则某些标记位于地图视图之外。 有什么巧妙的方法将这两个功能结合起来吗?这是说明问题的笨蛋.

function initialize() {
  var userCenter = new google.maps.LatLng(51.508742, -0.120850);

  var userCenterMarker = new google.maps.Marker({
  position: userCenter
});

 userCenterMarker.setAnimation(google.maps.Animation.BOUNCE);

var mapProp = {
  center: userCenter,
  zoom: 12,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("googleMap"),   mapProp);

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

$(markers).each(function() {
  bounds.extend(this.position);
  this.setMap(map);
});

userCenterMarker.setMap(map);

map.fitBounds(bounds);

setTimeout(function() {
  map.setCenter(userCenter);
}, 1500);
}

Thanks!


简单的解决方案:将“用户标记”添加到边界,执行 fitBounds,然后将生成的缩放值减少 1 并以该标记为中心。

  bounds.extend(userCenterMarker.getPosition());
  map.fitBounds(bounds);

  google.maps.event.addListenerOnce(map,'bounds_changed', function() {
        map.setZoom(map.getZoom()-1);
  });

工作小提琴

更复杂的解决方案:以“用户标记”为中心,检查标记边界是否完全包含在地图的当前边界中(map.getBounds().contains(markerBounds)),如果不是,则将缩放级别减少 1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 地图 JavaScript API - fitbounds 与 setCenter 一起使用 的相关文章

随机推荐