2

我想先说我在中国,谷歌定位服务有时会出现问题。

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

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

非常简单。然后在我的onConnected回调中,我得到了位置。

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

我返回的位置始终相同,但距离我的实际位置约 500m。GPS 已启用,但指示正在使用的图标没有出现。我也在使用 WiFi 并且有 3G。

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

问题

  1. 为了获得更准确的位置,Google 地图应用程序有何不同之处?我该如何做?
  2. 如果我返回的错误位置始终相同,那是什么意思?不用多想,国外的地图数据公司有坐标,有一定的偏差,需要用特定的算法来修正,这是中国的事实;谷歌地图应用程序是这样做的吗?

谢谢!

4

5 回答 5

3

当使用“getLastLocation()”方法时,它提供了由 Location 存储的最后一个已知的最佳位置。这也与您在清单文件中授予应用程序的权限级别有关。

尝试同时使用:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

在您的清单文件中,看看它是否提高了准确性。

于 2013-07-07T11:54:59.857 回答
1

中国对 GPS 数据有特殊处理,因为政府强制相关地图制作公司添加一些偏差。我坚持了一段时间。

于 2013-09-14T12:34:16.053 回答
1

广告。1 谷歌地图不断更新位置。尝试遵循这些归纳:http: //developer.android.com/training/location/receive-location-updates.html

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

于 2013-07-07T15:08:07.803 回答
1
  1. 打开卫星视图。正常的“矢量”视图在中国被混淆了。出于某种原因,谷歌地图应用程序没有这个问题。
  2. GPS 返回的位置是正确的,即使在中国也是如此(考虑 WGS84 投影)。只有地图不是。

百度等其他地图提供商会强制您使用他们自己的 LocationClient 自定义实现。这样,您就可以准备好在其地图图块上使用的位置。

于 2013-08-02T08:00:10.927 回答
0

一个迟到的答案,但这还没有说:

您可以使用 locationRequest 设置 locationClient 的准确性。例如

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

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

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

如果您使用较低的精度,它将使用 wifi 和蜂窝结果平均 gps 数据。GPS 消耗更多电池,因此在此设置下使用频率较低。Wifi 使用物理地址查找,因为它总是将我带到我家附近的公共道路上,即使我在它的中间。

于 2014-06-27T22:18:39.010 回答