在 iPhone 上使用 SQLite 数据库的空间请求
Posted
技术标签:
【中文标题】在 iPhone 上使用 SQLite 数据库的空间请求【英文标题】:Spatial request using SQLite database on iPhone 【发布时间】:2011-01-05 10:08:34 【问题描述】:我想通过使用本地存储的空间数据来开发一个使用地理定位的 iPhone 应用程序。
这种应用程序的棘手部分是对“我想要我周围的 x 个最近点”请求的响应。这是因为必须对数据进行排序,排序标准是球体上的距离(是的,地球不是平的^^)。所以一个高效的算法是相当复杂的。
空间数据本地存储在我的应用程序中(因此使用 sqlLite),因此我不能使用诸如 MyGis 或 PostGis 之类的库。在 SqlLite 上我看到了“SpatiaLite”,但是用 iPhone 好像不是很方便。
任何人都知道可以轻松完成此任务的库吗?...或执行此任务的便捷方式?
【问题讨论】:
【参考方案1】:在您的 SQL 查询中,您需要计算给定点与每个存储点之间的距离,按该值对结果进行排序并返回前 x 行。
您没有说明有多少数据点,或者它们有多分散 - 如果这是一个大型数据集,那么这种方法会很昂贵,您需要研究如何识别可能的子集在计算所有距离之前点,和/或缓存/预计算技术,以防止您一遍又一遍地为同一个地方的用户计算相同的信息。因为您实际上将在每个数据行上运行一个函数,所以不能使用索引。
关于如何计算两点之间的距离有很多很好的参考,例如:
http://www.mathopenref.com/coorddist.html
除非数据对精度特别敏感,否则地球的球形性质不会对距离产生太大影响,但如果是这样,还有其他因素(例如高度变化)也会对实际距离产生影响.
【讨论】:
您好 Purpletoucan,感谢您的回答。我是“大数据集”的原因,这就是为什么我要搜索库而不是自己编写算法。以上是关于在 iPhone 上使用 SQLite 数据库的空间请求的主要内容,如果未能解决你的问题,请参考以下文章