使用Google Maps API设置最大和最小边界

时间:2010-01-05 17:45:09

标签: 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.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的等价物是什么?

2 个答案:

答案 0 :(得分:2)

以下是Google Maps 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(); });

答案 1 :(得分:0)

感谢克里斯和丹尼尔回复我。我所说的'范围'是指当缩小最大化时,世界地图不会平铺。我不想看到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;}
  }

我仍然想尝试Daniel的代码来看看它的作用。特别感谢你花时间写这篇Dan。

- =铝