Статьи

Формат GeoPackage и работа с ним в QGIS

2024-08-13 17:36 ГИС Туториалы
Время прочтения: 5 минут
Когда-то давно в 2022 году мы опубликовали статью “Почему нам стоит отказаться от шейп-файла?”, но так и не написали статью о том, на что переходить и почему. Исправляемся!
Все указанные далее особенности и фишки актуальны на лето 2024 года и самую свежую версию QGIS в момент написания статьи 3.38.1 “Grenoble”.

Речь пойдет о GeoPackage

GeoPackage – формат, который с нами уже 10 лет. Самое важное о нем:
  • Позволяет хранить в себе растры, векторы и даже стили и проекты QGIS
  • Представляет собой контейнер SQLite базы данных
  • Состоит только из одного файла с расширением .gpkg
  • Геометрия хранится в формате WKB
  • Один файл GeoPackage может содержать в себе несколько слоев, как растровых, так и векторных
  • Векторные данные хранятся в привычном виде: отдельный слой — отдельный тип геометрии, как в большинстве форматов. Это сделано для того, чтобы программному обеспечению или скриптам, которые вы используете, было проще читать файлы и однозначно понимать, с какой геометрией они имеют дело
  • Пространственный индекс создается сразу, при необходимости его можно обновить в "Свойствах слоя"
  • Зафиксирована кодировка, чтобы пользователю не приходилось подбирать нужную
  • Названия атрибутов не ограничены по длине
  • Значения текстовых полей не ограничены длиной в 255 знаков
  • Растровые данные могут храниться только с типом данных Byte (т.е. значения в пикселях могут быть от 0 до 255 и только целочисленные). Это не всегда удобно, но спасает во многих проектах оцифровки карт, например, чтобы не хранить создаваемые векторы и исходные растры отдельно друг от друга
  • Размер файла не ограничен, независимо от того, что в нем хранится.

GeoPackage в QGIS

Если у вас есть файл .gpkg, то в QGIS его можно открыть любым привычным способом. Еще раз обращу внимание, что даже если файл .gpkg один, в нем может быть несколько слоев. Весь список слоев отобразится, когда вы перетащите файл из папки в интерфейс QGIS.
Открытый файл в QGIS можно изучить стандартными способами, а можно — через инструмент работы с базами данных. Даже если файл не открыт в QGIS, но подключен через Браузер, файл отобразится в списке вместе со всеми слоями. Там же к любому слою можно сформировать SQL-запрос.

Создание нового файла с нуля

Механизм создания файла во многом схож с созданием нового шейп-файла, однако имеет свои особенности. В верхней строке меню выбираем "Слой" — "Создать слой" и вариант "Создать новый слой GeoPackage". Если вы создаете новый файл и новый слой, то в настройках нужно указать и название файла, и название слоя.
В процессе также нужно указать тип геометрии и систему координат. Можно добавить атрибуты и описание слоя. Если вы заходите добавить новый пустой слой в тот же самый файл, то через этот же инструмент нужно выбрать тот же файл и указать новое имя для слоя и соответствующие настройки. При сохранении QGIS спросит, перезаписать ли файл или добавить новый слой.
В новом созданном файле будут отображаться оба слоя. А в Свойствах слоя можно найти все указанные настройки и описания.

Сохранение слоя из QGIS

При экспорте слоя (Сохранить как…) нужно иметь в виду одну особенность GeoPackage. Возможно, вы с этим никогда не столкнетесь, если будете придерживаться правила хранения уникальных ID объектов в атрибуте fid (и они действительно будут уникальными).
Что будет, если это правило нарушить? Представим, что у нас есть слой, у которого в атрибуте id хранятся не уникальные целочисленные значения.
Если при сохранении файла в настройках мы укажем этот атрибут в качестве ключевого, то GeoPackage это не понравится.
В ошибке будет указано, что атрибут не уникален и в файл была записана только часть объектов. А так как это ошибка, то файл даже не добавится в проект, так что можно исправить эту ошибку и пересохранить файл.

Инструмент "Package layers"

Один из распространенных инструментов для создания GeoPackage, помимо создания пустых файлов или конвертации из других форматов, — это инструмент Package layers (Упаковка слоев).
Если у вас уже есть набор слоев, которые хранятся отдельными файлами или вообще являются временными файлами, а вы планируете и дальше работать с ними, то их можно упаковать в один файл. Для этого в Инструментах анализа нужно найти инструмент Package layers (или "Упаковка слоев" на русском).
В нем выберите слои, которые вы хотите сохранить вместе, и отметьте их галочками.
Включите или отключите галочки-настройки в основном окне инструмента и укажите путь сохранения файла.
Все, теперь по указанному пути у вас появился новый файл .gpkg, который содержит все указанные вами слои.

Сохранить стиль

Если ваш слой уже сохранен в GeoPackage, то настроенный в QGIS стиль можно сохранить туда же и сделать стилем по умолчанию.
Для этого нужно зайти в "Свойства слоя" — "Стиль" и выбрать сохранение стиля.
Выбрать настройку сохранения стиля в базу данных источника слоя (файл GeoPackage в нашем случае) и установить галочку, чтобы сделать стиль слоя по умолчанию.
Теперь при открытии этого слоя в QGIS он сразу будет отображаться с сохраненным стилем.

Сохранить проект

Кажется, самая удобная фишка GeoPackage — это возможность хранить в себе одновременно слои, стили и сразу проект, к которому эти слои могут относиться. Если в одном файле вместе хранятся слои и проект, то можно не заботиться об относительных или абсолютных полях при передаче проекта кому-то еще, не заморачиваться с дополнительными модулями типа Qpackage, а просто сохранить весь проект и данные в один файл GeoPackage.
Для этого нужно зайти в меню Проект — Сохранить в… — GeoPackage
Выберите существующий файл с расширением .gpkg и сохраните проект. Теперь в базе данных хранятся и слои, и проект, который можно открыть напрямую в QGIS, например, из Браузера.
Для любого отдельно взятого случая подойдут свои форматы и методы хранения данных. Надеюсь, что и GeoPackage найдет свое место в ваших папках. А чтобы лучше ориентироваться в QGIS — проходите наш курс “Введение в QGIS”. На нем мы разбираем самое важное для работы с пространственными данными⭐

Источник

Материал подготовила Наталья Волгушева