g0l (g0l) wrote,
g0l
g0l

Софтовый GPS трекер.

Помня что лучший отдых это смена рода занятия, сбацал вчера вечером одну программку. Бацал на старом древнем 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
Tags: 4g, gps, yota, вождение, йота, машина, пробки, пробколёт, софт
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments