【问题标题】:Mapbox Filter is not giving Correct result, when using promoteId使用promotId时,Mapbox过滤器没有给出正确的结果
【发布时间】:2021-01-05 16:47:33
【问题描述】:

美好的一天,

我有一个 geojson(类似于下面),我遇到了一个在没有提升的情况下使用时效果很好的表达式的问题。

JSFiddle:

https://jsfiddle.net/dollysingh3192/w6bzsx84/7/

GeoJson

{
                'type': 'FeatureCollection',
                'features': [
                    {
                        "geometry": {
                            "type": "Point",
                            "coordinates": [
                                8.612079620361328,
                                -2.932969060251523
                            ]
                        },
                        "type": "Feature",
                        "properties": {
                            "id": "GMYTEORRGI5DQ",
                            "sid": "s_133",
                            "n": "15",
                            "r": "13",
                            "s": "312",
                            "sz": 5.5,
                            "m": "n",
                            "ri": 13,
                            "si": 7
                        },
                        "id": 11578
                    }
             ]
}

工作

下面的表达式工作正常并从地图中提取一个特征(不使用 promoteId)

mapInstance.queryRenderedFeatures({ layers: ['seat'], filter: ["any", ["==", ["id"], 21762]] });

工作 GIF:

不工作

但是在 geojson 源中使用 promoteId 时,表达式根本不起作用。

mapInstance.queryRenderedFeatures({ layers: ['seat'], filter: ["any", ["==", ["id"], "GMYTEORRGI5DQ"]] });

不工作的 GIF:

但是,我注意到 setFilter 和 setFeatureState 可以在相同的表达式中正常工作。

mapInstance.setFilter('seat', ["match", ["id"], "GMYTEORRGI5DQ", true, false]); //Works fine

带有 setFilter 的 GIF:(不知道为什么会这样)。 LINK

请指导。我在这里做错了吗?

https://jsfiddle.net/dollysingh3192/w6bzsx84/7/

【问题讨论】:

    标签: javascript mapbox mapbox-gl-js


    【解决方案1】:

    要获取属性数据,请使用get

    试试这个方法

    mapInstance.queryRenderedFeatures({ 
        layers: ['seat'], 
        filter: ["==", ["get", "id"] ,"GMYTEORRGI5DQ"]
    });
    

    更新:

    致id/promoteId的装配工

            mapInstance.queryRenderedFeatures({ 
              layers: ['seat'],
              filter: ['==', 'id', 'GMYTEORRGI5DQ']
            })
    

    https://docs.mapbox.com/mapbox-gl-js/style-spec/expressions/#id

    【讨论】:

    • 感谢您的回复。我想专门对功能“id”应用查询(不是属性)。你能帮我解决这个问题吗?
    • 我正在使用确切的表达式,但没有运气。我添加了一个 JsFiddle。请检查jsfiddle.net/dollysingh3192/w6bzsx84/7,其中控制台语句每次都是空的。
    • @Dolly 尝试不使用 [ ] 围绕 id jsfiddle.net/q43roh8e 的新语法
    • 感谢您的回复。只有一个问题为什么[ "id"] 表达式不适用于promoteId。因为它设置了属性对象中功能的 id,它应该像我们根本不设置promoteId一样工作。
    • 我在 Mapbox GitHub 问题的github.com/mapbox/mapbox-gl-js/issues/10257 上注册了一个错误,这是一个错误,仍然需要修复。但感谢您提供的所有有用的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多