Android 在运行时隐藏映射框POI
我正在制作一个类似于“导航”的应用程序,我想显示很多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的方法,我正在使用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的方法:(