在 openlayers 3 中重新投影地图范围
reproject map extent in openlayers 3
我想在我的 Openlayers 3.9.0 地图上设置扩展。
当页面加载时,我希望地图已经在该范围内居中,无论图层如何。所以我想我会设置一个 extend to the view,对吗?
地图包含单个 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- 地图居中正常,但未放大延伸。坐标定义了希腊的一个县,地图没有缩放到那里,我看到了整个希腊,还有土耳其和意大利。
我做错了什么?谢谢
几个问题:
范围[2297128.5,4618333.0, 2459120.25,4763120.0]
好像已经在EPSG 3857
了,不用再改造了
ol.View
的 extent
选项是实验性的,似乎效果不佳。您可以执行以下操作来设置边界框(在声明 map
之后):
var extent = [2297128.5, 4618333.0, 2459120.25, 4763120.0];
view.fitExtent(extent, map.getSize());
您的示例中的初始缩放是由于在视图上设置的缩放级别 (zoom: 6
)。使用 fitExtent()
应该覆盖初始缩放级别。您可以从视图声明中删除 zoom
、center
和 extent
选项。
顺便说一下,关于 http://cs2cs.mygeodata.eu/ 站点,您似乎必须为输入坐标指定 EPSG:4326
而不是 EPSG:900913
,才能使转换正常工作。
注意: ol.View.fitExtent()
在 OpenLayers v3.7.0
中被重命名为 ol.View.fit()
它可以很简单:
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
})
});
谢谢大家。我所做的是
保持 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
。
谢谢大家
来源
OL answer
我想在我的 Openlayers 3.9.0 地图上设置扩展。
当页面加载时,我希望地图已经在该范围内居中,无论图层如何。所以我想我会设置一个 extend to the view,对吗?
地图包含单个 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- 地图居中正常,但未放大延伸。坐标定义了希腊的一个县,地图没有缩放到那里,我看到了整个希腊,还有土耳其和意大利。
我做错了什么?谢谢
几个问题:
范围
[2297128.5,4618333.0, 2459120.25,4763120.0]
好像已经在EPSG 3857
了,不用再改造了ol.View
的extent
选项是实验性的,似乎效果不佳。您可以执行以下操作来设置边界框(在声明map
之后):var extent = [2297128.5, 4618333.0, 2459120.25, 4763120.0]; view.fitExtent(extent, map.getSize());
您的示例中的初始缩放是由于在视图上设置的缩放级别 (
zoom: 6
)。使用fitExtent()
应该覆盖初始缩放级别。您可以从视图声明中删除zoom
、center
和extent
选项。
顺便说一下,关于 http://cs2cs.mygeodata.eu/ 站点,您似乎必须为输入坐标指定 EPSG:4326
而不是 EPSG:900913
,才能使转换正常工作。
注意: ol.View.fitExtent()
在 OpenLayers v3.7.0
ol.View.fit()
它可以很简单:
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
})
});
谢谢大家。我所做的是
保持 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
。
谢谢大家
来源
OL answer