gpt4 book ai didi

javascript - 不同分辨率的openlayers加载策略geojson

转载 作者:行者123 更新时间:2023-11-29 16:10:36 25 4
gpt4 key购买 nike

我正在尝试使用 openlayers 3 加载 geojson 数据。它有很多日期,所以我只想传输所需的数据。我通过将当前 View 的分辨率和范围传递给 Web 服务来存档它。到目前为止,这是我的代码:

var vectorSource = new ol.source.ServerVector({
format: new ol.format.GeoJSON(),
loader: function(extent, resolution, projection) {
var url = 'data.json?e=' + extent.join(',') + '&r=' + resolution;
$.ajax({
url: url,
success: function(data) {
vectorSource.addFeatures(vectorSource.readFeatures(data));
}
});
},
projection: 'EPSG:3857',
strategy: ol.loadingstrategy.bbox
});

var vector = new ol.layer.Vector({
source: vectorSource
});

var map = new ol.Map({
layers: [vector],
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 0
})
});

但我的代码只调用一次网络服务。每当范围(和/或结果)发生变化时,我必须使用哪种加载策略来调用网络服务?

最佳答案

ol.source.ServerVector 不知道您会针对不同的分辨率返回不同的结果。它会记住加载的区域,如果它“知道”其功能已经加载,则不会加载区域。

您的示例最初会加载整个世界 (zoom=0),因此永远不需要额外的加载。将 zoom=0 替换为 zoom=10:现在缩小会触发加载,因为更大的区域未知,而放大会 触发负载。

要在每次更改分辨率时重新加载,您必须清除内存。在您的 map 定义之后添加:

map.getView().on('change:resolution', function(evt){
alert ('resolution changed');
vectorSource.clear();
});

此代码会在每次分辨率更改时清除内存并强制触发负载。

关于javascript - 不同分辨率的openlayers加载策略geojson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29498069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com