?

Log in

No account? Create an account

Previous Entry Share Next Entry
Софтовый GPS трекер.
g0l
Помня что лучший отдых это смена рода занятия, сбацал вчера вечером одну программку. Бацал на старом древнем Borland C++ Builder 6.0, заодно хоть немного вспомнил как под ним программировать. А то последний раз я на сях кодил году эдак в 2002-м. Правда, потом под FreeBSD демона учёта телефонных звонков с АТС писал, но там совсем уж элементарное было.

Короче, для пробколёта понадобилось отслеживание местоположения машины. Принцип вырисовался общеизвестный: в машине стоит ноут к которому веб-камера подключена. Ноут выходит в инет через Йоту, транслирует картинку с камеры. Ещё к ноуту подключен блютусный приёмник GPS. Софтинка на ноуте читает географические координаты (в формате NMEA) с приёмника GPS, преобразует их в гугловские координаты и отсылает через инет на сервер. На сервере принимающая софтинка получает координаты и пишет в базу данных. Помимо координат можно передавать ещё и время получения координат, высоту над уровнем моря и т.д. Короче, всю ту информацию которую можно вычленить из строк NMEA. Далее, скрипт на страничке с гуглокартой с какой-то периодичностью проверяет, появились ли новые координаты. Если появились - двигает иконку по карте в нужную позицию.

Короче, всё просто. Только вот нужна буферизация координат, на случай если в текущий момент нет связи с сервером.

Полез искать программы, которые могут получать с GPS и передавать куда-то в инет координаты. Оказалось что есть такие, но они либо работают только со своим сервером, либо не подходят по реализации - передают используя UDP. А мне лишний демон на сервак вешать очень не хоцца.

Вот и получился очередной велосипед. Моя программулька, гордо именуемая Gol's tracker client v.0.0.1 уже читает инфу с жэпээсины через виртуальный COM-порт. Обрабатывает их и шлёт на сервак. Причём шлёт обычным коннектом на веб-страничку, координаты передаёт как RAW_POST_DATA. Т.е. на веб-сервере лежит PHP-скриптик который и вызывается программкой как обычный URL. Буферизации данных пока нифига нет, если инет пропал то координаты не передаются и пропадают.

Вот чем хорошо изобретение велосипедов - тем что пока мастеришь, что-то новенькое изучаешь. Я вот теперь разобрался с NMEA, научился его строки разбирать. Даж контрольная сумма проверяется :-)
На скриншоте координаты неопределены ибо у меня ща GPS валяется на подоконнике и нифига спутники ловить не хочет. Как поймает - выложу ещё скриншотик.
Минусы очевидны - протокол TCP более накладней, чем UDP. Зато сразу есть подтверждение отправки координат. И нам пофиг на трафик, ибо у йоты скорость ништяк и анлим :-) Удобство налицо - принимать и обрабатывать координаты могёт любой обычный веб-скриптик, а не специально запущенный демон.

Работает софтинка пока только под обычной виндой (проверял на семёрке и на XP). Но проблем с портированием на Windows Mobile, думаю, быть не должно. Исходники сюда выложу на днях, мож кому пригодятся.

Кстати, визуализация принятых координат - вот тут. Щас там Храм Христа Спасателя фигурирует, эт я сегодня катался, тестил. Но об этом позже напишу.

Заметка закросспостена с моего блога g0l.ru