OpenLayers-3 - source.clear() 的正确用法是什么
OpenLayers-3 - What is the correct usage of source.clear()
我有一张 ol 3.10.1 地图,其目标是动态重绘图层的特征。在到达那里的路上,我正在使用 source.clear() 函数。奇怪的是 source.clear() 实际上清除了图层中当前缩放级别的特征,但在放大或缩小时特征仍然存在。我是否以正确的方式使用 source.clear() 函数?请在下面找到我用于测试目的的代码片段。
var image = new ol.style.Circle({
radius: 5,
fill: null,
stroke: new ol.style.Stroke({color: 'red', width: 1})
});
var styles = {
'Point': [new ol.style.Style({
image: image
})]};
var styleFunction = function(feature, resolution) {
return styles[feature.getGeometry().getType()];
};
var CITYClusterSource = new ol.source.Cluster({
source: new ol.source.Vector({
url: 'world_cities.json',
format: new ol.format.GeoJSON(),
projection: 'EPSG:3857'
}),
})
var CITYClusterLayer = new ol.layer.Vector({
source: CITYClusterSource,
style: styleFunction
});
setTimeout(function () { CITYClusterSource.clear(); }, 5000);
var map = new ol.Map({
target: 'map',
renderer: 'canvas',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM(),
}),
CITYClusterLayer
],
view: new ol.View({
center: ol.proj.transform([15.0, 45.0], 'EPSG:4326', 'EPSG:3857'),
zoom:3
})
});
我正在使用 setTimout() 函数让这些功能在应该被清除之前显示几秒钟。
请指教
更新:http://jsfiddle.net/jonataswalker/ayewaz87/
我忘了,OL 会为每个分辨率一次又一次地加载您的功能。因此,如果您想一劳永逸地删除,请使用自定义加载程序,请参阅 fiddle。
您的源是异步加载的,因此在准备就绪时设置超时:
CITYClusterSource.once('change', function(evt){
if (CITYClusterSource.getState() === 'ready') {
// now the source is fully loaded
setTimeout(function () { CITYClusterSource.clear(); }, 5000);
}
});
注意once
方法,可以用on
代替
我有一张 ol 3.10.1 地图,其目标是动态重绘图层的特征。在到达那里的路上,我正在使用 source.clear() 函数。奇怪的是 source.clear() 实际上清除了图层中当前缩放级别的特征,但在放大或缩小时特征仍然存在。我是否以正确的方式使用 source.clear() 函数?请在下面找到我用于测试目的的代码片段。
var image = new ol.style.Circle({
radius: 5,
fill: null,
stroke: new ol.style.Stroke({color: 'red', width: 1})
});
var styles = {
'Point': [new ol.style.Style({
image: image
})]};
var styleFunction = function(feature, resolution) {
return styles[feature.getGeometry().getType()];
};
var CITYClusterSource = new ol.source.Cluster({
source: new ol.source.Vector({
url: 'world_cities.json',
format: new ol.format.GeoJSON(),
projection: 'EPSG:3857'
}),
})
var CITYClusterLayer = new ol.layer.Vector({
source: CITYClusterSource,
style: styleFunction
});
setTimeout(function () { CITYClusterSource.clear(); }, 5000);
var map = new ol.Map({
target: 'map',
renderer: 'canvas',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM(),
}),
CITYClusterLayer
],
view: new ol.View({
center: ol.proj.transform([15.0, 45.0], 'EPSG:4326', 'EPSG:3857'),
zoom:3
})
});
我正在使用 setTimout() 函数让这些功能在应该被清除之前显示几秒钟。
请指教
更新:http://jsfiddle.net/jonataswalker/ayewaz87/
我忘了,OL 会为每个分辨率一次又一次地加载您的功能。因此,如果您想一劳永逸地删除,请使用自定义加载程序,请参阅 fiddle。
您的源是异步加载的,因此在准备就绪时设置超时:
CITYClusterSource.once('change', function(evt){
if (CITYClusterSource.getState() === 'ready') {
// now the source is fully loaded
setTimeout(function () { CITYClusterSource.clear(); }, 5000);
}
});
注意once
方法,可以用on
代替