如何以相同的纬度/经度显示多个MKPinAnnotation?

时间:2012-04-16 12:26:52

标签: ios ipad mkmapview mkannotation

我的iPad App正在从数据库中检索地理对象。在此数据库中,某些对象具有相同的经度/纬度。 因此在MkMapView中我添加了几个具有相同Lat / Long的MKPinAnnotation。不幸的是只显示了一个,我想它是我添加的最后一个。

如何只有一个MKPinAnnotation对象(对于给定的坐标),当用户点击它时,我会为每个共享相同坐标的对象显示MKPinAnnotation?类似于谷歌地图/谷歌地球所做的事情,你点击主Pin然后显示几个Pin。

任何帮助将不胜感激。

塞巴斯蒂安。

2 个答案:

答案 0 :(得分:4)

你认为当多个引脚处于完全相同的坐标时,它们会在彼此的顶部显示吗?或者Apple可能会在相同的坐标处剔除额外的引脚吗?

无论哪种方式,我建议改变坐标,以便可以看出它们是明显分开的。你可以做的是使用CLLocation的distanceFromLocation:方法找到彼此非常接近的所有引脚。一旦你发现某些引脚相距很小(比如说<0.01),你就可以在将它们添加到地图之前修改它们的坐标。您可以使它们围绕实际的精确坐标形成一个小圆圈,圆周围的角度由该群集中的多少确定(例如,对于4个引脚,将它们放置在0度,90度,180度,270度)。或者你可以只用很小的数量改变纬度,这样引脚就会在垂直线上相互叠加。

当用户点击单个引脚时,您也可以进行此分离。即对于该引脚,检查是否有任何其他引脚非常接近。如果有,则移除此引脚(或者可以移除所有这些引脚),计算圆形或垂直线中所有引脚的新位置,然后将引脚重新添加到地图中(如果需要,打开任何标注视图)。 / p>

一旦引脚以这种方式分离,用户就可以轻松点击各个引脚。

我不确定谷歌地图/谷歌地球是如何处理这个问题的 - 你能描述一下还是提供截图?或者提一些会导致它发生的搜索词。但希望上面的想法会给你一些尝试。

答案 1 :(得分:1)

您可以简单地将它们组合到一个annotationView,当用户触摸它时,在annotationView内部制作一些奇特的动画来呈现内容。

我已经在MKMapView上建立了一个有用的控制来聚集附近的引脚(也用于具有相同坐标的引脚),因为我有几次相同的问题。它被称为OCMapView。它可以为您组合注释,但您必须自己在用户触摸时实现动画内容。