【问题标题】:Many pins on the same MKMapView location同一 MKMapView 位置上的许多引脚
【发布时间】:2011-02-04 07:29:19
【问题描述】:

我有一个场景,很多人住在同一所房子里,因此被映射到相同的经度和纬度。我希望每个人都有一个注释。我必须在同一个位置有很多注释/图钉有哪些选择?其他人是如何解决类似问题的?

干杯

尼克

【问题讨论】:

    标签: cocoa-touch ios4 annotations mkmapview


    【解决方案1】:

    我通过引入“聚合”注解的概念解决了这个问题,该注解表示否则会靠得太近而无法区分的注解。

    我采用了一种简单(又名幼稚)的算法,当我添加新注释时,我会检查它是否与现有注释的距离 d。如果是,我创建一个新的聚合注释,将现有注释和新注释放在它下面。然后我删除现有注释并添加聚合注释。聚合注释的坐标是其成员的平均值。

    这个特定的算法很容易实现,但是非常复杂,因为它会检查每个现有的注解来添加每个注解。一种优化是使用kd tree 来减少搜索空间。

    在用户界面方面,点击这样的聚合注释会显示一个标注,显示聚合注释的数量,以及关于聚合注释的一些摘要信息。

    此外,标注的MKAnnotationViewrightCalloutAccessoryView 可以深入到列出聚合注释成员的表格视图中,以便用户可以选择特定的成员进行检查。

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

    【讨论】:

    • 我的回答应该足够实现了:)
    【解决方案2】:

    https://stackoverflow.com/a/15438440/2482283

    您不一定需要使用 3rd 方框架,因为从 iOS 4.2 开始,MKMapView 有一个名为 - (NSSet *)annotationsInMapRect:(MKMapRect)mapRect 的方法,您可以使用它来进行集群。

    观看 WWDC11 会议视频“使用 MapKit 在地理上可视化信息”。大约一半的时候解释了如何去做。但我会为你总结一下这个概念:

    • 列表项
    • 使用两个地图(第二个地图永远不会添加到视图层次结构中)
    • 第二张地图包含所有注释(同样,它从未绘制过)
    • 将地图区域划分为正方形网格
    • 使用 -annotationsInMapRect 方法获取注释数据 隐形地图
    • 可见地图根据这些来自不可见地图的数据构建其注释

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多