You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mapbox querySourceFeatures返回多数组且首数组为空问题求助

问题解决方法

出现多次输出空数组、最终结果重复的原因是:sourcedata事件会在矢量源加载的多个阶段触发(比如开始请求、分片加载、加载完成等),而非仅在加载完成时执行一次。以下是两种可行的解决方案:

方案一:使用source.load事件(推荐)

source.load是Mapbox专门提供的事件,仅当矢量源完全加载完成时触发一次,精准匹配需求:

map.on('load', (e) => {    
   
    map.addSource('aa_winter_spoorts_points', {
        type: 'vector',
        url: 'mapbox://username.3t9kz8q5' 
    });
     
    map.addLayer({
        'id': 'aa_winter_spoorts_points',
        'type': 'symbol',  
        'source': 'aa_winter_spoorts_points',
        'source-layer': 'aa_winter_sports_points-6lir92',
        'layout': {
            'visibility': 'visible',
            'icon-image': 'mountain-11',
            'icon-allow-overlap': true
        },
    });
    
    // 仅在目标源加载完成时执行一次
    map.on('source.load', (e) => {
        if (e.sourceId === 'aa_winter_spoorts_points') {
            let features = map.querySourceFeatures('aa_winter_spoorts_points', {
                sourceLayer: 'aa_winter_sports_points-6lir92',
                filter: ["==", "id", "way/771665618"]
            });
            if (features.length > 0) {
                console.log(features);
            }
        }
    });    
});

方案二:优化sourcedata事件监听

如果坚持使用sourcedata,需要在成功获取目标要素后移除事件监听,同时判断加载状态:

map.on('load', (e) => {    
   
    map.addSource('aa_winter_spoorts_points', {
        type: 'vector',
        url: 'mapbox://username.3t9kz8q5' 
    });
     
    map.addLayer({
        'id': 'aa_winter_spoorts_points',
        'type': 'symbol',  
        'source': 'aa_winter_spoorts_points',
        'source-layer': 'aa_winter_sports_points-6lir92',
        'layout': {
            'visibility': 'visible',
            'icon-image': 'mountain-11',
            'icon-allow-overlap': true
        },
    });
    
    function handleSourceData(e) {
        // 仅处理目标源的加载完成状态
        if (e.sourceId === 'aa_winter_spoorts_points' && e.isSourceLoaded) {
            let features = map.querySourceFeatures('aa_winter_spoorts_points', {
                sourceLayer: 'aa_winter_sports_points-6lir92',
                filter: ["==", "id", "way/771665618"]
            });
            if (features.length > 0) {
                console.log(features);
                // 执行后移除监听,避免重复触发
                map.off("sourcedata", handleSourceData);
            }
        }
    }
    
    map.on("sourcedata", handleSourceData);    
});

内容的提问来源于stack exchange,提问作者spreaderman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:55:16