我有一个场景,许多人住在同一栋房子里,因此被映射到相同的经度和纬度。我希望每个人都有一个注释。我需要在同一位置有多个注释/引脚有哪些选项?其他人如何解决类似问题?
干杯
的Nik
答案 0 :(得分:10)
我通过引入“聚合”注释的概念来解决这个问题,这种注释表示注释,否则这些注释会过于接近而无法区分。
我使用了一个简单的(也就是天真的)算法,当我添加一个新的注释时,我检查它是否与现有注释的距离d
相符。如果是,我创建一个新的聚合注释,在其下面放置现有注释和新注释。然后我删除现有的注释,并添加聚合注释。聚合注释的坐标是其成员的平均值。
这种特殊算法易于实现,但由于它为每个添加的注释检查每个现有注释,因此复杂度非常高。优化是使用kd tree
来减少搜索空间。
用户界面方式,点击这样的聚合注释会显示一个标注,显示聚合的注释数量,以及一些有关聚合注释的摘要信息。
此外,标注MKAnnotationView
的{{1}}可以深入查看列表聚合注释成员的表视图,以便用户可以选择要检查的特定成员。
进一步考虑如何确定两个注释何时过于接近。您可以根据实际距离进行操作,在这种情况下,如果缩小注释仍然会重叠;或者您可以根据屏幕上的逻辑距离进行操作,同时考虑注释视图的逻辑大小。后者可以确保您永远不会有重叠的注释,但由于您需要在地图区域更改时重新计算聚合,因此计算成本更高。
答案 1 :(得分:1)
https://stackoverflow.com/a/15438440/2482283
您不一定需要使用第三方框架,因为自iOS 4.2以来,MKMapView有一个名为 - (NSSet *)annotationsInMapRect:(MKMapRect)mapRect的方法,您可以使用它来进行聚类。
查看WWDC11会话视频'使用MapKit在地理上可视化信息'。大约一半的时间解释了如何做到这一点。但我会为你总结一下这个概念: