私は古い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への移行に役立つアドバイスを感謝しています!
ありがとう@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座標のみが含まれています)。 –
あなたのデータを見ることなく伝えるのは難しいです。 –