2

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

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

任何帮助将不胜感激。

塞巴斯蒂安。

4

2 回答 2

4

您是否认为当多个图钉位于完全相同的坐标时,它们会彼此重叠显示?或者苹果是否有可能在同一坐标处剔除额外的引脚?

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

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

一旦以这种方式分离了引脚,用户就很容易轻敲各个引脚。

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

于 2012-04-16T14:08:47.513 回答
1

您可以简单地将它们组合成一个annotationView,当用户触摸它时,会在其中制作一些精美annotationView的动画来呈现内容。

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

于 2012-04-16T14:12:26.673 回答