Автоматизация создания карт с помощью Print Composer Atlas

Если вы публикуете карты в сети или выводите на печать то нередко они бывают однотипны по стилю и содержанию. Например для каждой административной единицы или района проведения работ. Создание таких карт вручную довольно хлопотное и ёмкое ко времени дело, тем более если вы собираетесь регулярно их обновлять. Для решения подобных задач в QGIS имеется инструмент “Atlas” который позволяет создавать шаблоны для карт что серьёзно упрощает их публикацию. Особенно когда речь заходит о большом количестве документов для разных местоположений. Если вы ещё не знакомы с основами работы “Компоновщика карт” (Print Composer) - настоятельно рекомендуется сначала ознакомиться с этим разделом: Создание карты tutorial.

Обзор задачи

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

Вы научитесь также

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

  • Использовать выражения в стиле Rule Based для отображения только текущего объекта в Атласе.

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

Получение данных

Мы будем использовать GIS Data Layers из State of Hawaii - Office of Planning

Загрузите слой Wetlands из категории Biologic and Ecologic

Загрузите слой Census County Boundaries 2010 из категории Cultural and Demographic.

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

HI_Wetlands.shp.zip

county10.shp.zip

Источник данных: [HAWAII]

Методика

  1. Запустите QGIS и перейдите к Layer ‣ Add Layer ‣ Add Vector Layer.

../_images/110.png
  1. Перейдите к файлу HI_Wetlands.shp.zip и нажмите Open.

../_images/21.png
  1. Выберите слой HI_Wetlands_Poly и нажмите OK.

../_images/31.png
  1. Вы увидите многоугольники, представляющие водно-болотные угодья во всем штате Гавайи. Так как мы хотим получить отдельные карты водно-болотных угодий для каждого округа в штате, нам понадобится слой границ округов. Перейдите к Layer ‣ Add Layer ‣ Add Vector Layer и найдите файл county10.shp.zip. Нажмите Open.

../_images/41.png
  1. Перейдите к Project ‣ New Print Composer.

../_images/51.png
  1. Оставьте название макета пустым и нажмите OK.

../_images/61.png
  1. Перейдите к Layout ‣ Add Map.

../_images/71.png
  1. Нарисуйте прямоугольник, удерживая левую кнопку мыши, там, где вы хотели бы вставить карту.

../_images/81.png
  1. Прокрутите вкладку Item Properties вниз и поставьте галочку в поле Controlled by atlas. Это означает, что охват отображаемой карты будет определяться инструментом Atlas.

../_images/91.png
  1. Switch to the Atlas generation tab. Check the Generate an atlas box. Select the county10 as the Coverage layer. This will indicate that we want to create 1 map each for every polygon feature in the county10 layer. You can also check the Hidden coverage layer so that the features themselves will not appear on the map.
../_images/101.png
  1. Вы заметите, что изображение карты не изменилось после настройки параметров инструмента Атлас. Перейдите к меню Atlas ‣ Preview Atlas.

../_images/111.png
  1. Вы увидите, что карта обновилась, теперь она показывает, как будут выглядеть отдельные карты. Обратите внимание, что номер текущего объекта слоя покрытия показывается в правом нижнем углу.

../_images/121.png
  1. Вы можете просмотреть, как будет выглядеть карта для каждого из полигонов округов. Перейдите к меню Atlas ‣ Next Feature.

../_images/131.png
  1. Инструмент Атлас перерисует карту для охвата следующего объекта в слое покрытия.

../_images/141.png
  1. Давайте добавим подписи к карте. Перейдите к меню Layout ‣ Add Label.

../_images/151.png
  1. На вкладке Item properties нажмите кнопку Insert an expression....

../_images/161.png
  1. Подпись карты может использовать атрибуты из слоя покрытия. Функция concat используется для объединения нескольких текстовых элементов в один. В данном случае мы присоединим значение атрибута NAME10 слоя county10 слоя с текстом County of. Добавьте выражение, как показано ниже, и нажмите OK.

concat('County of ', "NAME10")
  1. Отрегулируйте размер шрифта по своим предпочтениям.

../_images/181.png
  1. Add another label and enter Wetlands Map under the Main properties. Since there is no expression here, this text will remain the same on all maps.
../_images/191.png
  1. Перейдите к меню Atlas ‣ Last Feature и убедитесь, что подписи карты отображаются, как нужно. Вы заметите, что на карте водно-болотных угодий есть полигоны, которые идут через океан, что выглядит некрасиво. Мы можем изменить стиль, чтобы районы за пределами границ округа были скрыты.

../_images/20.png
  1. Переключитесь на главное окно QGIS. Щелкните правой кнопкой мыши на слое county10 и выберите Properties.

../_images/211.png
  1. На вкладке Style выберите визуализацию Inverted polygons. Этот стиль настраивает отображение внешней части полигона - не внутренней. Выберите белый цвет заливки и нажмите OK.

../_images/22.png
  1. Switch to the Print Composer window. If we want the effect of the inverted polygons to show, we need to uncheck the Hidden coverage layer box under Atlas generation. You will now see that the rendered image is clean and areas outside the coverage polygon is not visible.
../_images/23.png
  1. There is one problem though. You can see areas of the map that are outside the coverage layer boundary but still visible. This is because Atlas doesn’t automatically hide other features. This can be useful in some cases, but for our purpose, we only want to show wetlands of the county whose map is being generated. To fix this, switch back to the main QGIS window and right-click the county10 layer and select Properties.
../_images/24.png
  1. In the Style tab, select Rule-based renderer as the Sub renderer. Double-click the area under Rule.
../_images/25.png
  1. Click the ... button next to Filter.
../_images/26.png
  1. In the Expression string builder, expand the Atlas group of functions. The $atlasfeatureid function will return the currently selected feature. We will construct an expression that will select only the currently selected Atlas feature. Enter the expression as below:
$id = $atlasfeatureid
../_images/27.png
  1. Back in the Print Composer window, click the Update preview button under Item properties tab to see the changes. Notice that now only the area covering the county boundary is shown.
../_images/28.png
  1. We will now add another dynamic label to show the current date. Go to Layout ‣ Add Label and select the area on the map. Click Insert an expression button.
../_images/29.png
  1. Expand the Date and Time functions group and you will find the $now function. This holds the current system time. The function todate() will convert this to a date string. Enter the expression as below:
concat('Created on: ', todate($now))
../_images/30.png
  1. Add another label citing the data source. You may also add other map elements such as a north arrow, scalebar etc. as described in Создание карты tutorial.
../_images/311.png
  1. Once you are satisfied with the map layout, go to Atlas ‣ Export Atlas as Images.
../_images/32.png
  1. Select a directory on your computer and click Choose.
../_images/33.png
  1. The Atlas tool will now iterate through each feature in the coverage layer and create a separate map image based on the template we created. You can see the images in the directory once the process completes.
../_images/34.png
  1. Изображения карт для сравнения.

../_images/35_1.jpg ../_images/35_2.jpg ../_images/35_3.jpg ../_images/35_4.jpg ../_images/35_5.jpg
comments powered by Disqus

This work is licensed under a Creative Commons Attribution 4.0 International License