在 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 数据库的空间请求的主要内容,如果未能解决你的问题,请参考以下文章

iPhone上SQLite时间戳的错误时间

如何解决 SQLite 查询的空绑定?

iPhone 只能使用 SQLite 数据库吗?

在 iPhone 上更新 SQLite 数据库

如何在应用程序版本更新时维护 iPhone 上 SQLite 数据库中的数据?

在 nsthread 上运行的 iPhone Sqlite 插入