Скрыть POI mapbox во время выполнения

#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 /