Задать вопрос
mastersoftna
@mastersoftna

Ошибка определения местоположения по базовым станциям?

Для определения местоположения в приложениях для мобильных устройств, как известно можно использовать встроенный GPS – приемник или определять местоположение по базовым станциям. В моем приложении мне было необходимо использовать оба варианта, так как второй вариант должен был автоматически заменять первый при отсутствии GPS – данных (например, в помещении).


Мобильное устройство с системой Windows Mobile 6.1 Pro. Язык: C#. Проблем с определением местоположения по GPS не возникло. Для определения местоположения по базовым станциям я решил использовать библиотеку cellid.dll. Как оказалось она очень удобная для применения.


Все было написано и отлично работало, мобильный клиент получал координаты, адрес (вплоть до улицы, где находится базовая станция) и все отправлял в удаленную базу на сервере. К базе был привязан сайт, который выводил информацию о местоположении на Google Maps. Однажды просматривая базу я увидел, что в течении одной минуты мои координаты изменились довольно сильно, а затем вернулись на место. Просматриваю на карте и вижу, что я находился в Новороссийске (так оно и есть), затем в течении минуты я оказался в Можайском районе Московской области и вернулся назад в Новороссийск. Местоположение определялось по базовым станциям с использованием библиотеки сellid.dll.


Вопрос: возможно ли что это просто ошибка в библиотек, или сотовая станция выдала неверные данные, или телефон периодически посещает роуминг сам по себе? Будьте внимательны те, кто разрабатывает подобные приложения, используя данные технологии. У меня простое приложение, от которого ничего серьезного не зависит, а если точность координат влияет на что либо?


Это повторялось несколько раз с большими интервалами времени.


Вот изображения карты и базы данных:

c166a8.jpg

2.JPG


Функция для получения местоположения:

private void GetGPSTowerGEO()<br/>
 {<br/>
 try<br/>
 {<br/>
 CellTower ct = RIL.GetCellTowerInfo();<br/>
 GeoService gs = new GeoService();<br/>
 GeoLocation gl = gs.GSM2Geo(ct);<br/>
 LatLonLocation ll = new LatLonLocation();<br/>
 ll.Latitude = gl.Latitude;<br/>
 ll.Longitude = gl.Longitude;<br/>
<br/>
if (gl != null)<br/>
 {<br/>
 //получаю данные с базовой станции<br/>
 Latitude = gl.Latitude;<br/>
 Longitude = gl.Longitude;<br/>
 country = gs.Geo2Address(ll).address[0].Country;<br/>
 town = gs.Geo2Address(ll).address[0].Full;<br/>
 }<br/>
 else<br/>
 {<br/>
 //не могу получить данные с базовой станции<br/>
 WriteLog(&quot;Address: GetGPSTowerGEO. Message: &quot; + &quot; No data from the base station.&quot;);<br/>
 }<br/>
 }<br/>
 catch (Exception e)<br/>
 {<br/>
 WriteLog(&quot;Address: GetGPSTowerGEO. Message: &quot; + e.Message);<br/>
 }<br/>
 }


Эта тема на сайте nansoft.ru
  • Вопрос задан
  • 3997 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Kindman
@Kindman
Я думаю, что можно коррекцию вводить после обнаружения «скачка» на более чем 100 км с учетом «градиента» средней скорости изменения предыдущего местоположения, и считать такой замер — недостоверным (и отбрасывать), а вместо этого функция должна вернуть предыдущий (более правдоподобный) замер (с установленной пометкой «устаревшие данные»).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
YasonBy
@YasonBy
Вот несколько возможных причин:
1. Оператор может менять структуру сети. Таким образом, ID станций могут со временем меняться, а гео-базы обновляются с задержкой.
2. Не исключено, что библиотеки учитывают не все ID-параметры (MCC, MNC, LAC, CellID, BSID). Соответственно, возможна неоднозначность.

а если точность координат влияет на что либо?
Значит, придётся учитывать возвращаемую оценку точности, если система позиционирования такое поддерживает.

GeoLocation gl = gs.GSM2Geo(ct);

if (gl != null)
Это условие всегда выполняется. Если gl было null, то в строке
ll.Latitude = gl.Latitude;
вылетел NullPointerException, и до if'а дело не дошло.
Ответ написан
Комментировать
@mylnikov
Можно использовать api получения местоположения GSM сот Публичная база телефонных станций мира OpenCellID ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы