在openlayers 3

时间:2015-09-26 14:18:00

标签: openstreetmap openlayers-3

我想在我的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, 47631202459120.25,4763120.0

相关

我的两个问题

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

2-地图中心确定,但未在范围内放大。 coords定义了希腊的一个县,地图不会放大,我看到整个希腊,以及土耳其和意大利。

我做错了什么?感谢

3 个答案:

答案 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()zoomcenter选项。

顺便说一下,关于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
    })
});

http://jsfiddle.net/jonataswalker/zc3uL66q/

答案 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

非常感谢人

来源

OL answer

OL3 API