2015-02-10 178 views
0

我想在我的android应用程序中使用GPS获取最新的位置更新,其中用户必须在他进入时在特定位置检入,而在他离开时检查出是手动操作。 如果用户驻留在指定的半径(即18米)内,他将成功检入。GPS坐标偏差

以下是我的设置。

// Milliseconds per second 
private static final int MILLISECONDS_PER_SECOND = 1000; 
    // Update frequency in seconds 
public static final int UPDATE_INTERVAL_IN_SECONDS = 40; 
    // Update frequency in milliseconds 
private static final long UPDATE_INTERVAL = 
      MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS; 


private static final int FASTEST_INTERVAL_IN_SECONDS = 40; 


mLocationRequest = LocationRequest.create(); 
mLocationRequest.setPriority(
    LocationRequest.PRIORITY_HIGH_ACCURACY 
); 



    mLocationRequest.setInterval(UPDATE_INTERVAL); 

    mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 

这种方法的问题是,因为我每40秒后取出的位置,如果用户是在一个地方,我们仍然得到5米偏离他目前的位置远在坐标,有时更多的则是其是不能接受的。

所以有一种方法,我可以配置该位置API只提取位置,如果用户超出18米,否则它会继续显示相同的坐标,我试过但它不工作。

  mLocationRequest.setSmallestDisplacement(18); 
+0

Android很有可能(特别是在室内)计算位置的融合效果并不像您需要的那样精确。 – ahjohnston25 2015-02-10 05:14:37

+0

因此,我们可以依靠'setSmallestDisplacement' – Hunt 2015-02-10 05:18:11

+0

但是,可能会出现GPS错误,但是我创建了一个答案,我认为这是您当前问题的更大原因。 – ahjohnston25 2015-02-10 05:23:24

回答

0

LocationRequest对象以每个方法调用返回自己,因此您可以将它们链接在一起。看看这个解决您遇到的问题:

mLocationRequest = LocationRequest.create() 
     .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
     .setInterval(UPDATE_INTERVAL) 
     .setFastestInterval(FASTEST_INTERVAL); 

这样的变化实际上是保存到您的LocationRequest对象。

+0

它与您提到的上述设置没有任何区别 – Hunt 2015-02-22 05:02:52