我正在尝试将旧的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 :(得分:1)
从文档中我不清楚是否应该应用图层中的过滤器,但在任何情况下,都有一个明确的filter
参数可以传递,所以:
map.queryRenderedFeatures(layers: [ 'my_layer' ], filter:["==", 'my_attribute', value ]).forEach (feature) ->
bounds.extend feature.geometry.coordinates
但我怀疑你真的想要querySourceFeatures
,因为你不想受到视口中当前内容的约束:
map.querySourceFeatures(my_source, filter:["==", 'my_attribute', value ]).forEach (feature) ->
bounds.extend feature.geometry.coordinates
或者,在原生ES2015中:
map.querySourceFeatures(my_source, { filter:['==', 'my_attribute', value ]} )
.forEach (feature => bounds.extend(feature.geometry.coordinates))
答案 1 :(得分:0)
试试这篇文章,我已经添加了代码,它可以让你使用 queryRenderedFeatures() 甚至使用 querySourceFeatures() 来拥有这些功能: https://stackoverflow.com/a/66308173/9185662