Как узнать местоположение по gps координатам

Чтобы определить местоположение пользователя (телефона, как вам угодно), можно использовать несколько способов:
— по GPS. Способ наиболее точный. Из недостатков: относительно долгий старт, потребляет много энергии, не так уж много аппаратов с встроенным приемником.
— по вышкам оператора. Средний по точности. Энергии кушает немного. Из минусов: не на всех телефонах доступны данные.
— по IP. Наименее точный. Собственно это самый большой минус.
— по CB-сообщениям оператора

Итак, нам нужна более-менее приемлемая точность при определении местоположения (для города это примерно 150-300 метров (это где то 1,5-2 минуты пешего хода), за городом соответственно 2-5 км и более, как повезет), так же нам необходимо охватить как можно большее количество аппаратов, и неплохо было бы оперативно обновлять координаты.
Наиболее подходящим будет определение местоположения через данные сотового оператора.

Получить вышеназванные данные задача нетривиальная, ведь каждый из производителей посчитал делом чести изобрести свой велосипед. В результате для каждой марки существует свой набор ключей для вызова System.getProperty(key), отыскать которые не так то легко.
Существует так же ряд других неприятных моментов. К примеру на Siemens’ах данные сети без патчинга прошивки получить не получиться. SonyEricsson возвращает данные в HEX-представлении. Nokia отказывается выдавать LAC несертифицированным (то-есть почти всем) мидлетам.

Я написал класс, перебирающий известные ключи и получающий по этим ключам данные о сети. Потом ключи отправлялись в API сервисов, получались координаты и выводилось среднее значение, которое я считаю наиболее правдоподобным (за год использования не припомню случаев очень больших ошибок). Если телефон позволяет получить силу сигнала, мы используем бонус Яндекса: получаем координаты С учетом силы сигнала и БЕЗ, получаем дельту этих значений, применяем ее ко всем результатам от API, выводим средний результат. Как ни странно, последнее решение оказалось палкой о двух концах. При равномерном затухании сигнала точность по сравнению с обычным способом увеличивается раза в два, но если это плотная городская застройка или холмистая местность, где сигнал распространяется неравномерно, в этом случае точность падает достаточно сильно.

В итоге есть возможность определить местоположение на телефонах Siemens, SonyEricsson, Samsung (к примеру s5230), Huawei и прочих. Время загрузки координат и адресов примерно секунд 10-15.

Читайте также:
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Adblock
detector