Проект:Графическая мастерская/Картография/Векторная физическая карта

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Программные требования[править код]

Для создания карты потребуется такое ПО:

  • Qgis (ГИС для построения высотных линий)
  • PowerShell (командная оболочка для автоматизации)
  • GMT (ГИС для построения слоев карты)
  • Scribus (Издательское ПО для конвертации файлов)
  • Inkscape (графический редактор)
  • FWTools (набор утилит для конвертации)

Данные, на основе которых строится карта, получают из следующих источников:

  • SRTMv30 (данные высот)
  • Natural Earth (разнообразные линии и данные глубин)

Обучение[править код]

Построение карты складывается из таких действий:

  • обработка данных и построение линий высот;
  • конвертация данных в формат GMT;
  • создание слоев будущей карты;
  • конвертация слоев в SVG;
  • сведение слоев, их раскраска и окончательная обработка.

Получение линий высот[править код]

  1. Загруженные архивы SRTM распакуйте в одну папку.
  2. Запустите Quantum GIS, выберите пункт меню "Слой" – "Добавить растровый слой…". Укажите все файлы DEM, которые содержат область, по которой строится карта.
  3. Программа загрузит данные. Выберите пункт "Растр" – "Обрезка".
  4. В открывшемся окне введите координаты региона. В примере с Мадагаскаром это будут такие x1=42,42, x2=50,97, y1=-26,03, y2=-11,31
  5. Укажите программе файл, куда нужно сохранить данные и отметьте опцию "Добавить к карте по завершении". Нажмите ОК.
  6. Выберите пункт меню "Растр" – "Создать изолинии".
  7. В открывшемся окне выберите слой с вырезанными данными, укажите каталог, куда будут сохранены построенные линии и укажите минимальную разницу высот, которая будет использоваться в вашей карте в поле "расстояние между линиями". Отметьте опции "Поле значений" и "добавить к карте по завершении", нажмите ОК.
  8. Выберите пункт меню "Вектор" – "Управление данными" – "Разбить векторный слой".
  9. Выберите разбиваемый слой, укажите поле значений, которое было задано в предыдущем пункте, укажите каталог выгрузки и нажмите ОК.

После завершения конвертация окончена, получен набор SHP-файлов для дальнейшей обработки.

Конвертация линий в формат GMT[править код]

  1. Отберите те файлы высот, которые будут отображаться на карте. Например, для мадагаскара будут использованы такие высоты: 100, 200, 300, 400, 500, 750, 1000, 1500, 2000, 3000 м. остальные файлы можно удалить.
  2. Скопируйте полученные файлы в отдельную папку. В эту же папку скопируйте загруженные SHP и SHX файлы Natural Earth. Минимальный необходимый набор: данные о реках, озерах, линии побережья и административных границах.
  3. Запустите PowerShell. При первом запуске необходимо разрешить запуск неподписанных скриптов, для этого выполните команду Set-ExecutionPolicy remotesigned на появившийся запрос необходимо ответить "Да".
  4. В консоли выполните следующие команды:
    1. cd 'C:\Program Files (x86)\FWTools2.4.7\bin' (переход в папку, где установлены FWTools);
    2. gci D:\GMT\tmp\* -i *.shp -r|select -exp fullname| % {".\ogr2ogr.exe -f GMT $_.gmt $_"} |Invoke-Expression (D:\GMT\tmp замените на путь к папке, куда были скопированы файлы в пункте 2);

После выполнения команды данные для построения карты готовы.

Построение карты с помощью GMT[править код]

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

$proj='-JQ46.695/-18.67/15c'

$bounds='-Bf10g0/f10g0'

$coords='-R42.42/50.97/-26.03/-11.31'

$heights=gci D:\GMT\madagascar\shp\* -Include *.gmt| select -exp fullname

$heights | % { D:\programs\GMT\bin\psbasemap.exe $proj $coords '-Bf10g0/f10g0' -P -K| out-file -Encoding oem "$_.eps";D:\programs\GMT\bin\psxy.exe $_ $proj $coords -P -m '-W1p,100/100/100' -O | out-file -Append -Encoding oem "$_.eps";write-host $_}

Необходимо произвести такие изменения:

  • задать проекцию карты переменной $proj (в примере проекция равнопромежуточная цилиндрическая (Q) с центром в точке 18.67 ю.ш. 46,695 в.д.);
  • задать обрезку будущей карты переменной $coords (координаты задаются в порядке границ левая/правая/нижняя/верхняя);
  • в переменной $heights необходимо исправить путь к файлам данных, полученным ранее (в примере - D:\GMT\madagascar\shp\);
  • необходимо правильно указать путь к компонентам GMT в последней строке сценария. В примере предполагается, что GMT установлены в папку D:\programs\GMT\.

После модификации сценарий запускается из консоли PowerShell. Работает он довольно длительное время, после завершения у нас есть набор слоев карты для последующего совмещения и раскраски.

Конвертация слоев в SVG[править код]

Полученные файлы необходимо открыть в Scribus и сохранить в SVG. Можно воспользоваться любым ПО, которое способно работать с PostScript и SVG форматами одновременно, Scribus используется в качестве бесплатного примера.

Сведение слоев и обработка карты[править код]

Запустите Inkscape и импортируйте созданные в предыдущем разделе SVG файлы в новый документ, поместив каждый файл в отдельный слой. Если необходимо, выровняйте изображения (это легко сделать, поскольку мы отрисовывали рамку). Также при необходимости измените размер изображения.

Сохраняйтесь как можно чаще и запаситесь всем терпением, на какое способны, редактор не склонен к стабильной и быстрой работе, а файлы, которые будут обрабатываться — очень ресурсоемки.

После компоновки слоев удалите рамки в них, и установите окончательные размеры будущей карты. Скачайте шаблон. Объект интереса в нем — раскраска по высотам. Вырежьте необходимый кусок и поместите его на отдельный слой.

Обработка слоев[править код]

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

Оставьте видимым только один слой, остальные скройте и заблокируйте.

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

Установите цвет заполнения таким, какой на легенде находится рядом с заполняемой высотой.

Я выбрал цвет высот от 100 до 200 и вижу, что он заполнил область внутри линий. В случае, если заполняется область преимущественно снаружи, я бы взял цвет от 0 до 100.

Теперь необходимо правильно распределить заливку. Выделите все объекты в слое и выполните команду меню «Контур» — «Разбить». Повторяйте до тех пор, пока общее количество контуров в слое (показано в строке состояния) не перестанет увеличиваться.

Выполните команду «Контур» — «Исключающее ИЛИ».

Контуры будут пересечены и дважды закрашенные части будут удалены. Важно: эту операцию нужно проводить с каждым слоем, забывать об этом нельзя. Обработка слоя заканчивается, когда в нем остается только один контур.

Переименуйте слой так, чтобы он содержал свои минимальную и максимальную высоты — это поможет ориентироваться в дальнейшем.

Удалите обводку контура.

Обрабатывайте все контуры по описанной схеме по очереди.

В итоге получается подобная картина.

При обработке контуров возможна такая ситуация.

Это означает, что контуры незамкнуты. Нужно их замкнуть. Увеличьте масштаб так, чтобы вам была видна вершина «клина». Включите режим редактирования узлов (F2) и выделите фрагмент, содержащий разрыв.

После этого нажмите кнопку «Соединить выделенные узлы» на панели инструментов. Если контуры разомкнуты на границах изображения, то используйте команду «Соединить новым сегментом».

В случае, когда контур проходит через угол, и угол должен быть закрашен, то нужно делать так.

Выделите края контура и соедините их сегментом.

Двойным щелчком по новому сегменту создайте на нем узел.

Перетащите узел в угол.

Исправьте таким образом все изъяны слоя.

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

После расположения слоев в правильном порядке складывается почти законченная картина.

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