Инструменты пользователя

Инструменты сайта



// QMapShack

Внезапно QMapShack стал юзабельным!

Но немного истории. QMapShack это революционное развитие QLandkarteGT от того же автора. Просто архитектурно QLandkarteGT перестал соответствовать требованиям.

Итак, как минимум следующие фичи теперь доступны в QMS (принятая аббревиатура для QMapShack в расслылке)4):

  • Открытие серии файлов с геоданными, переданных, как аргументы приложения. Это не относится с картам (?) - они берутся только из директорий, которые вы настроили в программе (аналогично произвольная карта не может быть открыта через File → Open Map, такого пункта просто нет).
  • Поддерживаются ВСЕ форматы карт, которые поддерживаются GDAL (!). Но делается это не напрямую, а через формирование .vrt файла. Сей унифицированный способ отменил отдельное открытие GeoTIFF - теперь нужно и для него формировать vrt-файл. К счастью теперь это делается через внутренний инструмент vrtbuilder и позволяет в большинстве случаев обойтись без утомительной конвертации в GeoTIFF, например привязок OziExplorer5)6). Вообще список теперь достаточно вменяемый:
    • Векторые карты:
      • .img - веркторные карты Garmin в non-NT формате. NT-формат не поддерживается и поддерживаться не планируется.
    • Растровые карты:
      • .vrt - враппер для всех типов GDAL.
      • .jnx - Garmin Birds Eye.
      • .rmap - CompeGPS Map Container
    • Онлайн карты:
      • .wmts - WMTSCapabilities.xml с любого картографического сервера, переименованный в уникальное имя. Дальше есть подробности.
      • .tms - описание правил использования TMS серверов. Через такие файлы можно подключить всякие OpenStreetMap, OpenCycleMap и так далее. Встроенный мастер позволит сгенерировать такие файлы для некоторых популярных сервисов.
    • DEM рельеф:
      • .vrt - как и прочие растровые карты
  • (!) Более развитые средства управления геоданными. Каждый файл GPX воспринимается как отдельный контейнер-проект. Данные между ними можно копировать. Теперь можно объединить несколько треков в один (!).
  • (!) Больше информации по трекам: можно задать тип активности, можно посмотреть графики высоты от расстояния, скорости от расстояния, или прогресса пути от времени.
  • (!) Более развитые средства редактирования треков. Правда точки так и не удаляются, но можно скрыть их, спрямив, например, трек (убрав топтание на месте, при остановке на обед или заделку колеса на велосипеде).
  • (?) Более активное использование мыши в окне отображения карты. В контекстном меню находится большинство полезных пунктов, типа создания путевой точки или трека. Да и вообще больше динамики в интерфейсе, точнее в области карты.
  • (!!!) Выделение, печать или сохранение произвольной области карты. Костыльное решение я делал для QLGT, но его не приняли. Там можно было распечатать только видимую часть карты.

А вот теперь каких инструментов не хватает в QMS, но есть в QLGT:

  1. Инструмент привязки карты по точкам (в визуальной форме). Не знаю, будет ли сделан, но таск завёл.
  2. Экспорт выделенного куска карты в JNX. Потребность сомнительная, но пару раз пригождалась.

Ну и ссылки:

4) (!) отмечены фичи уникальные, по сравнению с QLGT, а (-), то, что убрано, (?) - спорные изменения
5) В случае привязок Ozi, нужно открывать .map файл, в случае привязок .pgw+.prj открывать нужно одноимённую картинку
6) К сожалению, на карты и привязки с http://loadmap.net он упорно ругается

// Привязка генштабовских карт в QLandkarteGT

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

Исходные данные: лист километровки О-50-103.tiff

На первом шаге нужно указать проекцию карты, для нашего родного генштаба проекция будет примерно такого вида:
+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs
+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12 +units=m +no_defs

(параметр towgs84, определяет параметры перехода к датуму wgs84, который используется в том же GPS, этот параметр автоматом добавится, если в мастере настройки проекции выбрать датум Pulkovo 1942)

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

  • lon_0 - центральный меридиан
  • x_0 - мнимый восток (false easting)

В статье Готовим растровую карту для навигатора Garmin GPSMap 62s я уже показывал как рассчитывать эти параметры, продублирую и здесь:

lon_0 =* 6 - 3            # центральный меридиан по известной зоне
x_0   =* 1000000 + 500000 # мнимый восток (false easting)= floor(lon / 6) + 1    # номер зоны по любому значению долготы на листе, floor - взятие целой части от деления
Nз    = (lon_0 + 3) / 6       # номер зоны по центральному меридиану (частный случай)

Как видно, оба параметра зависят от номер зоны, что бы не заморачиваться, есть ещё один очень простой способ определения её: по номеру листа, вычитая из него 30. Т.е. лист у нас O-50, значит его номер - 50, тогда:

= 50 - 30 = 20

Тогда значения центрального меридиана и мнимого востока:

lon_0 = 20 * 6 - 3 = 117
x_0   = 20 * 1000000 + 500000 = 20500000

Так же, для простоты, можно принять, что мнимый восток это: 500000 перед которым написан номер зоны, как он есть, т.е. как результат объединения двух строк (в программировании):

"20" + "500000" = "20500000"

Переходим ко второму шагу. Тут нужно указать проекцию, в которой вводятся координаты точек привязки:

  • если привязки указаны в географических координатах (долгота и широта, особенно удобно на листах с рамкой - на них у нас имеются 5 точек указанными координатами - грех не воспользоваться), то проекцию можем ввести:<code> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs </code>
    +proj=latlong +ellps=krass +towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12

    и не особо парить мозг. Тогда значения координат точек нужно вводить примерно так:

    N57 20.00 E117 00.00

    не значащие нули опускать не нужно

  • если привязываете по линиям километровой сетки, то копируете проекцию с первого этапа, а значения координат указываете в метрах, примерно так:
    20520000 6356000

    подробнее о привязывании по километровой сетке не расскажу - делал всегда по координатам.

Собственно, на этом всё, осталось нажать кнопку Process.

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

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

// QLandkarteGT: Экспорт всей карты в растр, а не только видимой области

В QLandkarteGT есть удобная вещь - экспорт видимой области карты со всеми отображаемыми точками, треками, измерениями и т.п. в растровый (PNG) файл.

Мне же потребовалось, что бы вся карта как есть была экспортирована. Пришлось полезть в исходники. Прямого пути сделать такое не нашлось, пришлось сделать несколько костыльно (имхо), но работоспособно (ибо нужно срочно - готовить карту к предстоящим соревнованиям).

Патч подкатом.

// Поломанная привязка карт в QLandkarteGT

Сегодня столкнулся с тем, что привязывая карту в QLandkarteGT, получаю такую ошибку:

/usr/bin/gdal_translate -a_srs +proj=merc +a=6378245.0000 +b=6356863.0188 +towgs84=24,-123,-94,-0.02,0.25,0.13,1.1,0 +units=m  +no_defs -gcp 108 182 inf inf -gcp 3310 189 inf inf -gcp 3308 3126 inf inf -gcp 93 3119 inf inf -gcp 1704 1657 inf inf /home/hatred/maps/1/src/K-53-26-view-raw.tiff /tmp/qt_temp.B12852
Input file size is 3402, 3428
0...10...20...30...40...50...60...70...80...90...100 - done.

/usr/bin/gdalwarp -order 1 -r cubic -dstnodata "255" /tmp/qt_temp.B12852 /tmp/qt_temp.u12852

ERROR 1: Attempt to create -2147483648x-2147483648 dataset is illegal,sizes must be larger than zero.
Creating output file that is -2147483648P x -2147483648L.

Неудачно!

Сначала было подумал, что поломано в SVN версии, однако, в релизной 1.2.4 ситуация точно такая же.

Сразу и сходу смутили параметры inf в опции -gcp. Так что решил поглядеть в коде, благо собираю из SVN и он у меня всегда под рукой.

Немного времени, расстановка логов, анализ привели к тому что обнаружилось двойное преобразование координат в функции

bool GPS_Math_Str_To_LongLat(const QString& str, float& lon, float& lat, const QString& srcproj, const QString& tarproj)

в файле GeoMath.cpp

Первое преобразование было в блоке кода:

if(GPS_Math_Str_To_Deg(str, lon, lat,true))
 {
   if(pjTar)
   {
       u = lon * DEG_TO_RAD;
       v = lat * DEG_TO_RAD;
        pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
   }   
 }
 else

а второе преобразование в следующем блоке кода:

if(pjTar && pjSrc)
 {
   pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
 }

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

Сменил первый блок на такой:

if(GPS_Math_Str_To_Deg(str, lon, lat,true))
 {
    u = lon * DEG_TO_RAD;
    v = lat * DEG_TO_RAD;
 }
 else

пересобрал и всё заработало отлично и замечательно.

UPD: а теперь всё то же самое, но в виде патча:

qlandkartegt-map-referencing-fix.diff
Index: src/GeoMath.cpp
===================================================================
--- src/GeoMath.cpp	(revision 3010)
+++ src/GeoMath.cpp	(working copy)
@@ -392,12 +392,8 @@
 
     if(GPS_Math_Str_To_Deg(str, lon, lat,true))
     {
-        if(pjTar)
-        {
-            u = lon * DEG_TO_RAD;
-            v = lat * DEG_TO_RAD;
-            pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
-        }
+        u = lon * DEG_TO_RAD;
+        v = lat * DEG_TO_RAD;
     }
     else
     {

PS автору письмо отправлено

// Готовим растровую карту для навигатора Garmin GPSMap 62s

UPD 2013-11-16: обновил список программ, добавил информацию об автоматической обрезке рамок, добавил информацию о создании многослойного JNX. Убрал текст помеченный как удалённый. За остальными подробностями - в историю изменения страницы. Вики всё же :)

Задача: сделать растровую карту для навигатора Garmin GPSMap 62s.

Инструменты:

  • GDAL 1.8.0. С версии 1.10.0 научился конвертировать привязки OZI Explorer в виде .map + растр (.png, .gif и т.п.) в geotiff, рекоменду обновляться.
  • map2jnx 1.7.8. В последних версиях QLandkarteGT идёт в комплекте + уже с моими патчами для задания различного scale-factor для разных слоёв. Скачёк версии с 0.2.4 до 1.7 (или даже 1.6) случился как раз из-за включения в состав QLandkarteGT.
    • QLandkarteGT задепрекейчена в пользу новой программы от автора - QMapShack
    • Соответственно map2jnx теперь можно разжиться тут
  • QLandKarteGT или QMapShack - нужны для просмотра.
  • NEW: geocrop
  • NEW: ozi2map, опционально, если у вас GDAL младше 1.10.x и есть куча растров привязанных в OZI Explorer (.gif, .png, .jpg и т.д.)

Исходные карты в формате OZFX3 (Ozi Explorer) с готовой привязкой. Если нет привязанных карт, можно почитать тут как это сделать самому. Теперь можно брать любые озиковские привязки (кроме OZFX2 и новых шифрованных OZFX3), но только если у вас версия gdal больше 1.10.0, иначе можно воспользоваться утилитой ozi2map.

// OpenSource #068

А в нем и моя очередная статья «QLandKarte GT как замена OziExplorer в GNU/Linux» (название откорректировано редактором, но не суть). Рассматривается вопрос использования данных, подготовленных для использования в OziExplorer (или созданных ими), коих на просторах интернетов премножество, в среде Linux, на примере QLandKarte GT.

Скачать: http://osa.samag.ru/get/OpenSource068.zip

// Пару заметок о QLandkarteGT

Для начала, вышла версия 0.11.0, сайт программы: http://www.qlandkarte.org/

Что из себя представляет, я уже писал

И несколько заметок:

// Картографические приложения, а так же визуализация

Вообще, на данный момент, краткий обзор одного и ссылки на тему.

QLandkarteGT

Программа для работы с GPS. Позволяет скачивать треки с навигаторов Garmin, скачивать и заливать путевые точки.

Сайт программы: www.qlandkarte.org

Ну что самое главное, и что мне в первую очередь оказалось необходимым - он может привязывать карты! Используется для этих целей библиотека GDAL, которая позволяет создавать, так называемые GeoTiff - TIFF файлы с параметрами привязки. Для преобразования систем координат используется PROJ.

В стандартных репозитариях ArchLinux программы нет. Но есть в AUR. В распоряжении два варианта:

какой выбрать - решать вам. Сборка svn версии у меня прошла без сучка и задоринки. Чего и вам желаю :)

Небольшое замечание по поводу привязок, нужно как минимум 3 точки привязки. Координаты вводятся в виде «N43 20.000 E132 30.000», где N/S - северная/южная широта, E/W - восточная/западная долгота, 43 и 132 - градусы, 20.000 и 30.000 - минуты и тысячные минуты.

Ещё не забыть указать проекцию, для наших карт почти поголовно Пулково 1942. В строке Projection щелкнуть по кнопке с «волшебной палочкой» выбрать

  • Projection: Mercator
  • Datum: Pulkovo_1942

Если где неточности - подправьте.

После привязки карту можно сохранить в формате GeoTiff. Да… перед привязкой карту нужно перегнать в 8-bit цвет или оттенки серого. Форма PNG или TIFF. Я перегонял в серый цвет при помощи ImageMagick:

convert -colorspace Gray in.jpg out.tiff

На сайте программы стоит обратить на раздел MAPS, где объясняется, где брать карты. Если кратко:

«Для работы с программой вам нужны карты. В общем случае вы можете их купить. Свободные цифровые растровые карты редкость. Коммерческие же облагаются жесткими ограничениями и имею закрытые форматы…»

Итак, что предлагают разработчики:

  • отсканировать карту и привязать её - программа позволяет это сделать (уже выше писал)
  • для использования 3D объектов и видов нужны данные о высотах, и ссылка на коллекцию таких данных: http://www.viewfinderpanoramas.org/dem3.html
  • Ага, ещё один источник: карты для OziExplorer. Тут скрипт для их конвертации в GeoTiff: http://sourceforge.net/projects/ozi2geotiff PKGBUILD'а для ArchLinux нету, но у меня пока и потребности конвертировать так же нет :) Как я заметил, архивов для скачивания нет, скрипт есть только в SVN:
    svn co https://ozi2geotiff.svn.sourceforge.net/svnroot/ozi2geotiff ozi2geotiff
  • Одним из источником карт назван проект http://www.openstreetmap.org.

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

  • OpenEV - программа анализа и просмотра растровых и векторных геоданных (фотоснимки, спутниковые снимки и т.п.)
  • mapview - просмотр карт с terraserver
  • GRASS/Qt - интерфейс на Qt для GIS GRASS
  • XRMAP, альтернативный сайт - The Xrmap program provides a user-friendly X client for generating images of the Earth and manipulating the CIA World data bank II global vector information (a huge geodata set of about 45 MB).
  • CVLView - отображение данных, сохраненных в pfs-файлах. PFSTools может быть интегрирована с Octave и Mathlab.