/qgis-xtopo

Topographic rendering style for QGIS and data preparation scripts

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

QGIS-xtopo v0.3

GitHub Logo

Topographic rendering style for QGIS and data preparation scripts

QGIS-xtopo это набор инструментов, предназначенных для создания карт, пригодных для печати. Цель проекта не в автоматическом создании готовых карт, а в попытке максимально упростить этот процесс.

Примеры:

  • Крым: 1, 2, 3
  • Кавказ: 1, 2, 3
  • Камчатка: 1
  • Владимирская область: 1, 2
  • Урал: 1, 2, 3, 4
  • Италия: 1, 2
  • Пуэрто-Рико: 1, 2

Системные требования

Сильно зависят от объёма загружаемых данных. Для области размером 20х20 км в среднем будет достаточно ПК, удовлетворяющего минимальным требованиям.

  • Минимальные

    • Процессор: Intel Core-i5 / AMD Ryzen 5
    • Оперативная память: 8 Гб
    • Свободное место на диске: 5 Гб
  • Рекомендуемые

    • Процессор: Intel Core-i7 / AMD Ryzen 7
    • Оперативная память: 16+ Гб
    • Свободное место на диске: 20+ Гб
  • Windows 10 x64 версия 1903 или более поздняя со сборкой 18362 или более поздней версии, или Linux x64 любой (в теории) версии, где запустится docker.

Структура проекта

Проект состоит из трёх частей:

  1. Проект QGIS с топографическим картостилем.
  2. Скрипты для подготовки данных для проекта QGIS на основе OpenStreetMap и данных рельефа, локальный Overpass API сервер.
  3. Графический интерфейс

Всё необходимое для работы находится в контейнере Docker, размещённом на DockerHub. В нём запускаются скрипты для подготовки данных. Также возможно запустить QGIS прямо из контейнера. Скрипты получают данные OSM через Overpass API.

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации

QGIS — свободная кроссплатформенная геоинформационная система (ГИС)

OpenStreetMap (OSM) — некоммерческий веб-картографический проект по созданию силами сообщества участников — пользователей Интернета подробной свободной и бесплатной географической карты мира

Overpass API — доступный только для чтения API, который позволяет извлекать выборочные данные из базы OSM по пользовательскому запросу

Содержание

  1. Установка

  2. Работа с графическим интерфейсом

  3. Инициализация

  4. Подготовка данных

  5. Настройка

  6. Получение и обработка данных OSM, обработка рельефа

  7. Запуск QGIS

  8. Работа с QGIS

    1.Настройка внешнего вида карты

    2.Подготовка к печати

  9. Удаление QGIS-xtopo

  10. Известные проблемы

0. Установка

Windows:

  1. Установить docker

    Если после перезагрузки появится окно "WSL 2 installation is incomplete" то, не закрывая его, перейдите по ссылке в сообщении. В разделе "Скачивание пакета обновления ядра Linux" скачайте и установите файл по ссылке "Скачайте последнюю версию пакета обновления ядра Linux в WSL 2". После этого в окне "WSL 2 installation is incomplete" нажмите Restart либо перезагрузите компьютер. После запуска убедитесь что docker работает:

    • В области системных уведомлений слева от часов найдите скрытый (над стрелочкой) значок с белым корабликом, откройте окно менеджера docker и убедитесь что слева внизу окна есть надпись с зелёным кругом: "Docker running". Если круг красный то попробуйте перезагрузиться. Если не помогло то возможно требуется переустановить docker либо доустановить компоненты WSL 2.

    docker tray docker status

  2. Установить VcXsrv X Server (Next -> Install -> Close) для запуска QGIS (проще говоря графического интерфейса для подготовки карты) из docker контейнера.

  3. Скачать графический интерфейс для подготовки данных: qgis-xtopo-gui.exe. Как таковой установки программа не требует. Её нужно просто запустить.

Linux:

  1. Установить docker

    Нужно настроить запуск docker из под обычного пользователя: инструкция. Все дальнейшие действия не требуют прав суперпользователя (root).

  2. Скачать графический интерфейс для подготовки данных: qgis-xtopo-gui. Установки не требует. Нужно просто запустить.

    или (для работы из командной строки)

    docker pull xmd5a2/qgis-xtopo:latest&&mkdir -p qgis-xtopo&&a=(run prepare_data populate_db exec_qgis clean)&&rm -f qgis-xtopo/*.*&&for f in "${a[@]}";do wget -nv -nc https://github.com/xmd5a2/qgis-xtopo/raw/master/docker_${f}.sh -P ./qgis-xtopo;done&&cd qgis-xtopo&&chmod +x *.sh
    

    В текущем каталоге будет создан каталог qgis-xtopo, откуда необходимо запускать все последующие скрипты, либо использовать команды прямого запуска docker (приведены в справке как альтернативный вариант). Этот шаг нужен только для удобства запуска. Его можно пропустить если вы хотите запускать docker из командной строки. Требуется wget.

1. Работа с графическим интерфейсом

gui screenshot

Принцип работы с графическим интерфейсом прост: указываете требуемые параметры и нажимаете кнопку Запустить всё. Практически каждый элемент интерфейса содержит всплывающую подсказку. Самое главное, что нужно указать:

Использование графического интерфейса покрывает разделы 2 - 6 настоящего руководства. По сути это надстройка для упрощения использования утилит в командной строке. Всё, что можно сделать в графическом интерфейсе, можно сделать и в ней.

Интерфейс имеет два режима работы: упрощенный (по умолчанию) и расширенный. Режим переключается галочкой в верхней правой части окна.

Кнопка Запустить всё запускает все шаги для получения результата последовательно, но их можно запустить и по отдельности: кнопки Заполнить БД, Подготовить данные, Открыть QGIS.

Если вы используете графический интерфейс, то шаги 2 - 6 настоящего руководства скорее всего вам не понадобятся. После того как откроется QGIS вы можете переходить к шагу 7.

2. Инициализация

В разделах 2 - 6 указаны команды для Linux! В Windows будут работать только команды прямого запуска docker, а не скрипты .sh.

Для инициализации QGIS-xtopo необходимы:

  • Каталог, в котором будут храниться данные проекта. Его размер может достигать 10-20 Гб и более, в зависимости от размера обрабатываемой области, поэтому убедитесь что на устройстве достаточно свободного места.

  • (опционально) Каталог, в котором хранятся исходные данные рельефа (полный набор для всего мира). Если у вас уже скачаны эти данные, то путь к этому каталогу необходимо указать при инициализации через docker_run ниже. Путь не должен содержать пробелов! Не уверены - пропускайте.

    Запустите скрипт docker_run в каталоге qgis-xtopo, скачанном на шаге 0.2, с параметрами. Их имена (-n, -d и т.п.) и значения разделяются пробелами. Нужно указать минимум 1 параметр: путь_к_каталогу_с_проектами.

    Пример:

    ./docker_run.sh -d ~/qgis_projects -b "https://www.openstreetmap.org/#map=15/-8.9/-140.1" -o external -g -s -x
    

    Эта команда создаст в домашнем каталоге пользователя каталог проектов с именем qgis_projects, а внутри него каталог проекта automap (значение по умолчанию). Скопирует в каталог с проектами файл config.ini и прочие служебные файлы, задаст в config.ini область охвата из ссылки с сайта OpenStreetMap, а также автоматическую загрузку рельефа и данных OSM с внешнего Overpass сервера. Подготовка данных будет запущена автоматически. После её завершения будет запущен QGIS, который откроет полученный проект.

    • -d [путь_к_каталогу_с_проектами]

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

    • -n [имя_проекта]

      Имя проекта. По умолчанию automap.

    Поддерживаются необязательные параметры (их можно задать позже):

    • -b [lon_min,lat_min,lon_max,lat_max | "https://www.openstreetmap.org/#map={z}/{x}/{y}"]

      Границы зоны охвата (bbox): здесь вы можете указать зону охвата в географических координатах, а также можно подставить в значение этого параметра ссылку с OpenStreetMap. Важно: ссылка должна быть заключена в двойные кавычки! Использование ссылки в качестве границы зоны охвата даёт приблизительные границы. Советы по формированию строки с помощью географических координат находятся в разделе 4.

    • -o [external | docker]

      Задаёт тип сервера Overpass.

      • external: если вы хотите использовать внешний Overpass сервер, то добавьте в конец команды параметр -o external. Преимущества и недостатки такого использования рассмотрены в разделе 3. Будет задана опция config.ini overpass_instance=external и использован сервер Kumi Systems.
      • docker: сервер Overpass внутри docker (значение по умолчанию)
    • -x

      Процесс подготовки данных для проекта состоит из нескольких шагов (инициализация, подготовка данных, получение и обработка данных OSM, обработка рельефа, запуск QGIS, открытие проекта). Параметр -x запускает эти шаги друг за другом автоматически. Если вы не задали опцию -o external то по умолчанию будет использоваться значение -o docker, то есть сервер Overpass внутри docker. Скрипт остановится перед получением данных из OSM и попросит вас выполнить пункты из раздела 3: 3.1.i (скачать экстракт данных OSM), 3.1.ii (поместить полученные файлы в каталог путь_к_каталогу_с_проектами/имя_проекта/osm_data/) (Please download OSM extract from https://protomaps.com/extracts or http://download.geofabrik.de and place it into osm_data_dir). Выполните запрос и нажмите любую клавишу для продолжения. Если всё пройдёт успешно то откроется QGIS с вашим проектом, запущенный из docker.

    • -g

      Обработка рельефа. Если не указано то рельеф обрабатываться не будет. Будет задана опция config.ini generate_terrain=true.

    • -s

      Автоматически загрузить данные рельефа SRTM 30m. В целом эти данные не являются самыми лучшими из доступных (особенно в лесистых районах), но подходят для большинства областей мира. Если результат вас не устраивает то вы можете использовать другие данные, что описано в разделе 3.2. Будут задана опция config.ini download_terrain_tiles=true.

    • -t [путь_к_каталогу_с_данными_рельефа]

      Если вы собираетесь использовать уже загруженный самостоятельно полный набор данных рельефа, то нужно добавить в конец команды строку -t путь_к_каталогу_с_данными_рельефа

    Непосредственный запуск docker

    Альтернативный вариант запуска. Не требуется выполнять если вы выполнили команду docker_run. Подставьте переменные описанные выше в следующую команду. Если вы не используете путь_к_каталогу_с_данными_рельефа то уберите из следующей команды строчку --mount type=bind,source=**путь_к_каталогу_с_данными_рельефа**,target=/mnt/terrain \.

    docker run -dti --rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -e LANG=ru_R.UTF-8 \
     --name qgis-xtopo \
     -e PROJECT_NAME_EXT=**имя_проекта** \
     -e BBOX_STR=**границы зоны охвата** \
     -e OVERPASS_INSTANCE=**overpass_сервер[external | docker]** \
     -e GENERATE_TERRAIN=**обрабатывать рельеф[true | false]** \
     -e DOWNLOAD_TERRAIN_DATA=**загрузить_данные_рельефа[true | false]** \
     -e RUN_CHAIN=**запустить_все_шаги_подготовки_данных[true | false]** \
     --mount type=bind,source=**путь_к_каталогу_с_проектами**,target=/mnt/qgis_projects \
     --mount type=bind,source=**путь_к_каталогу_с_данными_рельефа**,target=/mnt/terrain \
     xmd5a2/qgis-xtopo:latest
    docker exec -it --user user qgis-xtopo /app/init_docker.sh
    

Скрипт создаст в каталоге с проектами каталог с указанным именем. В каталог c вашими проектами будет скопирован каталог icons, содержащий иконки для проекта QGIS. В подкаталог с именем вашего проекта будет скопирован проект QGIS. docker_run не перезаписывает уже существующие данные, поэтому можно не опасаться что запуск команды что-то удалит. Поэтому если вы хотите восстановить данные проекта по умолчанию, то удалите их и выполните инструкции в разделе 2 снова.

3. Подготовка данных

Поддерживается два основных варианта получения данных от сервера Overpass:

  1. С помощью сервера внутри docker контейнера (рекомендуемый способ)
  2. С помощью внешнего сервера

Работа с Overpass сервером, установленным внутри docker, является самым надёжным вариантом подготовки данных для QGIS-xtopo. Для больших и детализированных областей это наилучший вариант. Однако он требует ручного получения данных OSM и заполнения БД. Этот процесс может занимать существенное время.

Существует возможность получения данных OSM с внешних серверов Overpass. Такой вариант не требует подготовки БД и может обеспечить быстрый старт, но на большие запросы сервер может отвечать отказом или выдавать неполные данные. Подробная настройка этого варианта использования описана в разделе 4 (переменные overpass_instance=external и overpass_endpoint_external).

Если будет использоваться сервер Overpass внутри docker контейнера, то нужно заполнить его собственную базу данных (БД) данными, полученными из OSM. БД хранится на вашем ПК в каталоге путь_к_каталогу_с_проектами/overpass_db. Она нужна только на время работы скрипта docker_prepare_data в разделе 5.

  1. Заполнить БД Overpass

    1. Скачать экстракт данных OSM. Чем обширнее область тем больше файл экстракта, что замедляет обработку данных. Поддерживаются форматы pbf, o5m, osm.bz2, osm.
      • Protomaps (область выгрузки сильно ограничена)
        1. Выбрать интересующую область на карте с помощью кнопок Rectangle Selection (Прямоугольное выделение) либо Polygon Selection (Полигональное выделение).
        2. Задать имя экстракта (поле Name this area) (опционально)
        3. После окончания подготовки данных сервером Protomaps нужно скачать их (Download PBF)
      • http://osm.sbin.ru/osm_dump/ Данные по России и ближнему зарубежью.
      • download.geofabrik.de. Скачайте страну/область с наименьшим приемлемым охватом. Например: не стоит качать всю центральную Россию если вам нужна только Московская область.
      • BBBike extracts
      • OSMaxx
      • JOSM
    2. Поместить полученные файлы в каталог путь_к_каталогу_с_проектами/имя_проекта/osm_data/. Поддерживается несколько экстрактов одновременно.
    3. Заполнить БД Overpass в docker.
    ./docker_populate_db.sh
    

    Скрипт попросит вас выполнить пункты 3.1.i (скачать экстракт данных OSM), 3.1.ii (поместить полученные файлы в каталог путь_к_каталогу_с_проектами/имя_проекта/osm_data/) (Please download OSM extract from https://protomaps.com/extracts or http://download.geofabrik.de and place it into osm_data_dir). Выполните запрос и нажмите любую клавишу для продолжения.

    или docker exec -it --user user qgis-xtopo /app/populate_db.sh

  2. Получить данные рельефа (опционально)

    Если вы хотите использовать рельеф то не забудьте задать опцию generate_terrain=true в config.ini (раздел 4).

    Доступно три варианта использования данных:

    • Автоматически загрузить данные SRTM30m (рекомендуется). Для этого нужно при инициализации указать опцию -s true (раздел 2), или задать в config.ini опцию download_terrain_tiles=true (раздел 4).

    или

    • Использовать полный набор тайлов для всего мира, скачанный вручную. Поддерживаются только тайлы размером 1х1 градус. Они должны иметь имена, соответствующие общепринятым правилам наименования SRTM. Например: N51E005.tif. Поддерживаются форматы GeoTIFF (tif) и HGT (hgt), а также zip архивы с файлами в этих форматах (один архив на файл). Данные должны находиться в каталоге, который был задан в шаге 2 (опция -t) при запуске docker контейнера. Необходимо задать в config.ini опцию get_terrain_tiles=true (раздел 4).

    или

4. Настройка

Конфигурационный файл проекта называется config.ini. Он находится здесь: путь_к_каталогу_с_проектами/qgisxtopo-config/config.ini. В нём задаются параметры, которые используются в шаге 3 и шаге 5. true - да, false - нет.

Обычно менять файл вручную не требуется, но если вы хотите использовать рельеф без указания опции -s в шаге 2 то нужно для опции generate_terrain установить значение true (см. раздел 3.2)

  • project_name=имя_каталога_проекта: имя каталога проекта. Не должно содержать пробелов. Задаётся в разделе 2 при запуске docker контейнера.

  • bbox=[lon_min,lat_min,lon_max,lat_max | "https://www.openstreetmap.org/#map={z}/{x}/{y}"]: границы зоны охвата в географических координатах системы WGS 84. Координаты записываются в градусах в формате десятичной дроби (например 41.12) через запятую (минимальная долгота, минимальная широта, максимальная долгота, максимальная широта, то есть лево,низ,право,верх). Удобно получать bbox через https://boundingbox.klokantech.com/ . В левом нижнем углу страницы нужно выбрать формат CSV. Также можно задать ссылку с сайта OpenStreetMap. Ссылка должна быть заключена в двойные кавычки. (обязательный параметр!)

  • array_queries=(список запросов): список запросов к Overpass, которые будут выполнены на шаге 5. По умолчанию указаны все возможные запросы, но вы можете сократить этот список по своему усмотрению. Обратите внимание что некоторые запросы зависят от других. Эти зависимости описаны в config.ini (Query dependencies). Обычно не требуется менять этот список.

  • overpass_instance=[docker | external | local | ssh]: определяет какой сервер Overpass будем использовать (важный параметр!). По умолчанию: docker.

    • docker: внутри docker (рекомендуется). Самый надёжный вариант. Для использования необходимо выполнить шаг 3.1 (заполнить БД Overpass).
    • external: находится в интернете и доступен по http(s). Как правило не обеспечивает достаточной надёжности при значительных объёмах запрашиваемых данных.
      • overpass_endpoint_external="адрес_сервера". Список доступных серверов здесь: ссылка1, ссылка2. Использование удалённого сервера является самым простым способом получить данные OSM. Однако из-за различных ограничений результат не всегда оказывается стабильным. Некоторые сервера не позволяют делать много запросов в течение короткого времени и блокируют вас. Можете попробовать следующие сервера:
    • local: установлен на локальной машине
      • overpass_endpoint_local="путь_к_файлу_osm3s_query. Например: "/path/to/your/overpass/osm3s_query --db-dir=/path/to/overpass_db" (с кавычками)
    • ssh: через ssh. Например: "ssh user@server '/path/to/overpass/osm3s/bin/osm3s_query'" (с кавычками).
  • overpass_endpoint_docker_use_bbox=[true | false]: обрезать экстракт OSM по границам зоны охвата (bbox) перед заполнением БД Overpass при использовании overpass_instance=docker. По умолчанию true. Может быть полезно выключить эту опцию если вы хотите заполнить БД бОльшей областью, чем требуется для одного проекта, и вы хотите сделать много проектов, использующих одну и ту же БД.

  • overpass_endpoint_docker_clean_db=[true | false]: очищать БД Overpass перед её заполнением при использовании overpass_instance=docker. Если false то БД будет дополнена. По умолчанию true.

  • generate_terrain=[true | false]: обработка рельефа. Эта переменная влияет на все вложенные переменные, относящиеся к рельефу. Если она установлена в false то рельеф обрабатываться не будет.

    • download_terrain_tiles=[true | false]: автоматически загрузить данные рельефа SRTM 30m
    • get_terrain_tiles=[true | false]: использовать каталог с данными рельефа, который был задан в шаге 2. Если этот параметр установлен в false то будет использоваться каталог путь_к_каталогу_с_проектами/имя_проекта/input_terrain, куда вы самостоятельно можете скопировать данные рельефа для области проекта. Их имена могут быть произвольными. Поддерживаются форматы GeoTIFF (tif) и HGT (hgt), а также zip архивы с файлами в этих форматах. Опция несовместима с опцией get_terrain_tiles.
    • generate_terrain_hillshade_slope=[true | false]: создавать карту затенения рельефа (отмывку) и карту уклонов
      • terrain_resample_method=[cubicspline | lanczos]: метод масштабирования исходных данных рельефа. cubicspline даёт менее детальную картинку без артефактов, а lanczos напротив, более детальную, но с артефактами в виде колец
    • generate_terrain_isolines=[true | false]: создавать изолинии высот (изогипсы)
      • isolines_step=[10 | 25 | 50 | 100 | 200]: шаг изолиний. Из данных рельефа будут извлечены линии с одинаковой высотой с заданным шагом.
      • smooth_isolines=[true|false]: сглаживание изолиний. Обычно не требуется.
  • manual_coastline_processing=[true | false]: ручная обработка береговой линии (coastline) мирового океана. Дело в том что автоматическая обработка занимает достаточно много времени. Тем больше, чем более детальна береговая линия. Иногда требуется получить карту большой области со сложным берегом и ждать времени нет. В таком случае вы можете включить эту опцию и обработать береговую линию вручную в JOSM. Рекомендуется отдельно запросить её, оставив в массиве array_queries только coastline и запустить скрипт docker_prepare_data (шаг 5). В нужный момент скрипт остановит выполнение и попросит вручную достроить береговую линию до полигона, включающего в себя мировой океан в пределах заданного bbox, избегая пересечений и неправильной геометрии. Путь к файлу: путь_к_каталогу_с_проектами/имя_проекта/vector/coastline.osm. После этого следует в окне выполнения docker_prepare_data нажать любую клавишу.

5. Получение и обработка данных OSM, обработка рельефа

Сделав все необходимые приготовления нужно запустить скрипт

./docker_prepare_data.sh

или

docker exec -it --user user qgis-xtopo /app/prepare_data.sh

Он сгенерирует карту затенения рельефа, карту уклонов, изолинии высот. Также сделает необходимые запросы к серверу Overpass и обработает их с помощью алгоритмов QGIS и GRASS. Векторные данные (данные OSM и изолинии высот) находятся в каталоге путь_к_каталогу_с_проектами/имя_проекта/vector, а растровые (карта затенения рельефа, карта уклонов) в каталоге путь_к_каталогу_с_проектами/имя_проекта/raster.

Если какой-то запрос выполняется слишком долго либо завершается с ошибкой, то вы можете пропустить его, вручную отредактировав config.ini (раздел 4). Массив запросов называется array_queries. Узнать имя проблемного запроса просто - в выводе docker_prepare_data есть строчки вида === (4 / 143) Downloading water.... water и есть искомое имя. Уберите его из массива array_queries в config.ini и запустите ./docker_prepare_data.sh снова.

6. Запуск QGIS, открытие проекта

Полученный проект QGIS можно открыть двумя способами:

  • С помощью QGIS, установленной внутри docker контейнера (рекомендуется):

    • ./docker_exec_qgis.sh

      или

    • xhost +local:docker && docker exec -it --user user qgis-xtopo /app/exec_qgis.sh

  • Локально установленной QGIS. Требуется QGIS последней версии и GRASS 7.x+.

QGIS сообщит что не все слои были найдены и предложит вам выбрать что с ними делать (Handle Unavailable Layers). Наличие таких слоёв как правило означает что в данной области в базе OSM отсутствуют объекты такого типа. Нужно нажать кнопку Удалить недоступные слои, а затем OK. Пустые слои будут удалены из проекта и не будут мешать.

7. Работа с QGIS

1. Настройка внешнего вида карты

  1. Слои

    Проект QGIS состоит из слоёв. Панель с их списком находится в левой части окна QGIS. Каждый слой содержит различные классы объектов (дороги, леса, дома и т.п.). Чем выше слой тем позднее он отрисовывается, т.е. находится "выше" нижележащих слоёв.

    Чтобы вписать слой целиком на экран, откройте его контекстное меню правой кнопкой мыши и выберите Увеличить до слоя.

    Вероятно вам потребуется выключить либо включить некоторые слои (галочка слева от имени слоя). Это зависит от ваших требований к карте, а также от количества и качества данных OSM в загруженной области. Слоёв больше сотни и визуальный поиск их затруднён, поэтому для поиска проще всего воспользоваться строкой поиска, находящейся под панелью слоёв (Type to locate). Наберите часть названия слоя и выберите слой в списке результатов.

    Есть возможность приостановить отрисовку карты. Для этого уберите галочку Отрисовка, которая находится в правом нижнем углу. Не забудьте про неё!

    1. Рельеф

      1. Изолинии высот (изогипсы)

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

        • Обычные: [TERRAIN] isolines regular

        • На ледниках: [TERRAIN] isolines glacier

          Если раскрыть свойства слоя изолиний в списке слоёв (стрелочка слева от имени слоя) то появится список подслоёв: 1000, 200, 100, 50, 25, 10. Эти подслои отвечают за то, насколько часто будут рисоваться изолинии. Кроме того, их частота зависит от крутизны склонов и масштаба карты.


          Для равнин подходят подслои 10, 50, 100, 1000 (остальные выключить!)

          Для горной местности обычно подходят подслои 50, 100, 1000 или 100, 1000 (остальные выключить!)

          Для горной местности с очень крутыми склонами при масштабе 1:50000 и выше обычно подходят подслои 200, 1000 (остальные выключить!)


          Подслои включают в себя изолинии со следующими высотами (в метрах) (нажмите чтобы развернуть):
          • 1000: 1000, 2000, 3000 и т.п.
          • 200: 200, 400, 600 и т.п, исключая 1000. Сочетается только с подслоем 1000.
          • 100: 100, 200, 300 и т.п, исключая 1000. Не сочетается с подслоем 200.
          • 50: 50, 150, 250 и т.п., исключая 100, 1000. Не сочетается с подслоем 200.
          • 25: 25, 75, 125, 175 и т.п., исключая 50, 100, 1000. Не сочетается с подслоем 10 и 200.
          • 10: 10, 20, 30, 40 и т.п, исключая 50, 100, 1000. Не сочетается с подслоем 200.

          По умолчанию шаг изолиний (параметр isolines_step в config.ini) равен 10. Это означает что будут подготовлены все подслои, кратные 10, и можно будет включить подслои 10, 50, 100, 200, 1000. А если шаг изолиний равен 25, то можно включить подслои 25, 50, 100, 200, 1000.

          Если вы хотите изменить шаг изолиний которые будут подготовлены для проекта, то нужно отредактировать параметр isolines_step в config.ini, убедившись что опции generate_terrain,generate_terrain_isolines включены (=true). Затем следует повторно запустить шаг 5. Можно очистить массив запросов array_queries чтобы не тратить время на повторную их обработку (array_queries=()). Чтобы вернуть массив к первоначальному состоянию, нужно заменить его полным массивом запросов, который находится в config.ini (# Complete list of available queries).

          Если обработка изолиний на шаге 5 (docker_prepare_data) занимает слишком много времени (горный район/большой охват/слабый ПК), то увеличьте шаг изолиний isolines_step (например до 50), регенерируйте данные и включите соответствующие подслои.

      2. Затенение рельефа (отмывка)

        Доступно 2 немного отличающихся друг от друга варианта слоя затенения рельефа:

        • [TERRAIN] hillshade variant 1
        • [TERRAIN] hillshade variant 2

        Вы можете включить тот, который больше подходит к вашей карте.

      3. Склоны

        • Крутые

          [TERRAIN] slope (steep)

          slope steep slope steep

          Слой позволяет быстро оценить примерную крутизну склонов. Слой полупрозрачный. Заливка имеет градацию 10˚. Полезно при движении в горной местности (особенно по азимуту).

        • Пологие

          [TERRAIN] slope (slight)

          slope slight slope slight

          Слой позволяет найти наиболее пологие участки. Например для установки лагеря, ночлега в горной местности. Следует учитывать что разрешение данных рельефа обычно низкое, а данные приводятся со значительным усреднением. Например, для SRTM30m шаг отсчета по горизонтали составляет около 30 м. Это значит что на отрезке 30 м может оказаться яма шириной ~10 м и глубиной ~15 м, а на карте это будет выглядеть как плоская поверхность. Либо поверхность может быть насыщена микронеровностями.

    2. Основные слои

      Нажмите чтобы развернуть

      1. Населённые пункты, места
        • places main: населённые пункты
        • place locality: урочища (бывшие населённые пункты или места с названием)
        • island polygon, island point names: острова
        • сape: мысы
      2. Дороги, транспортные пути
        • highway main: основные дороги
          • highway main bridge: мосты
          • highway main tunnel: туннели
        • railway all: железные дороги
          • railway bridge: мосты
          • rail tunnel: туннели
          • railway disused: заброшенные железные дороги
        • track: грунтовки
          • track bridge: мосты
        • path: тропы, направления
          • path bridge: мосты
        • steps: лестницы
      3. Природные площадные объекты
        • wood: лес
        • scrub: кустарник
        • grass: трава, пустошь, газон
        • wetland: болото
        • bare rock: голые скалы
        • scree: осыпи
        • shingle: галька
        • sand: пески
        • desert: пустыни
        • glacier: ледники
        • mountain area: горные массивы
      4. Природные линейные объекты
        • ridge, arete: горные хребты
        • valley: балки, овраги
        • cliff: скальные обрывы
        • earth bank gully: земляные обрывы
      5. Гидрография
        • water: водоёмы
          • water intermittent: пересыхающие
        • river: реки
          • river intermittent: пересыхающие
        • stream: ручьи
          • stream intermittent: пересыхающие
        • drystream: сухие русла, промоины
        • dam: дамбы
        • weir: небольшие плотины
        • waterfall: водопады
        • ford: броды
        • stait line, strait polygon skel: морские проливы
        • bay polygon skel, bay point: бухты и заливы
        • reef: рифы
        • shoal: мелководье
      6. Рукотворные объекты
        • landuse residential: жилые кварталы
        • industrial: промзоны
        • quarry: карьеры
        • military: военные зоны
        • building: здания
        • allotments: участки земли выделенные под сады или огороды
        • orchard: посадки деревьев или кустарников
        • vineyard: виноградники
        • farmland: возделываемые поля
        • farmyard: дворы ферм
        • plant nursery: питомники для выращивания деревьев и кустарников
        • greenhouse horticulture: тепличные хозяйства
        • logging: вырубки
        • landfill: свалки
        • beach: пляжи
        • pier: пирсы
        • embankment: насыпи (отдельно от дорог)
        • cutline: просеки
      7. Границы
        • admin level 2: границы государственные
        • admin level 4: границы областей, республик
        • nature reserve: национальные парки, заказники, заповедники
  2. Переменные

    Есть возможность настроить некоторые важные параметры, касающиеся стиля отображения карты. Откройте Проект - Свойства - Переменные.

  • level_of_detail [4]

    Задаёт уровень детализации. 1 - самый маленький, 5 - самый большой. По большей части влияет на масштабы 1:100000 - 1:1000000

  • use_place_icon [true]

    Отображать значки населённых пунктов в виде кругов.

  • place_density [1]

    Плотность значков населённых пунктов в виде кругов. В зависимости от масштаба и населённости места можно выбрать соответствующую плотность значков. 1 - много значков, 5 - мало значков.

  • text_size_mult [1.2]

    Множитель размера текста. Влияет на размер почти всех надписей. 1 - мелкий текст, 2 - крупный и т.д.

  • name_tag_1-3

    Проект является мультиязычным. Возможно указать список языков, которые будут отображаться в порядке приоритета. Например: name_tag_1=name, name_tag_2=name:en, name_tag_3=name:de. Это означает что если у объекта указано название на местном языке (тег name в OSM), то сначала будет отображаться оно. Если его нет, то будет использоваться имя на английском языке (name:en). А если нет имени и на английском, то будет использоваться имя на немецком (name:de). Различные виды именных тегов, используемые в OSM, описаны в wiki. Вы можете указать не только name:xx, но и loc_name, short_name и т.п.

  • disable_surface_integrity [true]

    Запретить отображение поверхности дорог. Если выключено, то чем в более оранжевый цвет раскрашена дорога тем лучше покрытие, а чем она белее — тем хуже. Для грунтовок схема другая: чем длиннее штрих тем лучше покрытие, чем короче — тем хуже. Повторяет схему, используемую в OsmAnd в стиле Topo. Если включено то дороги раскрашиваются в соответствии со своим классом.

  • buffered_text [false]

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

    buffered text false buffered text true

  • text_mask_size [0.6]

    Ширина маски вокруг символов текста в миллиметрах

    text mask size 0.6 text mask size 1.2

  • use_icon_masks [true]

    Использовать маски для (почти всех) иконок

    use_icon_masks true use_icon_masks false

  • name_pref_suf_lang [ru]

    Язык некоторых суффиксов и префиксов. Например, метры (m и м) в подписях горных вершин и перевалов. Поддерживаемые значения: en, ru

2. Подготовка к печати

  1. Настройка макета

    Проект содержит подготовленный макет для печати на А4. Чтобы его открыть, выберите в меню Проект - Макеты - Detailed. Если вам нужно подготовить карту для печати в другом формате, создайте собственный макет (Проект - Менеджер макетов), либо измените этот.

    print_composer_show_all_map

    Вероятнее всего вы увидите белый лист. Это значит что охват окна не совпадает с охватом карты, карта где-то далеко за его пределами. Чтобы это исправить выберите на панели справа Элементы - Карта - Свойства элемента - Применить охват основного окна к элементу карты (1-4). Чтобы изменить масштаб, отредактируйте поле Масштаб (5).

    print_composer_move_contents_button

    Для того чтобы "сдвинуть карту" выберите инструмент Перемещение содержимого элемента и мышью измените видимый охват карты как вам нужно.

    print_composer_tweak_scalebar

    Чтобы настроить масштабную шкалу (находится слева внизу карты) scalebar выберите - Свойства элемента - Сегменты - Фиксированная ширина (1-2). Отредактируйте длину сегмента (3) так, чтобы шкала была читаема и удобна для восприятия. Длина сегмента задаётся в метрах. Обычно используются значения 50, 100, 1000, 10000 и т.п.

    print_composer_tweak_grid

    Чтобы включить сетку нужно в свойствах карты выбрать Сетки (1) - Modify grid (2).

    print_composer_tweak_grid_2

    Затем Enable grid (1). Далее нужно задать интервал в десятичных градусах (2) для двух осей.

  2. Создание атласа (не обязательно)

    Если ваша карта должна быть на нескольких (3 и больше) листах, то для удобства будет очень полезно создать атлас в QGIS.

    • Создать векторный слой типа "Полигон": Слой - Создать слой - Создать слой Shapefile. Выбрать имя файла и путь (кнопка с тремя точками правее) (1) . Тип геометрии - Полигон (2). OK.

      create_shape_file

    • Для удобства создания полигонов копируем стиль с примера атласа. Слои (панель) - atlas template - контекстное меню (правая кнопка мыши) - Стили - Копировать стиль - Все категории. Далее вставляем стиль на наш слой атласа: Слои (панель) - имя_слоя_атласа_указанное_в_предыдущем_шаге - контекстное меню (правая кнопка мыши) - Стили - Вставить стиль - Все категории. Слой будет полупрозрачным с номерами листов.

    • Добавить в слой прямоугольники (точность не особо важна), приблизительно соответствующие границам каждого листа, по одному на лист:

      create_polygons_for_atlas

      1 - Выбрать слой. 2 - Включить режим редактирования. 3 - Включить инструмент рисования прямоугольников. 4 - Сохранить изменения в слое. 5 - Редактировать узлы.

      Нажимаем кнопки 1, 2, 3 и рисуем прямоугольник для первого листа. Правая кнопка мыши завершает редактирование элемента. Вводим номер листа (id). OK. При необходимости меняем его размеры кнопкой Редактировать узлы (5).

      select_tool_move

      Теперь нам нужно скопировать созданный прямоугольник для создания других листов. Выделяем его инструментом Выделить объекты (1). Копируем и вставляем объект в ту же позицию: Ctrl-C, Ctrl-V. Перемещаем скопированный прямоугольник инструментом Переместить объект (2).

      edit_attributes_save_tool

      Нам нужно задать номер страницы нового листа. Для этого выделяем его и нажимаем кнопку Изменить аттрибуты всех выделенных объектов (1). Вводим номер страницы в поле id: 2. Границы второго листа заданы.

      Таким же образом создаём полигоны и задаём номера для остальных листов.

      Теперь сохраняем изменения: Сохранить правки (2) и выходим из режима редактирования: Режим редактирования (3)

    • В редакторе макета сгенерировать атлас: Атлас - Сгенерировать атлас (1). Указать ваш только что созданный слой покрытия атласа (2). Выключите и включите галочку Hidden coverage layer (3) (Скрыть слой покрытия).

      print_composer_generate_atlas

    • Активировать использование атласа: Элементы - Карта - Свойства элемента - Controlled by Атлас

      print_composer_controlled_by_atlas

    • Там же при необходимости указать отступ от полигонов-страниц атласа в процентах: Margin around feature. Так можно расширить или уменьшить область печати каждого листа относительно размера полигонов в слое атласа.

    • Включаем Предпросмотр атласа (1). Навигация по страницам осуществляется расположенными рядом кнопками и списком листов (2).

      atlas_control

  3. Экспорт

    Печать из запущенного в контейнере docker QGIS не реализована, поэтому возможен только экспорт в файл. Можно экспортировать в растровое (рекомендуется) или векторное (SVG, PDF) изображение.

    • Для экспорта в растровое изображение выберите Макет - Экспорт в Изображение
    • Для экспорта атласа выберите Атлас - Export Atlas as Images

    Т.к. QGIS запущен внутри контейнера с Linux, то структура файловой системы отличается от той, что используется в Windows. Каталог с проектами находится в /home/user/qgis_projects. Выберите какой-либо каталог внутри этого каталога (рекомендуется имя_проекта/output) и введите имя файла. Далее Save. В открывшемся окне можно выбрать разрешение экспорта. Обычно менять разрешение не требуется, но если последующая печать проходит слишком долго то можно его уменьшить.

    Теперь вы можете открыть получившееся(иеся) изображение(я) в каталоге с проектами через файловую систему Windows, убедиться что экспорт прошёл успешно. Карта готова к печати!

8. Удаление QGIS-xtopo

Windows:

  1. Удалите docker средствами Windows (Пуск - Параметры - Приложения)
  2. Удалите VcXsrv (там же)
  3. Удалите файл qgis-xtopo-gui.exe, скачанный при установке в шаге 0.3

Linux:

  1. Остановка контейнера docker и удаление образа

    ./docker_clean.sh
    

    или

    docker stop qgis-xtopo
    docker rm qgis-xtopo
    docker rmi xmd5a2/qgis-xtopo
    

    Каталог с проектами не удаляется автоматически во избежание потери данных. Если он вам больше не нужен то удалите его вручную.

  2. Удалите каталог со скриптами, скачанный в шаге 0.2.

  3. Удалите docker средствами вашей ОС

9. Известные проблемы

  1. Обработка береговой линии медленная. Не пытайтесь за раз загрузить данные на область более 50 км х 50 км со сложной береговой линией. Если всё-же требуется сделать карту, то воспользуйтесь опцией manual_coastline_processing (раздел 4). Потребуется вручную менять config.ini.
  2. Внешние сервера Overpass нестабильны и ненадёжны. Используйте внутренний сервер. Это надёжно и стабильно.
  3. Drag and drop в QGIS, запускаемом из docker контейнера, не работает. Папка с проектами примонтирована на /home/user/qgis_projects.
  4. Значки разных типов не вытесняются друг другом. Из-за этого происходит их наложение. Это не решается приемлемыми способами в текущей версии QGIS.