2012-06-12 54 views
3

這是我的init函數來加載地圖,我希望它只顯示荷蘭,放大應該是可能的,但縮小should'nt。我搜遍了各地,但我找不到如何做到這一點的正確解釋。我想要地圖只顯示荷蘭

var config = { 
zoom: 14, 
zoomStart: 8, 
centerPoint: new OpenLayers.LonLat(622044.536098, 6797086.3022847), 
strokeColor: "#941B80", 
strokeColor_allloc: "#575757", 
strokeOpacity: 0.8, 
strokeOpacity_allloc: 0.9, 
strokeWeight: 2, 
trackWeight: 5, 
fillColor: "#941B80", 
fillColor_allloc: "#575757", 
fillOpacity: 0.25, 
fillOpacity_allloc: 0.40, 
pointRadius: 5, 
fontColor: "black", 
fontSize: 10, 
fontFamily: "Arial", 
scaleFactor: 1000000, 
extent: new OpenLayers.Bounds(-5037508, -5037508, 5037508, 5037508.34), 
units: 'm', 
resolution: 156543.0339, 
displayProjection: new OpenLayers.Projection("EPSG:4326"), 
projection: new OpenLayers.Projection("EPSG:900913"), 
controls: [ 
new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.Attribution()], 
copyright: 'Map data &copy; 2010 <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a><br /><a href="http://openstreetmap.org">OpenStreetMap.org</a> contributors', 
numZoomLevels: 10, 
numberPlateTail: new OpenLayers.Size(117.333, 42), 
numberPlate: new OpenLayers.Size(117.333, 25), 
iconSize: new OpenLayers.Size(32, 37) 
}; 

var myLayers = { 
base: new OpenLayers.Layer.OSM('', '', { 
    attribution: config.copyright, 
    transitionEffect: 'resize', 
    layers: 'basic' 
}, { 
    isBaseLayer: true 
}), 
vector: new OpenLayers.Layer.Vector('Vormen aan/uit', { 
    styleMap: my_style, 
    renderers: ['Canvas', 'SVG', 'VML'] 
}), 
allloc_vector: new OpenLayers.Layer.Vector('Vormen aan/uit', { 
    styleMap: my_style, 
    renderers: ['Canvas', 'SVG', 'VML'] 
}), 
markers: new OpenLayers.Layer.Markers('Markers') 
}; 
init: function (canvas) { 
    this.canvas = canvas; 
    $('#' + canvas).append('<input type="button" class="button" value="Volledig scherm" onclick="tbMap.toggleFs();" />'); 
    this.map = new OpenLayers.Map(this.canvas, { 
     controls: config.controls, 
     displayProjection: config.displayProjection, 
     Projection: config.projection, 
     maxExtent: config.extent, 
     maxResolution: config.resolution, 
     units: config.units, 
     numZoomLevels: config.numZoomLevels, 
     theme: null 
    }); 
    tbMap.zoom(); 
    this.map.addLayers([myLayers.base, myLayers.vector]); 
    this.map.setCenter(config.centerPoint, config.zoomStart); 
}, 
zoom: function() { 
    OpenLayers.Control.Navigation.prototype.counter = 0; 
    //Inzoomgevoeligheid 
    OpenLayers.Control.Navigation.prototype.wheelUp = function (evt) { 
     this.counter++; 
     if (this.counter > 2) { 
      this.counter = 0; 
      this.wheelChange(evt, 1); 
     } 
    }; 
    //Uitzoomgevoeligheid 
    OpenLayers.Control.Navigation.prototype.wheelDown = function (evt) { 
     this.counter--; 
     if (this.counter < -2) { 
      this.counter = 0; 
      this.wheelChange(evt, -1); 
     } 
    }; 
}, 

回答

1

您可以設置配置屬性maxExtent。在你的配置使用您現有的邊界就應該是這樣的,

maxExtent : new OpenLayers.Bounds(-5037508, -5037508, 5037508, 5037508.34) 

當你初始化你想補充一點的地圖配置。

你可能也想看看restrictedExtent

希望這有助於

+0

我已經嘗試過restrictedExtent和MAXEXTENT,但這個你仍然可以放大更遠。唯一受限制的是平移。 – Pepijn

+0

@Pepijn你能列出你試過的東西嗎?你看過這個網頁嗎? http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels –

+0

我嘗試了列表中的所有內容,似乎與OSM不兼容。找到一個帶有解決方法和補丁的網站。將等到他們在新的openlayers版本中糾正這個問題 – Pepijn

1

也許可以幫助你:

/** 
* 
* @type {int} 
* @constant 
*/ 
var MAX_ZOOM_LEVEL = 6; 

/** 
* The OpenLayers object that sets the map extent to the Europe scale 
* @type {OpenLayers.Bounds} 
* @var 
*/ 
var europeGoogleExtent = new OpenLayers.Bounds(-4931105.5677773, 2641663.6973633, 8570731.1060977, 12425603.316113); 



Zoom in? 

//triggered after a zoom completes 
mp.events.register('zoomend', this, checkZoom); 

function checkZoom() { 
    var zoom = mp.getZoom(); 

    if(MAX_ZOOM_LEVEL >= zoom) { 
     J('#dialog').html('You reached the maximum zoom level. <strong>The spatial accuracy is of the order of X km.</strong>'); 
     J('#dialog').attr('title', 'Warning message'); 
     J('#dialog').dialog({ 
      height: 140, 
      modal: true 
     }); 
    } else { 
     return true; 
    } 
} 

//Loading the initial extent 
if (!mp.getCenter()) { 
    if (document.getElementById('userMapExtent').value != '') { 
     var sExtent = document.getElementById('userMapExtent').value.split(','); 
     mp.zoomToExtent(new OpenLayers.Bounds(sExtent[0], sExtent[1], sExtent[2], sExtent[3]), true); 
    } else { 
     mp.zoomToExtent(europeGoogleExtent); 
    } 
}