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
MKMapView
中显示区域内的子阵列的最佳方法是什么
简单地检查每个POI似乎效率低下,因为我可能有几千个POI,每次缩放级别更改时,我都要重复这个过程(因此在任何显示的区域,我只显示最重要的POI)。我想您需要的是:
- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect
引述:
此方法提供了检索地图特定部分中注释对象的快速方法。这种方法比自己在annotations属性中对对象进行线性搜索要快得多
请注意,它仅在iOS 4.2及更高版本中可用,恐怕除了以前iOS版本中的自定义代码之外,没有其他解决方案
编辑关于您的评论:我的猜测是,对于几千个注释,上面的方法应该可以做到,MKAnnotation
是一个轻量级协议,通过在坐标上过滤来扫描数组应该可以。但请注意不要添加数千个在iPhone4上运行的MKAnnotationView
,它们已经添加了,但您几乎无法滚动地图:)
那么,我建议:
关于内存,嘿,这些设备很容易为你的应用程序提供至少64MB的可用内存,如果没有的话,会杀死一些进程,不要被一些注释吓着了!请注意内存泄漏,特别是在这样密集的进程中。谢谢。要使用
annotationsInMapRect
,我必须注释所有的poi(可能是一些k),并通过regiondidchangenamazing
为我感兴趣的对象创建/更新注释视图。我的注释类非常轻量级(一个字符串和一个指向我的对象的指针),但是当我们讨论数千个注释类时,您认为这种方法有效吗?这实际上是一个选择的问题:(内存使用)加载所有和显示所需VS(速度影响)遍历所有和注释所需(服务器后端尚不成熟,因此我无法使用大量数据进行测试。)编辑有关您的评论的答案。若服务器并没有提供足够的数据,只需通过代码生成随机测试数据!