代码之家  ›  专栏  ›  技术社区  ›  Rissmon Suresh

当设备缓慢移动或静止时,GPS会波动

  •  1
  • Rissmon Suresh  · 技术社区  · 8 年前

    我面临的数据问题来自 GPS.

    我正在计算 distance upon the location change callback ,因此,当设备空闲时,由于GPS波动,距离会增加。

    我一直在使用 FusedLocationProviderClient 用于获取位置更新。

     fusedLocationClient.requestLocationUpdates(locationRequest,
                       locationCallback, Looper.myLooper()); 
    
    
    
    
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
                mLocationCallback = new LocationCallback() {
                    @Override
                    public void onLocationResult(LocationResult locationResult) {
                        super.onLocationResult(locationResult);
                        onNewLocation(locationResult.getLastLocation());
                    }
                };
    
    
     private void createLocationRequest() {
        locationRequest = new LocationRequest();
        locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
        locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   from56    8 年前

    GPS定位精度不超过4米或5米。也就是说,每次计算一个位置时,它可以在半径不小于4米的范围内。有时,计算出的位置会向前移动米,有时会向左、向后等移动米。

    如果您不想考虑这些小的变化,那么必须由您的代码来判断用户是否真的移动了。

    这听起来很难,是的,但这是应用程序或GPS设备计算接近正确距离的优点。

        2
  •  1
  •   vlazzle    8 年前

    Lluis Felisart是正确的。回调中报告的位置似乎存在随机波动。

    你可以尝试的一件简单的事情是 LocationCallback 检查 LocationResult.getLocations() 其中最后两个元素是最近的两个 Location 您已收到。对于这两个 地方 s、 比较其 getAccuracy() 值,乘以某些模糊因子 K ,两者之间的距离 地方 s、 如果结果精度小于位置之间的距离,请忽略位置更新。这绝对不是完美的,但会过滤掉一些噪音。

    也许一种更先进的方法更有效,那就是计算加权移动平均数 地方 s英寸 位置结果。getLocations() . 每个都可以称重 地方 按its getAccuracy() 价值