【问题标题】:Hide mapbox POI in runtime在运行时隐藏 mapbox POI
【发布时间】:2020-11-18 13:11:29
【问题描述】:

我正在制作一个类似“导航”的应用程序,我想显示很多 POI,例如 food_and_drink 和其他(酒店、历史),当用户启动“导航”时,我想隐藏一些这个 POI 是为了避免地图中出现额外的“负载”和“噪音”,我找不到使用默认 POI 的方法,我正在使用 mapbox studio,我可以显示/隐藏一些 POI,但我希望它们可见,然后“隐藏”,当导航结束时再次“显示”它们,这可能吗? 我尝试加载样式

retrieveMap()?.getStyle {
                    it.getLayer("food_and_drink")?.let { layer ->
                        if (VISIBLE == layer.visibility.value) {
                            layer.setProperties(PropertyFactory.visibility(NONE))
                        }else{
                            layer.setProperties(PropertyFactory.visibility(VISIBLE))
                        }
                    }
                }

但这不起作用。 非常感谢

【问题讨论】:

    标签: android kotlin maps mapbox mapbox-android


    【解决方案1】:

    您能否更改您的解决方案以将 Property.NONE 而不是 NONE 作为可见性的值?

    对我来说,以下工作正常:

    override fun onMapReady(mapboxMap: MapboxMap) {
    
            this.mapboxMap = mapboxMap 
    
            mapboxMap.setStyle(
                "<YOUR_STYLE_ID>" 
            ) { style: Style -> 
    
                //Find all layers in this style
    
                val layers: MutableList<Layer> = style.layers
               
                var iterator: Int = 0
                for (layer in layers){
    
                    layer?.setProperties(
                        PropertyFactory.visibility(
                            Property.NONE
                        )
                    )
    
                    
                }
                }

    【讨论】:

    • 不幸的是不起作用,似乎it.getLayer 甚至不包含任何这些层:/
    • 这将隐藏所有“poi-label”,但只能隐藏food_and_drink
    • 当然,这只是一个关于如何隐藏图层的示例。需要比较layer id和要隐藏的id,只隐藏food_and_drink ID的那个。
    • 遗憾的是,唯一的层是poi-label,它将隐藏所有 POI(餐厅、煤气、医院等)我找不到只隐藏特定 POI 的方法 :(
    【解决方案2】:

    经过大量研究和尝试/错误,我解决了我的问题,解决方案是我提出的部分解决方案,@Moritz 也是,但是有一个额外的步骤,我只想显示一些 POI,如餐馆或酒吧,删除整个poi-label 将导致所有 POI(医院、加油站、博物馆等)消失,我所做的是从 mapbox studio 复制/克隆 poi-label,然后在“选择数据”中过滤我要显示的项目,所以我将有 2 层,一层带有所有 POI,第二层带有所有过滤器 POI(我们只显示加油站),然后我可以使用这样的东西

    layers.find { it.id == "poi-label" }?.setProperties(
                    PropertyFactory.visibility(Property.NONE)
                )
    
    layers.find { it.id == "poi-copy-with-gas-station-only" }?.setProperties(
                    PropertyFactory.visibility(Property.VISIBLE)
                )
    

    使用此代码,我可以隐藏/显示特定图层 这是有关如何使用 mapbox 过滤地点的更多信息 https://www.mapbox.com/videos/how-to/filter-what-data-appears-on-your-map-in-mapbox-studio/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多