Javascript 不同分辨率的openlayers加载策略geojson
我正在尝试用openlayers 3加载geojson数据。时间很长,所以我只想传输所需的数据。我通过将当前视图的结果和范围传递给Web服务来归档它。这是我目前的代码:Javascript 不同分辨率的openlayers加载策略geojson,javascript,openlayers-3,geojson,loaddata,Javascript,Openlayers 3,Geojson,Loaddata,我正在尝试用openlayers 3加载geojson数据。时间很长,所以我只想传输所需的数据。我通过将当前视图的结果和范围传递给Web服务来归档它。这是我目前的代码: var vectorSource = new ol.source.ServerVector({ format: new ol.format.GeoJSON(), loader: function(extent, resolution, projection) { var url = 'data.j
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
})
});
但是我的代码只调用一次Web服务。每次范围(和/或结果)更改时,我必须使用哪种加载策略来调用Web服务?
ol.source.ServerVector
不知道针对不同的分辨率返回不同的结果。它会记住加载的区域,如果“知道”其特征已加载,则不会加载区域
您的示例最初加载整个世界(zoom=0
),因此不需要额外加载。将zoom=0
替换为zoom=10
:现在,缩小将触发加载,因为更大的区域还未知,而放大将不会触发加载
要在每次更改分辨率时重新加载,必须清除内存。
在地图定义后添加:
map.getView().on('change:resolution', function(evt){
alert ('resolution changed');
vectorSource.clear();
});
每次分辨率更改时,此代码都会清除内存,并强制触发加载。为什么不尝试这三种方法,看看性能的差异是什么?