Fused Location Provider - Нестационарный Wi-Fi

Я работаю над приложением с требованием отслеживать текущее местоположение довольно точно в течение длительного периода времени.

Я решил использовать для этой цели API-интерфейс Fused Location Provider, поскольку он предназначен для экономии заряда батареи и повышения эффективности.

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

  1. Нестационарные точки доступа Wi-Fi иногда сбивают пользователя с толку на тысячи километров. Похоже, что точки доступа WIFI используются для триангуляции, даже если они являются портативными устройствами. (Модем/Wi-Fi в поезде/Wi-Fi в самолете). В этом случае устройство с большой точностью считает, что оно находится точно не в том месте. Кто-то может возразить, что это можно отфильтровать, но еще больше усложняет ситуацию то, что в объединенном провайдере местоположения происходит какая-то магия, включая датчики, поэтому кажется, что телефон перемещается в этих местах.
  2. Иногда старые местоположения возвращаются. Я заметил, что после двухнедельного периода непрерывного обновления местоположений старые местоположения начинают появляться снова. Это особенно странно, поскольку местоположения в обратных вызовах имеют новую отметку времени.
  3. Местоположения с временными метками в будущем: потребовалось много времени, чтобы понять это, но я также заметил, что пользователи получают временные метки в будущем через обратные вызовы своих местоположений. Я сомневаюсь, что на устройстве пользователя установлено неправильное время, потому что метки времени обычно на несколько недель вперед. Решение для этого довольно очевидно, я просто запишу его здесь, чтобы вы, ребята, могли принять его во внимание при фильтрации.

Я пробовал все типы приоритетов LocationRequest и множество различных параметров для них. Проблема нестационарного WIFI остается во всех сценариях и затрагивает все приложения на устройстве, включая собственное приложение Google.

Первое, что пришло на ум, — это просто попытаться игнорировать блокировки местоположения, поступающие через триангуляцию WIFI, но, поскольку нет никакого способа узнать, откуда берется местоположение, используя API-интерфейс Fused location, эта идея была тупиковой.

Отфильтровать эти местоположения также очень сложно, поскольку устройство часто остается в неправильных местах в течение нескольких часов / дней и перемещается туда.

Я обнаружил, что уже есть несколько открытых проблем системы отслеживания ошибок Google, в которых упоминается как минимум проблема 1. (https://issuetracker.google.com/issues/37123060 например) Ни одна из проблем так и не была решена.

Я думаю о том, чтобы навсегда отказаться от провайдера Fused Location, поскольку все, что я пытаюсь сделать, приводит к тупику. Это заставляет меня задать следующие вопросы:

  1. Неужели ни у кого больше нет таких проблем с блокировкой?
  2. Есть ли у кого-нибудь из вас опыт работы с альтернативами провайдеру плавного определения местоположения? Я пробовал https://github.com/mapzen/lost, но нашел это общее местоположение шум довольно большой и потребует некоторой работы, чтобы привести его в состояние API Google, и, поскольку он также использует местоположение WIFI, предоставленное Google, вероятно, будет та же проблема.
  3. Вы бы пошли по пути возврата к подходу только с GPS, возможно, пожертвовав эффективностью батареи?
  4. Поскольку неправильные местоположения влияют на все приложения на устройстве, включая собственные приложения Google, основанные на местоположении, почему эта проблема не является приоритетной для технического гиганта, который должен иметь наибольший интерес в том, чтобы знать, где в настоящее время находится их клиент?

Спасибо за любую помощь.

EDIT: проблема сейчас также обсуждается на странице https://issuetracker.google.com/issues/37058437

** РЕДАКТИРОВАТЬ (8 августа 2017 г.) Добавлена ​​еще одна странная находка в обратных вызовах местоположения.




Ответы (2)


Во-первых, вам нужно перестать думать о местоположении как об одной координате. Ничего тебе этого не даст. Местоположение — это вероятностное поле. Даже при использовании GPS местоположение, которое он дает, имеет точность в метрах. Вероятность того, что пользователь находится в пределах указанного количества метров от местоположения, составляет 67%. Это означает, что есть 1/3 шанса, что это не так. Иногда разница велика: если всю ночь запускать gps, можно получить пару фиксов на сотни метров дальше. Вы просто должны иметь дело с этим.

Во-вторых, Fused — это компромисс. Батарея ниже, чем у GPS, но точность ниже. Этого достаточно для большинства целей. Это может быть или не быть достаточно хорошим для вас. Настоящие вопросы заключаются в том, действительно ли вам нужно быть сверхточным, и приносит ли это пользу вашим пользователям? Стоит ли случайная ошибка в локации разрядить их телефон? Этот ответ меняется в зависимости от того, как часто вам нужны данные о местоположении — если они вам нужны постоянно, ответ, скорее всего, будет заключаться в том, что батарея — плохая идея.

Любой метод отслеживания местоположения имеет проблемы. Вам просто нужно решить, какие из них наименее болезненны в использовании. Вот неполный список:

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

Маяки - чрезвычайно высокая точность, требуется Bluetooth, работает только в определенной области, требует внешнего оборудования, возможна подделка третьей стороной (установка его идентификаторов маяка на ваш)

На основе сети - низкая точность, требуется мало ресурсов, возможна подделка третьей стороной, если в изолированной области (установка поддельных SSID сети Wi-Fi)

Fused — использует комбинацию данных GPS и netork. Итак, у вас есть смесь проблем каждого.

person Gabe Sechan    schedule 01.05.2017
comment
Спасибо за быстрый ответ. Я знаю обо всех этих соображениях, но я твердо уверен, что это не имеет ничего общего с проблемой, возникающей из-за одной из используемых технологий. Это просто ошибка в дизайне/реализации поиска WIFI, реализованного Google. Нестационарные источники Wi-Fi должны быть исключены из определения местоположения и не должны рассматриваться как сильный индикатор для очень конкретного местоположения (точность ~= 30 метров) — ненавижу это говорить, но… это прекрасно работает на IOS. - person saberrider; 01.05.2017
comment
Я не согласен с этим утверждением (если не исключено, то по крайней мере с учетом меньшего веса). Но как узнать, что данная сеть Wi-Fi не является стационарной? Это не тривиальная проблема. - person Gabe Sechan; 01.05.2017
comment
Вероятно, это правда. Тем не менее, я воспроизвел проблему с простой привязанной точкой доступа Wi-Fi с другого стандартного устройства Android. Даже если проблему трудно решить для большого количества производителей, в этом конкретном случае не может быть большой проблемой пометить определенную точку доступа Wi-Fi как игнорируемую для местоположения, поскольку контроль лежит на самих Google. Опять же, это не нишевый сценарий, довольно часто случается, что устройство находится в зоне действия переносной точки доступа. - person saberrider; 01.05.2017

Я думаю, понятно, что есть компромиссы между точностью и потреблением батареи. Но это больше похоже на жука. Вот пример того, почему я это говорю: мой телефон прекрасно знал, что меня больше нет в Гонолулу, когда я снова подключился к своему домашнему Wi-Fi, потому что я активно использовал его на обратном пути в Далласе, Бостоне и других местах, в том числе с помощью Google. Карты, чтобы добраться до промежуточных мест. Тем не менее, каким-то образом база данных Google оказалась с поддельным местоположением Гонолулу для моего домашнего Wi-Fi, поэтому, когда кто-то еще подключался к моему домашнему Wi-Fi, они начали время от времени получать обновления погоды для Гонолулу! Теперь, если бы мой телефон все время находился в режиме полета, это имело бы немного больше смысла. Но даже в этом случае неопровержимым доказательством является то, что мой домашний Wi-Fi находится там, где он есть, и один телефон, на мгновение сообщивший о неправильном местоположении, не сможет это изменить.

person Berthold    schedule 31.05.2017
comment
Я абсолютно согласен! Эта проблема затягивается уже какое-то время. - person saberrider; 31.05.2017