2017-08-19 14 views
1

私は古いMapbox.jsマップをMapbox GLに更新しようとしています。私はgeojsonから(そしてcoffescriptを使って)マップを生成しています。フィルタされたマップボックスレイヤの結果を取得するにはどうすればよいですか?

map.addSource 'my_datasource', 
    'type': 'geojson' 
    'data': my_geojson 

map.addLayer 
    'id': 'my_layer' 
    'type': 'symbol' 
    'source': 'my_datasource' 

私は、これまでのところは良いvalue

map.setFilter('my_layer', ["==", 'my_attribute', value ]) 

を返し、ユーザー入力に基づいて層をフィルタリングしています。しかし、今私はズームして、フィルタリングされたシンボルの境界に合わせてマップを再配置したい。

私はこの

bounds = new (mapboxgl.LngLatBounds) 
map.queryRenderedFeatures(layers: [ 'my_layer' ]).forEach (feature) -> 
    bounds.extend feature.geometry.coordinates 
    return 
map.fitBounds bounds 

ような何かを行うことができるだろうと思った。しかし、すべての(すなわち、非フィルタ処理)のシンボルを返すことがqueryRenderedFeatures表示されます。

多くの読書の後、私の理解はqueryRenderedFeaturesはビューポートに表示されているフィルタリングされたシンボルを返す必要があるということです(ズームインには適していますが、ズームアウトには適しません)。

これは間違いありませんか?もしそうなら、なぜ私の関数はフィルタリングされていないシンボルを返すのですか? MapboxGLへの移行に役立つアドバイスを感謝しています!

答えて

0

これは、層内のフィルタが適用されるべきかどうかのドキュメントからの私には少しは不明だが、いずれにしても、そこにあなたは、渡すことができ、明示的filterパラメータである:

map.queryRenderedFeatures(layers: [ 'my_layer' ], filter:["==", 'my_attribute', value ]).forEach (feature) -> 
    bounds.extend feature.geometry.coordinates 

は、しかし、私は疑います

012:ネイティブES2015に、

map.querySourceFeatures(my_source, filter:["==", 'my_attribute', value ]).forEach (feature) -> 
    bounds.extend feature.geometry.coordinates 

か:あなたは、現在のビューポート内にあるものによって拘束されたくないので、あなたは本当に、querySourceFeaturesたい

+0

ありがとう@Steve、これは有望ですが、ビューポートの位置を変更していません。私は問題は、 'querySourceFeatures'が重複を返して、境界がすでに満たされているということかもしれないと思います。 'forEach'ループの中で私は' console.log( "id:" + feature.properties.id + "、coords:" + features.geometry.coordinates ")を配置しました。私が知っている値をフィルタリングすると1シンボルしか返されないので、 'querySourceFeatures'は' ID:1、coords:[90,0] 'と' id:1、coords:[-270,0] 'の2つのオブジェクトの配列を返します。 。なぜこれがどんなアイデアですか? (データソースには+ ve座標のみが含まれています)。 –

+0

あなたのデータを見ることなく伝えるのは難しいです。 –

関連する問題