wifi
Представляю публичную базу геопозиций телефонных вышек и Wi-Fi роутеров. Мне понадобилась стабильная и безлимитная база для приложения Android, в котором нужна была точная геолокация из всех доступных источников (GPS, Wi-Fi, Mobile). Пришлось создать базу данных положений сотовых вышек и Wi-Fi. Всех заинтересовавшихся прошу под кат.

Краткое описание работы приложения:
  1. Этап 1. Раз в несколько минут приложение запускает сбор информации о том, что «видно» мобильному телефону (GPS, Мобильные вышки, все видимые Wi-Fi) и сохраняет в локальную базу данных;
  2. Этап 2. Телефон раз в половину часа синхронизируется с удаленным сервером и сообщает свое местоположение для каждой записи из локальной базы. Каждый раз телефон узнает «а где он?», отправляя данные о мобильных вышках и Wi-Fi на сервера API.

Алгоритм определения местоположения:
  • Если виден GPS и данные «свежие» доверяем им;
  • Если есть Wi-Fi, отправляем запрос на получение положения Wi-Fi. Если найдено положение — доверяем ему;
  • Если есть мобильная станция, получаем ее положение и доверяем этому положению;
  • Если все неудачно получаем, положение по ip, к сожалению, очень не точно.

Самое интересное — это получение координат по Wi-Fi и Cell ID (идентификатор мобильной станции).

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

Определение местоположения по Wi-Fi (оригинальная статья).

Здесь я представлю основные выкладки. Для использования API не нужно никаких ключей, не существует ограничений на количество запросов: https://api.mylnikov.org/wifi/main.py/get?bssid={wifi bssid}
{wifi bssid} — Bssid точки доступа (MAC адрес сетевой карты точки доступа).

Точность хранимых координат около 155 метров. Количество записей около 10.3М+. База постоянно обновляется и дополняется, но я буду благодарен, если кто-нибудь предложит дополнительную открытую базу.

Определение местоположение по сотовой станции мобильного оператора (оригинальная статья).

Опять же представлю выкладки: http://api.mylnikov.org/mobile/main.py/get?mcc={mcc}&mnc={mnc}&cellid={cellid}&lac={lac}
  • mcc — Integer (Код страны);
  • mnc — Integer (Код телефонного оператора);
  • cellid — Integer (Код телефонной станции);
  • lac — Integer (Код региона или Area, Location).

Точность данных — около 1100-1600 метров. В базе 10M+ вышек. Средний возраст записи — 4 недели.

Скрипт API написан на Python, база данных - MySQL.

Надеюсь, кому-нибудь данная база будет полезной и кто-то сможет использовать данную базу как сервис.

Свободу информации!

UPD. В ответе API была грамматическая ошибка в слове latitude. в сокращении это поле получилось «lan». Спасибо за указание ошибки. В данный момент показываю два поля для обратной совместимости. Сообщество, что в данном случае лучше сделать? Новый метод с корректным полем или в ответ два одинаковых поля возвращать? Большое спасибо за указание моих недочетов!

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


  1. johndow
    21.04.2015 20:10

    А opencellid.org вам чем не угодил?


    1. johndow
      21.04.2015 20:24
      +2

      Хотя о чём это я, ведь это opencellid база и есть — проверил несколько случайных mcc/mnc/lac/cellid из разных точек мира, данные совпадают чуть более чем полностью.


    1. Rumlin
      21.04.2015 20:29

      дополнительно замечу по opencellid — инфо по Крыму там теперь не достоверно.


    1. mylnikov Автор
      21.04.2015 21:01

      Там есть лимитация на количество запросов для API ключа
      В opencellid.org у очень большого количества точек не корректное поле range.
      Нет многих станций. Моя база более полная


      1. johndow
        21.04.2015 21:15
        +6

        Пришлось создать свою базу.

        Просто это как-то некрасиво. Вы лично объездили с приёмником WiFi/GSM/UMTS/Whatever + GPS и сделали 10М+ измерений? Если да, снимаю шляпу, посыпаю голову пеплом, удаляюсь.
        Если нет, извините, но вы создали не свою базу, а скомпилировали(вероятно из нескольких источников) + сделали какое-то API. И у всех этих источников есть лицензии (например, OpenCellID database CC-BY-SA 3.0)


        1. mylnikov Автор
          21.04.2015 21:19
          +1

          Разумеется, база не моя.
          Мне нужны были эти данные. Они лежат в открытом доступе в интернете.
          Возможна эта база будет кому-то полезна. Я не собирался ее кому-то продавать я хотел помочь сообществу.


          1. mtp
            22.04.2015 13:15
            +3

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


            1. mylnikov Автор
              22.04.2015 13:24
              +1

              Ок. Если это так критично. Я обязательно при следующем обновлении системы опишу лицензионные основания.


  1. johndow
    21.04.2015 20:30
    +4

    И ещё:

    {"result":200, "data":{"lan": "-33.8388560", "radio": "UMTS", "samples": 2, "mcc": 505, "mnc": 1, "lon": "117.1607460", "cellid": 59115663, "range": 0}}
    

    lan — это от какого слова? lantitude? :)


    1. mylnikov Автор
      21.04.2015 21:01

      Да ошибка спасибо.
      Это поле уже использют некоторые приложения. Я добавлю еще одно поле lat. Это была грамматическая ошибка.


  1. yusman
    21.04.2015 21:55
    +3

    10 миллионов записей в блоге big data? Улыбнуло)))


    1. thunderspb
      21.04.2015 22:12
      +3

      Ну для кого-то это big, для кого-то BIG, для кого-то поржать :) Когда-то давно мне такие количества снились только в кошмарах.


    1. mylnikov Автор
      21.04.2015 23:16

      Я не нашел более подходящего хаба.


  1. raid
    21.04.2015 22:13
    +2

    Может чего не понимаю, но Android же всё это делает из коробки!


    1. mylnikov Автор
      21.04.2015 23:20
      +2

      Да андроид предоставляет геолокацию, но для моего дома и работы показывал неправильное положение.
      Данные можно получить только когда включен пункт «разрешить геолокацию».
      В данном случае можно получать координату в обход разрешений пользователя, если он разрешит получать данные о сетях и wifi.
      В приложении о котором я писал в начале получается целый список видных точек доступа Wi-Fi и происходит квази-триангуляция. В данный момент код очень сырой, поэтому пока не представляю пока метод получения положения по нескольким Wi-Fi.


  1. Goodkat
    21.04.2015 22:23

    Неотключаемое определение координат по WIFI — зло.
    Пару лет назад был у меня с собой в отпуске мобильный роутер с местной симкартой. В итоге на смартфонах был либо интернет через эту точку доступа, но координаты всегда показывались на старте пути, либо я отключал вайфай и получал правильные координаты через GPS, но не было интернета. Google Maps пользоваться было очень неудобно :)


    1. Mikhail_dev
      27.04.2015 16:27
      +1

      Неотключаемое определение координат по WIFI — зло.

      Почему? Батарея сильно не садится.


      1. Goodkat
        27.04.2015 16:33
        -2

        Я ж написал, почему — смартфон запоминает координаты точки доступа WiFi, и потом думает, что он находится всё ещё там же, хотя я проехал уже 500 км дальше.
        Технология полезная, но должна быть возможность её отключить.


  1. CAJAX
    22.04.2015 00:11
    +1

    Вот более зрелый вариант от Mozilla — github.com/mozilla/ichnaea


    1. mylnikov Автор
      22.04.2015 00:22
      +2

      Спасибо. Добавлю как источник данных.


      1. VMAtm
        22.04.2015 15:57
        +1

        Есть ли у вас в планах добавить Глонасс как источник данных?


        1. mylnikov Автор
          23.04.2015 10:47

          Как вы это себе представляете?


          1. VMAtm
            23.04.2015 12:05

            В статье вы написали, что данные с GPS вы считываете, и, если они свежие, берёте их.
            Если на android-устройстве есть и Глонасс-трекер, почему бы не считывать данные с него?


            1. mylnikov Автор
              23.04.2015 12:19
              +2

              Я не старался раскрыть конкретный алгоритм работы приложения в статье. Под «GPS» я рассматривал точный источник гео позиции встроенный в android. Если я получал данные от него, то доверял его данным.


              1. VMAtm
                23.04.2015 12:20

                Ясно, спасибо :)


  1. SunX
    27.04.2015 17:14
    -1

    А кто-нибудь знает приложение для Android, которая умеет брать данные из OpenCellId и показывать меня на карте без необходимости отсылания всех этих данных в гугл?


  1. xtile
    28.04.2015 17:29

    добрый день!

    а саму бд можно ли как-то скачать?


    1. mylnikov Автор
      28.04.2015 19:47

      Можно. Об этом подробно будет написано в ближайшее время во второй части статьи.