Android上的java Sqlite:如何创建Sqlite dist db函数,以便在应用程序中使用lat、long进行距离计算
我们正在构建一个Android应用程序,它将使用用户的当前位置(纬度、经度),并按距离排序显示当前位置周围的前50个场馆
我们将这些场地存储在SQLite数据库中。我们计划在应用程序中附带sqlite DB
为了只获取相关的前50个最近的场馆,我们需要定义一个db函数DIST(计算两点之间的距离),并在查询中使用它
如何为Android应用程序定义自定义SQLite函数?Java API调用将如何实现这一点强>
我们已经在我们的iPhone应用程序中成功地实现了这种方法——使用Objective C
# 1 楼答案
更新:答案是你不能这样做
发件人:Android. Is it possible to write custom function on C/C++ and use it in SQL query?
# 2 楼答案
我知道这是一个老问题,但我认为有一个更简单的解决办法
这是一个示例,但当跨越0度时失败,尽管您可以移动所有纬度/经度进行调整
整体解决方案对于排序非常有效,但只使用毕达哥拉斯定理来计算相对距离(注意:sqlite中没有平方根函数,但这并不相关)
如果需要固定此距离,则需要通过将所有纬度加90,将所有经度加180进行调整。然后你就可以摆脱那讨厌的腹肌功能了
# 3 楼答案
可以这样做,但不能从JavaAPI将其加载到数据库中。 您将需要提供自己的sqlite库实现,该库被扩展以提供您希望在C级别提供的函数。 这并不有趣,但效果很好。请注意,使用非标准架构的Android设备可能存在问题
# 4 楼答案
一种解决方法可能是获取其中一个值(例如,经度)接近当前位置的所有记录。如果使用此列作为索引,则获取这些列的速度将非常快
然后,你有一个大大减少的子集来迭代比较纬度并进行全程计算