iOS SDK-在任何显示的地图范围内显示#最重要的POI

iOS SDK-在任何显示的地图范围内显示#最重要的POI,ios,mkmapview,mkannotation,cllocation,point-of-interest,Ios,Mkmapview,Mkannotation,Cllocation,Point Of Interest,我有一个数据结构,其中包括: 显示POI(兴趣点)重要性的NSNumber 包含POI坐标的CLLocation 假设我能够按重要性对POI进行排序,并且每个POI都有一个唯一的重要性因子,那么获得POI位于我的MKMapView中显示区域内的子阵列的最佳方法是什么 简单地检查每个POI似乎效率低下,因为我可能有几千个POI,每次缩放级别更改时,我都要重复这个过程(因此在任何显示的区域,我只显示最重要的POI)。我想您需要的是: - (NSSet *)annotationsInMapRect

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

  • 显示POI(兴趣点)重要性的
    NSNumber
  • 包含POI坐标的
    CLLocation
假设我能够按重要性对POI进行排序,并且每个POI都有一个唯一的重要性因子,那么获得POI位于我的
MKMapView
中显示区域内的子阵列的最佳方法是什么


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

我想您需要的是:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect
引述:

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

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

编辑关于您的评论:我的猜测是,对于几千个注释,上面的方法应该可以做到,
MKAnnotation
是一个轻量级协议,通过在坐标上过滤来扫描数组应该可以。但请注意不要添加数千个在iPhone4上运行的
MKAnnotationView
,它们已经添加了,但您几乎无法滚动地图:)

那么,我建议:

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

  • 关于内存,嘿,这些设备很容易为你的应用程序提供至少64MB的可用内存,如果没有的话,会杀死一些进程,不要被一些注释吓着了!请注意内存泄漏,特别是在这样密集的进程中。

    谢谢。要使用
    annotationsInMapRect
    ,我必须注释所有的poi(可能是一些k),并通过
    regiondidchangenamazing
    为我感兴趣的对象创建/更新注释视图。我的注释类非常轻量级(一个字符串和一个指向我的对象的指针),但是当我们讨论数千个注释类时,您认为这种方法有效吗?这实际上是一个选择的问题:(内存使用)加载所有和显示所需VS(速度影响)遍历所有和注释所需(服务器后端尚不成熟,因此我无法使用大量数据进行测试。)编辑有关您的评论的答案。若服务器并没有提供足够的数据,只需通过代码生成随机测试数据!