我正在开发一个项目,需要我的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米,这意味着我的设备不断移动。 / p>
如果你们有任何想法,最好如何达到准确,请帮助我。
由于
答案 0 :(得分:2)
通过使用
传递Criteria对象,您可以获得更好的结果,而不是仅使用mintime和mindistanceACCURACY_FINE
POWER_HIGH
您的个人手机和物理环境显然会影响读数。您可能总体上会获得更好的结果,允许系统通过不使用以下调用和条件指定确切的位置提供程序来为您完成一些工作。
http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long,float,android.location.Criteria,android.location.LocationListener,android.os.Looper)
答案 1 :(得分:1)
根据Pork的回答,如果你对更新频率很灵活,你可以在上面提到的情况下(精度可变的样本)稍微减少方差。假设您将所需频率定义为0.1 hz(每10秒更新一次),然后您可以通过仅操作最近10秒内样本集中的“最佳”位置来过滤您的位置更新。确定“最佳”的简单方法可能是从具有最高准确度等级的集合中返回样本。如果有多个样品具有相同的精度等级,则返回最新的样品。您可以做的另一件事是将给定集合中的所有样本平均在一起,或者仅对具有相同精度的所有样本进行平均。由于GPS误差的几何特性,这不会提高整体精度,但会减少方差;你会通过增加你的最小错误来减少你的最大错误。在设备移动的情况下,您还会引入一些滞后效应,根据您的应用,这可能是也可能不是问题。
答案 2 :(得分:1)
在室内使用GPS时基本上无法获得2-3米的精度。
GPS需要一个相当清晰的卫星线路,所以在室内越远,它就越不准确。
要确定您在室内的位置,Android会尝试使用GPS,然后使用周围WIFI接入点的已知位置进行三角测量,然后进行手机信号塔三角测量。它可能结合这三个来提供更准确的猜测。
要准确确定室内位置,您需要在Google已知的位置拥有相当多的WIFI接入点。我很确定他们如何做他们的室内购物中心导航。
您可以用来提高准确度(或丢失不准确的读数)的其他技巧可能是从加速度计(或陀螺仪等)读取数据,并使用这些读数来尝试确定设备何时不准确移动,或它在某个方向上移动的速度。任何使用这些技术的东西都可能很难实现。