Pull to refresh

Comments 37

Интересный сайт. Нашёл свою БС по cellid, странно, но есть станции ближе чем моя, почему телефон не привязался к тем что ближе? И там ещё круги (я так понимаю это покрытие, конкретные устройства связанные с БС), так к мою сторону даже намёка нет.
Насколько я понимаю — все зависит от нагрузки на конкретную станцию. В вашем случае нагрузка на самую близкую станцию может быть слишком высокой, поэтому вас коммутирует на следующую.
А скажите пожалуйста. Можно ли принудительно выбирать БС? Типа того, что установить на свой андроидофон патч к ОС, который позволит цепляться только за определенную станцию?

Для чего это нужно:
1) На ближней БС есть связь, но нет 3G. А я согласен на более дальнюю, с пусть и хреновеньким 3G.
2) На ближней БС есть связь, но она находится в соседней области, и тарифицируется по-другому. А более дальняя находится в «родном» регионе.
3) Мне не хочется чтобы ZOG или любая иная трехбуквенная организация знала мое местоположение, поэтому я цепляюсь только за одну-единственную БС, а с другим принципиально ни одного пакета не отсылаю.

Можно ли?
Логика данного решения понятна, однако на практике у вас вряд ли получается такое реализовать.
По дефолту БС считает себя умнее юзера, политика, в чем-то схожая с политикой Microsoft.
Мне вспомнилась одна из историй, проскакивавших на Хабре.

Сделали антенну для 3G и она поймала сигнал из деревни за 12км (учитывая что в 8км тоже была станция с 3G). По одному направлению.
Так что самостоятельный выбор вышки мог бы решить некоторые проблемы, но мог бы создать «пробки».
На старых версиях симбиана (мобильной ОС) 6-7-8 было приложение netmonitor, которое позволяло вручную привязываться к нужно базовой станции, и как раз решать задачи, перечисленные Вами. К сожалению, с тех времен данное приложение не было портировано на свежие версии мобильных ОС :-( Как я понял, в следствии ограничений разработчиков мобильных ОС.
Как я понял, в следствии ограничений разработчиков мобильных ОС.
Да, согласен, разработчики мобильных ОС в следствии очень ограничены. Однако мобильные ОС они должны разрабатывать всё же лучше, чем вести следствие.
А с другой стороны — вон, собственные сборки андроида же выпускают? т.е. можно глубоко довольно залезть? с помощью NDK и всего такого
Не забываем, что как правило приоритет отдается голосу.
Кроме того телефон еще стремиться уменьшить можность передатчика для экономии батарейки, а также число хендоверов — там есть некий гистерезис.
И насколько я знаю реализация GSM стека вещь достаточно закрытая. Так что просто так получить к нему доступ — врядли.
Единственное, что можно посоветовать — это использовать направленную антенну и в настройках сети на телефоне выставить «WDCMA only».

Сматрфон, как известно, состоит из GSM Baseband Processor и Application Processor. Т.о. мобильная ОС, работающая на Application Processor, имеет весьма ограниченное влияние на то, что происходит в отдельной закрытой прошивке Baseband Processor, это, в частности, выбор оператора и стандарта связи, но никак не исключение определенных БС из логики выбора обслуживающей БС.
Очень интересно, спасибо.

Навскидку порылся, самое близкое, что на этот счет придумали — проект OsmocomBB. Это прошивка для управления Baseband Processor'ом через Linux, установленный на телефон. Увы, очень короткий список поддерживаемых телефонов, и современных там нет.
Учтите кроме расстояния также: частоту, режим работы (3G или GSM), раскрытия секторов, помехи, препятствия, отражения — и получите ответ.
GSM, станция моего оператора, ID совпадает с тем что на телефоне, но как раз к ней больше всего препятствий, окна мои выходят в обратную сторону (если конечно сигнал не отражается от здания напротив и это считается нормальным). Хотелось бы комментарий или лучше статью от человека который имеет непосредственное отношение к работе с БС )
Тут очень много сценариев возможны. Например: Аппарат зарегистрировался в одной ячейке, и пока с ней сигнал приемлемый, он будет поддерживать с ней соединение до тех пор, пока нет препятствий для передачи данных, даже если есть ячейки с сигналом получше. Или так: аппарат включен в режиме «3G предпочтительно» или «только 3G», а более близкая станция, предположим, имеет только одну секторную антенну 3G, смотрящую в противоположную сторону, т.е. вы не попадаете в область действия сектора. Зато вы попадаете в зону действия другой антенны — пусть она находится дальше, зато смотрит прямо на вас. Уровень сигнала в этом случае будет больше. Я не профессионал, поэтому моим комментариям может быть грош цена, но с отделом БСС одного сотового оператора дело имел, и оборудование знаю как работает, так что примерно представляю что там к чему.
У меня через 200 метров от дома мачта сотовой. Но не факт, что я подключусь на неё. Она расположена заметно ниже, а антенны могут быть на моей высоте примерно с учётом рельефа местности. При этом я вижу другую станцию (точнее её мачту) в пределах 3,8 километрах от меня (высоко дом стоит). Не факт, что сигнал с ближайшей станции сильнее той,
У OpenCellID далеко не самая полная база. Куда точнее можно определять местоположение через API Яндекса и Гугла, их базы гораздо точнее и постоянно пополняются.

Не сочтите за рекламу, но у меня на сайте (ссылка в профиле) есть пара статей на эту тему, а также маленький сервис определения адресов базовых станций по четырем самым популярным базам: Yandex, Google, OpenCellID, Mozilla Location Service. Так вот, наиболее точный результат дают именно Яндекс и Гугл, и у них почти все вышки есть.
Гугл и Яндекс — это конечно классно, но ваш способ требует включенного интернета, а способ из статьи не требует, чем и примечателен.
PS: спасибо за статьи и сервис, добавил в закладки
Просто как коммент от тестера :) по Вашему сервису: Мой ip где-то в центре москвы (по факту — спальные районы Питера), базовая станция в Е-бурге (там же) и телефон — Самсунг 2010 года (по факту Jolla), номер — Санкт-Петербург Телеком (нет такого, Tele2). Итого из проверяемого на коленке попадание 0% :)
Опишу принцип попадания координат базовых станций в подобные базы. На самом деле, все очень просто — во всех базах лежат данные от самих пользователей. В случае Гугла, вам достаточно использовать смартфон на базе ОС Андроид с включенными GPS и интернетом, для попадания в базы Яндекса, надо воспользоваться Яндекс-Картами, для других сервисов надо устанавливать специальные приложения (по крайней мере, для OpenCellID и Mozilla Location Service).

Телефон, переключаясь на базовую станцию с определенными параметрами (MCC, MNC, LAC, CID для GSM), отправляет эти параметры вместе с текущими GPS-координатами на сервер. Там измерения от многих пользователей обрабатываются, координаты усредняются. И в итоге получаются некие координаты — это средние координаты вероятного местонахождения телефона, находящегося в данном секторе.

Таким образом:
Во-первых, чем больше мы сами будем отправлять данных на указанные сервисы, тем точнее будет позиционирование. Так что всем, кто заинтересован в таком способе определения местоположения, можно установить на свои смартфоны программу того сервиса, который планируется использовать (для данной статьи, это OpenCellID: http://wiki.opencellid.org/wiki/Data_sources).

Во-вторых, погрешность ограничивается сотнями метров, ну в крайнем случае, километрами (на открытом пространстве, возможно, десятками километров), но никак не регионами, где даже LAC будет другой. Т.е. если сразу несколько сервисов у вас показывают Екатеринбург, то именно там эта БС и находится.
А как насчет переезда БС из одного региона в другой? В нашем городе есть пара зон где местоположение по GSM (яндекс, гугл) определяется будто телефон находится в Дагестане или в Краснодарском крае, а по факту в Казани. Это хорошо видно в истории местоположений Google. Я также разрабатывал ПО для отслеживания торговых представителей (данные брались и из Яндекса и из Гугла, и собирались нашим же приложением, по описанному вами алгоритму). И такие перемещения БС были хорошо заметны.
http://habrahabr.ru/company/yandex/blog/162955/ — тут тоже этот момент описан.
Нумерация CellID, разумеется, может меняться. Но эта нумерация существует в пределах LAC (по вашей ссылке именно об этом). И переезда БС в другой регион с прежним LAC быть в принципе не может.

Можно пример, когда БС из одного региона определяется в другом? Если такие есть, значит LAC при поиске не учитывается, что врядли, т.к. в пределах сети оператора CellID не уникален.
сейчас уже не смогу дать рабочий пример.
mcc=250&mnc=1&lac=16102&cid=86181628 вот эта вышка еще 15 апреля гуглом определялась вообще в Алжире =), сейчас уже все ок.
Но это скорее глюк Гугла
Код страны «250» — это Россия. Код оператора «01» (а не просто «1», есть разница) — это МТС. Есть предположение, что Гугл просто не смог найти ее в своей базе и определил местоположение, например, по IP (Mozilla Location Service так делает).
Интересно, есть ли Android-приложение для OpenCellID, которое синхронизировало бы с сервером локальную БЮ, содержащую CellID нужной страны (стран) и давало бы возможность получения приблизительного местоположения смартфона (на основе этой базы) или повышало бы скорость «холодного старта» GPS в случае отсутствия WiFi/GPRS?
Не очень понимаю вопрос, простите (спать пора). Однако практически все приложения фирмы-собирателя OpenCellID так или иначе используют собранную информацию.
Почитал описание самого близкого по смыслу inViu GPS-details. Про повышение скорости старта ничего не сказано. Наверное эта часть в андроиде исключительно огорожена от приложения. Надо смотреть архитектуру системы.
Когда я исследовал данную тему, у меня была информация что последняя цифра cellId это номер антены, раньше было правило что 0 — север, 1 — восток, 2- юг, 3- запад, 4 -круговая(пишу по памяти, тут возможна не точность), так вот у нас при использовании такой информации, по формуле получалась точность: если обьект стоит, то точность плохая прыгает пипец до километра, а вот если обьект движется, то гдето до 100 метров, но я использовал в расчете координат текущией точки значение предыдущей.
И да сравнивал с GPS у нас устроства стояли на машине и собирали два типа данных, GSM здорово выручало когда машина уезжала на подземный паркинг
CellId просто номер антенны. Каких то правил тут нет. Точнее они могут быть, но это все импровизация конкретного оператора. Азимут и угол раскрытия есть в базах у самого оператора. Поэтому ему какой то корреляции не нужно. Разве что только для техников своих.

Пример кстати довольно спорный. Дело в том что емкость БСки таки не очень большая, и в местах скопления людей очень легко получить отказ в обслуживании. Таким «местом скопления» являются городские дороги, особенно с маршрутными транспортными средствами. Пара тройка автобусов низкопольных и все.

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

Гугловцы еще ведут базу засеченых маков WiFi роутеров. Что позволяет еще точнее зачечь место.
На сколько я знаю, как минимум в случае обычного GSM, и мобильная станция и БС знают с точностью ± 547 метров расстояние между собственно аппаратом и БС. Точнее они знают задержку прохождения сигнала, из которой можно с такой точностью получить расстояние. К сожалению это актуально только для БС, с которой аппарат непосредственно общается (точно знать задержку необходимо для корретной синхронизации времени передачи, т.к. GSM использует TDMA разделение канала между абонентами).
Было-бы здорово, если бы можно было заставить модемный модуль по-переключатся по всем сосденим БС, тем самым получить расстояние до каждой из них с точностью 547м, тогда и триангуляция выдаст аналогичную точностью, что не так ужасно.

Да, параметр называется Timing Advance, его видно было в разных netmonitor-ах на старых телефонах, выдает значение в каких-то своих GSM-ных еденицах измерения, умножением на 547м получается расстояние до БС в метрах. В вашем случае, судя по логам, оно тоже репортится, только, естественно, только для текущей активной БС, значение TA — 0, следовательно расстояние до БС, на вскидку — от 0 до 547*1.5 км (выше полутора — оно будет округлятся в большую сторону до 2х уже). Даже эта информация, будучи учтенной, может немного повысить общую точность, если совместить с вашим методом.
Просмотрели еще раз записанный лог-файл проезда — значений Timing Advance (TA) отличных от нуля в нем, к сожалению, нету. Возможно, за городом этот параметр и даст дополнительную информацию.
Ну оно по крайне мере позволяет ограничить триангуляцию радиусом 1.5*547м вокруг БС
Лет пять назад работал в компании, в которой занимался разработкой ПО для наших органов по прослушке сотовой связи и определению местоположения абонентов нашего города по способу, описанному выше. Разумеется, использовал для собственных личных целей (не коммерческих, правда).
То самое чувство, когда понимаешь, что большинство информации как минимум по одному оператору собрано тобой. Регулярно в свое время запускал inViu OpenCellID, потом как-то заглохло…
Внимательно смотрел, много думал. Судя по всему идентификатор действительно меняется. Например при обновлении оборудования с 2.5Г на 3/4Г. Т.е. имеет смысл старые измерения игнорировать, хотя бы для того чтоб ускорить выборки.
Так же обратил внимание, что более-менее точное положение получается при 500+ измерений. Уже ближе к 200 угадывается совсем плохо. Попробуйте таким образом отфильтровать БД БС-ок.

PS: стараюсь в ОСМ антенны связи наносить, они как ориентиры хороши. Вот бы туда еще и информацию из этих баз вписать… Но тут без инсайда не получится думаю.
Жаль авторы статьи не догадались сравнить положение по GPS с вычисленным и получить погрешность.

Не уверен, что в условиях города можно получить достаточно высокую точность. К примеру, network provider андроида в моем городе по БС давал лучшую точность порядка 700м, а среднюю 1200м.
в некоторых приложения совсем нет GPS
На данный момент сервисы по определению координат уже платные, поэтому в организации пришлось развернуть свой сервер. База взята openCellID (теперь уже unwiredLabs). Те предоставляют 100-5000 запросов в день, а устройств 10 как минимум. С того же unwiredLabs свою базу и пополняем. Точность пока как минимум 1 км, а с uL — иногда 500 м. То ли вышек мало в базе, то ли нужно применять другой алгоритм. Использовался алгоритм средневзвешенных точек, как в статье
Sign up to leave a comment.