如何通过GeoJSON或mapboxId

问题描述

我正在尝试使用MapBox Android SDK突出显示地图上的功能。首先,使用矢量图块服务器中的自定义样式将地图加载到应用中。

要突出显示要素,将从服务器接收数据,并将坐标和要素数据存储在数据库中。 android应用会收到如下所示的GeoJSON:

{
    …
    "geometry":{
        [enter image description here][1]"type":"Linestring","coordinates":[
            [-6.280378997325897,36.52107960787673],[-6.280381679534912,36.52104619723205],[-6.280373632907867,36.52102787525949]
        ]
    },"mapBoxId":487
    …
}

我使用几何类型知道对象的类型,然后从几何本身创建相同类型的特征。

when (current.getGeometryType()) {
            POINT -> …
            LINE_STRING -> marker.geometry =  Linestring.fromJson(current.getGeometry())
                …
}

然后我添加带有某些属性的Source和Layer。

style.apply {
            addSource(
                GeoJsonSource(
                    SOURCE_ID3_RED_BORDER,FeatureCollection.fromFeatures(marker)
                )
            )
            addLayer(
                LineLayer(
                    LAYER_ID3_RED_BORDER,SOURCE_ID3_RED_BORDER
                )
                    .withProperties(
                        PropertyFactory.lineGapWidth(5f),PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),PropertyFactory.lineCap(Property.LINE_CAP_ROUND),PropertyFactory.linewidth(2f),PropertyFactory.lineColor(Color.RED)
                    )
            )
        }

但是我的Linestring与从服务器接收到的Linestring数据不完全匹配,这可能是由于矢量图块的概括,因为我们收到了

see image

结果不是我期望的,我希望红线与绿色完全匹配。我不知道为什么线条不合适。

有没有办法做到这一点?它似乎与“选择建筑物”示例(https://docs.mapbox.com/android/maps/examples/select-a-building/)类似,但是要突出显示功能不是由用户选择驱动的,而是来自加载地图视图时来自服务器的已知功能数据

解决方法

对于某些部分,例如曲线,您没有足够的坐标来表示曲线。对于笔直的零件,似乎存在相同的问题。当您查看黄色区域下方的部分时,红线与绿线完美对齐。

enter image description here

在此部分中,您具有足够的坐标。在其他情况下,您不需要。