#android #kotlin #maps #mapbox #mapbox-android
#Android #kotlin #Карты #mapbox #mapbox-android
Вопрос:
Я создаю приложение, похожее на «навигацию», и я хочу отображать много похожих food_and_drink
и других 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))
}
}
}
Но это не работает.
Большое спасибо
Ответ №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
)
)
}
}
Комментарии:
1. К сожалению, не работает, кажется, что
it.getLayer
он даже не содержит ни одного из этих слоев :/2. это скроет все «poi-метки», но возможно только скрыть
food_and_drink
только?3. Конечно, это был просто пример того, как скрыть слои. Вам нужно сравнить идентификатор слоя с идентификатором, который вы хотите скрыть, и скрыть только тот, у
food_and_drink
которого есть идентификатор.4. к сожалению, единственным слоем является
poi-label
and, который будет скрывать все POI (рестораны, газ, больницы и так далее) Я не могу найти способ скрыть только определенный POI: (
Ответ №2:
После долгих исследований и попыток / ошибок я решаю свою проблему, решение частично совпадает с тем, которое я предложил, и @Moritz тоже, однако есть дополнительные шаги, я хочу отображать только некоторые POI, такие как рестораны или бары, удаление целого poi-label
приведет к тому, что все POI (больница, заправочная станция,музеи и так далее) чтобы исчезнуть, я скопировал / клонировал poi-label из mapbox studio, а затем внутри «выбрать данные» я фильтрую элементы, которые хочу отобразить, поэтому у меня будет 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 /