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

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

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

任何帮助将不胜感激。

塞巴斯蒂安。

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

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

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

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

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

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

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