使用 Mapbox GL JS 按属性过滤 Mapbox 点

Filtering through Mapbox points with Mapbox GL JS by properties

我目前在我的网站上有 Mapbox 运行,数据点和弹出窗口在使用上传到 Mapbox Studio 的数据集时起作用。对于我的生活,我无法通过 Javascript 中的属性(在我的 html 文件脚本标记内)过滤点。我尝试了 setFilter() 示例,但似乎没有任何效果。

顺便说一句,我审查了我们的访问令牌和样式 url。所有这些都在为我服务。

        mapboxgl.accessToken = 'pk........';
        const map = new mapboxgl.Map({
            container: 'map',
            style: 'mapbox://styles/........',
            center: [-111.9671707, 33.30527115],
            zoom: 15
        });

        map.on('click', (event) => {
            const features = map.queryRenderedFeatures(event.point, {
                layers: ['crime-data-complete (1)'] 
            });
            if (!features.length) {
                return;
            }
            const feature = features[0];
            
            const popup = new mapboxgl.Popup({ offset: [0, -15] })
                .setLngLat(feature.geometry.coordinates)
                .setHTML(
                    `<h2 style="text-transform: capitalize;">${feature.properties.Crime}</h2><p><strong>Date: </strong>${feature.properties.Date}</p><p><strong>Address: </strong>${feature.properties.Address}</p><p><strong>City: </strong>${feature.properties.City}</p><p><strong>State: </strong>${feature.properties.State}</p>`
            )
            .addTo(map);
        });

        map.setFilter('crime-data-complete (1)', ['all', ['==', 'Crime', 'Theft']]);

如果您使用的是 ['all', ...],那么您应该为属性添加一个 get

你的情况是:

map.setFilter('crime-data-complete (1)', ['all', ['==', ['get', 'Crime'], 'Theft']]);

如果您只使用一个过滤器,您可以删除 ['all', ...] 并改用它:

map.setFilter('crime-data-complete (1)', ['==', 'Crime', 'Theft']);