Создание тематических карт
Уровни знака
Особенностью QGIS при создании стиля того или иного слоя является то, что любой символ может быть собран послойно из различных типов слоев знака.
Такие типы слоев различны для разных видов основных геометрических примитивов (точек, линий и полигонов) аналогично типам символов.
Следует помнить, что, как и слои проекта, эти слои перекрывают друг друга в порядке их перечисления: слои, находящиеся в описании выше, перекрывают более низкие.
Для всех основных типов геометрий существует генератор геометрии, о котором будет рассказано отдельно.
Точечные объекты

По умолчанию основным типом слоя здесь будет являться простой маркер, у которого могут быть настроены:
размер;
цвет заливки;
прозрачность;
параметры смещения от истинного положения;
обводка - толщина и цвет;
форма маркера.
Все эти параметры могут быть заданы как в виде некоторого значения, так и переопределены на основе данных. То есть тот или иной параметр будет зависеть от значения атрибута объекта или вычисляемого выражения на основе атрибута/атрибутов.
Тип слоя Маска может быть использован при необходимости отрисовки точечного слоя поверх других слоев и подписей так, чтобы они его не перекрывали.
Тип слоя Генератор геометрии является общим для всех типов геометрий и подробно будет рассмотрен отдельно.
Прочие типы слоев точечного символа:
анимированный маркер - точечный объект, который использует анимированное изображение в формате .gif в качестве маркера (могут быть настроены основные размеры маркера);
эллиптический маркер - модификация простого маркера, для которого можно настроить отдельно ширину и высоту;
маркер с заливкой - еще одна модификация простого маркера, которая позволяет использовать те же типы заливки, что и для полигона;
шрифтовой маркер - маркер, внутри которого добавлен текстовый символ или текст, для которого может быть отдельно настроен шрифт и содержание текста (например, на основе выражения или атрибута, или просто введенный текст);
растровый маркер - использует растровое изображение (форматы .png, .jpg, .bmp) в качестве символа маркера;
SVG маркер - маркер, который использует в качестве символа векторное изображение в формате SVG (позволяет больше возможностей настройки, чем растровый маркер);
маркер векторного поля - кастомизируемый маркер, который может быть создан на основе атрибутов:

на плоскости - маркер задается параметрами по оси X и Y;
полярный - маркер с параметрами длины и угла поворота;
только высота - маркер с одним параметром высоты для отображения высоты расположения точек.
Линейные объекты

Простая линия для линейных объектов похожа на простой маркер с основными параметрами настройки по цвету, толщине, прозрачности.
Для линейных объектов также как и для остальных есть один из основных типов слоев
Генератор геометрии и прочие, позволяющие настраивать различные параметры:
стрелка - линия со стрелкой на одном или обоих концах;
штрихи вдоль линии - линия, которая отрисовывается короткими отрезками перпендикулярными ее направлению через установленный интервал;
интерполированная линия - линия, которая может менять цвет и толщину от одного конца к другому;
линия с градиентной заливкой - линия, для которой переход в заливке происходит перпендикулярно ее направлению;
маркерная линия - линия, составленная из маркерных символов;
линия из растров - линия, составленная из растровых маркеров.
Полигональные/площадные объекты

Наибольшую свободу в настройке допускают полигональные символы, так как они могут быть отрисованы как полигоны с настраиваемой заливкой, так и в некоторых типах слоев как маркеры или обводки.
Типом слоя по умолчанию здесь, как и в предыдущих типах объектов будет являться Простая заливка, а Генератор геометрии - общим типом стиля, который подробнее рассмотрен отдельно.
Некоторые из прочих типов слоев для полигонов основаны на маркерах, а некоторые на линейных стилях.
Рассмотрим прочие типы слоев для полигональных объектов:
Отрисовка центроидов - вместо полигона отрисовывается только маркер в его геометрическом центре;
Градиентная заливка - заливка полигона заданным и настроенным градиентом, который может быть настроен как на основе двух цветов, так и на основе определенного цветового ряда с различными настройками перехода;

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

Заливка точками - полигон заполняется маркерами точечных объектов с регулярным расположением;

Заливка маркерами со случайным размещением - полигон заполняется заданным числом маркеров со случайным расположением;
Заливка растром - в качестве заливки используются не параметры цвета, а готовое растровое изображение;
Заливка SVG узором - полигон заполняется векторным изображением в формате SVG (как и в случае с маркером SVG дает значительно больше параметров настройки, чем простое заполнение растровым изображением);
Заливка градиентом из центра - полигон заливается градиентом цветов, который выстраивается от центра к границе (в отличие от просто градиентной заливки, где градиент распространяется на объект в целом);

Обводка - тип слоя полигонального объекта, построенный на основе линейных типов слоев, который отображает только внешний контур объекта (подробнее о них сказано выше):
Стрелка;
Штрихи вдоль линии;
Интерполированная линия;
Линия с градиентной заливкой;
Маркерная линия;
Линия из растров;
простая линия.
Исходные данные
В качестве исходнях данных мы воспользуемся числом населения в муниципальных округах города Москвы. Скачать данные можно по ссылке: https://disk.yandex.ru/d/zCKHvmBDnZFwkg
В папке два файла:
ao.geojson - административные округа
municipal_districts.geojson - муниципальные округа.
Скачать можно их оба сразу, но пока понадобится только второй.

Проект со всеми настройками стиля вы можете скачать в виде архива Визуализация из той же папки, что и исходные данные, или по прямой ссылке https://disk.yandex.ru/d/Ou8wlVtMKiJu1A
Карта пропорциональных символов
В этом типе тематических карт отображение происходит с помощью размера символов, который пропорционален величине показателя.
Использование слоя символа
Как упоминалось выше каждый символ может быть составлен из нескольких слоев.
Добавим новый слой символа с использованием кнопки
в свойствах слоя.
Тип слоя в данном случае - Центроиды.

Для того, чтобы видеть изменения слоя на карте, не закрывая окно свойств вы можете просто нажимать Применить (Apply). Таким образом изменения будут применены, но окно останется открытым.

Для получившихся центроидов нужно применить настройку Размещать маркеры внутри полигонов (поставить галочку напротив этих слов). Ее использование принудительно сместить точки центроидов так, чтобы они всегда были внутри полигонов, так как в противном случае для некоторых объектов сложной формы центроиды могут попасть за пределы объекта.
Опцию Рисовать маркеры на всех частях составных объектов же наоборот следует отключить, потому что она будет создавать дополнительные маркеры для частей мультиполигонов.

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

Далее нам необходимо настроить размер маркера таким образом, чтобы он отображал количество населения (поле атрибутивной таблицы “population”).
Для этого перейдем в настройки простого маркера и справа от размера нажмем кнопку Переопределить на основе данных.

Здесь нам необходимо воспользоваться опцией Подбор.
В открывшемся окне необходимо сначала выбрать так называемый источник, то есть поле, по которому будет подбираться размер. У нас это поле “population”.
Далее нужно указать минимальное и максимальное значение. Они могут быть заданы автоматически на основе атрибута нажатием на кнопку
.

После того, как будут выбраны значения в правой части окна вы увидите маркеры варьирубщихся размеров. Именно так они и будут масштабироваться на вашей карте.
Вы можете задать максимальный и минимальный размер символа. Желательно, чтобы разница в размерах символа была пропорциональна разнице между значениями атрибута. Например, если минимальное и максимальное значение отличаются в 10 раз, то и размер символов должен отличаться в столько же раз.
Вы можете воспользоваться несколькими вариантами масштабирования, из которых метод Флэннери, установленный по умолчанию, будет наиболее оптимальным благодаря тому, что масштабирование происходит по площади символа таким образом, чтобы мы визуально хорошо и корректно считывали разницу в размерах.
Прочие способы масштабирования:
по площади - масштабирование происходит по площади символа;
радиально - масштабирование происходит по радиусу круга;
экспоненциально.
После применения изменений вы увидите на карте ваши символы, размер которых будет пропорционален количеству населения в муниципальном округе.

Далее вы можете выбрать для своих маркеров цвет, обводку и прозрачность.
Рекомендуется делать их полупрозрачными для того, чтобы при наложении маркеров друг на друга вы видели все символы.

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

Однако следует помнить, что все эти дубликаты будут использовать один и тот же файл, поэтому изменения будут происходить одновременно во всех слоях.
Продублированные слои вы можете переименовывать - это никак не меняет имя файла, просто присваивает слою псеводним в рамках вашего проекта.
Для второго варианта карты пропорциональных символов воспользуемся Генератором геометрии.
Генератор геометрии может быть использован для создания сложных стилей объектов, а также визуализации объектов с использованием другого типа геометрического примитива (например, соединение точек одной линией по порядку) или отрисовки других объектов на основе исходных (например, отрисовки буферных зон вокруг объектов).
Важно помнить, что генератор геометрии не меняет тип исходных объектов слоя, а просто создает новый тип отрисовки объектов. То есть геометрия останется неизменной, изменится только отображение ее на карте. Поэтому, если вам необходимо создать объект с иным типом геометрии для дальнейшей работы на основе выражения, следует пользоваться инструментом Геометрия из выражения из панели инструментов анализа.
В нашем случае это будет создание точек на основе наших полигонов.
Удалим в дубликате нашего слоя слой символа Центроиды и добавим новый, выбрав Генератор геометрии.
По умолчанию генератор будет использовать исходные геометрии объектов.

В первую очередь заменим тип геометрии в генераторе на Точка/мультиточка, а далее пропишем выражение для отрисовки точек.
Выражение может быть просто прописано с клавиатуры в том поле, где сейчас указано @geometry или создано с помощью редактора выражений, открывающегося по кнопке
справа от поля с выражением.
Здесь необходимо прописать следующее выражение:
point_on_surface(@geometry)

В данном случае point_on_surface - это функция, создающая точку в центре полигона, но в том случае, если центр полигона находится за его пределами, точка перемещается внутрь.
Результат применения генератора геометрии будет аналогичен предыдущему разделу.

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

Размер символов как визуальная переменная хорошо сочетается с цветом, который вы можете использовать для отображения того же показателя или другого.
Создание нового слоя
Ни один из перечисленных выше двух способов не позволяет сразу создать легенду с размерами знаков.
Для создания карты пропорциональных символов так, чтобы вам было доступно создание легенды для карты, в первую очередь следует получить точечный слой на основе полигональных объектов.
Для этого воспользуемся инструментом Точка на поверхности из Панели инструментов анализа.
Этот инструмент дублирует инструмент Центроид с одной небольшой разницей: в случае невыпуклого многоугольника при использовании Центроида точка будет лежать за пределами полигона, тогда как при использовании Точки на поверхности точка будет смещена внутрь.
Фактически это та же самая функция, которой вы пользовались в генераторе геометрии.

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

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

Для того, чтобы размер символов был отображен в легенде, следует выбрать настройку Размер условных определяется данными…

После этого вы можете настроить свою легенда и выбрать ее тип.

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

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

В открывшемся окне воспользуемся редактором выражений.
В данном случае поделим общее количество населения на 5 000, таким образом 1 точка на карте будет соответствовать 5 000 человек, проживающих в определенном муниципальном образовании.

Рекомендуется выбирать это число таким образом, чтобы в каждом из исходных объектов было хотя бы несколько точек.

Здесь еще желательно настроить размер точек таким образом, чтобы они были хорошо различимы на карте.
В данном случае я убрала обводку точек и сделала их меньше.

Обратите внимание, что вы можете настраивать стиль слоев символа независимо друг от друга.
Фоновая картограмма
Фоновая картограмма - один из самых наиболее известных типов тематических карт, в которых показатель отображается цветом или штриховкой.
Для ее создания достаточно просто воспользоваться уже знакомым вам символом по диапазонам значений.
Однако следует помнить, что при использовании фоновых картограмм рекомендуется брать относительные значения показатей, например, вместо количества населения - плотность населения на единицу площади.
В наших исходных данных в таблице атрибутов приведено именно количество населения, поэтому необходимо перейти от него к плотности. Сделать это можно двумя способами: рассчитав плотность как отдельный атрибут с использованием калькулятора полей или воспользоваться выражением вместо конкретного атрибута при задании стиля символа.
Для того, чтобы рассчитать плотность нам необходима площадь наших объектов. Рассчитаем ее с использованием модуля Calculate geometry. После его установки, он должен быть в контекстном меню слоя, открывающемся при клике правой кнопкой мыши.

В открывшемся окне модуля выберем расчет площади area в квадратных километрах и системе координат EPSG: 32637 - UTM zone 37N.
Расчет здесь производится в этой системе координат для того, чтобы площадь считалась корректно.

В результате к таблице атрибутов будет добавлено новое поле со значением площади объектов в километрах квадратных.
Для задания символики по диапазонам значений воспользуемся выражением.
"population" /"area"
В этом выражении количество населения поделено на рассчитанную площадь муниципального образования.

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

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

Анаморфная карта
Анаморфная карта предполагает отображение показателя с помощью размера объекта, но, в отличие от пропорциональных символов, здесь используется исходная геометрия объектов, которая искажается пропорционально величине показателя.
Следует помнить, что в анаморфной карте искажаются форма и размер объектов.
В QGIS отсутствует инструмент по умолчанию для создания анаморфной карты, поэтому следует воспользоваться модулем Cartogram3. Этот модуль появится у вас на панели инструментов в виде значка
.
В открывшемся окне модуля необходимо выбрать слой, для которого анаморфная карта рассчитывается, показатель и указать критерии остановки (максимальное число итераций или максимальная средняя ошибка).
Чем выше значения критерия остановки, тем сильнее будет искажение в итоговой карте.

На полученной карте муниципальные образования с большим количеством населения будут “раздуты”, а с маленьким наоборот - уменьшены.

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

Для генератора воспользуемся следующим выражением:
scale( $geometry, "population"/maximum("population"), "population"/maximum("population"))

Это выражение масштабирует объекты, в качестве первого аргумента здесь указывается, что масштабировать, а второй и третий - это величина масштабирования по оси X и Y соответственно.
В результате вы получите слой с отмасштабированными пропорционально количеству населения муниципальными образованиями.

Если вы хотите, чтобы у вас отображались еще и истинные границы полигонов, вы можете добавить под генератор геометрии слой простой заливки.

Большим преимуществом генератора геометрии здесь является то, что нет необходимости создавать новый отдельный слой с измененными геометриями объектов.
Модуль Shape tools
Альтернативой использованию генератора геометрий является создание нового слоя с измененной геометрией.
Сделать это можно с помощью модуля Shape tools. После установки он появится у вас на панели инструментов.

Для изменения формы объектов воспользуемся инструментом Geodetic transformations из модуля.

После запуска инструменты вы увидите несколько параметров, которые он позволяет изменить:
rotation angle - угол поворота объектов;
scale factor - масштабирование;
translation distance - расстояние перемещения объектов;
translation azimuth - направление перемещения объектов;
translation distance units - единицы измерения расстояния переноса.
Нам необходимо масштабировать объекты, поэтому единственный параметр, нужный нам - scale factor. Величина масштабирования у нас должна задаваться на основе выражения, поэтому воспользуемся переопределением из данных и опцией Изменить.

В открывшемся окне редактора выражений следует ввести:
"population" /maximum("population")
То есть величина масштабирования у нас будет такая же, как мы использовали в генераторе геометрий.

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

Создание атласа
Атлас в QGIS позволяет автоматически создать несколько листов карты на основе какого-то условия группировки.
Например, мы можем сделать атлас для нашей карты с количеством населения в муниципальных образованиях, где на одном листе будет показан один район.
Для того, чтобы сделать из макета карты атлас, то есть серию карт нам необходимо условие группировки объектов, в качестве которого будет выступать административный район.
Для того, чтобы создать карту населения по административным округам Москвы добавим в проект слой с ними (файл ao.geojson). Объекты этого слоя будут нужны нам в первую очередь для того, чтобы создать страницы атласа и настроить некоторые элементы отображения.
Как создать макет и добавить на него карту было описано в разделе Оформление карт и макеты.
Создадим новый макет, в котором с помощью кнопки Настройки атласа
создадим атлас.

Страницы атласа в данном случае будут создаваться по районам.
Для создания страниц атласа не обязательно, чтобы слой, по которому они создаются был видимым в проекте.
Просмотр страниц атласа доступен по кнопке Предпросмотр атласа
.
Для того, чтобы масштаб карты подстраивался под содержимое настроим масштаб под объекты, определяющие страницы нашего атласа.
Для этого откроем свойства карты и найдем настройку масштаба атласа. Нужно установить настройку масштаба атласа по размерам объектов с полем. Так карта будет автоматически масштабироваться на каждом листе так, чтобы на ней размещался только один из районов.

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

После открытия предпросмотра в панели инструментов макета вы увидите стрелки переключения между страницами и раскрывающийся список страниц/округов.

Для того, чтобы район был очевиднее на листе, настроим стиль объектов так, чтобы район листа был обведен более толстым контуром.
Вернемся в основное окно программы, и настроим толщину обводки на основе выражения:
if ( @atlas_pagename = "NAME" ,2, 0.3)

Это выражение с условием “если”, в котором в качестве аргументов передаются:
условие;
толщина обводки в том случае, если условие выполнено;
толщина обводки, если условие не выполнено.
Что же значит переменная @atlas_pagename? Эта переменная указывает на то, что для задания стиля здесь нужно использовать тот район, на странице которого сейчас открыт наш атлас.

После этого вы увидите на карте в основном окне программы, что один из административных округов обведен более толстой линией, а также он обведен на странице атласа.


Когда вы будете переходить со страницы на страницу атласа, у вас будет становиться более толстой обводка того округа, на страницу которого вы перешли.
Карта точечных объектов
Исходные данные
Исходные данные - сведения о пунктах выдачи маркетплейсов и служб доставки, которые были загружены из OSM (shop - outpost).
Данные в формате geojson (файл shop outpost.geojson) вы можете загрузить из папки по ссылке https://disk.yandex.ru/d/bUOHR2aR6iny8w
В папке также есть дополнительная папка с названием Иконки, которая понадобится чуть позже.