Поддержка геоданных (PostGIS)
Описание
PostGIS - это расширение с открытым исходным кодом, которое предоставляет поддержку хранения объектов географических информационных систем (ГИС) в базе данных и возможность запрашивать их через SQL-запросы.
Расширение позволяет работать с геометрическими, географическими и растровыми объектами. Данные могут быть представлены в двумерной, трехмерной и четырехмерной системах координат.
В rpm/deb-пакете поставляются расширения:
postgis
;postgis_topology
;postgis_sfcgal
;postgis_raster
;postgis_tiger_geocoder
;address_standardizer
;address_standardizer_data_us
.
В отдельном rpm/deb-пакете поставляется расширение pgroutng
.
Дополнительные расширения, рекомендуемые к установке с postgis
, увеличивают возможности базовой версии PostGIS, предлагая дополнительные инструменты для работы с пространственными данными различного уровня сложности. Подробная информация о каждом дополнительном расширении содержится в официальной документации PostGIS.
Доработки
В СУБД Pangolin включены инструменты для работы с геоданными (Spatial).
В отличие от свободно распространяемой версии, предоставляемая в Pangolin функциональность исключает инструменты командной строки и графический интерфейс (GUI) для загрузки и выгрузки данных. Исключение связано с необходимостью указывать пароль пользователя в открытом виде. Кроме того, введены ограничения на импорт и экспорт растровых форматов, так как такие процедуры несут потенциальные риски безопасности. Загрузка и выгрузка данных в систему производится стандартным образом при работе с доверенным ресурсом.
Типы данных
В таблице ниже приведены типы данных, поддерживаемые расширением postgis
.
Тип данных | Описание |
---|---|
spheroid | Геометрический объект, представляющий сфероид (эллипсоид вращения), который используется для представления формы Земли. Сфероиды часто применяются в картографии и геодезии |
geometry | Основной тип данных для хранения двумерных геометрических объектов (point , linestring , polygon ). Этот тип данных поддерживает работу с различными системами координат |
box3d | Представляет трехмерный прямоугольник (параллелепипед), который охватывает геометрию. Используется для оптимизации запросов и ускорения поиска объектов |
box2d | Двумерный аналог box3d , представляет собой прямоугольную область, охватывающую двумерную геометрию. Применяется для оптимизации запросов в двумерном пространстве |
box2df | То же самое, что и box2d , но с использованием плавающей точки для повышения точности вычислений |
gidx | Внутренний тип данных, используемый системой индексов |
geography | Тип данных, аналогичный geometry , но учитывающий сферическую форму Земли. Используется для работы с глобальными координатами (широта/долгота) |
Дополнительные расширения, описанные в разделе «postgis. Поддержка геоданных» документа «Описание расширений продукта СУБД Pangolin», добавляют в базу данных элементы и процедуры для обработки пространственной информации.
Настройка
Установка используемых в рамках функционального решения расширений описана в разделе «postgis. Поддержка геоданных» документа «Описание расширений продукта СУБД Pangolin».
Сценарии использования
После активации postgis
, можно создавать и управлять геопространственными типами данных и использовать различные геопространственные функции.
Более подробная информация об управлении расширением, в том числе управление типами данных с помощью функций содержится в официальной документации PostGIS.
Создание геопространственной таблицы
Пример создания таблицы с геопространственными данными:
-
Создание таблицы:
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
geom GEOMETRY(Point, 4326)
); -
Вставка примеров данных:
INSERT INTO locations (name, geom) VALUES
('Location A', ST_GeomFromText('POINT(116.4074 39.9042)', 4326)),
('Location B', ST_GeomFromText('POINT(121.4737 31.2304)', 4326));
Использование postgis для геопространственных запросов
-
Запрос расстояния между двумя точками:
SELECT ST_Distance(
ST_GeomFromText('POINT(116.4074 39.9042)', 4326),
ST_GeomFromText('POINT(121.4737 31.2304)', 4326)
); -
Запрос на проверку, находится ли точка в заданной области:
SELECT name FROM locations
WHERE ST_Contains(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326),
geom
);
Особенности миграции с Oracle
Пустые значения postgis
не поддерживаются, поскольку они не имеют аналогов в Oracle Spatial
.
Значения NULL
для Oracle SRID
будут преобразованы в 0
и наоборот. Чтобы обеспечить правильное соответствие между идентификаторами систем координат (SRID
) Oracle и PostGIS, создайте файл srid.map
в каталоге общего доступа PostgreSQL. Каждая строка этого файла должна содержать пару чисел, разделенных пробелом: слева указывается значение SRID
из Oracle, справа - соответствующее значение SRID PostGIS
. Сохраняйте размер файла небольшим для обеспечения хорошей производительности миграционного процесса.
Поддерживаются только такие геометрические типы, как: POINT
, LINE
, POLYGON
, MULTIPOINT
, MULTILINE
и MULTIPOLYGON
в двух и трех измерениях.