Android上的Sqlite:如何创build一个SQLite远程数据库函数 – 在应用程序中使用拉特,长距离计算

我们正在构build一个Android应用程序,该应用程序将使用用户当前位置(lat,long),并显示当前位置周围的前50个场地,按距离sorting。

我们有这些场地存储在一个SQLite数据库。 我们计划与应用程序一起提供的SQLite数据库。

为了只提取相关的前50名最近的场地,我们要定义一个db函数DIST(计算两点之间的距离),并在我们的查询中使用它。

我如何为Android应用程序定义一个自定义SQLite函数? 什么是Java API调用来做到这一点?

我们已经在我们的iPhone应用程序中成功实现了这个方法 – 使用Objective C.

Solutions Collecting From Web of "Android上的Sqlite:如何创build一个SQLite远程数据库函数 – 在应用程序中使用拉特,长距离计算"

更新:答案是你不能这样做。

来自: Android。 是否可以在C / C ++上编写自定义函数并在SQL查询中使用它?

解决方法可能是获取其中一个值(如经度)接近当前位置的所有logging。 如果你使用这个列作为索引,那么获取这些将会非常快。

然后,通过比较纬度和进行全距离计算,可以减less子集的迭代次数。

它可以完成,但不能从Java API加载到数据库中。 你将需要提供你自己的sqlite库的实现,它被扩展来提供你想在C级别的function。 这并不好玩,但效果很好。 请注意,使用非标准体系结构的Android设备可能存在问题。

我知道这是一个古老的问题,但我觉得有一个更简单的解决scheme。

这是一个例子,但是在0度交叉时失效,尽pipe你可以把所有的纬度/经度都调整一下。

整体解决scheme对于sorting工作相当好,但只是使用毕达哥拉斯定理来计算相对距离(注意:在sqlite中没有平方根函数,但这是不相关的)。

  String calcDistance = "( ( (abs(" + cLat + ") - " + Math.abs(lat) + ") * (abs(" + cLat + ") - " + Math.abs(lat) + ") )" + "+ ( (abs(" + cLng + ") - " + Math.abs(lng) + ") * (abs(" + cLng + ") - " + Math.abs(lng) + ") ) ) as calc_distance"; 

如果你需要修正这个距离,你需要在所有纬度上加90,在所有经度上加180。 那么你可以摆脱那个讨厌的absfunction。