安卓上的Sqlite:如何创建一个sqlite分布式数据库函数 - 用于在应用程序中使用经纬度进行距离计算

6

我们正在开发一个Android应用程序,该应用程序将使用用户当前位置(纬度,经度)并显示距离当前位置最近的前50个场所。

我们已将这些场所存储在SQLite数据库中。我们计划在应用程序中随同sqlite数据库一起发布。

为了仅提取与当前位置最接近的50个相关场所,我们想要定义一个名为DIST的自定义数据库函数(用于计算两点之间的距离),并在查询中使用它。

我该如何为Android应用程序定义自定义SQLite函数?这将是哪个Java API调用?

我们已成功在我们的iPhone应用程序中实现了这种方法 - 使用Objective C。


https://dev59.com/_3A75IYBdhLWcg3wv73A - Pentium10
你好,你是如何在iOS上集成它的?因为我也需要做同样的事情,谢谢。 - user2353899
4个回答

5

Josh,谢谢你!如果你不介意,能否请给我指一些示例代码 - 这样我就可以确保不会犯错误。非常感谢! - Puneet
2
org.sqlite 不是 Android API,因此与此无关。 - hackbod
1
你说得对,org.sqlite不是Android API。然而,你可以使用它来实现一个内容提供者,以满足他的需求。 - Joshua Smith
实际上,我对您链接的内容提供者答案中概述的方法持怀疑态度。org.sqlite不在Android中,并且不清楚是否存在一个org.sqlite实现可以与Android的SQLite环境协同工作。 - Pentium10
你能描述一下需要遵循的步骤吗? - shashwat

1
一个解决方法可能是获取所有记录,其中一个值(比如经度)接近于当前位置。如果您将此列用作索引,则获取这些记录将非常快速。
然后,您就有了一个大大减少的子集来迭代比较纬度并进行完整的距离计算。

0

我知道这是一个老问题,但我认为有一个更简单的解决方案。

这是一个例子,但当经度穿过0度时会失败,尽管您可以移动所有纬度/经度进行调整。

总体解决方案对于排序非常有效,但只是使用勾股定理来计算相对距离(注意: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进行调整。然后您就可以摆脱那些讨厌的绝对值函数了。

0

这是可以实现的,但您无法从Java API将其加载到数据库中。 您需要提供自己的sqlite库实现,以C语言为基础扩展提供所需功能。 这不是一件有趣的事情,但它运行良好。请注意,您可能会在使用非标准架构的Android设备上遇到问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接