Mapbox GL JS - 过滤标记分析

时间:2016-05-11 21:20:34

标签: geojson mapbox-gl-js

我是Mapbox GL JS的新手,我喜欢它!我在GeoJson源上过滤标记时遇到的一些事情,我想知道是否有人可以帮助我...这里是我的过滤逻辑示例:

    function applyFilters() {
        var filters = ["all", ["==", "$type", "Point"]];

        if (document.getElementById('filter1checkbox').checked)
            filters.push(['==', 'property1', true]);
        if (document.getElementById('filter2checkbox').checked)
            filters.push(['==', 'property2', true]);

        map.setFilter('markers', filters);
        var llb = new mapboxgl.LngLatBounds(geojsonExtent(markers));
        map.fitBounds(llb);
        map.setCenter(llb.getCenter());
    }

这是我的问题:

  1. 应用我的过滤器之后,有没有办法获得与过滤器匹配的标记计数(您的搜索返回{X}个项目)?
  2. 当我使用geojsonExtent来获取标记集合的边界时,它似乎没有考虑过滤器。有没有办法让过滤器后面的数据传递到geojsonExtent?
  3. 有关这些物品去哪儿的建议吗?

1 个答案:

答案 0 :(得分:0)

  

应用我的过滤器后,有没有办法获得与过滤器匹配的标记计数(您的搜索返回{X}个项目)?

您可以通过运行

获取当前在视口中显示的已过滤标记的数量
map.queryRenderedFeatures({layers: ['markers']).length

无法获取整个地图中已过滤标记的总数。

  

当我使用geojsonExtent来获取标记集合的边界时,它似乎没有考虑过滤器。有没有办法获取过滤器后面的数据以传递到geojsonExtent?

您也可以使用queryRenderedFeatures! (注意:此代码未经测试)

geojsonExtent({
  type: 'FeatureCollection',
  features: map.queryRenderedFeatures({layers: ['markers']).length
});