Перейти к основному содержимому

Поддержка геоданных (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.

Создание геопространственной таблицы

Пример создания таблицы с геопространственными данными:

  1. Создание таблицы:

    CREATE TABLE locations (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    geom GEOMETRY(Point, 4326)
    );
  2. Вставка примеров данных:

    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 для геопространственных запросов

  1. Запрос расстояния между двумя точками:

    SELECT ST_Distance(
    ST_GeomFromText('POINT(116.4074 39.9042)', 4326),
    ST_GeomFromText('POINT(121.4737 31.2304)', 4326)
    );
  2. Запрос на проверку, находится ли точка в заданной области:

    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 в двух и трех измерениях.