问题描述
我想使用要素属性过滤地图上的要素。
例如,如果我在 geojson 中有这个属性:
...
"properties": {
"Start": 10
}
...
而且我只想看到带有 Start > 10
的特征,我该如何实现带有 Start < 10
的特征被隐藏?
如果我使用以下代码更改样式,这些功能是透明的,但如果我使用 forEachFeatureAtPixel
,点击后它们仍然可用。我希望不显示功能,并且无法点击等。
let invisibleStyle = new ol.style.Fill({
color: [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*,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: function (feature) {
if (feature.get('Start')>10) {
let style = new ol.style.Style({
fill: fillStyle,stroke: strokeStyle
})
return style;
}
}