【问题标题】:openlayers - how to center map by bounding boxopenlayers - 如何通过边界框居中地图
【发布时间】:2017-12-12 19:25:58
【问题描述】:

我正在尝试通过给定的边界框使地图居中。 OpenLayers FAQ 甚至是它的一个例子(使用 swissProjection),但它只是不起作用。在一些论坛上环顾四周,只是无法弄清楚如何使其工作。

也许有人知道。

代码如下:

var extent = [-9022321.0707,3022167.2243,-8849726.2608,3148441.1951];

var projection = new ol.proj.Projection({
  code: 'EPSG:3857',
  extent: extent,
  units: 'm'
});
ol.proj.addProjection(projection);

var map = new ol.Map({
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM()
    })
  ],
  target: 'map',
  view: new ol.View({
    projection: projection,
    center: [0,0],
    zoom: 0
  })
});

【问题讨论】:

    标签: maps openlayers openstreetmap openlayers-3 bounding-box


    【解决方案1】:

    您的代码是正确的,但中心超出了您的范围。有两种方法可以解决它。

    首先,设置有效的视图中心和级别。

    例如)

    view: new ol.View({
      projection: projection,
      center: [-8936023.66575, 3085304.2097], // guess it's the center of extent
      zoom: 8 // whatever you want. 
    }) 
    

    其次,使用View.fit 而不是在Projection 上设置extent

    var projection = new ol.proj.Projection({
      code: 'EPSG:3857',
      //extent: extent,
      units: 'm'
    });
    ...
    map.getView().fit(extent);
    

    【讨论】:

    • 只是线 map.getView().fit(extent) 解决了问题并从投影中删除了范围选项。我对其进行了测试,并且不需要设置选项缩放和中心,因为视图的新拟合完全由边界框定义。这就是我最初将其设置为零的原因。删除或编辑答案的上半部分,我将其标记为已解决。谢谢!
    • 您可以选择其中之一。不需要同时做第一个和第二个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多