Для определения местоположения в приложениях для мобильных устройств, как известно можно использовать встроенный GPS – приемник или определять местоположение по базовым станциям. В моем приложении мне было необходимо использовать оба варианта, так как второй вариант должен был автоматически заменять первый при отсутствии GPS – данных (например, в помещении).
Мобильное устройство с системой Windows Mobile 6.1 Pro. Язык: C#. Проблем с определением местоположения по GPS не возникло. Для определения местоположения по базовым станциям я решил использовать библиотеку cellid.dll. Как оказалось она очень удобная для применения.
Все было написано и отлично работало, мобильный клиент получал координаты, адрес (вплоть до улицы, где находится базовая станция) и все отправлял в удаленную базу на сервере. К базе был привязан сайт, который выводил информацию о местоположении на Google Maps. Однажды просматривая базу я увидел, что в течении одной минуты мои координаты изменились довольно сильно, а затем вернулись на место. Просматриваю на карте и вижу, что я находился в Новороссийске (так оно и есть), затем в течении минуты я оказался в Можайском районе Московской области и вернулся назад в Новороссийск. Местоположение определялось по базовым станциям с использованием библиотеки сellid.dll.
Вопрос: возможно ли что это просто ошибка в библиотек, или сотовая станция выдала неверные данные, или телефон периодически посещает роуминг сам по себе? Будьте внимательны те, кто разрабатывает подобные приложения, используя данные технологии. У меня простое приложение, от которого ничего серьезного не зависит, а если точность координат влияет на что либо?
Это повторялось несколько раз с большими интервалами времени.
Вот изображения карты и базы данных:
Функция для получения местоположения:
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("Address: GetGPSTowerGEO. Message: " + " No data from the base station.");<br/>
}<br/>
}<br/>
catch (Exception e)<br/>
{<br/>
WriteLog("Address: GetGPSTowerGEO. Message: " + e.Message);<br/>
}<br/>
}
Эта тема на сайте nansoft.ru