2012-06-12 1 views
3

Это моя функция инициализации для загрузки карты, я хочу, чтобы она показывала только Нидерланды, масштабирование должно быть возможным, но масштабирование 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); 
    } 
} 
Смежные вопросы