Hatred's Log Place

DON'T PANIC!

Mar 27, 2012 - 8 minute read - linux туризм maps

Ищем замену OziExplorer на Linux

Решил таки переопубликовать свою статью в OpenSource ( http://osa.samag.ru/info/OpenSource068.zip) и у себя в блоге. В журнале статья называется: “QLandKarte GT как замена OziExplorer в GNU/Linux”, здесь же публикую под оригинальным.

Ни для кого не секрет, что, наверное, самой популярной средой для работы с GPS навигаторами, и вообще картографической информацией с целью навигации под Windows, является OziExplorer. Большой плюс оной программы - её простота (особенно если сравнивать с различными GIS). Популярность Ozi’ка стала причиной появления в интернете огромного количества геоинформации в его формате, в частности: путевые точки (Waypoints), треки (Tracks) и файлы привязок растровых карт (Map файлы).

Естественным желание становится использовать как-то всю эту прорву данных и в Linux. Но на пути становится первая преграда: OziExplorer существует только в версии для Windows. Выручить тут могут только два фактора:

  1. все версии Ozi прекрасно запускаются под Wine (но для легального и полноценного использования нужно купить лицензию, стоит около 90$).
  2. несмотря на закрытость самой программы, авторы оной сделали свои форматы открытыми (простые текстовые файлы) и даже дали описание в справочном руководстве, за что им огромное спасибо (посмотреть описание можно, например, тут: http://www.realbiker.ru/OziExplorer/fileformats.shtml).

Логично, что первый вариант, хоть и имеет право на жизнь, но не является достаточно изящным решением. Поэтому дальше мы сделаем попытку найти готовое программное обеспечение, которое может работать с форматами OziExplorer. Сделаю одну оговорку: к сожалению, вопрос непосредственного сопряжения с устройствами GPS я рассматривать не буду, ввиду отсутствия подобных устройств в зоне моей доступности, отложим это на будущее.

Работа с картами, атласами, геоданными и GPS

По совокупности характеристик таких как простота и функциональность в данную категорию попадает, пожалуй, только одна программа - QLandKarte GT ( http://www.qlandkarte.org/). Есть ещё версия ‘M’, предназначена для различных PDA.

По сути, эта программа, прямой аналог OziExplorer, позволяет производить привязку растровых карт (например сканированных атласов или других источников), в качестве основного формата которых, используется GeoTiff, кроме того поддерживаются векторные карты Garmin в tdb формате (img формат требует дополнительных действий от пользователя, почитать об этом можно тут: http://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=FAQ, к сожалению, на английском). Кроме того позволяет загружать геоданные (точки, треки) из файлов на диске (набор форматов ограничен, но главное, что есть GPX ( http://ru.wikipedia.org/wiki/GPX), подробнее - ниже). Эти же данные она может экспортировать обратно в файлы, а так же читать/загружать из/в GPS устройства. Ещё одной важной и нужной особенностью программы является возможность создавать атласы, в которых указывать для разных масштабов различные растровые карты.

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

Во многих дистрибутивах данную программу можно найти в репозиториях, в случае ArchLinux она есть в AUR в виде двух пакетов (первый пакет уже спокойно себе живёт в репозитории community): qlandkartegt и qlandkartegt-svn. Так же стоит обратить внимание на комплект драйверов для работы QLandKarte с GPS Garmin (там же в AUR тоже следом за qlandkartegt поселился в community): garmindev. Установка не должна занять много времени и сил.

В общем, всё вроде хорошо, вот только ни привязанные в OziExplorer карты ни геоинформацию в его формате QLandKarte читать не умеет. Когда я это обнаружил, чуть было не расстроился, но поискав в интернете нашел решения нужных мне вопросов.

Карты

На сайте разработчиков QLandKarte GT есть небольшая сводка, о том, где брать карты, у меня в блоге(( Картографические приложения, а так же визуализация)) краткая выборка. В общем одним из пунктов идет: конвертация карт OziExplorer в формат GeoTiff при помощи скрипта на Python: ozi2geotiff.py.

Сам скрипт можно достать тут: http://sourceforge.net/projects/ozi2geotiff, но разработчики не выкладывают пакеты и доступ возможен только через SVN. Для пользователей ArchLinux я поместил в AUR правила для сборки пакета для этого скрипта, так что для них сложностей быть не должно (пакет называется ozi2geotiff-svn, так же там лежит скрипт ozi2gpx о котором ниже): после сборки и установки пакета, конвертер вызывается командой:

ozi2geotiff <params>

Для остальных же можно скачать скрипт таким образом:

wget -O ozi2geotiff.py http://ozi2geotiff.svn.sourceforge.net/viewvc/ozi2geotiff/trunk/ozi2geotiff.py?revision=HEAD

А запускать так:

python ozi2geotiff.py <params>

Так же проверьте, что у вас стоят все необходимые пакеты:

  • python
  • libgeotiff
  • gdal
  • imagemagick

Запуск без параметров выведет экран справки.

Использовать скрипт достаточно просто:

ozi2geotiff -i karta.map --in-img=karta.gif -o karta.tiff

Можно ещё добавить параметр -v для более подробного вывода. Что же за параметры мы использовали, посмотрим подробнее:

  • -i karta.map - собственно задаем файл привязки, обязательный параметр
  • --in-img=karta.gif - задаем растр, к которому применяется привязка (формат gif здесь только для примера), параметр не обязательный, если путь к растровой карте в map-файле задан корректно (в этом случае он берется от туда)
  • -o karta.tiff - наша карта в GeoTiff формате, её мы уже можем загружать в QLandKarte GT и работать.

Справедливости ради, стоит отметить, что существует ещё один скрипт для подобного преобразования, написанный на Ruby, вот только работать у меня он отказался (и даже при всей своей нелюбви к Python, я не стал разбираться в причинах - мне главное конечный результат). Скачать этот скрипт можно тут: http://sites.google.com/site/osmbelarus/Home/files

Хочется так отметить, что скрипт ozi2geotiff.py не является финальным продуктом и может содержать ошибки, но автор - русскоговорящий, о всех найденных недочетах можно писать ему на почту.

Карты Garmin

Примечение: текст ниже несколько устарел. По правовым соображениям, программа не может работать с картами Garmin в NT формате, карты же Евгения Богатырёва распространяются только в нём.

Теперь посмотрим, что можно сотворить из карт для Garmin в .img формате (для Приморского края, к примеру, можно разжиться тут: http://john.bdk.com.ru/gpsmaps/pkmap2/main.htm)

Напрямую эти файлы загрузить не получится, нужно собрать их в альбом (файл с расширением .tdb). Для этого нам поможет программа mkgmap ( http://www.mkgmap.org.uk/page/main). В случае ArchLinux она имеется в AUR: mkgmap-svn (для работы нужна Java).

Единственный нюанс, файлы нужно будет переименовать в вид

########.img

где ######## - 8 цифр, внутреннее представление имени файла. Как получить эту цифру правильно, я не понял, поэтому сделал в лоб:

strings karta.img | grep 'RGN'

Записей будет несколько, но смысл понятен. Затем все эти файлы собираем в одной директории и выполняем команду:

mkgmap --input-file=00000001.img ... --input-file=0000000n.img --tdbfile

В результате у нас дополнительно появятся файлы: osmmap.img и osmmap.tdb

Загружая карту выбираем osmmap.tdb, затем он предложит выбрать .img файл, выбираем osmmap.img, все нужные подгрузятся автоматом.

Естественно всё это вручную делать утомительно, поэтому написал скрипт img2tdb:

#!/bin/sh

use()
{
cat << _EOF_
Use: $0 <out-dir> <1.img> ... [n.img]
_EOF_
}

if [ -z "$2" -o "$1" == "--help" ]; then
  use
  exit
fi

OUT="$1"
IMG=""

shift

cwd=`pwd`
mkdir -p "$OUT"
cd "$OUT"

echo "Work dir: `pwd`"

while [ -n "$1" ]
do
  st=`echo "$1" | grep '^/'`
  if [ -z "$st" ]; then
    in_name="$cwd/$1"
  else
    in_name="$1"
  fi

  int_name=`strings "$in_name" | grep 'RGN' | grep -v 'GARMIN' | head -1 | awk -F'RGN' '{print $1}'`
  out_name="$int_name.img"
  #

  echo "Copy '$in_name' -> '$out_name'"
  cp "$in_name" "$out_name"

  IMG="$IMG --input-file=$out_name"

  shift
done

echo "Run 'mkgmap' and prepare TDB map album"
mkgmap $IMG --tdbfile

echo "Done"

После сохранение сделать скрипт выполняемым:

chmod +x img2tdb

Пользоваться тоже просто:

img2tdb <out dir> *.img ... [filen.img]

первый параметр - директория в которой будут сохраняться результаты работы, дальше отдельные img-файлы, которые объединяются в альбом. Можно указывать и маску:

img2tdb /tmp/map-out *.img

Всё, пользуемся. В будущем положу этот скрипт в пакет ozi2geotiff

Геоинформация: треки, точки, маршруты

Настала очередь и геоинформации. Выше я писал, что QLandKarte GT поддерживает не так много форматов, среди которых нет форматов OziExplorer, но есть открытый формат GPX, поэтому ставим задачу: преобразовать форматы Ozi в GPX.

В отличии от карт, набор инструментов тут побогаче, начнем с программы gpsbabel, которая имеется в community репозитории ArchLinux (да, похоже единственная из этого обзора, которую не нужно собирать).

GPSBabel ( http://www.gpsbabel.org) - программа для закачки треков, путевых точек и т.п. на GPS устройства, а так же для получения этой информации с устройства и конвертации данных в различных форматов друг в друга. Нам же сейчас главное, что программа поддерживает форматы файлов OziExplorer и GPX.

Синтаксис команды получается очень простым:

gpsbabel -i ozi -f track.plt -o gpx -F track.gpx
gpsbabel -i ozi -f dots.wpt  -o gpx -F dots.gpx

небольшие пояснения:

  • -i - задаёт формат входного файла
  • -o - задаёт формат выходного файла
  • -f - задаёт входной файл
  • -F - задаёт выходной файл

Остальные опции:

gpsbabel --help

Что бы каждый раз не писать эти команды, я поместил простенький скрипт ozi2gpx в пакет ozi2geotiff, вызывается просто:

ozi2geotiff <OziExplorer file: plt, wpt> <out.gpx>

Всё просто и лаконично. Для данной программы в AUR есть графический фрон-энд, называется gebabbel ( http://gebabbel.sourceforge.net), так что, если командная строка вас пугает - можете воспользоваться её возможностями.

Вторая программа для тех же нужд называется RouteConverter ( http://www.routeconverter.de/en), требует для своей работы Java, имеет графический и консольные интерфейсы. Пакет для ArchLinux я подготовил и выложил в AUR.

У этой программы есть одна, так называемая, киллер-фича: она подключается к GoogleMaps, и когда загружаешь трек или путевые точки - она рисует на карте оные, и, соответственно, позиционирует положение на карте в нужное время - крайне удобно может быть для быстрого разбора и сортировки треков.

Как при помощи неё конвертировать? Достаточно просто:
File -> Open… - указываем формат и открываем файл
File -> Save as… - указываем формат и сохраняем файл

Вот внешний вид программы с загруженным треком:

Есть и вариант программы с интерфейсом командной строки, в пакете для ArchLinux они вызываются соответственно:

routeconverter
routeconverter-cli

Что в итоге?

В итоге мы имеем базовый набор утилит для нормальной работы с картами под Linux, можем использовать привязки OziExplorer, его файлы с путевыми точками, треками с минимальными трудозатратами.

Ниже несколько снимков экрана QLandKarte GT с загруженными данными для нашего предстоящего похода.

Загруженные векторные карты Garmin и трек (нет деталей в данном масштабе):

Загруженные векторные карты Garmin и трек (более крупный масштаб, отображаются детали):

Загруженная растровая привязанная карта (GeoTiff) этого же района и трек:

Полезные ссылки

  1. “Работа с Qlandkarte GT” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt) - общая страница для размещения информации, но с 2008 года новых источников не появилось, среди старых (но не потерявших актуальности):
    1. “Обзор интерфейса” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-main-window)
    2. “Привязка растровых материалов” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-geotiff) - так же смотрите первую ссылку, там тоже немного про привязку сказано.
    3. “Создание коллекций” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-collections) - или, по другому, атласов, наглядное описание данного процесса.
  2. “Подготовка карты для qlandkarte” ( http://takeoff.mipt.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B4%D0%BB%D1%8F_qlandkarte) - тут интересно обратить внимание на подключение карты высот, тем самым можно создавать 3D карты.
  3. “Установка QLandkarte GT для работы с GPS Garmin EtrexVistaHCx” ( http://community.livejournal.com/ru_nix/11337.html) - пример использования с реальным железом.
  4. “Garmin GPSmap 60Cx: подключение и использование в Linux” ( http://sovety.blogspot.com/2008/06/garmin-gpsmap-60cx-linux.html)