Google地图将边界限制为一个世界实例

时间:2016-01-21 19:58:07

标签: javascript maps

我正在尝试将Google地图的滚动限制为在所有方向上的一个世界实例。然而,我发现我的地图中心从来没有包含在我的严格范围内,从我所读到的是一个“世界”的界限。有人知道为什么我的地图中心永远不会包含在我的地图中吗?

编辑:我希望地图的中心在strictBounds中的任何地方都有效...即世界的单个实例(即你不能向左或向下滚动以向左或向下滚动两次以查看北美洲)我的gut告诉我,如果它不包含在我的坐标内,那么坐标是错误的,但是this堆栈溢出帖告诉我。

// Bounds for world
var strictBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(85, -180),           // top left corner of map
      new google.maps.LatLng(-85, 180)           // bottom right corner
);

var lastValidCenter = map.getCenter();

// Listen for the dragend event
google.maps.event.addListener(map, 'dragend', function() {
  console.log("dragend");
    if (strictBounds.contains(map.getCenter())) return;

    // We're out of bounds - Move the map back within the bounds
    var c = map.getCenter(),
    x = c.lng(),
    y = c.lat(),
    maxX = strictBounds.getNorthEast().lng(),
    maxY = strictBounds.getNorthEast().lat(),
    minX = strictBounds.getSouthWest().lng(),
    minY = strictBounds.getSouthWest().lat();

    if (x < minX) x = minX;
    if (x > maxX) x = maxX;
    if (y < minY) y = minY;
    if (y > maxY) y = maxY;

    console.log(x,y);

    // not valid anymore => return to last valid position
    map.panTo(lastValidCenter);

});

1 个答案:

答案 0 :(得分:1)

我看到需要进行以下更改:

  
      
  1. 您的maxY和minY值混淆了:
  2.   
maxX = strictBounds.getNorthEast().lng(),
minY = strictBounds.getNorthEast().lat(),
minX = strictBounds.getSouthWest().lng(),
maxY = strictBounds.getSouthWest().lat();
  
      
  1. 如果任何当前坐标超出严格绑定坐标,那么我们想要平移到最后一个有效中心:
  2.   
if (x < minX || x > maxX || y < minY || y > maxY) 
    map.panTo(lastValidCenter);
  
      
  1. 根据您需要的功能类型,更新lastValidCenter
  2. 的值   
if (x < minX || x > maxX || y < minY || y > maxY) 
    map.panTo(lastValidCenter);
else
    lastValidCenter = map.getCenter();
  
      
  1. 仅仅是我的观点,但我会使用不同的事件,而不是dragend可能更直接的事情,如center_changed。但这又取决于您所需的功能。
  2.