Android和使用sqlite的两点之间的距离

标签 android sqlite distance

我正在寻找计算两点之间距离的好方法。

我想按距离对我的地理点进行排序。

我有:

Cursor c = database.rawQuery("SELECT name,latitude,longitude,((longitude-21.15)*(longitude-21.15) +(latitude-54.05)*(latitude-54.05)) AS len FROM Object ORDER BY len;", null);

但这是错误的解决方案... 距离不对...

请帮帮我。

最佳答案

你在这里遇到的问题是你正在合并:

  • 用于表示球体上的点的 GPS 坐标 (WGS84)。
  • 毕达哥拉斯定理,需要一个二维直角坐标系来确定距离。

如果您追求准确性,这根本行不通!

以下是我使用过的一些选项。

选项 1 - 使用大圆距离

此公式用于计算两个 GPS 坐标之间的距离(以米为单位)

Android提供了一个函数distanceBetween作为 android.location.Location 类的一部分来协助解决这个问题。

缺点是您必须从 SQLite 中提取所有点才能计算距离。

我也见过一些混合体,例如:

  • 将 WGS84 (GPS) 视为矩形
  • 在您的数据库中指定一个区域以限制您在计算距离时提取的数据大小。

然后使用 distanceBetween 函数进一步过滤结果。

选项 2 - 使用直角坐标系

如果你的距离很小,那么你可以通过将数据库点存储在矩形的 UTM 中来解决这个问题。

使用几乎相同的公式,但使用东移和北移,SQLite 数据库可用于提供距离 UTM 点最近的 x 个点。一旦确定了这些点,就可以对 x 结果执行平方根函数以获得以米为单位的距离。

嗯?

使用 UTM 也有一些注意事项。它可能会帮助您查看 Calculating Distance Between Two Sets of Coordinates

因此您的解决方案最终取决于您的应用,并且是速度和准确性之间的折衷。

关于Android和使用sqlite的两点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15474621/

相关文章:

sql - 如何从子查询 SQLite 接收两个值

python - 从头开始计算 3 个 numpy 数组之间的欧氏距离

android - GCM 默认发件人ID

android - list 文件中的 Intent 定义

android - 以编程方式停用 Android 中的设备管理员?

android - 无法将 'Column' 内联方法调用到 Jetpack compose 中的本地最终乐趣 <anonymous>()

php - Perl 脚本在 crontab 中执行时无法写入数据库,尽管如果手动执行则可以写入

c++ - 在 Windows `Can' t 打开包含文件时设置 CMake 和 vcpkg 时出错

java - 可用于团队项目中远程工作的约定

javascript - 谷歌地图 - computeDistanceBetween 不工作