Использование PostGIS

Обзор

Расширение PostGIS реализует поддержку хранения, индексирования и выполнения запросов к геопространственным данным, увеличивая возможности PostgreSQL по работе с такими данными.

PostGIS позволяет выполнять операции с различными типами пространственных данных, такими как точки, линии, многоугольники и объекты мультигеометрии в форматах 2D и 3D. Методы PostGIS реализуют фильтрацию и анализ пространственных данных, измерение расстояний и площадей, определение пересечения геометрических объектов, буферизацию и т.д. Расширение также предоставляет инструменты для обработки геометрических и растровых данных и выполнения геокодирования.

Пакет, требуемый для установки postgis, поставляется с ADP. Чтобы использовать postgis, выполните команду CREATE EXTENSION в той базе данных, в которую необходимо поставить расширение:

CREATE EXTENSION postgis;
ПРИМЕЧАНИЕ
Если расширение postgis создано в базе данных template1, используемой в качестве шаблона БД по умолчанию, во всех вновь создаваемых базах данных будет установлено это расширение.

ADP использует версию 3.4.1 расширения postgis. Чтобы это проверить, выполните следующий запрос:

SELECT extversion FROM pg_extension
    WHERE extname = 'postgis';
 extversion
------------
3.4.1

Также можно использовать следующую функцию postgis_full_version, которая возвращает полную версию PostGIS и конфигурацию сборки:

SELECT postgis_full_version();
 POSTGIS="3.4.1 16.3_arenadata3-14-g1364ce1" [EXTENSION] PGSQL="160" GEOS="3.10.2-CAPI-1.16.0" PROJ="8.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/pgsql/.local/share/proj DATABASE_PATH=/usr/
share/proj/proj.db" LIBXML="2.9.13" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)"

Типы данных geometry и geography

PostGIS реализует геометрическую модель OGC в виде типов данных PostgreSQL geometry и geography.

Geometry

Geometry — абстрактный тип. Значения типа geometry относятся к одному из его подтипов, представляющих собой различные виды геометрических фигур. Подтипы включают:

Типы geometry моделируют фигуры в двумерной декартовой системе координат. PolyhedralSurface, Triangle и TIN также могут определять фигуры в трехмерном пространстве. Размер и положение фигур устанавливаются их координатами. Каждая координата имеет значения X и Y, определяющие ее положение на плоскости. Фигуры строятся из точек, заданных одной координатой, или отрезков, заданных двумя координатами.

Координаты могут содержать необязательные значения ординат Z и M. Z часто используется для представления высоты. Ордината M содержит значение меры, которое может являться, например, временем или расстоянием. Если значения Z или M присутствуют в геометрическом значении, они должны быть определены для каждой точки геометрического объекта.

Если геометрический объект имеет ординаты Z или M, то размерность координат трехмерная; если же есть и Z, и M, то размерность координат четырехмерная. Таким образом, существует четыре варианта координат:

  • XY

  • XYZ

  • XYM

  • XYZM

Значение геометрического типа может быть пустым. Пустые значения не содержат вершин (для атомарных геометрических типов) или элементов (для коллекций).

Стандарт SFA определяет, что пространственные объекты должны включать идентификатор пространственной системы координат (Spatial Reference System Identifier, SRID). SRID необходим для добавления пространственных объектов в базу данных.

Пространственная система координат (SRS) определяет, как объект типа geometry соотносится с точками на поверхности Земли. Существует три типа SRS:

  • Геодезическая SRS использует географические координаты (долготу и широту), которые отображаются непосредственно на поверхности Земли.

  • Проекционная SRS использует математическое проекционное преобразование для "сглаживания" сферической поверхности Земли и приведения ее к плоскости. Она присваивает координаты местоположения, которые позволяют напрямую измерять такие величины, как расстояния, площади и углы.

  • Локальная SRS — это декартова система координат, не привязанная к поверхности Земли. Для ее использования в PostGIS установите значение SRID равным 0.

Geography

Тип данных PostGIS geography обеспечивает встроенную поддержку пространственных объектов, представленных в географических координатах (называемых также геодезическими координатами или широтой и долготой). Географические координаты выражены в градусах. Тип geography поддерживает большинство подтипов geometry, за исключением кривых, TIN и POLYHEDRALSURFACE.

Основой типа данных PostGIS geometry является плоскость. Кратчайший путь между двумя точками на плоскости — прямая линия. Это означает, что функции, вычисляющие площади, расстояния, длины, пересечения и т.д., используют векторы прямых линий и декартову математику. Это упрощает их реализацию и ускоряет выполнение, но также делает их неточными для точек на поверхности Земли.

Тип данных PostGIS geography основан на сферической модели. Кратчайшим путем между двумя точками на сфере является дуга окружности. Функции, вычисляющие площади, расстояния, длины и пересечения географических объектов, используют для расчета дуги на сфере. Эти функции обеспечивают более точные результаты, так как учитывают форму Земли.

Поскольку математика, лежащая в основе типа geography, сложнее, для него определено меньше функций, чем для типа geometry. В качестве обходного пути можно преобразовывать объекты между типами geometry и geography и обратно, чтобы использовать функции для типа geometry.

Как и геометрические данные, географические данные связаны с SRS через SRID. Можно использовать любую геодезическую SRS, заданную в таблице PostGIS spatial_ref_sys. Вы также имеете возможность добавить собственную геодезическую SRS. См. User-Defined Spatial Reference Systems.

Для всех систем SRS функции измерения (ST_Distance, ST_Length, ST_Perimeter, ST_Area и другие) возвращают значения в метрах.

РЕКОМЕНДАЦИЯ

Тип geography очень удобен, если ваши данные имеют глобальный масштаб и вы не хотите работать с проецируемыми системами координат. Однако вычисления на сфероиде очень ресурсозатратны, поэтому многие запросы будут медленнее, чем при работе с типом geometry.

Если вы можете поместить свои данные в плоскую систему координат, рассмотрите возможность использования типа geometry, а не geography.

Создание таблиц со столбцами geometry и geography

Используйте стандартный оператор SQL CREATE TABLE, чтобы создать таблицу для хранения данных типов geometry и geography. Оба типа поддерживают два необязательных модификатора в определении столбца — [geometry]|[geography] (<type>, <SRID>):

  • <type> — ограничивает типы фигур и их размерность, разрешенные в столбце. Значением может быть любой из поддерживаемых подтипов geometry или geography (например, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION). Обратите внимание, что тип geography не поддерживает кривые, TIN и POLYHEDRALSURFACE. Модификатор позволяет установить ограничение размерности координат с помощью суффиксов: Z, M и ZM. Например, LINESTRINGM допускает только линии с тремя измерениями и рассматривает третье измерение как меру, POINTZM требует четырехмерных данных (XYZM).

  • <SRID> — ограничивает SRID определенным числом. Если этот параметр опущен, для типа geometry SRID устанавливается равным 0, для типа geography — равным 4326.

Примеры создания столбцов таблицы для хранения объектов geometry and geography

Объекты любого подтипа geometry со значением SRID, используемым по умолчанию (0)

 

CREATE TABLE geom_table1(
                    id SERIAL PRIMARY KEY,
                    name VARCHAR(64),
                    geometry_column geometry);
Трехмерные объекты geometry POINT со значением SRID, используемым по умолчанию (0)

 

CREATE TABLE geom_table2(
                    id SERIAL PRIMARY KEY,
                    geometry_column geometry(POINTZ));
Двумерные объекты geometry POLYGON с SRID 4326 (пространственные данные, использующие географические координаты)

 

CREATE TABLE geom_table3(
                    id SERIAL PRIMARY KEY,
                    geometry_column geometry(POLYGON,4326));
Трехмерные объекты geography POINT с SRID по умолчанию (4326)

 

CREATE TABLE geo_table1(
                    id SERIAL PRIMARY KEY,
                    geo_column geography(POINTZ));
Двумерные объекты geography POLYGON с SRID 4267

 

CREATE TABLE geo_table2(
                    id SERIAL PRIMARY KEY,
                    geo_column geography(POLYGON,4267));

В таблице может быть более одного столбца типа geometry или geography. Можно указать несколько столбцов в команде CREATE TABLE или добавить столбец с помощью ALTER TABLE:

ALTER TABLE geom_table3 ADD COLUMN geometry_column2 geometry(LINESTRING,4326);

ALTER TABLE geo_table1 ADD COLUMN geo_column2 geography(LINESTRING,4326);
ПРИМЕЧАНИЕ
Данные типа geometry могут быть автоматически преобразованы к типу geography, если они имеют SRID 4326.

Все столбцы типа geometry регистрируются в системном представлении geometry_columns. Просмотреть список столбцов можно с помощью запроса:

SELECT * FROM geometry_columns;
 f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid |    type
-----------------+----------------+--------------+-------------------+-----------------+------+------------
 postgres        | public         | geom_table1  | geometry_column   |               2 |    0 | GEOMETRY
 postgres        | public         | geom_table2  | geometry_column   |               3 |    0 | POINT
 postgres        | public         | geom_table3  | geometry_column   |               2 | 4326 | POLYGON
 postgres        | public         | geom_table3  | geometry_column2  |               2 | 4326 | LINESTRING

Все столбцы типа geography регистрируются в системном представлении geography_columns. Можно выполнить запрос к geography_columns, чтобы просмотреть список столбцов:

SELECT * FROM geography_columns;
 f_table_catalog | f_table_schema | f_table_name | f_geography_column | coord_dimension | srid |    type
-----------------+----------------+--------------+--------------------+-----------------+------+------------
 postgres        | public         | geo_table1   | geo_column         |               3 | 4326 | PointZ
 postgres        | public         | geo_table2   | geo_column         |               2 | 4267 | Polygon
 postgres        | public         | geo_table1   | geo_column2        |               2 | 4326 | LineString

Преобразование значений типов geometry и geography для внешнего использования

Спецификация OGC SFA определяет два формата представления значений типов geometry и geography для внешнего использования: Well-Known Text (WKT) и Well-Known Binary (WKB).

WKT — это стандартное текстовое представление пространственных данных. Примеры:

POINT(0 0)

POINT ZM (0 0 0 0)

LINESTRING(0 0,1 1,1 2)

Формат Well-Known Binary (WKB) реализует представление пространственных данных в двоичном виде (массив байтов).

Помимо поддержки стандарта SFA, PostGIS определяет расширенные форматы EWKB и EWKT (Extended Well-Known Binary и Extended Well-Known Text). Они включают информацию о SRID и позволяют производить явное приведение типов (с использованием оператора ::):

SELECT 'SRID=4326;POINT(0 0)'::geography;
                     geography
----------------------------------------------------
 0101000020E610000000000000000000000000000000000000

В таблице ниже перечислены функции, которые преобразуют значения типов geometry и geography в текстовое и двоичное представление и выполняют обратное преобразование (PostGIS использует префикс ST_ для пространственных функций, чтобы следовать стандарту SFA).

Название Поддерживаемый тип Описание

ST_GeomFromText

geometry

Создает объект PostGIS geometry из формата WKT

ST_AsText

geometry, geography

Возвращает объект PostGIS geometry или geography в формате WKT

ST_GeomFromWKB

geometry

Создает объект PostGIS geometry из формата WKB

ST_AsBinary

geometry, geography

Возвращает объект PostGIS geometry или geography в формате WKB

ST_GeomFromEWKT

geometry

Создает объект PostGIS geometry из формата EWKT, содержащего SRID

ST_AsEWKT

geometry, geography

Возвращает объект PostGIS geometry или geography в формате EWKT, включающем SRID

ST_GeomFromEWKB

geometry

Создает объект PostGIS geometry из формата EWKB, содержащего SRID

ST_AsEWKB

geometry

Возвращает объект PostGIS geometry в формате EWKB, включающем SRID

Примеры использования функций

ST_GeomFromText и ST_AsText

 

Следующий код создает объект geometry из формата WKT и вставляет в таблицу geom_table1, приведенную выше:

INSERT INTO geom_table1 (name, geometry_column)
  VALUES ( 'point1', ST_GeomFromText('POINT(15 25)', 0));

SELECT ST_AsText(geometry_column) from geom_table1 WHERE name = 'point1';
 st_astext
--------------
 POINT(15 25)
ST_GeomFromWKB и ST_AsBinary

 

Следующий код создает объект geometry из формата WKB и вставляет в таблицу geom_table1, приведенную выше:

INSERT INTO geom_table1 (name, geometry_column)
  VALUES (
        'point2',
        ST_GeomFromWKB('\x0101000000000000000000f03f000000000000f03f',0));

SELECT ST_AsText(geometry_column), ST_AsBinary(geometry_column) from geom_table1 WHERE name = 'point2';
 st_astext  |                 st_asbinary
------------+----------------------------------------------
 POINT(1 1) | \x0101000000000000000000f03f000000000000f03f
ST_GeomFromEWKT и ST_AsEWKT

 

Следующий код создает объект geometry из формата EWKT и вставляет в таблицу geom_table1:

INSERT INTO geom_table1 (name, geometry_column)
  VALUES ( 'point3',ST_GeomFromEWKT('SRID=4326;POINTM(-138 54 12)'));

SELECT ST_AsEWKT(geometry_column) from geom_table1 WHERE name = 'point3';
          st_asewkt
------------------------------
 SRID=4326;POINTM(-138 54 12)
ST_GeomFromEWKB и ST_AsEWKB

 

Следующий код создает объект geometry из формата EWKB и вставляет в таблицу geom_table1, приведенную выше:

INSERT INTO geom_table1 (name, geometry_column)
  VALUES (
        'point4',
        ST_GeomFromEWKB(E'\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344J=\\013B\\312Q\\300n\\303(\\010\\036!E@''\\277E''K\\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q\\300p\\231\\323e1!E@'));

SELECT ST_AsEWKT(geometry_column), ST_AsEWKB(geometry_column) from geom_table1 WHERE name = 'point4';
                                      st_asewkt                                      |                                                          st_asewkb
-------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------
 SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) | \x0102000020ad10000003000000e44a3d0b42ca51c06ec328081e21454027bf45274bca51c0f67b629d2a214540957cec2e50ca51c07099d36531214540

Методы PostGIS для типов geometry и geography

Этот раздел содержит примеры использования некоторых популярных методов. За полным списком методов обратитесь к документации PostGIS.

Обратите внимание, что некоторые методы, работающие с типом geography, имеют дополнительный параметр use_spheroid, который определяет, следует ли выполнять вычисления расстояния и площади на сфероиде. Если для параметра use_spheroid установлено значение true (значение по умолчанию), метод вычисляет расстояние или площадь, используя сфероид, указанный в SRID (например, WGS 84). Если use_spheroid имеет значение false, вычисления выполняются на сферической модели, что быстрее, но менее точно.

ST_Distance

Для типов geometry ST_Distance возвращает минимальное двумерное декартово расстояние между двумя объектами в проецируемых единицах. В данном примере это градусы, так как они являются единицей измерения в SRID 4326, поскольку это географическая система координат.

SELECT ST_Distance(
    'SRID=4326;POINT(10 10)'::geometry,
    'SRID=4326;POINT(10 20)'::geometry );
 st_distance
-------------
     10

Для типов geography ST_Distance возвращает минимальное геодезическое расстояние между двумя географическими объектами в метрах, вычисляемое на сфероиде, определенном SRID.

SELECT ST_Distance(
    'SRID=4326;POINT(10 10)'::geography,
    'SRID=4326;POINT(10 20)'::geography);
        st_distance
-----------------------------
     1106511.42093726

ST_Intersects

ST_Intersects возвращает true, если два объекта geometry пересекаются. Объекты geometry считаются пересекающимися, если у них есть общая точка.

SELECT ST_Intersects(
    'SRID=4326;LINESTRING(-22.21212 12.4447,-22.21212 12.4448)'::geometry,
    'SRID=4326;POINT(-22.21212 12.4447)'::geometry);
 st_intersects
---------------
t
SELECT ST_Intersects(
    'SRID=4326;LINESTRING(-22.21212 12.4447,-22.21212 12.4448)'::geometry,
    'SRID=4326;POINT(-22.21212 12.444699999)'::geometry);
 st_intersects
---------------
f

Для объектов geography используется допуск расстояния 0,00001 метра — точки, находящиеся очень близко, считаются пересекающимися.

SELECT ST_Intersects(
    'SRID=4326;LINESTRING(-22.21212 12.4447,-22.21212 12.4448)'::geography,
    'SRID=4326;POINT(-22.21212 12.444699999)'::geography);
 st_intersects
---------------
t

ST_Area

Функция ST_Area возвращает площадь многоугольника. Для типов geometry вычисляется двумерная декартова (плоская) область в единицах измерения, соответствующих SRID.

INSERT INTO geom_table1 (name, geometry_column)
  VALUES ('polygon1',ST_GeomFromEWKT('SRID=4326;POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1))'));

SELECT ST_Area(geometry_column) from geom_table1 WHERE name = 'polygon1';
 st_area
---------
      15

Для типов geography площадь определяется в квадратных метрах. Приведенный ниже код преобразует polygon1 к типу geography и вычисляет площадь многоугольника с различными значениями параметра use_spheroid: true — точные вычисления на сфероиде; false — приблизительные вычисления на сферической модели.

SELECT ST_Area(geometry_column::geography, true) from geom_table1 WHERE name = 'polygon1';
      st_area
--------------------
 184564470319.76245
SELECT ST_Area(geometry_column::geography, false) from geom_table1 WHERE name = 'polygon1';
      st_area
-------------------
 185388539247.5091

ST_Within

Метод ST_Within возвращает true, если все точки первого указанного объекта geometry лежат внутри второго объекта geometry. Оба объекта geometry должны иметь одинаковый SRID. Код ниже определяет, принадлежат ли указанные точки (POINT(3 3), POINT(5 5)) объекту polygon1 в geom_table1.

SELECT ST_Within('SRID=4326;POINT(3 3)'::geometry,geometry_column) FROM
(SELECT geometry_column from geom_table1 WHERE name = 'polygon1');
 st_within
-----------
 t
SELECT ST_Within('SRID=4326;POINT(5 5)'::geometry,geometry_column) FROM
(SELECT geometry_column from geom_table1 WHERE name = 'polygon1');
 st_within
-----------
 f

Тип данных raster

PostGIS поддерживает еще один тип пространственных данных, называемый растр (raster). Растровые данные представляют собой n-мерную матрицу, состоящую из пикселей и слоев (band). Каждый пиксель хранит значение, соответствующее каждому слою. Например, трехслойный растр, который представляет собой изображение RGB, будет иметь три значения для каждого пикселя, соответствующие слоям: красный, зеленый, синий. Таким образом, растровые данные представляют собой матрицу, расположенную на системе координат. Каждый пиксель может хранить не только цвет, но и любые дополнительные данные: температуру, высоту над уровнем моря, уровень загрязнения воздуха и т.д.

Функциональность для работы с растровыми объектами доступна после установки отдельного расширения postgis_raster:

CREATE EXTENSION postgis_raster;

Ниже приведен пример создания таблицы для хранения растровых данных.

Создайте таблицу со столбцом типа raster:

CREATE TABLE raster_table(name varchar, raster_column raster);

Добавьте данные в таблицу. Используйте функцию ST_Letters, чтобы преобразовать текст в объект geometry, а функцию ST_AsRaster для конвертации типа geometry в raster.

INSERT INTO raster_table(name, raster_column)
    SELECT f.word, ST_AsRaster(geometry_text, width=>150, height=>150)
FROM (VALUES ('Test'), ('Raster') ) AS f(word), ST_Letters(word) AS geometry_text;

Функция ST_MetaData позволяет просматривать метаданные объектов raster:

SELECT name, metadata.*
   FROM raster_table, ST_MetaData(raster_column) AS metadata;
  name  | upperleftx | upperlefty | width | height |       scalex       |       scaley        | skewx | skewy | srid | numbands
--------+------------+------------+-------+--------+--------------------+---------------------+-------+-------+------+----------
 Test   |          0 |       75.4 |   150 |    150 | 1.0778839468650032 | -0.5086666666666667 |     0 |     0 |    0 |        1
 Raster |          0 |       75.4 |   150 |    150 | 1.7226319023207244 | -0.5086666666666667 |     0 |     0 |    0 |        1

Из вывода запроса видно, что в таблице raster_table находятся два объекта типа raster.

Также можно загрузить растровые данные с помощью утилиты raster2pgsql. См. Using raster2pgsql to load rasters.

Растровые функции PostGIS, позволяющие отображать объекты типа raster, перечислены в статье Raster Outputs. Обратите внимание, что по умолчанию драйверы для работы этих функций отключены. Необходимо включить драйверы, чтобы использовать функции вывода растровых объектов. См. Enable GDAL Raster drivers.

Следующий код включает драйверы для текущей сессии и использует функцию ST_AsPNG для вывода растрового изображения:

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';

SELECT 'data:image/png;base64,' ||
   encode(ST_AsPNG(raster_column),'base64')
   FROM raster_table
   WHERE name = 'Test';
                                              ?column?
----------------------------------------------------------------------------------------------------
 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAAAAAAZai4+AAAAAnRSTlMAAHaTzTgAAAMBSURBVHic+
 7ZzLdoMwDETtnvz/L6uLNm0By8zo4dCg2QRSQJex7BDZTW+vVN/ty3PjYzHIVqL94bVYqh57H1Wp                      +
 d5ahi7pVWIwKi1FhMSosRoXFqLAYFRajwmJUWIwKi1FhMSosRoXFqLAYXRSrT/aiakd9dK1pAUse                      +
 nlBtFE85sFN3acPqm+1JuL7dgcEsWHv/9XD4kTsZUn6QFUqi4EfuxWMNL+x88yAay20MxMViwYVp                      +
 n8KG0wOv6wZIrEmsUB85LCK0jzLwMzHSrqyPap0RGlAprEXdsMW6FUjNYC1L+Ms+Bt4Bqx82jsKe                      +
 bAisdf3wHo0YpzthuTOewEIyPqxX3KkR/Sqs1vDv+xd1y1oaaa01cfU8aU0rEXWHWyKuStPsVLG7                      +
 9XVZAfwa2XKmVbkl0hrhrhcLb0ZhWtzaiJasIs656ADhxspZMujGynmUftdGzNECLEsze7GgZ1Ye                      +
 zIkFBqS5fFhwOJbLhZVXwnFgcSnDcZmx6DymjrdijYPI5gU6ZayVwynBdd9R/le4XTlY6LSnqlCs                      +
 uGevxbmF2nWDlJfh5lZpc9VLFIgl6s5fJU2hr1Eclkx3Sa13K2XBgaqDOy67orAICMSuxEb02BWE                      +
 NURwcMVghddHQrA0KuV9ILkisHSvzC4GYM1rxjZ56vKuwHNll3SN1D4soHps43JhQSFNXI7cQuNZ                      +
 poYccz4ph37LikXNSfBc7gFi20JRw8X61W5nf2ytpWH16yxZ3GlSlztvanfZbbYS1e5Y7leMvntF                      +
 j3fUTqGArGHPq9oHiC4NscHG5SmA6zHds3me4TRxVd7b1yBC9e+x6ud1orF+VhQhR830Yrc0wls0                      +
 YpgIrJVdseZ8nkLq9wwWakbAR/j/T/lTYW5C0woU1rq++BaNOLXL1IbKaQluRTxLk1gTR4xmjU9M                      +
 cCuiY7BYakxkohqfhKHdUmJiM8LwNflGRG6YnG05vm/ILSRrx/HxWRhLyiMQo9oqMQsz/ZkKbNkA                      +
 urbgLOO6ss2pI8F+Lg/2gpX/bGjQJ2vGgjXGZUXpAAAAAElFTkSuQmCC

PostGIS topology

PostGIS topology — это дополнительный модуль PostGIS, который управляет векторными данными на основе пространственных отношений. Topology поддерживает спецификации "SQL/MM SQL-MM 3 Topo-Geo" и "Topo-Net 3" и требует установки отдельного расширения postgis_topology:

CREATE EXTENSION postgis_topology;

Topology позволяет хранить и обрабатывать пространственные объекты не просто как отдельные геометрические фигуры, а как взаимосвязанную систему, где важны связи между объектами. Главная задача — обеспечить топологическую целостность, то есть проверить, что объекты корректно связаны друг с другом, например, что границы полигонов не пересекаются там, где не должны. Topology позволяет выполнять более сложные запросы к пространственным данным, например, "найти все дороги, ведущие к этому перекрестку" или "найти все здания, граничащие с этим участком".

За информацией обо всех функциях и типах, предоставляемых этим расширением, обратитесь к документации PostGIS Topology.

Модуль postgis_sfcgal

Расширение postgis_sfcgal — это обертка C++ для библиотеки CGAL (Computational Geometry Algorithms Library), которая содержит расширенные 2D- и 3D-пространственные функции. Для повышения надежности геометрические координаты имеют точное представление в виде рациональных чисел.

Для установки используйте следующую команду:

CREATE EXTENSION postgis_sfcgal;

За дополнительной информацией о функциях SFCGAL обратитесь к статье SFCGAL Functions Reference.

Модуль postgis_tiger_geocoder

Модуль postgis_tiger_geocoder представляет собой геокодер на основе PL/pgSQL, разработанный для работы с системой TIGER (Topologically Integrated Geographic Encoding and Referencing system). Геокодер состоит из четырех компонентов: функций загрузки данных, нормализатора адресов, геокодера адресов и обратного геокодера. Несмотря на то, что он разработан специально для США, многие концепции и функции могут быть применимы для работы с адресными и дорожными сетями других стран.

Для установки postgis_tiger_geocoder воспользуйтесь командой CREATE EXTENSION:

CREATE EXTENSION postgis_tiger_geocoder;

За дополнительной информацией о postgis_tiger_geocoder обратитесь к статье Tiger Geocoder.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней