2010-01-05 111 views
1

想知道是否有人可以提供如何使用GMaps2设置最大和最小范围的示例?在OpenLayers中,以下是它是如何完成的:使用Google Maps API设置最大和最小范围

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

+0

你是什么意思的程度?你想保持在某个地区的观点?或限制可能的缩放级别? – 2010-01-05 23:54:43

回答

2

以下是谷歌地图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(); }); 
0

感谢回去我克里斯和丹尼尔。 “范围”的含义是当缩小范围最大化时,世界地图不会平铺。我不想看到2,3,甚至4个北美和其他大陆。世界足够大,只有一个。当我放大时,我想设置一个限制,即可以放大多少以考虑我们的数据分辨率。放大得太远会返回数据分辨率以外的结果。我设法通过限制缩放级别来找到可接受的解决方案。无论如何,FWIW,这是我想到的。这是一个有点那么详细,但是没有做什么丹尼尔确实在他的代码:

//===== 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;} 
    } 

我还是想尝试丹尼尔的代码,看看会发生什么。特别感谢你花时间写这个丹。

- = Al

+0

Alfonse,我很高兴你找到了你的解决方案。我发布的代码不限制缩放,但左/右,上/下平移。基本上用我使用的坐标,它不会让你离开北美。例如,您将无法将地图拖到欧洲地区。显然你可以使用任何坐标。实际上,我们建议将用于缩放的约束用于我的实现。 – 2010-01-07 21:22:47

+0

谢谢丹尼尔..我看到你在说什么......试图按照你的建议实施它,但是没有成功。在我的代码中还有其他事情正在进行,但我还没有时间来排除它。会告诉你这件事的进展的。 – Alfonse 2010-01-11 16:15:33

相关问题