Создание и оформление градусной сетки с минутным и секундным шагами в QGIS

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


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

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

Создание сетки с минутным и секундным шагом

Создадим, для примера, сетку с шагом 1 минута по долготе и 30 секунд по широте.

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

В окне параметров создания регулярной сетки (Вектор→Выборка→Регулярная сетка) зададим необходимый шаг сетки.

  • Для минутной сетки шаг задается равным 1 / 60 = 0.0166666667.
  • Для секундной: 1 / 3600 = 0.0002777778. Т. е. в нашем случае, для 30-ти секундного шага: 0.0002777778 * 30 = 0.0083333333

Отредактируем полученные значения минимальных и максимальных широт и долгот, округлив минимальные значения в меньшую сторону, а максимальные – в большую. (Например, минимальную широту, равную 63.3447529439 округлим до 63, а максимальную широту равную 64.0787479439 округлим до 65).

Regular minute grid1.png

Произведем операцию вставки добавочных узлов в линии сетки (Вектор→Обработка геометрии→Добавить вершины). Мы рекомендуем вставлять хотя бы по одному узлу на каждый шаг сетки по долготе. В нашем случае сетка простирается от 70 до 73 градусов, т.е. на 73 - 70 = 3 градуса. Т.о. нам нужно добавить 60*3-1=179 дополнительных узлов.

Перепроецируем проект в ту СК в которой предполагается работать (например в UTM). Сохраним также и созданный нами слой сетки в этой СК: в менеджере слоев, кликнем правой кнопкой мыши и выберем пункт «Сохранить как» и в открывшемся диалоговом окне в графе «Система координат» укажем «Система координат проекта». Важно: далее все слои будем создавать в этой СК.

Преобразование десятичных градусов в градусы, минуты и секунды

Откроем теперь таблицу атрибутов полученного слоя: в графе COORD у нас координаты линий сетки, но они выражены в десятичных градусах. Нам же нужно отображать координаты в градусах, минутах и секундах.

Воспользуемся для этого калькулятором полей: внизу таблицы атрибутов активируем «режим редактирования» MActionToggleEditing.png и запустим «калькулятор полей» MActionCalculateField.png.

Вначале отделим дробную часть от целой, воспользуемся оператором деления по модулю, который возвращает остаток от деления. Создадим новое поле «DD1» с типом «десятичное число (real)», размер 20, точность 15. В выражении пропишем деление по модулю на 1:

"COORD" %1

Нажмем «ОК».

Regular minute grid2.png

Опять же с помощью калькулятора полей создадим поле «DD» (градусы) тип – целое, размер =3 и отделим целую часть от дробной, прописав выражение:

"COORD"- "DD1"

Снова воспользуемся MActionCalculateField.png и создадим поле «MM» (целое, размер 2) для расчета минут. Пропишем:

("DD1" * 60) - ("DD1" * 60)%1

(Примечание: выражение ("DD1" * 60) возвращает количество минут содержится в десятичном остатке градусов. Поскольку возвращенное значение содержит также десятичный остаток приходящийся на секунды, вычтем из него ("DD1" * 60)%1)

Создадим поле секунд (SS) (целое, размер 2) и пропишем выражение:

(("DD1" * 60)%1*60) - (("DD1" * 60)%1*60) %1

Теперь соберем из отдельных элементов (градусов, минут и секунд) результирующее поле подписи:

Создадим новое поле «label» (тип текст (string), длина 15) и пропишем выражение:

"DD" || 'º' || "MM" || '´' || "SS" || '´´ ' || "Type"

Сохраняем полученный слой MActionFileSave.png и завершаем редактирование MActionToggleEditing.png.

Подготовка рамки сетки

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

Создадим поле угла поворота «Angle» (тип – целое, размер – 3).

CASE WHEN "Type" = 'E' THEN  0 ELSE -90 END


Left, Center, Right Top, Cap, Half, Base, Bottom


Ссылки