20080620

Как загружать геокэши в навигатор Garmin

В прошлой заметке я написал о том, как подключить Garmin в Linux и какими программами можно пользоваться. В этот раз более конкретный и короткий «рецепт».

Есть такая игра: геокэшинг. Суть игры — по данным координатам находить тайники. Координаты и описания тайников можно найти на сайте geocaching.com. Конечно, координаты можно ввести в прибор и вручную, но проще скачивать файлы-описания в специальном формате loc. Далее о том, как загрузить эти файлы в Garmin.

Это можно сделать в MapSource (см. предыдущую заметку как использовать MapSource под wine). Однако проще и быстрее, по-моему, воспользоваться gpsbabel.

Так, если файл называется geocaching.loc, а устройство подключено к /dev/ttyUSB0, то сконвертировать и поместить геокэш в память устройства можно одной командой:
$ gpsbabel -i geo -f geocaching.loc -o garmin -F /dev/ttyUSB0
Понятно, что если геокэшей много, загрузить их все можно вот так:
$ for f in *.loc ; do gpsbabel -i geo -f ${f} -o garmin -F /dev/ttyUSB0 ; done

Другие заметки про GPS в Linux:

20080612

Garmin GPSmap 60Cx: подключение и использование в Linux

Вчера стали обладателями вот такого устройства, GPS-навигатора Garmin GPSmap 60Cx:Устройство позволяет пользоваться загружаемыми векторными картами и имеет карточку памяти. Впрочем, все возможности ещё только предстоит научиться использовать. Карты надо научиться делать самим (те, что в продаже, стоят безумно дорого, но, главное, нормальных топографических карт нет, всё больше дороги…) — но это отдельная тема (кое-какие инструкции (1) уже (2) нашёл (3)). Вчера же вечером прокатились на велосипедах, чтобы записать тестовый трек, а после я пытался «подружить» это чудо со своим GNU/Linux. Ниже краткий конспект.

Подключается GPSmap 60Cx по USB (кабеля для подключения по последовательному порту в комплекте нет). Причём может подключаться в двух режимах: USB Mass Storage (ну с этим всё понятно, как флэшка, при отключении — устройство перезапускается) и по своему собственному протоколу (по умолчанию). Дальше я буду писать в основном про второй режим подключения.

Похоже, что в дистрибутивном ядре Debian (2.6.24-1-686) нужные драйвера garmin-gps уже включены, потому что сразу после подключения устройства dmesg выдаёт следующее:
usb 4-1: new full speed USB device using uhci_hcd and address 9
usb 4-1: configuration #1 chosen from 1 choice
garmin_gps 4-1:1.0: Garmin GPS usb/tty converter detected
usb 4-1: Garmin GPS usb/tty converter now attached to ttyUSB0

Из чего следует, что устройство подключается как /dev/ttyUSB0.

Передача точек маршрута (Waypoints) и треков (Tracks)

Вначале пробую программу gpsman. Интерфейс не сверхудобный, куча не связанных между собой окошек, между которыми приходится переключаться, кнопки, которые распахиваются в меню, но зато всё это дело работает! :)

Настройки потребовались минимальные: в главном окошке в диалоге Options указать GPS Model «Garmin» и Serial port «/dev/ttyUSB0». Всё, после этого в окошке GPS Reciever
— там, где написано offline нажимаем и выбираем check — надпись сменится на зелёную online, а кнопки внизу станут активные. Именно эти кнопки и надо использовать чтобы скачивать с устройства (Get) или загружать на устройство (Put) разные типы объектов.

Я пробовал скачивать точки маршрута и записанный трек (кнопки WPoint и Track соответственно). После их нажатия программа получает с устройства список имеющихся в нём объектов, и уже в другом окошке можно выбрать нужный и сохранить/экспортировать. Треки можно сразу экспортировать в формате GPX. Ещё треки можно просматривать и редактировать на «карте» в gpsman. Слово «карта» написал в кавычках — потому что вначале это чистый лист, подложку с картой сделать вроде бы можно, но как — пока не разбирался.

Можно загрузить трек и точки маршрута с устройства при помощи программы gpsbabel, из коммандной строки. Если устройство подключено к /dev/ttyUSB0, а нужен трек с точками в формате GPX, то получить его можно так:
$ gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -o gpx -F мойтрек.gpx
Другой способ получить эту информацию — скопировать с устройства GPX-файл в режиме USB Mass Storage, а потом уже его конверировать-преобразовывать… Этот файл с названием вида ГГГГММДД.gpx появляется на карточке памяти только если включена соответствующая функция в приборе. В него пишутся копии всех треков за день, сам прибор никак этой информацией не пользуется. gpsman же позволяет скачивать треки, находящиеся в памяти прибора. На мой взгляд, использовать gpsman проще, потому что треки и точки пути будут уже разделены и называться так же, как и на устройстве.

Лирическое отступление: Как вставить GPX-трек на Google Earth или Google Maps? Совет нашёл на Geofaq.ru (загрузка данных GPS на растровую карту). Если кратко, то трек нужно преобразовать в формат KML, а затем выложить куда-нибудь в веб, а в Google Maps указать URL этого файла. В Google Earth KML-файл можно открыть непосредственно. В случае использования свободного софта, преобразовать файл из GPX в KML может GPSBabel:
$ gpsbabel -i gpx -f 20080611.gpx -o kml -F 20080611.kml

Эта команда говорит: исходный формат GPX (-i gpx), исходные данные брать из файла 20080611.gpx (-f имяфала), конечный формат KML (-o kml), писать результат в файл 20060811.kml (-F имяфала). Всё, полученный файл можно просмотреть в Google Earth или Google Maps.

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

Другие способы: у gpsman есть интерфейс коммандной строки (ещё не пробовал), есть программа gpstrans, умеющая делать примерно то же самое, тоже с интерфейсом коммандной строки (тоже ещё не пробовал).

Далее речь пойдёт о загрузке в прибор карт, прежде всего неофициальных (потому что покрытие официальных гарминовских топографических карт весьма неудовлетворительное).

Использование официальной MapSource4.0

С устройством поставляется программа MapSource4.0, необходимая для установки официльных карт, годная и для скачивания-закачивания треков, маршрутов и точек. Программа без проблем установилась под wine (версия 1.0-rc-1), даже на русском языке.

Народ на форумах подсказал, что нужно сделать вот так:
$ ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1

и после этого перезапустить MapSource. После этого программа стала находить подключенный по USB прибор и с ним работать. Проверил передачу треков и точек пути, загрузку карт на прибор. Вроде всё нормально.

Использование неофициальной QLandkarte

QLandkarte — свободная программка с неплохим интерфейсом предназначенная заменить собой несвободную MapSource, в том числе загружать на устройство карты. В данный момент мне удалось с её помощью просматривать карты в формате IMG, но вот соединяться с устройством QLandkarte никак не хочет. Выдаёт мистическую «Device link error», а в настройках прямо сказано, что имя порта для USB-устройств игнорируется… В общем, надо разбираться, копать список рассылки, потому что программа похоже стоит того.

Другие способы загружать на устройство карты

Копирование карт в режиме USB Mass Storage. Вот здесь предлагают такой способ:
Q: I copied the IMG files onto my GPS, but don't see anything.
A: Garmin GPS's have to use the gmapsupp.img file in the Garmin folder (USB Drive Letter:\Garmin\GMAPSUPP.IMG) and there can only be one of this file. Either rename the 1 file you want to gmapsupp.img or use sendmap20 to compile all the img's you want into one gmapsupp.img file.

Попробовал, создал на карточке устройства папку. Клал туда IMG-файлы. Устройство не видит. Переименовывал тот или иной файл в GMAPSUPP.IMG. Не находит. Пробовал называть строчными буквами (хотя там же всё равно FAT?). Не помогает. То ли карты не те, то ли надо что-то с устройством вначале сделать.

Есть программка sendmap20. Бесплатная её версия для Linux не работает: точнее не находит /dev/ttyUSB0. И что с ней можно сделать — я не придумал. Зато вот на этом польском форуме написали, что если в wine связать порт com1 c /dev/ttyUSB0 (см. выше про MapSource), то под wine будет работать бесплатная Windows-версия sendmap20.

И действительно, sendmap20 без проблем работает в wine после привязки порта, карты на устройство загружаются. Также в wine хорошо работает GPSMapEdit, которым можно создавать и редактировать карты. Бинарная бесплатная версия cgpsmapper, который конвертирует файлы из «польской нотации» в формат IMG, используемый Garmin, — тоже работает. Так что уже даже удалось создать и загрузить на устройство самодельную карту. При использовании sendmap20 нужно каждый раз стирать с устройства все карты и заливать весь нужный набор заново, это особенность программы.

Резюме: подключение GPS устройства Garmin GPSmap 60Cx в Linux проблем не вызвало, передача точек пути, треков и маршрутов похоже работает нормально (как минимум, в MapSource и в gpsman), конвертировать данные в другие форматы умеет gpsbabel, карты можно загружать на устройство с помощью sendmap20 или MapSource под wine; сами карты в формате IMG в Linux можно просмотреть в QLandkarte или официальном MapSource, полный цикл подготовки карт можно выполнить при помощи бесплатного (но несвободного) ПО, но замену некоторым программам можно найти. В этом плане я связываю надежды с QGIS и GRASS, но пока ничего с их помощью не произвёл.

Ссылки по теме:

20080609

antiodt: просмотр документов OpenOffice в виде простого текста

Для тех, кто не любит запускать офисные приложения для того лишь, чтобы просто прочесть файл в формате ворда, есть antiword, есть wvunrtf, и pdftotext для RTF и PDF соответственно). Вот только для открытого и всеми любимого ODT (OpenDocument, формат OpenOffice) — такой радости нет. o3read их не берёт.

В общем, запускать мне OpenOffice лениво, в AbiWord тоже не так уж шустр, так что написал себе скрипт-однострочник (antiodt):
#!/bin/sh
unzip -p "$1" content.xml | \
xmlstarlet sel -N text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" \
  -T -t -m '//text:p' -v . -n | less
Поскольку документ ODT это zip-архив, а внутри весь текст в виде XML лежит в content.xml, то отсавалось только выбрать содержимое текстовых элементов (забив на всё форматирование, кроме разбиения на абзацы). При этом для разбора XML используется утилита xmlstarlet. Все имеющиеся в наличие у меня ODT документы теперь в мгновение ока можно прочитать так:
$ antiodt документ.odt
Идею почерпнул здесь. Кто велосипед уже изобретал — не жалуйтесь.

Дополнение 2009-09-23: Если необходимо перевести документ из ODT в plain text с частичным сохранением форматирования, то можно ещё использовать скрипт odt2txt.py. Скрипт посложней, он преобразует ODT в текст с разметкой Markdown.

P.S. View OpenOffice files as plain text (эта заметка по-английски)