2013-12-19 48 views
0

我正在使用openlayers的OpenStreetMap,我將900913轉換爲27700.我正在使用maxextent並嘗試將地圖居中,但我想要實現的是地圖不應縮小到全局。我怎樣才能做到這一點?我的代碼如下Openlayers限制縮放到整個世界

var projDisplay = new OpenLayers.Projection("EPSG:27700"); 
var projmerc = new OpenLayers.Projection("EPSG:900913"); 

map = new OpenLayers.Map("map",     {scales[200000,150000,100000,50000,20000,10000,5000,2500], 
               maxExtent: new openLayers.Bounds("350000,380000, 380000,400000"), 
               minzoomlevel: "10", 
               numZoomLevels: "19", 
               units: 'm', 
               projection: projmerc, 
               displayProjection: projDisplay}); 


var mapnik_layer = new OpenLayers.Layer.OSM("OpenStreetMap"); 
map.addLayers([mapnik_layer]); 

var lonlat = new OpenLayers.LonLat("362431.71","389042.78"); 
lonlat.transform(projDisplay, projmerc); 
map.setCenter(lonlat, 13); 

回答

0

我會承認,我從來沒有使用Mapnik的,所以我不什麼都可以做,但假設你發佈的代碼錯別字 - 例如,應該是「秤: '而不是'縮放[' - 不在你的工作代碼中,你不能在你的地圖選項中設置任何其他的比例依賴選項(例如,numZoomLevels,minZoomlevel),因爲它們將覆蓋你的比例設置。

但更重要的是,圖層設置將覆蓋地圖設置,在這種情況下,我認爲OpenLayers.Layer.OSM作爲第三方提供商並不會讓您設置自己的比例尺。如果使用OSM的相對較小的區域,爲什麼不下載maxExtents的邊界框並自己提供地圖數據以獲得更大的靈活性?

一些有用的鏈接:

http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels

https://gis.stackexchange.com/questions/1825/openlayers-use-scales-instead-of-resolutions

補充說:

這裏是你的地圖,這是正確的縮放(非Mapnik的)發揮小提琴到最大程度而不是全世界,按要求:

http://jsfiddle.net/Cybele42/UfWp9/3/

的Javascript:

var projMercator = new OpenLayers.Projection("GOOGLE"); 
var projBritNatGrid = new OpenLayers.Projection("EPSG:27700"); 

var navigation_control = new OpenLayers.Control.Navigation({}); 

var controls_array = [ 
    navigation_control, 
    new OpenLayers.Control.PanZoomBar({}), 
    new OpenLayers.Control.LayerSwitcher({}), 
    new OpenLayers.Control.MousePosition({}) 
]; 

var layerOSM = new OpenLayers.Layer.OSM("OpenStreetMap"); 
var scales = [200000,150000,100000,50000,20000,10000,5000,2500]; 

var map = new OpenLayers.Map({ 
    div: "map", 
    units: 'm', 
    scales: scales, 
    Projection: projMercator, 
    DisplayProj: projBritNatGrid, 
    controls: controls_array 
}); 

map.addLayer(layerOSM); 

var myMaxExtent = new OpenLayers.Bounds("350000,380000, 380000,400000"); 
myMaxExtent.transform(projBritNatGrid, projMercator); 

var lonlat = new OpenLayers.LonLat("362431.71","389042.78"); 
lonlat.transform(projBritNatGrid, projMercator); 
map.setCenter(lonlat, 13); 

map.events.register("zoomend", map, function(){ 
document.getElementById("getCenter").innerHTML=map.getCenter(); 
document.getElementById("getScale").innerHTML=map.getScale(); 
}); 

HTML:

<script type="text/javascript" src="http://openlayers.org/dev/OpenLayers.js"></script> 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/proj4js/1.1.0/proj4js-compressed.min.js"></script> 
<script type="text/javascript" src="http://spatialreference.org/ref/epsg/27700/proj4js/"></script> 

<div id="map"></div> 

<table class="gridtable"> 
<tr><th>object</th><th>value</th></tr> 
<tr><td>Center</td><td><div id="getCenter"></div></td></tr> 
<tr><td>Scale</td><td><div id="getScale"></div></td></tr> 
</table> 

CSS:

#map 
{ 
    width: 600px; 
    height: 600px; 
    border: 1px solid black; 
} 

table.gridtable { 
    font-family: verdana,arial,sans-serif; 
    font-size:11px; 
    color:#333333; 
    border: 1px solid black; 
} 

table.gridtable th { 
    border: 1px solid black; 
    padding: 8px; 
    background-color: khaki; 
} 

table.gridtable td { 
    padding: 8px; 
    border: 1px solid black; 
    background-color: #ffffff; 
}