Компания
493,57
рейтинг
18 декабря 2012 в 13:11

Разработка → Определение местоположения без GPS: как устроен Яндекс.Локатор

Сейчас всё больше мобильных приложений становятся геозависимыми. Одни просто не имеют смысла без знаний о местоположении пользователя, другие становятся с ним удобнее. Это так называемые Location Based Services (LBS): навигаторы, форскверы, инстаграмы с геотегами фотографий и даже приложения-напоминалки, которые срабатывают около конкретного места, например, рядом с офисом или магазином.

Для сервисов и приложений Яндекса мы создали собственную реализацию метода определения местоположения без GPS — Яндекс.Локатор. Он экономит время пользователя и делает наши приложения чуточку умнее. В Навигаторе и Картах она избавляет от ввода начальной точки маршрута, даже если вы на крытой парковке. А при выборе фильма в Киноафише или товара в мобильном Маркете помогает сразу показать, где их найти именно в вашем районе города. Ну и, разумеется, при поиске кафе и банкоматов — позволяет показывать вам сразу ближайшие, даже когда вы в метро.
image

Технологию мы давно открыли в виде бесплатного API. Сегодня хотим рассказать, как она устроена.

Почему без GPS и как иначе


Спутниковые системы навигации (GNSS), в нашем случае это GPS и ГЛОНАСС, — самый точный на сегодняшний день метод геоопределения. Соответствующие модули есть практически во всех современных смартфонах. Но не всегда и не везде он может решить задачи LBS.

Во-первых, поиск спутников иногда занимает несколько минут, а бывают ситуации, в которых скорость определения важна даже с потерей точности. Например, когда нужно построить предварительный маршрут в навигаторе или зачекиниться. Во-вторых, спутники обычно не «видны» в помещениях или под землёй. В-третьих, GPS-модули есть не в каждом мобильном телефоне или планшете, и их почти нет в ноутбуках. То есть для LBS нужны альтернативы.

И альтернативы, конечно, есть — определять местоположение можно по ближайшим GSM-вышкам, сетям Wi-Fi и даже по IP-адресу. Точность определения у каждого из этих способов гораздо хуже, чем у GPS. Но если их скомбинировать, они вместе дадут приемлемое качество. При этом какие-то недостатки одного нейтрализуются возможностями другого. GSM-вышки есть практически везде, а Wi-Fi сети — нет. При этом по Wi-Fi точность определения лучше. Поэтому комбинированный способ по полноте и точности лучше, чем каждый в отдельности. Менее известен факт, что у двух роутеров в разных частях города может оказаться одинаковый MAC-адрес. Совмещение GSM и Wi-Fi решает такие коллизии. У этих роутеров, скорее всего, рядом будут находиться вышки с разными идентификаторами — ведь вероятность совпадения в пределах квартала гораздо меньше, чем в масштабах всего города.

В мире есть несколько реализаций такого комбинированного способа геоопределения. И кажется, первый вопрос, с которым сталкивались все разработчики, — где же взять информацию о местоположении сетей Wi-Fi и сотовых вышек?

База местоположений сетей


В дилемме «купить или создать» мы в конечном счёте предпочли второе. Основная причина — что с собственными данными и алгоритмами гораздо легче контролировать качество результата. В сборе информации нам помогли пользователи мобильных Яндекс.Карт.

Когда мы начинали разрабатывать Локатор, на улицах городов были уже сотни тысяч людей с включёнными в телефонах Яндекс.Картами. С согласия пользователя приложение постоянно передаёт его GPS-координаты — на основе этой информации строятся Яндекс.Пробки. Мы подумали, что вместе с этим приложение может отмечать, какой базовой станцией обслуживается телефон в этих координатах, какие видны сети Wi-Fi (при этом, конечно, к самим сетям не подключаясь — чтобы не создавать privacy-рисков).

Человеку для участия в таком краудсорсинге ничего специально делать не нужно — просто пользоваться приложением. Как и о координатах, данные об окружающих Wi-Fi сетях и станциях GSM обезличены. Они практически ничего не «весят», и батарейка от их передачи, соответственно, быстрее не садится.

Таким образом, пользователи стали помогать друг другу:
image
Одни, с GPS-приёмником в телефоне, узнают точное расположение сетей и передают информацию в Яндекс. Другие, у которых GPS-модулей нет, присылают список сетей, которые видят в данный момент, и получают в ответ своё примерное местоположение на карте.

База собрана и регулярно обновляется. И тут мы сталкиваемся со следующей проблемой.

«Переезд» сетей


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

Вот как нам удалось решить одновременно проблемы с переездом и вышек, и роутеров. От пользователя поступает запрос на определение местоположения вместе с данными о том, какие сети он видит. Если в списке сетей есть та, что была замечена в разных частях города, алгоритм учитывает, сколько сигналов от неё накоплено в каждом районе и возраст последнего. Каждое плотное скопление сигналов от Wi-Fi сети или сотовой вышки мы называем «облаком». Чем больше сигналов в облаке и чем они свежее, тем больше оно заслуживает доверия. Ответом будет, соответственно, самое большое и свежее. А облако, в котором нет сигналов больше месяца, мы считаем устаревшим — даже если для этой сети не появилось более свежего облака в другом районе.

Радиус облака


Поскольку положение определяется примерно, нельзя показать точку — нужно нарисовать круг (ведь радиосигнал в отсутствие помех распределяется во все стороны равномерно). Хотя, если посмотреть на фактическую картину сигналов, чаще всего это эллипс. Ведь больше всего пользуются мобильными Картами автомобилисты. Их GPS-следы остаются на дорогах, а из дворов и, тем более, из зданий сигналов практически не поступает.

image

Чтобы ответ был предельно точным, радиус круга должен быть минимальным. Если просто обвести окружность вокруг всех точек сигналов конкретной сети, радиус получится слишком большим. Уменьшить его помогла мат. статистика. Плотность сигналов подвержена нормальному распределению, то есть применимо правило трёх сигм. В окрестность такого радиуса попадает 99,7% точек.

imageimage

Мы решили пойти дальше и экспериментально подобрали сигме такой коэффициент, который максимально уменьшил радиус, но сохранил приемлемую точность. Удалось это, потому что в большинстве случаев пользователь видит несколько сетей. То есть «открытые» уменьшением коэффициента области, скорее всего, перекрываются другими облаками.

Необлачные сигналы


К сожалению, не все GPS-сигналы от пользователей просто скомпоновать в облака. Оказалось, что, если наложить на карту все сигналы отдельно взятой сети, помимо «эллипсов» на ней окажутся точки и линии. Это, соответственно, одиночные сигналы, сильно удалённые от скопления сигналов той же сети, и очень длинные GPS-треки (т.е. цепочки GPS-сигналов).

image

«Одиночки» появляются, например, когда человек передвигается на метро. Телефон теряет связь с сотой на одной станции, а при выходе на другой всё ещё считает, что обслуживается той сотой. Такие сигналы Локатор отфильтровывает. Кроме того, мы установили минимальный порог для облаков, чтобы не полагаться на слишком малочисленные скопления сигналов.

Длинные GPS-треки появляются, например, когда человек едет на машине через весь город. Телефон «тащит» за собой идентификатор вышки с начала маршрута и передаёт, что якобы видит её на всём пути. Известно, что у базовых станций ограниченный радиус действия, так что такие GPS-треки Локатор тоже отфильтровывает. Треки, длина которых укладывается в радиус действия вышки, остаются. Как правило, они заметны в районах, где мало данных. Там они становятся цепочкой небольших облаков.

Сигналы-одиночки, маленькие облака и длинные треки мы считаем «шумом». Когда пользователь видит одну единственную сеть, для которой нам известны только такие сигналы, он получает ответ, что местоположение определить не удалось. Мы считаем это более правильным, чем давать заведомо неверный, по нашим оценкам, результат.

Когда данных было накоплено мало, была ещё одна трудность с объединением всех сигналов в одно облако. Случалось что сигналы от вышки из одного города приходили также из другого. Помогло нам наличие в идентификаторах GSM-сетей кода зоны местоположения — LAC (Location Area Code). Поскольку вышки с одинаковым кодом должны по стандарту находиться рядом, облакам, которые оказались «не в своём городе» (т.е. среди облаков с другим LAC), Локатор стал придавать заниженный вес.
image

Улучшение точности определения…


…по GSM-сетям

Когда-то приложениям была доступна информация лишь об одной базовой станции, хоть телефон видит чаще всего несколько. После появления платформы Android приложения смогли научиться видеть их все (кроме подключения в стандарте 3G, который позволяет узнать только одну сотовую вышку). Местоположение стало определяться точнее — уже не по одному облаку, а по совокупности нескольких. Оказалось, что для множества облаков можно использовать тот же подход, что и для одного. Радиус считается по среднеквадратичному отклонению сигналов, входящих в совокупность облаков, а центр вычисляется по среднему их координат.

…по Wi-Fi-сетям

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

image

Получившееся качество


Сначала несколько слов о том, как мы оцениваем качество нашего решения. Как уже говорилось, от пользователей, у которых есть в устройствах GPS-модуль, Локатор получает и координаты, и список сетей, которые видят устройства. Для оценки качества он сначала определяет примерное местоположение, ориентируясь только на эти сети. А затем проверяет, попали ли истинные координаты от пользователя в предположенную Локатором окружность.

image

Используя эту методику, мы получили следующие цифры:
  • для 83% запросов в сутки местоположение определено правильно — GPS-координаты устройства попали в область, названную Локатором
  • 14% сигналов — с ошибкой:
    • 7% — ошибка меньше 100 метров
    • 5,6% — от 100 метров до нескольких километров
    • 1,4% — Локатор ошибается городом
  • оставшиеся 3% запросов получают ответ «Местоположение не найдено»


image


Можно ли добиться лучшего качества? Да. Преимущество метода в том, что при определённой зрелости алгоритмов достаточно лишь собирать больше данных, чтобы определять местоположение точнее. А это достаточно легко, потому что растёт и количество Wi-Fi сетей, и количество пользователей наших приложений.

Но есть технологические пределы:
  • если телефон сообщает только об одной GSM-вышке — минимальный радиус составит несколько сотен метров в городе, и несколько километров за городом
  • если телефон видит несколько вышек — центр можно определить точнее, но радиус уменьшить вряд ли получится
  • если видна Wi-Fi сеть — минимальный радиус будет 10 метров


Объёмы вычислений


Чтобы быстро отвечать пользователю, нужно заранее подготовить весь ответ или, хотя бы, существенную часть. Каждую ночь кластер на базе нашей системы распределённых вычислений YAMR агрегирует сигналы, полученные вплоть до вчерашнего дня, получая готовые для ответа «облака». В момент запроса Локатору остаётся только правильным образом их скомбинировать. Так терабайты «сырых сигналов» сжались до 1.5-2 ГБ готовых ответов, которые запросто помещаются в память. И подготовка ответа почти всегда укладывается в 1 мс, а каждый сервер в кластере выдерживает 10 тыс. RPS.

А чтобы продолжительность ежесуточного расчёта не росла линейно с ростом истории GPS-сигналов, мы добились «аддитивности» облаков. Теперь достаточно хранить лишь несколько показателей на каждое облако, и не нужно каждые сутки заново обрабатывать всю старую историю.

Готовить более полный ответ оказывается неэффективно. Если кластеризовать каждую комбинацию сетей в отдельное облако, получается комбинаторный взрыв. Объём готовых ответов растёт на несколько порядков, а при частичном совпадении сетей на подготовку ответа нужно даже больше расчётов.

Аналоги


Сервисы определения местоположения без GPS, как мы уже говорили, есть не только у Яндекса. Разработчики могут обратиться к коммерческому поставщику (как, например, Altergeo в России и Skyhook Wireless в мире), либо использовать API мобильной платформы или браузера.

Вообще собрать такую базу можно тремя способами:
  • объехать интересующие города на автомобилях, сканируя сети, а потом периодически объезжать заново, чтобы обновлять базу
  • создать массовое мобильное приложение (например, Яндекс.Карты)
  • создать мобильную платформу (например, iOS или Android)

Но выбирать между разными решениями приходится только разработчику геозависимого приложения, а пользователь «живёт» с этим выбором. В отсутствие единой методики сравнения нужно обращать внимания на точность определения (радиус «допуска» и процент ошибок) в интересующих регионах.

Правда, и разработчик может выбирать не всегда. На iOS и WindowsMobile приложение может пользоваться только встроенными в операционную систему функциями геоопределения. Приложению там недоступны текущая базовая станция и/или список WiFi-сетей, кроме текущей.

Другая ситуация в веб-сервисах. Во всех современных браузерах встроен API геоопределения. И меняя браузер, пользователь меняет геоопределитель. В Firefox и Google Chrome используется реализация Google, в Safari — Apple, в IE — Microsoft. Наш Локатор работает в браузере Yandex.
Автор: @yurkennis
Яндекс
рейтинг 493,57

Комментарии (80)

  • –1
    Вот мне всегда было интересно — как по WiFi определяется местоположение? Неужели только на основе вот такого сбора данных (когда человек через навигатор передает свое местоположение и данные о ближайших WiFi точках)?
    • +3
      В статье приведены 3 основных способа, как можно собрать данные о том, где в городе какие WiFi-сети находятся:
      Вообще собрать такую базу можно тремя способами:
      • объехать интересующие города на автомобилях, сканируя сети, а потом периодически объезжать заново, чтобы обновлять базу
      • создать массовое мобильное приложение (например, Яндекс.Карты)
      • создать мобильную платформу (например, iOS или Android)
      • 0
        Это я прочитал (и даже уточнил в вопросе). Значит только таким образом картографические сервисы (Yandex, Google) определяют местоположение? Просто живу не в городе, но тот же гугл довольно точно показывал местоположение моей WiFi точки.
        • +3
          Ну либо по IP, либо всё-таки кто-то рядом прошёлся с включённым GPS и отправил информацию о вашей точке в базу.
          • 0
            IP конечно статический, но не у меня — все дружно сидим через NAT (я про абонентов провайдера). Вот по этому и интересно.
            А если IP статический и только твой — значит провайдер вносит куда-то информацию о местоположении?
            • 0
              Уж не знаю провайдер ли это делает, или кто-то ещё. Но раньше, когда компьютер подключался к интернету напрямую (без роутеров, и Wi-Fi в нём не было), то сайты, которые определяли местоположения точно определяли мой небольшой город.
              • 0
                все провайдеры обычно имеют выделенный пул адресов. Они ведь не хаотично разбросаны, а в пределах блока. Вот этому блоку обычно и назначают координаты (город, страну и т.д...)
            • 0
              ipgeobase.ru/ например
        • 0
          Насколько мы можем судить, да, только одним из перечисленных. Геоопределение по IP позволяет в большом проценте случаев (но не всегда) определить с точностью до города, в редких случаях до района.
        • –1
          Google, среди всего прочего, пользуется данными от skyhookwireless.com
          На их сайте предлагается указать BSSID wifi-точки доступа и показать на карте её координаты. Вбил свои точки и 2GIS на андроиде стал показывать моё положение. Хорошо!
  • +1
    Отличная статья. Подобное делали на icqnavigator (для J2ME), что-то работало. Правда сейчас не знаю, как там дела обстоят…
    • 0
      Спасибо!
  • 0
    Телефон Oppo Finder, город Москва, оператор Мегафон, при работающем 3G не определяет (или определяет очень редко) координаты в yandex картах (при этом нет никакого ообщения), при переключении на 2G координаты определяются.
    Google maps в обоих случаях определяет координаты верно.
    • 0
      Пожалуйста, напишите нам в форму обратной связи пару-тройку примеров, в какой день и часы, где именно в городе, и в каком режиме связи получалось в Яндекс.Картах плохое / хорошее геоопределение. Лучше всего упомяните эту тред на Хабре, чтобы коллеги сориентировались. Возможно, понадобятся какие-то дополнительные данные для диагностики. Заранее спасибо!
  • 0
    А собирается ли яндекс выпустить аналог сервиса Google Локатор (Latitude), раз уж база есть?
    • 0
      Увы, мы всегда стараемся не рассказывать о наших планах. Но если выпустим — обязательно расскажем, конечно.
    • 0
      так есть же группы в картах. например у питерского сообщества автомобилистов есть группа. у авторадио есть группа. много их.

      правда это не совсем то, чем является локатор.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      В перегонах, вестибюлях и переходах метро, в тоннелях автомагистралей, на крытых парковках и «нулевых этажах» некоторых больших моллов часто есть покрытие сотовой связью. В ряде случаев (не всегда) это позволяет установить местоположение по крайней мере с точностью в несколько сотен метров (если в городе).
  • +2
    Хорошо бы добавить такой несложный функционал в Яндекс.Карты, как запись трека.
    И для Яндекса был бы плюс — у пользователей появилась бы причина долго не выключать приложение, и данных собиралось бы больше. Не планируете?
    • 0
      Идея хорошая, но есть и другая сторона медали: не перегрузить приложение функциями. Запись трека порой действительно очень нужна, особенно в путешествиях. Для таких случаев удобнее воспользоваться отдельной программой, таких сейчас множество. Яндекс.Карты же более предназначены для поиска нужного объекта и построения маршрута к нему. Здесь запись трека редко кому могла бы пригодиться.
      • 0
        Мне нравятся Яндекс.Карты, и я с удовольствием бы поддержал таким образм отечественную компанию. Но, мне часто нужен простейший функционал записи трека, поэтому приходится использовать другие программы. И один единственный пункт меню «запись трека», думаю, не сильно перегрузит приложение. Всего-то надо сделать сброс координат в xml-файлик, пара десятков строк кода…
      • 0
        Кстати, в версии для кирпичей, J2Me, запись есть! И я успешно ей пользовался на старинном телефоне. А на современном смарте — нет, обидно.
  • +1
    Читал статью про in-door позиционирование с помощью магнитометра. Обещают точность в помещении до 2х метров. Не смотрели ли в этом направлении? Думаю есть возможность повысить точность определния.
    • +1
      Помимо магнитометра нужен гироскоп и акселерометр. Mems технология, что используется в телефонах пока еще очень не точная. Показания датчиков и соответсвенно положения будут уходить быстрее чем через минуту. А так вроде обещают инерциалку в телефоне в довесок к GPS
      • 0
        Все верно, но мы же не собираемся рассматривать движение, а значит гироскоп/акселерометр нам не нужен.
        • 0
          Тогда что вы имеете ввиду под in-door позиционированием?
          • 0
            Читал статью про индор, но экстраполировал на сервис яндекса. Пардон за неясность моих мыслей.
      • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Пока нам неизвестно ни об одном решении, которое можно широко использовать для наших задач.
      А о наших собственных планах мы, как всегда, не очень любим рассказывать :-)
  • 0
    А можно как-то по блютузу определять? Я далек от этого, но =) Вот едет рядом с тобой в пробке чувак, у него есть жпс и яндекс карты включены и включен блютуз, я включаю тоже яндекс-карты и блютуз, и у меня его координаты?
    • +1
      Теоретически такое сделать можно, но вам с тем чуваком как минимум придётся спаривать телефоны по синезубу.
      • +1
        А без спаривания вообще никак однозначно не идентифицировать? Уникальный какой-либо идентификатор при поиске не приходит?
    • 0
      Если совсем кратко, протокол Bluetooth практически непригоден для этой задачи. Достаточно даже пары причин (на самом деле их больше): (1) крайне малый радиус действия, (2) по умолчанию выключен.
  • 0
    Спасибо за столь подробную статью, очень интересно.
    • 0
      Спасибо!
  • 0
    Я правильно понимаю, что данные используются только Android'ами (т.к. у iOS не получить базовые станции, уровни сигнала, wifi-сети и т.д. без jailbreak'a) и настольным браузером Яндекса? Жаль, конечно.
    • +1
      Насколько нам известно — под iOS приложение может узнать лишь ту wifi-сеть, к которой телефон подключен, а также название оператора — но не номер базовой станции и не список всех ближайших wifi-сетей.

      Строго говоря, помимо Android и нашего настольного браузера эти данные могут использовать нативные десктопные приложения (например, под Windows). А чтобы картина была совсем уж полной, есть ведь всё ещё немаленький парк устройств под Symbian.
      • +4
        Думаю, отдельная версия Карт для устройств с джейлбрейком снискала бы популярность, даже без продвижения с Вашей стороны. По некоторым оценкам, таковых устройств насчитывается от 50% до 75%. Интересно, насколько сложно сделать такую модификацию?
        • 0
          К сожалению, устройства с джейлбрейком — совсем немассовый сегмент. Мы стараемся делать массовые приложения, которыми могут пользоваться миллионы простых людей, далёких от технологий.
      • 0
        То есть точности и скорости определения координат штатными средствами в iOS вполне достаточно для ваших задач?
        • 0
          Конечно, мы бы предпочли пользоваться своим решением — но в отсутствие такой возможности да, в собственных приложениях нам тоже приходится пользоваться штатными средствами iOS.
  • +2
    Спасибо за интересную статью. Пришлось однажды решать похожую задачу обработки геоданных, помню как подбирал сигму, комбинировал разные методы кластерного анализа, чтобы избежать n*n сложности при сохранении приемлимого уровня точности, придумывал свои эмпирические «пружинки». В вашей реализации особое уважение вызывает то, что вам удалось справиться с нелинейным ростом сложности и организовать обслуживание массовых запросов практически в реальном времени.
    • 0
      Спасибо за тёплые слова!
  • 0
    Гуглу очень не достаёт ваших методов отфильтровывания шума. В результате чего Андроид телефон определяется зачастую в других городах. В истории перемещений у меня постоянно попадаются Санкт-Петербург, Красноярск, Сочи, хотя сам я в Самаре. И ничуть их не смущает скорость «телепортации».
    Зато Яндекс карты себе такого никогда не позволяли. Спасибо.
    • 0
      Спасибо!
  • –1
    Бесплатно дарю идею:
    взять облако точек (а еще лучше — треков, конечно), определенных по GPS, со скоростью выше 10-15 км/ч, и наложить его на дорожный граф (а за одно — и на карту). А потом сравнить и попристальнее присмотреться к ребрам и узлам, которые обнаружатся в местах явно низкой плотности облака. Там может оказаться нечто фантастическое.
    • +1
      Именно так и появились Яндекс пробки.
      С уважением, ваш К.О.
      • 0
        Пробки — появились, но ровно из той же информации можно извлечь то, что очевидным кое-кому не показалось: информацию о том, что узлы или ребра, на которые практически не попадают треки, не существуют вообще и выдуманы тем, кто рисовал карту. Учитывая существование еще и панорам, такие места можно проверить очень быстро и убрать из карты фантастику. По первому требованию приведу пример.
        • 0
          К сожалению, порой карта действительно очень старая или просто неточная. Зачастую это оцифрованное наследие века бумажных карт. Сейчас мы перерисовываем города, используя все доступные современные технологии: и детальные спутниковые снимки, и треки, и панорамы. Но всю Россию быстро поправить не получается. Так что, если вы знаете регион, где карты неточные, значит он стоит в очереди на тотальную перепроверку.
          Если же вы говорите об одиночной ошибке на в целом корректной карте, то о ней можно и нужно сообщить в форме «Сообщить об ошибке» на maps.yandex.ru/
          • 0
            Я про все это знаю — это вполне очевидно.

            Хотелось бы услышать ответ на несколько иной вопрос: если Яндекс имеет собственную картографическую основу, то почему в карте при обновлениях появляются новые ошибки, которых раньше не было, в тех местах, где в реальности ничего не менялось?

            Это легко объяснимо при импорте — сторонние поставщики основы могут быть разные, у одного нарисовано верно, у другого — ошибка в этом месте, при обновлении одно меняется на другое.
            А в случае, если собственная основа только уточняется по сторонним данным, появление новых ошибок выглядит как-то нелогично.
            • 0
              Ответ простой: потому что делая тотальную перепроверку или даже отрисовку с нуля, приходится проделывать огромный объём работы, и ввиду человеческого фактора что-нибудь да идёт не так. Но такие ошибки несут единичный характер. И про них нужно сообщать — это будет очень полезно.
              P.S. Напрашивается аналогия: при выходе новой версии программного обеспечения (особенно мажорного релиза) не только исправляются старые ошибки, но почему-то и появляются новые.
              • 0
                На мой взгляд, аналогия не верна. Точнее, она была бы верна при условии, если некий участок был бы по какой-то причине перерисован заново. Но это могло бы понадобиться только в том случае, если там в реальности произошли какие-либо изменения. Если же их не было, но участок кто-то зачем-то редактировал, значит существует некое системное несовершенство в том, как происходит обновление данных. Вот об этом я и спрашиваю — в чем причина или механизм вмешательства в данные, которые уже были верны и не должны были меняться?

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

                Взять ту же «Народную карту»: с одной стороны, она постоянно улучшается за счет актуализации и добавления новых подробностей, с другой — чуть портится за счет неумелых правок. Но это crowdsource-проект, там это нормально, и если число адекватных участников больше числа неумелых, она будет неуклонно улучшаться. А об «обычной» карте это сказать сложно — создается впечатление, что старые, но актуальные данные при обновлениях часто удаляются, вносятся новые случайные ошибки и т.п. Покрытие, безусловно, растет, но вот некое общее качество в местах, где уже имеется подробная карта, плавает вокруг отметки «посредственное». Что свидетельствует о системных проблемах с процессом актуализации. Когда у Яндекс появилась собственная картоснова, я думал, что затевалось это в том числе ради того, чтобы иметь инкрементальную систему редактирования основы, но пока результат выглядит несколько иначе.
                • 0
                  Переход на «свою карту» зачастую означает полную перерисовку с нуля (т.е. не глядя в старую карту), а значит какие-то правильные места в старой карте могут быть заменены на неправильные в новой. Это происходит один раз, далее инкрементальные изменения.
                  • 0
                    О переходе на «свою карту» объявляли много месяцев назад. Обновлений карт с этого момента было уже несколько.
  • 0
    Провел эксперимент в квартире, где gps, конечно, не ловит. Выяснилось что яндекс карты на андроиде оказались менее точными чем на iOS поскольку андроидные потянуло на проезжую часть рядом с домом, а iOS-ные правильно поставили букву Я на мой дом.
    • 0
      Такие расхождения, разумеется, случаются сплошь и рядом, причём в обе стороны. Точность определения по wifi и сотовым вышкам — штука вероятностная, и всерьёз сравнения имеет смысл проводить только на достаточно больших выборках. Например, объехать интересующий город по ключевым магистралям, и в течение поездки логировать фактические координаты и место по wifi+GSM, определённое разными устройствами в одинаковых условиях.
  • 0
    И тут я понял, зачем гугль собирал информацию о сетях wifi, из-за которой вляпался в неприятную историю и, как всегда, солгал.
  • +1
    А я помню, когда гугл запускал такой же сервис, то были забывные моменты, когда по wi-fi определялось положение совсем в другом регионе. Что это было? Переназначали IP адреса или просто лаги при сборе данных?
    • 0
      MAC-адрес wifi-роутера может не быть уникальным.
  • 0
    > Наш Локатор работает в браузере Yandex.
    Можно пояснить, что это означает? Яндекс.Локатор это ведь мобильный сервис? Тогда причём здесь ваш десктопный браузер?
    • 0
      Яндекс.Локатор — это API, который по списку наблюдаемых wifi-сетей и/или сотовых вышек, а также уровню сигнала от первых, определяет примерное местоположение.

      «Десктопный» браузер в общем случае имеет доступ к списку wifi-сетей, наблюдаемых ноутбуком, и мощность доходящего от них сигнала. По ним браузер и определяет местоположение, обращаясь к Локатору. Разумеется, близость к сотовым вышкам в этом случае не используется.
      • 0
        > По ним браузер и определяет местоположение, обращаясь к Локатору.
        На каких сайтах браузер запрашивает доступ к списку WiFi-сетей именно через Яндекс.Локатор? (Или я понял исходную формулировку неправильно?)
        • 0
          Браузер Y видит всегда вышки Wi-Fi в поле доступности Wi-Fi адаптера (если Вы подключены через Wi-Fi к одной из них) и сразу же отдает данные на Yandex-сервер, а местоположение позволяет получать только после подтверждения пользователем (что тоже не факт). Скорее всего — браузер-маяк для такого же сбора данных о вышках, как и мобильное приложение, который работает без лишних вопросов с Вашего согласия с соглашением на использование этого браузера при инсталляции на ПК. (IMHO)
        • 0
          Если я правильно понял вопрос, ответ такой:
          1) зайдите на maps.yandex.ru
          2) нажмите кнопку с «прицелом» (над полоской управления зумом):
                image

          3) браузер спросит «maps.yandex.ru запрашивает данные о вашем местоположении»:
                image

          4) после подтверждения браузеру он отдаст Яндекс.Картам данные, полученные от Локатора, и карта сфокусируется на области, где вы, по данным Локатора, находитесь
  • +1
    Извините, конечно, но я всегда понимал ошибку так:image
    • 0
      Как мы описали в статье, Локатор принициально не может определить положение пользователя «точно». Допуск есть всегда. А вот когда Локатор не попадает в допуск, который сам декларирует — с этого момента правильно считать, что Локатор ошибся, «не сдержал обещание». И над минимизацией этой ошибки работать.

      Абсолютные величины «радиуса допуска» нельзя измерить «одной линейкой», они будут неизбежно варьироваться от ситуации к ситуации (см. технические пределы точности около wifi и около GSM). Можно оперировать относительными величинами — коэффициентом у сигмы. Про это мы говорили — мы уменьшили этот коэффициент до предела, дальнейшее уменьшение приводило к резкому росту ошибок (выходов за пределы допуска).

      В итоге, в этой задаче важен баланс — малые достаточные радиусы и высокая точность попадания в круг допуска.
      • 0
        Попробуйте сравнивать следующие величины:
        1. Время входа в зону и время выхода.
        2. Угол между вектором соседних точек и дорогой. (для получения направления движения)
        3. Аппроксимируйте возможное нахождение транспорта на участке дороги исходя из скорости.
        Скорость: длина отрезка полотна дороги в зоне покрытия / (время выхода из зоны — время входа в зону)
        Ну и среднестатистическую поправку берите, кто на этом участке за короткий временной период находился. Передавайте цепочкой от вышки к вышке (вдоль дороги) статистику.
        Думаю, что реально снизить погрешность таким образом в несколько раз.
  • +1
    А после переезда все сервисы, включая Яндекс, ещё три месяца показывали, что я на старом месте.
    • 0
      кстати да — это болезнь что гугла что яндекса. почему например авторизованным плательщикам yandex.денег не верить когда они просят сменить координаты точки
    • 0
      Если наткнётесь на подобную проблему ещё раз — пожалуйста, напишите нам об этом в форму обратной связи. Возможно после этого коллеги попросят прислать дополнительные данные. Заранее спасибо!
  • +1
    У меня такая беда: яндекс карты с навигатором при остутствии сигнала GPS помещают меня в Москву на улицу, где я жил. Но меня там уже нет почти с месяц, я за 600 км от того места! Когда спутники ловятся всё ок. Гугл карты по базовым станциям определяют всё верно.

    Может дело в переехавшем домашнем роутере? :)
    • 0
      Пожалуйста, напишите нам об этом в форму обратной связи. Возможно после этого коллеги попросят прислать дополнительные данные. Заранее спасибо!
  • +2
    Yandex! IT-гигант! Статейкой такие воспоминания навеяли…ностальгия.
    Живу сейчас я, значит, в Мск. Раз в 2-3 месяца езжу на родину, к родителям. На машине. Около 1К км в один конец. Родители, зная, что я в пути, порой переживают, как там я в дороге, особо, когда погода не располагает. Периодически звонят и интересуются, где я.
    Еще в 9м году посетила идея реализовать трекер, так чтобы родственники могли узнать, где я в данный момент нахожусь, обновив определенную страницу в браузере дома на компе.
    Как и многие проекты, создаваемые в одиночку и отчасти ради процесса создания, этот тянулся более года (да, и трекер – это была лишь малая часть функционала).
    Платформа была J2ME (хотя и Android'ы уже имелись в доступе). Целевые девайсы распространенные, доступные, GPS естесно не имели.
    LAC и CellID отдавались лучше всего на Samsung. SE в основной массе отдавали данные с каким-то отличиями от необходимых (точно не помню, но вопросы были). Nokia S40, как правило, вообще ничего не давали без сертификата trusted-разработчика. Ну, и т.д.
    У операторов появились безлимитные тарифные опции для Интернета.
    Дорога на родину занимает, как правило, 10++ часов.
    Данные о реальном местоположении брались с разных источников (в т.ч. www.opencellid.org/api). Координаты отправлялись на сервер, где с отметкой времени попадали в БД. В браузере результат выглядел следующим образом:
    image

    Проект был заброшен – эксперименты дали положительные результаты, но дальше бесперспективно, тем более что имелось (имеется?) немало юридических моментов. Хотел было даже IT-гиганту предложить решение, но как-то отпало…
    Уважаемый, Yandex, так может, сделаете что-то подобное? Или не положено?

    В любом случае, больше спасибо за статью.
    • 0
      Уважаемый, Yandex, так может, сделаете что-то подобное? Или не положено?
      Я там выше уже отвечал про аналог Google Latitude.

      В любом случае, больше спасибо за статью.
      Мы рады, что вам статья понравилась.
  • 0
    Спасибо за Яндекс.Навигатор, считаю его самым лучшим навигатором из существующих, никогда не подводил, довольно точно определяет местоположение даже без GPS, платформа iOS.

    А сложно добавить оффлайн поиск, с недавно вышедшим функционалом «скачать карту» это стало актуально, хотя бы по адресам, ведь как то на карте номера домов и названия улиц показывается. Приходится включать интернет, делать поиск и отключать, чтобы батарейка от пользования меньше тратилась.

    Кстати присоединяюсь ко всем кто просит Яндекс.Локатор и запись треков, ведь раньше на Symbian OS запись треков в Яндекс.Картах был… Очень полезно там где карты только в большом масштабе, актуально за городом на дачу ездить.
    • 0
      При текущей технологии карта в Яндекс.Навигаторе представляет из себя просто картинку (за исключением векторных карт, которые далеко не везде доступны). Поэтому поиск номеров домов по «скачанной карте» совершенно невозможен. Таким образом оффлайн поиск — это совершенно отдельная технология. Будем делать или нет — зависит от соотношения востребованности и сложности реализации, и как всегда планов не разглашаем.

      Про дорогу к даче… а вы нарисуйте её на Народной карте. И будет она у вас в Яндекс.Навигаторе в лучшем виде. И другим людям поможете (друзьям, которые поедут к вам на дачу, или соседям).
  • 0
    >>Разработчики могут обратиться к коммерческому поставщику (как, например, Altergeo в России)
    Какой же он альтернативный, если вы его купили несколько лет назад?
    • 0
      Вы наверное путаете. Компания Альтергео никоим образом не принадлежит Яндексу; их базы геолокации существуют и пополняются независимо; сервисы геоопределения развиваются независимо.
      • +1
        Точно, вы же их тогда не купили, просто сотрудничали, и использовали их в Я.Картах.

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

Самое читаемое Разработка