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

时间:2011-04-17 08:42:25

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

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

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

假设我能够按重要性排序POI,并且每个POI都有一个唯一的重要性因素,那么获得包含我MKMapView中显示区域内POI的子阵列的最佳方法是什么?

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

1 个答案:

答案 0 :(得分:0)

我想你要找的是:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect

引用Apple documentation

  

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

请注意,它只是在iOS 4.2及更高版本中可用,我担心在以前的iOS版本中没有其他解决方案而不是自定义代码。

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

然后我会建议:

  1. 使用该方法,快速编码,轻松,然后进行一些性能测试, on device
  2. 如果表演不够......或者你必须支持流行的iOS版本,没有魔法,请编写自己的代码。 (不应该那么难,有转换区域的实用方法等)
  3. 关于内存,嘿,这些设备很容易为您的应用程序提供至少64MB的可用内存,如果没有,将会杀死一些进程,不要被几K注释吓到!只需要处理内存泄漏,特别是在这些密集的过程中。