有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android上的java Sqlite:如何创建Sqlite dist db函数,以便在应用程序中使用lat、long进行距离计算

我们正在构建一个Android应用程序,它将使用用户的当前位置(纬度、经度),并按距离排序显示当前位置周围的前50个场馆

我们将这些场地存储在SQLite数据库中。我们计划在应用程序中附带sqlite DB

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

如何为Android应用程序定义自定义SQLite函数?Java API调用将如何实现这一点

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


共 (4) 个答案

  1. # 2 楼答案

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

    这是一个示例,但当跨越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进行调整。然后你就可以摆脱那讨厌的腹肌功能了

  2. # 3 楼答案

    可以这样做,但不能从JavaAPI将其加载到数据库中。 您将需要提供自己的sqlite库实现,该库被扩展以提供您希望在C级别提供的函数。 这并不有趣,但效果很好。请注意,使用非标准架构的Android设备可能存在问题

  3. # 4 楼答案

    一种解决方法可能是获取其中一个值(例如,经度)接近当前位置的所有记录。如果使用此列作为索引,则获取这些列的速度将非常快

    然后,你有一个大大减少的子集来迭代比较纬度并进行全程计算