[英]OpenLayers: can't i get features of VectorSource outside of event listener?
我试图只显示我的Vector Source中的某个特征。 所以我做了这样的功能:
function showUtility(id) {
utilitiesSource.forEach(function(i) {
//console.log(i.getFeatures());
i.forEachFeature(function(f) {
if (f.getProperties().id == id) {
f.setStyle(null);
} else {
f.setStyle([]);
}
});
});
}
utilitiesSource来自哪里:
utilitiesSource = [];
var utilitySource = new ol.source.Vector({
format: new ol.format.GeoJSON(),
projection: 'EPSG:4326',
url: 'someUrl',
extractStyles: false
});
utilitiesSource.push(utilitySource);
问题 console.log(i.getFeatures())
在showUtility()
总是给空数组虽然很好,如果我是这样的一个事件侦听使用它:
var selectCtrl = new ol.control.Select({
source: utilitiesSource,
property: $(".options select").val(),
selectLabel: 'Cari',
addLabel: 'Tambah Kondisi',
allLabel: 'Cocokkan Semua',
attrPlaceHolder: 'atribut',
valuePlaceHolder: 'nilai'
});
selectCtrl.on('select', function(e) {
select.getFeatures().clear();
utilitiesSource.forEach(function(i) {
//console.log(i.getFeatures()); --> gives array of feature
i.forEachFeature(function(f) {
f.setStyle([]);
});
})
e.features.forEach(function(f) {
f.setStyle(null);
});
});
var bar = new ol.control.Bar({
group: true,
controls: [
selectCtrl,
new ol.control.Button({
html: '<i class="fa fa-undo" ></i>',
title: 'Reset',
handleClick: function() {
select.getFeatures().clear();
utilitiesSource.forEach(function(i) {
//console.log(i.getFeatures()); --> gives array of feature
i.getFeatures().forEach(function(f) {
f.setStyle(null);
});
})
}
})
]});
如果我使用浏览器的控制台并执行utilitiesSource.forEach(function(i) { i.getFeatures().forEach(function(j){ if (j.getProperties().id == 100) {j.setStyle(null);} else {j.setStyle([])} });});
我得到了我想要的东西
这是为什么? 为什么我无法获得showUtility(id)中的功能?
(仍然没有足够的声誉,所以我不得不在评论中笨拙地问问题-.-)
你有没有试过在setTimeout()之后调用你的函数? geojson源异步加载数据,因此即使在最后一行代码中调用它也可能为时过早。 我认为这应该是最新的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.