在OpenLayers中使用属性过滤功能



我想使用特征属性来过滤地图上的特征。

例如,如果我在geojson中有这个属性:

...
"properties": {
"Start": 10
}
...

我只想看到与Start > 10相关的特征,我如何实现与Start < 10相关的特征被隐藏?

如果我用以下代码改变样式,功能是透明的,但如果我使用forEachFeatureAtPixel,单击后它们仍然可用。我希望功能不显示,没有可用的点击等

let invisibleStyle = new ol.style.Fill({
color: [0,0, 0, 0],
});
const NewLayer= new ol.layer.VectorImage ({
source: new ol.source.Vector({
url: *url*,
format: new ol.format.GeoJSON(),
}),
visible: true,
style: function (feature) {
if (feature.get('Start')>10) {
let style = new ol.style.Style({
fill: fillStyle,
stroke: strokeStyle
})
return style;   
} else {
let style = new ol.style.Style({
fill: invisibleStyle,
})
return style;   
}   
});
map.addLayer(NewLayer);

我也试着这样使用visible,但它不起作用:

const NewLayer= new ol.layer.VectorImage ({
source: new ol.source.Vector({
url: *url*,
format: new ol.format.GeoJSON(),
}),
visible: function(feature) {
if (feature.get('Start')<10) {
return true;
} else {
return false;
}
},
style: new ol.style.Style({
fill: fillStyle,
stroke: strokeStyle,
})      
});
map.addLayer(NewLayer);

透明填充看不到,但被检测到(所以你可以通过点击里面的多边形来选择它)。要避免显示和命中检测,只需不返回style

style: function (feature) {
if (feature.get('Start')>10) {
let style = new ol.style.Style({
fill: fillStyle,
stroke: strokeStyle
})
return style;   
}
}

相关内容

  • 没有找到相关文章

最新更新