1

我正在开发一个需要不断更新我的 android 手机位置的项目。它工作正常,但是非常不准确。在室内,我获取的位置精度(通过 getAccuracy())大约为 60(据我所知以米为单位),而我希望精度为(最大)2-3 米。首先,不可能不断地获得(2-3米)的精度吗?如果是,如何?

Follow 是我用来获取用户位置的代码片段。

    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 米,这意味着我的设备一直在移动。

如果你们中的任何人对此有任何想法,最好如何达到准确性,请帮助我。

谢谢

4

3 回答 3

2

除了使用 mintime 和 mindistance 之外,您还可以通过传入 Criteria 对象来获得更好的结果

ACCURACY_FINE
POWER_HIGH

您的个人电话和物理环境显然会影响读数。您可能会总体上获得更好的结果,允许系统通过不使用以下调用和标准指定确切的位置提供者来为您完成一些工作。

http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long , float, android.location.Criteria, android.location.LocationListener, android.os.Looper)

于 2012-08-10T04:12:39.017 回答
1

在 Pork 的回答的基础上,如果您对更新频率很灵活,则可以在上面介绍的情况下(具有可变精度的样本)稍微减少方差。假设您将所需的频率定义为 0.1 hz(每 10 秒更新一次),然后您可以通过仅对最近 10 秒的样本集中的“最佳”位置进行操作来过滤您的位置更新。确定“最佳”的一种简单方法可能是从具有最高准确度等级的集合中返回样本。如果有多个具有相同准确度等级的样本,则返回最新的。您可以做的另一件事是将给定集合中的所有样本平均在一起,或者仅以相同的精度对所有样本进行平均。由于 GPS 误差的几何性质,这不会提高整体精度,但会减少方差;您将通过增加最小错误来减少最大错误。在设备移动的情况下,您还会引入一些滞后效应,这可能会或可能不会成为问题,具体取决于您的应用程序。

于 2012-08-10T04:41:24.950 回答
1

在室内使用 GPS 基本上不可能得到 2-3m 的精度。

GPS 需要一条相当清晰的卫星站点线,因此在室内越远,它的准确度就越低。

为了确定您在室内的位置,Android 将尝试使用 GPS,然后使用周围 WIFI 接入点的已知位置进行三角测量,然后进行蜂窝塔三角测量。它可能结合了这 3 个以提供更准确的猜测。

要真正准确地确定室内位置,您需要在 Google 已知的位置拥有相当多的 WIFI 接入点。我很确定这就是他们做室内购物中心导航的方式。

您可以用来提高准确性(或排除不准确读数)的其他技巧可能是从加速度计(或陀螺仪等)读取数据,并使用这些读数来尝试确定设备何时不移动或速率它正朝着某个方向发展。任何使用这些技术的东西都可能很难实现。

于 2012-08-10T04:53:23.350 回答