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

时间:2013-03-18 10:30:39

标签: 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);

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

请帮帮我。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

选项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

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

答案 1 :(得分:0)

您正在计算距离的 square 。由于SQLite没有平方根函数,因此您需要在Java代码中计算它。

如果您只需按距离排序,那么您当前的代码就可以了。

答案 2 :(得分:-1)

您可以使用 android.location.Location 类的静态方法 distanceBetween 。然后根据计算出的距离,您可以生成一些排序的对象集合,如SortedMap。