Android location.getspeed()更新
我有点小问题。我在Android location.getspeed()更新,android,gps,location,Android,Gps,Location,我有点小问题。我在onLocationChanged()方法上找到了一个location.getSpeed()方法,并且.getSpeed()在我停留在同一位置时通常不会更新/更改为0公里/小时 我应该在哪里找到一个location.getGpeed()方法,当我停留在原地时更新显示为0公里/小时 还有一个问题。这是我的locationListener: private final LocationListener locationListener = new LocationListener(
onLocationChanged()
方法上找到了一个location.getSpeed()
方法,并且.getSpeed()
在我停留在同一位置时通常不会更新/更改为0公里/小时
我应该在哪里找到一个location.getGpeed()
方法,当我停留在原地时更新显示为0公里/小时
还有一个问题。这是我的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
获得修复时,从location.distanceTo()返回的第一个AllDistance
为±50米
我怎样才能修复它呢?事实上,GPS不会一直提供准确的信息。即使你们呆在同一个地方,有时,纬度和经度也会略有不同。我认为这取决于minTime
和minDistance
您提供给requestLocationUpdates(…)
方法
无论如何,一旦尝试更改这些值,如下所示
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000L(minTime), 2000.0f(minDistance), myLocationListener);
希望能有帮助
编辑:
您可以做的另一件事是,根据,location.hasSpeed()
返回true
如果此修复包含速度信息,则返回false
。当你呆在同一个地方时,它会返回false
我猜
基于此,您可以为textView
等设置值
我没有试过,但你可以试一次。由于大气、卫星几何结构、附近建筑物等原因,GPS定位中存在连续的、不同的错误
如果您试图确定GPS接收器是否静止,最好的办法是检查速度是否低于某个可靠的阈值(例如1公里/小时)
你可以做一些事情,如数字过滤速度值,例如下面是一个简单的可调低通滤波器,平滑速度的变化。。。输入一个较低的值(如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);
好的,我已经改变了这一点,我添加了if(location.hasSpeed()){if(location.getSpeed()!=0){…但是location.getSpeed()在我停留在中时有时仍然显示速度>0place@KrystianBersztolc这就是我在回答中所经历和提到的GPS不会一直提供准确的信息
:)