同一个MKMapView位置上的许多引脚

nik*_*ers 2 cocoa-touch annotations mkmapview ios4

我有一个场景,许多人住在同一个房子里,因此被映射到相同的经度和纬度.我希望每个人都有一个注释.我需要在同一位置有多个注释/引脚有哪些选项?其他人如何解决类似问题?

干杯

fre*_*ace 10

我通过引入"聚合"注释的概念来解决这个问题,该注释表示注释,否则这些注释会过于接近而无法区分.

我使用了一个简单的(也就是天真的)算法,当我添加一个新的注释时,我检查它是否与d现有注释的距离有关.如果是,我创建一个新的聚合注释,在其下面放置现有注释和新注释.然后我删除现有的注释,并添加聚合注释.聚合注释具有其成员的平均值的坐标.

这种特殊算法易于实现,但由于它为每个添加的注释检查每个现有注释,因此具有相当复杂的复杂性.优化将是使用a kd tree来减少搜索空间.

用户界面方式,点击这样的聚合注释将显示一个标注,显示聚合的注释数量,以及一些有关聚合注释的摘要信息.

此外,标注的MKAnnotationViewrightCalloutAccessoryView可以深入到上市总注释,以便用户可以选择特定成员考察的成员表视图.

另一个考虑因素是如何确定两个注释何时过于接近.您可以根据实际距离进行操作,在这种情况下,如果缩小注释仍然会重叠; 或者您可以根据屏幕上的逻辑距离进行操作,同时考虑注释视图的逻辑大小.后者可以确保您永远不会有重叠的注释,但由于您需要在地图区域更改时重新计算聚合,因此计算成本更高.