0

Приложение использует API сервисов Google Play, чтобы узнать местоположение пользователя и проверить, находится ли устройство внутри или за пределами определенной области радиусом 50 м. Приложение использует PRIORITY_HIGH_ACCURACY и интервал 1 минута. Так я создаю GoogleApiClient:google play services location api иногда дают неправильное расположение

mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 
    mGoogleApiClient.connect(); 

В onConnected обратного вызова:

mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(60000); 
    mLocationRequest.setFastestInterval(10000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

и

MyLocationListener.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationListener); 

Мое приложение также фильтровать адреса на основе точности (если точность> 200 мт Я отбрасывать его) и времени (если он слишком старый, я отбрасываю его).

Приложение работает отлично, за исключением некоторых конкретных областей, где иногда он возвращает неправильные местоположения, обновляя около 500 метров от реального местоположения, и эти неправильные местоположения всегда находятся в одном и том же месте, в нескольких шагах от Cell Tower.

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

Когда я получаю обновление местоположения, я жду других 3 подряд, чтобы подтвердить позицию. Также я фильтрую местоположение, точно так же, как и предыдущее. Это означает, что когда я получаю эти ошибки, я получаю 4 неправильных места в строке, каждая из которых немного отличается от остальных.

Есть ли способ предотвратить такое поведение? Может ли это быть вызвано Cell Tower?

ответ

0

Всегда есть шанс, что это будет неправильно. Точность 200 м не означает ее в пределах 200 м - это означает, что у вас есть 67% шанс, что вы находитесь в пределах 200 м. У вас все еще есть шанс на 1/3.

Поскольку большинство поставщиков местоположения Google Play сплавлены (используйте данные GPS и Wi-Fi/ячейки), да, находясь очень близко к башне, можно вкрутить данные.

+0

Итак, поскольку с помощью google-сайта apis невозможно отфильтровать поставщика ячеек, было бы лучше использовать старое местоположение apis и слушать только провайдера gps (если это не вопрос батареи)? – AleCat83

+0

У вас все еще будут случайные всплески, но это может быть более точно. Сотовые башни не повлияли бы на это. Вы можете попробовать и посмотреть, работает ли он лучше. Вы также можете попробовать фильтровать существующие местоположения (вы уже отфильтровываете низкоточные, вы также можете отфильтровывать большие переходы или, по крайней мере, большие переходы, которые не подтверждаются следующим обновлением). –

+0

Фактически, когда я получаю обновление местоположения, я жду других 3 подряд, чтобы подтвердить позицию. Также я фильтрую местоположение, точно так же, как и предыдущее. Это означает, что когда я получаю эти ошибки, я получаю 4 неправильных места в строке, каждая из которых немного отличается от других. – AleCat83

0

Изменить setInterval(60000)setInterval(20000) или 5000.

Поскольку интервал составляет одну минуту, вы не получите обновлений, даже если пользователь перемещается. Вот почему есть неточность.

Согласно Google, setInterval(long) означает - установить интервал, в который вы хотите получить места. setFastestInterval(long) означает - если местоположение доступно раньше, вы можете его получить (то есть другое приложение использует службы определения местоположения. Значит, если никакие другие приложения не используют службу определения местоположения, вы будете получать обновления только через минуту).

+0

Я уже пробовал несколько интервальных комбинаций, но это не решит проблему. Если устройство по-прежнему находится в середине моей области интересов, оно получает некоторые (наиболее) местоположения вблизи истинного местоположения, а иногда (несколько) оно получает места возле Cell Tower, даже если оно не перемещается в течение нескольких часов. – AleCat83