我正在寻找计算两点之间距离的好方法。
我想根据距离我的地理位置进行排序。
我有:
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);
但这是错误的解决方案...... 距离错了......
请帮帮我。
答案 0 :(得分:3)
你在这里遇到的问题是你要合并:
如果您追求准确性,这根本行不通!
以下是我使用的一些选项。
选项1 - 使用大圆距离
此公式用于计算两个GPS坐标之间的距离(以米为单位)
Android提供了一个函数distanceBetween作为android.location.Location类的一部分来帮助解决这个问题。
缺点是您必须从SQLite中提取所有点才能计算距离。
我也看过一些混合动力车如:
然后使用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。