2013-12-19 2 views
0

openlayers와 함께 OpenStreetMap을 사용 중이고 900913을 27700으로 변환합니다. 최대 배율을 사용하고지도 중심에 놓으려고 시도하지만 달성하고자하는 것은지도가 전체 화면으로 축소되어서는 안된다는 것입니다. . 어떻게해야합니까? 내 코드는 내가 Mapnik을 사용한 적이 고백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

아래로, 그래서 그것을 할 수없는 것을 모든하지만 게시 된 코드에서 오타를 가정하는 것은 - 예를 들어, '저울해야한다 : ''이 아니라 ''비늘 [ '- 귀하의 작업 코드에없는 경우, numZoomLevels, minZoomlevel과 같은 다른 배율 의존 옵션을 배율 설정보다 우선 적용하므로지도 옵션에 설정하지 않아야합니다.

하지만 더 중요한 점은 레이어 설정이 맵 설정보다 우선하며,이 경우 제 3 자 제공 업체 인 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/

자바 스크립트 :

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; 
} 
관련 문제