Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在运行时隐藏映射框POI_Android_Kotlin_Maps_Mapbox_Mapbox Android - Fatal编程技术网

Android 在运行时隐藏映射框POI

Android 在运行时隐藏映射框POI,android,kotlin,maps,mapbox,mapbox-android,Android,Kotlin,Maps,Mapbox,Mapbox Android,我正在制作一个类似于“导航”的应用程序,我想显示很多POI,比如食物和饮料以及其他(酒店、历史记录),当用户启动“导航”时,我想隐藏一些POI,以避免在地图中出现额外的“负载”和“噪音”,我找不到使用默认POI的方法,我正在使用mapbox studio,我可以显示/隐藏一些POI,但我希望它们可见,然后稍后“隐藏”,当导航结束时,再次“显示”它们,这可能吗? 我试着加载样式 retrieveMap()?.getStyle { it.getLayer(&q

我正在制作一个类似于“导航”的应用程序,我想显示很多POI,比如
食物和饮料
以及其他(酒店、历史记录),当用户启动“导航”时,我想隐藏一些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))
                        }
                    }
                }
但这是行不通的。
非常感谢

您能否更改您的解决方案,将
属性。无
改为
作为可见性的值

对我来说,以下方法很好:

override-fun-onMapReady(mapboxMap:mapboxMap){
this.mapboxMap=mapboxMap
mapboxMap.setStyle(
"" 
){style:style->
//查找此样式中的所有图层
val layers:MutableList=style.layers
变量迭代器:Int=0
用于(逐层){
图层?设置属性(
PropertyFactory.visibility(
不动产
)
)
}

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

对我来说,以下方法很好:

override-fun-onMapReady(mapboxMap:mapboxMap){
this.mapboxMap=mapboxMap
mapboxMap.setStyle(
"" 
){style:style->
//查找此样式中的所有图层
val layers:MutableList=style.layers
变量迭代器:Int=0
用于(逐层){
图层?设置属性(
PropertyFactory.visibility(
不动产
)
)
}

}
经过大量研究和尝试/错误,我解决了我的问题,解决方案部分是我提出的,还有@Moritz,但是还有一个额外的步骤,我只想显示一些类似POI的餐厅或酒吧,移除整个
POI标签将导致所有POI(医院、加油站、博物馆等)为了解SAPEAR,我所做的是从mapbox studio复制/克隆poi标签,然后在“选择数据”中过滤我想要显示的项目,因此我将有两层,一层包含所有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筛选位置的详细信息

经过大量研究和尝试/错误,我解决了我的问题,解决方案部分是我提出的,还有@Moritz,但是还有一个额外的步骤,我只想显示一些POI类餐厅或酒吧,移除整个
POI标签将导致所有POI(医院、加油站、博物馆等)为了解SAPEAR,我所做的是从mapbox studio复制/克隆poi标签,然后在“选择数据”中过滤我想要显示的项目,因此我将有两层,一层包含所有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筛选位置的详细信息

不幸的是,它不起作用,请参见md,即
它。getLayer
甚至不包含任何这些层:/这将隐藏所有“poi标签”但是只能隐藏
食品和饮料
吗?当然,这只是一个如何隐藏图层的示例。您需要将图层id与要隐藏的id进行比较,并且只隐藏带有
食品和饮料
id的图层。遗憾的是,唯一的图层是
poi标签
,这将隐藏所有poi(餐厅、燃气、医院等)我找不到只隐藏特定POI的方法:(不幸的是不起作用,请参见
它。getLayer
甚至不包含任何这些层:/这将隐藏所有“POI标签”但是只能隐藏
食品和饮料
吗?当然,这只是一个如何隐藏图层的示例。您需要将图层id与要隐藏的id进行比较,并且只隐藏带有
食品和饮料
id的图层。遗憾的是,唯一的图层是
poi标签
,这将隐藏所有poi(餐厅、煤气、医院等)我找不到只隐藏特定POI的方法:(