Конспект занятия по рисованию векторных карт

Конспект занятия по рисованию векторных карт

Здесь описывается один из способов нарисовать векторную карту для навигаторов Garmin.

Это не подробное руководство - скорее, минимальный перечень действий, в результате которых получается карта, удобная для использования в горном походе.

При создании карты будут необходимы следующие программы:
GpsMapEdit (и его модификацию от Михаила Сотина, GpsMapEditMA) для работы с векторными данными,
OziExplorer для растровых сканированных карт,
MapBuilder для получения склеенных спутниковых снимков с Google Maps,
cgpsmapper & sendmap для окончательного преобразования карты в формат Garmin и загрузки её в GPS.

GpsMapEdit: http://www.geopainting.com/ru/
GpsMapEditMA: http://michus.h12.ru/files/GPSMapEdit_ma_1030_3_01.rar
Cgpsmapper: http://www.cgpsmapper.com/download2/FreeSetup.exe
Sendmap: http://www.cgpsmapper.com/download/sendmap20.zip

  1. Предварительный этап
  2. Процесс рисования карты определяется тем, какие географические данные нам доступны. Мне известны следующие источники:

    А. Спутниковая карта высот, полученная в результате спутниковой съёмки SRTM,
    Б. Существующие векторные карты низкого разрешения,
    В. Растровые карты и спутниковые снимки.

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

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

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

    Рассмотрим каждый из шагов детальнее.

  3. Создание горизонталей по SRTM .
  4. Вначале примерно определи границы будущей карты, с точностью до градуса. Это можно сделать на глазок, по карте Генерального Штаба.

    Предположим, мы поняли, что наша карта полностью умещается в 35 северной широты и 50 и 51 градусах восточной долготы. Теперь нужно получитиь карту высот для этого диапазона координат с сервера NASA.

    Заходим ftp-клиентом по адресу http://dds.cr.usgs.gov/srtm/version2/

    В папках SRTM1, SRTM3, SRTM30 находятся данные высот. Конкретно, нам нужна папка SRTM3 - в ней данные по всему миру, снятые с разрешением в 3 угловые секунды.

    Данные высоты для каждого градуса хранятся в отдельном файле, с названием, в котором зашифрованы координаты этого градуса. Для нашей карты нужны файлы N35E050.hgt.zip и N35E051.hgt.zip.

    Скачиваем архивы, распаковываем их. В полученных файлах высот существуют выпадения, лакуны - в этих местах из-за переотражений высота была снята неверно, и если использовать файл в таком виде, то в горизонталях будут разрывы. Для замазывания лакун я пользуюсь самодельной программой srtm_interp, которая восстанавливает неизвестные данные, руководствуясь средневзвешенным значением высот окружающих лакуну точек.

    Программа запускается из командной строки и принимает имя файла с исходными данными как параметр. В нашем случае нужно выполнить srtm_interp N35E050.hgt и srtm_interp N35E051.hgt

    (Есть и другой способ получить файлы без дырок - например, на сайте CGIAR по адресу http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp можно поискать более аккуратно отреставрированные высоты)

    Открываем исправленные файлы в программе GpsMapEditMA - эта модификация GpsMapEdit от Михаила Сотина умеет строить изолинии высот. Загруженные высоты отображаются как прямоугольные градиентные картинки, каждый из цветов соответствует какой-то своей высоте.

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

    Начертим область отсечения, внутри которой останутся построенные горизонтали. Для этого щелкаем инструмент "Разрезание карты"

    и выделяем область будущей карты. После построения горизонталей мы два раза будем их отрезать по этой области.

    Построим основные горизонтали. Щелкнуть Инструменты?Выбор Объектов (S), затем, последовательно нажимая правой кнопкой на градиентных прямоугольниках высот, выбираем пункт "Создать изолинии", выбираем "сечение представляет" Major Land Contour (т.е. "основная горизонталь") и промежуток - 200м.

    Щелкаем. Далее, выбираем только Level0 (вообще сейчас только он должен быть доступен).

    Построив горизонтали, выбираем инструмент отсечения и, щелкнув правой кнопкой по определенному ранее прямоугольнику, выбираем "Отрезать снаружи". Сохраняем получившиеся горизонтали в файл (напр., major.mp).

    Теперь выбираем все построенные горизонтали (Ctrl+A) и удаляем их. Аналогично строим промежуточные горизонтали, выбирая при построении тип линии Minor Land Contour и промежуток 40м. Также как и раньше, отрезаем горизонтали и сохраняем файл (minor.mp).

    Разведение горизонталей по уровням детализации будет дальше, в п.7.

  5. Использование данных из векторных карт низкого разрешения
  6. Находим существующую карту. Это может быть недорисованная карта, начатая каким-нибудь энтузиастом, карта автомобильных дорог, трекинговая карта и т.д. Кроме обычного поиска через Google, существует база данных, подыскивающая карты по заданным географическим координатам - gpsmapsearch.com.

    Из найденных карт нужно удалить горизонтали (если они там есть). Загружаем карту в GpsMapEdit, выбираем Edit?Select?By Type, отмечаем типы линий Intermediate Land Contour, Major Land Contour, Minor Land Contour, и, подтвердив выбор, удаляем. Теперь на карте осталось всё, что не является изолиниями. Сохраняем результат в польском формате (.MP).

  7. Отрисовка карты по растровым изображениям
  8. Если всего вышеперечисленного оказалось недостаточно, можно порисовать вручную, пользуясь привязанной в OziExplorer растровой картой. Такая карта состоит из двух файлов - файла с изображением (напр., m-37-090.png) и файла с привязкой (напр., m-37-090.map).

    Если есть только картинка с отсканированной картой, то необходимо её "привязать", т.е. описать в OziExplorer соответствие между картинкой с картой и географическими координатами (как это делать: http://www.sibir.3dn.ru/publ/14-1-0-155).

    Получив привязанную карту, загужаем в GpsMapEdit файл с расширением ".map" - карта становится подложкой, поверх которой можно проводить векторные линии; загруженная карта никак не влияет на векторный результат и используется только как "коза", которую обрисовывают целиком вручную.

    С точки зрения рисовальщика (картографа: ), векторная карта для Garmin состоит из точек, линий и полигонов. Точками представляются все объекты, чей линейный размер нас не интересует - вершины, родники, седловины перевалов и пр.. Линиями представляются дороги, тропки, реки, горизонтали; полигонами - леса, ледники, моря и т.п. объекты с существенной площадью. При отображении карты gps-навигатором (и GpsMapEdit?ом) точки располагаются поверх линий, а линии - поверх полигонов.

    Весь процесс похож на рисование в примитивном векторном графическом редакторе. Например, для рисования реки нажимаешь "В" (режим создания линий), рисуешь линию мышкой, нажимаешь Enter и в появившемся окне выбираешь тип "Река". Название можно оставлять пустым. Таким же образом для ледников нажимаешь "F" - режим создания полигонов - и рисуешь полигон, в конце объявляя его ледником. Порядок не имеет значения.

    Мне кажется, что для рисования карты совершенно необходимо запомнить следующие быстрые клавиши:

    S - режим "выбора", в котором можно двигать векторные объекты и менять их свойства
    D - режим перетягивания, скроллинга карты
    A - создание точечных объектов
    B - создание линий
    F - создание полигонов
    E - включить/выключить отображение "козы"
    T - включить/выключить полупрозрачное отображение полигонов.

    Подробно рисование в GpsMapEdit описано тут: http://freemaps.ru/lessons/less08.html

    Кроме обычных растровых карт (например, Генштабовских) в качестве "козы" можно использовать карты с Google Maps. Существует программа MapBuilder, которая скачивает элементы карты с сервера Google, склеивает их и создает файл привязки (.map). Необходимо помнить, что размер растровой картинки, которая может быть загружена в GpsMapEdit, ограничен размером свободной видеопамяти, поэтому при склеивании фрагментов в MapBuilder?е целесообразно сразу прикидывать размер получающейся карты (он пишется в диалоговом окне подтверждения сохранения).

  9. Сведение в одну карту и компиляция в гарминовский формат
  10. Теперь осталось свести воедино все, что мы отрисовали.

    Начинаем сведение с горизонталей. Загружаем файл с основными горизонталями (проведенными через 200м). Прежде чем добавлять промежуточные, необходимо настроить уровни детализации. Уровни детализации определяют, какие наборы векторных данных будут отображаться при различных масштабах (увеличениях) в навигаторе. Настраиваются уровни во вкладке File?Map Properties?Levels. Здесь показывается на 1 уровень больше, чем доступно для заполнения (последний, виртуальный уровень всегда пустой). При составлении уровней необходимо помнить, что они должны быть расположены по возрастающей, т.е. "MapSource Zoom" и "Gps Zoom" должны увеличиваться при увеличении номера уровня.

    Для наших целей достаточно двух уровней (т.е. во вкладке будет отображаться два плюс один виртуальный). Сейчас на карте один уровень (нулевой). Выбираем в списке виртуальный первый и нажимаем "Insert Before", теперь стал доступен для наполнения уровень 1 (и добавился уровень 2 виртуальный).

    Нажимаем ОК, и выбираем все горизонтали на карте (т.к. сейчас на карте кроме горизонталей ничего нет, достаточно нажать Ctrl+A и выбрать вообще всё). Проверь - горизонтали сейчас должны находиться на 0 м уровне. Для этого зафиксируй нулевой уровень детализации - нажми кнопку "0" (внизу, в строке состояния, отобразится надпись "*Level0"). Сейчас горизонтали видны. Нажми кнопку "1" - переключись на первый уровень детализации - горизонталей не видно.

    Если всё наоборот и горизонтали видны только на Level1, значит, при добавлении нового уровня (нажатии кнопки "Insert Before" в окне Map Properties) забыли выбрать в списке виртуальный первый уровень и новый уровень добавился перед реально существующим нулевым.

    Теперь сделаем так, чтобы эти горизонтали показывались на 1 м уровне увеличения. Нажимаем правой кнопкой по выбранным горизонталям и в появившемся меню выбираем Modify?Extend all elements up to level... и вводим 1.

    Добавим промежуточные изолинии. File?Add и выбираем файл с промежуточными. В результате этих манипуляций на Zoom Level 1 находятся только основные горизонтали, а на Zoom Level 0 - основные и более детальные.

    Таким же образом, чезер File?Add добавляем остальное наполнение, которое мы предположительно получили из карт низкого разрешения, отрисовали по генштабовке и по GoogleMaps.

    Теперь проводим генерализацю - удаление избыточных, не отображаемых в масштабе, точек полигонов и линий. "Tools?Generalize?Nodes of All Polylines & Polygons."

    Есть ещё два чисто технических шага, которые нужно выполнить для корректного отображения карты в навигаторе: нарисовать большой полигон с типом "Map coverage area (0x4b)", охватывающий всю карту, и прописать в свойствах карты ID (File?Map Properties?Header?ID), наугад, например, 11000204.

    Результирующий большой файл сохраняем в польском формате (.MP), а затем передаем его компилятору гарминовских карт, выбрав "File?Export?Garmin.IMG /cgpsmapper.exe". После компиляции получаем файл с разрешением.img, который уже можно загружать в gps-навигатор.

Коментарі

а. это сайт с интерполированными SRTM, без дырок. только у меня ни разу не вышло там что-то скачать (пробовал пару месяцев назад, и щас ещё раз проверил)

мне бы и в голову такое не пришло. там действительно почищенные файлы с высотами

Підписатися на Коментарі для "Конспект занятия по рисованию векторных карт"