首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Openlayers 3:更改地图范围中的问题

Openlayers 3:更改地图范围中的问题
EN

Stack Overflow用户
提问于 2015-06-11 09:24:45
回答 3查看 1.6K关注 0票数 0

在更改打开层3代码中的映射范围时,我面临一个问题。我使用EPSG:4326作为投影格式,并打算将边界更改为“界”变量。我在用

代码语言:javascript
运行
复制
map.getView().fitExtent(bounds, map.getSize());

为了改变地图的范围。问题是,首先我提供的边界值为76.9501571655273,76.9501571655273,78.5841217041016,78.5841217041016,并且在将地图的范围拟合到此值之后,当我使用

代码语言:javascript
运行
复制
map.getView().calculateExtent(map.getSize());

输出值为76.39384841918945,76.39384841918945,79.14043045043945,79.14043045043945。我有一种感觉,这可能是一个投影问题,但我不知道我做错了什么。有人能告诉我我做错了什么吗?

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

代码语言:javascript
运行
复制
<!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>

谢谢,

苏拉布

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-13 18:03:33

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-06-11 15:35:59

如果您正在调用fitExtent,则OpenLayers将调整视图边界,以便给定的范围是可见的。如果区域的维度与地图大小的维度不匹配,则实际视图范围可能更大。

票数 1
EN

Stack Overflow用户

发布于 2018-06-07 08:50:21

正如favero在回答中指出的那样,它只在默认情况下使用diescrete缩放值,但是可以通过设置选项constrainResolution false来避免这种情况。然后,缩放级别被允许为浮点数。

还请注意,fitExtent现在被称为fit

代码语言:javascript
运行
复制
map.getView().fit(bounds, { constrainResolution: false })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30776718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档