处理成千上万(300 000+)的MKAnnotation,我该如何处理存储?

时间:2012-06-05 23:00:34

标签: iphone database mkannotation mapkit

在应用程序中使用位置名称(标题+纬度和经度)保存这些位置需要相当多的空间。如何减小应用程序的大小?任何建议都会让我感到满意。

这也可能会降低应用程序的性能,考虑到这些建议吗?

EDIT1: 它只是打击了我,如果我将所有内容保存在在线服务器上并查询“注释瓦片”,就像谷歌地图那样可能是解决方案。所以现在我的问题是:有没有人知道查询“注释瓦片”的好算法?这可能非常棘手,因为地图包含几个zoomLevels等。 对于初学者,我可能会创建几个四叉树(每个zoomlevel一个),我存储了我已经查询过的哪些图块。

你们认为这种做法可能会好吗?或者在3G上运行速度太慢了?

提前致谢。

2 个答案:

答案 0 :(得分:1)

由于您没有对解决方案设置任何限制,这就是我要做的事情;

首先,将注释存储在真实数据库中,300k记录对于XML文件来说有点多,您必须在某些时候开始查询它们,而XML恰好不适合它。

其次,我将它存储在设备上或服务器上。你的选择,我不知道有多大的300.000注释。我会根据设定半径的区域查询服务器或数据库。这应该不会太难,它应该很好地限制查询量(以及服务器通信)。您可以直接将其与来自MKMapViewCLLocationManager实例的回调相结合。

如果您仍然担心过多的沟通,请构建一个缓存机制。暂时将查询结果存储在磁盘上一段时间(或设置空间量,或者使用频率,无论数据的用途如何)。构建查询机制,以便在转到数据库或服务器之前首先尝试从磁盘解析结果(如果您有本地数据库,则不需要真正的缓存机制)。

如果您无法执行任何这些操作(具有服务器或数据库),则至少要拆分XML文件,以便自己轻松管理和查询数据。延迟加载,但要确保您的数据结构设置为延迟加载(XML肯定不是)。

P.S:如果你在查询,不要担心缩放太多;只查询当前位置+偏移半径。您的偏移半径将由缩放量定义,它只是发送到您的服务器/数据库的另一个参数。

答案 1 :(得分:0)

您应该懒得加载这些位置(只检索所需的内容),而不是将应用程序本身用作存储引擎。