Android Location Client не такой точный, как приложение Google Maps

Я хочу предвосхитить это, сказав, что я нахожусь в Китае, где у служб определения местоположения Google иногда возникают проблемы.

Я использую 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 Maps, мое местоположение совершенно точно (в отличие от местоположения, которое я получаю в своем собственном приложении). Я также вижу значок, указывающий, что используется GPS.

Вопросы

  1. Что приложение Google Map делает по-другому, чтобы получить более точное местоположение, и как мне делать то, что они делают?
  2. Если неправильное местоположение, которое я получаю, всегда одно и то же, что это значит? Не слишком задумываясь, правда Китая заключается в том, что иностранные картографические компании имеют координаты, которые отклоняются от коэффициента, и им приходится использовать специальный алгоритм для исправления этой разницы; это делает приложение Google Maps?

Спасибо!

5 ответов

Решение

У Китая есть особый подход к данным GPS, потому что правительство заставляет компанию, производящую карты, добавить некоторую предвзятость. Я застрял с этим на некоторое время.

При использовании метода getLastLocation() он предлагает лучшее последнее известное местоположение, сохраненное в Location. Это также касается того, какой уровень разрешения вы дали приложению в файле манифеста.

Попробуйте использовать оба:

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

в вашем файле манифеста и посмотреть, если это повышает точность.

  1. включите вид со спутника. Нормальное "векторное" представление в Китае запутано. По какой-то причине в приложении Google Maps такой проблемы нет.
  2. местоположение, возвращаемое GPS, является правильным, даже в Китае (учитывая проекцию WGS84). Только карты нет.

Другие провайдеры карт, такие как Baidu, заставляют вас использовать свою собственную реализацию LocationClient. Таким образом, вы получаете места, готовые для использования на их плитках карты.

Объявление. 1 Google Maps постоянно обновляет местоположение. Попробуйте выполнить следующие указания: http://developer.android.com/training/location/receive-location-updates.html

Объявление. 2 getLastLocation, вероятно, извлекает последнее сохраненное местоположение, когда оно обновляется, как в пункте 1. Если оно не обновлено, вы просто получите то же значение. Местоположение объекта имеет прикрепленное время, и вы можете видеть, когда оно было получено.

Поздний ответ, но это не было сказано:

Вы можете установить точность locationClient, используя locationRequest. Например

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

Вы также можете установить частоту обновлений. Если вам нужно что-то очень точное, сделайте несколько чтений за несколько секунд. Затем посмотрите на число "точность" на каждом чтении. Выбросьте любые показания, точность которых значительно менее точна, чем другие. Тогда усредни остальное...

Это довольно простой алгоритм, и я получаю точность в пределах 1-2 футов на галактике S5 в США.

Если вы используете более низкую точность, он будет усреднять данные GPS с результатами Wi-Fi и сотовой связи. GPS потребляет больше батареи, поэтому он использует его реже в этой настройке. Wi-Fi использует поиск по физическому адресу, так как он всегда перемещает меня к общественной дороге возле моего дома, даже когда я нахожусь в центре этого.

Другие вопросы по тегам