防止GMap v3中的世界包装

时间:2011-04-12 11:41:35

标签: google-maps-api-3

我目前正在从v2迁移到v3。世界不应该纵向重复。

在第2版中,可以使用以下内容存档:

var proj = new GMercatorProjection(30); 
proj.tileCheckRange = function(a,b,c) { 
  var tileBounds = Math.pow(2,b);
  if (a.y<0 || a.y >= tileBounds) {return false;}
  if (a.x<0 || a.x >= tileBounds) {return false;}
  return true; 
};

proj.getWrapWidth = function(zoom) {
  return 99999999999999;
};

G_NORMAL_MAP.getProjection = function() {return proj;};

但我还没有为v3找到解决方案。

编辑澄清一下:我不是在寻找一种方法来防止平移(横向导航),而是一种防止地图重复自我的方法,尤其是在低缩放级别

3 个答案:

答案 0 :(得分:2)

How do I limit panning in Google maps API V3?查看两个答案。在那里概述的技术应该让你(取决于你的使用案例)大部分在那里或者可能在那里。

这些答案没有说明如何限制包装,但它们确实显示了如何限制平移。如果您可以采取其他措施来限制初始视口中的内容(例如,如果您可以控制大小并且可以适当地限制缩放级别和初始坐标),那么限制平移可以帮助您实现目标。

答案 1 :(得分:0)

restriction MapOption属性可以在此处提供帮助。

new google.maps.Map(
 container,
 {
  restriction:
   {
    latLngBounds: {north: 85, south: -85, west: -179.5, east: 179.5},
    strictBounds: true
   }
 });

这还将处理通常在北/东边界之外显示的“填充”,并使地图在地图图块的结尾处“结束”。

您可以摆弄一些数字以说明更多(或更准确)的面积,但是我认为对于大多数情况来说,这已经足够了。

答案 2 :(得分:-1)

可以通过这种方式轻松防止世界包装(改编自Trott链接的答案)

// prevent wrap                                                                                                                                                                                                                                                     
  var lastValid = map.getCenter();
  google.maps.event.addListener(map, 'center_changed', function() {
    if(map.getBounds().getNorthEast().lng() > map.getBounds().getSouthWest().lng()) {
      lastValid = map.getCenter();
    }
    else
      map.panTo(lastValid);
  });