Решил таки переопубликовать свою статью в OpenSource ( http://osa.samag.ru/info/OpenSource068.zip) и у себя в блоге. В журнале статья называется: “QLandKarte GT как замена OziExplorer в GNU/Linux”, здесь же публикую под оригинальным.
Ни для кого не секрет, что, наверное, самой популярной средой для работы с GPS навигаторами, и вообще картографической информацией с целью навигации под Windows, является OziExplorer. Большой плюс оной программы - её простота (особенно если сравнивать с различными GIS). Популярность Ozi’ка стала причиной появления в интернете огромного количества геоинформации в его формате, в частности: путевые точки (Waypoints), треки (Tracks) и файлы привязок растровых карт (Map файлы).
Естественным желание становится использовать как-то всю эту прорву данных и в Linux. Но на пути становится первая преграда: OziExplorer существует только в версии для Windows. Выручить тут могут только два фактора:
- все версии Ozi прекрасно запускаются под Wine (но для легального и полноценного использования нужно купить лицензию, стоит около 90$).
- несмотря на закрытость самой программы, авторы оной сделали свои форматы открытыми (простые текстовые файлы) и даже дали описание в справочном руководстве, за что им огромное спасибо (посмотреть описание можно, например, тут: 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) этого же района и трек:
Полезные ссылки
- “Работа с Qlandkarte GT” (
http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt) - общая страница для размещения информации, но с 2008 года новых источников не появилось, среди старых (но не потерявших актуальности):
- “Обзор интерфейса” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-main-window)
- “Привязка растровых материалов” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-geotiff) - так же смотрите первую ссылку, там тоже немного про привязку сказано.
- “Создание коллекций” ( http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-collections) - или, по другому, атласов, наглядное описание данного процесса.
- “Подготовка карты для 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 карты.
- “Установка QLandkarte GT для работы с GPS Garmin EtrexVistaHCx” ( http://community.livejournal.com/ru_nix/11337.html) - пример использования с реальным железом.
- “Garmin GPSmap 60Cx: подключение и использование в Linux” ( http://sovety.blogspot.com/2008/06/garmin-gpsmap-60cx-linux.html)