4

我应该在地图上显示一组标记以指示附近的兴趣点。这些标记将通过单击打开公共聊天室,因此我认为用户在进入该房间之前应该看到有关每个标记的简短地址信息,而无需单击标记。但是,如果我在这个意义上更改标记图标,一些标记可能会发生冲突,如下所示:

在此处输入图像描述

我想要做的是显示尽可能多的没有碰撞的标记,并用一个非常小的标记(如点)替换这些碰撞的图标(并且没有地址信息):

在此处输入图像描述

我通过执行 x 轴扫描算法来检测碰撞来获得这个结果,但不幸的是,如果一个标记在用户滚动地图后停止碰撞,或者它从屏幕上存在,或者另一个标记进入屏幕并开始与其他标记发生碰撞,或者用户滚动到一个全新的区域,.. 这个算法应该在每一个回合一次又一次地执行。为了消除大多数碰撞标记,我使用了 maps-utils 标记聚类,但我需要一种更艰苦的方法来克服这个问题。我考虑实现四叉树,但我不确定它是否是最好的方法。有什么建议吗?

例子:

在此处输入图像描述

4

3 回答 3

1

恕我直言,最好的方法可能是结合缩放级别、四叉树和碰撞检测。所以,在这种情况下

在这里,四叉树将用于减少要执行碰撞检测算法的项目(标记)的大小。因为您应该只对附近的标记感兴趣,而不是单独对整个标记感兴趣。

如果您按缩放级别检测碰撞项目(不仅像您那样仅针对可见区域/边界),您将不会遇到以下相关问题

如果一个标记在用户滚动地图后停止碰撞,或者它从屏幕上存在,或者另一个标记进入屏幕并开始与其他标记发生碰撞,或者用户滚动到一个全新的区域

于 2017-01-30T01:39:46.723 回答
0

您可以尝试删除: mGoogleMap.setMyLocationEnabled(true);

于 2019-04-30T13:44:52.180 回答
0

来自https://developers.google.com/maps/documentation/android-api/utility/marker-clustering的 Google Maps Android Marker Clustering Utility 就是 这样做的。

于 2017-01-30T01:19:07.987 回答