我有一个场景,许多人住在同一所房子里,因此被映射到相同的经度和纬度。我希望每个人都有一个注释。我有哪些选项可以在同一位置放置多个注释/图钉?其他人是如何解决类似问题的?
干杯
尼克
最佳答案
我通过引入“聚合”注解的概念解决了这个问题,该注解表示否则靠得太近而无法区分的注解。
我采用了一种简单的(又名。朴素的)算法,当我添加一个新的注释时,我检查它是否与现有注释的 d
距离。如果是,我创建一个新的聚合注释,将现有注释和新注释放在它下面。然后我删除现有注释并改为添加聚合注释。聚合注释的坐标是其成员的平均值。
这个特定的算法很容易实现,但具有相当可怕的复杂性,因为它会为添加的每个注释检查每个现有注释。一种优化方法是使用 kd 树
来减少搜索空间。
明智的用户界面,点击这样的聚合注释将显示一个标注,其中显示聚合的注释数量,以及一些关于聚合注释的摘要信息。
此外,标注的 MKAnnotationView
的 rightCalloutAccessoryView
可以深入到列出聚合注释成员的 TableView 中,以便用户可以选择特定成员进行检查。
另一个需要考虑的问题是如何确定两个注释何时靠得太近。你可以根据实际距离来做,在这种情况下,如果你缩小了,注释仍然会重叠;或者您可以根据屏幕上的逻辑距离来执行此操作,同时考虑注释 View 的逻辑大小。后者可以确保您永远不会有重叠的注释,但计算量更大,因为您需要在 map 区域发生变化时重新计算聚合。
关于cocoa-touch - 同一 MKMapView 位置上的许多图钉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895567/