Location.distanceTo在android中没有给出正确的结果

时间:2014-10-21 15:27:10

标签: android gps location

我正在尝试计算两个位置之间的距离(当前位置与之前的位置)。

所以我尝试了以下内容:

Location previousLocation = new Location("");
previousLocation.setLatitude(sharedPreferences.getFloat("previousLatitude", 0f));
previousLocation.setLongitude(sharedPreferences.getFloat("previousLongitude", 0f));
float distance = location.distanceTo(previousLocation);
totalDistanceInMeters += distance;
editor.putFloat("totalDistanceInMeters", totalDistanceInMeters);
Log.e("Location Update","totalDistance"+totalDistanceInMeters);     
if (totalDistanceInMeters > 1)
{
 Toast.makeText(getApplicationContext(), "Total UpdateLocation"+totalDistanceInMeters/1609, Toast.LENGTH_SHORT).show();
 Log.e("Alert","Update");
}

测试上面的代码。第一次结果是完美的,当它第二次触发时。手机在同一个位置,但我的距离像141.0111米。第三时间304.0011米我在这里做错了吗?

结果未正确显示。根据在线doc,结果以米为单位。

有没有一种简单的方法来计算第一个位置结果与第二个位置结果之间的差异,如果它超过10米,我想做一些其他的计算,如果不是只是保持相当。

让我知道。

2 个答案:

答案 0 :(得分:1)

为什么你甚至使用以下代码

float distance = location.distanceTo(previousLocation);
totalDistanceInMeters += distance;

将前一距离与当前距离相加并每次都给出附加值......

示例

first time 
distance between A and B is 100 m
second time
distance between A and B is 100 m+100 m=200 m

所以尝试直接在吐司中使用距离

float distance = location.distanceTo(previousLocation);
if (totalDistanceInMeters > 1)
{
 Toast.makeText(getApplicationContext(), "Total UpdateLocation"+distance/1609,Toast.LENGTH_SHORT).show();
 Log.e("Alert","Update");
}

答案 1 :(得分:0)

我认为需要设置准确度才能获得准确的距离。还要尝试手动掌握先前和当前位置,以便计算距离并进行验证。