在 openlayers 3 中重新投影地图范围

sle*_*vin 3 openstreetmap openlayers-3

我想在我的 Openlayers 3.9.0 地图上设置扩展。

当页面加载时,我希望地图已经在该范围内居中,无论图层如何。所以我想我会设置一个扩展视图对吧?

地图包含单个 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
});
Run Code Online (Sandbox Code Playgroud)

然后我设置了视图

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]
    });
Run Code Online (Sandbox Code Playgroud)

然后是地图

var map = new ol.Map({
        target: 'map',
        layers: [layer],
        view: view,     
    });
Run Code Online (Sandbox Code Playgroud)

我在一个旧项目中使用了我的扩展,带有EPSG 900913. 因此,为了将扩展从900913默认的 Openlayers 3 转换为默认的 Openlayers 3,3857我来到了这里,并将 2297128.5, 4618333其转换为2297128.5,4618333.0

进而

2459120.25, 4763120转换为2459120.25,4763120.0

我的两个问题

1-转换后的坐标看起来很相似。我做错什么了吗?

2-地图居中正常,但没有放大扩展。坐标定义了希腊的一个县,地图不会缩放到那里,我看到了整个希腊,以及土耳其和意大利。

我做错了什么?谢谢

sle*_*vin 5

感谢大家。我所做的是

保持 OSM 层不变。

明确县域范围。原来是EPSG 900913

var countyLimits= ol.proj.transformExtent([2297128.5, 4618333, 2459120.25, 4763120], 'EPSG:900913', 'EPSG:3857');
Run Code Online (Sandbox Code Playgroud)

现在查看的是

var view = new ol.View({
    center: center,
    zoom: 6,
    extent : countyLimits,
    maxZoom:20
});
Run Code Online (Sandbox Code Playgroud)

地图是

var map = new ol.Map({
    target: 'map',
    layers:[layer],
    view: view
});
Run Code Online (Sandbox Code Playgroud)

定义地图后,将其视图调整到限制范围内

    map.getView().fit(countyLimits, map.getSize()); 
//get the view of the map and fit it to the limits, according to the map's size
Run Code Online (Sandbox Code Playgroud)

fitExtend现在已弃用,所以我使用了fit. 它是实验性的,但我想自从它被取代后它就会成为标准fitExtend

无论如何谢谢人们

来源

OL回答

OL3 API