使用带有mapbox-gl-js的过滤器显示/隐藏功能

时间:2016-04-12 21:33:48

标签: mapbox-gl-js

我正在使用mapbox开展室内项目,并且正在寻找一种方法来显示/隐藏具有特定属性level=x的功能(楼层)。在mapboxjs的第一个版本中,可以使用this。现在在GL版本中,我可以很容易地show/hide a layer using a filter,但这不是我瞄准的原因,因为已经定义了层(房间,走廊,楼梯......)并且不依赖于楼层:

{
  "id": "rooms",
  "filter": [
    "all", [
      "==",
      "type",
      "room"
    ], [
      "!in",
      "subtype",
      "stairs",
      "elevator"
      ]
  ],
  "source": "indoorSource",
  "source-layer": "indoor",
  ...
},
{
  "id": "handrails",
  "filter": [
    "==",
    "handrail",
    "yes"
  ],
  "source": "indoorSource",
  "source-layer": "indoor",
  ...
}

我可以查询我想要使用的功能:

map.querySourceFeatures("indoorSource", {sourceLayer: "indoor", filter: ["==", "level", "2"]})

但我找不到显示/隐藏返回功能的方法。

有关信息:indoorSource是来自网络服务器的矢量图块:

"indoorSource": {
    "type": "vector",
    "tiles": ["http://xxx.xxx/tiles/{z}/{x}/{y}.pbf"]
}

提前致谢,

蒂博

2 个答案:

答案 0 :(得分:1)

Map#setFilter会像Map#querySourceFeatures一样使用过滤器,并使用它们来显示/隐藏地图上的要素。

map.addLayer({
  'id': 'indoor',
  'source': 'indoor',
  'source-layer': ...
  ...
});

map.setFilter('indoor', ['==', 'level', '2']);

答案 1 :(得分:0)

基于mapbox展示室内楼层,看看室内相等的前端。