【问题标题】:Android Location.distanceTo(...) and Location.bearingTo(...) not returning correct resultsAndroid Location.distanceTo(...) 和 Location.bearingTo(...) 没有返回正确的结果
【发布时间】:2013-04-12 21:31:14
【问题描述】:

我已经看过几十篇关于此的帖子,所以请不要将其标记为重复,因为它不是。

所以运行以下代码:

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(所以 results[0] 是正确的)。 方位角285.454度

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

这意味着我一定做错了什么。任何人都可以帮忙。通常,我要做的就是计算目标点与当前位置点的距离和方向。如果有人有比上面显示的更好的方法,或者知道我做错了什么,请提供帮助。

谢谢 亚当

【问题讨论】:

    标签: android location distance bearing


    【解决方案1】:

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

    您在这里用两个不同的值设置了两次纬度:

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

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

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

    检查一下是否能解决您的问题

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

    【讨论】:

    • 感谢您的回复。整理出 lat/long 的混合,但仍然得到不正确的结果:Bearing to dest: -2.2131138Distance to dest: 6023135.0。甚至更陌生。如果它应该是正北以东的度数,你怎么能有负向?
    • 对于未来的受访者,我真正想要的是方位。我可以得到结果[0]的距离。
    • @Adam 负方位相当于真北以西的度数。也请参阅 LimbSoup 的答案,因为他有一个很好的观点
    • @AdamDavies 此外,如果您更新问题中的代码 sn-p,我们可能会看到其他不正确的内容。这两种方法得到不同的结果是没有意义的
    • 顺便说一句:初始轴承和最终轴承有什么区别?他们什么时候会有所不同?
    【解决方案2】:

    您确定自己的方位计算正确吗? results[2]: -72.59327 相当于 287.40673 度。

    【讨论】:

    • 嗯。因此,如果您的方位在 180 和 360 之间,则结果 [1] 的值为负数,因此您必须执行 360 - 结果 [0]。否则,它是一个正数,您可以按原样使用它。我仍然不知道 distanceTo 方法返回什么。我想最好不要这样做。
    猜你喜欢
    • 2023-03-14
    • 2014-09-13
    • 2012-08-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    相关资源
    最近更新 更多