我已经看了几十篇关于这个的文章,所以请不要把它标记为重复的,因为它不是。
所以运行下面的代码:
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]给出了什么。bearingTo和distanceTo都给出了完全错误的答案。
这意味着我一定做错了什么。有人能帮忙吗?一般来说,我想做的就是计算目标点到当前位置点的距离和方向。如果有人有比上面显示的更好的方法,或者知道我做错了什么,请帮助。
谢谢亚当
计算的距离存储在结果
中[0]
中。如果结果长度为2或更大,则初始轴承存储在结果[1]
中。如果结果长度为3或更大,则最终轴承存储在结果[2]
- docs
你用两个不同的值设置了两次纬度:
here.setLatitude(currentLat);
here.setLatitude(currentLng);
你在这里混淆了lat/long值:
dest.setLongitude(destLat);
dest.setLatitude(destLng);
检查并查看是否解决了您的问题
计算距离和方位的两种方法应该产生相同的结果,因为使用相同的方法计算这些结果。查看SDK的源代码
你确定你自己计算的方位是正确的吗?results[2]: -72.59327
= 287.40673℃