【问题标题】:Openlayers 3 : Issue in Changing Extents of the MapOpenlayers 3:改变地图范围的问题
【发布时间】:2018-06-07 16:50:21
【问题描述】:

在我的 openlayers 3 代码中更改地图范围时遇到问题。 我使用 EPSG:4326 作为投影格式,我打算改变界限 到我的“界限”变量。我正在使用

map.getView().fitExtent(bounds, map.getSize());

用于更改地图的范围。问题是首先我要提供界限 值为 [76.9501571655273, 76.9501571655273,78.5841217041016, 78.5841217041016],并且在将地图的范围拟合到该值之后,当我使用

查询地图范围时
map.getView().calculateExtent(map.getSize());

我得到 [76.39384841918945, 76.39384841918945, 79.14043045043945, 79.14043045043945] 作为输出。我有一种感觉,这可能是一个投影问题,但我不知道我在哪里做错了。有人可以告诉我我做错了什么吗?

这是完整代码(我已经删除了不必要的代码以使其更具可读性):

<!doctype html>
<html lang="en">
 <head>
  <script src="http://openlayers.org/en/v3.5.0/build/ol-debug.js"></script>
  <title>OpenLayers map preview</title>
 </head>
 <body>
  <div id="map" style="width: 500px; height: 500px;"></div>
 <script type="text/javascript">

  var format = 'image/png';
  var bounds = [76.9501571655273, 76.9501571655273,
                78.5841217041016, 78.5841217041016];

  var untiled = new ol.layer.Image({
    source: new ol.source.ImageWMS({
      ratio: 1,
      url: 'http://localhost:9000/geoserver/TargetWorkspace/wms',
      params: {'FORMAT': format,
               'VERSION': '1.1.1',  
            LAYERS: 'TargetWorkspace:hyderbadtargets',
            STYLES: '',
      }
    })
  });

  var projection1 = new ol.proj.Projection({
      code: 'EPSG:4326',
      units: 'degrees',
      axisOrientation: 'neu'
  });
  var map = new ol.Map({
    controls: ol.control.defaults({
      attribution: false
    }),
    target: 'map',
    layers: [
      untiled
    ],
    view: new ol.View({
        projection: projection1,
        center: [77.7671394348, 77.7671394348],
        zoom: 0
    })
  });

  var ext = map.getView().calculateExtent(map.getSize());

  console.log("Map Bound Before: " +  ext[0] + " " + ext[1] + " "+ ext[2] + " "+ ext[3] + " ");

  map.getView().fitExtent(bounds, map.getSize());

  var ext2 = map.getView().calculateExtent(map.getSize());

  console.log("Map Bound After: " +  ext2[0] + " " + ext2[1] + " "+ ext2[2] + " "+ ext2[3] + " ");

</script>
</body>
</html>

谢谢,

苏拉布

【问题讨论】:

    标签: dictionary openlayers-3 geoserver


    【解决方案1】:

    WMS 提供具有预定义比例/分辨率的图像,例如缩放 8 可以具有分辨率 1222.992452 和比例 1:3000000。如何使离散缩放值适应您提供的范围? OL3 会为您找到最佳缩放级别,其边界坐标接近您想要的边界。

    此外,我注意到您在代码中重新定义了投影 EPSG:4386 与:new ol.proj.Projection({...... 但是,OL3 本身已经在库中包含了这个投影。更好用:new ol.proj.get('EPSG:4326');

    【讨论】:

    • 是的!我正在将范围更改为一些随机值。一旦我选择了与当前缩放级别相关的范围,我就可以完美地更改范围。谢谢您的帮助。欣赏它:)
    【解决方案2】:

    如果您调用fitExtent,OpenLayers 会调整视图边界,以便给定范围可见。如果范围的尺寸与地图大小的尺寸不匹配,则实际视图范围可能更大。

    【讨论】:

      【解决方案3】:

      正如 favero 的回答中所述,默认情况下它仅使用离散缩放值,但是可以通过设置选项 constrainResolution false 来避免这种情况。然后允许缩放级别为浮点数。

      另请注意,fitExtent 现在称为 fit

      map.getView().fit(bounds, { constrainResolution: false })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多