Android位置客户端不如谷歌地图应用程序准确

时间:2013-07-07 11:49:37

标签: android google-maps location-client

我想通过说我在中国,谷歌定位服务有时会遇到问题。

我正在使用LocationClient来获取用户的当前位置。

protected void onCreate(Bundle savedInstanceState) {
  ...
  mLocationClient = new LocationClient(this, this, this);
  ...
}

非常直截了当。然后在我的onConnected回调中,我找到了位置。

public void onConnected(Bundle connectionHint) {
  Location location = mLocationClient.getLastLocation();
  ...
}

我回来的位置总是一样的,但距离我的实际位置约500米。 GPS已启用,但表示正在使用的图标未亮起。我也在WiFi上,有3G。

当我打开实际的Google地图应用时,我的位置非常准确(与我在自己的应用中获得的位置不同)。我还看到了表示正在使用GPS的图标。

问题

  1. 为了获得更准确的位置以及如何做他们的工作,Google Map应用做了哪些不同的工作?
  2. 如果我找回错误的位置总是一样的意思是什么?在没有过多思考的情况下,外国地图数据公司的坐标被一个因素所扭曲,并且他们必须使用特定的算法来纠正这种差异,这是中国的事实。谷歌地图应用程序是这样做的吗?
  3. 谢谢!

5 个答案:

答案 0 :(得分:3)

使用'getLastLocation()'方法时,它提供了Location所存储的最佳已知位置。它也与您在清单文件中给予应用程序的权限级别有关。

尝试同时使用:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
清单文件中的

,看看它是否提高了准确性。

答案 1 :(得分:1)

广告。 1 Google地图不断更新位置。请尝试按照以下方法进行操作:http://developer.android.com/training/location/receive-location-updates.html

广告。 2 getLastLocation可能会检索更新时存储的最后位置,如第1点所示。如果未更新,则只会得到相同的值。位置对象有附加时间,您可以看到它何时被收到。

答案 2 :(得分:1)

  1. 打开卫星视图。正常的“矢量”视图在中国被混淆了。出于某种原因,Google地图应用没有此问题。
  2. 即使在中国(考虑到WGS84投影),GPS返回的位置也是正确的。只有地图不是。
  3. Baidu等其他地图提供商强制您使用自己的LocationClient自定义实现。通过这种方式,您可以准备好在地图图块上使用这些位置。

答案 3 :(得分:1)

中国对GPS数据进行了特殊处理,因为政府迫使相关地图制作公司增加了一些偏见。 我坚持了一段时间。

答案 4 :(得分:0)

迟到的回答,但是没有说过:

您可以使用locationRequest设置locationClient的准确性。 E.g。

      mLocationRequest = LocationRequest.create();
      mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
      mLocationClient.requestLocationUpdates(mLocationRequest, (LocationListener) this);

您还可以设置更新频率。如果您需要高度精确的东西,请在几秒钟内读取一堆读数。然后查看每次阅读的“准确度”数字。丢弃任何读数,其准确性明显低于其他读数。然后平均其余的......

这是一个非常基本的算法,我在美国的星系S5上获得1-2英尺内的准确度。

如果您使用较低的准确度,那么将使用wifi和蜂窝结果平均gps数据。 GPS消耗更多电池,因此在此设置下使用它的次数较少。 Wifi使用物理地址查找,因为它总是让我走向我家附近的公共道路,即使我在它的中间。