kotlin 基于缩放MapBox动态图标化

dly7yett  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(144)

我已经在MapBox中设置了几辆汽车作为不同点的PointAnnotations。
当我放大Map时,汽车图标保持相同的大小,而不是动态地变小,我越缩小。

fun addCar(carId : Long, carPosition: Point, rotation: Double) {

        // Set options for the resulting symbol layer.
        val pointAnnotationOptions: PointAnnotationOptions = PointAnnotationOptions()
            // Define a geographic coordinate.
            .withPoint(carPosition)
            .withIconRotate(rotation)
            .withIconImage(BitmapFactory.decodeResource(context.resources,R.drawable.car_icon))
        // Add the resulting pointAnnotation to the map.
        val robotPointAnnotation = pointAnnotationManager.create(pointAnnotationOptions)
    }
}

在网上搜索时,我发现了使用他们表达语言的线索,大致如下:

iconSize: ['interpolate', ['exponential', 2], ['zoom'], 15, 0.0015, 23, 1],

但是我真的不能把它翻译成Kotlin。我创建了一个新的styleExtension:

getMapboxMap().loadStyle(
    styleExtension = style(Style.OUTDOORS) {
        +image("CAR") {
            bitmap(BitmapFactory.decodeResource(resources, R.drawable.car_icon))
        }
    }
)

但是我不知道在哪里可以为PointAnnotations添加任何类型的缩放插值。
我真的很想学习更多关于表达式的知识。但是我看不出它们和PointAnnotations之间的联系。有人能给我指个方向吗?

xqkwcwgp

xqkwcwgp1#

所以在周末的时候,我想出了一个办法:

+symbolLayer("car-layer", "car-source") {

                    iconImage("CAR")
                    iconSize(
                        interpolate {
                            exponential { literal(2)}
                            zoom()
                            literal(5)      // Furthest zoom
                            literal(0.5)    // Target furthest icon size
                            literal(22)     // Nearest zoom
                            literal(1)      // Target nearest icon size
                        }
                    )
                }

我花了一段时间才把所有的东西拼凑起来,但话又说回来...我是一个完全的DSL菜鸟。希望这能帮助那些想做类似事情的人。

相关问题