我有一个小问题。我在location.getSpeed()
方法上找到onLocationChanged()
方法,.getSpeed()
通常在我停留在同一个地方时不会更新/更改为0km / h。
我应该在哪里找到location.getGpeed()
方法,当我留在原地时更新显示0km / h?
另一个问题。这是我的locationListener
:
private final LocationListener locationListener = new LocationListener()
{public void onLocationChanged(Location location) {
boolean var = false;
float distance;
if (firstRun) { distance=0; firstRun=false; }
else
distance = location.distanceTo (startLocation);
Tspeed.setText("0km/h");
if (location.getSpeed()!=0)
{
Tspeed.setText(""+(location.getSpeed()*3600/1000 +"km/h"));
}
else
{
Tspeed.setText("0km/h");
}
sAllDistance += distance; //
startLocation=location;
Tdistance.setText(""+(int)SAllDistance+" m");
}
问题是:当LocationManager
获得修复时,AllDistance
返回的第一个location.distanceTo()
为±50米。
我该如何解决?
答案 0 :(得分:5)
实际上,GPS不会一直提供准确的信息。即使你住在同一个地方,有时候,纬度和经度也会有所不同。我认为这取决于您为minTime
方法提供的minDistance
和requestLocationUpdates(...)
。
无论如何,一旦尝试改变这些值,如下所示。
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000L(minTime), 2000.0f(minDistance), myLocationListener);
希望它有所帮助。
修改:
如果此修复程序包含速度信息,则根据documentation,location.hasSpeed()
返回true
,您可以做的另一件事是false
。当你呆在同一个地方时,它会返回false
我猜。
基于此,您可以为textView
等设置值。
我没试过,但你可以尝试一次。
答案 1 :(得分:1)
由于大气,卫星几何,附近建筑物等因素,GPS定位中存在连续不断的错误。
如果您正在尝试确定GPS接收器是否静止,那么您可以做的最好的事情是检查速度是否低于某个可信阈值(例如1kph)。
你可以做一些事情,比如对速度值进行数字滤波,例如,下面是一个简单的可调节低通滤波器,可以平滑速度的变化...放入一个低值(例如3),输出将对输入的变化,置于高值(例如10)并且输出变得非常平滑。
/**
* Simple recursive filter
*
* @param prev Previous value of filter
* @param curr New input value into filter
* @return New filtered value
*
*/
private float filter(final float prev, final float curr, final int ratio) {
// If first time through, initialise digital filter with current values
if (Float.isNaN(prev))
return curr;
// If current value is invalid, return previous filtered value
if (Float.isNaN(curr))
return prev;
// Calculate new filtered value
return (float) (curr / ratio + prev * (1.0 - 1.0 / ratio));
}
filtSpeed = filter(filtSpeed, speed, 3);