Создание регулярных сеток в QGIS: различия между версиями
Bolotoved (обсуждение | вклад) |
Bolotoved (обсуждение | вклад) |
||
Строка 61: | Строка 61: | ||
=== Создание градусной сетки === | === Создание градусной сетки === | ||
Теперь построим на этот же регион (ХМАО) градусную сетку. | |||
Важно: убедимся, что проект находится в ГСК: Установки→Свойства проекта→Система координат. В графе системы координат выберем необходимую ГСК, например WGS84. | |||
В основном меню QGIS выполняем Вектор→Выборка→Регулярная сетка | |||
Охват сетки возьмем с большим запасом, чтобы при последующем перепроектировании, вся карта была покрыта сеткой (для этого можно предварительно оценить охват спроецированной карты с помощью модуля захвата координат). | |||
В графе «Параметры» зададим размер ячейки 3 градуса по долготе и 2 градуса по широте (для этого надо снять галочку «Зафиксировать соотношение сторон 1:1» | |||
Укажем тип сетки: в то время как полигональные сетки нужны для статистических расчетов, для построения координатной сетки удобнее использовать линии: | |||
[[Файл:06_regular_grids.png|700px|thumb|center]] | |||
Нажмем OK и дождемся окончания процесса построения сетки. | |||
[[Файл:07_regular_grids.png|700px|thumb|center]] | |||
На первый взгляд все идеально, но попробуем поменять проекцию вида на любую, где широтные линии градусной сетки преобразуются в дуги, например в использованную ранее проекцию Альберса для ХМАО: | |||
Видно, что долготы, которые должны были стать плавными дугами, так и остались прямыми. | |||
[[Файл:08_regular_grids.png|700px|thumb|center]] | |||
Это связано с особенностью механизма перепроецирования многих современных ГИС: дуга представляет из себя кривую с изломами в узлах (на рисунке узлы сетки помечены красными крестиками). После создания сетки промежуточных узлов нет, поэтому и перепроецирование проходит некорректно. | |||
Исправить эту ситуацию можно добавив в сегменты линий (или полигонов) дополнительные узлы с помощью инструмента Вектор→Обработка геометрии→Добавить вершины: | |||
Добавим по 10 вершин на сегмент по широте таким образом, чтобы дополнительные узлы встали точно в местах пересечения широт и долгот. Если в нашем случае сетка включает 14 3-х градусных сегментов, получаем 14*10-1=139 дополнительных узла): Вектор→Обработка геометрии→Добавить вершины. | |||
Выберем из выпадающего списка файл с полученной нами сеткой и добавим 139 дополнительных узлов в каждый долготный сегмент сетки. | |||
Рекомендация: добавлять узлы не в существующий файл, а создавать новый, это позволит избежать как своих ошибок, так и программных сбоев. Итак, заполненное диалоговое окно примет вид: | |||
[[Файл:09_regular_grids.png|700px|thumb|center]] | |||
Убедимся, что при добавлении новых узлов они пришлись на места пересечения широт и долгот: | |||
[[Файл:10_regular_grids.png|700px|thumb|center]] | |||
В атрибутивной таблице слоя сетки присутствует поле «COORD» в нем содержится координаты долгот для долготных линий и координаты широт для широтных линий. После подписывания слоя по полю «COORD» и наложения новой сетки на карту в проекции Альберса получаем вполне пристойный результат: | |||
[[Файл:11_regular_grids.png|700px|thumb|center]] | |||
=== Оформление градусной сетки === | |||
В настоящий момент в макетах карт 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|700px|thumb|center]] | |||
Результатом выполнения этой операции является точечный шейп-файл с координатами линий сетки. | |||
[[Файл:14_regular_grids.png|700px|thumb|center]] | |||
Подпишем точки созданного файла, добавив значок градуса. | |||
<pre>"COORD_1" || 'º'</pre> |
Версия от 05:28, 3 мая 2012
В статье рассматриваются алгоритмы создания градусной и метрической полигональных сеток с помощью QGIS. Отдельно затрагивается вопрос оформления градусной сетки нанесенной на спроектированные данные.
Создание регулярных сеток в QGIS
Существует ряд задач для решения которых необходимо построить регулярную полигональную сетку с заданным шагом, например, подсчет чего-либо на ячейку или наложение координатной сетки на карту.
QGIS позволяет строить 3 типа регулярных сеток:
- градусная сетка (длина и ширина полигона равна заданному количеству градусов широты и долготы),
- метрическая сетка (длина и ширина полигонов задается в метрах)
- гексагональная регулярная сетка в виде сотовых ячеек (модуль MMQGIS).
Важно: тип размерности сетки (градусы или метры) зависит от проекции вида: чтобы построить градусную сетку необходимо, чтобы вид находился в географической системе координат (ГСК), и, напротив, при построении метрических сеток, необходимо, чтобы вид находился в какой-либо прямоугольной проекции.
Алгоритмы построения разных типов сеток различаются, рассмотрим каждый из них в отдельности.
Создание метрической сетки
Допустим, перед нами стоит задача разбить территорию административного субъекта (в нашем случае Ханты-Мансийского автономного округа) на квадраты 20*20 км для обобщения каких-либо количественных данных, например, для учета биоразнообразия в каждом таком квадрате.
Воспользуемся данными OpenStreetMap в формате Shape.
Откроем слой с границами ХМАО и зададим проекту проекцию коническую равновеликую Альберса для ХМАО:
+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
Сохраним слой границ ХМАО в СК проекта, т.е. в проекции Альберса. Для этого в менеджере слоев щелкнем правой кнопкой мыши по нему и выберем пункт «Сохранить как».
В открывшемся диалоговом окне в графе «Система координат» выберем «Система координат проекта». Поскольку ранее мы установили в качестве системы координат проекта проекцию Альберса, то она и будет задана для нового слоя.
Построим необходимую нам сетку 200*200 км, для этого выполним: Вектор → Выборка → Регулярная сетка.В случае, если это меню недоступно, убедитесь, что у вас активирован модуль fTools (Модули→Управление модулями).
В открывшемся диалоговом окне нажмем на кнопку «Получить из слоя». В параметрах укажем размер ячейки в метрах, поскольку теперь слой спроектирован: 200000.
В результате получим такую сетку:
Теперь можно убрать «лишние» не захватывающие территорию РФ ячейки. Для этого выполним: Вектор → Пространственный запрос → Пространственный запрос (Если эта функция не активна, убедитесь, что в меню Модули → Управление модулями у вас активирован модуль «Пространственные запросы».
В открывшемся диалоговом окне: в графе «Выбрать объекты в слое» укажем слой сетки в графе «Где объект» выберем пункт «Пересекает» в графе «Объекты слоя» выберем слой границ РФ
Сохраним полученное выделение в виде отдельного слоя: в менеджере слоев щелкнем правой кнопкой мыши по слою сетки и выберем пункт «Сохранить выделение как». В результате имеем:
Создание градусной сетки
Теперь построим на этот же регион (ХМАО) градусную сетку.
Важно: убедимся, что проект находится в ГСК: Установки→Свойства проекта→Система координат. В графе системы координат выберем необходимую ГСК, например WGS84.
В основном меню QGIS выполняем Вектор→Выборка→Регулярная сетка
Охват сетки возьмем с большим запасом, чтобы при последующем перепроектировании, вся карта была покрыта сеткой (для этого можно предварительно оценить охват спроецированной карты с помощью модуля захвата координат).
В графе «Параметры» зададим размер ячейки 3 градуса по долготе и 2 градуса по широте (для этого надо снять галочку «Зафиксировать соотношение сторон 1:1»
Укажем тип сетки: в то время как полигональные сетки нужны для статистических расчетов, для построения координатной сетки удобнее использовать линии:
Нажмем OK и дождемся окончания процесса построения сетки.
На первый взгляд все идеально, но попробуем поменять проекцию вида на любую, где широтные линии градусной сетки преобразуются в дуги, например в использованную ранее проекцию Альберса для ХМАО: Видно, что долготы, которые должны были стать плавными дугами, так и остались прямыми.
Это связано с особенностью механизма перепроецирования многих современных ГИС: дуга представляет из себя кривую с изломами в узлах (на рисунке узлы сетки помечены красными крестиками). После создания сетки промежуточных узлов нет, поэтому и перепроецирование проходит некорректно. Исправить эту ситуацию можно добавив в сегменты линий (или полигонов) дополнительные узлы с помощью инструмента Вектор→Обработка геометрии→Добавить вершины: Добавим по 10 вершин на сегмент по широте таким образом, чтобы дополнительные узлы встали точно в местах пересечения широт и долгот. Если в нашем случае сетка включает 14 3-х градусных сегментов, получаем 14*10-1=139 дополнительных узла): Вектор→Обработка геометрии→Добавить вершины. Выберем из выпадающего списка файл с полученной нами сеткой и добавим 139 дополнительных узлов в каждый долготный сегмент сетки. Рекомендация: добавлять узлы не в существующий файл, а создавать новый, это позволит избежать как своих ошибок, так и программных сбоев. Итак, заполненное диалоговое окно примет вид:
Убедимся, что при добавлении новых узлов они пришлись на места пересечения широт и долгот:
В атрибутивной таблице слоя сетки присутствует поле «COORD» в нем содержится координаты долгот для долготных линий и координаты широт для широтных линий. После подписывания слоя по полю «COORD» и наложения новой сетки на карту в проекции Альберса получаем вполне пристойный результат:
Оформление градусной сетки
В настоящий момент в макетах карт QGIS возможность накладывать градусную сетку на спроектированные данные отсутствует. Тем не менее, существуют различные способы наложения и последующего оформления градусных сеток вручную. Рассмотрим один из таких способов.
Сохраним полученную сетку с дополнительными узлами в той СК, которая предполагается для использования в окончательном макете карты. В нашем случае это проекция Альберса для ХМАО.
С помощью модуля «Improved Polygon Capturing» создадим полигон – рамку будущей карты, вдоль которой будем выстраивать подписи. Для этого создадим новый полигональный слой с именем map_border в проекции Альберса для ХМАО и включим режим редактирования.
После активации режима редактирования станет доступной панель модуля «Improved Polygon Capturing». Выберем инструмент рисования прямоугольника от угла (Rectangle by Extent- ) и обведем рамку нашей будущей карты. Конвертируем полученную рамку карты (слой map_border) в линейный слой: Вектор → Обработка геометрии → Преобразовать полигоны в линии. Назовем полученный линейный слой map_border_line.
Создадим точечный слой пересечений линий координатной сетки и полученной на предыдущем шаге линии рамки карты: Вектор → Анализ → Пересечения линий. В качестве исходного признака классификации выберем поле координат «COORD».
Результатом выполнения этой операции является точечный шейп-файл с координатами линий сетки.
Подпишем точки созданного файла, добавив значок градуса.
"COORD_1" || 'º'