Google maps 使用谷歌地图API设置最大和最小边界

Google maps 使用谷歌地图API设置最大和最小边界,google-maps,Google Maps,我想知道是否有人可以提供一个如何使用GMaps2设置最大和最小范围的示例?在OpenLayers中,这是如何完成的: var point1 = new OpenLayers.Geometry.Point(7, 48); point1.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); var point2 = new OpenLayers.Geometry.P

我想知道是否有人可以提供一个如何使用GMaps2设置最大和最小范围的示例?在OpenLayers中,这是如何完成的:

var point1 = new OpenLayers.Geometry.Point(7, 48);
point1.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); 

var point2 = new OpenLayers.Geometry.Point(11, 54);
point2.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); 

var bounds = new OpenLayers.Bounds();
bounds.extend(point1);
bounds.extend(point2);
bounds.toBBOX(); 

map = new OpenLayers.Map("map", {
   maxExtent: bounds, 
   maxResolution:"auto", 
   maxZoomLevel: 8, 
   projection:"EPSG:900913",
   controls: []  
});
map.addLayer(new OpenLayers.Layer.OSM.Osmarender("Osmarender"));

map.zoomToMaxExtent();
//map.zoomToExtent(bounds);

什么是GMaps2等价物?

以下是谷歌地图API 2.x等价物,用于将地图平移限制在预定义的范围内:

// Bounds for North America
var allowedBounds = new GLatLngBounds(new GLatLng(48.197218, -127.529297), 
                                      new GLatLng(28.72913, -68.818359));

function checkBounds() { 
    if (allowedBounds.contains(map.getCenter())) {
        return;
    }

    var c = map.getCenter();
    var x = c.lng();
    var y = c.lat();
    var maxX = allowedBounds.getNorthEast().lng();
    var maxY = allowedBounds.getNorthEast().lat();
    var minX = allowedBounds.getSouthWest().lng();
    var minY = allowedBounds.getSouthWest().lat();

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

    map.setCenter(new GLatLng(y, x));
}

GEvent.addListener(map, "move", function() { checkBounds(); });
//北美边界
var allowedBounds=新的GLatLngBounds(新的GLatLng(48.197218,-127.529297),
新格拉特林(28.72913,-68.818359));
函数checkBounds(){
if(allowedBounds.contains(map.getCenter())){
返回;
}
var c=map.getCenter();
var x=c.液化天然气();
变量y=c.lat();
var maxX=allowedBounds.getNorthEast().lng();
var maxY=allowedBounds.getNorthEast().lat();
var minX=allowedBounds.getSouthWest().lng();
var minY=allowedBounds.getSouthWest().lat();
如果(xmaxX){x=maxX;}
如果(ymaxY){y=maxY;}
地图设置中心(新格拉特林(y,x));
}
addListener(映射,“移动”,函数(){checkBounds();});

谢谢你回复我,克里斯和丹尼尔。我所说的“范围”是指最大化缩小后,世界地图不会平铺。我不想看到2、3甚至4个北美大陆和其他大陆。这个世界足够大,只有一个。当我放大时,我想设置一个限制,限制人们可以放大到多大程度来考虑我们的数据分辨率。放大太远会返回超出数据分辨率的结果。我确实通过限制缩放级别找到了一个可接受的解决方案。不管怎样,FWIW,这是我想到的。它没有那么冗长,但并不像Daniel在代码中所做的那样:

  //===== Restrict Zoom Levels =====     
  var mapTypes = map.getMapTypes();
  // Overwrite the getMinimumResolution() and getMaximumResolution() methods
  for (var i=0; i<mapTypes.length; i++) {
    mapTypes[i].getMinimumResolution = function() {return 2;}
    mapTypes[i].getMaximumResolution = function() {return 9;}
  }
/==限制缩放级别==
var mapTypes=map.getMapTypes();
//覆盖getMinimumResolution()和getMaximumResolution()方法

对于(var i=0;i您所说的范围究竟是什么意思?您想将视图保持在某个区域内吗?还是限制可能的缩放级别?阿方斯,我很高兴您找到了解决方案。我发布的代码没有限制缩放,而是左/右、上/下平移。基本上,根据我使用的坐标,它不允许您移动from北美。例如,您将无法在欧洲上空拖动地图。显然,您可以使用任何坐标。您用于缩放的约束实际上建议用于我的实现。谢谢Daniel..我明白您的意思…尝试按照您的建议实现,但未成功。还有其他原因虽然我的代码中发生了一些事情,但我还没有时间对其进行故障排除。我会让您知道它是如何运行的。