Android,GPS。每秒获取一次位置

时间:2012-09-11 13:55:24

标签: android gps location coordinates

我有这个:

public class GpsUpdate extends Observable implements LocationListener  {

private int x_position;
private int y_position;
private float currentAccuracy;
public GpsUpdate(Observer observer){
    addObserver(observer);
}


@Override
public void onLocationChanged(Location location) {
    int lat = (int) (location.getLatitude() * 1E6);
    int lng = (int) (location.getLongitude() * 1E6);
    setAccuracy(location.getAccuracy());
    setX_position(lat);
    setY_position(lng);
    setChanged();
    notifyObservers();



}
@Override
public void onProviderDisabled(String provider) {
}


@Override
public void onProviderEnabled(String provider) {
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}

public int getX_position() {
    return x_position;
}
public void setX_position(int x_position) {
    this.x_position = x_position;

}
public int getY_position() {
    return y_position;

}
public void setY_position(int y_position) {
    this.y_position = y_position;
}

public void setAccuracy(float currentAccuracy) {
    this.currentAccuracy = currentAccuracy;
}


public float getAccuracy(){
    return currentAccuracy;
}

}

这个方法(onLocationChanged())通知另一个方法(update())在其他类中的位置发生了变化,但是我需要收集所有坐标,即使当前和前一个坐标相同。

_GPSUPDATE = new GpsUpdate(this);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, _GPSUPDATE);

    @Override
        public void update(Observable observable, Object data) {
            xCurrent = _GPSUPDATE.getX_position();
            yCurrent = _GPSUPDATE.getY_position();
                     .....
          }

那么,我每秒都要添加/更改以获得位置?

1 个答案:

答案 0 :(得分:3)

这是一种相当糟糕的方法。即使您需要每秒存储位置,然后重新定义您的应用逻辑以存储带时间戳的位置。这就足够了,因为(假设T是以秒为单位的增量时间),如果您在T=0收到并存储locationA,则T=2收到并存储locationB然后如果你想知道T=1的位置是什么,然后没有看到明确的记录,那么你知道当时的位置没有变化,所以很明显你的位置等于最后存储的位置最接近T ,在这种情况下,T=1您的位置(仍然)是locationA,因为自T=0以来它没有改变。这是更好的方法,可以节省大量的存储空间。如果你将它存储在数据库中,那么获得正确的结果也是微不足道的 - 只需搜索时间戳小于或等于的条目,按时间戳desc,限制为1。