Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openlayers 3 如何在按程序更改地图中心和缩放后重新加载WMTS分幅?_Openlayers 3 - Fatal编程技术网

Openlayers 3 如何在按程序更改地图中心和缩放后重新加载WMTS分幅?

Openlayers 3 如何在按程序更改地图中心和缩放后重新加载WMTS分幅?,openlayers-3,Openlayers 3,我正在实现一个功能,用户可以选择与地图上的某个点对应的列表项。我目前可以设置正确的地图中心和缩放级别,但在我导致地图上出现鼠标滚轮缩放交互之前,地图分幅是空白的。如何使我的WMTS图层更新到新的缩放级别和贴图范围?原则上,更改WMTS源的tileUrlFunction将触发刷新,因为这将清除平铺缓存。如果幸运的话,您的WMTS服务器正确地使用了ETag,只需再次使用相同的url功能即可: wmtsSource.setTileUrlFunction(wmtsSource.getTileUrlFun

我正在实现一个功能,用户可以选择与地图上的某个点对应的列表项。我目前可以设置正确的地图中心和缩放级别,但在我导致地图上出现鼠标滚轮缩放交互之前,地图分幅是空白的。如何使我的WMTS图层更新到新的缩放级别和贴图范围?

原则上,更改WMTS源的
tileUrlFunction
将触发刷新,因为这将清除平铺缓存。如果幸运的话,您的WMTS服务器正确地使用了ETag,只需再次使用相同的url功能即可:

wmtsSource.setTileUrlFunction(wmtsSource.getTileUrlFunction());
如果您的WMTS服务器只是设置了expire头,那么您必须在url中附加一些内容,以强制浏览器重新蚀刻它。假设您使用KVP编码与WMTS服务器通信,您可以通过执行以下操作来实现

var random=Math.random();
var originalTileUrlFunction=wmtsSource.getTileUrlFunction();
wmtsSource.setTileUrlFunction(函数(){
返回originalTileUrlFunction.apply(this,arguments)+'&'+random;
});

您想要OpenLayers 2(标记
OpenLayers
)或OpenLayers 3(标记
OpenLayers-3
)的答案吗?请删除两个标记中的一个,具体取决于您要查找的内容。我认为它必须在更改视图时自动更新。可能是3.4.0版本中的一个bug,或者您的新位置超出了层
maxResolution
@EricSonaron设置
map.getView().setCenter([…])和
map.getView().setZoom()函数后,我尝试了map.render和map.renderSync函数。我可以确认我没有超出层的
maxResolution
。我也尝试过ol-3.3.0和ol-3.2.1,效果相同。尝试使用动画更改中心和缩放级别:请参阅。我想这会迫使我更新。我尝试了你的建议,但不幸的是,在我的情况下,它们都不起作用。