2016-04-12 20 views
2

私は屋内のプロジェクトでmapboxを使用していますが、特定のプロパティlevel=xで機能(フロア)を表示/非表示する方法を探しています。 mapboxjsの最初のバージョンでは、thisを使用することができました。今、私がすることができます簡単にshow/hide a layer using a filter GLバージョンではなく、層はすでに(お部屋、廊下、階段を...)定義されており、床に依存しないされているので、これは私が目指してるものではありません。mapbox-gl-jsでフィルターを使用して機能を表示/非表示にする

{ 
    "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"] 
} 

おかげで、

ティボー

答えて

1

Map#setFilterはちょうどMap#querySourceFeaturesのように、フィルターを取り、表示するためにそれらを使用しています/マップ上のフィーチャーを非表示にする。

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

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

実際、Map#setFilterはスタイルレイヤのフィルタを更新し、以前のフィルタを削除します。回避策としては、 'map.setFilter(" rooms "、[" all "、map.getFilter(" rooms ")、[" == "、" level "、" 1 "]]);ですが、この解決策は汚いと維持するのは難しい。さらに、このソリューションでは、タグ「レベル」を使用するすべてのレイヤーを知る必要があります(また、ハードコードする必要があります)。私が使っているスタイルの詳細については、最初の投稿を更新しました。 –

+1

この時点で、Mapbox APIについて理解しています。きれいで保守しやすいアーキテクチャを実装するのはあなた次第です。 –

関連する問題