2010-01-05 67 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

相關問題