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

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



// Garmin GPSMAP 64s

Обновочка. Продал свой GPSMAP 62s, как более неподдерживаемый. Плюс хотелось GLONASS. Зачем только не совсем понимаю :)

Отличия пока только визуальные: 62s мне достался практически сразу после выхода, и у него была детская болячка - скрипел корпус. 64s появился в 2014 году и корпус более крепкий. А вот резиновая заглушка для USB и антены на новом навигаторе доверия не внушает. Ещё более тактильная отдача на кнопках при нажатии.

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

Заявлено более короткий срок жизни от батареи. Минимальное время включения подсветки экрана увеличено с 5 сек до 15.

В этой модели можно заряжать аккумуляторы от USB. С одним «но»: внутри батарейного отсека появилась кнопка, что бы зарядка началась, нужно, что бы она была нажата. Автоматически это может сделать фирменный пак аккумуляторов, которые «сшит» общей рубашкой. Эта рубашка и зажимает кнопку. Типа, что бы беспечный пользователь не начал заряжать щелочные батарейки.

К сожалению, погонять чисто GLONASS на приборе не получится, доступные режимы: GPS, GPS+GLONASS. Чисто GLONASS - нет. А очень бы хотелось.

Теперь по ценам… Не покупайте у наших барыг! Типичная цена на навигатор в России - 25000 руб. Плюс минус. Самая маленькая найденная - около 20к руб. Добавьте судя стоимость доставки - от 500 до 1500 руб. (особенно, если хочется быстрее получить). А вот покупка и доставка с Амазона (я выбрал дорогую доставку UPS за 37$) вышла примерно в 15800 руб. (получил в руки за 1.5 недели). Что даже дешевле покупки мною предыдущего навигатора 62s - он мне обошёлся в 15900 руб., а ведь происходило это существенно раньше и по совсем другому курсу доллара. Так-то. Продавец: https://www.amazon.com/gp/product/B00HWL9AS8/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1. Карту памяти купил уже тут, отдал за 32Гб около 1000 руб.

// Garmin GPSMAP 62s/64s: обновления

Это просто мемориз, а то задолбался каждый раз искать где и как брать свежий фирмварь и патчер для JNX.

  1. Прошивка:
  2. Патчер:

Инструкция по обновлению (подсматривается на официальной странице прошивки нажав Ctrl-U :-)):

NOTE FOR USERS WANTING TO DOWNLOAD SOFTWARE ON ONE COMPUTER AND THEN INSTALL IT TO THEIR
DEVICE USING A DIFFERENT COMPUTER:

1) To download the region file used by WebUpdater, copy and paste this link into your browser
   on computer #1:

   http://download.garmin.com/software/GPSMAP62_78_WebUpdater__630.gcd

2) Bring GPSMAP62_78_WebUpdater__630.gcd to computer #2 where your device is attached.

3a) Then you can drag-and-drop GPSMAP62_78_WebUpdater__630.gcd onto the WebUpdater icon on your desktop.

3b) Or you can invoke WebUpdater at the command line, passing in the region file as a parameter:

   C:\>WebUpdater.exe c:\path\to\GPSMAP62_78_WebUpdater__630.gcd

Что они нормальным путём этого не предлагают мне не понятно.

Инструкция тоже не полная. Нужно:

  1. Скачать файл прошивки
  2. Переименовать его в GUPDATE.GCD
  3. Закачать на флешку в папочку Garmin
  4. Перезагрузите навигатор, прошивка начнётся сама.

// GeoCrop 1.0

Я подумал и решил, что функционала и стабильности достаточно для релиза версии 1.0.

Так что да будет так: https://github.com/h4tr3d/geocrop/releases/tag/v1.0

// GeoCrop и популярные привязки

Если у вас на входе привязанный GeoTIFF, то проблем нет никаких, но если у вас просто растр (.png, .jpeg, .gif) и привязка для него, то есть нюансы. Вообще, GeoCrop умеет работать с любыми данными, с которыми умеет общаться GDAL. Но в в некоторых случаях не всё получается гладко, так, например, только сегодня он научился читать файл проекции для world-привязок (пара .prj+.pgw).

На просторах интернета можно встретить различные описания привязок, самые популярные:

  • Ozi Explorer
  • World files8)
  • Global Mapper

рассмотрим более подробно.

Ozi Explorer

GDAL не умеет только шифрованные OZFX, а так привязанная карта представляет собой пару .map+растр, где растр - это, обычно, .gif, .jpg или .png, реже - .bmp. При наличии такой привязки geocrop можно вызвать без дополнительных приготовлений:

geocrop -f VRT -s 50k K-53-026-A.map K-53-026-A.vrt

Обратите внимание, что передаётся map файл, а не растр.

World files

Т.к. сама привязка состоит из двух файлов (.prj+.pgw), то не так просто сказать, что и откуда читать. Согласно документации .pgw, .pngw или .wld файл9) подтягивается автоматически, если на входе карта в PNG (про другие форматы - ниже), а вот .prj файл нужно читать самому. Для этого в последней версии GeoCrop сделана небольшая эвристика:

  • Если растр содержит пустую проекцию, то производится попытка прочитать проекцию (формат WKT или PROJ.4) из файла с таким же именем, но расширением .prj и .prf.
  • Либо файл проекции можно жестко задать при помощи новой опции -p srs_def

Т.е. при наличии привязки в виде world files GeoCrop так же можно вызвать без дополнительных приготовлений так:

geocrop -f VRT -s 50k K-53-026-A.png K-53-026-A.vrt

если файл проекции находится в K-53-026-A.prj или K-53-026-A.prf, или так:

geocrop -f VRT -s 50k -p K-53-026-A.wkt K-53-026-A.png K-53-026-A.vrt

Обратите внимание, что в обоих случаях в качестве входного источника передаётся сам растр, а не его привязка.

Если у вас растры отличные от PNG:

  • BMP - привязка ищется в .bpw, .bmpw или .wld.
  • GIF - привязка ищется в .gfw, .gifw или .wld.
  • TIFF - если это GeoTIFF со встроенной привязкой, то она и используется, если это просто растр, то привязка ищется в .tfw, .tifw/.tiffw или .wld, а так же в MapInfo .tab файле.
  • JPEG - привязка ищется в .jgw, .jpgw/.jpegw или .wld, а так же MapInfo .tab файле.

Полный и актуальный список всегда можно посмотреть тут: http://www.gdal.org/formats_list.html

Global Mapper

В данный момент GDAL не поддерживает данный формат, а значит не поддерживает и GeoCrop. Ищите способ как сконвертировать его во что-то удобочитаемое.

Вообще .gmw файлы достаточно простые для разбора, так что, возможно, появится у меня и их поддержка. Тем более, что для тех же карт GGC там сразу зашита информация об обрезке (только странно, что они сразу не сделали рамку прозрачной).

// Новый режим в GeoCrop

Теперь в GeoCrop появился новый режим: генерация полигона для обрезки рамки в формате CSV+WKT. Вывод на stdout, так что можно сохранить в любой удобный файл из скрипта, после чего использовать как аргумент для -cutline у gdalwarp в какой-то более сложной команде. Вызова gdalwarp при этом не происходит.

Активируется режим опцией -g (от [g]enerate). Указывать выходной файл при этом не нужно - он будет проигнорирован.

Так же, теперь появилась возможность указывать файл с описанием проекции: -p srs_file. Сама проекция должна быть в формате WKT или PROJ.4. Эта опция перезаписывает определение проекции в текущем файле. Полезна для преобразования файлов с привязками в виде world-файлов. Более того, если проекция в файле пустая, а опция не указана то произведётся попытка прочитать её автоматически из файла с таким же именем, но с расширением .prj или .prf (какой первый попадётся). Так что популярные карты ГГЦ с такими привязками теперь можно конвертировать так же просто, как и с привязками Ozi Explorer.

Чуть раньше реализована функциональность по передаче дополнительных параметров gdalwarp. Для этого нужно завершить опции приложения двойным минусом , опции после него будут переданы gdalwarp как есть без изменений:

geocrop -f VRT -s 200k K-53-07.map K-53-07.vrt -- -overwrite

опция -overwrite будет передана gdalwarp. Помимо этого, теперь можно переопределить и сам исполняемый файл gdalwarp - опция -w GDALWARP.

Кроме того изменился формат опций, стало возможным указывать выходной формат (опция -f FMT, как следствие, образовались такие возможности: Быстро и ненавязчиво готовим карту для открытия в QMapShack) или только обрезать рамку, не делая кроп (опция -n).

// Быстро и ненавязчиво готовим карту для открытия в QMapShack

Для примера будет рассмотрен сервис http://loadmap.net, который предоставляет карты с привязками в формате OziExplorer.

Минусом подобных карт бывает то, что у них есть рамка и отдельные листы карт перекрывают друг друга при открытии. Для того, что бы рамку резать я уже написал ранее10) про свою программку geocrop.

Теперь про самый смак: QMS умеет открывать .vrt файлы. VRT файл это XML документ, с описанием привязки и различных преобразований, понятные движку GDAL. Так вот, в ходе беглого исследования оказалось, что мой способ резки рамки применим к VRT файлам: данное преобразование просто сохраняется внутри и применяется при открытии! Если добавить сюда тот факт, что переконвертации самого растра не происходит и просто формируется дополнительный маленький XML файл, то счастье становится полным.

Рассматривать вопрос сборки программы я подробно не буду, скажу только, что нужны dev пакеты для libgdal и libproj4. Устанавливать программу не нужно - просто скопируйте в удобное место, у меня это ~/bin. Сборка и работа на Windows не проверялась.

Вот, преамбула завершилась… Основная часть будет короче :)

  1. Скачиваем растровый файл карты, допустим это 500-метровка K-53-027-A, тогда файл будет K-53-027-A.png
  2. Скачиваем файл привязки K-53-027-A.map
  3. Обрезаем рамку и формируем VRT:
    ~/bin/geocrop -s 50k -f VRT K-53-027-A.map K-53-027-A.vrt

    Обратите внимание на параметр -s - он задаёт масштаб листа в виде делителя, т.е. опущена 1:, а буква обозначает степень десятки на которое нужно домножить: 50k (кило) = 50 * 10^3 = 50000 и масштаб тогда 1:50000, т.е. пятисотметровка.

10) ozi2map от туда более не актуальна

// QMapShack

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

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

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

  • Открытие серии файлов с геоданными, переданных, как аргументы приложения. Это не относится с картам (?) - они берутся только из директорий, которые вы настроили в программе (аналогично произвольная карта не может быть открыта через File → Open Map, такого пункта просто нет).
  • Поддерживаются ВСЕ форматы карт, которые поддерживаются GDAL (!). Но делается это не напрямую, а через формирование .vrt файла. Сей унифицированный способ отменил отдельное открытие GeoTIFF - теперь нужно и для него формировать vrt-файл. К счастью теперь это делается через внутренний инструмент vrtbuilder и позволяет в большинстве случаев обойтись без утомительной конвертации в GeoTIFF, например привязок OziExplorer12)13). Вообще список теперь достаточно вменяемый:
    • Векторые карты:
      • .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. Потребность сомнительная, но пару раз пригождалась.

Ну и ссылки:

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

// Где брать карты?

Карты ресурса «Поехали» канули в лету, хоть они и не блистали своим качеством. Теперь их можно найти на различных торрентах в сбониках и т.д. Данная заметка, что бы после было можно оперативно найти себе карту (привязать, кропнуть, склеить, сделать jnx :-)) для похода.

Старые генштабовки

  • можно найти тут: http://www.afanas.ru/mapbase/ но нет карт мелких масштабов (иногда хочется иметь, в качестве обзорной)
  • или у Власенко: http://maps.vlasenko.net/ - оооочень хорошая подборка карт
  • подробка самых лучших километровок Приморского края, почему-то нет ни в одном из вышеперечисленных наборов (торрент): http://rutracker.org/forum/viewtopic.php?t=1850504 (есть ещё дополнительная информация из серии «Это интересно знать», типа документов о переименовании географических объектов)

Карты Госгисцентра

Которые утекли на просторы интернета, скачиваются на торрентах с http://rutracker.org, поиск по слову «ggc». Отдельно стоит отметить то, что к ним есть привязки (там же на торрентах) в трёх форматах:

  1. OZI Explorer
  2. Global Mapper
  3. World

Последние представляют из себя пару файлов с расширениями .prj (описание проекции в тестовом формате WKT (Well-Known Text)) и .pgw (файл с 6 строчками с цифрами - сам Wold файл) и могут быть использованы gdal_translate для получения привязанного GeoTIFF (об этом я вскользь уже упоминал: Проблема с gdal: система координат LOCAL_CS вместо PROJCS [SOLVED])

Полный набор можно скачать с раздачи на nnm-club: http://nnm-club.ru/forum/viewtopic.php?t=403156 только раздача очень жирная, на моём нетбуке открыть её не получилось :)

Наличие самих карт можно смотреть на официальном неофициальном сайте: http://maps.ggc.ru http://loadmap.net (старый генштаб тут же).

DEM рельеф

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

SRTM данные, в формате, поддерживаемом gdal можно скачать тут (официальный сайт): http://dds.cr.usgs.gov/srtm/version2_1/SRTM3

Файлы там имеют структуру: NddEddd.hgt.zip, где N - северная широта (S - для южной), dd - градусы широты, E - восточная долгота (W - для западной), ddd - градусы долготы. Сайм файл рельефа покрывает площать 1×1 градус. Датум у этих файлов WGS84, для использования с генштабовскими картами, нужно будет преобразовать систему координат с помощью gdalwarp (на выхода правда получится уже не hgt, а GeoTIFF - но почти все программы такой вариант представления высоты тоже понимают)

Этими же файлами можно разжиться в двух раздачать на торрентах:

Для широт севернее 60 градусов северной широты можно данные можно взять тут: http://www.viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm

Векторные карты

Для начала, для навигаторов Garmin, а вообще не раздел, а один сплошной TODO, т.е. все рекомендации приветствуются.

  • Приморский край, «Приморский край ТОПО»: http://dvmaps.narod.ru/pkmap.htm
  • Камчатка, домашние вулканы (сам был в том походе, для которого она делалась и по результатам которого обновлялась): http://dvmaps.narod.ru/HomeVulc-map.htm
  • И вообще карты: http://dvmaps.narod.ru/download.htm, кроме вышеперечисленных, качество которых я лично могу подтвердить, на момент написания данного поста имеется:
    • Алтай, Катнуский хребет, г.Белуха 1:50000, карта для GPS Garmin
    • Карта Северного прибайкалья (г.Черского, оз.Фролиха) масштаб 1:50000 для GPS Garmin.
    • L-54-11 Южно-Сахалинск, подробная карта СТК «Горный Воздух», 1:100000, для GPS Garmin
    • Баджал, улунский цирк, M-53-053, 1:100000, карта для GPS Garmin
    • O-56-014 Магадан, 1:100000, карта для GPS Garmin
    • Заилийский Алатай, сырая незаконченная карта для GPS Garmin
    • хребет Баджал, 1:100000, незаконченная карта для GPS Garmin
    • Ергаки, 1:30000, карта для GPS Garmin
    • Мунку-Сардык, 1:30000, карта для GPS Garmin
    • Борус, 1:50000, карта для GPS Garmin
    • Мана, 1:50000, карта для GPS Garmin
    • Тункинские гольцы, 1:50000, карта для GPS Garmin
  • Туристические карты для GPS-навигаторов, не густо, но вроде как принимают заявки на изготовление.

// Две утилиты для работы с картами: ozi2map и geocrop

На выходных готовил растровую карту для похода на Кодар, с последующей конвертацией оной в JNX.

Самые неинтересные и скучные моменты в этом деле была обрезка рамки. А кроме того, печаль, по причине того, что есть карты с привязками OZI, но нет нормального конвертера для них.

В результате, подумал и написал за выходные две программы: ozi2map и geocrop

ozi2map

Данная утилита более не актуальна. Версия GDAL (>=1.10), входящая во все популярные дистрибутивы, уже умеет сама обрабатывать такие MAP файлы.

Первая, как можно понять из названия, предназначена для конвертации карты с привязкой OZI (сама карта в JPEG или GIF или другом распространённом растровом формате, который поддерживает OZI, но не OZFX/OZFX2/OZFX3, для них преобразования можно сделать средствами самого gdal (в прошлых статьях писал про это)).

Для чтения точек привязки и параметров проекции используется функция из недр GDAL: GDALReadOziMapFile(…), что, в отличии от питоновского ozi2geotiff.py, даёт корректные параметры проекции. Далее, не стал особо заморачиваться и подсовывая нужные параметры gdal_translate/gdalwarp вызываю их через system().

Я вообще не стал лезть в разбор map файла, поэтому файла растра автоматически не определяется и его нужно указывать самому:

./ozi2map O-50-103.map O-50-103.jpg
./ozi2map O-50-103.map O-50-103.jpg O-50-103.tif

Если имя выходного файла не задано, имя будет сформировано из имени растра с заменой расширения на .tif.

Всё, пользоваться программой должно быть проще простого. Найти исходники (GPLv2) можно тут:
https://git.gitorious.org/h4tr3d-utils/ozi2map.git

Собирать просто:

make

Полученный бинарник можно запускать от куда угодно.

geocrop

Вторая программа предназначена для автоматической (хотя лукавлю: полуавтоматической) обрезки рамки на номенклатурном листе. Принцип действия прост: определённому набору координат соответствует какой-то стандартный лист заданного масштаба (его как раз и нужно указывать). Стандартный лист обрамлён вполне конкретными координатами, по которым вполне можно осуществить обрезку без вмешательства человека.

Т.е. по сути, программе на вход нужен только масштаб листа (в виде 1M, 500k, 200k, 100k, 50k, 25k, 10k, 5k, 2k) и сам лист карты в формате, поддерживаемом GDAL с корректной привязкой.

Когда расчёты по привязке будут выполнены, вызывается gdalwarp через system(). Полигон для обрезки формируется в координатах листа (не в точках растра), для всех листов, кроме 1M, это 4х угольник (на будущее будет более качественно сделано, но и текущего результата хватит в 99.99% случаев).

Пользоваться программой не сложнее чем ozi2map:

./geocrop -s 100k O-50-103.tif O-50-103-crop.tif

Первым аргументом - стилизованное обозначение масштаба:

  • 1M - 1:1 000 000 (это масштаб используется, если мнемоника не распознана)
  • 500k - 1:500 000 («пятикилометровка»)
  • 200k - 1:200 000 («двухкилометровка»)
  • 100k - 1:100 000 («километровка»)
  • 50k - 1:50 000 («полукилометровка» или «пятисотметровка»)
  • 25k - 1:25 000 («двухсотпятидесятиметровка»)
  • 10k - 1:10 000 («стометровка», пока не реализовано)
  • 5k - 1:5000 («пятидесятиметровка», пока не реализовано)
  • 2k - 2:2000 («двадцатиметровка», пока не реализовано)

Если этот параметр пропущен, используется масштаб 100k.

Вторым аргрументом - входной файл, поддерживаемый GDAL.

Третий аргумент - выходной, кропнутый файл. По умолчанию - GeoTiff, но можно переопределить опцией «-f FORMAT», где FORMAT - любой поддерживаемый GDAL.

Если хотите обрезанные карты потом склеивать при помощи gdal_merge.py, и получить вразумительные результат, входной файл должен быть в цветовой палитре RGB, узнать это можно при помощи утилиты gdalinfo, если в выводе есть такое:

Band 1 Block=4096x1 Type=Byte, ColorInterp=Red
Band 2 Block=4096x1 Type=Byte, ColorInterp=Green
Band 3 Block=4096x1 Type=Byte, ColorInterp=Blue

значит всё хорошо, если нет (выводится палитра из 255 цветов), то палитра индексированная, нужно преобразовать в RGB при помощи утилиты pct2rgb.py из комплекта GDAL.

Собирать просто:

mkdir build
cd build
cmake ..
make

Если на стадии cmake будут какие-то проблемы, стоит поставить dev-пакеты для GDAL и PROJ.4

Исходники можно взять тут (GPLv2):
https://github.com/h4tr3d/geocrop

// Проблема с gdal: система координат LOCAL_CS вместо PROJCS [SOLVED]

Суть проблемы: при отработке утилит вроде ozi2geotiff получался geotiff который потом не читался в том же QLandkarteGT и утилитами самого gdal (типа того же gdalwarp). Самое печальное, что это коснулось и файлов привязок для карт с росгисцентра (в формате .pgw + .prj (первый - привязка в формате ESRI World file, второй - описание проекции в формате WKT14)), картами и привязками можно разжиться тут или на http://rutracker.org поиском по слову ggc).

Печально потому, что если положить рядом файл карты в .png, файл привязки .pgw и описание проекции .prj (имя файла без расширения при этом должно быть одинаковым), то получить geotiff становится проще простого:

gdal_translate -of GTiff -a_srs O-50-103-D.prj O-50-103-D.png O-50-103-D.tiff

Файл .pgw подхватывается автоматически, дополнительно его указывать не нужно (об этом же говорится в официальной документации про поддержку PNG: http://www.gdal.org/frmt_various.html).

В печали я написал в список рассылки разработчиков gdal, к утру получил ответ от Frank Warmerdam, с уведомлнем, что он попытался на последне версии gdal и проблемы не наблюдает. Попытался собрать и тоже проблема самоустранилась, при этом, gdalinfo выдал корректную информацию для файлов сгенерированных старым gdal_translate, эти же карты после обновления открылись и в QLandkarteGT. Так что, у кого стоит gdal 1.9.0, нужно срочно обновляться (вроде как проблемы нет уже в 1.9.1, но не проверял)

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

14) Well Known Text

// Привязка генштабовских карт в 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.