Создание регулярных сеток в QGIS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
м (Поправил битую ссылку)
 
(не показано 10 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{Статья|Черновик}}
{{Статья|Опубликована|grids-qgis}}
<p class="ann">В статье рассматриваются алгоритмы создания градусной и метрической полигональных сеток с помощью QGIS. Отдельно затрагивается вопрос оформления градусной сетки нанесенной на спроектированные данные.</p>
{{Аннотация|В статье рассматриваются алгоритмы создания градусной и метрической полигональных сеток с помощью QGIS. Отдельно затрагивается вопрос оформления градусной сетки нанесенной на спроецированные данные.}}


== Создание регулярных сеток в QGIS ==
== Создание регулярных сеток в QGIS ==
Строка 23: Строка 23:
Допустим, перед нами стоит задача разбить территорию административного субъекта (в нашем случае Ханты-Мансийского автономного округа) на квадраты 20*20 км для обобщения каких-либо количественных данных, например, для учета биоразнообразия в каждом таком квадрате.
Допустим, перед нами стоит задача разбить территорию административного субъекта (в нашем случае Ханты-Мансийского автономного округа) на квадраты 20*20 км для обобщения каких-либо количественных данных, например, для учета биоразнообразия в каждом таком квадрате.


Воспользуемся [http://gis-lab.info/projects/osm_shp/region данными OpenStreetMap в формате Shape] в качестве базовых данных. Откроем слой с границами ХМАО и зададим проекту коническую равновеликую проекцию Альберса для ХМАО:
Воспользуемся [http://beryllium.gis-lab.info/project/osmshp/ данными OpenStreetMap в формате Shape] в качестве базовых данных. Откроем слой с границами ХМАО и зададим проекту коническую равновеликую проекцию Альберса для ХМАО. Для этого, зайдем в меню создания пользовательских систем координат: '''Установки → Ввод системы координат'''.
 
В диалоговом окне определения пользовательской системы координат нажмем кнопку [[Файл:mIconNew.png]] - создать новую систему координат. В графе '''«Имя»''' напишем узнаваемое имя, например «Albers HMAO». В графу '''«Параметры»''' скопируем следующий код для проекции:


<pre>+proj=aea +lat_1=60 +lat_2=64 +lat_0=0 +lon_0=72 +x_0=18500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs</pre>
<pre>+proj=aea +lat_1=60 +lat_2=64 +lat_0=0 +lon_0=72 +x_0=18500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs</pre>
[[Файл:18_regular_grids.png|700px|thumb|center]]
Сохраним созданную проекцию Нажав кнопку [[Файл:mActionFileSave.png]].
Теперь зададим созданную нами проекцию проекту: Установки → Свойства проекта. Во вкладке "Система координат" в графу фильтр введем название нашей проекции: «Albers HMAO», выберем ее из списка и нажмем "ОК".
[[Файл:19_regular_grids.png|700px|thumb|center]]


Сохраним слой границ ХМАО в СК проекта, т.е. в проекции Альберса. Для этого в менеджере слоев щелкнем правой кнопкой мыши по нему и выберем пункт «Сохранить как».
Сохраним слой границ ХМАО в СК проекта, т.е. в проекции Альберса. Для этого в менеджере слоев щелкнем правой кнопкой мыши по нему и выберем пункт «Сохранить как».
Строка 31: Строка 41:
В открывшемся диалоговом окне в графе '''«Система координат»''' выберем '''«Система координат проекта»'''. Поскольку ранее мы установили в качестве системы координат проекта проекцию Альберса, то она и будет задана для нового слоя.
В открывшемся диалоговом окне в графе '''«Система координат»''' выберем '''«Система координат проекта»'''. Поскольку ранее мы установили в качестве системы координат проекта проекцию Альберса, то она и будет задана для нового слоя.


Построим необходимую нам сетку 200*200 км, для этого выполним: '''Вектор → Выборка → Регулярная сетка'''.В случае, если это меню недоступно, убедитесь, что у вас активирован модуль fTools ('''Модули→Управление модулями''').
Построим необходимую нам сетку 200*200 км, для этого выполним: '''Вектор → Выборка → Регулярная сетка'''. В случае, если это меню недоступно, убедитесь, что у вас активирован модуль fTools ('''Модули→Управление модулями''').


[[Файл:01_regular_grids.png|700px|thumb|center]]
[[Файл:01_regular_grids.png|700px|thumb|center]]
Строка 84: Строка 94:
[[Файл:08_regular_grids.png|700px|thumb|center]]
[[Файл:08_regular_grids.png|700px|thumb|center]]


Это связано с особенностью механизма перепроецирования многих современных ГИС: дуга представляет из себя кривую с изломами в узлах (на рисунке узлы сетки помечены красными крестиками). После создания сетки промежуточных узлов нет, поэтому и перепроецирование проходит некорректно.
Это связано с особенностью механизма перепроецирования многих современных ГИС: дуга представляет из себя кривую с изломами в узлах (на рисунке узлы сетки помечены красными крестиками). После создания сетки промежуточных узлов нет, поэтому линии широт «не изгибаются».


Исправить эту ситуацию можно добавив в сегменты линий (или полигонов) дополнительные узлы с помощью инструмента '''Добавить вершины'''.
Исправить эту ситуацию можно добавив в сегменты линий (или полигонов) дополнительные узлы с помощью инструмента '''Добавить вершины'''.
Строка 95: Строка 105:


[[Файл:09_regular_grids.png|700px|thumb|center]]
[[Файл:09_regular_grids.png|700px|thumb|center]]
Убедимся, что при добавлении новых узлов они пришлись на места пересечения широт и долгот:
[[Файл:10_regular_grids.png|700px|thumb|center]]


В атрибутивной таблице слоя сетки присутствует поле «COORD» в нем содержится координаты долгот для долготных линий и координаты широт для широтных линий. После подписывания слоя по полю «COORD» и наложения новой сетки на карту в проекции Альберса получаем вполне пристойный результат:
В атрибутивной таблице слоя сетки присутствует поле «COORD» в нем содержится координаты долгот для долготных линий и координаты широт для широтных линий. После подписывания слоя по полю «COORD» и наложения новой сетки на карту в проекции Альберса получаем вполне пристойный результат:
Строка 112: Строка 118:
С помощью модуля «Improved Polygon Capturing» создадим полигон – рамку будущей карты, вдоль которой будем выстраивать подписи. Для этого создадим новый полигональный слой с именем '''map_border''' в проекции Альберса для ХМАО и включим режим редактирования.
С помощью модуля «Improved Polygon Capturing» создадим полигон – рамку будущей карты, вдоль которой будем выстраивать подписи. Для этого создадим новый полигональный слой с именем '''map_border''' в проекции Альберса для ХМАО и включим режим редактирования.


После активации режима редактирования станет доступной панель модуля «Improved Polygon Capturing». Выберем инструмент рисования прямоугольника от угла (Rectangle by Extent- [[Файл:12_regular_grids.png]]) и обведем рамку нашей будущей карты.
После активации режима редактирования станет доступной панель модуля «Improved Polygon Capturing». Выберем инструмент рисования прямоугольника от угла (Rectangle by Extent [[Файл:12_regular_grids.png]]) и обведем рамку нашей будущей карты.
Конвертируем полученную рамку карты (слой ''map_border''') в линейный слой: '''Вектор → Обработка геометрии → Преобразовать полигоны в линии'''. Назовем полученный линейный слой '''map_border_line'''.
Конвертируем полученную рамку карты (слой '''map_border''') в линейный слой: '''Вектор → Обработка геометрии → Преобразовать полигоны в линии'''. Назовем полученный линейный слой '''map_border_line'''.
 
Создадим точечный слой пересечений линий координатной сетки и полученной на предыдущем шаге линии рамки карты: '''Вектор → Анализ → Пересечения линий'''.  


Создадим точечный слой пересечений линий координатной сетки и полученной на предыдущем шаге линии рамки карты: '''Вектор → Анализ → Пересечения линий'''. В качестве '''исходного признака классификации''' выберем поле координат «COORD».
Поля «Исходный признак классификации» и «Признак классификации пересечений» - атрибутивные поля исходных линейных слоев которые будут добавлены в атрибутивную таблицу результирующего точечного слоя пересечений. Для дальнейшей работы нам понадобятся координаты сетки, по этому в качестве '''исходного признака классификации''' выберем поле координат «COORD» исходного слоя градусных линий.


[[Файл:13_regular_grids.png|700px|thumb|center]]
[[Файл:13_regular_grids.png|700px|thumb|center]]
Строка 138: Строка 146:
[[Файл:17_regular_grids.png|700px|thumb|center]]
[[Файл:17_regular_grids.png|700px|thumb|center]]


Теперь сохраним настроенный стиль для точек с подписями в файл *.qml ('''Слой → Свойства слоя → Кнопка "Сохранить стиль"''') с тем же именем, что и сам точечный слой.
В результате получим:
 
[[Файл:20_regular_grids.png|700px|thumb|center]]
 
В дальнейшем можно также сделать невидимой область за рамкой карты. Для этого можно воспользоваться модулем '''Mask''''. Установим этот модуль. Выделим инструментом выделения полигон '''map_border''' созданный ранее с помощью модуля «Improved Polygon Capturing». Нажмем на кнопку [[Файл:aeag_mask.png|22px]]. В появившемся диалоговом окне выберем нашу проекцию Альберса для ХМАО. При этом в памяти создается виртуальный полигональный слой размером установленного охвата экрана и дыркой по размеру выделенного полигона. К сожалению, модуль давно не обновлялся и использует старую символику. Для корректного отображения маскировочного слоя, нужно в свойствах слоя, во вкладке «Стиль» выбрать новую символику и выбрать для заливки и обводки полигона белые цвет:
 
[[Файл:21_regular_grids.png|700px|thumb|center]]
 
Для дальнейшего использования маскировочный слой нужно сохранить как отдельный шейп-файл.
Создим новый макет карты '''"Файл → Макет карты"''' и подгоним рамку макета под необходимый нам масштаб (подробнее о работе с макетами карт см. [http://gis-lab.info/docs/qgis/user_guide/qgis-1.7.0_user_guide_ru.pdf Руководство пользователя QGIS. Версия 1.7.0 'Wroclaw', Раздел 10. Компоновщик карты]:
 
[[Файл:22_regular_grids.png|700px|thumb|center]]
 
Теперь сохраним настроенные стили для линий сетки, точек с подписями и слоя маски в файлы *.qml для использования в других проектах ('''Слой → Свойства слоя → Кнопка "Сохранить стиль"''') с теми же именами, что и сами исходные слои.


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


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

Текущая версия от 07:53, 14 апреля 2015

Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/grids-qgis.html


В статье рассматриваются алгоритмы создания градусной и метрической полигональных сеток с помощью QGIS. Отдельно затрагивается вопрос оформления градусной сетки нанесенной на спроецированные данные.

Создание регулярных сеток в QGIS

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

QGIS позволяет строить 3 типа регулярных сеток:

  • градусная сетка (длина и ширина полигона равна заданному количеству градусов широты и долготы),
  • метрическая сетка (длина и ширина полигонов задается в метрах)
  • гексагональная регулярная сетка в виде сотовых ячеек (модуль MMQGIS).
Пример использования регулярной полигональной метрической сетки 100*100 км для визуализация расчетов абсорбции метана почвами в килотоннах в год на ячейку.
Пример использования регулярной линейной градусной сетки для создания шаблона карты.

Важно: тип размерности сетки (градусы или метры) зависит от проекции вида: чтобы построить градусную сетку необходимо, чтобы вид находился в географической системе координат (ГСК), и, напротив, при построении метрических сеток, необходимо, чтобы вид находился в какой-либо прямоугольной проекции.

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

Создание полигональной метрической сетки

Допустим, перед нами стоит задача разбить территорию административного субъекта (в нашем случае Ханты-Мансийского автономного округа) на квадраты 20*20 км для обобщения каких-либо количественных данных, например, для учета биоразнообразия в каждом таком квадрате.

Воспользуемся данными OpenStreetMap в формате Shape в качестве базовых данных. Откроем слой с границами ХМАО и зададим проекту коническую равновеликую проекцию Альберса для ХМАО. Для этого, зайдем в меню создания пользовательских систем координат: Установки → Ввод системы координат.

В диалоговом окне определения пользовательской системы координат нажмем кнопку MIconNew.png - создать новую систему координат. В графе «Имя» напишем узнаваемое имя, например «Albers HMAO». В графу «Параметры» скопируем следующий код для проекции:

+proj=aea +lat_1=60 +lat_2=64 +lat_0=0 +lon_0=72 +x_0=18500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs
18 regular grids.png

Сохраним созданную проекцию Нажав кнопку MActionFileSave.png.

Теперь зададим созданную нами проекцию проекту: Установки → Свойства проекта. Во вкладке "Система координат" в графу фильтр введем название нашей проекции: «Albers HMAO», выберем ее из списка и нажмем "ОК".

19 regular grids.png

Сохраним слой границ ХМАО в СК проекта, т.е. в проекции Альберса. Для этого в менеджере слоев щелкнем правой кнопкой мыши по нему и выберем пункт «Сохранить как».

В открывшемся диалоговом окне в графе «Система координат» выберем «Система координат проекта». Поскольку ранее мы установили в качестве системы координат проекта проекцию Альберса, то она и будет задана для нового слоя.

Построим необходимую нам сетку 200*200 км, для этого выполним: Вектор → Выборка → Регулярная сетка. В случае, если это меню недоступно, убедитесь, что у вас активирован модуль fTools (Модули→Управление модулями).

01 regular grids.png

В открывшемся диалоговом окне нажмем на кнопку «Получить из слоя». В параметрах укажем размер ячейки в метрах, поскольку теперь слой спроецирован: 200000.

02 regular grids.png

В результате получим такую сетку:

03 regular grids.png

Теперь можно убрать «лишние» не захватывающие территорию РФ ячейки. Для этого выполним: Вектор → Пространственный запрос → Пространственный запрос (Если эта функция не активна, убедитесь, что в меню Модули → Управление модулями у вас активирован модуль «Пространственные запросы».

В открывшемся диалоговом окне: в графе «Выбрать объекты в слое» укажем слой сетки в графе «Где объект» выберем пункт «Пересекает» в графе «Объекты слоя» выберем слой границ РФ

04 regular grids.png

Сохраним полученное выделение в виде отдельного слоя: в менеджере слоев щелкнем правой кнопкой мыши по слою сетки и выберем пункт «Сохранить выделение как». В результате имеем:

05 regular grids.png

Создание линий градусной сетки

Теперь построим на этот же регион (ХМАО) градусную сетку.

Важно: убедимся, что проект находится в ГСК: Установки→Свойства проекта→Система координат. В графе системы координат выберем необходимую ГСК, например WGS84.

В основном меню QGIS выполняем Вектор→Выборка→Регулярная сетка.

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

В графе «Параметры» зададим размер ячейки 3 градуса по долготе и 2 градуса по широте (для этого надо снять галочку «Зафиксировать соотношение сторон 1:1»

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

06 regular grids.png


Нажмем OK и дождемся окончания процесса построения сетки.

07 regular grids.png

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

08 regular grids.png

Это связано с особенностью механизма перепроецирования многих современных ГИС: дуга представляет из себя кривую с изломами в узлах (на рисунке узлы сетки помечены красными крестиками). После создания сетки промежуточных узлов нет, поэтому линии широт «не изгибаются».

Исправить эту ситуацию можно добавив в сегменты линий (или полигонов) дополнительные узлы с помощью инструмента Добавить вершины.

Добавим по 10 вершин на сегмент по широте таким образом, чтобы дополнительные узлы встали точно в местах пересечения широт и долгот. Если в нашем случае сетка включает 14 3-х градусных сегментов, получаем 14*10-1=139 дополнительных узла): Вектор→Обработка геометрии→Добавить вершины.

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

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

09 regular grids.png

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

11 regular grids.png

Оформление градусной сетки

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

Сохраним полученную сетку с дополнительными узлами в той СК, которая предполагается для использования в окончательном макете карты. В нашем случае это проекция Альберса для ХМАО.

С помощью модуля «Improved Polygon Capturing» создадим полигон – рамку будущей карты, вдоль которой будем выстраивать подписи. Для этого создадим новый полигональный слой с именем map_border в проекции Альберса для ХМАО и включим режим редактирования.

После активации режима редактирования станет доступной панель модуля «Improved Polygon Capturing». Выберем инструмент рисования прямоугольника от угла (Rectangle by Extent 12 regular grids.png) и обведем рамку нашей будущей карты. Конвертируем полученную рамку карты (слой map_border) в линейный слой: Вектор → Обработка геометрии → Преобразовать полигоны в линии. Назовем полученный линейный слой map_border_line.

Создадим точечный слой пересечений линий координатной сетки и полученной на предыдущем шаге линии рамки карты: Вектор → Анализ → Пересечения линий.

Поля «Исходный признак классификации» и «Признак классификации пересечений» - атрибутивные поля исходных линейных слоев которые будут добавлены в атрибутивную таблицу результирующего точечного слоя пересечений. Для дальнейшей работы нам понадобятся координаты сетки, по этому в качестве исходного признака классификации выберем поле координат «COORD» исходного слоя градусных линий.

13 regular grids.png

Результатом выполнения этой операции является точечный шейп-файл с координатами линий сетки.

14 regular grids.png

Сделаем точки невидимыми, например, уменьшив их размер до нуля. Подпишем точки созданного файла, добавив значок градуса. Воспользуемся инструментом подписи MActionLabeling.png → выражение:

16 regular grids.png

В графе «Выражение» пропишем:

"COORD_1" || 'º'

Где:

  • «COORD_1» - название поля координат
  • «||» - оператор конкатенации (объединения)
  • "º" - символ градуса
17 regular grids.png

В результате получим:

20 regular grids.png

В дальнейшем можно также сделать невидимой область за рамкой карты. Для этого можно воспользоваться модулем Mask'. Установим этот модуль. Выделим инструментом выделения полигон map_border созданный ранее с помощью модуля «Improved Polygon Capturing». Нажмем на кнопку Aeag mask.png. В появившемся диалоговом окне выберем нашу проекцию Альберса для ХМАО. При этом в памяти создается виртуальный полигональный слой размером установленного охвата экрана и дыркой по размеру выделенного полигона. К сожалению, модуль давно не обновлялся и использует старую символику. Для корректного отображения маскировочного слоя, нужно в свойствах слоя, во вкладке «Стиль» выбрать новую символику и выбрать для заливки и обводки полигона белые цвет:

21 regular grids.png

Для дальнейшего использования маскировочный слой нужно сохранить как отдельный шейп-файл. Создим новый макет карты "Файл → Макет карты" и подгоним рамку макета под необходимый нам масштаб (подробнее о работе с макетами карт см. Руководство пользователя QGIS. Версия 1.7.0 'Wroclaw', Раздел 10. Компоновщик карты:

22 regular grids.png

Теперь сохраним настроенные стили для линий сетки, точек с подписями и слоя маски в файлы *.qml для использования в других проектах (Слой → Свойства слоя → Кнопка "Сохранить стиль") с теми же именами, что и сами исходные слои.

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

Созданную таким образом сетку удобно хранить в отдельной папке, содержащей:

  • линейный шейп-файл с линиями сетки
  • точечный шейп-файл с подписями
  • слой маски
  • файлы настроек для линий, подписей и слоя маски