【发布时间】:2019-10-16 15:12:46
【问题描述】:
由于我在 OpenLayers 地图上有一些“重”层,因此加载它需要相当长的时间。我正在取消 TileWMS 源。当我放大到特定区域时,每次我都必须等待所有图层加载完毕才能正常与地图交互。有没有办法只在地图的可见区域重新渲染图层,也就是如果不在视图中就不会进入预渲染和后渲染?
【问题讨论】:
标签: openlayers
由于我在 OpenLayers 地图上有一些“重”层,因此加载它需要相当长的时间。我正在取消 TileWMS 源。当我放大到特定区域时,每次我都必须等待所有图层加载完毕才能正常与地图交互。有没有办法只在地图的可见区域重新渲染图层,也就是如果不在视图中就不会进入预渲染和后渲染?
【问题讨论】:
标签: openlayers
层中有一个名为strategy 的选项。它是关于 OpenLayers 如何从 GeoServer 请求数据的。默认strategy 是module:ol/loadingstrategy~all 请求整个层。
但是还有另一个加载策略选项,称为module:ol/loadingstrategy.bbox。通过在图层中为策略设置此值,您可以请求地图的当前范围。有关 OpenLayers 示例,请参阅 here。
在为您的图层设置 bbox 选项后,您应该更改加载功能或图层 URL。例如上面提到的你应该为源 URL 设置一个只加载当前范围的函数。
var vectorSource = new VectorSource({
format: new GeoJSON(),
url: function(extent) {
return 'https://ahocevar.com/geoserver/wfs?service=WFS&' +
'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
'outputFormat=application/json&srsname=EPSG:3857&' +
'bbox=' + extent.join(',') + ',EPSG:3857'; // giving current extent to load data
},
strategy: bboxStrategy // telling openlayers to not load all data!
});
【讨论】: