0

我们在我们的 Android 应用程序中使用 Carto Mobile SDK 来显示带有 POI 对象的地图。可能有很多这样的对象,所以我们使用聚类来避免在较低缩放级别下地图上的混乱。到目前为止,一切都很好。

每个 POI 都可以附加一个标签,我们使用带有文本的气球弹出窗口。由于此弹出窗口使用 POI 点几何来定义其位置,因此它看起来像一个集群到一个集群矢量图层,除非我放大到最大级别,否则我无法在地图中分别看到 POI 和标签。它立即变成一个由 2 个对象组成的集群。我找不到任何有关如何避免相关对象聚类的相关信息。有人可以解释一下这个问题吗?

编辑:

这是最大缩放时的样子 - 同一位置的两个对象: 最大缩放级别

这是我稍微缩小时的样子: 较低的缩放级别

创建这两个几何图形的代码在这里:

private suspend fun MapLayerData.createPointPoi(
    layer: MapLayer,
    projection: Projection,
    pictogramSetIconsDao: PictogramSetIconsDao
): List<VectorElement> {
    val elements = mutableListOf<VectorElement>()
    getPoiPictogram(layer.dataPictogramSetId, icon, pictogramSetIconsDao)?.let { pictogram ->
        Point(
            projection.fromLatLong(vertices.first().lat, vertices.first().lng),
            PointStyleBuilder().also {
                it.bitmap = pictogram
            }.buildStyle()
        )
    }?.let { point ->
        elements.add(point)
        if (text.isNotBlank()) {
            elements.add(createText(point.geometry, text))
        }
    }
    return elements
}

fun createText(location: Geometry, text: String) = BalloonPopup(
    location,
    BalloonPopupStyleBuilder().buildStyle(),
    text,
    ""
)

从方法返回的所有元素createPointPoi()都添加到poiPointsLayercreated 中,如下所示:

    private val poiClusterElementBuilder = DefaultClusterElementBuilder(
        res,
        res.drawable(R.drawable.poi_cluster, theme)
    )
    private val poiPointsLayer = ClusteredVectorLayer(poiPointsDataSource, poiClusterElementBuilder)

实际上,我现在正在尝试使用气球弹出窗口,但最初我们使用的是文本,因为通过为文本添加底部边距,我们能够将其显示在象形图上方而不是在它上方。但是结果——将这两个对象合并到一个集群中——是完全一样的。

当然,我们可以将这些标签类型的对象从聚集层移到单独的矢量图层,但这样我们就会在地图上的聚集象形图上拥有大量标签。像这样的东西: 乱七八糟的标签

4

0 回答 0