融合位置提供setSmallestDisplacement在特定的运动不工作

问题描述 投票:0回答:2

我试图让用户位置时,用户是移动。我写了下面的代码,我设置最小位移30米远,并间隔为0毫秒,我在每30米运动得到的位置,但我的应用程序不能正确工作。如果我在一个地方停下来,该应用程序并没有得到位置,这是真的,但是当我移动,有时我100米运动以上得到的位置。为什么?如果我超过30米得到的位置,我失去了一些积分,这对我来说是很重要的。

这是我的请求,位置更新代码:

 private void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(0);//(UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setFastestInterval(0);//(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setSmallestDisplacement(30);
    mLocationRequest.setMaxWaitTime(MAX_WAITE_TIME);

    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
android gps location distance fusedlocationproviderapi
2个回答
0
投票

LocationRequest.setSmallestDisplacement不给你一个更好的精确度,它只是避免不必要的更新。

有没有方法来提高精度低,你只会得到一个点具有一定精确度,如果你不感兴趣,精度低的位置就跳过这个位置,等待一个更好的。

没有完美的精确性已经上市,精度为100米是坏的准确性。

检查Android开发者页面,了解更多信息:

https://developer.android.com/training/location/receive-location-updates#location-request

试试这个:设定精确度以ACCURACY_FINE

设置的最高功率(以获得最佳的GPS信号)

不要求高度。

设置speedRequired为假

设置CostAllowed标志设置为true

设置BearingRequired为false

设置Horizo​​ntalAccuracy和VerticalAccuracy到HIGH

阅读更多有关这些功能,你就会明白为什么。

Criteria tenM= new Criteria();
tenM.setAccuracy(Criteria.ACCURACY_FINE);
tenM.setPowerRequirement(Criteria.POWER_HIGH);
tenM.setAltitudeRequired(false);
tenM.setSpeedRequired(false);
tenM.setCostAllowed(true);
tenM.setBearingRequired(false);
tenM.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
tenM.setVerticalAccuracy(Criteria.ACCURACY_HIGH);

locationManager.requestLocationUpdates(1000 /*milliseconds*/,  1 
/*1 meter*/, 
tenM /*criteria*/, this /*context*/, null);

0
投票

这是因为你的位置精度高于30米(可能更高)。所以,当你偏离100米改变你的位置,你仍然在估计位置的圆。你可以得到定位精度,看是否属实,但无论如何你没有更好的选择,而不是频繁地获得坐标,并选择一个与大多数的准确性。请参阅:FusedLocationProviderClient API LocationRequest setSmallestDisplacement doesn't work properly

© www.soinside.com 2019 - 2024. All rights reserved.