Openlayers 3:更改地图范围的问题
Openlayers 3 : Issue in Changing Extents of the Map
我在更改 openlayers 3 代码中的地图范围时遇到问题。
我使用 EPSG:4326 作为投影格式,我打算更改边界
到我的 'bounds' 变量。我正在使用
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>
谢谢,
苏拉布
如果您正在调用 fitExtent
OpenLayers 会调整视图边界,以便给定范围可见。如果范围的尺寸与地图尺寸的尺寸不匹配,实际视图范围可能会更大。
WMS 提供具有预定义 scales/resolutions 的图像,例如缩放 8 可以具有分辨率 1222.992452 和比例 1:3000000。如何使离散缩放值适应您提供的边界? OL3为您找到最佳缩放级别,其边界坐标接近您想要的边界。
此外,我注意到您在代码中重新定义了投影 EPSG:4386:new ol.proj.Projection({......
但是,OL3 本身已经在库中包含此投影。更好地使用:new ol.proj.get('EPSG:4326');
如 favero 的回答所述,默认情况下它仅使用离散缩放值,但是可以通过将选项 constrainResolution
设置为 false 来避免这种情况。然后缩放级别允许是浮点数。
另请注意 fitExtent
现在称为 fit
map.getView().fit(bounds, { constrainResolution: false })
我在更改 openlayers 3 代码中的地图范围时遇到问题。 我使用 EPSG:4326 作为投影格式,我打算更改边界 到我的 'bounds' 变量。我正在使用
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>
谢谢,
苏拉布
如果您正在调用 fitExtent
OpenLayers 会调整视图边界,以便给定范围可见。如果范围的尺寸与地图尺寸的尺寸不匹配,实际视图范围可能会更大。
WMS 提供具有预定义 scales/resolutions 的图像,例如缩放 8 可以具有分辨率 1222.992452 和比例 1:3000000。如何使离散缩放值适应您提供的边界? OL3为您找到最佳缩放级别,其边界坐标接近您想要的边界。
此外,我注意到您在代码中重新定义了投影 EPSG:4386:new ol.proj.Projection({......
但是,OL3 本身已经在库中包含此投影。更好地使用:new ol.proj.get('EPSG:4326');
如 favero 的回答所述,默认情况下它仅使用离散缩放值,但是可以通过将选项 constrainResolution
设置为 false 来避免这种情况。然后缩放级别允许是浮点数。
另请注意 fitExtent
现在称为 fit
map.getView().fit(bounds, { constrainResolution: false })