繁体   English   中英

在 OpenLayers 中使用属性过滤特征

[英]Filter features with properties in OpenLayers

我想使用功能属性过滤 map 上的功能。

例如,如果我在 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);

透明填充看不到,但被检测到(因此您可以通过在多边形内部单击 select 多边形)。 为了避免显示和点击检测,简单地不返回样式

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM