我正在做一个项目,需要不断更新我的android手机的位置。它工作得很好,但是,是非常不准确的。在室内,我获取的位置精度(通过getAccuracy())约为60(据我所知是以米为单位),我希望精度在(最大) 2-3米。首先,不可能一直获得(2-3米)的精度吗?如果是,如何选择?
下面是我用来获取用户位置的代码片段。
public boolean getLocation(Context context, LocationResult result)
{
//I use LocationResult callback class to pass location value from MyLocation to user code.
locationResult = result;
if(lm==null)
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//exceptions will be thrown if provider is not permitted.
try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}
//don't start listeners if no provider is enabled
if(!gps_enabled && !network_enabled)
return false;
if(gps_enabled)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
if(network_enabled)
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
timer1=new Timer();
timer1.schedule(new GetLastLocation(), 10000);
return true;
}我还遇到了另一个问题,我的设备经常处于静态位置,获取的两个连续GPS位置之间的距离非常不可靠,它从0.0米变化到16米,这意味着我的设备不断移动。
如果你们中的任何人对此有任何想法,最好是如何实现准确性,请帮助我。
谢谢
发布于 2012-08-10 12:12:39
与仅使用mintime和mindistance不同,您可以通过传入一个带有
ACCURACY_FINE
POWER_HIGH你的个人手机和物理环境显然会影响读数。您可能会总体上获得更好的结果,允许系统通过以下调用和条件不指定确切的位置提供程序来为您完成一些工作。
发布于 2012-08-10 12:41:25
基于Pork的答案,如果您灵活地调整更新频率,则可以在上面提供的情况下减少一点方差(具有可变精度的样本)。假设您将所需频率定义为0.1 hz (每10秒更新一次),然后您可以通过仅对最近10秒样本集中的“最佳”位置进行操作来过滤位置更新。确定“最佳”的一种简单方法可能是从具有最高准确率的集合中返回样本。如果有多个样本具有相同的准确率,则返回最新的。您可以做的另一件事是将给定集合中的所有样本平均在一起,或者以相同的精度对所有样本进行平均。由于GPS误差的几何性质,这不会提高整体精度,但会减少方差;您可以通过增加最小误差来减少最大误差。您还会在设备移动的情况下引入一些滞后效应,这可能是一个问题,也可能不是一个问题,这取决于您的应用程序。
发布于 2012-08-10 12:53:23
在室内使用GPS基本上不可能达到2-3米的精度。
GPS需要一个相当清晰的卫星位置线,所以你在室内越远,它就越不准确。
为了确定你在室内的位置,Android将尝试使用GPS,然后使用周围WIFI接入点的已知位置进行三角测量,然后是手机发射塔三角测量。它可能将这三个组合在一起,以提供更准确的猜测。
要真正准确地确定室内位置,你需要在谷歌已知的地点拥有相当多的WIFI接入点。我很确定他们就是这样做他们的室内购物中心导航的。
你可以使用的其他技巧来提高你的准确性(或丢弃不准确的读数),可以从加速计(或陀螺仪等)读取数据,并使用这些读数来尝试确定设备何时没有移动,或者它在某个方向上移动的速率。任何使用这些技术的东西都很难实现。
https://stackoverflow.com/questions/11895314
复制相似问题