Android Location.distanceTo(...)和Location.bearingTo(...)没有返回正确的结果

时间:2013-04-19 13:12:17

标签: android location distance bearing

我已经发了几十篇关于此的帖子所以请不要将其标记为副本,因为它不是。

所以运行以下代码:

private void testLocation(){
    double currentLat = 51.43376;
    double currentLng = -2.86221;

    double destLat = 51.43503; 
    double destLng = -2.86869;

    final float[] results= new float[3];
    Location.distanceBetween(currentLat, currentLng, destLat, destLng, results);
    Log.d("GPS", "results[0]: " + results[0]);
    Log.d("GPS", "results[1]: " + results[1]);
    Log.d("GPS", "results[2]: " + results[2]);


    Location here = new Location("Current");
    here.setLatitude(currentLat);
    here.setLatitude(currentLng);

    Location dest = new Location("Destination2");
    dest.setLatitude(destLat);
    dest.setLongitude(destLng);


    Log.d("GPS", "Bearing to dest: " + here.bearingTo(dest));
    Log.d("GPS", "Distance to dest: " + here.distanceTo(dest));
}

输出结果为:

04-19 13:39:55.850: D/GPS(12398): results[0]: 472.2533
04-19 13:39:55.860: D/GPS(12398): results[1]: -72.5882
04-19 13:39:55.860: D/GPS(12398): results[2]: -72.59327
04-19 13:39:55.860: D/GPS(12398): Bearing to dest: 120.83207
04-19 13:39:55.860: D/GPS(12398): Distance to dest: 7893878.5

正确的值应该是:     距离472.2533(因此结果[0]是正确的)。     轴承285.454度

所以我不知道结果[1]和结果[2]给出了什么。而且,toTo和distanceTo都给出了完全错误的答案。

这意味着我必须做错事。谁能帮忙。通常,我想要做的就是从当前位置点计算目标点的距离和方向。如果有人比上面所示有更好的方法,或者知道我做错了什么,请帮助。

由于 亚当

2 个答案:

答案 0 :(得分:4)

  

计算的距离存储在结果[0]中。如果结果的长度为2或更大,则初始方位存储在结果[1]中。如果结果的长度为3或更长,则最终方位存储在结果中[2] - docs

您在此处使用两个不同的值设置纬度两次:

here.setLatitude(currentLat);
here.setLatitude(currentLng);

你在这里混合了纬度/经度值:

dest.setLongitude(destLat);
dest.setLatitude(destLng);

检查并查看是否可以解决您的问题

计算距离和方位的两种方法应该产生相同的结果,因为使用相同的方法来计算这些结果。请看the source code of the SDK

答案 1 :(得分:1)

您确定自己的轴承计算是否正确? results[2]: -72.59327相当于287.40673度。