我想在我的Openlayers 3.9.0地图上设置一个扩展。
当页面加载时,无论图层如何,我都希望地图已经在那个范围内居中。所以我想我会将extend设置为view,对吧?
Map包含单个OSM层,如
var layer = new ol.layer.Tile({
source: new ol.source.OSM(
{
attributions: [
new ol.Attribution({
html: 'All maps © ' +
'<a href="http://www.opencyclemap.org/">OpenCycleMap</a>'
})
]
}
),
opacity: 0.8,
brightness: 0.8
});
然后我设置了视图
var center = ol.proj.transform([21.54967, 38.70250], 'EPSG:4326', 'EPSG:3857');
var view = new ol.View({
center: center,
zoom: 6,
extent: [2297128.5,4618333.0 , 2459120.25,4763120.0]
});
然后是地图
var map = new ol.Map({
target: 'map',
layers: [layer],
view: view,
});
我在EPSG 900913
的旧项目中使用了我的扩展程序。所以要将范围从900913
转换为默认的Openlayers 3 3857
,我去了here,我放了
尊重2297128.5, 4618333
2297128.5,4618333.0
然后
2459120.25, 4763120
与2459120.25,4763120.0
我的两个问题
1-转换后的坐标看起来很相似。我做错了吗?
2-地图中心确定,但未在范围内放大。 coords定义了希腊的一个县,地图不会放大,我看到整个希腊,以及土耳其和意大利。
我做错了什么?感谢
答案 0 :(得分:3)
几个问题:
范围[2297128.5,4618333.0, 2459120.25,4763120.0]
似乎已经在EPSG 3857
,并且无需对其进行转换。
extent
的{{1}}选项是实验性的,似乎效果不佳。您可以执行以下操作来设置边界框(在声明ol.View
之后):
map
示例中的初始缩放是由于视图上设置的缩放级别(var extent = [2297128.5, 4618333.0, 2459120.25, 4763120.0];
view.fitExtent(extent, map.getSize());
)。使用zoom: 6
应覆盖初始缩放级别。您可以从查看声明中删除fitExtent()
,zoom
和center
选项。
顺便说一下,关于http://cs2cs.mygeodata.eu/网站,您似乎必须为输入坐标指定extent
而不是EPSG:4326
,才能使转换正常工作。
注意:EPSG:900913
在OpenLayers v3.7.0中重命名为ol.View.fitExtent()
答案 1 :(得分:2)
它可以像以下一样简单:
var min = [2297128.5, 4618333.0];
var max = [2459120.25, 4763120.0];
var extent = ol.extent.boundingExtent([min, max]);
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'osm'})
})
],
view: new ol.View({
center: ol.proj.fromLonLat([21.54967, 38.70250]),
zoom: 3,
extent: extent
})
});
答案 2 :(得分:2)
谢谢大家。我做的是
保持OSM层不变。
定义县的限制。原来是EPSG 900913
var countyLimits= ol.proj.transformExtent([2297128.5, 4618333, 2459120.25, 4763120], 'EPSG:900913', 'EPSG:3857');
现在查看
var view = new ol.View({
center: center,
zoom: 6,
extent : countyLimits,
maxZoom:20
});
地图是
var map = new ol.Map({
target: 'map',
layers:[layer],
view: view
});
定义地图后,将其视图置于限制
中 map.getView().fit(countyLimits, map.getSize());
//get the view of the map and fit it to the limits, according to the map's size
fitExtend
现已弃用,因此我使用了fit
。它是实验性的,但我想它会成为标准,因为它取代了fitExtend
。
非常感谢人
来源