【问题标题】:iOS SDK - Displaying # most important POIs at any displayed map rangeiOS SDK - 在任何显示的地图范围内显示 # 个最重要的 POI
【发布时间】:2011-04-17 08:42:24
【问题描述】:

我有一个数据结构,其中包含:

  • NSNumber 显示 POI(兴趣点)的重要性
  • CLLocation 包含 POI 的坐标。

假设我能够按重要性对 POI 进行排序,并且每个 POI 都有一个独特的重要性因子,那么在我的 MKMapView 中显示区域内的 POI 中获取子数组的最佳方法是什么?

简单地检查每个 POI 似乎效率低下,因为我可能有几千个 POI,并且我想在每次缩放级别更改时重复此过程(因此在任何显示的区域我只显示 # 最重要的)。

【问题讨论】:

    标签: ios mkmapview mkannotation cllocation point-of-interest


    【解决方案1】:

    我猜你要找的是:

    - (NSSet *)annotationsInMapRect:(MKMapRect)mapRect
    

    引用Apple documentation

    此方法提供了一种快速检索地图特定部分中的注释对象的方法。这种方法比自己对 annotations 属性中的对象进行线性搜索要快得多。

    请注意,它仅在 iOS 4.2 及更高版本中可用,恐怕除了以前的 iOS 版本中的自定义代码之外没有其他解决方案。

    编辑关于您的评论:我的猜测是,对于几千个注释,上述方法应该可以解决问题,MKAnnotation 是一个轻量级协议,扫描一个通过坐标过滤的数组应该没问题。但要注意不要添加数千个MKAnnotationView,它适用于 iPhone 4,已经做到了,但你几乎不能滚动地图:)

    那我建议:

    1. 使用该方法,快速编码,简单,然后进行一些性能测试,在设备上
    2. 如果性能不够......或者你必须支持以前的iOS版本,没有魔法,写你自己的代码。 (应该没那么难,有转换区域等实用方法)

    关于内存,嘿,这些设备至少有 64MB 的可用内存供您的应用使用,如果没有,它们会杀死一些进程,不要被几 K 的注释吓到!只需注意内存泄漏,尤其是在如此密集的进程中。

    【讨论】:

    • 谢谢。要使用annotationsInMapRect,我必须注释所有 POI(可能是一些 k),并通过 regionDidChangeAnimated 创建/更新我感兴趣的注释视图。我的注释类非常轻量级(1x NSString 和指向我的对象的指针),但是当我们谈论成千上万的对象时,您认为这种方法有效吗?这实际上是一个选择问题:(内存使用)加载所有并显示需要VS(速度影响)遍历所有并注释需要(服务器后端还为时过早,所以我无法用大量数据进行测试。)
    • 已编辑关于您的评论的答案。如果服务器没有提供足够的数据,只需要通过代码生成随机测试数据!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多