我想要我的开放层 地图 </跨度> 适合全屏。我希望用户能够在里面导航,缩放和拖动它。
这是一个小提琴:http://jsfiddle.net/mhicauber/t8K4p/1/
我的问题是,我不理解我给予的一些价值观 地图 </跨度> 创作:
mapLayer = new OpenLayers.Layer.Image( “我 地图 </跨度> ”, ’http://tchanca.com/private/Masse1080.jpg', OpenLayers.Bounds.fromString
这是OpenLayers3的另一种方法。根据您想要引用的内容,最简单的方法是直接从您想要的投影中获取范围( ol.proj.Projection )或层(任何类别的 ol.layer ) 使用 getExtent() 功能。如果是EPSG:3857,则可以:
ol.proj.Projection
ol.layer
getExtent()
var map = new ol.Map({ ... view: new ol.View({ ... extent: ol.proj.get("EPSG:3857").getExtent() }) });
我在这个要点上创建了一个非常基本的答案: https://gist.github.com/cfh294/e4495b9ff6d989db950ccd2573422808#file-restrictedextent-js
“肉和土豆”:
map.on("movestart", function(evt) { panStartCenter = view.getCenter(); }); map.on("moveend", function(evt) { var panEndCenter = view.getCenter(); var x = panEndCenter[0]; var y = panEndCenter[1]; }); // if the center no longer resides in the max extent, snap the map back to where it was // before the pan if (!(ol.extent.containsXY(maxExtent, x, y))) { view.setCenter(ol.Coordinate(panStartCenter)); } });
我认为你真正想要的财产是 restrictedExtent 。该 restrictedExtent 控制用户能够平移的地图部分。如果您不限制缩放级别,则用户仍然可以缩小以查看地图的其余部分,但是他们将无法平移地图。
restrictedExtent
首先,而不是使用 OpenLayers.Bound.FromString("-160,-90.0,160,90.0") ,你应该使用 new OpenLayers.Bounds(-160, -90, 160, 90) 。
OpenLayers.Bound.FromString("-160,-90.0,160,90.0")
new OpenLayers.Bounds(-160, -90, 160, 90)
如果是 (-160, -90, 160, 90) (可能是整个地图?),这意味着用户可以自由地平移这些坐标,如果这是整个地图,那么它不会限制任何东西。
(-160, -90, 160, 90)
在限制范围的情况下 (0, 0, 0, 0) - 地图的中心,用户无法在任何地方平移 - 地图始终固定在中心点 - 但它们仍然可以自由缩放,因为它不受 restrictedExtent 。
(0, 0, 0, 0)
中的值 (-160, -90, 160, 90") 是以度为单位的坐标 - 它是一个边界框 (left, bottom, right, top) 。可以使用各种不同的坐标系,您可以明确指定要使用的坐标系 projection: "EPSG:3857" 。
(-160, -90, 160, 90")
(left, bottom, right, top)
projection: "EPSG:3857"
对于像您这样的自定义地图图层,它们只是与创建图层时传入的边界相关的坐标。
的 要解决您的问题: 强>
我创建了地图 layer 有界限 new OpenLayers.Bounds(-180,-90.0,180,90.0) 并在上面设置一个restrictedExtent map (而不是图层)具有相同的边界框。
layer
new OpenLayers.Bounds(-180,-90.0,180,90.0)
map
map = new OpenLayers.Map('map', { controls: [], restrictedExtent: new OpenLayers.Bounds(-180, -90, 180, 90) }); mapLayer = new OpenLayers.Layer.Image( 'My map', 'http://tchanca.com/private/Masse1080.jpg', new OpenLayers.Bounds(-180,-90.0,180,90.0), new OpenLayers.Size(screenSize.width, screenSize.height), {} ); map.addLayer(mapLayer);
既然你的 mapLayer 占据了整个范围 map 用户不能超出它以查看任何白色边距,也不能在它外面平移,因为它之外没有任何东西存在。
mapLayer
的jsfiddle
对于那些来到这里并使用OpenLayers 3的人来说,这里有一些可能有用的信息。
没有更多的限制范围。相反,您必须在图层和视图中设置“范围”选项。
也没有更多的OpenLayers.Bounds。而是使用ol.extent,这是一个包含4个值的数组。
例:
var maxExtent = ol.proj.transformExtent([-122.445717,47.576989,-122.218094,47.71623], 'EPSG:4326', 'EPSG:3857') var map = new ol.Map({ layers: [ new ol.layer.Tile({ source: new ol.source.Stamen({ layer: 'watercolor' }), extent: maxExtent }), new ol.layer.Tile({ source: new ol.source.Stamen({ layer: 'terrain-labels' }), extent: maxExtent }) ], target: 'map', view: new ol.View({ center: ol.proj.transform( [-122.333407, 47.607436], 'EPSG:4326', 'EPSG:3857'), extent: maxExtent, zoom: 14 }) });