Использование 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
Geometry
Geometry — абстрактный тип. Значения типа geometry относятся к одному из его подтипов, представляющих собой различные виды геометрических фигур. Подтипы включают:
-
атомарные типы: Point, LineString, LinearRing, Polygon и Triangle;
-
типы-коллекции: MultiPoint, MultiLineString, MultiPolygon, GeometryCollection, PolyhedralSurface и TIN;
-
кривые (соответствующие пространственному стандарту ISO/IEC 13249-3 SQL Multimedia): CircularString, CompoundCurve, CurvePolygon, MultiCurve и MultiSurface.
Типы 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
CREATE TABLE geom_table1(
id SERIAL PRIMARY KEY,
name VARCHAR(64),
geometry_column geometry);
CREATE TABLE geom_table2(
id SERIAL PRIMARY KEY,
geometry_column geometry(POINTZ));
CREATE TABLE geom_table3(
id SERIAL PRIMARY KEY,
geometry_column geometry(POLYGON,4326));
CREATE TABLE geo_table1(
id SERIAL PRIMARY KEY,
geo_column geography(POINTZ));
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).
| Название | Поддерживаемый тип | Описание |
|---|---|---|
geometry |
Создает объект PostGIS geometry из формата WKT |
|
geometry, geography |
Возвращает объект PostGIS geometry или geography в формате WKT |
|
geometry |
Создает объект PostGIS geometry из формата WKB |
|
geometry, geography |
Возвращает объект PostGIS geometry или geography в формате WKB |
|
geometry |
Создает объект PostGIS geometry из формата EWKT, содержащего SRID |
|
geometry, geography |
Возвращает объект PostGIS geometry или geography в формате EWKT, включающем SRID |
|
geometry |
Создает объект PostGIS geometry из формата EWKB, содержащего SRID |
|
geometry |
Возвращает объект PostGIS geometry в формате EWKB, включающем SRID |
Примеры использования функций
Следующий код создает объект 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)
Следующий код создает объект 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
Следующий код создает объект 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)
Следующий код создает объект 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.