PostGIS 3.7.0beta1 Посібник користувача

Група розробників PostGIS

Анотація

PostGIS — це розширення для об'єктно-реляційної системи баз даних PostgreSQL, яке дозволяє зберігати об'єкти ГІС (географічних інформаційних систем) у базі даних. PostGIS підтримує просторові індекси R-Tree на основі GiST, а також функції для аналізу та обробки об'єктів ГІС.

Це інструкція для версії 3.7.0beta1

Ця робота ліцензована за ліцензією Creative Commons Attribution-Share Alike 3.0 License. Ви можете використовувати цей матеріал будь-яким чином, але просимо вас вказати посилання на проект PostGIS та, по можливості, на https://postgis.net.


Зміст

Розділ 1. Вступ

1.1. What Is PostGIS?

PostGIS extends PostgreSQL so that geospatial data can be stored, indexed, queried, and processed in the database. It keeps location data beside ordinary relational data, so a spatial query can use the same SQL, transactions, constraints, access controls, backup tools, and application connections as the rest of a PostgreSQL database.

The main postgis extension adds:

  • geometry for planar coordinate systems and geography for geodetic coordinates on the earth.

  • Spatial indexes that let the PostgreSQL planner avoid scanning every row when objects can be filtered by location.

  • Functions for measurement, relationships, overlays, geometry construction and editing, coordinate transformation, clustering, and spatial data exchange.

  • Support for common geospatial encodings and formats, including WKT, WKB, GeoJSON, GML, KML, FlatGeobuf, Geobuf, and Mapbox Vector Tiles.

This makes PostgreSQL a spatial database: applications can ask both ordinary questions and location-aware questions without moving data to a separate GIS processing system. Desktop GIS, map servers, ETL tools, and application frameworks can connect through normal PostgreSQL interfaces.

1.2. What Is in the PostGIS Distribution?

This manual documents the main PostGIS source distribution. Depending on how PostGIS was built and packaged, it can provide several PostgreSQL extensions and command-line tools:

postgis

The core geometry and geography types, spatial indexes, and most spatial functions.

postgis_raster

Raster storage, analysis, loading, and export. Raster support uses GDAL and can be omitted from a build.

postgis_topology

SQL/MM topology types and functions for models based on shared nodes, edges, and faces.

postgis_sfcgal

Additional 2D and 3D processing functions backed by the optional SFCGAL library.

Loaders and utilities

shp2pgsql, pgsql2shp, and raster2pgsql move data between common file formats and PostGIS. Other utilities support upgrades, profiling, and development.

The source tree also contains internal libraries such as liblwgeom and libpgcommon. They are implementation layers shared by PostGIS components, not separately released PostgreSQL extensions. Most users start by enabling the core extension with CREATE EXTENSION postgis; see Розділ 2, Встановлення PostGIS for available components and build options.

1.3. The PostGIS Project Family

This manual covers the main postgis/postgis distribution. The official PostGIS source organization also hosts or mirrors complementary projects. These projects have their own release cycles, installation instructions, and documentation; installing the core extension does not install them.

  • Address Standardizer parses and normalizes postal addresses. It moved from the main PostGIS source tree to a separate repository for the PostGIS 3.7 development cycle.

  • PostGIS TIGER Geocoder provides United States address geocoding and reverse geocoding using Census TIGER data. It is also maintained separately from the main distribution.

  • H3-pg provides PostgreSQL bindings for the H3 hierarchical hexagonal indexing system and interoperates with PostGIS.

  • PostGIS Java provides Java bindings for PostGIS types.

  • Introduction to PostGIS is the hands-on workshop maintained by the PostGIS project.

Other PostgreSQL spatial extensions can complement PostGIS while remaining independent projects. For example, pgRouting adds routing and graph analysis. Use each project's own manual for its functions and support policy.

1.4. How to Use This Manual

The manual is both a guide to the PostGIS data model and the complete reference for the SQL interface. Choose a starting point based on what you are trying to do:

If you are new to spatial SQL

Start with the Introduction to PostGIS workshop for a tutorial, then use Розділ 4, Data Management to understand spatial types, coordinate systems, validity, loading, and indexes.

If you are installing or upgrading PostGIS

Read Розділ 2, Встановлення PostGIS and Розділ 3, Адміністрування PostGIS. Package-specific instructions and supported release information are maintained on the PostGIS website.

If you are writing spatial queries

Read Розділ 5, Spatial Queries for spatial relationships and index-aware query patterns, and Розділ 6, Поради щодо продуктивності for common performance problems.

If you need a particular function

Use Розділ 7, Довідка PostGIS or Розділ 13, Спеціальні функції PostGIS Вказівник. Function pages state accepted types, dimensional support, standards conformance, dependency requirements, and version availability.

If you use an optional component

See Розділ 9, Топологія, Розділ 10, Raster Data Management, Queries, and Applications, Розділ 11, Растрова довідка, or Розділ 8, Довідник функцій SFCGAL.

If something goes wrong

Collect the versions reported by PostGIS_Full_Version and follow Розділ 14, Reporting Problems. Check Додаток A, Release Notes when behavior differs between release lines.

1.5. Standards Support

This manual marks individual functions as compliant with spatial standards so users can tell which behavior is portable and which behavior is a PostGIS extension. PostGIS implements the OGC Simple Features for SQL model, including the geometry type, Well-Known Text (WKT), Well-Known Binary (WKB), and the common spatial accessors, constructors, predicates, and processing functions. PostGIS also implements many SQL/MM Spatial types and functions.

PostGIS supports geometry families defined by later standards, including SQL/MM curved geometry and OGC Simple Features Access 1.2 PolyhedralSurface, Triangle, and TIN. Support for these geometry families is function-specific, and each function page documents the supported input types and conformance level.

PostGIS also includes widely used extensions and integrations. Examples of PostGIS extensions include Extended WKT (EWKT), Extended WKB (EWKB), SRID metadata in those extended formats, geography, and raster. PostGIS also supports input and output exchange formats defined by other standards, such as GeoJSON, GML, and KML. These features are documented individually and should not be read as OGC Simple Features or SQL/MM requirements unless the specific function or format says so.

When the implementation intentionally differs from a standard, or when a standard leaves behavior ambiguous, the relevant function page describes the PostGIS behavior. Розділ 13, Спеціальні функції PostGIS Вказівник summarizes SQL/MM compliance and geometry-type support across functions.

1.6. Project and Community

PostGIS began in 2001 as a spatial database research project at Refractions Research. It is now an OSGeo project developed by contributors and organizations around the world. The Project Steering Committee coordinates releases, project policy, and the general direction of development. The complete contributor and sponsor record is in Розділ 15, Credits and Acknowledgments at the end of this manual.

The manual is the authoritative reference for the released SQL interface. The project website and source tree provide the surrounding material:

  • Documentation routes readers to getting-started instructions, versioned manuals, tips, training material, and the FAQ.

  • Community lists mailing lists, chat, events, videos, and other support channels.

  • Developer documentation covers development environments, testing, coding style, internals, maintenance, governance, releases, and website work.

Розділ 2. Встановлення PostGIS

У цьому розділі детально описано кроки, необхідні для встановлення PostGIS.

2.1. Коротка версія

Щоб скомпілювати, припускаючи, що у вашому шляху пошуку є всі залежності:

Code
tar -xvzf postgis-3.7.0beta1.tar.gz
cd postgis-3.7.0beta1
./configure
make
make install

Після встановлення PostGIS його потрібно ввімкнути (Розділ 3.3, «Створення просторових баз даних») або оновити (Розділ 3.4, «Оновлення просторових баз даних») в кожній окремій базі даних, в якій ви хочете його використовувати.

2.2. Компіляція та встановлення з вихідного коду

[Примітка]

Багато операційних систем зараз містять готові пакети для PostgreSQL/PostGIS. У більшості випадків компіляція необхідна лише якщо ви хочете отримати найновіші версії або ви є розробником пакету.

Цей розділ містить загальні інструкції з компіляції. Якщо ви компілюєте для Windows тощо або іншої ОС, додаткову детальну допомогу можна знайти за посиланням Посібники з компіляції, надані користувачами PostGIS та PostGIS Dev Wiki.

Готові пакети для різних операційних систем перелічені в Готові пакети PostGIS

Якщо ви користуєтеся Windows, ви можете отримати стабільні збірки через Stackbuilder або сайт завантаження PostGIS для Windows. Ми також маємо дуже новітні експериментальні збірки для Windows, які зазвичай створюються один-два рази на тиждень або коли трапляється щось цікаве. Ви можете використовувати їх для експериментів з поточними версіями PostGIS

Модуль PostGIS є розширенням серверного бекенду PostgreSQL. Як такий, PostGIS 3.7.0beta1 вимагає повного доступу до заголовків сервера PostgreSQL для компіляції. Його можна скомпілювати для версій PostgreSQL 14 - 18. Раніші версії PostgreSQL не підтримуються.

Якщо ви ще не встановили PostgreSQL, зверніться до інструкцій з інсталяції PostgreSQL. https://www.postgresql.org .

[Примітка]

Для роботи GEOS, під час встановлення PostgreSQL може знадобитися явно пов'язати PostgreSQL зі стандартною бібліотекою C++:

Code
LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]

Це обхідний шлях для вирішення проблеми взаємодії помилкових винятків C++ зі старими інструментами розробки. Якщо ви зіткнулися з дивними проблемами (несподіване закриття бекенду або подібні речі), спробуйте цей трюк. Звичайно, для цього потрібно буде перекомпілювати PostgreSQL з нуля.

Наступні кроки описують конфігурацію та компіляцію вихідного коду PostGIS. Вони написані для користувачів Linux і не працюватимуть на Windows або Mac.

2.2.1. Отримання вихідного коду

Завантажте архів PostGIS з веб-сайту завантажень https://download.osgeo.org/postgis/source/postgis-3.7.0beta1.tar.gz

Code
wget https://download.osgeo.org/postgis/source/postgis-3.7.0beta1.tar.gz
tar -xvzf postgis-3.7.0beta1.tar.gz
cd postgis-3.7.0beta1

Це створить каталог з назвою postgis-3.7.0beta1 у поточному робочому каталозі.

Або перегляньте джерело з репозиторію git https://git.osgeo.org/gitea/postgis/postgis/ .

Code
git clone https://git.osgeo.org/gitea/postgis/postgis.git postgis
cd postgis
sh autogen.sh
    

Перейдіть до новоствореного каталогу postgis, щоб продовжити встановлення.

Code
./configure

2.2.2. Вимоги до встановлення

PostGIS має наступні вимоги до побудови та використання:

Необхідно

  • PostgreSQL 14 - 18. Потрібна повна інсталяція PostgreSQL (включно з заголовками сервера). PostgreSQL доступний за адресою https://www.postgresql.org 18 .

    For current release-line support and end-of-life policy, see https://postgis.net/development/versions_eol/

  • Компілятор GNU C (gcc). Для компіляції PostGIS можна використовувати й інші компілятори ANSI C, але при компіляції за допомогою gcc ми зустрічаємо набагато менше проблем.

  • GNU Make (gmake або make). Для багатьох систем GNU make є стандартною версією make. Перевірте версію, викликавши make -v. Інші версії make можуть не обробляти PostGIS Makefile належним чином.

  • Бібліотека перепроекції Proj. Потрібна версія Proj 6.1 або вище. Бібліотека Proj використовується для забезпечення підтримки перепроекції координат у PostGIS. Proj можна завантажити за адресою https://proj.org/ .

  • Бібліотека геометрії GEOS, версія 3.8.0 або вище, але для повного використання всіх нових функцій і можливостей необхідна версія GEOS 3.14+. GEOS можна завантажити за адресою https://libgeos.org .

  • LibXML2, версія 2.5.x або вище. LibXML2 наразі використовується в деяких функціях імпорту (ST_GeomFromGML та ST_GeomFromKML). LibXML2 можна завантажити за адресою https://gitlab.gnome.org/GNOME/libxml2/-/releases.

  • JSON-C, версія 0.9 або вище. JSON-C наразі використовується для імпорту GeoJSON за допомогою функції ST_GeomFromGeoJson. JSON-C можна завантажити за посиланням https://github.com/json-c/json-c/releases/.

  • The GNU Multiple Precision Arithmetic Library (libgmp). Used to control precision of math operations in PostGIS Topology. GMP is available for download from https://gmplib.org/.

  • GDAL, версія 3+ є кращою. Це необхідно для підтримки растрових даних. https://gdal.org/download.html.

  • При компіляції з PostgreSQL+JIT необхідна версія LLVM >=6 https://trac.osgeo.org/postgis/ticket/4125.

Додатково

  • GDAL (псевдоопціональний) тільки якщо ви не хочете растрові дані, ви можете залишити його поза увагою. Також переконайтеся, що ви ввімкнули драйвери, які ви хочете використовувати, як описано в Розділ 3.2, «Налаштування підтримки растрів».

  • GTK (потрібно GTK+2.0, 2.8+) для компіляції завантажувача файлів shp2pgsql-gui. http://www.gtk.org/ .

  • SFCGAL, 1.4.1 or higher is required, 2.3+ is needed to be able to use all functionality. SFCGAL can be used to provide additional 2D and 3D advanced analysis functions to PostGIS cf Розділ 8, Довідник функцій SFCGAL. https://sfcgal.gitlab.io/sfcgal/.

  • Щоб увімкнути ST_AsMVT, потрібна бібліотека protobuf-c 1.1.0 або вище (для використання) та компілятор protoc-c (для побудови). Також для перевірки мінімальної версії protobuf-c необхідний pkg-config. Див. protobuf-c. За замовчуванням Postgis використовує Wagyu для швидшої перевірки полігонів MVT, що вимагає компілятора c++11. Він використовуватиме CXXFLAGS і той самий компілятор, що й інсталяція PostgreSQL. Щоб вимкнути це і замість цього використовувати GEOS, під час конфігурації вкажіть --without-wagyu.

  • CUnit (CUnit). Це потрібно для регресійного тестування. http://cunit.sourceforge.net/

  • Для створення документації необхідний DocBook (xsltproc). Docbook доступний за адресою http://www.docbook.org/ .

  • DBLatex (dblatex) необхідний для створення документації у форматі PDF. DBLatex доступний за адресою http://dblatex.sourceforge.net/ .

  • PDF documentation needs an SVG rasterizer for its high-resolution figure fallbacks. The build prefers rsvg-convert, and can also use GraphicsMagick (gm convert) or ImageMagick (magick or convert).

2.2.3. Конфігурація збірки

Як і в більшості випадків встановлення Linux, першим кроком є створення файлу Makefile, який буде використовуватися для компіляції вихідного коду. Це робиться за допомогою виконання скрипта оболонки

Code
./configure

Без додаткових параметрів ця команда спробує автоматично знайти необхідні компоненти та бібліотеки, потрібні для компіляції вихідного коду PostGIS у вашій системі. Хоча це найпоширеніший спосіб використання ./configure, скрипт приймає кілька параметрів для тих, хто має необхідні бібліотеки та програми в нестандартних місцях.

У наведеному нижче списку вказані лише найчастіше використовувані параметри. Повний список можна отримати за допомогою параметрів --help або --help=short.

--with-library-minor-version

Починаючи з PostGIS 3.0, файли бібліотеки, що генеруються за замовчуванням, більше не матимуть незначну версію як частину імені файлу. Це означає, що всі бібліотеки PostGIS 3 будуть закінчуватися на postgis-3. Це було зроблено для спрощення pg_upgrade, але має той недолік, що ви можете встановити на сервер лише одну версію PostGIS 3. Щоб повернути стару поведінку файлів із включенням другорядної версії, наприклад postgis-3.0, додайте цей перемикач до вашої конфігураційної команди.

--prefix=PREFIX

This is the installation prefix for PostGIS command-line utilities. By default, utilities are installed in the executable directory reported by the detected PostgreSQL installation.

[Застереження]

PostgreSQL extension files are installed in the directories reported by pg_config, so the server can load them. This includes the PostGIS shared library and SQL extension files. Use --with-pgconfig=FILE to choose the PostgreSQL installation that PostGIS builds and installs against.

--with-pgconfig=FILE

PostgreSQL надає утиліту під назвою pg_config для увімкнення розширень, таких як PostGIS, для пошуку каталогу інсталяції PostgreSQL. Використовуйте цей параметр (--with-pgconfig=/path/to/pg_config), щоб вручну вказати конкретну інсталяцію PostgreSQL, на основі якої буде побудовано PostGIS.

--with-gdalconfig=FILE

GDAL, необхідна бібліотека, надає функціональність, необхідну для підтримки растрових даних gdal-config, щоб програмне забезпечення могло знайти каталог інсталяції GDAL. Використовуйте цей параметр (--with-gdalconfig=/path/to/gdal-config), щоб вручну вказати конкретну інсталяцію GDAL, на основі якої буде побудовано PostGIS.

--with-geosconfig=FILE

GEOS, необхідна бібліотека геометрії, надає утиліту під назвою geos-config для того, щоб програмне забезпечення могло знайти каталог інсталяції GEOS. Використовуйте цей параметр (--with-geosconfig=/path/to/geos-config), щоб вручну вказати конкретну інсталяцію GEOS, на основі якої буде побудовано PostGIS.

--with-xml2config=FILE

LibXML — це бібліотека, необхідна для виконання процесів GeomFromKML/GML. Зазвичай вона знаходиться, якщо у вас встановлено libxml, але якщо її немає або ви хочете використовувати конкретну версію, вам потрібно вказати PostGIS на конкретний файл конфігурації xml2-config, щоб програмне забезпечення могло знайти каталог установки LibXML. Використовуйте цей параметр (>--with-xml2config=/path/to/xml2-config), щоб вручну вказати конкретну інсталяцію LibXML, на основі якої буде побудовано PostGIS.

--with-projdir=DIR

Proj — це бібліотека перепроекції, необхідна для PostGIS. Використовуйте цей параметр (--with-projdir=/path/to/projdir), щоб вручну вказати конкретний каталог інсталяції Proj, на основі якого буде побудовано PostGIS.

--with-libiconv=DIR

Каталог, в якому встановлено iconv.

--with-jsondir=DIR

JSON-C — це бібліотека JSON з ліцензією MIT, необхідна для підтримки PostGIS ST_GeomFromJSON. Використовуйте цей параметр (--with-jsondir=/path/to/jsondir), щоб вручну вказати конкретний каталог інсталяції JSON-C, на основі якого буде побудовано PostGIS.

--with-gui

Скомпілюйте графічний інтерфейс імпорту даних (потрібен GTK+2.0). Це створить графічний інтерфейс shp2pgsql-gui для shp2pgsql.

--without-raster

Скомпілюйте без підтримки растрових зображень.

--without-topology

Компілювати без підтримки топології.

--with-gettext=no

За замовчуванням PostGIS спробує виявити підтримку gettext і скомпілювати з нею, однак якщо ви зіткнетеся з проблемами несумісності, які спричиняють порушення роботи завантажувача, ви можете повністю вимкнути її за допомогою цієї команди. Дивіться квиток http://trac.osgeo.org/postgis/ticket/748 для прикладу проблеми, вирішеної за допомогою цієї конфігурації. ПРИМІТКА: ви нічого не втратите, вимкнувши цю опцію. Вона використовується для підтримки міжнародної довідки/міток для завантажувача GUI, яка ще не задокументована і все ще є експериментальною.

--with-sfcgal=PATH

За замовчуванням PostGIS не встановлюється з підтримкою sfcgal без цього параметра. PATH — це необов'язковий аргумент, який дозволяє вказати альтернативний шлях до sfcgal-config.

--without-phony-revision

Вимкнути оновлення postgis_revision.h, щоб відповідати поточній версії HEAD репозиторію git.

[Примітка]

Якщо ви отримали PostGIS з репозиторію коду , першим кроком є запуск скрипта

Code
./autogen.sh

Цей скрипт створить скрипт configure, який, у свою чергу, використовується для налаштування встановлення PostGIS.

Якщо ви отримали PostGIS у вигляді архіву tar, запускати ./autogen.sh не потрібно, оскільки configure вже було згенеровано.

2.2.4. Збірка

Після створення Makefile, збірка PostGIS зводиться до виконання команди

Code
make
Вивід растрових зображень
[last line of output]
PostGIS was built successfully. Ready to install.

Усі функції мають коментарі, згенеровані з документації. Якщо ви бажаєте пізніше встановити ці коментарі у свої просторові бази даних, виконайте команду, яка вимагає docbook. Файли postgis_comments.sql та інші файли коментарів пакета також упаковані у дистрибутив tar.gz у папці doc, тому немає потреби створювати коментарі, якщо ви встановлюєте з tar-архіву. Коментарі також включені як частина інсталяції CREATE EXTENSION.

Code
make comments

The make cheatsheets target generates html cheat sheets suitable for quick reference or for student handouts. This requires xsltproc to build and will generate 4 files in doc folder topology_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html

Ви можете завантажити готові приклади у форматі html та pdf з Посібників з PostGIS / PostgreSQL

Code
make cheatsheets

2.2.5. Збірка розширень PostGIS та їх розгортання

Розширення PostGIS створюються та встановлюються автоматично, якщо доступна підтримка розширень PostgreSQL.

Якщо ви компілюєте з репозиторію вихідного коду, спочатку потрібно скомпілювати описи функцій. Вони компілюються, якщо у вас встановлено docbook. Ви також можете скомпілювати їх вручну за допомогою команди:

Code
make comments

Створювати коментарі не потрібно, якщо ви створюєте з архіву tar, оскільки вони вже попередньо вбудовані в архів tar.

Розширення повинні автоматично створюватися в рамках процесу make install. При необхідності ви можете створити їх з папок розширень або скопіювати файли, якщо вони потрібні вам на іншому сервері.

Set PGUSER if you need to override the psql connection user, then test before installing. After installation, run the extension regression tests.

Code
cd extensions
cd postgis
make clean
make
export PGUSER=postgres
make check
make install
make check RUNTESTFLAGS=--extension
[Примітка]

make check використовує psql для виконання тестів і, отже, може використовувати змінні середовища psql. Найпоширеніші змінні, які корисно замінити, — це PGUSER,PGPORT та PGHOST. Див. Змінні середовища psql

Файли розширення завжди будуть однаковими для однієї версії PostGIS і PostgreSQL незалежно від ОС, тому можна копіювати файли розширення з однієї ОС на іншу, якщо на ваших серверах вже встановлено бінарні файли PostGIS.

Якщо ви хочете встановити розширення вручну на окремому сервері, відмінному від вашого сервера розробки, вам потрібно скопіювати наступні файли з папки розширень у папку PostgreSQL / share / extension вашої інсталяції PostgreSQL, а також необхідні бінарні файли для звичайного PostGIS, якщо вони ще не встановлені на сервері.

  • Це контрольні файли, які містять таку інформацію, як версія розширення, яке потрібно встановити, якщо вона не вказана. postgis.control, postgis_topology.control.

  • Усі файли в папці /sql кожного розширення. Зверніть увагу, що їх потрібно скопіювати в корінь папки PostgreSQL share/extension extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sql

Після цього ви повинні побачити postgis, postgis_topology як доступні розширення в PgAdmin -> розширення.

Якщо ви використовуєте psql, ви можете перевірити, чи встановлені розширення, виконавши такий запит:

Code
SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE name LIKE 'postgis%'
ORDER BY name;
Вивід растрових зображень
┌──────────────────┬─────────────────┬───────────────────┐
│ name             │ default_version │ installed_version │
├──────────────────┼─────────────────┼───────────────────┤
│ postgis          │ 3.7.0beta1        │ 3.7.0beta1        │
│ postgis_raster   │ 3.7.0beta1        │ 3.7.0beta1        │
│ postgis_sfcgal   │ 3.7.0beta1        │                   │
│ postgis_topology │ 3.7.0beta1        │                   │
└──────────────────┴─────────────────┴───────────────────┘

Якщо розширення встановлено в базі даних, яку ви запитуєте, ви побачите згадку в стовпці installed_version. Якщо ви не отримали жодних записів, це означає, що на сервері взагалі не встановлено розширень postgis. PgAdmin III 1.14+ також надасть цю інформацію в розділі extensions дерева браузера бази даних і навіть дозволить оновити або видалити розширення, клацнувши правою кнопкою миші.

Якщо у вас доступні розширення, ви можете встановити розширення postgis у вибраній базі даних за допомогою інтерфейсу розширення pgAdmin або виконавши такі команди sql:

Code
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION postgis_topology;

У psql ви можете переглянути, які версії ви встановили, а також, в якій схемі вони встановлені.

Code
\connect mygisdb
\x
\dx postgis*
Вивід растрових зображень
List of installed extensions
┌─[ RECORD 1 ]────────────────────────────────────────────────┐
│ Name        │ postgis                                       │
│ Version     │ 3.7.0beta1                                        │
│ Schema      │ public                                        │
│ Description │ PostGIS geometry, geography, and raster…      │
├─[ RECORD 2 ]────────────────────────────────────────────────┤
│ Name        │ postgis_raster                                │
│ Version     │ 3.7.0beta1                                        │
│ Schema      │ public                                        │
│ Description │ PostGIS raster types and functions            │
├─[ RECORD 3 ]────────────────────────────────────────────────┤
│ Name        │ postgis_topology                              │
│ Version     │ 3.7.0beta1                                        │
│ Schema      │ topology                                      │
│ Description │ PostGIS topology spatial types and functions  │
└─────────────────────────────────────────────────────────────┘
[Застереження]

Розширені таблиці spatial_ref_sys, layer, topology не можуть бути явно скопійовані. Їх можна створити лише під час резервного копіювання відповідного розширення postgis або postgis_topology, що відбувається лише під час резервного копіювання всієї бази даних. У резервних копіях зберігаються лише записи srid, що не входять до складу PostGIS, тому не змінюйте записи, які ми надаємо, і не очікуйте, що зміни будуть збережені. Якщо ви виявили проблему, створіть квиток. Структури таблиць розширень ніколи не резервуються, оскільки вони створюються за допомогою CREATE EXTENSION і вважаються однаковими для даної версії розширення. Ці особливості вбудовані в поточну модель розширень PostgreSQL.

Якщо ви встановили 3.7.0beta1 без використання нашої чудової системи розширень, ви можете змінити його на розширення, виконавши наведені нижче команди, щоб упакувати функції у відповідні розширення. Встановлення за допомогою `unpackaged` було видалено в PostgreSQL 13, тому перед оновленням до PostgreSQL 13 рекомендується перейти на збірку розширення.

Code
CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_raster FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;

2.2.6. Тестування

Якщо ви бажаєте протестувати збірку PostGIS, запустіть

Code
make check

Вищезазначена команда виконає різні перевірки та регресійні тести, використовуючи створену бібліотеку та реальну базу даних PostgreSQL.

[Примітка]

Якщо ви налаштували PostGIS, використовуючи нестандартні розташування PostgreSQL, GEOS або Proj, можливо, вам доведеться додати розташування їхніх бібліотек до змінної середовища LD_LIBRARY_PATH.

[Застереження]

Наразі команда make check під час виконання перевірок використовує змінні середовища PATH та PGPORT — вона не використовує версію PostgreSQL, яка може бути вказана за допомогою параметра конфігурації --with-pgconfig. Тому під час конфігурації обов'язково змініть PATH відповідно до виявленої інсталяції PostgreSQL або будьте готові до можливих проблем.

[Примітка]

Сандбоксні облікові записи, які не є суперкористувачами PostgreSQL, можуть делегувати права власності на базу даних під час циклу регресії, експортуючи POSTGIS_REGRESS_DB_OWNER. Харнес створить тимчасову базу даних регресії, що належить призначеній ролі, продовжуючи підключатися за допомогою облікового запису з меншими привілеями. Поєднайте це з POSTGIS_REGRESS_ROLE_EXT_CREATOR, коли роль створення розширення повинна відрізнятися від власника бази даних.

Ці змінні дозволяють автоматизованим середовищам виконувати повні шляхи оновлення та встановлення розширень без підвищення облікового запису, що викликає, до суперкористувача, за умови, що цільовий екземпляр PostgreSQL дозволяє встановлення розширень цими делегованими ролями.

Якщо все пройде успішно, команда make check видасть результат майже 500 тестів. Результати будуть схожими на наведені нижче (багато рядків опущено):

Code
CUnit - A unit testing framework for C - Version 2.1-3
     http://cunit.sourceforge.net/

  .
  .
  .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     44     44    n/a      0        0
               tests    300    300    300      0        0
             asserts   4215   4215   4215      0      n/a
Elapsed time =    0.229 seconds

  .
  .
  .

Running tests

  .
  .
  .

Run tests: 134
Failed: 0


-- if you build with SFCGAL

  .
  .
  .

Running tests

  .
  .
  .

Run tests: 13
Failed: 0

-- if you built with raster support

  .
  .
  .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     12     12    n/a      0        0
               tests     65     65     65      0        0
             asserts  45896  45896  45896      0      n/a


  .
  .
  .

Running tests

  .
  .
  .

Run tests: 101
Failed: 0

-- topology regress

.
.
.

Running tests

  .
  .
  .

Run tests: 51
Failed: 0

-- if you built --with-gui, you should see this too

     CUnit - A unit testing framework for C - Version 2.1-2
     http://cunit.sourceforge.net/

  .
  .
  .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites      2      2    n/a      0        0
               tests      4      4      4      0        0
             asserts      4      4      4      0      n/a

результат повинен виглядати так:

Вивід растрових зображень
============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok

=====================
All 2 tests passed.
=====================

2.2.7. Встановлення

Щоб встановити PostGIS, введіть

Code
make install

Це скопіює файли інсталяції PostGIS у відповідний підкаталог, вказаний параметром конфігурації --prefix. Зокрема:

  • Бінарні файли завантажувача та вивантажувача встановлюються в [prefix]/bin.

  • Файли SQL, такі як postgis.sql, встановлюються в [prefix]/share/contrib.

  • Бібліотеки PostGIS встановлюються в [prefix]/lib.

Якщо ви раніше запустили команду make comments для створення файлів postgis_comments.sql та raster_comments.sql, встановіть файл sql, виконавши команду

Code
make comments-install
[Примітка]

postgis_comments.sql, raster_comments.sql, topology_comments.sql було виокремлено з типових цілей побудови та інсталяції, оскільки з ними виникає додаткова залежність від xsltproc.

2.3. Поширені проблеми під час встановлення

Якщо установка або оновлення не відбуваються так, як ви очікували, слід перевірити кілька речей.

PostgreSQL version mismatch.

Переконайтеся, що ви встановили PostgreSQL 14 або новішу версію, і що ви компілюєте з тією ж версією вихідного коду PostgreSQL, що і версія PostgreSQL, яка працює. Плутанина може виникнути, якщо у вашому дистрибутиві (Linux) вже встановлено PostgreSQL або ви раніше встановлювали PostgreSQL і забули про це. PostGIS працюватиме лише з PostgreSQL 14 або новішою версією, а використання старішої версії призведе до появи дивних, несподіваних повідомлень про помилки. Щоб перевірити версію PostgreSQL, що працює, під’єднайтеся до бази даних за допомогою psql і виконайте цей запит:

Code
SELECT version();

If you are running an RPM based distribution, you can check for the existence of pre-installed packages using the rpm command as follows:

Code
rpm -qa | grep postgresql

Restoring an upgrade into a database without PostGIS.

Якщо оновлення не вдалося, переконайтеся, що ви відновлюєте дані в базу, в якій вже встановлено PostGIS.

Code
SELECT PostGIS_Full_Version();

Також перевірте, чи конфігуратор правильно визначив розташування та версію PostgreSQL, бібліотеки Proj та бібліотеки GEOS.

Вихідні дані команди configure використовуються для створення файлу postgis_config.h. Перевірте, чи правильно встановлено змінні POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION та POSTGIS_GEOS_VERSION.

Розділ 3. Адміністрування PostGIS

3.1. Налаштування продуктивності

Налаштування продуктивності PostGIS дуже схоже на налаштування будь-якого робочого навантаження PostgreSQL. Єдиним додатковим моментом, який слід врахувати, є те, що геометрії та растри зазвичай мають великий розмір, тому оптимізації, пов'язані з пам'яттю, зазвичай мають більший вплив на PostGIS, ніж на інші типи запитів PostgreSQL.

Загальні відомості про оптимізацію PostgreSQL див. у розділі Налаштування сервера PostgreSQL.

Конфігурацію PostgreSQL можна налаштувати на рівні сервера, не торкаючись файлів postgresql.conf або postgresql.auto.conf, за допомогою команди ALTER SYSTEM.

Set work_mem, reload the configuration so new connections use the change, and display the current value. Use SHOW ALL to list all settings.

Code
ALTER SYSTEM SET work_mem = '256MB';
SELECT pg_reload_conf();
SHOW work_mem;

Окрім налаштувань Postgres, PostGIS має деякі власні налаштування, які перелічені в Розділ 7.22, «Великі уніфіковані змінні (GUC)».

3.1.1. Запуск

Ці налаштування конфігуруються в postgresql.conf:

constraint_exclusion

  • За замовчуванням: partition

  • Зазвичай використовується для розділення таблиць. За замовчуванням "partition" змушує планувальник аналізувати таблиці на предмет обмежень тільки в тому випадку, якщо вони знаходяться в успадкованій ієрархії, і дозволяє уникнути штрафних санкцій планувальника в інших випадках.

shared_buffers

  • За замовчуванням: ~128 МБ

  • Встановіть приблизно 25% до 40% доступної оперативної пам'яті. У Windows ви не зможете встановити таке високе значення.

max_worker_processes контролює максимальну кількість фонових процесів, доступних для сервера, і, отже, також обмежує кількість працівників, які можуть брати участь у паралельних запитах.

  • За замовчуванням: 8

  • Встановлює максимальну кількість фонових процесів, які може підтримувати система. Цей параметр можна встановити тільки під час запуску сервера.

3.1.2. Час роботи

work_mem - встановлює розмір пам'яті, що використовується для операцій сортування та складних запитів

  • За замовчуванням: 1-4 МБ

  • Налаштуйте для великих баз даних, складних запитів, великого обсягу оперативної пам'яті

  • Зменште налаштування для великої кількості одночасних користувачів або малої оперативної пам'яті.

  • Якщо у вас багато оперативної пам'яті і мало розробників:

    Code
    SET work_mem TO '256MB';

maintenance_work_mem - розмір пам'яті, що використовується для VACUUM, CREATE INDEX тощо.

  • За замовчуванням: 16-64 МБ

  • Зазвичай занадто низький - блокує введення-виведення, блокує об'єкти під час обміну пам'яттю

  • Рекомендуємо від 32 МБ до 1 ГБ на виробничих серверах з великим об'ємом оперативної пам'яті, але це залежить від кількості одночасних користувачів. Якщо у вас багато оперативної пам'яті і мало розробників:

    Code
    SET maintenance_work_mem TO '1GB';

max_parallel_workers_per_gather

Підтримка паралельних запитів у сучасних PostgreSQL та PostGIS використовує це налаштування для визначення кількості робочих процесів, які може вимагати план. Якщо значення встановлено вище 0, то деякі запити, наприклад ті, що містять функції відношення, такі як ST_Intersects, можуть використовувати кілька процесів і при цьому працювати удвічі швидше. Якщо у вас є багато вільних процесорів, вам слід змінити значення цього параметра на кількість процесорів, які у вас є. Також переконайтеся, що значення max_worker_processes збільшено принаймні до цього числа.

  • За замовчуванням: 0

  • Встановлює максимальну кількість воркерів, які може запустити один вузол Gather. Паралельні воркери беруться з пулу процесів, створеного параметром max_worker_processes. Зауважте, що запитувана кількість воркерів може бути недоступною під час виконання. Якщо це станеться, план виконання буде працювати з меншою кількістю воркерів, ніж очікувалося, що може призвести до неефективності. Встановлення цього значення в 0, що є значенням за замовчуванням, вимикає виконання паралельних запитів.

3.2. Налаштування підтримки растрів

Якщо ви увімкнули підтримку растрів, ви можете прочитати нижче, як правильно її налаштувати.

Растери поза базою даних та всі драйвери растерів за замовчуванням вимкнені. Щоб знову ввімкнути їх, потрібно встановити такі змінні середовища POSTGIS_GDAL_ENABLED_DRIVERS та POSTGIS_ENABLE_OUTDB_RASTERS у середовищі сервера. Ви також можете використовувати більш міжплатформний підхід, встановивши відповідний Розділ 7.22, «Великі уніфіковані змінні (GUC)».

Якщо ви хочете увімкнути офлайн-растр:

Code
POSTGIS_ENABLE_OUTDB_RASTERS=1

Будь-який інший параметр або відсутність параметра взагалі вимкне растри з db.

Щоб увімкнути всі драйвери GDAL, доступні у вашому встановленні GDAL, встановіть цю змінну оточення наступним чином

Code
POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

Якщо ви хочете увімкнути лише певні драйвери, налаштуйте змінну оточення наступним чином:

Code
POSTGIS_GDAL_ENABLED_DRIVERS="GTiff PNG JPEG GIF XYZ"
[Примітка]

Якщо ви використовуєте Windows не беріть перелік драйверів в лапки

Налаштування змінних середовища залежить від операційної системи. Для PostgreSQL, встановленого на Ubuntu або Debian за допомогою apt-postgresql, найкращим способом є редагування файлу /etc/postgresql/MAJOR/CLUSTER/environment, де замінні символи позначають основну версію PostgreSQL та ім'я кластера.

У Windows, якщо ви запускаєте службу, ви можете встановити системні змінні, до яких у Windows 7 можна потрапити, клацнувши правою кнопкою миші на Компʼютер - Властивості - Додаткові параметри системи або в провіднику перейшовши до Панель керування\Всі елементи панелі керування\Система. Потім натисніть Додаткові системні налаштування ->Додаткові ->Змінні середовища і додайте нові системні змінні.

Після того, як ви встановите змінні оточення, вам потрібно буде перезапустити службу PostgreSQL, щоб зміни набули чинності.

3.3. Створення просторових баз даних

3.3.1. Активувати просторове розширення в базі данних за допомогою EXTENSION

Якщо ви скомпілювали та встановили модулі extensions/postgis, ви можете перетворити базу даних на просторову за допомогою механізму EXTENSION.

Основне розширення PostGIS включає геометрію, географію, spatial_ref_sys та всі функції і коментарі. Растр і топологія упаковані як окреме розширення.

Виконайте наступний фрагмент SQL-коду в базі даних, яку ви хочете активувати просторове розширення:

Code
CREATE EXTENSION IF NOT EXISTS plpgsql;
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster; -- OPTIONAL
CREATE EXTENSION postgis_topology; -- OPTIONAL

3.3.2. Активувати просторове розширення бази даних без використання EXTENSION (не рекомендується)

[Примітка]

Зазвичай це потрібно лише в тому випадку, якщо ви не можете або не хочете встановлювати PostGIS у каталозі розширень PostgreSQL (наприклад, під час тестування, розробки або в обмеженому середовищі).

Додавання об'єктів PostGIS та визначень функцій до вашої бази даних здійснюється шляхом завантаження різних файлів sql, розташованих у [prefix]/share/contrib, як зазначено під час фази побудови.

Основні об'єкти PostGIS (типи геометрії та географії, а також функції їх підтримки) містяться у скрипті postgis.sql. Растрові об'єкти містяться у скрипті rtpostgis.sql. Топологічні об'єкти містяться у скрипті topology.sql.

Для отримання повного набору ідентифікаторів визначення системи координат EPSG ви також можете завантажити файл визначень spatial_ref_sys.sql і заповнити таблицю spatial_ref_sys. Це дозволить вам виконувати операції ST_Transform() над геометріями.

Якщо ви бажаєте додати коментарі до функцій PostGIS, ви можете знайти їх у скрипті postgis_comments.sql. Коментарі можна переглянути, просто ввівши \dd [function_name] у вікні терміналу psql.

Виконайте наступні команди Shell у терміналі:

Code
DB=[yourdatabase]
SCRIPTSDIR=`pg_config --sharedir`/contrib/postgis-3.6/

# Core objects
psql -d ${DB} -f ${SCRIPTSDIR}/postgis.sql
psql -d ${DB} -f ${SCRIPTSDIR}/spatial_ref_sys.sql
psql -d ${DB} -f ${SCRIPTSDIR}/postgis_comments.sql # OPTIONAL

# Raster support (OPTIONAL)
psql -d ${DB} -f ${SCRIPTSDIR}/rtpostgis.sql
psql -d ${DB} -f ${SCRIPTSDIR}/raster_comments.sql # OPTIONAL

# Topology support (OPTIONAL)
psql -d ${DB} -f ${SCRIPTSDIR}/topology.sql
psql -d ${DB} -f ${SCRIPTSDIR}/topology_comments.sql # OPTIONAL

3.4. Оновлення просторових баз даних

Оновлення існуючих просторових баз даних може бути складним, оскільки вимагає заміни або впровадження нових визначень об'єктів PostGIS.

На жаль, не всі визначення можна легко замінити в активній базі даних, тому іноді найкращим варіантом є процес дампа/перезавантаження.

PostGIS надає процедуру SOFT UPGRADE для незначних випусків або випусків з виправленням помилок, а також процедуру HARD UPGRADE для основних випусків.

Перед тим, як спробувати оновити PostGIS, завжди варто зробити резервну копію ваших даних. Якщо ви використовуєте прапор -Fc для pg_dump, ви завжди зможете відновити дамп за допомогою HARD UPGRADE.

3.4.1. М'яке оновлення

Якщо ви встановили базу даних за допомогою розширень, вам також потрібно буде оновити її за допомогою моделі розширень. Якщо ви встановили базу даних за допомогою старого скрипту sql, рекомендуємо перейти на розширення, оскільки скрипт більше не підтримується.

3.4.1.1. М'яке оновлення за допомогою розширень

Якщо ви спочатку встановили PostGIS з розширеннями, то вам потрібно також оновити розширення. Незначне оновлення з розширеннями є досить простим.

Використовуйте функцію PostGIS_Extensions_Upgrade для оновлення до останньої версії, яку ви встановили.

Code
SELECT postgis_extensions_upgrade();

Якщо ви оновлюєте базу даних, яка все ще працює на PostGIS 2.5, виконайте команду ALTER EXTENSION, а потім postgis_extensions_upgrade(), щоб переконатися, що застарілі об'єкти postgis_raster повернуті в основне розширення.

Code
ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();

This second call is needed to rebundle the postgis_raster extension.

Code
SELECT postgis_extensions_upgrade();

Якщо у вас встановлено кілька версій PostGIS і ви не хочете оновлювати їх до останньої версії, ви можете явно вказати версію наступним чином:

Code
ALTER EXTENSION postgis UPDATE TO "3.7.0beta1";
ALTER EXTENSION postgis_topology UPDATE TO "3.7.0beta1";

Якщо ви отримаєте повідомлення про помилку, схоже на таке:

Вивід растрових зображень
No migration path defined for … to 3.7.0beta1

Потім вам потрібно буде створити резервну копію вашої бази даних, створити нову, як описано в Розділ 3.3.1, «Активувати просторове розширення в базі данних за допомогою EXTENSION», а потім відновити резервну копію на цій новій базі даних.

Якщо ви отримаєте таке повідомлення:

Вивід растрових зображень
Version "3.7.0beta1" of extension "postgis" is already installed

Тоді все вже оновлено і ви можете сміливо ігнорувати це. ЗА ВИНЯТКОМ випадків, коли ви намагаєтеся оновити версію з розробницької до наступної (яка не отримує нового номера версії); в цьому випадку ви можете додати "next" до рядка версії, а наступного разу вам потрібно буде знову видалити суфікс "next":

Code
ALTER EXTENSION postgis UPDATE TO "3.7.0beta1next";
        ALTER EXTENSION postgis_topology UPDATE TO "3.7.0beta1next";
[Примітка]

Якщо ви спочатку встановили PostGIS без вказання версії, то часто можна пропустити перевстановлення розширення postgis перед відновленням, оскільки резервна копія містить лише CREATE EXTENSION postgis і, отже, під час відновлення вибирає найновішу версію.

[Примітка]

If you are upgrading PostGIS extension from a version prior to 3.0.0, you will have a new extension postgis_raster which you can safely drop, if you don't need raster support.

Code
DROP EXTENSION postgis_raster;

3.4.1.2. М'яке оновлення без розширень

Розширення є підтримуваним методом інсталяції для багатьох версій. Якщо ви все ще використовуєте інсталяцію без пакетів, виконайте ЖОРСТКЕ ОНОВЛЕННЯ у базу даних, створену за допомогою розширень, і перенесіть туди свої дані.

3.4.1.3. Жорстке оновлення

Під HARD UPGRADE ми маємо на увазі повне скидання/перезавантаження баз даних з підтримкою PostGIS. HARD UPGRADE необхідний, коли змінюється внутрішнє зберігання об'єктів PostGIS або коли SOFT UPGRADE неможливий. У додатку Release Notes для кожної версії вказано, чи потрібно для оновлення виконувати скидання/перезавантаження (HARD UPGRADE).

The dump/reload process is assisted by the postgis_restore script which takes care of skipping from the dump all definitions which belong to PostGIS (including old ones), allowing you to restore your schemas and data into a database with PostGIS installed without getting duplicate symbol errors or bringing forward deprecated objects.

Додаткові інструкції для користувачів Windows доступні за посиланням Windows Hard upgrade.

Процедура виглядає наступним чином:

  1. Створіть дамп бази даних, яку ви хочете оновити, у "власному форматі" (назвемо його olddb), включіть бінарні блоки (-b) та детальний вивід (-v). Користувач може бути власником бази даних, не обов'язково мати супер-акаунт postgres.

    Code
    pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/somepath/olddb.backup" olddb
  2. Виконайте нову інсталяцію PostGIS у новій базі даних — ми будемо називати цю базу даних newdb. Інструкції щодо виконання цієї операції див. у розділах Розділ 3.3.2, «Активувати просторове розширення бази даних без використання EXTENSION (не рекомендується)» та Розділ 3.3.1, «Активувати просторове розширення в базі данних за допомогою EXTENSION».

    Записи spatial_ref_sys, знайдені у вашому дампі, будуть відновлені, але вони не замінять існуючі записи в spatial_ref_sys. Це зроблено для того, щоб виправлення в офіційному наборі були правильно передані до відновлених баз даних. Якщо з якоїсь причини ви дійсно хочете замінити стандартні записи своїми власними, просто не завантажуйте файл spatial_ref_sys.sql під час створення нової бази даних.

    Якщо ваша база даних дуже стара або ви знаєте, що використовуєте давно застарілі функції у своїх представлень та функціях, можливо, вам доведеться завантажити legacy.sql, щоб усі ваші функції, представлень тощо знову працювали належним чином. Робіть це лише у разі _реальної_ необхідності. Якщо можливо, замість цього розгляньте можливість оновлення своїх представлень та функцій перед вивантаженням. Застарілі функції можна пізніше видалити, завантаживши uninstall_legacy.sql.

  3. Відновіть резервну копію у новій базі даних newdb за допомогою postgis_restore. Несподівані помилки, якщо такі будуть, будуть виведені psql у стандартний потік помилок. Зберігайте їх у журналі.

    Code
    postgis_restore "/somepath/olddb.backup" | psql -h localhost -p 5432 -U postgres newdb 2> errors.txt

Помилки можуть виникати в таких випадках:

  1. Деякі з ваших представлень або функцій використовують застарілі об'єкти PostGIS. Щоб виправити це, ви можете спробувати завантажити скрипт legacy.sql перед відновленням або вам доведеться відновити версію PostGIS, яка все ще містить ці об'єкти, і спробувати міграцію знову після перенесення вашого коду. Якщо спосіб legacy.sql працює для вас, не забудьте виправити свій код, щоб припинити використання застарілих функцій, і видалити їх, завантаживши uninstall_legacy.sql.

  2. Деякі користувацькі записи spatial_ref_sys у файлі дампа мають недійсне значення SRID. Дійсні значення SRID більші за 0 і менші за 999000. Значення в діапазоні 999000.999999 зарезервовані для внутрішнього використання, а значення > 999999 не можуть використовуватися взагалі. Усі ваші користувацькі записи з недійсними SRID будуть збережені, а ті, що > 999999, будуть переміщені в зарезервований діапазон, але таблиця spatial_ref_sys втратить обмеження перевірки, що захищає цю інваріантність, а також, можливо, і свій первинний ключ (коли кілька недійсних SRID перетворюються на одне й те саме зарезервоване значення SRID).

    Щоб виправити цю ситуацію, слід скопіювати власний SRS до SRID із дійсним значенням (можливо, в діапазоні 910000..910999), перетворити всі таблиці на новий srid (див. UpdateGeometrySRID), видалити недійсний запис із spatial_ref_sys і повторно створити перевірку (перевірки) за допомогою:

    Code
    ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check (srid 
    > 0 AND srid < 999000 );
    
    Code
    ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid));
        

    Якщо ви оновлюєте стару базу даних, що містить французьку IGN картографію, у вас, ймовірно, будуть SRID поза діапазоном, і під час імпортування бази даних ви побачите такі проблеми:

    Code
    WARNING: SRID 310642222 converted to 999175 (in reserved zone)

    У цьому випадку ви можете спробувати виконати наступні кроки: спочатку повністю видаліть IGN із sql, що є результатом postgis_restore. Отже, після виконання:

    Code
    postgis_restore "/somepath/olddb.backup" > olddb.sql

    виконайте цю команду:

    Code
    grep -v IGNF olddb.sql > olddb-without-IGN.sql

    Create your newdb, activate the required PostGIS extensions, and insert the French IGN spatial reference definitions using this script. After these operations, import your data:

    Code
    psql -h localhost -p 5432 -U postgres -d newdb -f olddb-without-IGN.sql  2> errors.txt

Розділ 4. Data Management

4.1. Spatial Data Model

4.1.1. OGC Geometry

The Open Geospatial Consortium (OGC) developed the Simple Features Access standard (SFA) to provide a model for geospatial data. It defines the fundamental spatial type of Geometry, along with operations which manipulate and transform geometry values to perform spatial analysis tasks. PostGIS implements the OGC Geometry model as the PostgreSQL data types geometry and geography.

Geometry is an abstract type. Geometry values belong to one of its concrete subtypes which represent various kinds and dimensions of geometric shapes. These include the atomic types Point, LineString, LinearRing and Polygon, and the collection types MultiPoint, MultiLineString, MultiPolygon and GeometryCollection. The Simple Features Access - Part 1: Common architecture v1.2.1 adds subtypes for the structures PolyhedralSurface, Triangle and TIN.

Geometry models shapes in the 2-dimensional Cartesian plane. The PolyhedralSurface, Triangle, and TIN types can also represent shapes in 3-dimensional space. The size and location of shapes are specified by their coordinates. Each coordinate has a X and Y ordinate value determining its location in the plane. Shapes are constructed from points or line segments, with points specified by a single coordinate, and line segments by two coordinates.

Coordinates may contain optional Z and M ordinate values. The Z ordinate is often used to represent elevation. The M ordinate contains a measure value, which may represent time or distance. If Z or M values are present in a geometry value, they must be defined for each point in the geometry. If a geometry has Z or M ordinates the coordinate dimension is 3D; if it has both Z and M the coordinate dimension is 4D. The coordinate dimension is at least 2, because every geometry has at least X and Y coordinates.

Geometry values are associated with a spatial reference system indicating the coordinate system in which it is embedded. The spatial reference system is identified by the geometry SRID number. The units of the X and Y axes are determined by the spatial reference system. In planar reference systems the X and Y coordinates typically represent easting and northing, while in geodetic systems they represent longitude and latitude. SRID 0 represents an infinite Cartesian plane with no units assigned to its axes. See Розділ 4.5, «Spatial Reference Systems».

The geometry dimension is a property of geometry types. Point types have dimension 0, linear types have dimension 1, polygonal types have dimension 2, and solid types have dimension 3. Collections have the dimension of the maximum element dimension.

A geometry value may be empty. Empty values contain no vertices (for atomic geometry types) or no elements (for collections).

An important property of geometry values is their spatial extent or bounding box, which the OGC model calls envelope. This is the 2 or 3-dimensional box which encloses the coordinates of a geometry. It is an efficient way to represent a geometry's extent in coordinate space and to check whether two geometries interact.

The geometry model allows evaluating topological spatial relationships as described in Розділ 5.1.1, «Dimensionally Extended 9-Intersection Model». To support this the concepts of interior, boundary and exterior are defined for each geometry type. Geometries are topologically closed, so they always contain their boundary. The boundary is a geometry of dimension one less than that of the geometry itself. For example, the boundary of a Polygon is its rings (LineStrings), the boundary of a LineString is its endpoints (Points), and the boundary of a Point is empty.

The OGC geometry model defines validity rules for each geometry type. These rules ensure that geometry values represents realistic situations (e.g. it is possible to specify a polygon with a hole lying outside its shell, but this makes no sense geometrically and is thus invalid). PostGIS also allows storing and manipulating invalid geometry values. This allows detecting and fixing them if needed. See Розділ 4.4, «Перевірка геометрії»

4.1.1.1. Point

A Point is a 0-dimensional geometry that represents a single location in coordinate space.

Code
POINT (1 2)
POINT Z (1 2 3)
POINT ZM (1 2 3 4)

4.1.1.2. LineString

A LineString is a 1-dimensional line formed by a contiguous sequence of line segments. Each line segment is defined by two points, with the end point of one segment forming the start point of the next segment. An OGC-valid LineString has either zero or two or more points, but PostGIS also allows single-point LineStrings. LineStrings may cross themselves (self-intersect). A LineString is closed if the start and end points are the same. A LineString is simple if it does not self-intersect.

Code
LINESTRING (1 2, 3 4, 5 6)

4.1.1.3. LinearRing

A LinearRing is a LineString which is both closed and simple. The first and last points must be equal, and the line must not self-intersect.

Code
LINEARRING (0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0)

4.1.1.4. Polygon

A Polygon is a 2-dimensional planar region, delimited by an exterior boundary (the shell) and zero or more interior boundaries (holes). Each boundary is a LinearRing.

Code
POLYGON ((0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0), (1 1 0, 2 1 0, 2 2 0, 1 2 0, 1 1 0))

4.1.1.5. MultiPoint

A MultiPoint is a collection of Points.

Code
MULTIPOINT ( (0 0), (1 2) )

4.1.1.6. MultiLineString

A MultiLineString is a collection of LineStrings. A MultiLineString is closed if each of its elements is closed.

Code
MULTILINESTRING ( (0 0, 1 1, 1 2), (2 3, 3 2, 5 4) )

4.1.1.7. MultiPolygon

A MultiPolygon is a collection of non-overlapping, non-adjacent Polygons. Polygons in the collection may touch only at a finite number of points. (Two polygons are adjacent if they share an edge. They touch if they share only points or edges on their boundaries). For more details on MultiPolygon validity, see Розділ 4.4, «Перевірка геометрії».

Code
MULTIPOLYGON (((1 5, 5 5, 5 1, 1 1, 1 5)), ((6 5, 9 1, 6 1, 6 5)))

4.1.1.8. GeometryCollection

A GeometryCollection is a heterogeneous (mixed) collection of geometries.

Code
GEOMETRYCOLLECTION ( POINT(2 3), LINESTRING(2 3, 3 4))

4.1.1.9. PolyhedralSurface

A PolyhedralSurface is a contiguous collection of patches or facets which share some edges. Each patch is a planar Polygon. If the Polygon coordinates have Z ordinates then the surface is 3-dimensional.

Code
POLYHEDRALSURFACE Z (
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

4.1.1.10. Triangle

A Triangle is a polygon defined by three distinct non-collinear vertices. Because a Triangle is a polygon it is specified by four coordinates, with the first and fourth being equal.

Code
TRIANGLE ((0 0, 0 9, 9 0, 0 0))

4.1.1.11. TIN

A TIN is a collection of non-overlapping Triangles representing a Triangulated Irregular Network.

Code
TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )

4.1.2. SQL/MM Part 3 - Curves

The ISO/IEC 13249-3 SQL Multimedia - Spatial standard (SQL/MM) extends the OGC SFA to define Geometry subtypes containing curves with circular arcs. The SQL/MM types support 3DM, 3DZ and 4D coordinates.

[Примітка]

All floating point comparisons within the SQL-MM implementation are performed to a specified tolerance, currently 1E-8.

4.1.2.1. CircularString

CircularString is the basic curve type, similar to a LineString in the linear world. A single arc segment is specified by three points: the start and end points (first and third) and some other point on the arc. To specify a closed circle the start and end points are the same and the middle point is the opposite point on the circle diameter (which is the center of the arc). In a sequence of arcs the end point of the previous arc is the start point of the next arc, just like the segments of a LineString. This means that a CircularString must have an odd number of points greater than 1.

Code
CIRCULARSTRING(0 0, 1 1, 1 0)

CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)

4.1.2.2. CompoundCurve

A CompoundCurve is a single continuous curve that may contain both circular arc segments and linear segments. That means that in addition to having well-formed components, the end point of every component (except the last) must be coincident with the start point of the following component.

Code
COMPOUNDCURVE( CIRCULARSTRING(0 0, 1 1, 1 0), (1 0, 0 1))

4.1.2.3. CurvePolygon

A CurvePolygon is like a polygon, with an outer ring and zero or more inner rings. The difference is that a ring can be a CircularString or CompoundCurve as well as a LineString.

As of PostGIS 1.4 PostGIS supports compound curves in a curve polygon.

Code
CURVEPOLYGON(
CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),
(1 1, 3 3, 3 1, 1 1) )

Example: A CurvePolygon with the shell defined by a CompoundCurve containing a CircularString and a LineString, and a hole defined by a CircularString

Code
CURVEPOLYGON(
COMPOUNDCURVE( CIRCULARSTRING(0 0, 2 0, 2 1, 2 3, 4 3),
               (4 3, 4 5, 1 4, 0 0)),
CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )

4.1.2.4. MultiCurve

A MultiCurve is a collection of curves which can include LineStrings, CircularStrings or CompoundCurves.

Code
MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4))

4.1.2.5. MultiSurface

A MultiSurface is a collection of surfaces, which can be (linear) Polygons or CurvePolygons.

Code
MULTISURFACE(
CURVEPOLYGON(
  CIRCULARSTRING( 0 0, 4 0, 4 4, 0 4, 0 0),
  (1 1, 3 3, 3 1, 1 1)),
((10 10, 14 12, 11 10, 10 10), (11 11, 11.5 11, 11 11.5, 11 11)))

4.1.3. WKT and WKB

The OGC SFA specification defines two formats for representing geometry values for external use: Well-Known Text (WKT) and Well-Known Binary (WKB). Both WKT and WKB include information about the type of the object and the coordinates which define it.

Well-Known Text (WKT) provides a standard textual representation of spatial data. Examples of WKT representations of spatial objects are:

  • POINT(0 0)

  • POINT Z (0 0 0)

  • POINT ZM (0 0 0 0)

  • POINT EMPTY

  • LINESTRING(0 0,1 1,1 2)

  • LINESTRING EMPTY

  • POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))

  • MULTIPOINT((0 0),(1 2))

  • MULTIPOINT Z ((0 0 0),(1 2 3))

  • MULTIPOINT EMPTY

  • MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))

  • MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

  • GEOMETRYCOLLECTION(POINT(2 3), LINESTRING(2 3,3 4))

  • GEOMETRYCOLLECTION EMPTY

Input and output of WKT is provided by the functions ST_AsText and ST_GeomFromText:

Code
text WKT = geometry;
geometry = ST_GeomFromText(text WKT, SRID);

For example, a statement to create and insert a spatial object from WKT with SRID 312 is:

Code
INSERT INTO geotable ( geom, name )
VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');

Well-Known Binary (WKB) provides a portable, full-precision representation of spatial data as binary data (arrays of bytes). Examples of the WKB representations of spatial objects are:

  • WKT: POINT(1 1)

    WKB: 0101000000000000000000F03F000000000000F03

  • WKT: LINESTRING (2 2, 9 9)

    WKB: 0102000000020000000000000000000040000000000000004000000000000022400000000000002240

Input and output of WKB is provided by the functions ST_AsBinary and ST_GeomFromWKB:

Code
bytea WKB = ST_AsBinary(geometry);
geometry = ST_GeomFromWKB(bytea WKB, SRID);

For example, a statement to create and insert a spatial object from WKB is:

Code
INSERT INTO geotable ( geom, name )
VALUES ( ST_GeomFromWKB('\x0101000000000000000000f03f000000000000f03f', 312), 'A Place');

4.2. Geometry Data Type

PostGIS implements the OGC Simple Features model by defining a PostgreSQL data type called geometry. It represents all of the geometry subtypes by using an internal type code (see GeometryType and ST_GeometryType). This allows modelling spatial features as rows of tables defined with a column of type geometry.

The geometry data type is opaque, which means that all access is done via invoking functions on geometry values. Functions allow creating geometry objects, accessing or updating all internal fields, and computing new geometry values. PostGIS supports all the functions specified in the OGC Simple feature access - Part 2: SQL option (SFS) specification, as well many others. See Розділ 7, Довідка PostGIS for the full list of functions.

[Примітка]

PostGIS follows the SFA standard by prefixing spatial functions with "ST_". This was intended to stand for "Spatial and Temporal", but the temporal part of the standard was never developed. Instead it can be interpreted as "Spatial Type".

The SFA standard specifies that spatial objects include a Spatial Reference System identifier (SRID). The SRID is required when creating spatial objects for insertion into the database (it may be defaulted to 0). See ST_SRID and Розділ 4.5, «Spatial Reference Systems»

To make querying geometry efficient PostGIS defines various kinds of spatial indexes, and spatial operators to use them. See Розділ 4.9, «Spatial Indexes» and Розділ 5.2, «Using Spatial Indexes» for details.

4.2.1. PostGIS EWKB and EWKT

OGC SFA specifications initially supported only 2D geometries, and the geometry SRID is not included in the input/output representations. The OGC SFA specification 1.2.1 (which aligns with the ISO 19125 standard) adds support for 3D (ZYZ) and measured (XYM and XYZM) coordinates, but still does not include the SRID value.

Because of these limitations PostGIS defined extended EWKB and EWKT formats. They provide 3D (XYZ and XYM) and 4D (XYZM) coordinate support and include SRID information. Including all geometry information allows PostGIS to use EWKB as the format of record (e.g. in DUMP files).

EWKB and EWKT are used for the "canonical forms" of PostGIS data objects. For input, the canonical form for binary data is EWKB, and for text data either EWKB or EWKT is accepted. This allows geometry values to be created by casting a text value in either HEXEWKB or EWKT to a geometry value using ::geometry. For output, the canonical form for binary is EWKB, and for text it is HEXEWKB (hex-encoded EWKB).

For example this statement creates a geometry by casting from an EWKT text value, and outputs it using the canonical form of HEXEWKB:

Code
SELECT 'SRID=4;POINT(0 0)'::geometry;
Вивід растрових зображень
geometry
----------------------------------------------------
01010000200400000000000000000000000000000000000000

PostGIS EWKT output has a few differences to OGC WKT:

  • For 3DZ geometries the Z qualifier is omitted:

    OGC: POINT Z (1 2 3)

    EWKT: POINT (1 2 3)

  • For 3DM geometries the M qualifier is included:

    OGC: POINT M (1 2 3)

    EWKT: POINTM (1 2 3)

  • For 4D geometries the ZM qualifier is omitted:

    OGC: POINT ZM (1 2 3 4)

    EWKT: POINT (1 2 3 4)

EWKT avoids over-specifying dimensionality and the inconsistencies that can occur with the OGC/ISO format, such as:

  • POINT ZM (1 1)

  • POINT ZM (1 1 1)

  • POINT (1 1 1 1)

[Застереження]

PostGIS extended formats are currently a superset of the OGC ones, so that every valid OGC WKB/WKT is also valid EWKB/EWKT. However, this might vary in the future, if the OGC extends a format in a way that conflicts with the PosGIS definition. Thus you SHOULD NOT rely on this compatibility!

Examples of the EWKT text representation of spatial objects are:

  • POINT(0 0 0) -- XYZ

  • SRID=32632;POINT(0 0) -- XY with SRID

  • POINTM(0 0 0) -- XYM

  • POINT(0 0 0 0) -- XYZM

  • SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID

  • MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))

  • POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

  • MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))

  • GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) )

  • MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) )

  • POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

  • TRIANGLE ((0 0, 0 10, 10 0, 0 0))

  • TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )

Input and output using these formats is available using the following functions:

Code
bytea EWKB = ST_AsEWKB(geometry);
text EWKT = geometry;
geometry = ST_GeomFromEWKB(bytea EWKB);
geometry = ST_GeomFromEWKT(text EWKT);

For example, a statement to create and insert a PostGIS spatial object using EWKT is:

Code
INSERT INTO geotable ( geom, name )
VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )

4.3. Geography Data Type

The PostGIS geography data type provides native support for spatial features represented on "geographic" coordinates (sometimes called "geodetic" coordinates, or "lat/lon", or "lon/lat"). Geographic coordinates are spherical coordinates expressed in angular units (degrees).

The basis for the PostGIS geometry data type is a plane. The shortest path between two points on the plane is a straight line. That means functions on geometries (areas, distances, lengths, intersections, etc) are calculated using straight line vectors and cartesian mathematics. This makes them simpler to implement and faster to execute, but also makes them inaccurate for data on the spheroidal surface of the earth.

The PostGIS geography data type is based on a spherical model. The shortest path between two points on the sphere is a great circle arc. Functions on geographies (areas, distances, lengths, intersections, etc) are calculated using arcs on the sphere. By taking the spheroidal shape of the world into account, the functions provide more accurate results.

Because the underlying mathematics is more complicated, there are fewer functions defined for the geography type than for the geometry type. Over time, as new algorithms are added the capabilities of the geography type will expand. As a workaround one can convert back and forth between geometry and geography types.

Like the geometry data type, geography data is associated with a spatial reference system via a spatial reference system identifier (SRID). Any geodetic (long/lat based) spatial reference system defined in the spatial_ref_sys table can be used. You can add your own custom geodetic spatial reference system as described in Розділ 4.5.2, «User-Defined Spatial Reference Systems».

For all spatial reference systems the units returned by measurement functions (e.g. ST_Distance, ST_Length, ST_Perimeter, ST_Area) and for the distance argument of ST_DWithin are in meters.

4.3.1. Creating Geography Tables

You can create a table to store geography data using the CREATE TABLE SQL statement with a column of type geography. The following example creates a table with a geography column storing 2D LineStrings in the WGS84 geodetic coordinate system (SRID 4326):

Code
CREATE TABLE global_points (
  id SERIAL PRIMARY KEY,
  name VARCHAR(64),
  location geography(POINT, 4326)
);

The geography type supports two optional type modifiers:

  • the spatial type modifier restricts the kind of shapes and dimensions allowed in the column. Values allowed for the spatial type are: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION. The geography type does not support curves, TINS, or POLYHEDRALSURFACEs. The modifier supports coordinate dimensionality restrictions by adding suffixes: Z, M and ZM. For example, a modifier of 'LINESTRINGM' only allows linestrings with three dimensions, and treats the third dimension as a measure. Similarly, 'POINTZM' requires four dimensional (XYZM) data.

  • the SRID modifier restricts the spatial reference system SRID to a particular number. If omitted, the SRID defaults to 4326 (WGS84 geodetic), and all calculations are performed using WGS84.

Examples of creating tables with geography columns:

Create a table with 2D POINT geography with the default SRID 4326 (WGS84 long/lat):

Code
CREATE TABLE ptgeogwgs(gid serial PRIMARY KEY, geog geography(POINT));

Create a table with 2D POINT geography in NAD83 longlat:

Code
CREATE TABLE ptgeognad83(gid serial PRIMARY KEY, geog geography(POINT, 4269));

Create a table with 3D (XYZ) POINTs and an explicit SRID of 4326:

Code
CREATE TABLE ptzgeogwgs84(gid serial PRIMARY KEY, geog geography(POINTZ, 4326));

Create a table with 2D LINESTRING geography with the default SRID 4326:

Code
CREATE TABLE lgeog(gid serial PRIMARY KEY, geog geography(LINESTRING));

Create a table with 2D POLYGON geography with the SRID 4267 (NAD 1927 long lat):

Code
CREATE TABLE lgeognad27(gid serial PRIMARY KEY, geog geography(POLYGON, 4267));

Geography fields are registered in the geography_columns system view. You can query the geography_columns view and see that the table is listed:

Code
SELECT * FROM geography_columns;

Creating a spatial index works the same as for geometry columns. PostGIS will note that the column type is GEOGRAPHY and create an appropriate sphere-based index instead of the usual planar index used for GEOMETRY.

Code
CREATE INDEX global_points_gix ON global_points USING GIST ( location );

4.3.2. Using Geography Tables

You can insert data into geography tables in the same way as geometry. Geometry data will autocast to the geography type if it has SRID 4326. The EWKT and EWKB formats can also be used to specify geography values.

Code
INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)');
INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)');
INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');

Any geodetic (long/lat) spatial reference system listed in spatial_ref_sys table may be specified as a geography SRID. Non-geodetic coordinate systems raise an error if used.

A NAD83 longitude/latitude geography value:

Code
SELECT 'SRID=4269;POINT(-123 34)'::geography;
Вивід растрових зображень
geography
----------------------------------------------------
 0101000020AD1000000000000000C05EC00000000000004140

A NAD27 longitude/latitude geography value:

Code
SELECT 'SRID=4267;POINT(-123 34)'::geography;
Вивід растрових зображень
geography
----------------------------------------------------
 0101000020AB1000000000000000C05EC00000000000004140

NAD83 UTM zone meters fails because it is a meter-based planar projection.

Code
SELECT 'SRID=26910;POINT(-123 34)'::geography;
Вивід растрових зображень
ERROR:  Only lon/lat coordinate systems are supported in geography.

Query and measurement functions use units of meters. So distance parameters should be expressed in meters, and return values should be expected in meters (or square meters for areas).

This query finds rows within a 1000 km tolerance:

Code
SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);

You can see the power of geography in action by calculating how close a plane flying a great circle route from Seattle to London (LINESTRING(-122.33 47.606, 0.0 51.5)) comes to Reykjavik (POINT(-21.96 64.15)) (map the route).

The geography type calculates the true shortest distance of 122.235 km over the sphere between Reykjavik and the great circle flight path between Seattle and London.

Code
SELECT ST_Distance('LINESTRING(-122.33 47.606,0.0 51.5)'::geography, 'POINT(-21.96 64.15)'::geography);
Вивід растрових зображень
st_distance
-----------------
 122235.23815667

The geometry type calculates a meaningless cartesian distance between Reykjavik and the straight line path from Seattle to London plotted on a flat map of the world. The nominal units of the result is "degrees", but the result doesn't correspond to any true angular difference between the points, so even calling them "degrees" is inaccurate.

Code
SELECT ST_Distance('LINESTRING(-122.33 47.606,0.0 51.5)'::geometry, 'POINT(-21.96 64.15)'::geometry);
Вивід растрових зображень
st_distance
--------------------
 13.342271221453624
Figure
Geometry figure for visual-manual-12

4.3.3. When to use the Geography data type

The geography data type allows you to store data in longitude/latitude coordinates, but at a cost: there are fewer functions defined on GEOGRAPHY than there are on GEOMETRY; those functions that are defined take more CPU time to execute.

The data type you choose should be determined by the expected working area of the application you are building. Will your data span the globe or a large continental area, or is it local to a state, county or municipality?

  • If your data is contained in a small area, you might find that choosing an appropriate projection and using GEOMETRY is the best solution, in terms of performance and functionality available.

  • If your data is global or covers a continental region, you may find that GEOGRAPHY allows you to build a system without having to worry about projection details. You store your data in longitude/latitude, and use the functions that have been defined on GEOGRAPHY.

  • If you don't understand projections, and you don't want to learn about them, and you're prepared to accept the limitations in functionality available in GEOGRAPHY, then it might be easier for you to use GEOGRAPHY than GEOMETRY. Simply load your data up as longitude/latitude and go from there.

Refer to Розділ 13.11, «Матриця підтримки функцій PostGIS» for compare between what is supported for Geography vs. Geometry. For a brief listing and description of Geography functions, refer to Розділ 13.4, «Функції підтримки географії PostGIS»

4.3.4. Geography Advanced FAQ

4.3.4.1.

Do you calculate on the sphere or the spheroid?

By default, all distance and area calculations are done on the spheroid. You should find that the results of calculations in local areas match up well with local planar results in good local projections. Over larger areas, the spheroidal calculations will be more accurate than any calculation done on a projected plane. The difference is that the spheroid takes into account the curvature and non-spherical shape of the Earth, whereas planar calculations assume a flat surface.

All the geography functions have the option of using a sphere calculation, by setting a final boolean parameter to 'FALSE'. This will somewhat speed up calculations, particularly for cases where the geometries are very simple.

4.3.4.2.

What about the date-line and the poles?

All the calculations have no conception of date-line or poles, the coordinates are spherical (longitude/latitude) so a shape that crosses the dateline is, from a calculation point of view, no different from any other shape.

4.3.4.3.

What is the longest arc you can process?

We use great circle arcs as the "interpolation line" between two points. That means any two points are actually joined up two ways, depending on which direction you travel along the great circle. All our code assumes that the points are joined by the *shorter* of the two paths along the great circle. As a consequence, shapes that have arcs of more than 180 degrees will not be correctly modelled.

4.3.4.4.

Why is it so slow to calculate the area of Europe / Russia / insert big geographic region here ?

Because the polygon is so darned huge! Big areas are bad for two reasons: their bounds are huge, so the index tends to pull the feature no matter what query you run; the number of vertices is huge, and tests (distance, containment) have to traverse the vertex list at least once and sometimes N times (with N being the number of vertices in the other candidate feature).

As with GEOMETRY, we recommend that when you have very large polygons, but are doing queries in small areas, you "denormalize" your geometric data into smaller chunks so that the index can effectively subquery parts of the object and so queries don't have to pull out the whole object every time. Please consult ST_Subdivide function documentation. Just because you *can* store all of Europe in one polygon doesn't mean you *should*.

4.4. Перевірка геометрії

PostGIS is compliant with the Open Geospatial Consortium’s (OGC) Simple Features specification. That standard defines the concepts of geometry being simple and valid. These definitions allow the Simple Features geometry model to represent spatial objects in a consistent and unambiguous way that supports efficient computation. (Note: the OGC SF and SQL/MM have the same definitions for simple and valid.)

4.4.1. Simple Geometry

A simple geometry is one that has no anomalous geometric points, such as self intersection or self tangency.

A POINT is inherently simple as a 0-dimensional geometry object.

MULTIPOINTs are simple if no two coordinates (POINTs) are equal (have identical coordinate values).

A LINESTRING is simple if it does not pass through the same point twice, except for the endpoints. If the endpoints of a simple LineString are identical it is called closed and referred to as a Linear Ring.

Use ST_IsSimple to classify linear geometries. Each labeled result below is returned only when the function agrees with the stated classification; example (c) also verifies that the simple LineString is closed.

Code
WITH cases(label, geom) AS (VALUES
  ('a', 'LINESTRING (10 190, 140 130, 70 80, 190 10)'::geometry),
  ('b', 'LINESTRING (10 190, 130 40, 170 160, 10 10)'::geometry),
  ('c', 'LINESTRING (90 190, 120 190, 130 140, 190 50, 70 10, 10 70, 10 150, 90 190)'::geometry),
  ('d', 'LINESTRING (90 190, 120 190, 50 60, 130 10, 190 50, 160 90, 10 150, 90 190)'::geometry)
)
SELECT
  (SELECT geom FROM cases WHERE label = 'a' AND ST_IsSimple(geom))
    AS "input_(a) simple",
  (SELECT geom FROM cases WHERE label = 'b' AND NOT ST_IsSimple(geom))
    AS "input_(b) not simple",
  (SELECT geom FROM cases
             WHERE label = 'c' AND ST_IsSimple(geom) AND ST_IsClosed(geom))
    AS "input_(c) simple, closed",
  (SELECT geom FROM cases WHERE label = 'd' AND NOT ST_IsSimple(geom))
    AS "input_(d) not simple";
Вивід растрових зображень
-[ RECORD 1 ]----------
input_(a) simple         | LINESTRING(10 190,140 130,70 80,190 10)
input_(b) not simple     | LINESTRING(10 190,130 40,170 160,10 10)
input_(c) simple, closed | LINESTRING(90 190,120 190,130 140,190 50,70 10,10 70,10 150,90 190)
input_(d) not simple     | LINESTRING(90 190,120 190,50 60,130 10,190 50,160 90,10 150,90 190)
Figure
Geometry figure for visual-simple-linestrings

A MULTILINESTRING is simple only if all of its elements are simple and the only intersection between any two elements occurs at points that are on the boundaries of both elements.

The next example applies the same classification to the three MultiLineStrings. In (f) the component lines meet only at a shared endpoint, while in (g) they cross in their interiors.

Code
WITH cases(label, geom) AS (VALUES
  ('e', 'MULTILINESTRING ((30 190, 60 60, 170 10), (100 190, 180 150, 160 70))'::geometry),
  ('f', 'MULTILINESTRING ((30 190, 60 60, 170 10), (30 190, 180 150, 160 70))'::geometry),
  ('g', 'MULTILINESTRING ((30 190, 60 60, 170 10), (100 190, 180 150, 80 10))'::geometry)
)
SELECT
  (SELECT geom FROM cases WHERE label = 'e' AND ST_IsSimple(geom))
    AS "input_(e) simple",
  (SELECT geom FROM cases WHERE label = 'f' AND ST_IsSimple(geom))
    AS "input_(f) simple",
  (SELECT geom FROM cases WHERE label = 'g' AND NOT ST_IsSimple(geom))
    AS "input_(g) not simple";
Вивід растрових зображень
-[ RECORD 1 ]----------
input_(e) simple     | MULTILINESTRING((30 190,60 60,170 10),(100 190,180 150,160 70))
input_(f) simple     | MULTILINESTRING((30 190,60 60,170 10),(30 190,180 150,160 70))
input_(g) not simple | MULTILINESTRING((30 190,60 60,170 10),(100 190,180 150,80 10))
Figure
Geometry figure for visual-simple-multilinestrings

POLYGONs are formed from linear rings, so valid polygonal geometry is always simple.

Generally, PostGIS functions do not require geometric arguments to be simple. Simplicity is primarily used as a basis for defining geometric validity. It is also a requirement for some kinds of spatial data models (for example, linear networks often disallow lines that cross). Multipoint and linear geometry can be made simple using ST_UnaryUnion.

4.4.2. Valid Geometry

Geometry validity primarily applies to 2-dimensional geometries (POLYGONs and MULTIPOLYGONs) . Validity is defined by rules that allow polygonal geometry to model planar areas unambiguously.

A POLYGON is valid if:

  1. the polygon boundary rings (the exterior shell ring and interior hole rings) are simple (do not cross or self-touch). Because of this a polygon cannot have cut lines, spikes or loops. This implies that polygon holes must be represented as interior rings, rather than by the exterior ring self-touching (a so-called "inverted hole").

  2. boundary rings do not cross

  3. boundary rings may touch at points but only as a tangent (i.e. not in a line)

  4. interior rings are contained in the exterior ring

  5. the polygon interior is simply connected (i.e. the rings must not touch in a way that splits the polygon into more than one part)

Consecutive repeated points in a polygon boundary ring do not make the ring non-simple. Under the SFS curve model, a curve is interpreted by a continuous parameterization; consecutive equal coordinates are topologically indistinguishable from a single vertex. PostGIS therefore treats them as redundant vertices, so they do not make an otherwise valid polygon invalid.

The following examples use ST_IsValid to check the validity rules. Each labeled geometry is returned only if its computed validity agrees with the label.

Code
WITH cases(label, geom) AS (VALUES
  ('h', 'POLYGON ((10 140, 90 190, 130 170, 190 60, 160 10, 50 20, 10 140),
                 (50 100, 70 80, 110 100, 110 140, 50 100))'::geometry),
  ('i', 'POLYGON ((10 140, 90 190, 130 170, 190 60, 160 10, 50 20, 10 140),
                 (190 60, 140 40, 110 60, 120 90, 190 60))'::geometry)
)
SELECT
  (SELECT geom FROM cases WHERE label = 'h' AND ST_IsValid(geom))
    AS "input_(h) valid",
  (SELECT geom FROM cases WHERE label = 'i' AND ST_IsValid(geom))
    AS "input_(i) valid, tangent hole";
Вивід растрових зображень
-[ RECORD 1 ]----------
input_(h) valid               | POLYGON((10 140,90 190,130 170,190 60,160 10,50 20,10 140),(50 100,70 80,110 100,110 140,50 100))
input_(i) valid, tangent hole | POLYGON((10 140,90 190,130 170,190 60,160 10,50 20,10 140),(190 60,140 40,110 60,120 90,190 60))
Figure
Geometry figure for visual-valid-polygons

Examples (j-m) are invalid. They show, respectively, a disconnected interior, crossing rings, a cut line, and a hole outside the shell. The invalidity reason is checked with ST_IsValidReason. The disconnected interior in (j) can instead be represented as a valid MULTIPOLYGON.

Code
WITH cases(label, geom, reason_pattern) AS (VALUES
  ('(j) disconnected interior',
   'POLYGON ((10 140, 90 190, 130 170, 190 60, 160 10, 50 20, 10 140),
             (130 170, 10 140, 50 120, 110 110, 130 170))'::geometry,
   'Interior is disconnected%'),
  ('(k) crossing rings',
   'POLYGON ((10 140, 90 190, 130 170, 190 60, 160 10, 50 20, 10 140),
             (90 189, 10 139, 80 110, 110 130, 90 189))'::geometry,
   'Self-intersection%'),
  ('(l) cut line',
   'POLYGON ((10 100, 60 140, 60 190, 60 140, 130 170,
              190 60, 160 10, 50 20, 10 100))'::geometry,
   'Ring Self-intersection%'),
  ('(m) hole outside shell',
   'POLYGON ((10 40, 10 100, 130 130, 190 80, 140 20, 50 10, 10 40),
             (81 143, 103 143, 112 162, 107 175, 89 183, 71 169, 81 143))'::geometry,
   'Hole lies outside shell%')
)
SELECT label, geom
FROM cases
WHERE NOT ST_IsValid(geom)
  AND ST_IsValidReason(geom) LIKE reason_pattern
ORDER BY label;
Вивід растрових зображень
label          | geom
-------------------------+----------------------------------------------------------------------------------------------------------------------------------------
 (j) disconnected interior | POLYGON((10 140,90 190,130 170,190 60,160 10,50 20,10 140),(130 170,10 140,50 120,110 110,130 170))
 (k) crossing rings       | POLYGON((10 140,90 190,130 170,190 60,160 10,50 20,10 140),(90 189,10 139,80 110,110 130,90 189))
 (l) cut line             | POLYGON((10 100,60 140,60 190,60 140,130 170,190 60,160 10,50 20,10 100))
 (m) hole outside shell   | POLYGON((10 40,10 100,130 130,190 80,140 20,50 10,10 40),(81 143,103 143,112 162,107 175,89 183,71 169,81 143))
Figure
Geometry figure for visual-invalid-polygons

A MULTIPOLYGON is valid if:

  1. its element POLYGONs are valid

  2. elements do not overlap (i.e. their interiors must not intersect)

  3. elements touch only at points (i.e. not along a line)

The next example checks the MultiPolygon rules. In (n) the polygons touch at only one point. In (o) they share an edge, and in (p) their interiors overlap.

Code
WITH cases(label, geom, valid, reason_pattern) AS (VALUES
  ('(n) point touch',
   'MULTIPOLYGON (((10 40, 29 118, 100 75, 180 88, 140 30, 70 10, 10 40)),
                  ((50 170, 100 190, 160 180, 180 140, 180 90, 120 120,
                    30 120, 50 170)))'::geometry,
   true, NULL),
  ('(o) shared edge',
   'MULTIPOLYGON (((10 40, 30 120, 120 120, 180 88, 140 30, 70 10, 10 40)),
                  ((50 170, 100 190, 160 180, 180 140, 180 90, 120 120,
                    30 120, 50 170)))'::geometry,
   false, 'Self-intersection%'),
  ('(p) overlap',
   'MULTIPOLYGON (((10 40, 42 93, 130 150, 180 86, 140 30, 70 10, 10 40)),
                  ((50 170, 100 190, 138 182, 149 156, 146 137, 100 100,
                    58 140, 50 170)))'::geometry,
   false, 'Self-intersection%')
)
SELECT label, geom
FROM cases
WHERE ST_IsValid(geom) = valid
  AND (valid OR ST_IsValidReason(geom) LIKE reason_pattern)
ORDER BY label;
Вивід растрових зображень
label       | geom
------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
 (n) point touch  | MULTIPOLYGON(((10 40,29 118,100 75,180 88,140 30,70 10,10 40)),((50 170,100 190,160 180,180 140,180 90,120 120,30 120,50 170)))
 (o) shared edge  | MULTIPOLYGON(((10 40,30 120,120 120,180 88,140 30,70 10,10 40)),((50 170,100 190,160 180,180 140,180 90,120 120,30 120,50 170)))
 (p) overlap      | MULTIPOLYGON(((10 40,42 93,130 150,180 86,140 30,70 10,10 40)),((50 170,100 190,138 182,149 156,146 137,100 100,58 140,50 170)))
Figure
Geometry figure for visual-validity-multipolygons

These rules mean that valid polygonal geometry is also simple.

For linear geometry the only validity rule is that LINESTRINGs must have at least two points and have non-zero length (or equivalently, have at least two distinct points.) Note that non-simple (self-intersecting) lines are valid.

Code
SELECT
ST_IsValid('LINESTRING(0 0,1 1)') AS len_nonzero,
ST_IsValid('LINESTRING(0 0,0 0,0 0)') AS len_zero,
ST_IsValid('LINESTRING(10 10,150 150,180 50,20 130)') AS self_int;
Вивід растрових зображень
len_nonzero | len_zero | self_int
-------------+----------+----------
 t           | f        | t
Figure
Geometry figure for visual-manual-18

POINT and MULTIPOINT geometries have no validity rules.

4.4.3. Managing Validity

PostGIS allows creating and storing both valid and invalid Geometry. This allows invalid geometry to be detected and flagged or fixed. There are also situations where the OGC validity rules are stricter than desired (examples of this are zero-length linestrings and polygons with inverted holes.)

Many of the functions provided by PostGIS rely on the assumption that geometry arguments are valid. For example, it does not make sense to calculate the area of a polygon that has a hole defined outside of the polygon, or to construct a polygon from a non-simple boundary line. Assuming valid geometric inputs allows functions to operate more efficiently, since they do not need to check for topological correctness. (Notable exceptions are that zero-length lines and polygons with inversions are generally handled correctly.) Also, most PostGIS functions produce valid geometry output if the inputs are valid. This allows PostGIS functions to be chained together safely.

If you encounter unexpected error messages when calling PostGIS functions (such as "GEOS Intersection() threw an error!"), you should first confirm that the function arguments are valid. If they are not, then consider using one of the techniques below to ensure the data you are processing is valid.

[Примітка]

If a function reports an error with valid inputs, then you may have found an error in either PostGIS or one of the libraries it uses, and you should report this to the PostGIS project. The same is true if a PostGIS function returns an invalid geometry for valid input.

To test if a geometry is valid use the ST_IsValid function:

Code
SELECT ST_IsValid('POLYGON ((20 180,180 180,180 20,20 20,20 180))');
Вивід растрових зображень
t
Figure
Geometry figure for visual-manual-19

Information about the nature and location of an geometry invalidity are provided by the ST_IsValidDetail function:

Code
SELECT valid, reason,location AS location
        FROM ST_IsValidDetail('POLYGON ((20 20,120 190,50 190,170 50,20 20))') AS t;
Вивід растрових зображень
valid |      reason       |                  location
-------+-------------------+---------------------------------------------
 f     | Self-intersection | POINT(91.51162790697674 141.56976744186048)
Figure
Geometry figure for visual-manual-20

In some situations it is desirable to correct invalid geometry automatically. Use the ST_MakeValid function to do this. (ST_MakeValid is a case of a spatial function that does allow invalid input!)

By default, PostGIS does not check for validity when loading geometry, because validity testing can take a lot of CPU time for complex geometries. If you do not trust your data sources, you can enforce a validity check on your tables by adding a check constraint:

Code
ALTER TABLE mytable
ADD CONSTRAINT geometry_valid_check
  CHECK (ST_IsValid(geom));

4.5. Spatial Reference Systems

A Spatial Reference System (SRS) (also called a Coordinate Reference System (CRS)) defines how geometry is referenced to locations on the Earth's surface. There are three types of SRS:

  • A geodetic SRS uses angular coordinates (longitude and latitude) which map directly to the surface of the earth.

  • A projected SRS uses a mathematical projection transformation to "flatten" the surface of the spheroidal earth onto a plane. It assigns location coordinates in a way that allows direct measurement of quantities such as distance, area, and angle. The coordinate system is Cartesian, which means it has a defined origin point and two perpendicular axes (usually oriented North and East). Each projected SRS uses a stated length unit (usually metres or feet). A projected SRS may be limited in its area of applicability to avoid distortion and fit within the defined coordinate bounds.

  • A local SRS is a Cartesian coordinate system which is not referenced to the earth's surface. In PostGIS this is specified by a SRID value of 0.

There are many different spatial reference systems in use. Common SRSes are standardized in the European Petroleum Survey Group EPSG database. For convenience PostGIS (and many other spatial systems) refers to SRS definitions using an integer identifier called a SRID.

A geometry is associated with a Spatial Reference System by its SRID value, which is accessed by ST_SRID. The SRID for a geometry can be assigned using ST_SetSRID. Some geometry constructor functions allow supplying a SRID (such as ST_Point and ST_MakeEnvelope). The EWKT format supports SRIDs with the SRID=n; prefix.

Spatial functions processing pairs of geometries (such as overlay and relationship functions) require that the input geometries are in the same spatial reference system (have the same SRID). Geometry data can be transformed into a different spatial reference system using ST_Transform and ST_TransformPipeline. Geometry returned from functions has the same SRS as the input geometries.

4.5.1. SPATIAL_REF_SYS Table

The SPATIAL_REF_SYS table used by PostGIS is an OGC-compliant database table that defines the available spatial reference systems. It holds the numeric SRIDs and textual descriptions of the coordinate systems.

The spatial_ref_sys table definition is:

Code
CREATE TABLE spatial_ref_sys (
  srid       INTEGER NOT NULL PRIMARY KEY,
  auth_name  VARCHAR(256),
  auth_srid  INTEGER,
  srtext     VARCHAR(2048),
  proj4text  VARCHAR(2048)
)

The columns are:

srid

An integer code that uniquely identifies the Spatial Reference System (SRS) within the database.

auth_name

The name of the standard or standards body that is being cited for this reference system. For example, "EPSG" is a valid auth_name.

auth_srid

The ID of the Spatial Reference System as defined by the Authority cited in the auth_name. In the case of EPSG, this is the EPSG code.

srtext

The Well-Known Text representation of the Spatial Reference System. An example of a WKT SRS representation is:

Code
PROJCS["NAD83 / UTM Zone 10N",
  GEOGCS["NAD83",
    DATUM["North_American_Datum_1983",
      SPHEROID["GRS 1980", 6378137, 298.257222101]
    ],
    PRIMEM["Greenwich", 0],
    UNIT["degree", 0.0174532925199433]
  ],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["latitude_of_origin", 0],
  PARAMETER["central_meridian", -123],
  PARAMETER["scale_factor", 0.9996],
  PARAMETER["false_easting", 500000],
  PARAMETER["false_northing", 0],
  UNIT["metre", 1]
]

For a discussion of SRS WKT, see the OGC standard Well-known text representation of coordinate reference systems.

proj4text

PostGIS uses the PROJ library to provide coordinate transformation capabilities. The proj4text column contains the PROJ coordinate definition string for a particular SRID. For example:

Code
+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m

For more information see the PROJ web site. The spatial_ref_sys.sql file contains both srtext and proj4text definitions for all EPSG projections.

When retrieving spatial reference system definitions for use in transformations, PostGIS uses fhe following strategy:

  • If auth_name and auth_srid are present (non-NULL) use the PROJ SRS based on those entries (if one exists).

  • If srtext is present create a SRS using it, if possible.

  • If proj4text is present create a SRS using it, if possible.

4.5.2. User-Defined Spatial Reference Systems

The PostGIS spatial_ref_sys table contains over 3000 of the most common spatial reference system definitions that are handled by the PROJ projection library. But there are many coordinate systems that it does not contain. You can add SRS definitions to the table if you have the required information about the spatial reference system. Or, you can define your own custom spatial reference system if you are familiar with PROJ constructs. Keep in mind that most spatial reference systems are regional and have no meaning when used outside of the bounds they were intended for.

A resource for finding spatial reference systems not defined in the core set is http://spatialreference.org/

Some commonly used spatial reference systems are: 4326 - WGS 84 Long Lat, 4269 - NAD 83 Long Lat, 3395 - WGS 84 World Mercator, 2163 - US National Atlas Equal Area, and the 60 WGS84 UTM zones. UTM zones are one of the most ideal for measurement, but only cover 6-degree regions. For WGS84 longitude/latitude data, the UTM zone is least(floor((longitude + 180) / 6) + 1, 60); the EPSG code is 32600 + zone in the northern hemisphere or 32700 + zone in the southern hemisphere.

US states use State Plane spatial reference systems (meter or feet based) - usually one or 2 exists per state. Most of the meter-based ones are in the core set, but many of the feet-based ones or ESRI-created ones will need to be copied from spatialreference.org.

You can even define non-Earth-based coordinate systems, such as Mars 2000 This Mars coordinate system is non-planar (it's in degrees spheroidal), but you can use it with the geography type to obtain length and proximity measurements in meters instead of degrees.

Here is an example of loading a custom coordinate system using an unassigned SRID and the PROJ definition for a US-centric Lambert Conformal projection:

Code
INSERT INTO spatial_ref_sys (srid, proj4text)
VALUES ( 990000,
  '+proj=lcc  +lon_0=-95 +lat_0=25 +lat_1=25 +lat_2=25 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs'
);

4.6. Spatial Tables

4.6.1. Creating a Spatial Table

You can create a table to store geometry data using the CREATE TABLE SQL statement with a column of type geometry. The following example creates a table with a geometry column storing 2D (XY) LineStrings in the BC-Albers coordinate system (SRID 3005):

Code
CREATE TABLE roads (
  id SERIAL PRIMARY KEY,
  name VARCHAR(64),
  geom geometry(LINESTRING, 3005)
);

The geometry type supports two optional type modifiers:

  • the spatial type modifier restricts the kind of shapes and dimensions allowed in the column. The value can be any of the supported geometry subtypes (e.g. POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, etc). The modifier supports coordinate dimensionality restrictions by adding suffixes: Z, M and ZM. For example, a modifier of 'LINESTRINGM' allows only linestrings with three dimensions, and treats the third dimension as a measure. Similarly, 'POINTZM' requires four dimensional (XYZM) data.

  • the SRID modifier restricts the spatial reference system SRID to a particular number. If omitted, the SRID defaults to 0.

Examples of creating tables with geometry columns:

Create a table holding any kind of geometry with the default SRID:

Code
CREATE TABLE geoms(gid serial PRIMARY KEY, geom geometry);

Create a table with 2D POINT geometry with the default SRID:

Code
CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINT));

Create a table with 3D (XYZ) POINTs and an explicit SRID of 3005:

Code
CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINTZ, 3005));

Create a table with 4D (XYZM) LINESTRING geometry with the default SRID:

Code
CREATE TABLE lines(gid serial PRIMARY KEY, geom geometry(LINESTRINGZM));

Create a table with 2D POLYGON geometry with the SRID 4267 (NAD 1927 long lat):

Code
CREATE TABLE polys(gid serial PRIMARY KEY, geom geometry(POLYGON, 4267));

It is possible to have more than one geometry column in a table. This can be specified when the table is created, or a column can be added using the ALTER TABLE SQL statement. This example adds a column that can hold 3D LineStrings:

Code
ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ, 4326);

4.6.2. GEOMETRY_COLUMNS View

The OGC Simple Features Specification for SQL defines the GEOMETRY_COLUMNS metadata table to describe geometry table structure. In PostGIS geometry_columns is a view reading from database system catalog tables. This ensures that the spatial metadata information is always consistent with the currently defined tables and views. The view structure is:

Code
\d geometry_columns
Вивід растрових зображень
View "public.geometry_columns"
      Column       |          Type          | Modifiers
-------------------+------------------------+-----------
 f_table_catalog   | character varying(256) |
 f_table_schema    | character varying(256) |
 f_table_name      | character varying(256) |
 f_geometry_column | character varying(256) |
 coord_dimension   | integer                |
 srid              | integer                |
 type              | character varying(30)  |

The columns are:

f_table_catalog, f_table_schema, f_table_name

The fully qualified name of the feature table containing the geometry column. There is no PostgreSQL analogue of "catalog" so that column is left blank. For "schema" the PostgreSQL schema name is used (public is the default).

f_geometry_column

The name of the geometry column in the feature table.

coord_dimension

The coordinate dimension (2, 3 or 4) of the column. The coordinate dimension is at least 2, representing X and Y coordinates.

srid

The ID of the spatial reference system used for the coordinate geometry in this table. It is a foreign key reference to the spatial_ref_sys table (see Розділ 4.5.1, «SPATIAL_REF_SYS Table»).

type

The type of the spatial object. To restrict the spatial column to a single type, use one of: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION or corresponding XYM versions POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM. For heterogeneous (mixed-type) collections, you can use "GEOMETRY" as the type.

4.6.3. Manually Registering Geometry Columns

Two of the cases where you may need this are the case of SQL Views and bulk inserts. For bulk insert case, you can correct the registration in the geometry_columns table by constraining the column or doing an alter table. For views, you could expose using a CAST operation. Note, if your column is typmod based, the creation process would register it correctly, so no need to do anything. Also views that have no spatial function applied to the geometry will register the same as the underlying table geometry column.

For example, suppose you have a view created like this.

Code
CREATE VIEW public.vwmytablemercator AS
SELECT gid, ST_Transform(geom, 3395) As geom, f_name
FROM public.mytable;

To register the geometry column correctly, cast the transformed geometry.

Code
DROP VIEW public.vwmytablemercator;
CREATE VIEW  public.vwmytablemercator AS
    SELECT gid, ST_Transform(geom, 3395)::geometry(Geometry, 3395) As geom, f_name
    FROM public.mytable;

If the geometry type is known to be a 2D Polygon, specify it in the cast.

Code
DROP VIEW public.vwmytablemercator;
CREATE VIEW  public.vwmytablemercator AS
    SELECT gid, ST_Transform(geom, 3395)::geometry(Polygon, 3395) As geom, f_name
    FROM public.mytable;

For a derivative table created by a bulk insert, create the table first.

Code
SELECT poi.gid, poi.geom, citybounds.city_name
INTO myschema.my_special_pois
FROM poi INNER JOIN citybounds ON ST_Intersects(citybounds.geom, poi.geom);

Create a 2D spatial index on the new table.

Code
CREATE INDEX idx_myschema_myspecialpois_geom_gist
ON myschema.my_special_pois USING gist(geom);

If the points are 3D or measured, an n-D index may be more appropriate.

Code
CREATE INDEX my_special_pois_geom_gist_nd
ON my_special_pois USING gist(geom gist_geometry_ops_nd);

Manually register the new table's geometry column in geometry_columns. This also changes the underlying table structure to make the column typmod-based.

Code
SELECT Populate_Geometry_Columns('myschema.my_special_pois'::regclass);

To retain constraint-based definition behavior, such as for inherited tables where all children do not have the same type and SRID, set the optional use_typmod argument to false.

Code
SELECT Populate_Geometry_Columns('myschema.my_special_pois'::regclass, false);

Although the old constraint-based method is still supported, direct pass-through view columns register correctly in geometry_columns for both typmod-based and constraint-based source columns. In this example we define a column using typmod and another using constraints.

Code
CREATE TABLE pois_ny(gid SERIAL PRIMARY KEY, poi_name text, cat text, geom geometry(POINT, 4326));
SELECT AddGeometryColumn('pois_ny', 'geom_2160', 2160, 'POINT', 2, false);

If we run \d pois_ny in psql, we observe they are defined differently -- one is typmod, one is constraint.

Code
\d pois_ny
Вивід растрових зображень
Table "public.pois_ny"
  Column   |         Type          |                       Modifiers

-----------+-----------------------+------------------------------------------------------
 gid       | integer               | not null default nextval('pois_ny_gid_seq'::regclass)
 poi_name  | text                  |
 cat       | character varying(20) |
 geom      | geometry(Point,4326)  |
 geom_2160 | geometry              |
Indexes:
    "pois_ny_pkey" PRIMARY KEY, btree (gid)
Check constraints:
    "enforce_dims_geom_2160" CHECK (st_ndims(geom_2160) = 2)
    "enforce_geotype_geom_2160" CHECK (geometrytype(geom_2160) = 'POINT'::text
        OR geom_2160 IS NULL)
    "enforce_srid_geom_2160" CHECK (st_srid(geom_2160) = 2160)

In geometry_columns, they both register correctly

Code
SELECT f_table_name, f_geometry_column, srid, type
FROM geometry_columns
WHERE f_table_name = 'pois_ny';
Вивід растрових зображень
f_table_name | f_geometry_column | srid | type
-------------+-------------------+------+-------
pois_ny      | geom              | 4326 | POINT
pois_ny      | geom_2160         | 2160 | POINT

However -- if we were to create a view like this

Code
CREATE VIEW vw_pois_ny_parks AS
SELECT *
  FROM pois_ny
  WHERE cat='park';

SELECT f_table_name, f_geometry_column, srid, type
    FROM geometry_columns
    WHERE f_table_name = 'vw_pois_ny_parks';

Both the typmod based geom view column and the direct constraint based view column register correctly.

Вивід растрових зображень
f_table_name   | f_geometry_column | srid |   type
------------------+-------------------+------+----------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         | 2160 | POINT

If the view applies a spatial function to the geometry, such as ST_Transform, you still need to cast the transformed column explicitly so the view can expose the correct type and SRID:

Code
DROP VIEW vw_pois_ny_parks;
CREATE VIEW vw_pois_ny_parks AS
SELECT gid, poi_name, cat,
  geom,
  ST_Transform(geom, 2160)::geometry(POINT, 2160) As geom_2160
  FROM pois_ny
  WHERE cat = 'park';
SELECT f_table_name, f_geometry_column, srid, type
    FROM geometry_columns
    WHERE f_table_name = 'vw_pois_ny_parks';
Вивід растрових зображень
f_table_name   | f_geometry_column | srid | type
------------------+-------------------+------+-------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         | 2160 | POINT

4.7. Loading Spatial Data

Once you have created a spatial table, you are ready to upload spatial data to the database. There are two built-in ways to get spatial data into a PostGIS/PostgreSQL database: using formatted SQL statements or using the Shapefile loader.

4.7.1. Using SQL to Load Data

If spatial data can be converted to a text representation (as either WKT or WKB), then using SQL might be the easiest way to get data into PostGIS. Data can be bulk-loaded into PostGIS/PostgreSQL by loading a text file of SQL INSERT statements using the psql SQL utility.

A SQL load file (roads.sql for example) might look like this:

Code
BEGIN;
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (1, 'LINESTRING(191232 243118,191108 243242)', 'Jeff Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (2, 'LINESTRING(189141 244158,189265 244817)', 'Geordie Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (3, 'LINESTRING(192783 228138,192612 229814)', 'Paul St');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (4, 'LINESTRING(189412 252431,189631 259122)', 'Graeme Ave');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (5, 'LINESTRING(190131 224148,190871 228134)', 'Phil Tce');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (6, 'LINESTRING(198231 263418,198213 268322)', 'Dave Cres');
COMMIT;

The SQL file can be loaded into PostgreSQL using psql:

Code
psql -d [database] -f roads.sql

4.7.2. Using the Shapefile Loader

The shp2pgsql data loader converts Shapefiles into SQL suitable for insertion into a PostGIS/PostgreSQL database either in geometry or geography format. The loader has several operating modes selected by command line flags.

The input must be an unpacked shapefile path. The loader does not read .zip archives directly; unpack the .shp, .shx, and .dbf files before loading.

There is also a shp2pgsql-gui graphical interface with most of the options as the command-line loader. This may be easier to use for one-off non-scripted loading or if you are new to PostGIS. It can also be configured as a plugin to PgAdminIII.

(c|a|d|p) These are mutually exclusive options:

-c

Creates a new table and populates it from the Shapefile. This is the default mode.

-a

Appends data from the Shapefile into the database table. Note that to use this option to load multiple files, the files must have the same attributes and same data types.

-d

Drops the database table before creating a new table with the data in the Shapefile.

-p

Only produces the table creation SQL code, without adding any actual data. This can be used if you need to completely separate the table creation and data loading steps.

-?

Display help screen.

-D

Use the PostgreSQL "dump" format for the output data. This can be combined with -a, -c and -d. It is much faster to load than the default "insert" SQL format. Use this for very large data sets.

-f <fid_column>, --feature-id-column <fid_column>

Specify the name of the feature id column. The default is gid. The value must be a simple PostgreSQL identifier and cannot use a PostgreSQL system column name.

-s [<FROM_SRID>:]<SRID>

Creates and populates the geometry tables with the specified SRID. Optionally specifies that the input shapefile uses the given FROM_SRID, in which case the geometries will be reprojected to the target SRID.

-k

Keep identifiers' case (column, schema and attributes). Note that attributes in Shapefile are all UPPERCASE.

-i

Coerce all integers to standard 32-bit integers, do not create 64-bit bigints, even if the DBF header signature appears to warrant it.

-I

Create a GiST index on the geometry column.

-u

Create the target table as UNLOGGED. This can speed up loading transient staging data, but PostgreSQL does not preserve unlogged table contents after a crash or unclean shutdown.

-m

Specify a file containing a set of mappings of (long) column names to 10 character DBF column names. The content of the file is one or more lines of two names separated by white space and no trailing or leading space. For example:

COLUMNNAME DBFFIELD1
AVERYLONGCOLUMNNAME DBFFIELD2

-S

Generate simple geometries instead of MULTI geometries. Will only succeed if all the geometries are actually single (I.E. a MULTIPOLYGON with a single shell, or or a MULTIPOINT with a single vertex).

-t <dimensionality>

Force the output geometry to have the specified dimensionality. Use the following strings to indicate the dimensionality: 2D, 3DZ, 3DM, 4D.

If the input has fewer dimensions that specified, the output will have those dimensions filled in with zeroes. If the input has more dimensions that specified, the unwanted dimensions will be stripped.

-w

Output WKT format, instead of WKB. Note that this can introduce coordinate drifts due to loss of precision.

-e

Execute each statement on its own, without using a transaction. This allows loading of the majority of good data when there are some bad geometries that generate errors. Note that this cannot be used with the -D flag as the "dump" format always uses a transaction.

-W <encoding>

Specify encoding of the input data (dbf file). When used, all attributes of the dbf are converted from the specified encoding to UTF8. The resulting SQL output will contain a SET CLIENT_ENCODING to UTF8 command, so that the backend will be able to reconvert from UTF8 to whatever encoding the database is configured to use internally.

-N <policy>

NULL geometries handling policy (insert*,skip,abort)

-n

-n Only import DBF file. If your data has no corresponding shapefile, it will automatically switch to this mode and load just the dbf. So setting this flag is only needed if you have a full shapefile set, and you only want the attribute data and no geometry.

-G

Use geography type instead of geometry (requires lon/lat data) in WGS84 long lat (SRID=4326)

-T <tablespace>

Specify the tablespace for the new table. Indexes will still use the default tablespace unless the -X parameter is also used. The PostgreSQL documentation has a good description on when to use custom tablespaces.

-X <tablespace>

Specify the tablespace for the new table's indexes. This applies to the primary key index, and the GIST spatial index if -I is also used.

-Z

When used, this flag will prevent the generation of ANALYZE statements. Without the -Z flag (default behavior), the ANALYZE statements will be generated.

An example session using the loader to create an input file and loading it might look like this:

Code
shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql
psql -d roadsdb -f roads.sql

A conversion and load can be done in one step using UNIX pipes:

Code
shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb

To load a directory of Shapefiles, run the loader once per file and derive the table name from the file name. On Windows cmd.exe, use a single percent sign interactively and double percent signs in a batch file:

Code
REM In a .bat file, use %%F. At an interactive cmd.exe prompt, use %F.
for %%F in ("C:\data\shapefiles\*.shp") do (
  shp2pgsql -d -D -s 4269 -I -W UTF-8 "%%~fF" "myschema.%%~nF" | psql -d roadsdb
)

If every Shapefile has the same attributes and data types and should be appended into one table, create the table from the first file and use -a for the remaining files.

4.8. Extracting Spatial Data

Spatial data can be extracted from the database using either SQL or the Shapefile dumper. The section on SQL presents some of the functions available to do comparisons and queries on spatial tables.

4.8.1. Using SQL to Extract Data

The most straightforward way of extracting spatial data out of the database is to use a SQL SELECT query to define the data set to be extracted and dump the resulting columns into a parsable text file:

Code
SELECT road_id,road_geom AS geom, road_name FROM roads;
Вивід растрових зображень
road_id | geom                                    | road_name
--------+-----------------------------------------+-----------
      1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd
      2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd
      3 | LINESTRING(192783 228138,192612 229814) | Paul St
      4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave
      5 | LINESTRING(190131 224148,190871 228134) | Phil Tce
      6 | LINESTRING(198231 263418,198213 268322) | Dave Cres
      7 | LINESTRING(218421 284121,224123 241231) | Chris Way
(6 rows)

There will be times when some kind of restriction is necessary to cut down the number of records returned. In the case of attribute-based restrictions, use the same SQL syntax as used with a non-spatial table. In the case of spatial restrictions, the following functions are useful:

ST_Intersects

This function tells whether two geometries share any space.

=

This tests whether two geometries are geometrically identical. For example, if 'POLYGON((0 0,1 1,1 0,0 0))' is the same as 'POLYGON((0 0,1 1,1 0,0 0))' (it is).

Next, you can use these operators in queries. Note that when specifying geometries and boxes on the SQL command line, you must explicitly turn the string representations into geometries function. The 312 is a fictitious spatial reference system that matches our data. So, for example:

Code
SELECT road_id, road_name
FROM roads
WHERE roads_geom='SRID=312;LINESTRING(191232 243118,191108 243242)'::geometry;

The above query would return the single record from the "ROADS_GEOM" table in which the geometry was equal to that value.

To check whether some of the roads passes in the area defined by a polygon:

Code
SELECT road_id, road_name
FROM roads
WHERE ST_Intersects(roads_geom, 'SRID=312;POLYGON((...))');

The most common spatial query will probably be a "frame-based" query, used by client software, like data browsers and web mappers, to grab a "map frame" worth of data for display.

When using the "&&" operator, you can specify either a BOX3D as the comparison feature or a GEOMETRY. When you specify a GEOMETRY, however, its bounding box will be used for the comparison.

Using a "BOX3D" object for the frame, such a query looks like this:

Code
SELECT roads_geom AS geom
FROM roads
WHERE
  roads_geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312);

Note the use of the SRID 312, to specify the projection of the envelope.

4.8.2. Using the Shapefile Dumper

The pgsql2shp table dumper connects to the database and converts a table (possibly defined by a query) into a shape file. The basic syntax is:

Code
pgsql2shp [<options
>] <database
> [<schema
>.]<table>
Code
pgsql2shp [<options
>] <database
> <query>

The commandline options are:

-f <filename>

Write the output to a particular filename.

-h <host>

The database host to connect to.

-p <port>

The port to connect to on the database host.

-P <password>

The password to use when connecting to the database.

-u <user>

The username to use when connecting to the database.

-g <geometry column>

In the case of tables with multiple geometry columns, the geometry column to use when writing the shape file.

-b

Use a binary cursor. This will make the operation faster, but will not work if any NON-geometry attribute in the table lacks a cast to text.

-r

Raw mode. Do not drop the gid field, or escape column names.

-m filename

Remap identifiers to ten character names. The content of the file is lines of two symbols separated by a single white space and no trailing or leading space: VERYLONGSYMBOL SHORTONE ANOTHERVERYLONGSYMBOL SHORTER etc.

4.9. Spatial Indexes

Spatial indexes make using a spatial database for large data sets possible. Without indexing, a search for features requires a sequential scan of every record in the database. Indexing speeds up searching by organizing the data into a structure which can be quickly traversed to find matching records.

The B-tree index method commonly used for attribute data is not very useful for spatial data, since it only supports storing and querying data in a single dimension. Data such as geometry (which has 2 or more dimensions) requires an index method that supports range query across all the data dimensions. One of the key advantages of PostgreSQL for spatial data handling is that it offers several kinds of index methods which work well for multi-dimensional data: GiST, BRIN and SP-GiST indexes.

  • GiST (Generalized Search Tree) indexes break up data into "things to one side", "things which overlap", "things which are inside" and can be used on a wide range of data-types, including GIS data. PostGIS uses an R-Tree index implemented on top of GiST to index spatial data. GiST is the most commonly-used and versatile spatial index method, and offers very good query performance.

  • BRIN (Block Range Index) indexes operate by summarizing the spatial extent of ranges of table records. Search is done via a scan of the ranges. BRIN is only appropriate for use for some kinds of data (spatially sorted, with infrequent or no update). But it provides much faster index create time, and much smaller index size.

  • SP-GiST (Space-Partitioned Generalized Search Tree) is a generic index method that supports partitioned search trees such as quad-trees, k-d trees, and radix trees (tries).

Spatial indexes store only the bounding box of geometries. Spatial queries use the index as a primary filter to quickly determine a set of geometries potentially matching the query condition. Most spatial queries require a secondary filter that uses a spatial predicate function to test a more specific spatial condition. For more information on queying with spatial predicates see Розділ 5.2, «Using Spatial Indexes».

See also the PostGIS Workshop section on spatial indexes, and the PostgreSQL manual.

4.9.1. GiST Indexes

GiST stands for "Generalized Search Tree" and is a generic form of indexing for multi-dimensional data. PostGIS uses an R-Tree index implemented on top of GiST to index spatial data. GiST is the most commonly-used and versatile spatial index method, and offers very good query performance. Other implementations of GiST are used to speed up searches on all kinds of irregular data structures (integer arrays, spectral data, etc) which are not amenable to normal B-Tree indexing. For more information see the PostgreSQL manual.

Once a spatial data table exceeds a few thousand rows, you will want to build an index to speed up spatial searches of the data (unless all your searches are based on attributes, in which case you'll want to build a normal index on the attribute fields).

The syntax for building a GiST index on a "geometry" column is as follows:

Code
CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield]);

The above syntax will always build a 2D-index. To get the an n-dimensional index for the geometry type, you can create one using this syntax:

Code
CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] gist_geometry_ops_nd);

Building a spatial index is a computationally intensive exercise. It also blocks write access to your table for the time it creates, so on a production system you may want to do in in a slower CONCURRENTLY-aware way:

Code
CREATE INDEX CONCURRENTLY [indexname] ON [tablename] USING GIST ( [geometryfield]);

After building an index, it is sometimes helpful to force PostgreSQL to collect table statistics, which are used to optimize query plans:

Code
VACUUM ANALYZE [table_name] [(column_name)];

4.9.2. BRIN Indexes

BRIN stands for "Block Range Index". It is a general-purpose index method provided by PostgreSQL. BRIN is a lossy index method, meaning that a secondary check is required to confirm that a record matches a given search condition (which is the case for all provided spatial indexes). It provides much faster index creation and much smaller index size, with reasonable read performance. Its primary purpose is to support indexing very large tables on columns which have a correlation with their physical location within the table. In addition to spatial indexing, BRIN can speed up searches on various kinds of attribute data structures (integer, arrays etc). For more information see the PostgreSQL manual.

Once a spatial table exceeds a few thousand rows, you will want to build an index to speed up spatial searches of the data. GiST indexes are very performant as long as their size doesn't exceed the amount of RAM available for the database, and as long as you can afford the index storage size, and the cost of index update on write. Otherwise, for very large tables BRIN index can be considered as an alternative.

A BRIN index stores the bounding box enclosing all the geometries contained in the rows in a contiguous set of table blocks, called a block range. When executing a query using the index the block ranges are scanned to find the ones that intersect the query extent. This is efficient only if the data is physically ordered so that the bounding boxes for block ranges have minimal overlap (and ideally are mutually exclusive). The resulting index is very small in size, but is typically less performant for read than a GiST index over the same data.

Building a BRIN index is much less CPU-intensive than building a GiST index. It's common to find that a BRIN index is ten times faster to build than a GiST index over the same data. And because a BRIN index stores only one bounding box for each range of table blocks, it's common to use up to a thousand times less disk space than a GiST index.

You can choose the number of blocks to summarize in a range. If you decrease this number, the index will be bigger but will probably provide better performance.

For BRIN to be effective, the table data should be stored in a physical order which minimizes the amount of block extent overlap. It may be that the data is already sorted appropriately (for instance, if it is loaded from another dataset that is already sorted in spatial order). Otherwise, this can be accomplished by sorting the data by a one-dimensional spatial key. One way to do this is to create a new table sorted by the geometry values (which in recent PostGIS versions uses an efficient Hilbert curve ordering):

Code
CREATE TABLE table_sorted AS
SELECT * FROM table  ORDER BY geom;

Alternatively, data can be sorted in-place by using a GeoHash as a (temporary) index, and clustering on that index:

Code
CREATE INDEX idx_temp_geohash ON table
    USING btree (ST_GeoHash(ST_Transform(geom, 4326 ), 20));
CLUSTER table USING idx_temp_geohash;

The syntax for building a BRIN index on a geometry column is:

Code
CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geome_col]);

The above syntax builds a 2D index. To build a 3D-dimensional index, use this syntax:

Code
CREATE INDEX [indexname] ON [tablename]
USING BRIN ([geome_col] brin_geometry_inclusion_ops_3d);

You can also get a 4D-dimensional index using the 4D operator class:

Code
CREATE INDEX [indexname] ON [tablename]
USING BRIN ([geome_col] brin_geometry_inclusion_ops_4d);

The above commands use the default number of blocks in a range, which is 128. To specify the number of blocks to summarise in a range, use this syntax

Code
CREATE INDEX [indexname] ON [tablename]
USING BRIN ( [geome_col] ) WITH (pages_per_range = [number]); 

Keep in mind that a BRIN index only stores one index entry for a large number of rows. If your table stores geometries with a mixed number of dimensions, it's likely that the resulting index will have poor performance. You can avoid this performance penalty by choosing the operator class with the least number of dimensions of the stored geometries

The geography datatype is supported for BRIN indexing. The syntax for building a BRIN index on a geography column is:

Code
CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geog_col]);

The above syntax builds a 2D-index for geospatial objects on the spheroid.

Currently, only "inclusion support" is provided, meaning that just the &&, ~ and @ operators can be used for the 2D cases (for both geometry and geography), and just the &&& operator for 3D geometries. There is currently no support for kNN searches.

An important difference between BRIN and other index types is that the database does not maintain the index dynamically. Changes to spatial data in the table are simply appended to the end of the index. This will cause index search performance to degrade over time. The index can be updated by performing a VACUUM, or by using a special function brin_summarize_new_values(regclass). For this reason BRIN may be most appropriate for use with data that is read-only, or only rarely changing. For more information refer to the manual.

To summarize using BRIN for spatial data:

  • Index build time is very fast, and index size is very small.

  • Index query time is slower than GiST, but can still be very acceptable.

  • Requires table data to be sorted in a spatial ordering.

  • Requires manual index maintenance.

  • Most appropriate for very large tables, with low or no overlap (e.g. points), which are static or change infrequently.

  • More effective for queries which return relatively large numbers of data records.

4.9.3. SP-GiST Indexes

SP-GiST stands for "Space-Partitioned Generalized Search Tree" and is a generic form of indexing for multi-dimensional data types that supports partitioned search trees, such as quad-trees, k-d trees, and radix trees (tries). The common feature of these data structures is that they repeatedly divide the search space into partitions that need not be of equal size. In addition to spatial indexing, SP-GiST is used to speed up searches on many kinds of data, such as phone routing, ip routing, substring search, etc. For more information see the PostgreSQL manual.

As it is the case for GiST indexes, SP-GiST indexes are lossy, in the sense that they store the bounding box enclosing spatial objects. SP-GiST indexes can be considered as an alternative to GiST indexes.

Once a GIS data table exceeds a few thousand rows, an SP-GiST index may be used to speed up spatial searches of the data. The syntax for building an SP-GiST index on a "geometry" column is as follows:

Code
CREATE INDEX [indexname] ON [tablename] USING SPGIST ( [geometryfield]);

The above syntax will build a 2-dimensional index. A 3-dimensional index for the geometry type can be created using the 3D operator class:

Code
CREATE INDEX [indexname] ON [tablename] USING SPGIST ([geometryfield] spgist_geometry_ops_3d);

Building a spatial index is a computationally intensive operation. It also blocks write access to your table for the time it creates, so on a production system you may want to do in in a slower CONCURRENTLY-aware way:

Code
CREATE INDEX CONCURRENTLY [indexname] ON [tablename] USING SPGIST ( [geometryfield]);

After building an index, it is sometimes helpful to force PostgreSQL to collect table statistics, which are used to optimize query plans:

Code
VACUUM ANALYZE [table_name] [(column_name)];

An SP-GiST index can accelerate queries involving the following operators:

  • <<, &<, &>, >>, <<|, &<|, |&>, |>>, &&, @>, <@, and ~=, for 2-dimensional indexes,

  • &/&, ~==, @>>, and <<@, for 3-dimensional indexes.

There is no support for kNN searches at the moment.

4.9.4. Tuning Index Usage

Ordinarily, indexes invisibly speed up data access: once an index is built, the PostgreSQL query planner automatically decides when to use it to improve query performance. But there are some situations where the planner does not choose to use existing indexes, so queries end up using slow sequential scans instead of a spatial index.

If you find your spatial indexes are not being used, there are a few things you can do:

  • Examine the query plan and check your query actually computes the thing you need. An erroneous JOIN, either forgotten or to the wrong table, can unexpectedly retrieve table records multiple times. To get the query plan, execute with EXPLAIN in front of the query.

  • Make sure statistics are gathered about the number and distributions of values in a table, to provide the query planner with better information to make decisions around index usage. VACUUM ANALYZE will compute both.

    You should regularly vacuum your databases anyways. Many PostgreSQL DBAs run VACUUM as an off-peak cron job on a regular basis.

  • If vacuuming does not help, you can temporarily force the planner to use the index information by using the command SET ENABLE_SEQSCAN TO OFF;. This way you can check whether the planner is at all able to generate an index-accelerated query plan for your query. You should only use this command for debugging; generally speaking, the planner knows better than you do about when to use indexes. Once you have run your query, do not forget to run SET ENABLE_SEQSCAN TO ON; so that the planner will operate normally for other queries.

  • If SET ENABLE_SEQSCAN TO OFF; helps your query to run faster, your Postgres is likely not tuned for your hardware. If you find the planner wrong about the cost of sequential versus index scans try reducing the value of RANDOM_PAGE_COST in postgresql.conf, or use SET RANDOM_PAGE_COST TO 1.1;. The default value for RANDOM_PAGE_COST is 4.0. Try setting it to 1.1 (for SSD) or 2.0 (for fast magnetic disks). Decreasing the value makes the planner more likely to use index scans.

  • If SET ENABLE_SEQSCAN TO OFF; does not help your query, the query may be using a SQL construct that the Postgres planner is not yet able to optimize. It may be possible to rewrite the query in a way that the planner is able to handle. For example, a subquery with an inline SELECT may not produce an efficient plan, but could possibly be rewritten using a LATERAL JOIN.

For more information see the Postgres manual section on Query Planning.

Розділ 5. Spatial Queries

The raison d'etre of spatial databases is to perform queries inside the database which would ordinarily require desktop GIS functionality. Using PostGIS effectively requires knowing what spatial functions are available, how to use them in queries, and ensuring that appropriate indexes are in place to provide good performance.

5.1. Determining Spatial Relationships

Spatial relationships indicate how two geometries interact with one another. They are a fundamental capability for querying geometry.

5.1.1. Dimensionally Extended 9-Intersection Model

According to the OpenGIS Simple Features Implementation Specification for SQL, "the basic approach to comparing two geometries is to make pair-wise tests of the intersections between the Interiors, Boundaries and Exteriors of the two geometries and to classify the relationship between the two geometries based on the entries in the resulting 'intersection' matrix."

In the theory of point-set topology, the points in a geometry embedded in 2-dimensional space are categorized into three sets:

Boundary

The boundary of a geometry is the set of geometries of the next lower dimension. For POINTs, which have a dimension of 0, the boundary is the empty set. The boundary of a LINESTRING is the two endpoints. For POLYGONs, the boundary is the linework of the exterior and interior rings.

Interior

The interior of a geometry are those points of a geometry that are not in the boundary. For POINTs, the interior is the point itself. The interior of a LINESTRING is the set of points between the endpoints. For POLYGONs, the interior is the areal surface inside the polygon.

Exterior

The exterior of a geometry is the rest of the space in which the geometry is embedded; in other words, all points not in the interior or on the boundary of the geometry. It is a 2-dimensional non-closed surface.

The Dimensionally Extended 9-Intersection Model (DE-9IM) describes the spatial relationship between two geometries by specifying the dimensions of the 9 intersections between the above sets for each geometry. The intersection dimensions can be formally represented in a 3x3 intersection matrix.

For a geometry g the Interior, Boundary, and Exterior are denoted using the notation I(g), B(g), and E(g). Also, dim(s) denotes the dimension of a set s with the domain of {0,1,2,F}:

  • 0 => point

  • 1 => line

  • 2 => area

  • F => empty set

Using this notation, the intersection matrix for two geometries a and b is:

 InteriorBoundaryExterior
Interiordim( I(a) ∩ I(b) )dim( I(a) ∩ B(b) )dim( I(a) ∩ E(b) )
Boundarydim( B(a) ∩ I(b) )dim( B(a) ∩ B(b) )dim( B(a) ∩ E(b) )
Exteriordim( E(a) ∩ I(b) )dim( E(a) ∩ B(b) )dim( E(a) ∩ E(b) )

The following overlapping polygons provide a concrete example. ST_Relate computes the matrix 212101212; it matches the overlap pattern T*T***T** used by ST_Overlaps.

Code
WITH example AS (
  SELECT
    'POLYGON ((140 140,140 122,135 105,126 100,118 99,110 94,100 86,97 73,102 59,98 49,87 38,70 30,55 29,40 30,28 38,20 50,14 66,10 84,6 100,4 119,4 143,6 166,10 180,18 191,28 195,40 190,55 189,67 186,86 179,112 165,124 158,133 148,140 140),(48 177,40 177,30 174,24 166,22 159,25 155,30 153,40 154,45 157,52 162,53 169,51 174,48 177))'::geometry AS a,
    'POLYGON ((75 63,79 50,87 38,95 31,108 25,124 22,140 18,154 11,166 6,176 10,184 21,188 35,190 58,190 82,193 104,190 121,185 139,178 154,166 163,154 171,139 172,124 171,112 165,96 152,92 142,92 126,86 116,79 110,75 104,72 94,73 86,75 76,75 63))'::geometry AS b
), relation AS (
  SELECT a, b, ST_Relate(a, b) AS matrix
  FROM example
)
SELECT matrix,
       ST_RelateMatch(matrix, 'T*T***T**') AS matches_overlap_pattern,
       ST_Overlaps(a, b) AS overlaps
FROM relation;
Вивід растрових зображень
matrix   | matches_overlap_pattern | overlaps
-----------+-------------------------+----------
 212101212 | t                       | t
(1 row)
Figure
Geometry figure for visual-de9im-overlapping-polygons

The executable query and generated overlay above are the visual source for the relation. The query below renders the nine cells of the same kind of matrix as a 3-by-3 set of examples. The final exterior/exterior cell is clipped to a finite viewport, since the true exterior/exterior intersection is unbounded.

Code
WITH example AS (
  SELECT
    ST_MakeEnvelope(0, 0, 6, 4) AS a,
    ST_MakeEnvelope(3, -1, 8, 3) AS b,
    ST_MakeEnvelope(-1, -2, 9, 5) AS viewport
), parts AS (
  SELECT
    a,
    b,
    ST_Boundary(a) AS ba,
    ST_Boundary(b) AS bb,
    viewport
  FROM example
)
SELECT
  ST_Relate(a, b) AS matrix,
  ST_AsText(ST_Normalize(a)) AS input_a,
  ST_AsText(ST_Normalize(b)) AS input_b,
  ST_AsText(ST_Normalize(ST_Intersection(a, b))) AS "2 I(a) ∩ I(b)",
  ST_AsText(ST_Normalize(ST_Intersection(a, bb))) AS "1 I(a) ∩ B(b)",
  ST_AsText(ST_Normalize(ST_Difference(a, b))) AS "2 I(a) ∩ E(b)",
  ST_AsText(ST_Normalize(ST_Intersection(ba, b))) AS "1 B(a) ∩ I(b)",
  ST_AsText(ST_Normalize(ST_Intersection(ba, bb))) AS "0 B(a) ∩ B(b)",
  ST_AsText(ST_Normalize(ST_Collect(
      'LINESTRING(0 0,0 4,6 4,6 3)'::geometry,
      'LINESTRING(0 0,3 0)'::geometry
  ))) AS "1 B(a) ∩ E(b)",
  ST_AsText(ST_Normalize(ST_Difference(b, a))) AS "2 E(a) ∩ I(b)",
  ST_AsText(ST_Normalize(ST_Collect(
      'LINESTRING(3 -1,8 -1,8 3,6 3)'::geometry,
      'LINESTRING(3 -1,3 0)'::geometry
  ))) AS "1 E(a) ∩ B(b)",
  ST_AsText(ST_Normalize(ST_Difference(viewport, ST_Union(a, b))))
    AS "2 E(a) ∩ E(b) clipped"
FROM parts;
Вивід растрових зображень
-[ RECORD 1 ]----------+-----------------------------------------------------------------------------
matrix                 | 212101212
input_a                | POLYGON((0 0,0 4,6 4,6 0,0 0))
input_b                | POLYGON((3 -1,3 3,8 3,8 -1,3 -1))
2 I(a) ∩ I(b)          | POLYGON((3 0,3 3,6 3,6 0,3 0))
1 I(a) ∩ B(b)          | LINESTRING(3 0,3 3,6 3)
2 I(a) ∩ E(b)          | POLYGON((0 0,0 4,6 4,6 3,3 3,3 0,0 0))
1 B(a) ∩ I(b)          | LINESTRING(3 0,6 0,6 3)
0 B(a) ∩ B(b)          | MULTIPOINT((6 3),(3 0))
1 B(a) ∩ E(b)          | MULTILINESTRING((0 0,0 4,6 4,6 3),(0 0,3 0))
2 E(a) ∩ I(b)          | POLYGON((3 -1,3 0,6 0,6 3,8 3,8 -1,3 -1))
1 E(a) ∩ B(b)          | MULTILINESTRING((3 -1,8 -1,8 3,6 3),(3 -1,3 0))
2 E(a) ∩ E(b) clipped  | POLYGON((-1 -2,-1 5,9 5,9 -2,-1 -2),(0 0,3 0,3 -1,8 -1,8 3,6 3,6 4,0 4,0 0))
Figure
Geometry figure for visual-de9im-matrix-cells

Reading from left to right and top to bottom, the intersection matrix is represented as the text string '212101212'.

For more information, refer to:

5.1.2. Named Spatial Relationships

To make it easy to determine common spatial relationships, the OGC SFS defines a set of named spatial relationship predicates. PostGIS provides these as the functions ST_Contains, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within. It also defines the non-standard relationship predicates ST_Covers, ST_CoveredBy, and ST_ContainsProperly.

Spatial predicates are usually used as conditions in SQL WHERE or JOIN clauses. The named spatial predicates automatically use a spatial index if one is available, so there is no need to use the bounding box operator && as well. For example:

Code
SELECT city.name, state.name, city.geom
FROM city JOIN state ON ST_Intersects(city.geom, state.geom);

For more details and illustrations, see the PostGIS Workshop.

5.1.3. General Spatial Relationships

In some cases the named spatial relationships are insufficient to provide a desired spatial filter condition. These requirements can be expressed by computing the full DE-9IM intersection matrix with ST_Relate.

To test a particular spatial relationship, an intersection matrix pattern is used. This is the matrix representation augmented with the additional symbols {T,*}:

  • T => intersection dimension is non-empty; i.e. is in {0,1,2}

  • * => don't care

Using intersection matrix patterns, specific spatial relationships can be evaluated succinctly. The ST_Relate and ST_RelateMatch functions can both test these patterns.

These road segments share a line segment. ST_Crosses does not find this relationship for linear features, because it only returns true when their interiors intersect at a point. The pattern 1*1***1** tests for a one-dimensional intersection instead.

Code
WITH roads AS (
  SELECT
    'LINESTRING(10 10,40 90,70 110,140 110,170 130,190 190)'::geometry AS "road A",
    'LINESTRING(10 190,50 130,90 110,130 110,160 70,180 10)'::geometry AS "road B"
), relation AS (
  SELECT "road A", "road B", ST_Relate("road A", "road B") AS matrix
  FROM roads
)
SELECT
  ST_Intersection("road A", "road B") AS overlap,
  matrix,
  ST_Crosses("road A", "road B") AS "ST_Crosses",
  ST_RelateMatch(matrix, '1*1***1**') AS "matches 1*1***1**"
FROM relation;
Вивід растрових зображень
overlap           |  matrix   | ST_Crosses | matches 1*1***1**
----------------------------+-----------+------------+-------------------
 LINESTRING(90 110,130 110) | 1F1FF0102 | f          | t
(1 row)
Figure
Geometry figure for visual-relate-overlapping-roads

The next example finds a wharf which runs from the lake interior onto its shoreline, with one endpoint on the shoreline. The other wharves provide nearby counterexamples in the figure. The pattern 102101FF2 expresses the complete required relationship in one test.

Code
WITH data AS (
  SELECT
    'POLYGON((-20 10,30 30,80 70,110 80,145 85,190 110,300 220,230 220,-20 220,-20 10))'::geometry AS lake,
    'MULTILINESTRING((120 180,145 85,110 80),(10 130,30 70),(90 140,110 80,94.81118881118876 75.83496503496498),(150 160,180 80))'::geometry AS wharves
), wharf AS (
  SELECT lake, (item).path[1] AS id, (item).geom
  FROM data CROSS JOIN LATERAL ST_Dump(wharves) AS item
), relation AS (
  SELECT id, geom, ST_Relate(lake, geom) AS matrix
  FROM wharf
)
SELECT
  id AS wharf,
  geom AS "matching wharf",
  matrix
FROM relation
WHERE ST_RelateMatch(matrix, '102101FF2')
ORDER BY id;
Вивід растрових зображень
wharf |           matching wharf           |  matrix
-------+-----------------------------------+-----------
     1 | LINESTRING(120 180,145 85,110 80) | 102101FF2
(1 row)
Figure
Geometry figure for visual-relate-lake-wharves

5.2. Using Spatial Indexes

When constructing queries using spatial conditions, for best performance it is important to ensure that a spatial index is used, if one exists (see Розділ 4.9, «Spatial Indexes»). To do this, a spatial operator or index-aware function must be used in a WHERE or ON clause of the query.

Spatial operators include the bounding box operators (of which the most commonly used is &&; see Розділ 7.10.1, «Оператори обмежувальної рамки» for the full list) and the distance operators used in nearest-neighbor queries (the most common being <->; see Розділ 7.10.2, «Оператори відстані» for the full list.)

Index-aware functions automatically add a bounding box operator to the spatial condition. Index-aware functions include the named spatial relationship predicates ST_Contains, ST_ContainsProperly, ST_CoveredBy, ST_Covers, ST_Crosses, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within, ST_Within, and ST_3DIntersects, and the distance predicates ST_DWithin, ST_DFullyWithin, ST_3DDFullyWithin, and ST_3DDWithin .)

Functions such as ST_Distance do not use indexes to optimize their operation. For example, the following query would be quite slow on a large table:

Code
SELECT geom
FROM geom_table
WHERE ST_Distance(geom, 'SRID=312;POINT(100000 200000)') < 100

This query selects all the geometries in geom_table which are within 100 units of the point (100000, 200000). It will be slow because it is calculating the distance between each point in the table and the specified point, ie. one ST_Distance() calculation is computed for every row in the table.

The number of rows processed can be reduced substantially by using the index-aware function ST_DWithin:

Code
SELECT geom
FROM geom_table
WHERE ST_DWithin(geom, 'SRID=312;POINT(100000 200000)', 100)

This query selects the same geometries, but it does it in a more efficient way. This is enabled by ST_DWithin() using the && operator internally on an expanded bounding box of the query geometry. If there is a spatial index on geom, the query planner will recognize that it can use the index to reduce the number of rows scanned before calculating the distance. The spatial index allows retrieving only records with geometries whose bounding boxes overlap the expanded extent and hence which might be within the required distance. The actual distance is then computed to confirm whether to include the record in the result set.

For more information and examples see the PostGIS Workshop.

5.3. Examples of Spatial SQL

The examples in this section make use of a table of linear roads, and a table of polygonal municipality boundaries. The definition of the bc_roads table is:

Вивід растрових зображень
Column    | Type              | Description
----------+-------------------+-------------------
gid       | integer           | Unique ID
name      | character varying | Road Name
geom      | geometry          | Location Geometry (Linestring)

The definition of the bc_municipality table is:

Вивід растрових зображень
Column   | Type              | Description
---------+-------------------+-------------------
gid      | integer           | Unique ID
code     | integer           | Unique ID
name     | character varying | City / Town Name
geom     | geometry          | Location Geometry (Polygon)

5.3.1.

What is the total length of all roads, expressed in kilometers?

You can answer this question with a very simple piece of SQL:

Code
SELECT sum(ST_Length(geom))/1000 AS km_roads FROM bc_roads;
Вивід растрових зображень
km_roads
------------------
70842.1243039643

5.3.2.

How large is the city of Prince George, in hectares?

This query combines an attribute condition (on the municipality name) with a spatial calculation (of the polygon area):

Code
SELECT
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
WHERE name = 'PRINCE GEORGE';
Вивід растрових зображень
hectares
------------------
32657.9103824927

5.3.3.

What is the largest municipality in the province, by area?

This query uses a spatial measurement as an ordering value. There are several ways of approaching this problem, but the most efficient is below:

Code
SELECT
  name,
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
ORDER BY hectares DESC
LIMIT 1;
Вивід растрових зображень
name           | hectares
---------------+-----------------
TUMBLER RIDGE  | 155020.02556131

Note that in order to answer this query we have to calculate the area of every polygon. If we were doing this a lot it would make sense to add an area column to the table that could be indexed for performance. By ordering the results in a descending direction, and them using the PostgreSQL "LIMIT" command we can easily select just the largest value without using an aggregate function like MAX().

5.3.4.

What is the length of roads fully contained within each municipality?

This is an example of a "spatial join", which brings together data from two tables (with a join) using a spatial interaction ("contained") as the join condition (rather than the usual relational approach of joining on a common key):

Code
SELECT
  m.name,
  sum(ST_Length(r.geom))/1000 as roads_km
FROM bc_roads AS r
JOIN bc_municipality AS m
  ON ST_Contains(m.geom, r.geom)
GROUP BY m.name
ORDER BY roads_km;
Вивід растрових зображень
name                        | roads_km
----------------------------+----------
SURREY                      | 1539.476
VANCOUVER                   | 1450.331
LANGLEY DISTRICT            |  833.793
BURNABY                     |  773.769
PRINCE GEORGE               |  694.376
...

This query takes a while, because every road in the table is summarized into the final result (about 250K roads for the example table). For smaller datasets (several thousand records on several hundred) the response can be very fast.

5.3.5.

Create a new table with all the roads within the city of Prince George.

This is an example of an "overlay", which takes in two tables and outputs a new table that consists of spatially clipped or cut resultants. Unlike the "spatial join" demonstrated above, this query creates new geometries. An overlay is like a turbo-charged spatial join, and is useful for more exact analysis work:

Code
CREATE TABLE pg_roads as
SELECT
  ST_Intersection(r.geom, m.geom) AS intersection_geom,
  ST_Length(r.geom) AS rd_orig_length,
  r.*
FROM bc_roads AS r
JOIN bc_municipality AS m
  ON ST_Intersects(r.geom, m.geom)
WHERE
  m.name = 'PRINCE GEORGE';

5.3.6.

What is the length in kilometers of "Douglas St" in Victoria?

Code
SELECT
  sum(ST_Length(r.geom))/1000 AS kilometers
FROM bc_roads r
JOIN bc_municipality m
  ON ST_Intersects(m.geom, r.geom
WHERE
  r.name = 'Douglas St'
  AND m.name = 'VICTORIA';
Вивід растрових зображень
kilometers
------------------
4.89151904172838

5.3.7.

What is the largest municipality polygon that has a hole?

Code
SELECT gid, name, ST_Area(geom) AS area
FROM bc_municipality
WHERE ST_NRings(geom) 
> 1
ORDER BY area DESC LIMIT 1;
Вивід растрових зображень
gid  | name         | area
-----+--------------+------------------
12   | SPALLUMCHEEN | 257374619.430216

Розділ 6. Поради щодо продуктивності

6.1. Невеликі таблиці великих геометрій

6.1.1. Опис проблеми

Поточні версії PostgreSQL мають слабкість оптимізатора запитів щодо таблиць TOAST. Таблиці TOAST — це свого роду «додатковий простір», що використовується для зберігання великих (у сенсі розміру даних) значень, які не вміщуються у звичайні сторінки даних (наприклад, довгі тексти, зображення або складні геометрії з великою кількістю вершин). Див. документацію PostgreSQL щодо TOAST для отримання додаткової інформації).

Проблема виникає, якщо у вас є таблиця з досить великими геометріями, але не надто великою кількістю рядків (наприклад, таблиця, що містить межі всіх європейських країн у високій роздільній здатності). Тоді сама таблиця є невеликою, але використовує багато простору TOAST. У нашому прикладі таблиця мала близько 80 рядків і використовувала лише 3 сторінки даних, але таблиця TOAST використовувала 8225 сторінок.

Тепер виконайте запит, в якому використовується оператор геометрії && для пошуку обмежувального прямокутника, який відповідає лише деяким із цих рядків. Тепер оптимізатор запитів бачить, що таблиця має лише 3 сторінки та 80 рядків. Він оцінює, що послідовне сканування такої невеликої таблиці буде набагато швидшим, ніж використання індексу. Тому він вирішує проігнорувати індекс GIST. Зазвичай така оцінка є правильною. Але в нашому випадку оператор && повинен витягнути кожну геометрію з диска, щоб порівняти обмежувальні прямокутники, тим самим прочитавши також усі сторінки TOAST.

Щоб перевірити, чи є у вас ця проблема, скористайтеся командою postgresql "EXPLAIN ANALYZE". Більш детальну інформацію та технічні подробиці можна знайти у темі на форумі PostgreSQL performance mailing list: http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php

та новіша тема на PostGIS https://lists.osgeo.org/pipermail/postgis-devel/2017-June/026209.html

6.1.2. Обхідні шляхи

Розробники PostgreSQL намагаються вирішити цю проблему, зробивши оцінку запиту TOAST-сумісною. Наразі існують два обхідні шляхи:

Перший спосіб вирішення проблеми полягає в тому, щоб змусити планувальник запитів використовувати індекс. Перед відправкою запиту надішліть на сервер команду "SET enable_seqscan TO off;". Це змусить планувальник запитів уникати послідовного сканування, коли це можливо. Таким чином, він буде використовувати індекс GIST, як зазвичай. Але цей прапор потрібно встановлювати для кожного з'єднання, і це призводить до неправильних оцінок планувальника запитів в інших випадках, тому після запиту слід виконати команду "SET enable_seqscan TO on;".

Другий спосіб вирішення проблеми полягає в тому, щоб зробити послідовне сканування таким же швидким, як вважає планувальник запитів. Це можна досягти, створивши додатковий стовпець, який "кешує" bbox, і зіставляючи його з цим стовпцем. У нашому прикладі команди виглядають так:

Code
SELECT AddGeometryColumn('myschema', 'mytable', 'bbox', '4326', 'GEOMETRY', '2');
UPDATE mytable SET bbox = ST_Envelope(ST_Force2D(geom));

Тепер змініть запит, щоб використовувати оператор && для bbox замість geom_column, наприклад:

Code
SELECT geom_column
FROM mytable
WHERE bbox && ST_SetSRID('BOX3D(0 0,1 1)'::box3d,4326);

Звичайно, якщо ви змінюєте або додаєте рядки до таблиці mytable, ви повинні синхронізувати bbox. Найпростіший спосіб зробити це — використовувати тригери, але ви також можете змінити свою програму, щоб стовпець bbox завжди був актуальним, або виконувати запит UPDATE після кожної зміни.

6.2. Кластеризація за геометричними індексами

The PostgreSQL CLUSTER command physically reorders table rows according to an index. For a mostly read-only table whose queries frequently use the same spatial index, this can reduce I/O and improve cache locality.

PostgreSQL supports clustering on GiST indices, including indices on nullable geometry columns. To cluster a table using a geometry index:

Code
CLUSTER my_table USING my_geom_index;
Вивід растрових зображень
CLUSTER

6.3. Уникнення перетворення вимірів

Іноді в таблиці трапляються дані 3D або 4D, але доступ до них завжди здійснюється за допомогою функцій ST_AsText() або ST_AsBinary(), сумісних з OpenGIS, які виводять тільки 2D-геометрії. Вони роблять це шляхом внутрішнього виклику функції ST_Force2D(), що створює значне навантаження для великих геометрій. Щоб уникнути цього навантаження, можна попередньо видалити ці додаткові виміри один раз і назавжди:

Code
UPDATE mytable SET geom = ST_Force2D(geom);
VACUUM FULL ANALYZE mytable;

Зверніть увагу, що якщо ви додали стовпець геометрії за допомогою AddGeometryColumn(), буде обмеження на розмір геометрії. Щоб обійти це обмеження, вам потрібно буде видалити обмеження. Не забудьте оновити запис у таблиці geometry_columns і потім знову створити обмеження.

У разі великих таблиць може бути доцільним розділити це оновлення на менші частини, обмеживши оновлення частиною таблиці за допомогою оператора WHERE та вашого первинного ключа або іншого можливого критерію, а також виконавши просту команду "VACUUM;" між оновленнями. Це значно зменшує потребу в тимчасовому дисковому просторі. Крім того, якщо ви маєте змішані геометрії розмірів, обмеження UPDATE за допомогою "WHERE dimension(geom)>2" пропускає перезапис геометрій, які вже є у 2D.

Розділ 7. Довідка PostGIS

Нижче наведено функції, які можуть знадобитися користувачеві PostGIS. Існують також інші функції, які є необхідними допоміжними функціями для об'єктів PostGIS, але не використовуються звичайними користувачами.

[Примітка]

PostGIS розпочав перехід від існуючої конвенції іменування до конвенції, орієнтованої на SQL-MM. В результаті, більшість функцій, які ви знаєте і любите, були перейменовані з використанням стандартного префікса просторового типу (ST). Попередні функції все ще доступні, хоча вони не вказані в цьому документі, де наведено оновлені функції, які є еквівалентними. Функції, що не вказані в цій документації, є застарілими і будуть видалені в майбутніх версіях, тому ПРИПИНІТЬ ЇХ ВИКОРИСТОВУВАТИ.

7.1. Типи даних PostGIS Geometry/Geography/Box

Анотація

У цьому розділі перелічено власні типи даних PostgreSQL, встановлені PostGIS для представлення просторових даних.

Кожен тип даних описує свою поведінку при перетворенні типів. Перетворення типів перетворює значення одного типу даних в інший тип. PostgreSQL дозволяє визначати поведінку перетворення для власних типів, а також функції, що використовуються для перетворення значень типів. Перетворення можуть мати автоматичну поведінку, що дозволяє автоматично перетворювати аргумент функції на тип, який підтримується функцією.

Деякі приведення мають явну поведінку, що означає, що приведення повинно бути вказано за допомогою синтаксису CAST(myval As sometype) або myval::sometype. Явне приведення типів дозволяє уникнути проблеми неоднозначних приведень, яка може виникнути при використанні перевантаженої функції, що не підтримує певний тип. Наприклад, функція може приймати box2d або box3d, але не geometry. Оскільки geometry має автоматичне приведення до обох типів box, це призводить до помилки «неоднозначна функція». Щоб запобігти помилці, використовуйте явне приведення до бажаного типу box.

Всі типи даних можуть бути перетворені в text, тому це не потрібно вказувати явно.

  • box2d — Тип, що представляє двовимірну обмежувальну рамку.
  • box3d — Тип, що представляє тривимірну обмежувальну рамку.
  • geometry — Тип, що представляє просторові об'єкти з плоскими системами координат.
  • geometry_dump — Композитний тип, що використовується для опису частин складної геометрії.
  • geography — Тип, що представляє просторові об'єкти з геодезичними (еліпсоїдальними) системами координат.

Назва

box2d — Тип, що представляє двовимірну обмежувальну рамку.

Опис

box2d — це тип просторових даних, що використовується для представлення двовимірної обмежувальної рамки, яка охоплює геометрію або сукупність геометрій. Наприклад, агрегатна функція ST_Extent повертає об'єкт box2d.

Представлення містить значення xmin, ymin, xmax, ymax. Це мінімальні та максимальні значення розмірів X та Y.

Об'єкти box2d мають текстове представлення, яке виглядає як BOX(1 2,5 6).

Поведінка при приведення типів

У цій таблиці наведено автоматичні та явні перетворення, дозволені для цього типу даних:

Приведення типів вПоведінка
box3dавтоматичне
geometryавтоматичне

Назва

box3d — Тип, що представляє тривимірну обмежувальну рамку.

Опис

box3d — це тип просторових даних PostGIS, який використовується для представлення тривимірної обмежувальної рамки, що охоплює геометрію або сукупність геометрій. Наприклад, агрегатна функція ST_3DExtent повертає об'єкт box3d.

Представлення містить значення xmin, ymin, zmin, xmax, ymax, zmax. Це мінімальні та максимальні значення розмірів X, Y та Z.

Об'єкти box3d мають текстове представлення, яке виглядає як BOX3D(1 2 3,5 6 5).

Поведінка при приведення типів

У цій таблиці наведено автоматичні та явні перетворення, дозволені для цього типу даних:

Приведення типів вПоведінка
boxавтоматичне
box2dавтоматичне
geometryавтоматичне

Назва

geometry — Тип, що представляє просторові об'єкти з плоскими системами координат.

Опис

geometry — це основний тип просторових даних PostGIS, який використовується для представлення об'єкта в планарних (евклідових) системах координат.

Усі просторові операції над геометрією використовують одиниці виміру просторової системи координат, в якій знаходиться геометрія.

Поведінка при приведення типів

У цій таблиці наведено автоматичні та явні перетворення, дозволені для цього типу даних:

Приведення типів вПоведінка
boxавтоматичне
box2dавтоматичне
box3dавтоматичне
byteaавтоматичне
geographyавтоматичне
textавтоматичне

Назва

geometry_dump — Композитний тип, що використовується для опису частин складної геометрії.

Опис

geometry_dump — це складний тип даних, що містить такі поля:

  • geom — геометрія, що представляє компонент скинутої геометрії. Тип геометрії залежить від вихідної функції.

  • path[] — масив цілих чисел, що визначає шлях навігації в межах скинутої геометрії до компонента geom. Масив шляхів базується на 1 (тобто path[1] є першим елементом)

Він використовується сімейством функцій ST_Dump* як тип виводу для розбиття складної геометрії на складові частини.


Назва

geography — Тип, що представляє просторові об'єкти з геодезичними (еліпсоїдальними) системами координат.

Опис

geography — це тип просторових даних, що використовується для представлення об'єкта в геодезичних системах координат. Геодезичні системи координат моделюють Землю за допомогою еліпсоїда.

Просторові операції з типом географії забезпечують більш точні результати завдяки врахуванню еліпсоїдальної моделі.

Поведінка при приведення типів

У цій таблиці наведено автоматичні та явні перетворення, дозволені для цього типу даних:

Приведення типів вПоведінка
geometryexplicit

7.2. Функції управління таблицями

Анотація

Ці функції допомагають визначати таблиці, що містять стовпці геометрії.

  • AddGeometryColumn — Додає стовпець геометрії до існуючої таблиці.
  • DropGeometryColumn — Видаляє стовпець геометрії з просторової таблиці.
  • DropGeometryTable — Видаляє таблицю та всі її посилання в geometry_columns.
  • Find_SRID — Повертає SRID, визначений для стовпця геометрії.
  • Populate_Geometry_Columns — Забезпечує, щоб стовпці геометрії були визначені з модифікаторами типу або мали відповідні просторові обмеження.
  • UpdateGeometrySRID — Оновлює SRID всіх об'єктів у стовпці геометрії та метадані таблиці.

Назва

AddGeometryColumn — Додає стовпець геометрії до існуючої таблиці.

Короткий огляд

text AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

Опис

Додає стовпець геометрії до існуючої таблиці атрибутів. schema_name — це ім'я схеми таблиці. srid має бути цілочисельним значенням, що посилається на запис у таблиці SPATIAL_REF_SYS. type повинен бути рядком, що відповідає типу геометрії, наприклад, 'POLYGON' або 'MULTILINESTRING' . Якщо schema_name не існує (або не видно в поточному search_path) або вказаний SRID, тип геометрії або розмір є недійсними, виникає помилка.

Змінено: 2.0.0 Ця функція більше не оновлює geometry_columns, оскільки geometry_columns є поданням, яке зчитує дані з системних каталогів. За замовчуванням вона також не створює обмежень, а замість цього використовує вбудовану поведінку модифікатора типу PostgreSQL. Наприклад, створення стовпця wgs84 POINT за допомогою цієї функції тепер еквівалентно: ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);

Змінено: 2.0.0 Якщо вам потрібна стара поведінка обмежень, використовуйте стандартне значення use_typmod, але встановіть його на false.

Змінено: 2.0.0 Види більше не можна реєструвати вручну в geometry_columns, однак види, побудовані на основі геометрій таблиць типу typmod і використовувані без функцій-обгортки, реєструватимуться правильно, оскільки вони успадковують поведінку типу typmod стовпця батьківської таблиці. Види, які використовують функції геометрії, що виводять інші геометрії, потрібно буде перетворити на геометрії типу typmod, щоб ці стовпці геометрії виду були зареєстровані правильно в geometry_columns. Див. Розділ 4.6.3, «Manually Registering Geometry Columns».

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Покращено: 2.0.0 Додано аргумент use_typmod. За замовчуванням створюється стовпець геометрії typmod замість стовпця на основі обмежень.

Приклади

This example creates a schema to hold data.

Code
CREATE SCHEMA my_schema;

Create a simple PostgreSQL table in the schema.

Code
CREATE TABLE my_schema.my_spatial_table (id serial);

Describing the table shows a single id column.

Code
\d my_schema.my_spatial_table
Вивід растрових зображень
Table "my_schema.my_spatial_table"
 Column |  Type   |                                Modifiers
--------+---------+-------------------------------------------------------------------------
 id     | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)

Add a spatial column to the table.

Code
SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geom', 4326, 'POINT', 2);

Add a point column using the old constraint-based behavior.

Code
SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geom_c', 4326, 'POINT', 2, false);

Add a CurvePolygon column using the old constraint-based behavior.

Code
SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geomcp_c', 4326, 'CURVEPOLYGON', 2, false);
Вивід растрових зображень
my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2

Describe the table again to see the new geometry columns.

Code
\d my_schema.my_spatial_table
Вивід растрових зображень
Table "my_schema.my_spatial_table"

Columns:
  id       integer               not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)
  geom     geometry(Point,4326)
  geom_c   geometry
  geomcp_c geometry

Check constraints:
    "enforce_dims_geom_c" CHECK (st_ndims(geom_c) = 2)
    "enforce_dims_geomcp_c" CHECK (st_ndims(geomcp_c) = 2)
    "enforce_geotype_geom_c" CHECK (geometrytype(geom_c) = 'POINT'::text OR geom_c IS NULL)
    "enforce_geotype_geomcp_c" CHECK (geometrytype(geomcp_c) = 'CURVEPOLYGON'::text OR geomcp_c IS NULL)
    "enforce_srid_geom_c" CHECK (st_srid(geom_c) = 4326)
    "enforce_srid_geomcp_c" CHECK (st_srid(geomcp_c) = 4326)

The geometry_columns view also registers the new columns.

Code
SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';
Вивід растрових зображень
col_name |     type     | srid | ndims
----------+--------------+------+-------
 geom     | Point        | 4326 |     2
 geom_c   | Point        | 4326 |     2
 geomcp_c | CurvePolygon | 4326 |     2

Назва

DropGeometryColumn — Видаляє стовпець геометрії з просторової таблиці.

Короткий огляд

text DropGeometryColumn(varchar table_name, varchar column_name);

text DropGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);

text DropGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name);

Опис

Видаляє стовпець геометрії з просторової таблиці. Зверніть увагу, що schema_name повинен відповідати полю f_table_schema рядка таблиці в таблиці geometry_columns.

[Застереження]

DropGeometryColumn is retained for backward compatibility and is not recommended for new applications. Use the standard ALTER TABLE ... DROP COLUMN command instead. The geometry_columns view updates automatically from the system catalogs.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Changed: 2.0.0. Retained for backward compatibility after geometry_columns became a view of the system catalogs.

Приклади

Use standard SQL to drop the geometry column. The geometry_columns view updates automatically.

Code
ALTER TABLE my_schema.my_spatial_table DROP COLUMN geom;

The legacy compatibility function performs the equivalent operation.

Code
SELECT DropGeometryColumn ('my_schema', 'my_spatial_table', 'geom');
Вивід растрових зображень
my_schema.my_spatial_table.geom effectively removed.

Назва

DropGeometryTable — Видаляє таблицю та всі її посилання в geometry_columns.

Короткий огляд

boolean DropGeometryTable(varchar table_name);

boolean DropGeometryTable(varchar schema_name, varchar table_name);

boolean DropGeometryTable(varchar catalog_name, varchar schema_name, varchar table_name);

Опис

Видаляє таблицю та всі її посилання в geometry_columns. Примітка: використовує current_schema() в установках pgsql, що підтримують схеми, якщо схема не вказана.

[Застереження]

DropGeometryTable is retained for backward compatibility and is not recommended for new applications. Use the standard DROP TABLE command instead. The geometry_columns view updates automatically from the system catalogs.

Changed: 2.0.0. Retained for backward compatibility after geometry_columns became a view of the system catalogs.

Приклади

Use standard SQL to drop a table containing geometry columns. The geometry_columns view updates automatically.

Code
DROP TABLE my_schema.my_spatial_table;

The legacy compatibility function performs the equivalent operation.

Code
SELECT DropGeometryTable ('my_schema', 'my_spatial_table');
Вивід растрових зображень
my_schema.my_spatial_table dropped.

Назва

Find_SRID — Повертає SRID, визначений для стовпця геометрії.

Короткий огляд

integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);

Опис

Повертає ціле значення SRID вказаного стовпця геометрії, шукаючи його в таблиці GEOMETRY_COLUMNS. Якщо стовпець геометрії не був доданий належним чином (наприклад, за допомогою функції AddGeometryColumn), ця функція не працюватиме.

Приклади

Code
SELECT Find_SRID('public', 'tiger_us_state_2007', 'geom_4269');
Вивід растрових зображень
4269

Див. також

ST_SRID


Назва

Populate_Geometry_Columns — Забезпечує, щоб стовпці геометрії були визначені з модифікаторами типу або мали відповідні просторові обмеження.

Короткий огляд

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

Опис

Забезпечує, щоб стовпці геометрії мали відповідні модифікатори типу або просторові обмеження, щоб гарантувати їх правильну реєстрацію в перегляді geometry_columns. За замовчуванням перетворює всі стовпці геометрії без модифікатора типу на стовпці з модифікаторами типу.

Для забезпечення зворотної сумісності та для просторових потреб, таких як успадкування таблиць, де кожна дочірня таблиця може мати різний тип геометрії, все ще підтримується старе поведінка перевірки обмежень. Якщо вам потрібна стара поведінка, потрібно передати новий необов'язковий аргумент як false use_typmod=false. Після цього стовпці геометрії будуть створені без модифікаторів типу, але з 3 визначеними обмеженнями. Зокрема, це означає, що кожен стовпець геометрії, що належить до таблиці, має принаймні три обмеження:

  • enforce_dims_geom - гарантує, що всі геометричні об'єкти мають однакові розміри (див. ST_NDims)

  • enforce_geotype_geom - гарантує, що всі геометричні об'єкти мають однаковий тип (див. GeometryType)

  • enforce_srid_geom - гарантує, що всі геометричні об'єкти мають однакову проекцію (див. ST_SRID)

Якщо вказано таблицю oid, ця функція намагається визначити srid, розмірність та тип геометрії всіх стовпців геометрії в таблиці, додаючи обмеження за необхідності. У разі успіху відповідний рядок вставляється в таблицю geometry_columns, інакше виникає виняток і з'являється повідомлення про помилку з описом проблеми.

Якщо вказано oid перегляду, як і в разі табличного oid, ця функція намагається визначити srid, розмірність і тип усіх геометрій у перегляді, вставляючи відповідні записи в таблицю geometry_columns, але не виконує жодних дій для забезпечення обмежень.

Варіант без параметрів є простим обгорткою для параметризованого варіанту, який спочатку обрізає і заповнює таблицю geometry_columns для кожної просторової таблиці і перегляду в базі даних, додаючи просторові обмеження до таблиць, де це доречно. Він повертає підсумок кількості стовпців геометрії, виявлених в базі даних, і кількості, які були вставлені в таблицю geometry_columns. Параметризована версія просто повертає кількість рядків, вставлених у таблицю geometry_columns.

Доступність: 1.4.0

Змінено: 2.0.0 За замовчуванням тепер для обмеження типів геометрії використовуються модифікатори типів замість обмежень перевірки. Ви все ще можете використовувати поведінку обмежень перевірки, використовуючи новий параметр use_typmod і встановивши його значення false.

Покращено: 2.0.0 use_typmod додано опціональний аргумент, який дозволяє контролювати, чи створюються стовпці з типовими модифікаторами або з перевірками обмежень.

Приклади

This example populates geometry column metadata using typmod behavior. For this to work, there must be existing data.

Code
CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2,3 4)', 4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);
Вивід растрових зображень
1

Describe the table to see the typmod-based geometry column.

Code
\d myspatial_table
Вивід растрових зображень
Table "public.myspatial_table"

Columns:
  gid  integer                    not null default nextval('myspatial_table_gid_seq'::regclass)
  geom geometry(LineString,4326)

This example changes the geometry columns to use constraints if they are not typmod or already constrained. For this to work, there must be existing data.

Code
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2,3 4)', 4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);
Вивід растрових зображень
1

Describe the table to see the constraint-based geometry column.

Code
\d myspatial_table_cs
Вивід растрових зображень
Table "public.myspatial_table_cs"
 Column |   Type   |                            Modifiers
--------+----------+------------------------------------------------------------------
 gid    | integer  | not null default nextval('myspatial_table_cs_gid_seq'::regclass)
 geom   | geometry |
Check constraints:
    "enforce_dims_geom" CHECK (st_ndims(geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
    "enforce_srid_geom" CHECK (st_srid(geom) = 4326)

Назва

UpdateGeometrySRID — Оновлює SRID всіх об'єктів у стовпці геометрії та метадані таблиці.

Короткий огляд

text UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid);

text UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid);

text UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid);

Опис

Оновлює SRID всіх об'єктів у стовпці геометрії, оновлюючи обмеження та посилання в geometry_columns. Якщо стовпець був застосований за допомогою визначення типу, визначення типу буде змінено. Примітка: використовує current_schema() в установках pgsql, що підтримують схеми, якщо схема не вказана.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Вставте геометрії в таблицю доріг із вже встановленим SRID, використовуючи формат EWKT:

Code
COPY roads (geom) FROM STDIN;
SRID=4326;LINESTRING(0 0, 10 10)
SRID=4326;LINESTRING(10 10, 15 0)
\.
        

Це змінить srid таблиці доріг на 4326 з будь-якого попереднього значення:

Code
SELECT UpdateGeometrySRID('roads', 'geom', 4326);

Попередній приклад еквівалентний цій DDL-інструкція:

Code
ALTER TABLE roads
ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326)
  USING ST_SetSRID(geom, 4326);

Якщо ви неправильно вказали проекцію (або вказали її як невідому) під час завантаження і хочете перетворити все в веб-меркатор за один раз, ви можете зробити це за допомогою DDL, але в PostGIS немає еквівалентної функції для виконання цієї операції за один раз.

Code
ALTER TABLE roads
ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom, 4326), 3857) ;

7.3. Конструктори геометрії

Анотація

Ці функції створюють нові значення геометрії або географії. Вони об'єднують примітиви, послідовності координат або існуючі геометрії в добре сформовані просторові об'єкти, які можуть брати участь у подальшому аналізі.

  • ST_Collect — Створює GeometryCollection або Multi* геометрію з набору геометрій.
  • ST_LineFromMultiPoint — Створює LineString з геометрії MultiPoint.
  • ST_MakeEnvelope — Створює прямокутний полігон з мінімальних і максимальних координат.
  • ST_MakeLine — Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MakePoint — Створює 2D, 3DZ або 4D точку.
  • ST_MakePointM — Створює точку з значень X, Y та M.
  • ST_MakePolygon — Creates a Polygon or CurvePolygon from a shell and optional list of holes.
  • ST_Point — Створює точку із значеннями X, Y та SRID.
  • ST_PointZ — Створює точку з координатами X, Y, Z та значенням SRID.
  • ST_PointM — Створює точку з значеннями X, Y, M та SRID.
  • ST_PointZM — Створює точку з значеннями X, Y, Z, M та SRID.
  • ST_Polygon — Створює полігон з LineString із заданим SRID.
  • ST_TileEnvelope — Створює прямокутний полігон у Web Mercator (SRID:3857) за допомогою системи тайлів XYZ.
  • ST_HexagonGrid — Повертає набір шестикутників та індексів комірок, які повністю покривають межі аргументу геометрії.
  • ST_Hexagon — Повертає один шестикутник, використовуючи заданий розмір ребра та координати комірки в просторі шестикутної сітки.
  • ST_SquareGrid — Повертає набір квадратів сітки та індексів комірок, які повністю покривають межі аргументу геометрії.
  • ST_Square — Повертає один квадрат, використовуючи заданий розмір сторони та координати комірки в просторі квадратної сітки.
  • ST_Letters — Повертає введені літери, відтворені як геометрія, з початковою позицією за замовчуванням в початку координат і висотою тексту за замовчуванням 100.
  • ST_MakeNurbsCurve — Creates a NURBS (Non-Uniform Rational B-Spline) curve from control points, optional weights, and optional knot vector.

Назва

ST_Collect — Створює GeometryCollection або Multi* геометрію з набору геометрій.

Короткий огляд

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

geometry ST_Collect(geometry set g1field);

Опис

Збирає геометрії в колекцію геометрій. Результатом є або Multi*, або GeometryCollection, залежно від того, чи мають вхідні геометрії однаковий або різний тип (однорідні або неоднорідні). Вхідні геометрії залишаються незмінними в колекції.

Варіант 1: приймає дві вхідні геометрії

Варіант 2: приймає масив геометрій

Варіант 3: агрегатна функція, що приймає набір рядків геометрій.

[Застереження]

ST_Collect does not dissolve boundaries or resolve overlaps. Collecting overlapping polygons can produce an invalid MultiPolygon. If the result must be a valid polygonal geometry with overlaps merged, use ST_Union instead. ST_Union also splits linestrings at intersections and may return a single geometry after dissolving boundaries.

If any input geometry is a collection (Multi* or GeometryCollection), ST_Collect returns a GeometryCollection, since that is the only type which can contain nested collections. To prevent this, use ST_Dump in a subquery to expand input collections to their atomic elements (see example below).

Доступність: 1.4.0 — додано ST_Collect(geomarray). ST_Collect було вдосконалено для швидшої обробки більшої кількості геометрій.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Two-input variant.

Збір 2D точок.

Code
SELECT ST_Collect(
    'POINT(1 2)',
    'POINT(-2 3)' );
Вивід растрових зображень
MULTIPOINT((1 2),(-2 3))
Figure
Geometry figure for visual-st-collect-01

Збір 3D-точок.

Code
SELECT ST_Collect(
        'POINT(1 2 3)',
        'POINT(1 2 4)' );
Вивід растрових зображень
MULTIPOINT(1 2 3,1 2 4)
Figure
Geometry figure for visual-st-collect-02

Збір кривих.

Code
SELECT ST_Collect(
        'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)',
        'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)');
Вивід растрових зображень
MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
Figure
Geometry figure for visual-st-collect-03

Array variant.

Використання конструктора масиву для підзапиту.

Code
SELECT ST_Collect(ARRAY(SELECT geom FROM sometable));

Використання конструктора масиву для значень.

Code
SELECT ST_Collect(
        ARRAY[ 'LINESTRING(1 2,3 4)'::geometry,
            'LINESTRING(3 4,4 5)'::geometry ] ) As wktcollect;
Вивід растрових зображень
MULTILINESTRING((1 2,3 4),(3 4,4 5))
Figure
Geometry figure for visual-st-collect-04

Aggregate variant.

Створення декількох колекцій шляхом групування геометрій у таблиці.

Code
SELECT stusps, ST_Collect(geom) AS geom
FROM (
  SELECT stusps, (ST_Dump(geom)).geom AS geom
  FROM somestatetable
) AS f
GROUP BY stusps;

Див. також

ST_Dump, ST_Union


Назва

ST_LineFromMultiPoint — Створює LineString з геометрії MultiPoint.

Короткий огляд

geometry ST_LineFromMultiPoint(geometry aMultiPoint);

Опис

Створює LineString з геометрії MultiPoint.

Використовуйте ST_MakeLine для створення ліній з вхідних даних Point або LineString.

This function supports 3d and will not drop the z-index.

Приклади

Створити 3D лінію з 3D MultiPoint

Code
SELECT ST_LineFromMultiPoint('MULTIPOINT(1 2 3,4 5 6,7 8 9)');
Вивід растрових зображень
LINESTRING(1 2 3,4 5 6,7 8 9)
Figure
Geometry figure for visual-st-linefrommultipoint-01

Див. також

ST_AsEWKT, ST_MakeLine


Назва

ST_MakeEnvelope — Створює прямокутний полігон з мінімальних і максимальних координат.

Короткий огляд

geometry ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax, integer srid=unknown);

Опис

Створює прямокутний полігон з мінімальних і максимальних значень для X і Y. Вхідні значення повинні бути в просторовій системі координат, визначеній SRID. Якщо SRID не вказано, використовується невідома просторова система координат (SRID 0).

Доступність: 1.5

Покращено: 2.0: Додано можливість вказати конверт без вказання SRID.

Приклади

Building a bounding box polygon.

Code
SELECT ST_MakeEnvelope(10, 10, 11, 11, 4326);
Вивід растрових зображень
POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))
Figure
Geometry figure for visual-st-makeenvelope-01

Назва

ST_MakeLine — Створює LineString з геометрій Point, MultiPoint або LineString.

Короткий огляд

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

Опис

Створює об'єкт LineString, що містить точки геометрій Point, MultiPoint або LineString. Інші типи геометрії спричиняють помилку.

Варіант 1: приймає дві вхідні геометрії

Варіант 2: приймає масив геометрій

Варіант 3: агрегатна функція, що приймає набір рядків геометрій. Щоб забезпечити порядок вхідних геометрій, використовуйте ORDER BY у виклику функції або підзапит із розділом ORDER BY.

Повторювані вузли на початку вхідних LineStrings зводиться до однієї точки. Повторювані точки у вхідних Point і MultiPoint не зводяться. Компоненти MultiLineString обробляються в порядку їх появи в колекції. ST_RemoveRepeatedPointsможе використовуватися для зведення повторюваних точок з вихідного LineString.

This function supports 3d and will not drop the z-index.

Доступність: 3.7.0 — додано підтримку елементів введення MultiLineString

Доступність: 2.3.0 — додано підтримку елементів введення MultiPoint

Доступність: 2.0.0 - Додано підтримку елементів введення LineString

Доступність: 1.4.0 — додано ST_MakeLine(geomarray). Агрегатні функції ST_MakeLine було вдосконалено для швидшої обробки більшої кількості точок.

Приклади

Two-input variant.

Створити лінію, що складається з двох точок.

Code
SELECT ST_MakeLine(ST_Point(1, 2), ST_Point(3, 4));
Вивід растрових зображень
LINESTRING(1 2,3 4)
Figure
Geometry figure for visual-st-makeline-01

Створити 3D лінію з двох 3D точок.

Code
SELECT ST_MakeLine(ST_MakePoint(1, 2, 3), ST_MakePoint(3, 4, 5));
Вивід растрових зображень
LINESTRING(1 2 3,3 4 5)
Figure
Geometry figure for visual-st-makeline-02

Створити лінію з двох роз'єднаних LineStrings.

Code
SELECT ST_MakeLine('LINESTRING(0 0,1 1)', 'LINESTRING(2 2,3 3)');
Вивід растрових зображень
LINESTRING(0 0,1 1,2 2,3 3)
Figure
Geometry figure for visual-st-makeline-03

Array variant.

Створити лінію з масиву, сформованого підзапитом із сортуванням.

Code
SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time));

Створити 3D лінію з масиву 3D точок

Code
SELECT ST_MakeLine(ARRAY[ST_MakePoint(1, 2, 3), ST_MakePoint(3, 4, 5), ST_MakePoint(6, 6, 6)]);
Вивід растрових зображень
LINESTRING(1 2 3,3 4 5,6 6 6)
Figure
Geometry figure for visual-st-makeline-04

Aggregate variant.

У цьому прикладі запитуються послідовності точок GPS за часом із набору треків і створюється один запис для кожного треку. Результатом є геометрії LineStrings, що складаються з точок треку GPS у порядку руху.

Використання агрегату ORDER BY забезпечує правильний порядок LineString.

Code
SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) AS geom
FROM gps_points AS gps
GROUP BY gps.track_id;

Якщо сортування в межах агрегату неможливе, можна скористатися сортуванням у підзапиті. Однак іноді план запиту може не враховувати порядок підзапиту.

Code
SELECT gps.track_id, ST_MakeLine(gps.geom) AS geom
FROM (
  SELECT track_id, gps_time, geom
  FROM gps_points
  ORDER BY track_id, gps_time
) AS gps
GROUP BY gps.track_id;

Назва

ST_MakePoint — Створює 2D, 3DZ або 4D точку.

Короткий огляд

geometry ST_MakePoint(float x, float y);

geometry ST_MakePoint(float x, float y, float z);

geometry ST_MakePoint(float x, float y, float z, float m);

Опис

Створює геометрію точки 2D XY, 3D XYZ або 4D XYZM. Використовуйте ST_MakePointM, щоб створити точки з координатами XYM.

Використовуйте ST_SetSRID, щоб вказати SRID для створеної точки.

Хоча ST_MakePoint не відповідає стандарту OGC, він працює швидше, ніж ST_GeomFromText та ST_PointFromText. Він також простіший у використанні для числових значень координат.

[Примітка]

Для геодезичних координат X є довготою, а Y — широтою

[Примітка]

Функції ST_Point, ST_PointZ, ST_PointM та ST_PointZM можна використовувати для створення точок із заданим SRID.

This function supports 3d and will not drop the z-index.

Приклади

This example creates a point with an unknown SRID.

Code
SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);

This example creates a point in the WGS 84 geodetic CRS.

Code
SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829), 4326);

This example creates a 3D point with altitude.

Code
SELECT ST_MakePoint(1, 2, 1.5);

This example returns the Z coordinate of a point.

Code
SELECT ST_Z(ST_MakePoint(1, 2, 1.5));
Вивід растрових зображень
1.5

Назва

ST_MakePointM — Створює точку з значень X, Y та M.

Короткий огляд

geometry ST_MakePointM(float x, float y, float m);

Опис

Створює точку з координатами X, Y та M (вимірювання). Використовуйте ST_MakePoint, щоб створити точки з координатами XY, XYZ або XYZM.

Використовуйте ST_SetSRID, щоб вказати SRID для створеної точки.

[Примітка]

Для геодезичних координат X є довготою, а Y — широтою

[Примітка]

Функції ST_PointM та ST_PointZM можна використовувати для створення точок із значенням M та заданим SRID.

Приклади

[Примітка]

ST_AsEWKT використовується для виведення тексту, оскільки ST_AsTextне підтримує значення M.

Створити точку з невідомим SRID.

Code
SELECT ST_MakePointM(-71.1043443253471, 42.3150676015829, 10);
Вивід растрових зображень
POINTM(-71.1043443253471 42.3150676015829 10)
Figure
Geometry figure for visual-st-makepointm-01

Створити точку з виміром у геодезичній системі координат WGS 84.

Code
SELECT ST_SetSRID(ST_MakePointM(-71.104, 42.315, 10), 4326);
Вивід растрових зображень
SRID=4326;POINTM(-71.104 42.315 10)
Figure
Geometry figure for visual-st-makepointm-02

Отримати розмір створеної точки.

Code
SELECT ST_M(ST_MakePointM(-71.104, 42.315, 10));
Вивід растрових зображень
10

Назва

ST_MakePolygon — Creates a Polygon or CurvePolygon from a shell and optional list of holes.

Короткий огляд

geometry ST_MakePolygon(geometry linestring);

geometry ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);

Опис

Creates a Polygon or CurvePolygon formed by the given shell and optional array of holes. Input geometries must be closed LineStrings, CircularStrings, CompoundCurves, or NURBSCurves (rings). If any input ring is curved, the result is a CurvePolygon.

Variant 1: Accepts one shell ring.

Variant 2: Accepts a shell ring and an array of inner (hole) rings. A geometry array can be constructed using the PostgreSQL array_agg(), ARRAY[] or ARRAY() constructs.

[Примітка]

Ця функція не приймає MultiLineStrings. Використовуйте ST_LineMergeдля створення LineString або ST_Dumpдля вилучення LineStrings.

This function supports 3d and will not drop the z-index.

Enhanced: 3.7.0 - Support for curved input rings was introduced.

Приклади

Single input variant.

Створити полігон з 2D LineString.

Code
SELECT ST_MakePolygon('LINESTRING(75 29,77 29,77 29,75 29)');

Створіть полігон з відкритої лінії, використовуючи ST_StartPointта ST_AddPointдля його закриття.

Code
SELECT ST_MakePolygon(ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)) )
FROM (
  SELECT 'LINESTRING(75 29,77 29,77 29,75 29)'::geometry As open_line) As foo;

Створіть полігон із 3D-лінії

Code
SELECT ST_MakePolygon('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1)');
Вивід растрових зображень
POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))
Figure
Geometry figure for visual-st-makepolygon-01

Створює полігон з лінії з вимірами

Code
SELECT ST_MakePolygon('LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)');
Вивід растрових зображень
POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))
Figure
Geometry figure for visual-st-makepolygon-02

Create a CurvePolygon from a CircularString shell.

Code
SELECT ST_MakePolygon('CIRCULARSTRING(0 0,1 1,2 0,1 -1,0 0)');
Вивід растрових зображень
CURVEPOLYGON(CIRCULARSTRING(0 0,1 1,2 0,1 -1,0 0))
Figure
Geometry figure for visual-st-makepolygon-03

Outer shell with inner holes variant.

Створити полігон у формі пончика з додатковим отвором

Code
SELECT ST_MakePolygon(
    ST_ExteriorRing(ST_Buffer(ring.line, 10)),
    ARRAY[  ST_Translate(ring.line, 1, 1),
        ST_ExteriorRing(ST_Buffer(ST_Point(20, 20), 1)) ]
    )
FROM (SELECT ST_ExteriorRing(ST_Buffer(ST_Point(10, 10), 10, 10)) AS line ) AS ring;

Створити набір меж провінцій з отворами, що позначають озера. Вхідними даними є таблиця полігонів/мультиполігонів провінцій та таблиця лінійних об'єктів, що позначають водойми. Лінії, що утворюють озера, визначаються за допомогою ST_IsClosed. Лінії провінцій витягуються за допомогою ST_Boundary. Відповідно до вимог ST_MakePolygon, межа примусово перетворюється на єдину лінію за допомогою ST_LineMerge. (Однак, зверніть увагу, що якщо провінція має більше одного регіону або має острови, це призведе до створення недійсного полігону.) Використання LEFT JOIN гарантує, що всі провінції будуть включені, навіть якщо вони не мають озер.

[Примітка]

Конструкція CASE використовується, оскільки передача нульового масиву в ST_MakePolygon призводить до повернення значення NULL.

Code
SELECT p.gid, p.province_name,
  CASE
    WHEN array_agg(w.geom) IS NULL THEN p.geom
    ELSE ST_MakePolygon(
      ST_LineMerge(ST_Boundary(p.geom)),
      array_agg(w.geom)
    )
  END AS geom
FROM provinces p
LEFT JOIN waterlines w
  ON ST_Within(w.geom, p.geom)
  AND ST_IsClosed(w.geom)
GROUP BY p.gid, p.province_name, p.geom;

Інший метод полягає у використанні корельованого підзапиту та конструктора ARRAY(), який перетворює набір рядків у масив.

Code
SELECT p.gid, p.province_name,
  CASE
    WHEN EXISTS (
      SELECT w.geom
      FROM waterlines w
      WHERE ST_Within(w.geom, p.geom)
      AND ST_IsClosed(w.geom)
    )
    THEN ST_MakePolygon(
      ST_LineMerge(ST_Boundary(p.geom)),
      ARRAY(
        SELECT w.geom
        FROM waterlines w
        WHERE ST_Within(w.geom, p.geom)
        AND ST_IsClosed(w.geom)
      )
    )
    ELSE p.geom
  END AS geom
FROM provinces p;

Див. також

ST_BuildArea ST_Polygon


Назва

ST_Point — Створює точку із значеннями X, Y та SRID.

Короткий огляд

geometry ST_Point(float x, float y);

geometry ST_Point(float x, float y, integer srid=unknown);

Опис

Повертає точку з заданими значеннями координат X та Y. Це еквівалент SQL-MM для ST_MakePoint, який приймає тільки X та Y.

[Примітка]

Для геодезичних координат X є довготою, а Y — широтою

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

This method implements the SQL/MM specification. SQL-MM 3: 6.1.2

Приклади

Geometry.

Code
SELECT ST_Point(-71.104, 42.315);

Створення точки із зазначеним SRID:

Code
SELECT ST_Point(-71.104, 42.315, 4326);

Альтернативний спосіб вказати SRID:

Code
SELECT ST_SetSRID(ST_Point(-71.104, 42.315), 4326);

Створіть точки географії за допомогою синтаксису перетворення :::

Code
SELECT ST_Point(-71.104, 42.315, 4326)::geography;

Код до PostGIS 3.2, що використовує CAST:

Code
SELECT CAST(ST_SetSRID(ST_Point(-71.104, 42.315), 4326) AS geography);

Якщо координати точки не знаходяться в геодезичній системі координат (такій як WGS84), то перед перенесенням в географічну систему їх необхідно перепроектувати. У цьому прикладі точка в системі координат Pennsylvania State Plane feet (SRID 2273) перепроектована в систему WGS84 (SRID 4326).

Code
SELECT ST_Transform(ST_Point(3637510, 3014852, 2273), 4326)::geography;

Назва

ST_PointZ — Створює точку з координатами X, Y, Z та значенням SRID.

Короткий огляд

geometry ST_PointZ(float x, float y, float z, integer srid=unknown);

Опис

Повертає точку з заданими значеннями координат X, Y і Z, а також, за бажанням, номер SRID.

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

Приклади

Code
SELECT ST_PointZ(-71.104, 42.315, 3.4, 4326)
Code
SELECT ST_PointZ(-71.104, 42.315, 3.4, srid => 4326)
Code
SELECT ST_PointZ(-71.104, 42.315, 3.4)

Назва

ST_PointM — Створює точку з значеннями X, Y, M та SRID.

Короткий огляд

geometry ST_PointM(float x, float y, float m, integer srid=unknown);

Опис

Повертає точку з заданими значеннями координат X, Y і M, а також, за бажанням, номер SRID.

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

Приклади

Code
SELECT ST_PointM(-71.104, 42.315, 3.4, 4326)
Code
SELECT ST_PointM(-71.104, 42.315, 3.4, srid => 4326)
Code
SELECT ST_PointM(-71.104, 42.315, 3.4)

Назва

ST_PointZM — Створює точку з значеннями X, Y, Z, M та SRID.

Короткий огляд

geometry ST_PointZM(float x, float y, float z, float m, integer srid=unknown);

Опис

Повертає точку з заданими значеннями координат X, Y, Z і M, а також, за бажанням, номер SRID.

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

Приклади

Code
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, 4326)
Code
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, srid => 4326)
Code
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5)

Назва

ST_Polygon — Створює полігон з LineString із заданим SRID.

Короткий огляд

geometry ST_Polygon(geometry lineString, integer srid);

Опис

Повертає полігон, побудований з заданого LineString, і встановлює систему просторових координат з srid.

ST_Polygon схожий на ST_MakePolygonВаріант 1 з додаванням налаштування SRID.

Для створення полігонів з отворами використовуйте ST_MakePolygonВаріант 2, а потім ST_SetSRID.

[Примітка]

Ця функція не приймає MultiLineStrings. Використовуйте ST_LineMergeдля створення LineString або ST_Dumpдля вилучення LineStrings.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 8.3.2

This function supports 3d and will not drop the z-index.

Приклади

Створити 2D полігон.

Code
SELECT ST_Polygon('LINESTRING(75 29,77 29,77 31,75 31,75 29)'::geometry, 4326);
Вивід растрових зображень
POLYGON((75 29,77 29,77 31,75 31,75 29))
Figure
Geometry figure for visual-st-polygon-01

Створити 3D полігон.

Code
SELECT ST_Polygon('LINESTRING(75 29 1,77 29 2,77 31 2,75 31 1,75 29 1)'::geometry, 4326);
Вивід растрових зображень
SRID=4326;POLYGON((75 29 1,77 29 2,77 31 2,75 31 1,75 29 1))
Figure
Geometry figure for visual-st-polygon-02

Назва

ST_TileEnvelope — Створює прямокутний полігон у Web Mercator (SRID:3857) за допомогою системи тайлів XYZ.

Короткий огляд

geometry ST_TileEnvelope(integer tileZoom, integer tileX, integer tileY, geometry bounds=SRID=3857;LINESTRING(-20037508.342789 -20037508.342789,20037508.342789 20037508.342789), float margin=0.0);

Опис

Створює прямокутний полігон, що визначає розмір плитки в системі плиток XYZ. Плитка визначається рівнем масштабування Z та індексом XY плитки в сітці на цьому рівні. Може використовуватися для визначення меж плитки, необхідних для ST_AsMVTGeom для перетворення геометрії в координатну систему плиток MVT.

За замовчуванням контур плитки знаходиться в системі координат Web Mercator (SRID:3857) з використанням стандартного діапазону системи Web Mercator (-20037508.342789, 20037508.342789). Це найпоширеніша система координат, що використовується для плиток MVT. Додатковий параметр bounds можна використовувати для створення плиток у будь-якій системі координат. Це геометрія, що має SRID і розмір квадрата "Рівень масштабування нуль", в якому вписана система плиток XYZ.

Додатковий параметр margin можна використовувати для розширення плитки на заданий відсоток. Наприклад, margin=0.125 розширює плитку на 12,5%, що еквівалентно buffer=512, коли розмір плитки становить 4096, як використовується в ST_AsMVTGeom. Це корисно для створення буфера плиток, щоб включити дані, які лежать за межами видимої області плитки, але наявність яких впливає на візуалізацію плитки. Наприклад, назва міста (точка) може бути поблизу краю плитки, тому її мітка повинна бути візуалізована на двох плитках, навіть якщо точка розташована у видимій області лише однієї плитки. Використання розширених плиток у запиті дозволить включити точку міста в обидві плитки. Для зменшення плитки використовуйте від'ємне значення. Значення менше -0.5 заборонені, оскільки це призведе до повного видалення плитки. Не вказуйте поле при використанні з ST_AsMVTGeom. Дивіться приклад для ST_AsMVT.

Покращено: 3.1.0 Додано параметр поля.

Доступність: 3.0.0

Приклади

Show tile (2, 1, 1) within the root tile (0, 0, 0).

Code
SELECT ST_TileEnvelope(0, 0, 0) AS input_z0_x0_y0, ST_TileEnvelope(2, 1, 1) AS z2_x1_y1;
Вивід растрових зображень
input_z0_x0_y0 | z2_x1_y1
----------------+-----------
POLYGON((-20037508.342789244 -20037508.342789244,-20037508.342789244 20037508.342789244,20037508.342789244 20037508.342789244,20037508.342789244 -20037508.342789244,-20037508.342789244 -20037508.342789244)) | POLYGON((-10018754.171394622 0,-10018754.171394622 10018754.171394622,0 10018754.171394622,0 0,-10018754.171394622 0))
Figure
Geometry figure for visual-st-tileenvelope-01
Code
SELECT ST_TileEnvelope(3, 1, 1, ST_MakeEnvelope(-180, -90, 180, 90, 4326));
Вивід растрових зображень
POLYGON((-135 45,-135 67.5,-90 67.5,-90 45,-135 45))
Figure
Geometry figure for visual-st-tileenvelope-02

Див. також

ST_MakeEnvelope


Назва

ST_HexagonGrid — Повертає набір шестикутників та індексів комірок, які повністю покривають межі аргументу геометрії.

Короткий огляд

setof record ST_HexagonGrid(float8 size, geometry bounds);

Опис

Starts with the concept of a hexagon tiling of the plane. (Not a hexagon tiling of the globe; for H3 use the h3-pg extension.) For a given planar SRS, and a given edge size, starting at the origin of the SRS, there is one unique hexagonal tiling of the plane, Tiling(SRS, Size). This function answers the question: what hexagons in a given Tiling(SRS, Size) overlap with a given bounds.

SRS для вихідних шестикутників — це SRS, що надається геометрією меж.

Подвоєння або потроєння розміру ребра шестикутника створює нову батьківську мозаїку, яка відповідає вихідній мозаїці. На жаль, неможливо створити батьківську мозаїку з шестикутників, в яку ідеально вписуються дочірні плитки.

Доступність: 3.1.0

Приклади

Unit hexagons covering rectangular bounds.

Code
WITH bounds AS (
    SELECT ST_MakeEnvelope(2, 1, 4, 3, 3857) AS geom
), grid AS (
    SELECT hex.*
    FROM bounds
    CROSS JOIN LATERAL ST_HexagonGrid(1, geom) AS hex
)
SELECT (SELECT geom FROM bounds) AS input_bounds,
    ST_Collect(geom ORDER BY i, j) AS grid
FROM grid;
Вивід растрових зображень
POLYGON((2 1,2 3,4 3,4 1,2 1)) | MULTIPOLYGON(((0.5 0.866,1 0,2 0,2.5 0.866,2 1.732,1 1.732,0.5 0.866)),((0.5 2.598,1 1.732,2 1.732,2.5 2.598,2 3.464,1 3.464,0.5 2.598)),((2 1.732,2.5 0.866,3.5 0.866,4 1.732,3.5 2.598,2.5 2.598,2 1.732)),((2 3.464,2.5 2.598,3.5 2.598,4 3.464,3.5 4.33,2.5 4.33,2 3.464)),((3.5 0.866,4 0,5 0,5.5 0.866,5 1.732,4 1.732,3.5 0.866)),((3.5 2.598,4 1.732,5 1.732,5.5 2.598,5 3.464,4 3.464,3.5 2.598)))
Figure
Geometry figure for visual-st-hexagongrid-01

Child tiles that intersect a doubled-size parent hexagon share the tiling origin, but do not nest perfectly inside the parent.

Code
WITH parent AS (
    SELECT ST_Hexagon(2, 0, 0) AS geom
), children AS (
    SELECT child.*
    FROM parent
    CROSS JOIN LATERAL ST_HexagonGrid(1, geom) AS child
    WHERE ST_Area(ST_Intersection(child.geom, parent.geom)) > 0
)
SELECT ST_Collect(geom ORDER BY i, j) AS children,
    (SELECT geom FROM parent) AS parent
FROM children;
Вивід растрових зображень
MULTIPOLYGON(((-2.5 -0.866,-2 -1.732,-1 -1.732,-0.5 -0.866,-1 0,-2 0,-2.5 -0.866)),((-2.5 0.866,-2 0,-1 0,-0.5 0.866,-1 1.732,-2 1.732,-2.5 0.866)),((-1 -1.732,-0.5 -2.598,0.5 -2.598,1 -1.732,0.5 -0.866,-0.5 -0.866,-1 -1.732)),((-1 0,-0.5 -0.866,0.5 -0.866,1 0,0.5 0.866,-0.5 0.866,-1 0)),((-1 1.732,-0.5 0.866,0.5 0.866,1 1.732,0.5 2.598,-0.5 2.598,-1 1.732)),((0.5 -0.866,1 -1.732,2 -1.732,2.5 -0.866,2 0,1 0,0.5 -0.866)),((0.5 0.866,1 0,2 0,2.5 0.866,2 1.732,1 1.732,0.5 0.866))) | POLYGON((-2 0,-1 -1.732,1 -1.732,2 0,1 1.732,-1 1.732,-2 0))
Figure
Geometry figure for visual-st-hexagongrid-02

Counting points in hexagons.

Щоб зробити підсумок точок на шестикутній мозаїці, створіть шестикутну сітку, використовуючи межі точок як обмеження, а потім просторово з'єднайте її з цією сіткою.

Code
SELECT COUNT(*), hexes.geom
FROM ST_HexagonGrid(
  10000,
  ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
) AS hexes
INNER JOIN pointtable AS pts
  ON ST_Intersects(pts.geom, hexes.geom)
GROUP BY hexes.geom;

Generating hex coverage of polygons.

If a grid is generated for each polygon boundary and filtered to intersecting cells, adjacent regions receive overlapping hexagons along their shared border. The build-time figure below uses two simple regions in place of an external administrative-boundary table, so the example is self-contained.

Code
WITH admin1(gid, geom) AS (
    VALUES
        (1, ST_MakeEnvelope(0, 0, 3, 3, 3857)),
        (2, ST_MakeEnvelope(3, 0, 6, 3, 3857))
), coverage AS (
    SELECT hex.i, hex.j, hex.geom
    FROM admin1
    CROSS JOIN LATERAL ST_HexagonGrid(1.5, admin1.geom) AS hex
    WHERE ST_Intersects(admin1.geom, hex.geom)
    GROUP BY hex.i, hex.j, hex.geom
), layers AS (
    SELECT 'region' AS kind, gid AS position, geom
    FROM admin1
    UNION ALL
    SELECT
        'hexagon',
        1000 + row_number() OVER (ORDER BY i, j),
        geom
    FROM coverage
)
SELECT
    CASE kind WHEN 'region' THEN geom END AS input_region,
    CASE kind WHEN 'hexagon' THEN geom END AS hexagon
FROM layers
ORDER BY position;
Вивід растрових зображень
POLYGON((0 0,0 3,3 3,3 0,0 0)) | null
POLYGON((3 0,3 3,6 3,6 0,3 0)) | null
null | POLYGON((-1.5 0,-0.75 -1.3,0.75 -1.3,1.5 0,0.75 1.3,-0.75 1.3,-1.5 0))
null | POLYGON((-1.5 2.6,-0.75 1.3,0.75 1.3,1.5 2.6,0.75 3.9,-0.75 3.9,-1.5 2.6))
null | POLYGON((0.75 1.3,1.5 0,3 0,3.75 1.3,3 2.6,1.5 2.6,0.75 1.3))
null | POLYGON((0.75 3.9,1.5 2.6,3 2.6,3.75 3.9,3 5.2,1.5 5.2,0.75 3.9))
null | POLYGON((3 0,3.75 -1.3,5.25 -1.3,6 0,5.25 1.3,3.75 1.3,3 0))
null | POLYGON((3 2.6,3.75 1.3,5.25 1.3,6 2.6,5.25 3.9,3.75 3.9,3 2.6))
null | POLYGON((5.25 1.3,6 0,7.5 0,8.25 1.3,7.5 2.6,6 2.6,5.25 1.3))
null | POLYGON((5.25 3.9,6 2.6,7.5 2.6,8.25 3.9,7.5 5.2,6 5.2,5.25 3.9))
Figure
Geometry figure for visual-st-hexagongrid-03

The same pattern applies to a real administrative-boundary table:

[Примітка]

Ключове слово LATERAL є імпліцитним для функцій, що повертають набір, коли вони посилаються на попередню таблицю в списку FROM. Тому CROSS JOIN LATERAL, CROSS JOIN або просто є еквівалентними конструкціями для цього прикладу.

Code
SELECT admin1.gid, hex.geom
FROM
    admin1
    CROSS JOIN
    ST_HexagonGrid(100000, admin1.geom) AS hex
WHERE
    adm0_a3 = 'USA'
    AND
    ST_Intersects(admin1.geom, hex.geom)

Назва

ST_Hexagon — Повертає один шестикутник, використовуючи заданий розмір ребра та координати комірки в просторі шестикутної сітки.

Короткий огляд

geometry ST_Hexagon(float8 size, integer cell_i, integer cell_j, geometry origin);

Опис

Використовує ту саму концепцію шестикутної мозаїки, що й ST_HexagonGrid, але створює лише один шестикутник у бажаних координатах комірки. За бажанням можна налаштувати координати початку мозаїки, за замовчуванням початок знаходиться в точці 0,0.

Шестикутники генеруються без заданого SRID, тому використовуйте ST_SetSRID, щоб задати SRID відповідно до ваших очікувань.

Доступність: 3.1.0

Приклади

Creating a hexagon at the origin.

Code
SELECT ST_SetSRID(ST_Hexagon(1.0, 0, 0), 3857);
Вивід растрових зображень
POLYGON((-1 0,-0.5 -0.8660254037844387,0.5 -0.8660254037844387,1 0,0.5 0.8660254037844387,-0.5 0.8660254037844387,-1 0))
Figure
Geometry figure for visual-st-hexagon-01

Назва

ST_SquareGrid — Повертає набір квадратів сітки та індексів комірок, які повністю покривають межі аргументу геометрії.

Короткий огляд

setof record ST_SquareGrid(float8 size, geometry bounds);

Опис

Починається з концепції квадратного покриття площини. Для заданої плоскої SRS і заданого розміру ребра, починаючи від початку SRS, існує одне унікальне квадратне покриття площини, Tiling(SRS, Size). Ця функція відповідає на питання: які сітки в заданому Tiling(SRS, Size) перекриваються з заданими межами.

SRS для вихідних квадратів — це SRS, що надається геометрією меж.

Подвоєння або розмір краю квадрата створює нову батьківську мозаїку, яка ідеально підходить до оригінальної мозаїки. Стандартні веб-карти в проекції Меркатора — це просто квадратні сітки, що є степенями числа два в площині Меркатора.

Доступність: 3.1.0

Приклади

Generating a 1 degree grid for a country.

Сітка заповнить всю територію країни, тому якщо вам потрібні лише квадрати, що торкаються країни, вам доведеться потім відфільтрувати їх за допомогою ST_Intersects.

Code
WITH grid AS (
SELECT (ST_SquareGrid(1, ST_Transform(geom, 4326))).*
FROM admin0 WHERE name = 'Canada'
)
  SELEcT geom
  FROM grid

Counting points in squares (using single chopped grid).

Щоб зробити підсумок точок на квадратній мозаїці, створіть квадратну сітку, використовуючи межі точок як обмеження, а потім просторово з'єднайте її з цією сіткою. Зверніть увагу, що приблизна площа може відрізнятися від фактичної, тому будьте обережні і, як мінімум, переконайтеся, що ви проаналізували свою таблицю.

Code
SELECT COUNT(*), squares.geom
FROM pointtable AS pts
INNER JOIN ST_SquareGrid(
  1000,
  ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
) AS squares
  ON ST_Intersects(pts.geom, squares.geom)
GROUP BY squares.geom;

Counting points in squares using set of grid per point.

Це дає той самий результат, що й у першому прикладі, але буде повільніше для великої кількості точок

Code
SELECT COUNT(*), squares.geom
FROM pointtable AS pts
INNER JOIN ST_SquareGrid(
  1000,
  pts.geom
) AS squares
  ON ST_Intersects(pts.geom, squares.geom)
GROUP BY squares.geom;

Назва

ST_Square — Повертає один квадрат, використовуючи заданий розмір сторони та координати комірки в просторі квадратної сітки.

Короткий огляд

geometry ST_Square(float8 size, integer cell_i, integer cell_j, geometry origin='POINT(0 0)');

Опис

Використовує ту саму концепцію квадратної мозаїки, що й ST_SquareGrid, але створює лише один квадрат у бажаних координатах комірки. За бажанням можна налаштувати координати початку мозаїки, за замовчуванням початок знаходиться в точці 0,0.

Квадрати генеруються з SRID заданого початку координат. Використовуйте ST_SetSRID, щоб встановити SRID, якщо заданий початок координат має невідомий SRID (як це відбувається за замовчуванням).

Доступність: 3.1.0

Приклади

Creating a square at the origin.

Code
SELECT ST_SetSRID(ST_Square(1.0, 0, 0), 3857);
Вивід растрових зображень
st_astext
-------------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))
(1 row)
Figure
Geometry figure for visual-st-square-01

Назва

ST_Letters — Повертає введені літери, відтворені як геометрія, з початковою позицією за замовчуванням в початку координат і висотою тексту за замовчуванням 100.

Короткий огляд

geometry ST_Letters(text letters, json font);

Опис

Використовує вбудований шрифт для відображення рядка як мультиполігональної геометрії. За замовчуванням висота тексту становить 100,0, відстань від нижньої частини нижнього виступу до верхньої частини великої літери. За замовчуванням початкова позиція розміщує початок базової лінії в точці початку координат. Для заміни шрифту потрібно передати карту json, де ключем є символ, а TWKB, закодований у base64, — форма шрифту, висота шрифтів становить 1000 одиниць від нижньої частини нижнього виступу до верхньої частини великої літери.

Текст за замовчуванням генерується в точці початку координат, тому щоб змінити його положення та розмір, спочатку застосуйте функцію ST_Scale, а потім функцію ST_Translate.

Доступність: 3.3.0

Приклади

Generating the word 'Yo'.

Code
SELECT ST_Letters('Yo');
Вивід растрових зображень
MULTIPOLYGON(((34.5 73.8,54 73.8,53.1 72.9,35.1 28.7,35.1 0.9,36 0,18 0,19 0.9,19 28.7,0.9 72.9,0 73.8,19.5 73.8,18.6 72.9,23 61.6,27 47.4,31.1 61.9,35.4 72.9,34.5 73.8)),((68.87 58,69.97 58,71.07 57.9,72.17 57.8,73.17 57.7,74.27 57.5,75.27 57.3,76.17 57.1,77.17 56.8,78.07 56.5,78.97 56.1,79.87 55.7,80.67 55.3,81.47 54.8,82.27 54.3,82.97 53.7,83.67 53.1,84.37 52.5,84.97 51.8,85.57 51.1,86.07 50.3,86.57 49.5,87.07 48.7,87.57 47.9,87.97 47,88.37 46.1,88.67 45.1,88.97 44.1,89.17 43.1,89.37 42.1,89.47 41,89.57 39.9,89.57 38.7,89.57 18.9,89.57 17.7,89.47 16.6,89.37 15.5,89.17 14.5,88.97 13.5,88.77 12.5,88.47 11.5,88.07 10.6,87.67 9.7,87.27 8.9,86.77 8.1,86.27 7.3,85.67 6.6,85.07 5.9,84.47 5.2,83.77 4.6,83.07 4,82.27 3.5,81.57 2.9,80.77 2.5,79.87 2,79.07 1.6,78.17 1.2,77.27 0.8,76.37 0.5,75.37 0.2,74.37 0,73.37 -0.2,72.27 -0.4,71.17 -0.5,70.07 -0.5,68.97 -0.5,67.87 -0.5,66.77 -0.4,65.67 -0.3,64.57 -0.2,63.57 0,62.57 0.2,61.57 0.5,60.57 0.8,59.67 1.1,58.77 1.5,57.87 1.9,57.07 2.4,56.27 2.9,55.47 3.4,54.77 3.9,54.07 4.5,53.37 5.1,52.77 5.8,52.17 6.5,51.67 7.2,51.17 8,50.67 8.8,50.17 9.7,49.77 10.6,49.37 11.5,49.07 12.5,48.77 13.5,48.57 14.5,48.37 15.6,48.27 16.7,48.17 17.8,48.17 18.9,48.17 38.7,48.17 39.9,48.27 41,48.37 42.1,48.57 43.1,48.77 44.1,48.97 45.1,49.27 46.1,49.67 47,50.07 47.9,50.47 48.7,50.97 49.5,51.47 50.3,52.07 51,52.67 51.7,53.27 52.4,53.97 53,54.67 53.6,55.47 54.1,56.17 54.6,57.07 55.1,57.87 55.6,58.77 56,59.67 56.4,60.57 56.7,61.57 57,62.47 57.3,63.47 57.5,64.57 57.7,65.57 57.8,66.67 57.9,67.77 58,68.87 58),(73.77 38.9,72.27 41.6,68.97 42.6,65.57 41.7,64.07 38.9,64.07 18.9,65.47 16.2,68.77 15.2,72.07 16.1,73.77 18.9,73.77 38.9)))
Figure
Geometry figure for visual-st-letters-01

Generating the word 'PostGIS'.

Code
SELECT ST_Letters('PostGIS') AS letters;
Вивід растрових зображень
MULTIPOLYGON(((43 39,43 38,42 37,42 36,42 35,42 34,42 33,42 32,41 31,41 30,40 29,40 28,39 28,39 27,38 26,38 26,37 25,36 24,36 24,35 24,34 23,33 23,33 22,32 22,31 22,30 21,29 21,28 21,27 21,26 20,25 20,24 20,23 20,17 20,17 1,18 0,0 0,1 1,1 73,0 74,23 74,24 74,25 74,26 74,27 74,28 73,29 73,30 73,31 73,32 72,33 72,33 72,34 72,35 71,36 70,36 70,37 69,38 69,38 68,39 67,39 67,40 66,40 65,41 64,41 64,42 63,42 62,42 61,42 60,42 58,42 57,43 56,43 55,43 39),(26 56,26 58,23 59,17 59,17 35,23 35,26 36,26 38,26 56)),((69 58,70 58,71 58,72 58,73 58,74 58,75 57,76 57,77 57,78 56,79 56,80 56,81 55,82 55,82 54,83 54,84 53,85 52,85 52,86 51,86 50,87 50,87 49,88 48,88 47,89 46,89 45,89 44,89 43,90 42,90 41,90 40,90 39,90 19,90 18,90 17,90 16,89 14,89 14,89 12,89 12,88 11,88 10,87 9,87 8,86 7,86 7,85 6,85 5,84 5,83 4,82 4,82 3,81 2,80 2,79 2,78 1,77 1,77 0,76 0,75 0,74 0,72 0,71 0,70 0,69 0,68 0,67 0,66 0,65 0,64 0,63 0,62 0,61 1,60 1,59 2,58 2,57 2,56 3,56 3,55 4,54 4,54 5,53 6,52 6,52 7,51 8,51 9,50 10,50 11,50 12,49 12,49 14,49 14,49 16,48 17,48 18,48 19,48 39,48 40,48 41,49 42,49 43,49 44,49 45,49 46,50 47,50 48,51 49,51 50,52 50,52 51,53 52,53 52,54 53,55 54,56 54,56 55,57 55,58 56,59 56,60 56,61 57,62 57,63 57,64 58,65 58,66 58,67 58,68 58,69 58),(74 39,72 42,69 43,66 42,64 39,64 19,66 16,69 15,72 16,74 19,74 39)),((111 38,112 37,112 37,113 37,113 37,114 36,115 36,116 36,116 36,117 35,118 35,119 34,120 34,121 33,121 33,122 32,123 32,124 31,125 30,126 30,126 29,127 28,128 27,128 27,129 26,129 25,130 24,130 23,131 22,131 21,131 20,131 18,131 17,131 16,131 15,131 14,130 12,130 11,130 10,129 9,129 8,128 8,128 7,127 6,127 5,126 5,126 4,125 3,124 3,124 2,123 2,122 1,121 1,120 1,120 0,119 0,118 0,117 0,116 0,115 0,114 0,113 0,112 0,111 0,110 0,110 0,109 0,108 0,107 0,106 0,105 0,104 0,103 0,102 1,101 1,100 1,99 2,97 2,96 3,95 3,94 4,99 19,99 19,100 18,100 18,100 18,101 18,101 18,102 18,102 18,103 17,103 17,104 17,104 17,105 17,105 17,106 16,106 16,107 16,107 16,108 16,108 16,109 16,110 16,110 16,111 16,111 16,112 15,112 15,113 15,113 15,113 15,114 15,114 15,115 16,115 16,115 17,115 17,115 18,115 18,115 19,115 19,115 20,114 20,114 20,113 20,113 20,113 20,112 20,112 21,111 21,111 21,110 21,109 22,109 22,108 22,108 22,107 23,107 23,106 24,106 24,105 24,104 24,104 25,103 25,103 26,102 26,102 26,101 27,101 28,100 28,100 28,99 29,99 30,98 30,98 31,98 31,97 32,97 33,97 33,96 34,96 35,96 35,96 36,96 37,96 38,96 38,95 39,95 40,95 41,96 42,96 43,96 43,96 44,96 45,96 45,96 46,97 47,97 47,97 48,97 48,97 49,98 49,98 50,98 50,99 51,99 51,99 52,100 52,100 52,100 53,101 53,101 53,101 54,101 54,102 54,102 54,102 55,103 55,103 55,103 55,104 56,105 56,106 56,106 57,107 57,108 57,109 58,110 58,111 58,112 58,113 58,114 58,115 58,116 58,117 58,118 58,118 58,119 58,120 58,121 57,122 57,123 57,123 57,124 56,125 56,126 56,126 56,127 56,127 55,128 55,128 55,129 55,129 55,123 40,123 40,122 40,122 40,122 40,122 40,121 40,121 40,121 41,120 41,120 41,119 41,119 41,119 41,118 41,118 41,118 41,117 41,117 41,117 42,116 42,116 42,115 42,115 42,115 42,114 42,114 42,114 42,113 42,113 42,113 42,112 42,112 42,112 42,112 42,112 42,112 42,112 42,112 42,112 42,111 42,111 42,111 41,111 41,111 41,111 41,111 41,111 40,111 40,111 40,111 40,111 40,111 40,111 39,111 39,111 39,111 39,111 39,111 38,111 38,111 38,111 38,111 38,111 38,111 38)),((161 15,166 15,167 16,167 -1,166 0,160 0,160 0,159 0,158 0,157 0,157 0,156 0,155 0,155 0,154 0,153 0,153 1,152 1,151 1,151 1,150 2,149 2,149 2,148 3,147 3,147 4,146 4,146 5,145 5,145 6,144 6,144 7,143 8,143 9,142 10,142 10,141 11,141 12,141 43,136 43,135 42,135 59,136 58,141 58,141 74,140 75,158 75,157 74,157 58,165 58,166 59,166 42,165 43,157 43,157 18,157 17,157 17,157 17,158 17,158 16,158 16,158 16,159 16,159 16,159 16,160 16,160 15,160 15,161 15,161 15,161 15)),((214 13,214 12,213 12,213 11,213 10,212 10,212 9,212 8,211 8,211 7,210 6,210 6,209 5,209 5,208 4,208 4,207 3,206 3,206 2,205 2,204 2,203 1,203 1,202 0,201 0,200 0,199 0,199 0,198 0,197 0,196 -1,195 -1,194 -1,193 -1,192 -1,190 0,189 0,188 0,187 0,186 0,185 1,184 1,183 1,182 2,182 2,181 3,180 3,179 4,178 4,178 5,177 6,176 6,176 7,175 8,175 9,175 10,174 10,174 11,174 12,173 13,173 14,173 15,173 16,173 18,173 19,173 54,173 56,173 56,173 57,173 58,173 59,173 60,173 61,174 62,174 63,174 64,174 64,175 65,175 66,176 67,176 68,177 68,177 69,178 70,179 70,179 71,180 71,181 72,182 72,183 72,184 73,185 73,186 73,187 74,188 74,189 74,190 74,192 74,210 74,210 58,192 58,191 58,191 58,191 58,190 58,190 58,190 58,190 57,189 57,189 57,189 56,189 56,189 56,189 56,189 55,189 55,189 54,189 19,189 19,189 18,189 18,189 18,189 17,189 17,189 17,190 17,190 16,190 16,191 16,191 16,191 16,192 15,192 15,193 15,193 15,193 15,194 15,194 15,195 15,195 15,196 15,196 15,196 15,197 15,197 15,198 16,198 16,198 16,199 16,199 16,199 32,193 32,193 46,214 46,214 13)),((236 73,236 1,237 0,219 0,220 1,220 73,219 74,237 74,236 73)),((264 45,265 45,266 44,266 44,267 44,268 43,269 43,270 42,271 42,272 42,273 41,274 40,274 40,275 39,276 39,277 38,277 38,278 37,279 36,279 35,280 35,280 34,281 33,281 32,282 31,282 30,283 29,283 28,283 27,283 26,284 25,284 24,284 22,283 21,283 20,283 20,283 19,283 18,283 17,283 16,283 15,282 15,282 14,282 13,282 13,281 12,281 11,281 11,280 10,280 10,280 9,279 9,279 8,279 8,278 7,278 7,278 6,277 6,277 6,276 5,276 5,276 5,275 4,275 4,275 4,274 3,273 3,272 2,271 2,270 1,269 1,268 1,267 0,266 0,264 0,263 0,262 0,261 0,260 0,259 0,258 0,257 0,256 0,255 0,253 0,252 0,251 1,250 1,249 2,248 2,247 2,246 3,245 3,244 4,243 4,242 4,242 5,246 21,247 20,248 20,248 20,249 20,250 19,251 19,251 19,252 18,253 18,254 18,255 18,255 17,256 17,257 17,258 17,259 17,259 16,260 16,261 16,262 16,262 17,263 17,264 17,264 17,265 17,265 18,266 18,266 19,267 19,267 20,267 21,267 22,267 22,267 23,267 23,267 24,267 24,267 24,267 25,266 25,266 26,265 26,265 26,264 27,264 27,263 28,262 28,261 28,261 29,260 29,259 30,258 30,258 30,257 31,256 31,255 32,254 32,253 33,253 33,252 34,251 34,250 35,249 36,248 36,248 37,247 38,246 39,246 39,245 40,244 41,244 42,244 43,243 44,243 45,243 46,242 47,242 49,242 50,242 51,242 53,242 55,242 56,242 58,243 60,243 61,244 62,245 64,246 65,247 66,248 67,249 68,250 69,251 70,252 71,253 72,255 72,256 73,258 73,259 74,261 74,262 74,264 74,265 74,267 74,269 74,270 74,272 73,274 73,275 73,277 72,279 72,280 71,275 56,275 57,274 57,274 57,273 57,273 57,272 57,271 58,271 58,270 58,269 58,269 58,268 58,267 58,267 58,266 58,265 58,265 58,264 58,263 58,263 58,262 58,262 58,261 57,260 57,260 56,260 56,259 56,259 55,258 54,258 54,258 53,258 52,258 52,258 51,258 51,258 50,258 50,259 49,259 48,259 48,260 48,260 47,261 47,262 46,262 46,263 46,263 45,264 45)))
Figure
Geometry figure for visual-st-letters-02

Scaling and moving words.

Code
WITH letters AS (
    SELECT ST_Letters('Yo') AS geom
)
SELECT geom AS input_letters,
       ST_Translate(ST_Scale(geom, 2, 2), 120, 0)
           AS scaled_letters
FROM letters;
Вивід растрових зображень
MULTIPOLYGON(((34 74,54 74,53 73,35 29,35 1,36 0,18 0,19 1,19 29,1 73,0 74,20 74,19 73,23 62,27 47,31 62,35 73,34 74)),((69 58,70 58,71 58,72 58,73 58,74 58,75 57,76 57,77 57,78 56,79 56,80 56,81 55,81 55,82 54,83 54,84 53,84 52,85 52,86 51,86 50,87 50,87 49,88 48,88 47,88 46,89 45,89 44,89 43,89 42,89 41,90 40,90 39,90 19,90 18,89 17,89 16,89 14,89 14,89 12,88 12,88 11,88 10,87 9,87 8,86 7,86 7,85 6,84 5,84 5,83 4,82 4,82 3,81 2,80 2,79 2,78 1,77 1,76 0,75 0,74 0,73 0,72 0,71 0,70 0,69 0,68 0,67 0,66 0,65 0,64 0,63 0,62 0,61 1,60 1,59 2,58 2,57 2,56 3,55 3,55 4,54 4,53 5,53 6,52 6,52 7,51 8,51 9,50 10,50 11,49 12,49 12,49 14,49 14,48 16,48 17,48 18,48 19,48 39,48 40,48 41,48 42,49 43,49 44,49 45,49 46,50 47,50 48,50 49,51 50,51 50,52 51,53 52,53 52,54 53,55 54,55 54,56 55,57 55,58 56,59 56,60 56,61 57,62 57,62 57,63 58,65 58,66 58,67 58,68 58,69 58),(74 39,72 42,69 43,66 42,64 39,64 19,65 16,69 15,72 16,74 19,74 39))) | MULTIPOLYGON(((189 148,228 148,226 146,190 57,190 2,192 0,156 0,158 2,158 57,122 146,120 148,159 148,157 146,166 123,174 95,182 124,191 146,189 148)),((258 116,260 116,262 116,264 116,266 115,269 115,271 115,272 114,274 114,276 113,278 112,280 111,281 111,283 110,285 109,286 107,287 106,289 105,290 104,291 102,292 101,293 99,294 97,295 96,296 94,297 92,297 90,298 88,298 86,299 84,299 82,299 80,299 77,299 38,299 35,299 33,299 31,298 29,298 27,298 25,297 23,296 21,295 19,295 18,294 16,293 15,291 13,290 12,289 10,288 9,286 8,285 7,283 6,282 5,280 4,278 3,276 2,275 2,273 1,271 0,269 0,267 0,265 -1,262 -1,260 -1,258 -1,256 -1,254 -1,251 -1,249 0,247 0,245 0,243 1,241 2,239 2,238 3,236 4,234 5,233 6,231 7,230 8,228 9,227 10,226 12,224 13,223 14,222 16,221 18,220 19,220 21,219 23,218 25,218 27,217 29,217 31,217 33,216 36,216 38,216 77,216 80,217 82,217 84,217 86,218 88,218 90,219 92,219 94,220 96,221 97,222 99,223 101,224 102,225 103,227 105,228 106,229 107,231 108,232 109,234 110,236 111,238 112,239 113,241 113,243 114,245 115,247 115,249 115,251 116,253 116,256 116,258 116),(268 78,265 83,258 85,251 83,248 78,248 38,251 32,258 30,264 32,268 38,268 78)))
Figure
Geometry figure for visual-st-letters-03

Див. також

ST_AsTWKB, ST_Scale, ST_Translate


Назва

ST_MakeNurbsCurve — Creates a NURBS (Non-Uniform Rational B-Spline) curve from control points, optional weights, and optional knot vector.

Короткий огляд

geometry ST_MakeNurbsCurve(integer degree, geometry control_points, float8[] weights, float8[] knots);

Опис

Creates a NURBS (Non-Uniform Rational B-Spline) curve geometry from the specified parameters. NURBS curves are smooth parametric curves that provide precise control over curve shape through control points, weights, and knot values.

The degree parameter specifies the polynomial degree of the curve (must be between 1 and 10). Higher degrees produce smoother curves.

The control_points must be a LINESTRING geometry defining the control polygon. The number of control points must be at least degree + 1.

The optional weights array assigns a weight to each control point. All weights must be positive. If NULL or omitted, uniform weights (1.0) are used, resulting in a non-rational B-spline.

The optional knots array defines the parameter space. If NULL or omitted, a uniform clamped knot vector is automatically generated. If provided, the knot vector must have exactly (npoints + degree + 1) elements and must be non-decreasing.

Availability: 3.7.0

Приклади

This example creates a degree-2 NURBS curve with uniform weights.

Code
SELECT ST_MakeNurbsCurve(
    2,
    'LINESTRING(0 0,5 10,10 0)'::geometry
);
Вивід растрових зображень
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3)))
Figure
Geometry figure for visual-st-makenurbscurve-01

This example creates a rational NURBS curve with custom weights.

Code
SELECT ST_MakeNurbsCurve(
    2,
    'LINESTRING(0 0,5 10,10 0)'::geometry,
    ARRAY[1.0, 2.0, 1.0]
);
Вивід растрових зображень
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 10),WEIGHT 2), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3)))
Figure
Geometry figure for visual-st-makenurbscurve-02

This example creates a NURBS curve with a non-uniform knot vector.

Code
SELECT ST_MakeNurbsCurve(
    2,
    'LINESTRING(0 0,3 10,7 10,10 0)'::geometry,
    ARRAY[1.0, 1.0, 1.0, 1.0],
    ARRAY[0.0, 0.0, 0.0, 0.3, 1.0, 1.0, 1.0]
);
Вивід растрових зображень
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(3 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(7 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(0.3,1), KNOT(1,3)))
Figure
Geometry figure for visual-st-makenurbscurve-03

7.4. Доступ до геометрії

Анотація

Ці функції розкривають структурну інформацію про існуючу геометрію, не змінюючи її. Вони надають доступ до метаданих, таких як тип геометрії, розмірність або координатні компоненти, щоб просторові вирази могли контролювати запити до складних об'єктів.

  • GeometryType — Повертає тип геометрії у вигляді тексту.
  • ST_Boundary — Повертає межі геометрії.
  • ST_BoundingDiagonal — Повертає діагональ обмежувального прямокутника геометрії.
  • ST_CoordDim — Повертає розмірність координат геометрії.
  • ST_Dimension — Повертає топологічну розмірність геометрії.
  • ST_Dump — Повертає набір рядків geometry_dump для компонентів геометрії.
  • ST_DumpPoints — Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_DumpSegments — Повертає набір рядків geometry_dump для сегментів у геометрії.
  • ST_DumpRings — Повертає набір рядків geometry_dump для зовнішнього та внутрішнього кілець полігону.
  • ST_EndPoint — Returns the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_Envelope — Повертає геометрію, що представляє обмежувальну рамку геометрії.
  • ST_ExteriorRing — Повертає LineString, що представляє зовнішнє кільце полігону
  • ST_GeometryN — Повернути елемент колекції геометрії.
  • ST_GeometryType — Повертає тип SQL-MM геометрії у вигляді тексту.
  • ST_HasArc — Тестує, чи містить геометрія кругову дугу
  • ST_InteriorRingN — Повертає N-те внутрішнє кільце (отвір) полігону.
  • ST_NumCurves — Повернути кількість кривих компонентів у CompoundCurve.
  • ST_CurveN — Повертає геометрію N-го компонента кривої CompoundCurve.
  • ST_IsClosed — Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).
  • ST_IsCollection — Перевіряє, чи є геометрія типом колекції геометрії.
  • ST_IsEmpty — Перевіряє, чи геометрія порожня.
  • ST_IsPolygonCCW — Перевіряє, чи мають полігони зовнішні кільця, орієнтовані проти годинникової стрілки, і внутрішні кільця, орієнтовані за годинниковою стрілкою.
  • ST_IsPolygonCW — Перевіряє, чи полігони мають зовнішні кільця, орієнтовані за годинниковою стрілкою, а внутрішні кільця — проти годинникової стрілки.
  • ST_IsRing — Перевіряє, чи лінія LineString є замкнутою та простою.
  • ST_IsSimple — Перевіряє, чи геометрія не має точок самоперетину або самодотику.
  • ST_M — Повертає координату M точки.
  • ST_MemSize — Повертає обсяг пам'яті, який займає геометрія.
  • ST_NDims — Повертає розмір координат геометрії.
  • ST_NPoints — Повертає кількість точок (вершин) у геометрії.
  • ST_NRings — Повертає кількість кілець у полігональній геометрії.
  • ST_NumGeometries — Повертає кількість елементів у колекції геометрії.
  • ST_NumInteriorRings — Повертає кількість внутрішніх кілець (отворів) полігону.
  • ST_NumInteriorRing — Returns the number of interior rings (holes) of a Polygon. Alias for ST_NumInteriorRings.
  • ST_NumPatches — Returns the number of faces in a PolyhedralSurface or TIN.
  • ST_NumPoints — Повертає кількість точок у LineString або CircularString.
  • ST_PatchN — Returns the Nth face of a PolyhedralSurface or TIN.
  • ST_PointN — Повертає N-ту точку в першому LineString або круговому LineString в геометрії.
  • ST_Points — Повертає об'єкт MultiPoint, що містить координати геометрії.
  • ST_StartPoint — Returns the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_StartM — Returns the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_EndM — Returns the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_SetStartM — Sets the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_SetEndM — Sets the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_Summary — Повертає текстовий підсумок вмісту геометрії.
  • ST_X — Повертає координату X точки.
  • ST_Y — Повертає координату Y точки.
  • ST_Z — Повертає координату Z точки.
  • ST_ZMFlag — Повертає код, що вказує на розмірність координат ZM геометрії.
  • ST_HasZ — Перевіряє, чи має геометрія розмір Z.
  • ST_HasM — Перевіряє, чи має геометрія розмір M (вимір).
  • ST_ControlPoints — Returns the control points of a NURBS curve as a MULTIPOINT geometry.
  • ST_Degree — Returns the polynomial degree of a NURBS curve.
  • ST_Weights — Returns the weight array of a rational NURBS curve.
  • ST_Knots — Returns the knot vector of a NURBS curve.
  • ST_NumControlPoints — Returns the number of control points in a NURBS curve.
  • ST_NurbsCurveIsRational — Checks if a NURBS curve is rational (has weights).
  • ST_IsNurbsCurve — Checks if a geometry is a NURBS curve.
  • ST_Evaluate — Evaluates a NURBS curve at a specific parameter value and returns the resulting point.
  • ST_NurbsToLineString — Converts a NURBS curve to a LINESTRING by uniform sampling.

Назва

GeometryType — Повертає тип геометрії у вигляді тексту.

Короткий огляд

text GeometryType(geometry geomA);

Опис

Повертає тип геометрії у вигляді рядка. Наприклад: 'LINESTRING', 'POLYGON', 'MULTIPOINT' тощо.

OGC SPEC s2.1.1.1 - Повертає ім'я підтипу Geometry, який можна інстанціювати, до якого належить цей екземпляр Geometry. Ім'я підтипу Geometry, який можна інстанціювати, повертається у вигляді рядка.

[Примітка]

Ця функція також вказує, чи вимірюється геометрія, повертаючи рядок у вигляді 'POINTM'.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT GeometryType('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'::geometry);
Вивід растрових зображень
LINESTRING
Figure
Geometry figure for visual-geometrytype-01
Code
SELECT ST_GeometryType('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )');
    POLYHEDRALSURFACE
            
Code
SELECT GeometryType(geom) as result
FROM
  (SELECT
     'TIN (((
              0 0 0,
              0 0 1,
              0 1 0,
              0 0 0
          )),((
              0 0 0,
              0 1 0,
              1 1 0,
              0 0 0
          ))
          )'::geometry  AS geom
  ) AS g;
Вивід растрових зображень
TIN
Figure
Geometry figure for visual-geometrytype-02

Див. також

ST_GeometryType


Назва

ST_Boundary — Повертає межі геометрії.

Короткий огляд

geometry ST_Boundary(geometry geomA);

Опис

Повертає закриття комбінаторної межі цієї геометрії. Комбінаторна межа визначається, як описано в розділі 3.12.3.2 специфікації OGC. Оскільки результат цієї функції є закриттям, а отже, топологічно замкнутим, отриману межу можна представити за допомогою примітивних елементів геометрії, як описано в розділі 3.12.2 специфікації OGC.

Виконано модулем GEOS

[Примітка]

До версії 2.0.0 ця функція викликає виняток, якщо використовується з GEOMETRYCOLLECTION. Починаючи з версії 2.0.0, вона повертає NULL (непідтримуваний вхідний параметр).

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. OGC SPEC s2.1.1.1

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1.17

This function supports 3d and will not drop the z-index.

Покращено: 2.1.0 додано підтримку Triangle

Змінено: 3.2.0 підтримка TIN, не використовує geos, не лінеаризує криві

Приклади

LineString with boundary points overlaid.

Code
SELECT ST_Boundary(geom)
FROM (SELECT 'LINESTRING(100 150,50 60,70 80,160 170)'::geometry As geom) As f;
                
Вивід растрових зображень
MULTIPOINT((100 150),(160 170))
Figure
Geometry figure for visual-st-boundary-01

Polygon holes with the boundary MultiLineString overlaid.

Code
SELECT ST_Boundary(geom)
FROM (SELECT
'POLYGON (( 10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130 ),
    ( 70 40,100 50,120 80,80 110,50 90,70 40 ))'::geometry As geom) As f;
                
Вивід растрових зображень
MULTILINESTRING((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130),
        (70 40,100 50,120 80,80 110,50 90,70 40))
Figure
Geometry figure for visual-st-boundary-02
Code
SELECT ST_Boundary('LINESTRING(1 1,0 0,-1 1)');
Вивід растрових зображень
MULTIPOINT((1 1),(-1 1))
Figure
Geometry figure for visual-st-boundary-03
Code
SELECT ST_Boundary('POLYGON((1 1,0 0,-1 1,1 1))');
Вивід растрових зображень
LINESTRING(1 1,0 0,-1 1,1 1)
Figure
Geometry figure for visual-st-boundary-04

This example uses a 3D polygon.

Code
SELECT ST_Boundary('POLYGON((1 1 1,0 0 1,-1 1 1,1 1 1))');
Вивід растрових зображень
LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)
Figure
Geometry figure for visual-st-boundary-05

This example uses a 3D MultiLineString.

Code
SELECT ST_Boundary('MULTILINESTRING((1 1 1,0 0 0.5,-1 1 1),(1 1 0.5,0 0 0.5,-1 1 0.5,1 1 0.5) )');
Вивід растрових зображень
MULTIPOINT(1 1 1,-1 1 1)
Figure
Geometry figure for visual-st-boundary-06

Назва

ST_BoundingDiagonal — Повертає діагональ обмежувального прямокутника геометрії.

Короткий огляд

geometry ST_BoundingDiagonal(geometry geom, boolean fits=false);

Опис

Повертає діагональ обмежувальної рамки наданої геометрії у вигляді LineString. Діагональ — це 2-точковий LineString із мінімальними значеннями кожного виміру в початковій точці та максимальними значеннями в кінцевій точці. Якщо вхідна геометрія порожня, діагональна лінія є LINESTRING EMPTY.

Додатковий параметр fits визначає, чи потрібно знайти найкраще співпадіння. Якщо значення false, можна прийняти діагональ дещо більшої обмежувальної рамки (що швидше обчислюється для геометрій з великою кількістю вершин). У будь-якому випадку обмежувальна рамка поверненої діагональної лінії завжди охоплює вхідну геометрію.

Повернена геометрія зберігає SRID та розмірність (наявність Z та M) вхідної геометрії.

[Примітка]

У виняткових випадках (тобто, якщо у вхідних даних є лише одна вершина) повернутий ланцюжок ліній буде формально недійсним (не має внутрішньої частини). Результат все одно залишається топологічно правильним.

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

This example shows a polygon together with the diagonal of its bounding box.

Code
WITH input AS (
  SELECT 'POLYGON((10 20,30 60,70 40,90 10,50 -10,10 20))'::geometry AS geom
)
SELECT geom AS input_polygon,
       ST_BoundingDiagonal(geom) AS diagonal
FROM input;
Вивід растрових зображень
POLYGON((10 20,30 60,70 40,90 10,50 -10,10 20)) | LINESTRING(10 -10,90 60)
Figure
Geometry figure for visual-st-boundingdiagonal-01

This example returns the minimum X coordinate of a buffer around a point.

Code
SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(
  ST_Buffer(ST_Point(0, 0), 10)
)));
Вивід растрових зображень
-10

Назва

ST_CoordDim — Повертає розмірність координат геометрії.

Короткий огляд

integer ST_CoordDim(geometry geomA);

Опис

Повертає розмірність координат значення ST_Geometry.

Це ім'я псевдоніма, що відповідає MM, для ST_NDims

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.3

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT ST_CoordDim('CIRCULARSTRING(1 2 3,1 3 4,5 6 7,8 9 10,11 12 13)');
Вивід растрових зображень
3
Code
SELECT ST_CoordDim(ST_Point(1, 2));
Вивід растрових зображень
2

Див. також

ST_NDims


Назва

ST_Dimension — Повертає топологічну розмірність геометрії.

Короткий огляд

integer ST_Dimension(geometry g);

Опис

Повертає топологічну розмірність цього об'єкта Geometry, яка повинна бути меншою або дорівнювати розмірності координат. OGC SPEC s2.1.1.1 - повертає 0 для POINT, 1 для LINESTRING, 2 для POLYGON і найбільший вимір компонентів GEOMETRYCOLLECTION. Якщо розмір невідомий (наприклад, для порожнього GEOMETRYCOLLECTION), повертається 0.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.2

[Примітка]

A TIN, including a closed TIN surface, is a surface geometry and has dimension 2. Use CG_MakeSolid to make the solid representation explicit; the resulting 3D solid has dimension 3. Solid geometry semantics, such as volume, are handled separately by the SQL/MM 3D solid functions (SQL-MM IEC 13249-3: 9.1).

Покращено: 2.0.0 додано підтримку багатогранних поверхонь і TIN. Більше не виникає виняток, якщо задано порожню геометрію.

[Примітка]

До версії 2.0.0 ця функція викликає виняток, якщо використовується з порожньою геометрією.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0), POINT(0 0))');
Вивід растрових зображень
1
Figure
Geometry figure for visual-st-dimension-01
Code
SELECT ST_Dimension('TIN Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))');
Вивід растрових зображень
2
Figure
Geometry figure for visual-st-dimension-02

Див. також

ST_NDims, CG_MakeSolid, CG_Volume


Назва

ST_Dump — Повертає набір рядків geometry_dump для компонентів геометрії.

Короткий огляд

geometry_dump[] ST_Dump(geometry g1);

Опис

Функція повернення набору (SRF), яка витягує компоненти геометрії. Вона повертає набір geometry_dumpрядків, кожен з яких містить геометрію (поле geom) та масив цілих чисел (поле path).

Для типу атомарної геометрії (POINT, LINESTRING, POLYGON) повертається один запис з порожнім масивом path і вхідною геометрією як geom. Для колекції або мультигеометрії повертається запис для кожного компонента колекції, а path позначає положення компонента всередині колекції.

ST_Dump корисний для розширення геометрій. Він є оберненим до ST_Collect/ GROUP BY, оскільки створює нові рядки. Наприклад, його можна використовувати для розширення MULTIPOLYGONS в POLYGONS.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Доступність: PostGIS 1.0.0RC1. Потрібна PostgreSQL 7.3 або вище.

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Dump the components of geometries stored in a table.

Code
SELECT sometable.field1,
       (ST_Dump(sometable.geom)).geom AS geom
FROM sometable;

Break a CompoundCurve into its constituent LineStrings and CircularStrings.

Code
SELECT a.geom, ST_HasArc(a.geom)
  FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
         FROM (SELECT 'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))'::geometry AS p_geom) AS b
        ) AS a;
Вивід растрових зображень
st_asewkt          | st_hasarc
-----------------------------+----------
 CIRCULARSTRING(0 0,1 1,1 0) | t
 LINESTRING(1 0,0 1)         | f
(2 rows)
Figure
Geometry figure for visual-st-dump-01

This example breaks a PolyhedralSurface into its faces.

Code
SELECT (a.p_geom).path[1] As path,(a.p_geom).geom As geom_ewkt
  FROM (SELECT ST_Dump('POLYHEDRALSURFACE(
((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)' ) AS p_geom )  AS a;
Вивід растрових зображень
path |                geom_ewkt
------+------------------------------------------
    1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))
    2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
    3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
    4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))
    5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))
    6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
Figure
Geometry figure for visual-st-dump-02

This example uses a TIN geometry.

Code
SELECT (g.gdump).path,(g.gdump).geom as wkt
  FROM
    (SELECT
       ST_Dump('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )),((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )' ) AS gdump
    ) AS g;
Вивід растрових зображень
path |                 wkt
------+-------------------------------------
 {1}  | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))
 {2}  | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))
Figure
Geometry figure for visual-st-dump-03

Назва

ST_DumpPoints — Повертає набір рядків geometry_dump для координат у геометрії.

Короткий огляд

geometry_dump[] ST_DumpPoints(geometry geom);

Опис

Функція повернення набору (SRF), яка витягує координати (вершини) геометрії. Вона повертає набір geometry_dumpрядків, кожен з яких містить геометрію (поле geom) та масив цілих чисел (поле path).

  • поле geom POINTs представляє координати наданої геометрії.

  • the path field (an integer[]) is an index enumerating the coordinate positions in the elements of the supplied geometry. The indices are 1-based. For example, for a LINESTRING the paths are {i} where i is the nth coordinate in the LINESTRING. For a POLYGON the paths are {i,j} where i is the ring number (1 is outer; inner rings follow) and j is the coordinate position in the ring.

Щоб отримати єдину геометрію, що містить координати, використовуйте ST_Points.

Покращено: 2.1.0 Вища швидкість. Перероблено як native-C.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Доступність: 1.5.0

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Explode a table of LineStrings into their vertices.

Code
SELECT edge_id, (dp).path[1] As index,(dp).geom As wktnode
FROM (SELECT 1 As edge_id,
    ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2,3 4,10 10)')) AS dp
     UNION ALL
     SELECT 2 As edge_id,
    ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5,5 6,9 10)')) AS dp
   ) As foo;
Вивід растрових зображень
edge_id | index |    wktnode
---------+-------+--------------
       1 |     1 | POINT(1 2)
       1 |     2 | POINT(3 4)
       1 |     3 | POINT(10 10)
       2 |     1 | POINT(3 5)
       2 |     2 | POINT(5 6)
       2 |     3 | POINT(9 10)
Figure
Geometry figure for visual-st-dumppoints-01

Dump every vertex from a mixed GeometryCollection.

Code
SELECT path,geom
FROM (
  SELECT (ST_DumpPoints(g.geom)).*
  FROM
    (SELECT
       'GEOMETRYCOLLECTION(
          POINT ( 0 1 ),
          LINESTRING ( 0 3,3 4 ),
          POLYGON (( 2 0,2 3,0 2,2 0 )),
          POLYGON (( 3 0,3 3,6 3,6 0,3 0 ),
                   ( 5 1,4 2,5 2,5 1 )),
          MULTIPOLYGON (
                  (( 0 5,0 8,4 8,4 5,0 5 ),
                   ( 1 6,3 6,2 7,1 6 )),
                  (( 5 4,5 8,6 7,5 4 ))
          )
        )'::geometry AS geom
    ) AS g
  ) j;
Вивід растрових зображень
path    | st_astext
-----------+------------
 {1,1}     | POINT(0 1)
 {2,1}     | POINT(0 3)
 {2,2}     | POINT(3 4)
 {3,1,1}   | POINT(2 0)
 {3,1,2}   | POINT(2 3)
 {3,1,3}   | POINT(0 2)
 {3,1,4}   | POINT(2 0)
 {4,1,1}   | POINT(3 0)
 {4,1,2}   | POINT(3 3)
 {4,1,3}   | POINT(6 3)
 {4,1,4}   | POINT(6 0)
 {4,1,5}   | POINT(3 0)
 {4,2,1}   | POINT(5 1)
 {4,2,2}   | POINT(4 2)
 {4,2,3}   | POINT(5 2)
 {4,2,4}   | POINT(5 1)
 {5,1,1,1} | POINT(0 5)
 {5,1,1,2} | POINT(0 8)
 {5,1,1,3} | POINT(4 8)
 {5,1,1,4} | POINT(4 5)
 {5,1,1,5} | POINT(0 5)
 {5,1,2,1} | POINT(1 6)
 {5,1,2,2} | POINT(3 6)
 {5,1,2,3} | POINT(2 7)
 {5,1,2,4} | POINT(1 6)
 {5,2,1,1} | POINT(5 4)
 {5,2,1,2} | POINT(5 8)
 {5,2,1,3} | POINT(6 7)
 {5,2,1,4} | POINT(5 4)
(29 rows)

Collect the dumped vertices to visualize them over the source geometry.

Code
WITH source(geom) AS (VALUES (
  'GEOMETRYCOLLECTION(
     POINT (0 1),
     LINESTRING (0 3,3 4),
     POLYGON ((2 0,2 3,0 2,2 0)),
     POLYGON ((3 0,3 3,6 3,6 0,3 0),(5 1,4 2,5 2,5 1)),
     MULTIPOLYGON (((0 5,0 8,4 8,4 5,0 5),(1 6,3 6,2 7,1 6)),
                   ((5 4,5 8,6 7,5 4))))'::geometry
))
SELECT ST_Collect((dp).geom ORDER BY (dp).path) AS vertices
FROM source
CROSS JOIN LATERAL ST_DumpPoints(source.geom) AS dp;
Вивід растрових зображень
MULTIPOINT((0 1),(0 3),(3 4),(2 0),(2 3),(0 2),(2 0),(3 0),(3 3),(6 3),(6 0),(3 0),(5 1),(4 2),(5 2),(5 1),(0 5),(0 8),(4 8),(4 5),(0 5),(1 6),(3 6),(2 7),(1 6),(5 4),(5 8),(6 7),(5 4))
Figure
Geometry figure for visual-st-dumppoints-03

This example uses a cube represented as a PolyhedralSurface.

Code
SELECT (g.gdump).path,(g.gdump).geom as wkt
  FROM
    (SELECT
       ST_DumpPoints('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )' ) AS gdump
    ) AS g;
Вивід растрових зображень
path   |     wkt
---------+--------------
 {1,1,1} | POINT(0 0 0)
 {1,1,2} | POINT(0 0 1)
 {1,1,3} | POINT(0 1 1)
 {1,1,4} | POINT(0 1 0)
 {1,1,5} | POINT(0 0 0)
 {2,1,1} | POINT(0 0 0)
 {2,1,2} | POINT(0 1 0)
 {2,1,3} | POINT(1 1 0)
 {2,1,4} | POINT(1 0 0)
 {2,1,5} | POINT(0 0 0)
 {3,1,1} | POINT(0 0 0)
 {3,1,2} | POINT(1 0 0)
 {3,1,3} | POINT(1 0 1)
 {3,1,4} | POINT(0 0 1)
 {3,1,5} | POINT(0 0 0)
 {4,1,1} | POINT(1 1 0)
 {4,1,2} | POINT(1 1 1)
 {4,1,3} | POINT(1 0 1)
 {4,1,4} | POINT(1 0 0)
 {4,1,5} | POINT(1 1 0)
 {5,1,1} | POINT(0 1 0)
 {5,1,2} | POINT(0 1 1)
 {5,1,3} | POINT(1 1 1)
 {5,1,4} | POINT(1 1 0)
 {5,1,5} | POINT(0 1 0)
 {6,1,1} | POINT(0 0 1)
 {6,1,2} | POINT(1 0 1)
 {6,1,3} | POINT(1 1 1)
 {6,1,4} | POINT(0 1 1)
 {6,1,5} | POINT(0 0 1)
(30 rows)

This example uses a Triangle geometry.

Code
SELECT (g.gdump).path,(g.gdump).geom as wkt
  FROM
    (SELECT
       ST_DumpPoints('TRIANGLE ((
                0 0,
                0 9,
                9 0,
                0 0
            ))' ) AS gdump
    ) AS g;
Вивід растрових зображень
path |    wkt
------+------------
 {1,1} | POINT(0 0)
 {1,2} | POINT(0 9)
 {1,3} | POINT(9 0)
 {1,4} | POINT(0 0)
Figure
Geometry figure for visual-st-dumppoints-05

This example uses a TIN geometry.

Code
SELECT (g.gdump).path,(g.gdump).geom as wkt
  FROM
    (SELECT
       ST_DumpPoints('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )),((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )' ) AS gdump
    ) AS g;
Вивід растрових зображень
path   |     wkt
---------+--------------
 {1,1,1} | POINT(0 0 0)
 {1,1,2} | POINT(0 0 1)
 {1,1,3} | POINT(0 1 0)
 {1,1,4} | POINT(0 0 0)
 {2,1,1} | POINT(0 0 0)
 {2,1,2} | POINT(0 1 0)
 {2,1,3} | POINT(1 1 0)
 {2,1,4} | POINT(0 0 0)
(8 rows)
Figure
Geometry figure for visual-st-dumppoints-06

Назва

ST_DumpSegments — Повертає набір рядків geometry_dump для сегментів у геометрії.

Короткий огляд

geometry_dump[] ST_DumpSegments(geometry geom);

Опис

Функція повернення набору (SRF), яка витягує сегменти геометрії. Вона повертає набір geometry_dumpрядків, кожен з яких містить геометрію (поле geom) та масив цілих чисел (поле path).

  • поле geom LINESTRINGs представляє лінійні сегменти наданої геометрії, а CIRCULARSTRINGs представляє сегменти дуги.

  • поле path (тип integer[]) є індексом, що перелічує позиції початкових точок сегментів в елементах наданої геометрії. Індекси починаються з 1. Наприклад, для LINESTRING шляхи є {i}, де i є n-тою початковою точкою сегмента в LINESTRING. Для POLYGON шляхи мають вигляд {i,j}, де i — номер кільця (1 — зовнішнє, внутрішні кільця йдуть за ним), а j — позиція початку сегмента в кільці.

Доступність: 3.2.0

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади стандартної геометрії

Code
SELECT path,geom
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'GEOMETRYCOLLECTION(
    LINESTRING(1 1,3 3,4 4),
    POLYGON((5 5,6 6,7 7,5 5))
)'::geometry AS geom
        ) AS g
) j;
Вивід растрових зображень
path   │      st_astext
---------------------------------
 {1,1}   │ LINESTRING(1 1,3 3)
 {1,2}   │ LINESTRING(3 3,4 4)
 {2,1,1} │ LINESTRING(5 5,6 6)
 {2,1,2} │ LINESTRING(6 6,7 7)
 {2,1,3} │ LINESTRING(7 7,5 5)
(5 rows)
Figure
Geometry figure for visual-st-dumpsegments-01

Приклади TIN і трикутників

This example uses a Triangle geometry.

Code
SELECT path,geom
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'TRIANGLE((
        0 0,
        0 9,
        9 0,
        0 0
    ))'::geometry AS geom
        ) AS g
) j;
Вивід растрових зображень
path  │      st_astext
 ---------------------------------
 {1,1} │ LINESTRING(0 0,0 9)
 {1,2} │ LINESTRING(0 9,9 0)
 {1,3} │ LINESTRING(9 0,0 0)
(3 rows)
Figure
Geometry figure for visual-st-dumpsegments-02

This example uses a TIN geometry.

Code
SELECT path,geom
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'TIN(((
        0 0 0,
        0 0 1,
        0 1 0,
        0 0 0
    )),((
        0 0 0,
        0 1 0,
        1 1 0,
        0 0 0
    ))
    )'::geometry AS geom
        ) AS g
) j;
Вивід растрових зображень
path   │        st_asewkt
  ---------------------------------
 {1,1,1} │ LINESTRING(0 0 0,0 0 1)
 {1,1,2} │ LINESTRING(0 0 1,0 1 0)
 {1,1,3} │ LINESTRING(0 1 0,0 0 0)
 {2,1,1} │ LINESTRING(0 0 0,0 1 0)
 {2,1,2} │ LINESTRING(0 1 0,1 1 0)
 {2,1,3} │ LINESTRING(1 1 0,0 0 0)
(6 rows)
Figure
Geometry figure for visual-st-dumpsegments-03

Назва

ST_DumpRings — Повертає набір рядків geometry_dump для зовнішнього та внутрішнього кілець полігону.

Короткий огляд

geometry_dump[] ST_DumpRings(geometry a_polygon);

Опис

Функція повернення набору (SRF), яка витягує кільця полігону. Вона повертає набір geometry_dumpрядків, кожен з яких містить геометрію (поле geom) та масив цілих чисел (поле path).

Поле geom містить кожне кільце як POLYGON. Поле path є цілочисельним масивом довжиною 1, що містить індекс кільця полігону. Зовнішнє кільце (оболонка) має індекс 0. Внутрішні кільця (отвори) мають індекси 1 і вище.

[Примітка]

This only works for POLYGON geometries, not MULTIPOLYGONs. Use ST_Dump to extract polygon elements from polygonal geometries: ST_DumpRings((ST_Dump(geom)).geom )

Доступність: PostGIS 1.1.3. Вимагає PostgreSQL 7.3 або вище.

This function supports 3d and will not drop the z-index.

Приклади

Витяг усіх кілець як полігонів.

Code
SELECT polyTable.field1, polyTable.field1,
      (ST_DumpRings(polyTable.geom)).geom As geom
FROM polyTable

Вилучення оболонки та отворів з полігона.

Code
SELECT path,geom As geom
FROM ST_DumpRings('POLYGON ((1 9,9 9,9 1,1 1,1 9),(2 2,2 3,3 3,3 2,2 2),(4 2,4 4,6 4,6 2,4 2))');
Вивід растрових зображень
path |              geom
------+--------------------------------
 {0}  | POLYGON((1 9,9 9,9 1,1 1,1 9))
 {1}  | POLYGON((2 2,2 3,3 3,3 2,2 2))
 {2}  | POLYGON((4 2,4 4,6 4,6 2,4 2))
Figure
Geometry figure for visual-st-dumprings-01

Finding interior rings which lie close to the exterior ring.

Code
WITH poly AS (
  SELECT 'POLYGON ((
      0 0, 10 0, 10 10, 0 10, 0 0
    ), (
      1 1, 1 2, 2 2, 2 1, 1 1
    ), (
      8.5 1, 8.5 2, 9.5 2, 9.5 1, 8.5 1
    ))'::geometry AS geom
),
rings AS (
  SELECT d.path[1] AS ring_no,
         ST_Boundary(d.geom) AS ring_geom
  FROM poly
  CROSS JOIN LATERAL ST_DumpRings(poly.geom) AS d
),
shell AS (
  SELECT ring_geom
  FROM rings
  WHERE ring_no = 0
),
holes AS (
  SELECT ring_no, ring_geom
  FROM rings
  WHERE ring_no > 0
)
SELECT h.ring_no,
       ST_Normalize(ST_Multi(ST_LineMerge(
         ST_Intersection(ST_Buffer(s.ring_geom, 1.0), h.ring_geom)
       ))) AS close_part
FROM shell AS s
JOIN holes AS h
  ON ST_DWithin(s.ring_geom, h.ring_geom, 1.0);
Вивід растрових зображень
ring_no |                   close_part
---------+-------------------------------------------------
       1 | MULTILINESTRING((1 2,1 1,2 1))
       2 | MULTILINESTRING((8.5 1,9 1,9.5 1,9.5 2,9 2))
Figure
Geometry figure for visual-st-dumprings-02

Назва

ST_EndPoint — Returns the last point of a LineString, CircularLineString, or NURBSCurve.

Короткий огляд

geometry ST_EndPoint(geometry g);

Опис

Returns the last point of a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE geometry as a POINT. Returns NULL if the input is not a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE.

This method implements the SQL/MM specification. SQL-MM 3: 7.1.4

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Змінено: 2.0.0 більше не працює з одномірними MultiLineStrings. У старих версіях PostGIS одномірний MultiLineString працював з цією функцією і повертав кінцеву точку. У 2.0.0 він повертає NULL, як і будь-який інший MultiLineString. Стара поведінка була недокументованою функцією, але користувачі, які вважали, що їхні дані зберігаються як LINESTRING, можуть зіткнутися з поверненням NULL у 2.0.0.

Приклади

End point of a LineString

Code
SELECT ST_EndPoint('LINESTRING(1 1,2 2,3 3)'::geometry);
Вивід растрових зображень
POINT(3 3)
Figure
Geometry figure for visual-st-endpoint-01

Кінцева точка нелінійного об'єкта LineString має значення NULL

Code
SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;
Вивід растрових зображень
t

Кінцева точка 3D-лінії

3D endpoint.

Code
SELECT ST_EndPoint('LINESTRING(1 1 2,1 2 3,0 0 5)');
Вивід растрових зображень
POINT(0 0 5)
Figure
Geometry figure for visual-st-endpoint-03

Кінцева точка CircularString

Code
SELECT ST_EndPoint('CIRCULARSTRING(5 2,-3 2,-2 1,-4 2,6 3)'::geometry);
Вивід растрових зображень
POINT(6 3)
Figure
Geometry figure for visual-st-endpoint-04

End point of a NURBSCurve

Code
SELECT ST_EndPoint('NURBSCURVE(2, (0 0, 1 1, 2 0))'::geometry);
Вивід растрових зображень
POINT(2 0)
Figure
Geometry figure for visual-st-endpoint-05

Див. також

ST_PointN, ST_StartPoint


Назва

ST_Envelope — Повертає геометрію, що представляє обмежувальну рамку геометрії.

Короткий огляд

geometry ST_Envelope(geometry g1);

Опис

Повертає мінімальну обмежувальну коробку подвійної точності (float8) для заданої геометрії у вигляді геометрії. Полігон визначається кутовими точками обмежувальної рамки ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)). (PostGIS також додасть координати ZMIN/ZMAX).

У виняткових випадках (вертикальні лінії, точки) буде повернено геометрію з розмірністю, меншою за POLYGON, тобто POINT або LINESTRING.

Доступність: 1.5.0 поведінка змінена на виведення подвійної точності замість float4

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3: 5.1.19

Приклади

Code
SELECT ST_Envelope('POINT(1 3)'::geometry);
Вивід растрових зображень
POINT(1 3)
Figure
Geometry figure for visual-st-envelope-01
Code
SELECT ST_Envelope('LINESTRING(0 0,1 3)'::geometry);
Вивід растрових зображень
POLYGON((0 0,0 3,1 3,1 0,0 0))
Figure
Geometry figure for visual-st-envelope-02
Code
SELECT ST_Envelope('POLYGON((0 0,0 1,1.0000001 1,1.0000001 0,0 0))'::geometry);
Вивід растрових зображень
POLYGON((0 0,0 1,1.0000001 1,1.0000001 0,0 0))
Figure
Geometry figure for visual-st-envelope-03
Code
SELECT ST_Envelope('POLYGON((0 0,0 1,1.0000000001 1,1.0000000001 0,0 0))'::geometry);
Вивід растрових зображень
POLYGON((0 0,0 1,1.0000000001 1,1.0000000001 0,0 0))
Figure
Geometry figure for visual-st-envelope-04
Code
SELECT Box3D(geom), Box2D(geom), ST_Envelope(geom) As envelopewkt
    FROM (SELECT 'POLYGON((0 0,0 1000012333334.34545678,1.0000001 1,1.0000001 0,0 0))'::geometry As geom) As foo;

Envelope of a point and LineString.

Code
SELECT ST_Envelope(ST_Collect(
            'LINESTRING(55 75,125 150)',
            ST_Point(20, 80)
            )) As wktenv;
Вивід растрових зображень
POLYGON((20 75,20 150,125 150,125 75,20 75))
Figure
Geometry figure for visual-st-envelope-05

Див. також

Box2D, Box3D, ST_OrientedEnvelope


Назва

ST_ExteriorRing — Повертає LineString, що представляє зовнішнє кільце полігону

Короткий огляд

geometry ST_ExteriorRing(geometry a_polygon);

Опис

Повертає LineString, що представляє зовнішнє кільце полігону.

[Примітка]

Ця функція не підтримує MULTIPOLYGON. Для MULTIPOLYGON використовуйте разом з ST_GeometryNабо ST_Dump

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3: 8.2.3, 8.3.3

This function supports 3d and will not drop the z-index.

Приклади

Extract the exterior ring from a Polygon with a hole.

Code
WITH input(geom) AS (VALUES (
  'POLYGON((0 0,2 9,9 11,14 6,12 0,0 0),(4 3,9 3,10 7,5 8,4 3))'::geometry
))
SELECT geom AS input_polygon,
       ST_ExteriorRing(geom) AS exterior_ring
FROM input;
Вивід растрових зображень
POLYGON((0 0,2 9,9 11,14 6,12 0,0 0),(4 3,9 3,10 7,5 8,4 3)) | LINESTRING(0 0,2 9,9 11,14 6,12 0,0 0)
Figure
Geometry figure for visual-st-exteriorring-01

For a MultiPolygon, dump the component Polygons before extracting their exterior rings. Both component Polygons in this example have holes.

Code
WITH input(geom) AS (VALUES (
  'MULTIPOLYGON(
    ((0 0,2 9,9 11,14 6,12 0,0 0),(4 3,9 3,10 7,5 8,4 3)),
    ((18 1,18 10,29 10,31 4,25 0,18 1),(21 3,25 2,28 5,25 8,21 7,21 3))
  )'::geometry
))
SELECT part.geom AS input_polygon,
       ST_ExteriorRing(part.geom) AS exterior_ring
FROM input
CROSS JOIN LATERAL ST_Dump(geom) AS part
ORDER BY part.path;
Вивід растрових зображень
POLYGON((0 0,2 9,9 11,14 6,12 0,0 0),(4 3,9 3,10 7,5 8,4 3)) | LINESTRING(0 0,2 9,9 11,14 6,12 0,0 0)
POLYGON((18 1,18 10,29 10,31 4,25 0,18 1),(21 3,25 2,28 5,25 8,21 7,21 3)) | LINESTRING(18 1,18 10,29 10,31 4,25 0,18 1)
Figure
Geometry figure for visual-st-exteriorring-02

Extract exterior rings from a table of Polygons.

Code
SELECT gid, ST_ExteriorRing(geom) AS ering
FROM sometable;

For a table of MultiPolygons, dump the component Polygons and collect their exterior rings into a MultiLineString.

Code
SELECT gid, ST_Collect(ST_ExteriorRing(geom)) AS erings
FROM (
  SELECT gid, (ST_Dump(geom)).geom AS geom
  FROM sometable
) AS foo
GROUP BY gid;

This example returns the 3D exterior ring of a Polygon.

Code
SELECT ST_ExteriorRing(
    'POLYGON Z ((0 0 5,4 0 5,4 3 5,0 3 5,0 0 5))'
    );
Вивід растрових зображень
LINESTRING(0 0 5,4 0 5,4 3 5,0 3 5,0 0 5)
Figure
Geometry figure for visual-st-exteriorring-03

Назва

ST_GeometryN — Повернути елемент колекції геометрії.

Короткий огляд

geometry ST_GeometryN(geometry geomA, integer n);

Опис

Returns the 1-based Nth element of a GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE, or MULTIPOLYGON. For a unitary geometry, including a TIN or PolyhedralSurface, an index of 1 returns the input geometry and any other index returns NULL. Use ST_PatchN and ST_NumPatches to access and count the faces of a TIN or PolyhedralSurface.

[Примітка]

Індекс базується на 1, як і в специфікаціях OGC, починаючи з версії 0.8.0. У попередніх версіях це реалізовано на основі 0.

[Примітка]

Щоб витягти всі елементи геометрії, ST_Dumpє більш ефективним і працює для атомних геометрій.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Змінено: 2.0.0 Попередні версії повертали NULL для геометрій в однині. Це було змінено, щоб повертати геометрію для випадку ST_GeometryN(..,1).

Changed: 3.6.0 TIN and PolyhedralSurface are treated as unitary geometries and are not decomposed into patches; use ST_PatchN to access faces.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 9.1.5

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Стандартні приклади

Extracting a subset of points from a 3D multipoint.

Code
SELECT n, ST_GeometryN(geom, n) As geomewkt
FROM (
VALUES
    (1, 'MULTIPOINT((1 2 7), (3 4 7), (5 6 7), (8 9 10))'::geometry ),
    (2, 'MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))'::geometry )
    ) As foo(id, geom)
    CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom)
ORDER BY id, n;
Вивід растрових зображень
 n |               geomewkt
---+-----------------------------------------
 1 | POINT(1 2 7)
 2 | POINT(3 4 7)
 3 | POINT(5 6 7)
 4 | POINT(8 9 10)
 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)
 2 | LINESTRING(10 11,12 11)
Figure
Geometry figure for visual-st-geometryn-01

Extracting all geometries (useful when you want to assign an id).

Code
SELECT gid, n, ST_GeometryN(geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

Багатогранні поверхні, TIN і приклади трикутників

A PolyhedralSurface or TIN is treated as a single geometry, not as a collection of faces. ST_GeometryN does not decompose the surface into patches, so an index greater than 1 returns NULL. Use ST_PatchN and ST_NumPatches to access individual faces.

This example requests the third element of a PolyhedralSurface.

Code
SELECT ST_GeometryN(p_geom, 3) As geom_ewkt
  FROM (SELECT 'POLYHEDRALSURFACE(
((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)'::geometry  AS p_geom )  AS a;
Вивід растрових зображень
NULL
Figure
Geometry figure for visual-st-geometryn-02

This example requests the second element of a TIN.

Code
SELECT ST_GeometryN(geom, 2) as wkt
  FROM
    (SELECT
       'TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )),((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )'::geometry  AS geom
    ) AS g;
Вивід растрових зображень
NULL
Figure
Geometry figure for visual-st-geometryn-03

Назва

ST_GeometryType — Повертає тип SQL-MM геометрії у вигляді тексту.

Короткий огляд

text ST_GeometryType(geometry g1);

Опис

Повертає тип геометрії у вигляді рядка. Наприклад: 'ST_LineString', 'ST_Polygon','ST_MultiPolygon' тощо. Ця функція відрізняється від GeometryType(geometry) тим, що повертає строку і ST на початку, а також тим, що не вказує, чи виміряно геометрію.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.4

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_GeometryType('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'::geometry);
Вивід растрових зображень
ST_LineString
Code
SELECT ST_GeometryType('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )'::geometry);
Вивід растрових зображень
ST_PolyhedralSurface
Code
SELECT ST_GeometryType(geom) AS result
FROM
  (SELECT
     'TIN (((
              0 0 0,
              0 0 1,
              0 1 0,
              0 0 0
          )),((
              0 0 0,
              0 1 0,
              1 1 0,
              0 0 0
          ))
          )'::geometry AS geom
  ) AS g;
Вивід растрових зображень
ST_Tin

Див. також

GeometryType


Назва

ST_HasArc — Тестує, чи містить геометрія кругову дугу

Короткий огляд

boolean ST_HasArc(geometry geomA);

Опис

Повертає true, якщо геометрія або колекція геометрій містить циклічну строку

Доступність: 1.2.3?

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_HasArc(ST_Collect('LINESTRING(1 2,3 4,5 6)', 'CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)'));
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-hasarc-01

Див. також

ST_CurveToLine, ST_LineToCurve


Назва

ST_InteriorRingN — Повертає N-те внутрішнє кільце (отвір) полігону.

Короткий огляд

geometry ST_InteriorRingN(geometry a_polygon, integer n);

Опис

Повертає N-те внутрішнє кільце (отвір) геометрії POLYGON як LINESTRING. Індекс починається з 1. Повертає NULL, якщо геометрія не є полігоном або індекс виходить за межі діапазону.

[Примітка]

Ця функція не підтримує MULTIPOLYGON. Для MULTIPOLYGON використовуйте разом з ST_GeometryNабо ST_Dump

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 8.2.6, 8.3.5

This function supports 3d and will not drop the z-index.

Приклади

Code
WITH data AS (
  SELECT ST_BuildArea(ST_Collect(
    ST_Buffer(ST_Point(1, 2), 20, 3),
    ST_Buffer(ST_Point(1, 2), 10, 3)
  )) AS geom
)
SELECT geom AS input_polygon,
       ST_InteriorRingN(geom, 1) AS ring
FROM data;
Вивід растрових зображень
POLYGON((21 2,18.320508075688775 -7.999999999999998,11.000000000000002 -15.320508075688771,1 -18,-8.999999999999996 -15.320508075688775,-16.32050807568877 -8.000000000000007,-19 2,-16.320508075688778 11.999999999999995,-9.000000000000009 19.320508075688767,1 22,10.999999999999986 19.32050807568878,18.320508075688767 12.000000000000009,21 2),(11 2,9.660254037844384 7.000000000000004,5.999999999999993 10.66025403784439,1 12,-4.000000000000004 10.660254037844384,-7.660254037844389 6.999999999999997,-9 2,-7.660254037844386 -3.000000000000004,-3.999999999999998 -6.660254037844387,1 -8,6.000000000000001 -6.660254037844386,9.660254037844387 -2.999999999999999,11 2)) | LINESTRING(11 2,9.660254037844384 7.000000000000004,5.999999999999993 10.66025403784439,1 12,-4.000000000000004 10.660254037844384,-7.660254037844389 6.999999999999997,-9 2,-7.660254037844386 -3.000000000000004,-3.999999999999998 -6.660254037844387,1 -8,6.000000000000001 -6.660254037844386,9.660254037844387 -2.999999999999999,11 2)
Figure
Geometry figure for visual-st-interiorringn-01

Назва

ST_NumCurves — Повернути кількість кривих компонентів у CompoundCurve.

Короткий огляд

integer ST_NumCurves(geometry a_compoundcurve);

Опис

Повертає кількість компонентних кривих у CompoundCurve, нуль для порожнього CompoundCurve або NULL для вхідних даних, що не є CompoundCurve.

This method implements the SQL/MM specification. SQL-MM 3: 8.2.6, 8.3.5

This function supports 3d and will not drop the z-index.

Приклади

This CompoundCurve contains three component curves.

Code
SELECT ST_NumCurves('COMPOUNDCURVE(
    (2 2,2.5 2.5),
    CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5),
    (3.5 3.5,2.5 4.5,3 5,2 2)
  )');
Вивід растрових зображень
3
Figure
Geometry figure for visual-st-numcurves-01

An empty CompoundCurve has no component curves.

Code
SELECT ST_NumCurves('COMPOUNDCURVE EMPTY');
Вивід растрових зображень
0

Назва

ST_CurveN — Повертає геометрію N-го компонента кривої CompoundCurve.

Короткий огляд

geometry ST_CurveN(geometry a_compoundcurve, integer index);

Опис

Повертає геометрію N-го компонента кривої CompoundCurve. Індекс починається з 1. Повертає NULL, якщо геометрія не є CompoundCurve або індекс знаходиться поза діапазоном.

This method implements the SQL/MM specification. SQL-MM 3: 8.2.6, 8.3.5

This function supports 3d and will not drop the z-index.

Приклади

This example extracts the second component curve, a CircularString, from a CompoundCurve.

Code
SELECT ST_CurveN(
  'COMPOUNDCURVE(
    (0 0,2 0),
    CIRCULARSTRING(2 0,3 1,4 0),
    (4 0,6 1)
  )',
  2) AS curve;
Вивід растрових зображень
CIRCULARSTRING(2 0,3 1,4 0)
Figure
Geometry figure for visual-st-curven-01

Назва

ST_IsClosed — Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).

Короткий огляд

boolean ST_IsClosed(geometry g);

Опис

Повертає TRUE, якщо початкова та кінцева точки LINESTRING збігаються. Для поліедральних поверхонь повідомляє, чи поверхня є плоскою (відкритою) чи об'ємною (закритою).

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 7.1.5, 9.3.3

[Примітка]

SQL-MM визначає результат ST_IsClosed(NULL) як 0, тоді як PostGIS повертає NULL.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

This function supports Polyhedral surfaces.

Приклади LineString і Point

Code
SELECT ST_IsClosed('LINESTRING(0 0,1 1)'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-isclosed-01
Code
SELECT ST_IsClosed('LINESTRING(0 0,0 1,1 1,0 0)'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-isclosed-02
Code
SELECT ST_IsClosed('MULTILINESTRING((0 0,0 1,1 1,0 0),(0 0,1 1))'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-isclosed-03
Code
SELECT ST_IsClosed('POINT(0 0)'::geometry);
Вивід растрових зображень
t
Code
SELECT ST_IsClosed('MULTIPOINT((0 0),(1 1))'::geometry);
Вивід растрових зображень
t

Приклади багатогранних поверхонь

This example uses a cube.

Code
SELECT ST_IsClosed('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )');
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-isclosed-06

This example uses the same cube with one side missing.

Code
SELECT ST_IsClosed('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
       ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
       ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
       ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)) )');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-isclosed-07

Див. також

ST_IsRing


Назва

ST_IsCollection — Перевіряє, чи є геометрія типом колекції геометрії.

Короткий огляд

boolean ST_IsCollection(geometry g);

Опис

Повертає TRUE, якщо тип геометрії аргументу є типом колекції геометрії. Типи колекцій є такими:

  • GEOMETRYCOLLECTION

  • MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE}

  • COMPOUNDCURVE

[Примітка]

Ця функція аналізує тип геометрії. Це означає, що вона поверне TRUE для колекцій, які порожні або містять один елемент.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_IsCollection('LINESTRING(0 0,1 1)'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-iscollection-01
Code
SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);
Вивід растрових зображень
t
Code
SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);
Вивід растрових зображень
t
Code
SELECT ST_IsCollection('MULTIPOINT((0 0),(42 42))'::geometry);
Вивід растрових зображень
t
Code
SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);
Вивід растрових зображень
t

Див. також

ST_NumGeometries


Назва

ST_IsEmpty — Перевіряє, чи геометрія порожня.

Короткий огляд

boolean ST_IsEmpty(geometry geomA);

Опис

Повертає true, якщо ця геометрія є порожньою. Якщо true, то ця геометрія представляє порожню колекцію геометрії, полігон, точку тощо.

[Примітка]

SQL-MM визначає результат ST_IsEmpty(NULL) як 0, тоді як PostGIS повертає NULL.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3: 5.1.7

This method supports Circular Strings and Curves.

Змінено: 2.0.0 У попередніх версіях PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') було дозволено. Тепер це є незаконним у PostGIS 2.0.0 для кращої відповідності стандартам SQL/MM

Приклади

Code
SELECT ST_IsEmpty('GEOMETRYCOLLECTION EMPTY'::geometry);
Вивід растрових зображень
t
Code
SELECT ST_IsEmpty('POLYGON EMPTY'::geometry);
Вивід растрових зображень
t
Code
SELECT ST_IsEmpty('POLYGON((1 2,3 4,5 6,1 2))'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-isempty-03
Code
SELECT ST_IsEmpty('POLYGON((1 2,3 4,5 6,1 2))'::geometry) = false;
Вивід растрових зображень
t
(1 row)
Figure
Geometry figure for visual-st-isempty-04
Code
SELECT ST_IsEmpty('CIRCULARSTRING EMPTY'::geometry);
Вивід растрових зображень
t

Назва

ST_IsPolygonCCW — Перевіряє, чи мають полігони зовнішні кільця, орієнтовані проти годинникової стрілки, і внутрішні кільця, орієнтовані за годинниковою стрілкою.

Короткий огляд

boolean ST_IsPolygonCCW(geometry geom);

Опис

Повертає true, якщо всі полігональні компоненти вхідної геометрії використовують орієнтацію проти годинникової стрілки для зовнішнього кільця і за годинниковою стрілкою для всіх внутрішніх кілець.

Повертає true, якщо геометрія не має полігональних компонентів.

[Примітка]

Закриті лінії не вважаються полігональними компонентами, тому ви все одно отримаєте правильний результат, передавши одну закриту лінію незалежно від її орієнтації.

[Примітка]

Якщо полігональна геометрія не використовує зворотну орієнтацію для внутрішніх кілець (тобто, якщо одне або більше внутрішніх кілець орієнтовані в тому ж напрямку, що і зовнішнє кільце), то обидва ST_IsPolygonCW і ST_IsPolygonCCW повернуть false.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Назва

ST_IsPolygonCW — Перевіряє, чи полігони мають зовнішні кільця, орієнтовані за годинниковою стрілкою, а внутрішні кільця — проти годинникової стрілки.

Короткий огляд

boolean ST_IsPolygonCW(geometry geom);

Опис

Повертає true, якщо всі полігональні компоненти вхідної геометрії використовують орієнтацію за годинниковою стрілкою для зовнішнього кільця і проти годинникової стрілки для всіх внутрішніх кілець.

Повертає true, якщо геометрія не має полігональних компонентів.

[Примітка]

Закриті лінії не вважаються полігональними компонентами, тому ви все одно отримаєте правильний результат, передавши одну закриту лінію незалежно від її орієнтації.

[Примітка]

Якщо полігональна геометрія не використовує зворотну орієнтацію для внутрішніх кілець (тобто, якщо одне або більше внутрішніх кілець орієнтовані в тому ж напрямку, що і зовнішнє кільце), то обидва ST_IsPolygonCW і ST_IsPolygonCCW повернуть false.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Назва

ST_IsRing — Перевіряє, чи лінія LineString є замкнутою та простою.

Короткий огляд

boolean ST_IsRing(geometry g);

Опис

Returns TRUE if this LINESTRING is both ST_IsClosed (ST_StartPoint(g) ~= ST_EndPoint(g)) and ST_IsSimple (does not self intersect).

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3: 7.1.6

[Примітка]

SQL-MM визначає результат ST_IsRing(NULL) як 0, тоді як PostGIS повертає NULL.

Приклади

Code
SELECT ST_IsRing(geom), ST_IsClosed(geom), ST_IsSimple(geom)
FROM (SELECT 'LINESTRING(0 0,0 1,1 1,1 0,0 0)'::geometry AS geom) AS foo;
Вивід растрових зображень
st_isring | st_isclosed | st_issimple
-----------+-------------+-------------
 t         | t           | t
(1 row)
Figure
Geometry figure for visual-st-isring-01
Code
SELECT ST_IsRing(geom), ST_IsClosed(geom), ST_IsSimple(geom)
FROM (SELECT 'LINESTRING(0 0,0 1,1 0,1 1,0 0)'::geometry AS geom) AS foo;
Вивід растрових зображень
st_isring | st_isclosed | st_issimple
-----------+-------------+-------------
 f         | t           | f
(1 row)
Figure
Geometry figure for visual-st-isring-02

Назва

ST_IsSimple — Перевіряє, чи геометрія не має точок самоперетину або самодотику.

Короткий огляд

boolean ST_IsSimple(geometry geomA);

Опис

Повертає значення true, якщо ця геометрія не має аномальних геометричних точок, таких як самоперетин або самодотичність. Для отримання додаткової інформації про визначення простоти та валідності геометрії OGC див. "Забезпечення відповідності геометрій стандарту OpenGIS"

[Примітка]

SQL-MM визначає результат ST_IsSimple(NULL) як 0, тоді як PostGIS повертає NULL.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3: 5.1.8

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_IsSimple('POLYGON((1 2,3 4,5 6,1 2))');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-issimple-01
Code
SELECT ST_IsSimple('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-issimple-02

Див. також

ST_IsValid


Назва

ST_M — Повертає координату M точки.

Короткий огляд

float ST_M(geometry a_point);

Опис

Повертає координату M точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Примітка]

Це (поки що) не є частиною специфікації OGC, але наведено тут для повноти переліку функцій вилучення координат точок.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_M('POINT(1 2 3 4)');
Вивід растрових зображень
4

Див. також

ST_GeomFromEWKT, ST_X, ST_Y, ST_Z


Назва

ST_MemSize — Повертає обсяг пам'яті, який займає геометрія.

Короткий огляд

integer ST_MemSize(geometry geomA);

Опис

Повертає обсяг пам'яті (у байтах), який займає геометрія.

Це доповнює вбудовані в PostgreSQL функції об'єктів бази даних pg_column_size, pg_size_pretty, pg_relation_size, pg_total_relation_size.

[Примітка]

pg_relation_size, що повертає розмір таблиці в байтах, може повернути розмір, менший за ST_MemSize. Це відбувається тому, що pg_relation_size не додає розмір тостованих таблиць, а великі геометрії зберігаються в таблицях TOAST.

pg_total_relation_size - включає таблицю, тостовані таблиці та індекси.

pg_column_size повертає, скільки місця займає геометрія в стовпці з урахуванням стиснення, тому може бути менше, ніж ST_MemSize.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Змінено: 2.2.0 назва змінено на ST_MemSize відповідно до правил іменування.

Приклади

Compare the memory used by all geometries in a Massachusetts town dataset with the subset for Boston.

Code
SELECT pg_size_pretty(sum(ST_MemSize(geom))) AS totgeomsum,
       pg_size_pretty(sum(CASE WHEN town = 'BOSTON' THEN ST_MemSize(geom) ELSE 0 END)) AS bossum,
       cast(
           sum(CASE WHEN town = 'BOSTON' THEN ST_MemSize(geom) ELSE 0 END) * 100.0
           / sum(ST_MemSize(geom)) AS numeric(10, 2)
       ) AS perbos
FROM towns;
Вивід растрових зображень
totgeomsum | bossum | perbos
------------+--------+--------
 1522 kB    | 30 kB  |   1.99
(1 row)

Return the memory size of a CircularString in bytes.

Code
SELECT ST_MemSize('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'::geometry);
Вивід растрових зображень
st_memsize
------------
         80
(1 row)

Calculate the percentage of a table's total size used by geometry data.

Code
SELECT pg_total_relation_size('public.neighborhoods') AS fulltable_size,
       sum(ST_MemSize(geom)) AS geomsize,
       sum(ST_MemSize(geom)) * 100.0
           / pg_total_relation_size('public.neighborhoods') AS pergeom
FROM neighborhoods;
Вивід растрових зображень
fulltable_size | geomsize |         pergeom
----------------+----------+--------------------------
         262144 |    96238 | 36.71188354492187500000
(1 row)

Назва

ST_NDims — Повертає розмір координат геометрії.

Короткий огляд

integer ST_NDims(geometry g1);

Опис

Повертає розмірність координат геометрії. PostGIS підтримує 2 - (x,y) , 3 - (x,y,z) або 2D з мірою - x,y,m, і 4 - 3D з мірою простору x,y,z,m

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_NDims('POINT(1 1)') As d2point,
ST_NDims('POINT(1 1 2)') As d3point,
ST_NDims('POINTM(1 1 0.5)') As d2pointm;
Вивід растрових зображень
d2point | d3point | d2pointm
---------+---------+----------
       2 |       3 |        3

Назва

ST_NPoints — Повертає кількість точок (вершин) у геометрії.

Короткий огляд

integer ST_NPoints(geometry g1);

Опис

Повертає кількість точок у геометрії. Працює для всіх геометрій.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Count the points in a 2D LineString.

Code
SELECT ST_NPoints('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)');
Вивід растрових зображень
st_npoints
------------
          4
(1 row)

Count the points in a 3D LineString.

Code
SELECT ST_NPoints('LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)');
Вивід растрових зображень
st_npoints
------------
          4
(1 row)

Див. також

ST_NumPoints


Назва

ST_NRings — Повертає кількість кілець у полігональній геометрії.

Короткий огляд

integer ST_NRings(geometry geomA);

Опис

Якщо геометрія є полігоном або мультиполігоном, повертає кількість кілець. На відміну від NumInteriorRings, враховує також зовнішні кільця.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_NRings(geom) As Nrings, ST_NumInteriorRings(geom) As ninterrings
FROM (SELECT 'POLYGON((1 2,3 4,5 6,1 2))'::geometry As geom) As foo;
Вивід растрових зображень
nrings | ninterrings
--------+-------------
      1 |           0
(1 row)
Figure
Geometry figure for visual-st-nrings-01

Див. також

ST_NumInteriorRings


Назва

ST_NumGeometries — Повертає кількість елементів у колекції геометрії.

Короткий огляд

integer ST_NumGeometries(geometry geom);

Опис

Повертає кількість елементів у колекції геометрій (GEOMETRYCOLLECTION або MULTI*). Для не порожніх атомарних геометрій повертає 1. Для порожніх геометрій повертає 0.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Змінено: 2.0.0 У попередніх версіях це повертало NULL, якщо геометрія не була типом колекції/MULTI. 2.0.0+ тепер повертає 1 для одиночних геометрій, наприклад POLYGON, LINESTRING, POINT.

Changed: 3.6.0 TIN and PolyhedralSurface are treated as unitary geometries and return 1; use ST_NumPatches to count faces.

This method implements the SQL/MM specification. SQL-MM 3: 9.1.4

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example returns 1; prior versions would have returned NULL.

Code
SELECT ST_NumGeometries('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)');
Вивід растрових зображень
st_numgeometries
------------------
                1
(1 row)

A MultiPoint counts as one geometry within a GeometryCollection.

Code
SELECT ST_NumGeometries('GEOMETRYCOLLECTION(MULTIPOINT((-2 3),(-2 2)),
LINESTRING(5 5,10 10),
POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))');
Вивід растрових зображень
st_numgeometries
------------------
                3
(1 row)

Див. також

ST_GeometryN, ST_Multi


Назва

ST_NumInteriorRings — Повертає кількість внутрішніх кілець (отворів) полігону.

Короткий огляд

integer ST_NumInteriorRings(geometry a_polygon);

Опис

Повертає кількість внутрішніх кілець геометрії полігону. Повертає NULL, якщо геометрія не є полігоном.

This method implements the SQL/MM specification. SQL-MM 3: 8.2.5

Змінено: 2.0.0 - у попередніх версіях дозволялося передавати MULTIPOLYGON, повертаючи кількість внутрішніх кілець першого POLYGON.

Приклади

Count the interior rings of a Polygon.

Code
SELECT gid, field1, field2, ST_NumInteriorRings(geom) AS numholes
FROM sometable;

For a MultiPolygon, dump its component Polygons and sum their interior ring counts.

Code
SELECT gid, field1, field2, SUM(ST_NumInteriorRings(geom)) AS numholes
FROM (
    SELECT gid, field1, field2, (ST_Dump(geom)).geom AS geom
    FROM sometable
) AS foo
GROUP BY gid, field1, field2;
            

Назва

ST_NumInteriorRing — Returns the number of interior rings (holes) of a Polygon. Alias for ST_NumInteriorRings.

Короткий огляд

integer ST_NumInteriorRing(geometry a_polygon);

Опис

This function is an alias for ST_NumInteriorRings.

Доступність: 1.2.2


Назва

ST_NumPatches — Returns the number of faces in a PolyhedralSurface or TIN.

Короткий огляд

integer ST_NumPatches(geometry g1);

Опис

Returns the number of faces in a PolyhedralSurface or TIN. Returns NULL for other geometries. Unlike ST_NumGeometries, this function counts individual faces.

Доступність: 2.0.0

This function supports 3d and will not drop the z-index.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM ISO/IEC 13249-3: 8.5

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_NumPatches('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )');
Вивід растрових зображень
st_numpatches
---------------
             6
(1 row)

Назва

ST_NumPoints — Повертає кількість точок у LineString або CircularString.

Короткий огляд

integer ST_NumPoints(geometry g1);

Опис

Повертає кількість точок у значенні ST_LineString або ST_CircularString. До версії 1.4 працює тільки з лініями, як зазначено в специфікації. Починаючи з версії 1.4, це псевдонім для ST_NPoints, який повертає кількість вершин не тільки для лінійних рядків. Розгляньте можливість використання ST_NPoints, який є багатоцільовим і працює з багатьма типами геометрії.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 7.2.4

Приклади

Code
SELECT ST_NumPoints('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)');
Вивід растрових зображень
st_numpoints
--------------
            4
(1 row)

Див. також

ST_NPoints


Назва

ST_PatchN — Returns the Nth face of a PolyhedralSurface or TIN.

Короткий огляд

geometry ST_PatchN(geometry geomA, integer n);

Опис

Returns the 1-based Nth face of a PolyhedralSurface or TIN. Returns NULL for other geometries or an out-of-range index. Use this function to access faces, because ST_GeometryN treats PolyhedralSurface and TIN as unitary geometries.

[Примітка]

Індекс починається з 1.

[Примітка]

Якщо ви хочете витягти всі елементи геометрії, ST_Dumpє більш ефективним.

Доступність: 2.0.0

This method implements the SQL/MM specification. SQL-MM ISO/IEC 13249-3: 8.5

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Extract the 2nd face of the polyhedral surface.

Code
SELECT ST_PatchN(geom, 2) As geomewkt
FROM (
VALUES ('POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
    ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
    ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
    ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )'::geometry) ) As foo(geom);
Вивід растрових зображень
POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
Figure
Geometry figure for visual-st-patchn-01

Назва

ST_PointN — Повертає N-ту точку в першому LineString або круговому LineString в геометрії.

Короткий огляд

geometry ST_PointN(geometry a_linestring, integer n);

Опис

Повертає N-ту точку в одній лінійній або круговій лінійній геометрії. Негативні значення відраховуються назад від кінця LineString, так що -1 є останньою точкою. Повертає NULL, якщо в геометрії немає лінійної геометрії.

[Примітка]

Index is 1-based as for OGC specs since version 0.8.0. Backward indexing (negative index) is not in OGC. Previous versions implemented this as 0-based instead.

[Примітка]

Якщо ви хочете отримати N-ту точку кожного LineString у MultiLineString, використовуйте разом із ST_Dump

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 7.2.5, 7.3.5

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Змінено: 2.0.0 більше не працює з одногеометричними мультилініями. У старіших версіях PostGIS — одинарну мультилінію працював би з цією функцією без проблем і повертав би початкову точку. У 2.0.0 він просто повертає NULL, як і будь-який інший мультилінії.

Змінено: 2.3.0: доступне негативне індексування (-1 — останній пункт)

Приклади

This example extracts all POINT geometries from a LineString.

Code
SELECT ST_PointN(
      column1,
      generate_series(1, ST_NPoints(column1))
   )
FROM ( VALUES ('LINESTRING(0 0,1 1,2 2)'::geometry) ) AS foo;
Вивід растрових зображень
POINT(0 0)
 POINT(1 1)
 POINT(2 2)
(3 rows)
Figure
Geometry figure for visual-st-pointn-01

This example uses a CircularString.

Code
SELECT ST_PointN('CIRCULARSTRING(1 2,3 2,1 2)', 2);
Вивід растрових зображень
POINT(3 2)
Figure
Geometry figure for visual-st-pointn-02

The index is 1-based. A negative index counts backward from the end of the LineString.

Code
SELECT f
FROM ST_GeomFromText('LINESTRING(0 0 0,1 1 1,2 2 2)') AS g
  CROSS JOIN ST_PointN(g, -2) AS f;
Вивід растрових зображень
POINT Z (1 1 1)
Figure
Geometry figure for visual-st-pointn-03

Див. також

ST_NPoints


Назва

ST_Points — Повертає об'єкт MultiPoint, що містить координати геометрії.

Короткий огляд

geometry ST_Points( geometry geom );

Опис

Повертає MultiPoint, що містить усі координати геометрії. Дублікати точок зберігаються, включаючи початкову та кінцеву точки кільцевих геометрій. (За бажанням дублікати точок можна видалити, викликавши ST_RemoveRepeatedPoints на результаті).

Щоб отримати інформацію про положення кожної координати в батьківській геометрії, використовуйте ST_DumpPoints.

Координати M і Z зберігаються, якщо вони є.

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

Доступність: 2.3.0

Приклади

Code
SELECT ST_Points('POLYGON Z ((30 10 4,10 30 5,40 40 6,30 10 4))');
Вивід растрових зображень
MULTIPOINT Z ((30 10 4),(10 30 5),(40 40 6),(30 10 4))
Figure
Geometry figure for visual-st-points-01

Назва

ST_StartPoint — Returns the first point of a LineString, CircularLineString, or NURBSCurve.

Короткий огляд

geometry ST_StartPoint(geometry geomA);

Опис

Returns the first point of a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE geometry as a POINT. For other geometries, returns the first point in coordinate order.

This method implements the SQL/MM specification. SQL-MM 3: 7.1.3

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Покращено: 3.2.0 повертає точку для всіх геометрій. Попередня поведінка повертала NULL, якщо вхідні дані не були LineString.

Змінено: 2.0.0 більше не працює з одномірними геометричними об'єктами MultiLineStrings. У старих версіях PostGIS одномірний MultiLineString працював з цією функцією без проблем і повертав початкову точку. У 2.0.0 він просто повертає NULL, як і будь-який інший MultiLineString. Стара поведінка була недокументованою функцією, але користувачі, які вважали, що їхні дані зберігаються як LINESTRING, можуть зіткнутися з поверненням NULL у 2.0.0.

Приклади

Початкова точка лінії

Code
SELECT ST_StartPoint('LINESTRING(0 1,0 2)'::geometry);
Вивід растрових зображень
POINT(0 1)
Figure
Geometry figure for visual-st-startpoint-01

Start point of a Point is the Point itself

Code
SELECT ST_StartPoint('POINT(0 1)'::geometry);
Вивід растрових зображень
POINT(0 1)
Figure
Geometry figure for visual-st-startpoint-02

Початкова точка 3D-лінії

Code
SELECT ST_StartPoint('LINESTRING(0 1 1,0 2 2)'::geometry);
Вивід растрових зображень
POINT(0 1 1)
Figure
Geometry figure for visual-st-startpoint-03

Початкова точка CircularString

Code
SELECT ST_StartPoint('CIRCULARSTRING(5 2,-3 2,-2 1,-4 2,6 3)'::geometry);
Вивід растрових зображень
POINT(5 2)
Figure
Geometry figure for visual-st-startpoint-04

Start point of a NURBSCurve

Code
SELECT ST_StartPoint('NURBSCURVE(2, (0 0, 1 1, 2 0))'::geometry);
Вивід растрових зображень
POINT(0 0)
Figure
Geometry figure for visual-st-startpoint-05

Build edge node references from the start and end points of a LineString table. The example uses exact endpoint equality, so linework with nearly coincident endpoints should be snapped or otherwise cleaned first.

Code
WITH roads(road_id, geom) AS (
  VALUES
    (1, 'LINESTRING(0 0, 1 0)'::geometry),
    (2, 'LINESTRING(1 0, 1 1)'::geometry),
    (3, 'LINESTRING(1 0, 2 0)'::geometry)
),
endpoints AS (
  SELECT road_id, 'from' AS end_name, ST_StartPoint(geom) AS geom,
         ST_AsEWKB(ST_StartPoint(geom)) AS endpoint_key
  FROM roads
  UNION ALL
  SELECT road_id, 'to' AS end_name, ST_EndPoint(geom) AS geom,
         ST_AsEWKB(ST_EndPoint(geom)) AS endpoint_key
  FROM roads
),
nodes AS (
  SELECT dense_rank() OVER (ORDER BY ST_X(geom), ST_Y(geom), endpoint_key) AS node_id,
         endpoint_key
  FROM (
    SELECT DISTINCT ON (endpoint_key) endpoint_key, geom
    FROM endpoints
    ORDER BY endpoint_key
  ) AS distinct_endpoints
)
SELECT e.road_id,
       max(n.node_id) FILTER (WHERE e.end_name = 'from') AS from_node,
       max(n.node_id) FILTER (WHERE e.end_name = 'to') AS to_node
FROM endpoints AS e
JOIN nodes AS n USING (endpoint_key)
GROUP BY e.road_id
ORDER BY e.road_id;
Вивід растрових зображень
road_id | from_node | to_node
---------+-----------+---------
     1 |         1 |       2
     2 |         2 |       3
     3 |         2 |       4
Figure
Geometry figure for visual-st-startpoint-06

Див. також

ST_EndPoint, ST_PointN


Назва

ST_StartM — Returns the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.

Короткий огляд

float8 ST_StartM(geometry geom);

Опис

Returns the M coordinate of the first point of a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE geometry. Returns NULL if the input geometry does not have an M dimension or is not a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE.

This method supports Circular Strings and Curves.

Приклади

Start M value of a LineString

Code
SELECT ST_StartM('LINESTRING M(0 0 10,1 1 20,2 0 30)'::geometry);
Вивід растрових зображень
10
Figure
Geometry figure for visual-st-startm-01

Start M value of a CircularString

Code
SELECT ST_StartM('CIRCULARSTRING M(0 0 5,1 1 10,2 0 15)'::geometry);
Вивід растрових зображень
5
Figure
Geometry figure for visual-st-startm-02

Start M value of a NURBSCurve

Code
SELECT ST_StartM('NURBSCURVE M(2, (0 0 100, 1 1 200, 2 0 300))'::geometry);
Вивід растрових зображень
100
Figure
Geometry figure for visual-st-startm-03

Geometry without M dimension returns NULL

Code
SELECT ST_StartM('LINESTRING(0 0,1 1)'::geometry) IS NULL AS is_null;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-startm-04

Див. також

ST_EndM, ST_SetStartM, ST_StartPoint


Назва

ST_EndM — Returns the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.

Короткий огляд

float8 ST_EndM(geometry geom);

Опис

Returns the M coordinate of the last point of a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE geometry. Returns NULL if the input geometry does not have an M dimension or is not a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE.

This method supports Circular Strings and Curves.

Приклади

End M value of a LineString

Code
SELECT ST_EndM('LINESTRING M(0 0 10,1 1 20,2 0 30)'::geometry);
Вивід растрових зображень
30
Figure
Geometry figure for visual-st-endm-01

End M value of a CircularString

Code
SELECT ST_EndM('CIRCULARSTRING M(0 0 5,1 1 10,2 0 15)'::geometry);
Вивід растрових зображень
15
Figure
Geometry figure for visual-st-endm-02

End M value of a NURBSCurve

Code
SELECT ST_EndM('NURBSCURVE M(2, (0 0 100, 1 1 200, 2 0 300))'::geometry);
Вивід растрових зображень
300
Figure
Geometry figure for visual-st-endm-03

Geometry without M dimension returns NULL

Code
SELECT ST_EndM('LINESTRING(0 0,1 1)'::geometry) IS NULL AS is_null;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-endm-04

Див. також

ST_StartM, ST_SetEndM, ST_EndPoint


Назва

ST_SetStartM — Sets the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.

Короткий огляд

geometry ST_SetStartM(geometry geom, float8 m);

Опис

Returns a copy of the input LINESTRING, CIRCULARLINESTRING, or NURBSCURVE geometry with the M coordinate of the first point set to the specified value. If the input geometry does not have an M dimension, it will be added. Returns NULL if the input is not a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE.

This method supports Circular Strings and Curves.

Приклади

Set start M value of a LineString

Code
SELECT ST_SetStartM('LINESTRING M(0 0 10,1 1 20,2 0 30)'::geometry, 100);
Вивід растрових зображень
LINESTRING M (0 0 100,1 1 20,2 0 30)
Figure
Geometry figure for visual-st-setstartm-01

Add M dimension and set start M value

Code
SELECT ST_SetStartM('LINESTRING(0 0,1 1,2 0)'::geometry, 50);
Вивід растрових зображень
LINESTRING M (0 0 50,1 1 0,2 0 0)
Figure
Geometry figure for visual-st-setstartm-02

Set start M value of a CircularString

Code
SELECT ST_SetStartM('CIRCULARSTRING M(0 0 5,1 1 10,2 0 15)'::geometry, 99);
Вивід растрових зображень
CIRCULARSTRING M (0 0 99,1 1 10,2 0 15)
Figure
Geometry figure for visual-st-setstartm-03

Set start M value of a NURBSCurve

Code
SELECT ST_SetStartM('NURBSCURVE M(2, (0 0 100, 1 1 200, 2 0 300))'::geometry, 500);
Вивід растрових зображень
NURBSCURVE M (DEGREE 2,CONTROLPOINTS M (NURBSPOINT(WEIGHTEDPOINT M (0 0 500),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT M (1 1 200),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT M (2 0 300),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3)))
Figure
Geometry figure for visual-st-setstartm-04

Див. також

ST_SetEndM, ST_StartM, ST_StartPoint


Назва

ST_SetEndM — Sets the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.

Короткий огляд

geometry ST_SetEndM(geometry geom, float8 m);

Опис

Returns a copy of the input LINESTRING, CIRCULARLINESTRING, or NURBSCURVE geometry with the M coordinate of the last point set to the specified value. If the input geometry does not have an M dimension, it will be added. Returns NULL if the input is not a LINESTRING, CIRCULARLINESTRING, or NURBSCURVE.

This method supports Circular Strings and Curves.

Приклади

Set end M value of a LineString

Code
SELECT ST_SetEndM('LINESTRING M(0 0 10,1 1 20,2 0 30)'::geometry, 999);
Вивід растрових зображень
LINESTRING M (0 0 10,1 1 20,2 0 999)
Figure
Geometry figure for visual-st-setendm-01

Add M dimension and set end M value

Code
SELECT ST_SetEndM('LINESTRING(0 0,1 1,2 0)'::geometry, 75);
Вивід растрових зображень
LINESTRING M (0 0 0,1 1 0,2 0 75)
Figure
Geometry figure for visual-st-setendm-02

Set end M value of a CircularString

Code
SELECT ST_SetEndM('CIRCULARSTRING M(0 0 5,1 1 10,2 0 15)'::geometry, 88);
Вивід растрових зображень
CIRCULARSTRING M (0 0 5,1 1 10,2 0 88)
Figure
Geometry figure for visual-st-setendm-03

Set end M value of a NURBSCurve

Code
SELECT ST_SetEndM('NURBSCURVE M(2, (0 0 100, 1 1 200, 2 0 300))'::geometry, 999);
Вивід растрових зображень
NURBSCURVE M (DEGREE 2,CONTROLPOINTS M (NURBSPOINT(WEIGHTEDPOINT M (0 0 100),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT M (1 1 200),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT M (2 0 999),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3)))
Figure
Geometry figure for visual-st-setendm-04

Див. також

ST_SetStartM, ST_EndM, ST_EndPoint


Назва

ST_Summary — Повертає текстовий підсумок вмісту геометрії.

Короткий огляд

text ST_Summary(geometry g);

text ST_Summary(geography g);

Опис

Повертає текстовий підсумок вмісту геометрії.

Прапорці, що відображаються в квадратних дужках після типу геометрії, мають таке значення:

  • M: має координату M

  • Z: має координату Z

  • B: має кешовану обмежувальну рамку

  • G: геодезичний (географія)

  • S: має просторову систему координат

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Доступність: 1.2.2

Покращено: у версії 2.0.0 додано підтримку географії

Покращено: 2.1.0 Прапор S для позначення наявності відомої системи просторових координат

Покращено: 2.2.0 Додано підтримку TIN і кривих

Приклади

Code
SELECT ST_Summary('LINESTRING(0 0,1 1)'::geometry) as geom,
ST_Summary('POLYGON((0 0,1 1,1 2,1 1,0 0))'::geography) geog;
Вивід растрових зображень
geom             |          geog
-----------------------------+--------------------------
 LineString[B] with 2 points | Polygon[BGS] with 1 rings
                             | ring 0 has 5 points
                             :
(1 row)
Code
SELECT ST_Summary('LINESTRING(0 0 1,1 1 1)'::geography) As geog_line,
ST_Summary('SRID=4326;POLYGON((0 0 1,1 1 2,1 2 3,1 1 1,0 0 1))'::geometry) As geom_poly;
Вивід растрових зображень
geog_line             |        geom_poly
-------------------------------- +--------------------------
 LineString[ZBGS] with 2 points | Polygon[ZBS] with 1 rings
                                :    ring 0 has 5 points
                                :
(1 row)

Назва

ST_X — Повертає координату X точки.

Короткий огляд

float ST_X(geometry a_point);

Опис

Повертає координату X точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Примітка]

Щоб отримати мінімальне та максимальне значення X координат геометрії, використовуйте функції ST_XMin та ST_XMax.

This method implements the SQL/MM specification. SQL-MM 3: 6.1.3

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_X('POINT(1 2 3 4)');
Вивід растрових зображень
1
Code
SELECT ST_Y(ST_Centroid('LINESTRING(1 2 3 4,1 1 1 1)'::geometry));
Вивід растрових зображень
1.5

Назва

ST_Y — Повертає координату Y точки.

Короткий огляд

float ST_Y(geometry a_point);

Опис

Повертає координату Y точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Примітка]

Щоб отримати мінімальне та максимальне значення Y координат геометрії, використовуйте функції ST_YMin та ST_YMax.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 6.1.4

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_Y('POINT(1 2 3 4)');
Вивід растрових зображень
2
Code
SELECT ST_Y(ST_Centroid('LINESTRING(1 2 3 4,1 1 1 1)'::geometry));
Вивід растрових зображень
1.5

Назва

ST_Z — Повертає координату Z точки.

Короткий огляд

float ST_Z(geometry a_point);

Опис

Повертає координату Z точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Примітка]

Щоб отримати мінімальне та максимальне значення Z координат геометрії, використовуйте функції ST_ZMin та ST_ZMax.

This method implements the SQL/MM specification.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_Z('POINT(1 2 3 4)');
Вивід растрових зображень
3

Див. також

ST_GeomFromEWKT, ST_M, ST_X, ST_Y, ST_ZMax, ST_ZMin


Назва

ST_ZMFlag — Повертає код, що вказує на розмірність координат ZM геометрії.

Короткий огляд

smallint ST_ZMFlag(geometry geomA);

Опис

Повертає код, що вказує на розмірність координат ZM геометрії.

Значення: 0 = 2D, 1 = 3D-M, 2 = 3D-Z, 3 = 4D.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_ZMFlag('LINESTRING(1 2,3 4)');
Вивід растрових зображень
0
Code
SELECT ST_ZMFlag('LINESTRINGM(1 2 3, 3 4 3)');
Вивід растрових зображень
1
Code
SELECT ST_ZMFlag('CIRCULARSTRING(1 2 3,3 4 3,5 6 3)');
Вивід растрових зображень
2
Code
SELECT ST_ZMFlag('POINT(1 2 3 4)');
Вивід растрових зображень
3

Див. також

ST_CoordDim, ST_NDims, ST_Dimension


Назва

ST_HasZ — Перевіряє, чи має геометрія розмір Z.

Короткий огляд

boolean ST_HasZ(geometry geom);

Опис

Перевіряє, чи має вхідна геометрія розмір Z, і повертає логічне значення. Якщо геометрія має розмір Z, повертає true; інакше повертає false.

Геометричні об'єкти з розміром Z зазвичай представляють тривимірні (3D) геометрії, тоді як об'єкти без цього розміру є двовимірними (2D) геометріями.

Ця функція корисна для визначення, чи має геометрія інформацію про висоту.

Доступність: 3.5.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

Code
SELECT ST_HasZ('POINT(1 2 3)');
Вивід растрових зображень
t
Code
SELECT ST_HasZ('LINESTRING(0 0,1 1)');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-hasz-02

Див. також

ST_ZMFlag

ST_HasM


Назва

ST_HasM — Перевіряє, чи має геометрія розмір M (вимір).

Короткий огляд

boolean ST_HasM(geometry geom);

Опис

Перевіряє, чи має вхідна геометрія розмір M (вимір), і повертає булеве значення. Якщо геометрія має розмір M, повертає true; інакше повертає false.

Геометричні об'єкти з розмірністю M зазвичай представляють вимірювання або додаткові дані, пов'язані з просторовими характеристиками.

Ця функція корисна для визначення, чи містить геометрія інформацію про виміри.

Доступність: 3.5.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

Code
SELECT ST_HasM('POINTM(1 2 3)');
Вивід растрових зображень
t
Code
SELECT ST_HasM('LINESTRING(0 0,1 1)');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-hasm-02

Див. також

ST_ZMFlag

ST_HasZ


Назва

ST_ControlPoints — Returns the control points of a NURBS curve as a MULTIPOINT geometry.

Короткий огляд

geometry ST_ControlPoints(geometry nurbscurve);

Опис

Extracts the control points from a NURBS curve and returns them as a MULTIPOINT geometry. Control points define the control polygon that influences the shape of the NURBS curve.

The function raises an error if the input is not a NURBS curve. Returns NULL if the input is NULL.

Availability: 3.7.0

Приклади

This example extracts control points from a NURBS curve.

Code
SELECT ST_ControlPoints('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
MULTIPOINT((0 0),(5 10),(10 0))
Figure
Geometry figure for visual-st-controlpoints-01

This example counts the control points.

Code
SELECT ST_NPoints(ST_ControlPoints('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry));
Вивід растрових зображень
3

Назва

ST_Degree — Returns the polynomial degree of a NURBS curve.

Короткий огляд

integer ST_Degree(geometry nurbscurve);

Опис

Returns the polynomial degree of a NURBS curve as an integer. The degree determines the curve's smoothness and flexibility. Higher degrees produce smoother curves but require more control points.

The function raises an error if the input is not a NURBS curve. Returns NULL if the input is NULL.

Availability: 3.7.0

Приклади

This example returns the degree of a NURBS curve.

Code
SELECT ST_Degree('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
2
Figure
Geometry figure for visual-st-degree-01

This example checks whether a NURBS curve is cubic.

Code
SELECT ST_Degree('NURBSCURVE(3, (0 0, 2 5, 5 8, 10 0))'::geometry) = 3;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-degree-02

Назва

ST_Weights — Returns the weight array of a rational NURBS curve.

Короткий огляд

float8[] ST_Weights(geometry nurbscurve);

Опис

Returns the weight values of a rational NURBS curve as an array of double precision values. Weights control the influence of each control point on the curve shape. Higher weights pull the curve closer to the corresponding control point.

Returns NULL if the curve has no weights (non-rational B-spline) or if the input is NULL. Raises an error if the input is not a NURBS curve.

Availability: 3.7.0

Приклади

This example returns weights from a rational NURBS curve.

Code
SELECT ST_Weights(ST_MakeNurbsCurve(2, 'LINESTRING(0 0,5 10,10 0)'::geometry, ARRAY[1.0, 2.0, 1.0]));
Вивід растрових зображень
{1,2,1}
Figure
Geometry figure for visual-st-weights-01

This example checks the weights of a non-rational curve.

Code
SELECT ST_Weights('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
null
Figure
Geometry figure for visual-st-weights-02

Назва

ST_Knots — Returns the knot vector of a NURBS curve.

Короткий огляд

float8[] ST_Knots(geometry nurbscurve);

Опис

Returns the knot vector of a NURBS curve as an array of double precision values. The knot vector defines the parameter space and controls where and how the control points affect the curve. It must be a non-decreasing sequence with length equal to (number of control points + degree + 1).

Returns NULL if the curve uses the default uniform clamped knot vector or if the input is NULL. Raises an error if the input is not a NURBS curve.

Availability: 3.7.0

Приклади

This example returns knots from a NURBS curve with a custom knot vector.

Code
SELECT ST_Knots(ST_MakeNurbsCurve(
        2,
        'LINESTRING(0 0,5 10,10 0)'::geometry,
        ARRAY[1.0, 2.0, 1.0],
        ARRAY[0, 0, 0, 1, 1, 1]));
Вивід растрових зображень
{0,0,0,1,1,1}
Figure
Geometry figure for visual-st-knots-01

This example checks the knots of a curve using the default knot vector.

Code
SELECT ST_Knots('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
null
Figure
Geometry figure for visual-st-knots-02

Назва

ST_NumControlPoints — Returns the number of control points in a NURBS curve.

Короткий огляд

integer ST_NumControlPoints(geometry nurbscurve);

Опис

Returns the number of control points in a NURBS curve. The number of control points must be at least (degree + 1) for a valid NURBS curve.

Raises an error if the input is not a NURBS curve. Returns NULL if the input is NULL.

Availability: 3.7.0

Приклади

This example returns the number of control points.

Code
SELECT ST_NumControlPoints('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
3
Figure
Geometry figure for visual-st-numcontrolpoints-01

This example verifies that a curve has enough control points for its degree.

Code
SELECT ST_NumControlPoints(curve) 
>= ST_Degree(curve) + 1 AS valid
FROM (SELECT 'NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry AS curve) AS t;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-numcontrolpoints-02

Назва

ST_NurbsCurveIsRational — Checks if a NURBS curve is rational (has weights).

Короткий огляд

boolean ST_NurbsCurveIsRational(geometry nurbscurve);

Опис

Returns TRUE if the NURBS curve has weights assigned to its control points (rational NURBS), FALSE if it uses uniform weights (non-rational B-spline).

Rational NURBS curves provide more flexibility in curve shape control through variable weights. Non-rational B-splines use uniform weights and are a special case of NURBS curves.

Raises an error if the input is not a NURBS curve. Returns NULL if the input is NULL.

Availability: 3.7.0

Приклади

This example checks whether a curve is rational.

Code
SELECT ST_NurbsCurveIsRational(ST_MakeNurbsCurve(
        2,
        'LINESTRING(0 0,5 10,10 0)'::geometry,
        ARRAY[1.0, 2.0, 1.0]));
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-nurbscurveisrational-01

This example checks a non-rational curve.

Code
SELECT ST_NurbsCurveIsRational('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-nurbscurveisrational-02

Назва

ST_IsNurbsCurve — Checks if a geometry is a NURBS curve.

Короткий огляд

boolean ST_IsNurbsCurve(geometry geom);

Опис

Returns TRUE if the geometry is a NURBS curve, FALSE otherwise. This function can be used to test geometry types before applying NURBS-specific functions.

Returns NULL if the input is NULL.

Availability: 3.7.0

Приклади

This example checks whether a geometry is a NURBS curve.

Code
SELECT ST_IsNurbsCurve('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-isnurbscurve-01

This example tests a regular LineString.

Code
SELECT ST_IsNurbsCurve('LINESTRING(0 0,10 10)'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-isnurbscurve-02

Назва

ST_Evaluate — Evaluates a NURBS curve at a specific parameter value and returns the resulting point.

Короткий огляд

geometry ST_Evaluate(geometry nurbscurve, float8 parameter);

Опис

Evaluates a NURBS curve at the specified parameter value and returns a POINT geometry representing the position on the curve. The parameter typically ranges from 0.0 (start of curve) to 1.0 (end of curve), though the actual range depends on the knot vector.

Raises an error if the input is not a NURBS curve or if evaluation fails. Returns NULL if either input is NULL.

Availability: 3.7.0

Приклади

This example returns the midpoint of a NURBS curve.

Code
SELECT ST_Evaluate('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry, 0.5);

This example samples multiple points along a curve.

Code
SELECT t, ST_Evaluate(curve, t) AS point
FROM (SELECT 'NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry AS curve) AS c,
         generate_series(0, 1, 0.25) AS t;

Назва

ST_NurbsToLineString — Converts a NURBS curve to a LINESTRING by uniform sampling.

Короткий огляд

geometry ST_NurbsToLineString(geometry nurbscurve, integer num_segments=32);

Опис

Converts a NURBS curve to a LINESTRING geometry by creating a piecewise linear approximation. The curve is sampled at uniformly distributed parameter values and the resulting points are connected with straight line segments.

The optional num_segments parameter specifies the number of line segments in the output (default: 32, range: 2-10000). Higher values produce smoother approximations but increase geometry complexity.

Raises an error if the input is not a NURBS curve. Returns NULL if the input is NULL.

Availability: 3.7.0

Приклади

This example converts a NURBS curve to a LineString using the default quality.

Code
SELECT ST_NurbsToLineString('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
Вивід растрових зображень
LINESTRING(0 0,0.3125 0.60546875,0.625 1.171875,0.9375 1.69921875,1.25 2.1875,1.5625 2.63671875,1.875 3.046875,2.1875 3.41796875,2.5 3.75,2.8125 4.04296875,3.125 4.296875,3.4375 4.51171875,3.75 4.6875,4.0625 4.82421875,4.375 4.921875,4.6875 4.98046875,5 5,5.3125 4.98046875,5.625 4.921875,5.9375 4.82421875,6.25 4.6875,6.5625 4.51171875,6.875 4.296875,7.1875 4.04296875,7.5 3.75,7.8125 3.41796875,8.125 3.046875,8.4375 2.63671875,8.75 2.1875,9.0625 1.69921875,9.375 1.171875,9.6875 0.60546875,10 0)
Figure
Geometry figure for visual-st-nurbstolinestring-01

This example creates a high-quality approximation with 64 segments.

Code
SELECT ST_NurbsToLineString('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry, 64);
Вивід растрових зображень
LINESTRING(0 0,0.15625 0.3076171875,0.3125 0.60546875,0.46875 0.8935546875,0.625 1.171875,0.78125 1.4404296875,0.9375 1.69921875,1.09375 1.9482421875,1.25 2.1875,1.40625 2.4169921875,1.5625 2.63671875,1.71875 2.8466796875,1.875 3.046875,2.03125 3.2373046875,2.1875 3.41796875,2.34375 3.5888671875,2.5 3.75,2.65625 3.9013671875,2.8125 4.04296875,2.96875 4.1748046875,3.125 4.296875,3.28125 4.4091796875,3.4375 4.51171875,3.59375 4.6044921875,3.75 4.6875,3.90625 4.7607421875,4.0625 4.82421875,4.21875 4.8779296875,4.375 4.921875,4.53125 4.9560546875,4.6875 4.98046875,4.84375 4.9951171875,5 5,5.15625 4.9951171875,5.3125 4.98046875,5.46875 4.9560546875,5.625 4.921875,5.78125 4.8779296875,5.9375 4.82421875,6.09375 4.7607421875,6.25 4.6875,6.40625 4.6044921875,6.5625 4.51171875,6.71875 4.4091796875,6.875 4.296875,7.03125 4.1748046875,7.1875 4.04296875,7.34375 3.9013671875,7.5 3.75,7.65625 3.5888671875,7.8125 3.41796875,7.96875 3.2373046875,8.125 3.046875,8.28125 2.8466796875,8.4375 2.63671875,8.59375 2.4169921875,8.75 2.1875,8.90625 1.9482421875,9.0625 1.69921875,9.21875 1.4404296875,9.375 1.171875,9.53125 0.8935546875,9.6875 0.60546875,9.84375 0.3076171875,10 0)
Figure
Geometry figure for visual-st-nurbstolinestring-02

This example creates a lower-quality, faster approximation with 16 segments.

Code
SELECT ST_NurbsToLineString('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry, 16);
Вивід растрових зображень
LINESTRING(0 0,0.625 1.171875,1.25 2.1875,1.875 3.046875,2.5 3.75,3.125 4.296875,3.75 4.6875,4.375 4.921875,5 5,5.625 4.921875,6.25 4.6875,6.875 4.296875,7.5 3.75,8.125 3.046875,8.75 2.1875,9.375 1.171875,10 0)
Figure
Geometry figure for visual-st-nurbstolinestring-03

7.5. Редактори геометрії

Анотація

Ці функції створюють модифіковані геометрії шляхом зміни типу, структури або вершин.

  • ST_AddPoint — Додати точку до LineString.
  • ST_CollectionExtract — За заданою колекцією геометрій повертає мультигеометрію, що містить тільки елементи заданого типу.
  • ST_CollectionHomogenize — Повертає найпростіше представлення колекції геометрії.
  • ST_CurveToLine — Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_Scroll — Змінити початкову точку замкнутої лінії LineString.
  • ST_FlipCoordinates — Повертає версію геометрії з перевернутими осями X та Y.
  • ST_Force2D — Примусово переведіть геометрії в "2-вимірний режим".
  • ST_Force3D — Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DZ — Примусово перевести геометрії в режим XYZ.
  • ST_Force3DM — Примусово перевести геометрії в режим XYM.
  • ST_Force4D — Примусово перевести геометрії в режим XYZM.
  • ST_ForceCollection — Перетворити геометрію в GEOMETRYCOLLECTION.
  • ST_ForceCurve — Перетворити геометрію в її вигнутий тип, якщо це можливо.
  • ST_ForcePolygonCCW — Всі зовнішні кільця орієнтуйте проти годинникової стрілки, а всі внутрішні кільця — за годинниковою стрілкою.
  • ST_ForcePolygonCW — Всі зовнішні кільця орієнтуйте за годинниковою стрілкою, а всі внутрішні кільця — проти годинникової стрілки.
  • ST_ForceSFS — Force geometries to use SFS 1.1 or 1.2 geometry types.
  • ST_ForceRHR — Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.
  • ST_LineExtend — Повертає лінію, розширений вперед і назад на вказані відстані.
  • ST_LineToCurve — Перетворює лінійну геометрію на криву геометрію.
  • ST_Multi — Повернути геометрію як геометрію MULTI*.
  • ST_Normalize — Повернути геометрію в канонічній формі.
  • ST_Project — Повертає точку, спроектовану від початкової точки на відстань і азимут.
  • ST_QuantizeCoordinates — Встановлює найменш значущі біти координат у нуль
  • ST_RemovePoint — Видалити точку з лінії.
  • ST_RemoveRepeatedPoints — Повертає версію геометрії з видаленими дублікатами точок.
  • ST_RemoveIrrelevantPointsForView — Видаляє точки, які не мають значення для візуалізації певного прямокутного виду геометрії.
  • ST_RemoveSmallParts — Видаляє невеликі частини (кільця полігону або лінії) геометрії.
  • ST_Reverse — Повернути геометрію з оберненим порядком вершин.
  • ST_Segmentize — Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.
  • ST_SetPoint — Замінити точку лінійного об'єкта на задану точку.
  • ST_ShiftLongitude — Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.
  • ST_WrapX — Оберніть геометрію навколо значення X.
  • ST_SnapToGrid — Прив'яжіть всі точки вхідної геометрії до регулярної сітки.
  • ST_Snap — Прив'язати сегменти та вершини вхідної геометрії до вершин еталонної геометрії.
  • ST_SwapOrdinates — Повертає версію заданої геометрії із заміненими значеннями ординат.

Назва

ST_AddPoint — Додати точку до LineString.

Короткий огляд

geometry ST_AddPoint(geometry linestring, geometry point);

geometry ST_AddPoint(geometry linestring, geometry point, integer position = -1);

Опис

Додає точку до LineString перед індексом position (використовуючи індекс, що починається з 0). Якщо параметр position пропущено або дорівнює -1, точка додається в кінець LineString.

Доступність: 1.1.0

This function supports 3d and will not drop the z-index.

Приклади

Додати точку в кінець 3D лінії

Code
SELECT ST_AddPoint('LINESTRING(0 0 1,1 1 1)', ST_MakePoint(1, 2, 3));
Вивід растрових зображень
LINESTRING(0 0 1,1 1 1,1 2 3)
Figure
Geometry figure for visual-st-addpoint-01

Гарантуйте, що всі лінії в таблиці закриті, додавши початкову точку кожної лінії до кінця лінії тільки для тих, які не закриті.

Code
UPDATE sometable
SET geom = ST_AddPoint(geom, ST_StartPoint(geom))
FROM sometable
WHERE ST_IsClosed(geom) = false;

Див. також

ST_RemovePoint, ST_SetPoint


Назва

ST_CollectionExtract — За заданою колекцією геометрій повертає мультигеометрію, що містить тільки елементи заданого типу.

Короткий огляд

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

Опис

За заданою колекцією геометрій повертає однорідну мультигеометрію.

Якщо type не вказано, повертає мультигеометрію, що містить тільки геометрії найвищого виміру. Тому полігони мають пріоритет над лініями, які мають пріоритет над точками.

Якщо вказано type, повертає мультигеометрію, що містить тільки цей тип. Якщо немає підгеометрій потрібного типу, повертається геометрія EMPTY. Підтримуються тільки точки, лінії та полігони. Номери типів:

  • 1 == POINT

  • 2 == LINESTRING

  • 3 == POLYGON

Для вхідних даних атомарної геометрії геометрія повертається без змін, якщо тип вхідних даних відповідає запитуваному типу. В іншому випадку результатом є геометрія EMPTY заданого типу. За необхідності їх можна перетворити на мультигеометрії за допомогою ST_Multi.

[Застереження]

Результати MultiPolygon не перевіряються на валідність. Якщо компоненти полігону є суміжними або перекриваються, результат буде недійсним. (Наприклад, це може статися при застосуванні цієї функції до результату ST_Split.) Цю ситуацію можна перевірити за допомогою ST_IsValid і виправити за допомогою ST_MakeValid.

Доступність: 1.5.0

[Примітка]

До версії 1.5.3 ця функція повертала атомарні вхідні дані без змін, незалежно від типу. У версії 1.5.3 невідповідні одиничні геометрії повертали результат NULL. У версії 2.0.0 невідповідні одиничні геометрії повертають результат EMPTY запитуваного типу.

Приклади

Витяг типу найвищого виміру:

Code
SELECT ST_CollectionExtract('GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1,2 2) )');
Вивід растрових зображень
MULTILINESTRING((1 1, 2 2))
Figure
Geometry figure for visual-st-collectionextract-01

Витягнути точки (тип 1 == POINT):

Code
SELECT ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
        1);
Вивід растрових зображень
MULTIPOINT((0 0))
Figure
Geometry figure for visual-st-collectionextract-02

Витягнути лінії (тип 2 == LINESTRING):

Code
SELECT ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0,1 1)), LINESTRING(2 2,3 3))',
        2);
Вивід растрових зображень
MULTILINESTRING((0 0, 1 1), (2 2, 3 3))
Figure
Geometry figure for visual-st-collectionextract-03

Назва

ST_CollectionHomogenize — Повертає найпростіше представлення колекції геометрії.

Короткий огляд

geometry ST_CollectionHomogenize(geometry collection);

Опис

За заданою колекцією геометрії повертає "найпростіше" представлення вмісту.

  • Однорідні (однотипні) колекції повертаються як відповідна мультигеометрія.

  • Гетерогенні (змішані) колекції об'єднуються в одну колекцію GeometryCollection.

  • Колекції, що містять один атомарний елемент, повертаються як цей елемент.

  • Атомарні геометрії повертаються без змін. При необхідності їх можна перетворити на мультигеометрії за допомогою ST_Multi.

[Застереження]

Ця функція не гарантує, що результат є дійсним. Зокрема, колекція, що містить сусідні або перекриваються полігони, створить недійсний MultiPolygon. Цю ситуацію можна перевірити за допомогою ST_IsValid і виправити за допомогою ST_MakeValid.

Доступність: 2.0.0

Приклади

Одноелементна колекція, перетворена в атомарну геометрію

Code
SELECT ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))');
Вивід растрових зображень
POINT(0 0)
Figure
Geometry figure for visual-st-collectionhomogenize-01

Вкладена колекція з одним елементом, перетворена в атомарну геометрію:

Code
SELECT ST_CollectionHomogenize('GEOMETRYCOLLECTION(MULTIPOINT((0 0)))');
Вивід растрових зображень
POINT(0 0)
Figure
Geometry figure for visual-st-collectionhomogenize-02

Колекція перетворена на багатогеометрію:

Code
SELECT ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0), POINT(1 1))');
Вивід растрових зображень
MULTIPOINT((0 0),(1 1))
Figure
Geometry figure for visual-st-collectionhomogenize-03

Вкладені неоднорідні колекції, сплощені до GeometryCollection:

Code
SELECT ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0), GEOMETRYCOLLECTION( LINESTRING(1 1,2 2)))');
Вивід растрових зображень
GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2))
Figure
Geometry figure for visual-st-collectionhomogenize-04

Колекція полігонів, перетворених у (недійсний) MultiPolygon:

Code
SELECT ST_CollectionHomogenize('GEOMETRYCOLLECTION (POLYGON ((10 50,50 50,50 10,10 10,10 50)),POLYGON ((90 50,90 10,50 10,50 50,90 50)))');
Вивід растрових зображень
MULTIPOLYGON(((10 50,50 50,50 10,10 10,10 50)),((90 50,90 10,50 10,50 50,90 50)))
Figure
Geometry figure for visual-st-collectionhomogenize-05

Назва

ST_CurveToLine — Перетворює геометрію, що містить криві, на лінійну геометрію.

Короткий огляд

geometry ST_CurveToLine(geometry curveGeom, float tolerance, integer tolerance_type, integer flags);

Опис

Перетворює CIRCULAR STRING у звичайний LINESTRING або CURVEPOLYGON у POLYGON або MULTISURFACE у MULTIPOLYGON. Корисно для виведення на пристрої, які не підтримують типи геометрії CIRCULARSTRING

Перетворює задану геометрію в лінійну геометрію. Кожна крива геометрія або сегмент перетворюється в лінійне наближення з використанням заданого `допуску` та опцій (32 сегменти на квадрант і жодних опцій за замовчуванням).

Аргумент "tolerance_type" визначає інтерпретацію аргументу "tolerance". Він може приймати наступні значення:

  • 0 (за замовчуванням): Допустиме відхилення — максимальна кількість сегментів на квадрант.

  • 1: Допуск — це максимальне відхилення лінії від кривої в одиницях джерела.

  • 2: Допуск — це максимальний кут, виражений в радіанах, між радіусами, що утворюють.

Аргумент "flags" є бітовим полем. За замовчуванням має значення 0. Підтримуються такі біти:

  • 1: Симетричний (незалежний від орієнтації) вихід.

  • 2: Зберігає кут, запобігає зменшенню кутів (довжини сегментів) під час створення симетричного виводу. Не діє, якщо прапор Symmetric вимкнено.

Доступність: 1.3.0

Покращено: у версії 2.4.0 додано підтримку максимального відхилення та максимального кута допуску, а також симетричного виводу.

Покращено: у версії 3.0.0 впроваджено мінімальну кількість сегментів на лінійну дугу, щоб запобігти топологічному колапсу.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 7.1.7

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_CurveToLine('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)');
Вивід растрових зображень
LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575 150418.17258804,220273.613787707 150419.895736857,
220275.317452352 150421.704659462,220276.930305234 150423.594998003,220278.448460847 150425.562198489,
220279.868261823 150427.60152176,220281.186287736 150429.708054909,220282.399363347 150431.876723113,
220283.50456625 150434.10230186,220284.499233914 150436.379429536,220285.380970099 150438.702620341,220286.147650624 150441.066277505,
220286.797428488 150443.464706771,220287.328738321 150445.892130112,220287.740300149 150448.342699654,
220288.031122486 150450.810511759,220288.200504713 150453.289621251,220288.248038775 150455.77405574,
220288.173610157 150458.257830005,220287.977398166 150460.734960415,220287.659875492 150463.199479347,
220287.221807076 150465.64544956,220286.664248262 150468.066978495,220285.988542259 150470.458232479,220285.196316903 150472.81345077,
220284.289480732 150475.126959442,220283.270218395 150477.39318505,220282.140985384 150479.606668057,
220280.90450212 150481.762075989,220279.5637474 150483.85421628,220278.12195122 150485.87804878,
220276.582586992 150487.828697901,220274.949363179 150489.701464356,220273.226214362 150491.491836488,
220271.417291757 150493.195501133,220269.526953216 150494.808354014,220267.559752731 150496.326509628,
220265.520429459 150497.746310603,220263.41389631 150499.064336517,220261.245228106 150500.277412127,
220259.019649359 150501.38261503,220256.742521683 150502.377282695,220254.419330878 150503.259018879,
220252.055673714 150504.025699404,220249.657244448 150504.675477269,220247.229821107 150505.206787101,
220244.779251566 150505.61834893,220242.311439461 150505.909171266,220239.832329968 150506.078553494,
220237.347895479 150506.126087555,220234.864121215 150506.051658938,220232.386990804 150505.855446946,
220229.922471872 150505.537924272,220227.47650166 150505.099855856,220225.054972724 150504.542297043,
220222.663718741 150503.86659104,220220.308500449 150503.074365683,
220217.994991777 150502.167529512,220215.72876617 150501.148267175,
220213.515283163 150500.019034164,220211.35987523 150498.7825509,
220209.267734939 150497.441796181,220207.243902439 150496,
220205.293253319 150494.460635772,220203.420486864 150492.82741196,220201.630114732 150491.104263143,
220199.926450087 150489.295340538,220198.313597205 150487.405001997,220196.795441592 150485.437801511,
220195.375640616 150483.39847824,220194.057614703 150481.291945091,220192.844539092 150479.123276887,220191.739336189 150476.89769814,
220190.744668525 150474.620570464,220189.86293234 150472.297379659,220189.096251815 150469.933722495,
220188.446473951 150467.535293229,220187.915164118 150465.107869888,220187.50360229 150462.657300346,
220187.212779953 150460.189488241,220187.043397726 150457.710378749,220186.995863664 150455.22594426,
220187.070292282 150452.742169995,220187.266504273 150450.265039585,220187.584026947 150447.800520653,
220188.022095363 150445.35455044,220188.579654177 150442.933021505,220189.25536018 150440.541767521,
220190.047585536 150438.18654923,220190.954421707 150435.873040558,220191.973684044 150433.60681495,
220193.102917055 150431.393331943,220194.339400319 150429.237924011,220195.680155039 150427.14578372,220197.12195122 150425.12195122,
220198.661315447 150423.171302099,220200.29453926 150421.298535644,220202.017688077 150419.508163512,220203.826610682 150417.804498867,
220205.716949223 150416.191645986,220207.684149708 150414.673490372,220209.72347298 150413.253689397,220211.830006129 150411.935663483,
220213.998674333 150410.722587873,220216.22425308 150409.61738497,220218.501380756 150408.622717305,220220.824571561 150407.740981121,
220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 150406)
Figure
Geometry figure for visual-st-curvetoline-01

This example uses 3D input.

Code
SELECT ST_CurveToLine('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)');
Вивід растрових зображень
LINESTRING(220268 150415 1,220269.95064912 150416.539364228 1.0181172856673,
220271.823415575 150418.17258804 1.03623457133459,220273.613787707 150419.895736857 1.05435185700189,....AD INFINITUM ....
   220225.586657991 150406.324522731 1.32611114201132,220227 150406 3)

Use only 2 segments to approximate quarter circle.

Code
SELECT ST_CurveToLine('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)', 2);
Вивід растрових зображень
LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 150485.87804878,
220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 150462.657300346,
220197.12195122 150425.12195122,220227 150406)
Figure
Geometry figure for visual-st-curvetoline-03

Ensure the approximated line is no more than 20 units away from the original curve, and make the result direction-neutral.

Code
SELECT ST_CurveToLine(
    'CIRCULARSTRING(0 0,100 -100,200 0)'::geometry,
    20,
    1,
    1
  );
Вивід растрових зображень
LINESTRING(0 0,49.99999999999996 -86.60254037844383,149.99999999999994 -86.6025403784439,200 0)
Figure
Geometry figure for visual-st-curvetoline-04

Див. також

ST_LineToCurve


Назва

ST_Scroll — Змінити початкову точку замкнутої лінії LineString.

Короткий огляд

geometry ST_Scroll(geometry linestring, geometry point);

Опис

Змінює початкову/кінцеву точку замкнутої лінії LineString на задану вершину point.

Доступність: 3.2.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

Make a closed line start at its 3rd vertex.

Code
SELECT ST_Scroll('SRID=4326;LINESTRING(0 0 0 1,10 0 2 0,5 5 4 2,0 0 0 1)', 'POINT(5 5 4 2)');
Вивід растрових зображень
SRID=4326;LINESTRING(5 5 4 2,0 0 0 1,10 0 2 0,5 5 4 2)
Figure
Geometry figure for visual-st-scroll-01

Див. також

ST_Normalize


Назва

ST_FlipCoordinates — Повертає версію геометрії з перевернутими осями X та Y.

Короткий огляд

geometry ST_FlipCoordinates(geometry geom);

Опис

Повертає версію заданої геометрії з перевернутими осями X та Y. Корисно для виправлення геометрій, які містять координати, виражені у вигляді широти/довготи (Y, X).

Доступність: 2.0.0

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклад

Code
SELECT ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)'));
Вивід растрових зображень
POINT(2 1)
Figure
Geometry figure for visual-st-flipcoordinates-01

Див. також

ST_SwapOrdinates


Назва

ST_Force2D — Примусово переведіть геометрії в "2-вимірний режим".

Короткий огляд

geometry ST_Force2D(geometry geomA);

Опис

Примусово переводить геометрії в "двовимірний режим", щоб усі вихідні представлення мали тільки координати X і Y. Це корисно для виведення даних, сумісних із OGC (оскільки OGC визначає тільки двовимірні геометрії).

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_2D.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_Force2D('CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)');
Вивід растрових зображень
CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)
Figure
Geometry figure for visual-st-force2d-01
Code
SELECT ST_Force2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))');
Вивід растрових зображень
POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))
Figure
Geometry figure for visual-st-force2d-02

Див. також

ST_Force3D


Назва

ST_Force3D — Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.

Короткий огляд

geometry ST_Force3D(geometry geomA, float Zvalue = 0.0);

Опис

Примусово переводить геометрії в режим XYZ. Це псевдонім для ST_Force3DZ. Якщо геометрія не має компонента Z, то додається координата Z Zvalue.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_3D.

Змінено: 3.1.0. Додано підтримку для надання значення Z, відмінного від нуля.

This function supports Polyhedral surfaces.

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

Приклади

Nothing happens to an already 3D geometry.

Code
SELECT ST_Force3D('CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)');
Вивід растрових зображень
CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)
Figure
Geometry figure for visual-st-force-3d-01
Code
SELECT ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))');
Вивід растрових зображень
POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
Figure
Geometry figure for visual-st-force-3d-02

Назва

ST_Force3DZ — Примусово перевести геометрії в режим XYZ.

Короткий огляд

geometry ST_Force3DZ(geometry geomA, float Zvalue = 0.0);

Опис

Примусово переводить геометрії в режим XYZ. Якщо геометрія не має компонента Z, то додається координата Z Zvalue.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_3DZ.

Змінено: 3.1.0. Додано підтримку для надання значення Z, відмінного від нуля.

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Nothing happens to an already 3D geometry.

Code
SELECT ST_Force3DZ('CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)');
Вивід растрових зображень
CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)
Figure
Geometry figure for visual-st-force-3dz-01
Code
SELECT ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))');
Вивід растрових зображень
POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
Figure
Geometry figure for visual-st-force-3dz-02

Назва

ST_Force3DM — Примусово перевести геометрії в режим XYM.

Короткий огляд

geometry ST_Force3DM(geometry geomA, float Mvalue = 0.0);

Опис

Примусово переводить геометрії в режим XYM. Якщо геометрія не має компонента M, то додається координата Mvalue M. Якщо вона має компонент Z, то Z видаляється

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_3DM.

Змінено: 3.1.0. Додано підтримку для надання значення M, відмінного від нуля.

This method supports Circular Strings and Curves.

Приклади

Nothing happens to an already 3D geometry.

Code
SELECT ST_Force3DM('CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)');
Вивід растрових зображень
CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0)
Figure
Geometry figure for visual-st-force-3dm-01
Code
SELECT ST_Force3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))');
Вивід растрових зображень
POLYGONM((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
Figure
Geometry figure for visual-st-force-3dm-02

Назва

ST_Force4D — Примусово перевести геометрії в режим XYZM.

Короткий огляд

geometry ST_Force4D(geometry geomA, float Zvalue = 0.0, float Mvalue = 0.0);

Опис

Примусово переводить геометрії в режим XYZM. Zvalue та Mvalue додаються для відсутніх розмірів Z та M відповідно.

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_4D.

Змінено: 3.1.0. Додано підтримку для надання ненульових значень Z та M.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Nothing happens to an already 3D geometry.

Code
SELECT ST_Force4D('CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)');
Вивід растрових зображень
CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0)
Figure
Geometry figure for visual-st-force-4d-01
Code
SELECT ST_Force4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 1 1,3 1 1,1 3 1,1 1 1))');
Вивід растрових зображень
MULTILINESTRING((0 0 0 1,0 5 0 2,5 0 0 3,0 0 0 4),(1 1 0 1,3 1 0 1,1 3 0 1,1 1 0 1))
Figure
Geometry figure for visual-st-force-4d-02

Назва

ST_ForceCollection — Перетворити геометрію в GEOMETRYCOLLECTION.

Короткий огляд

geometry ST_ForceCollection(geometry geomA);

Опис

Перетворює геометрію в GEOMETRYCOLLECTION. Це корисно для спрощення представлення WKB.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Доступність: 1.2.2, до версії 1.3.4 ця функція буде виходити з ладу з кривими. Ця проблема вирішена в версії 1.3.4+

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_Collection.

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_ForceCollection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))');
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1)))
Figure
Geometry figure for visual-st-force-collection-01
Code
SELECT ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)');
Вивід растрових зображень
GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
Figure
Geometry figure for visual-st-force-collection-02

This example uses a PolyhedralSurface.

Code
SELECT ST_ForceCollection('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
 ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
 ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
 ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
 ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
 ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))');
Вивід растрових зображень
GEOMETRYCOLLECTION(
  POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
  POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
  POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
  POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
  POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
  POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)
                
Figure
Geometry figure for visual-st-force-collection-03

Назва

ST_ForceCurve — Перетворити геометрію в її вигнутий тип, якщо це можливо.

Короткий огляд

geometry ST_ForceCurve(geometry g);

Опис

Перетворює геометрію в її криве представлення, якщо це можливо: лінії стають складеними кривими, мультилінії стають мультикривими, полігони стають криволінійними полігонами, мультиполігоанми стають багатоповерхневими. Якщо вхідна геометрія вже є кривим представленням, повертається те саме, що і вхідні дані.

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_ForceCurve('POLYGON((0 0 2,5 0 2,0 5 2,0 0 2),(1 1 2,1 3 2,3 1 2,1 1 2))'::geometry
  );
Вивід растрових зображень
CURVEPOLYGON Z ((0 0 2,5 0 2,0 5 2,0 0 2),(1 1 2,1 3 2,3 1 2,1 1 2))
Figure
Geometry figure for visual-st-forcecurve-01

Див. також

ST_LineToCurve


Назва

ST_ForcePolygonCCW — Всі зовнішні кільця орієнтуйте проти годинникової стрілки, а всі внутрішні кільця — за годинниковою стрілкою.

Короткий огляд

geometry ST_ForcePolygonCCW(geometry geom);

Опис

Змушує (Мульти)Полігони) використовувати орієнтацію проти годинникової стрілки для зовнішнього кільця та орієнтацію за годинниковою стрілкою для внутрішніх кілець. Неполігональні геометрії повертаються без змін.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

Force a polygon and its hole to use counter-clockwise exterior rings and clockwise interior rings.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,0 4,4 4,4 0,0 0),
                  (1 1,3 1,3 3,1 3,1 1))'::geometry AS geom
)
SELECT geom AS input_polygon,
       ST_ForcePolygonCCW(geom) AS ccw_polygon
FROM data;
Вивід растрових зображень
POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 1,3 3,1 3,1 1)) | POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,1 3,3 3,3 1,1 1))
Figure
Geometry figure for visual-st-forcepolygonccw-01

Назва

ST_ForcePolygonCW — Всі зовнішні кільця орієнтуйте за годинниковою стрілкою, а всі внутрішні кільця — проти годинникової стрілки.

Короткий огляд

geometry ST_ForcePolygonCW(geometry geom);

Опис

Змушує (Мульти)Полігони) використовувати орієнтацію за годинниковою стрілкою для зовнішнього кільця та проти годинникової стрілки для внутрішніх кілець. Неполігональні геометрії повертаються без змін.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

Force a polygon and its hole to use clockwise exterior rings and counter-clockwise interior rings.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,4 0,4 4,0 4,0 0),
                  (1 1,1 3,3 3,3 1,1 1))'::geometry AS geom
)
SELECT geom AS input_polygon,
       ST_ForcePolygonCW(geom) AS cw_polygon
FROM data;
Вивід растрових зображень
POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,1 3,3 3,3 1,1 1)) | POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 1,3 3,1 3,1 1))
Figure
Geometry figure for visual-st-forcepolygoncw-01

Назва

ST_ForceSFS — Force geometries to use SFS 1.1 or 1.2 geometry types.

Короткий огляд

geometry ST_ForceSFS(geometry geomA);

geometry ST_ForceSFS(geometry geomA, text version);

Опис

Forces a geometry to use the geometry types defined by the requested version of the OGC Simple Features Specification. The default is SFS 1.1. Curved geometries are converted to linear representations, TRIANGLE is converted to POLYGON, and TIN and POLYHEDRALSURFACE are converted to GEOMETRYCOLLECTION values containing POLYGON elements.

If version begins with 1.2, curved geometries are still converted to linear representations, but TRIANGLE, TIN, and POLYHEDRALSURFACE are preserved. Other version values use the default SFS 1.1 behavior. Geometry collections are processed recursively, and the SRID and Z/M coordinates are preserved.

Доступність: 2.1.0

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

Приклади

Compare the geometry types produced for SFS 1.1 (the default) and SFS 1.2. Read each row from the input type in the direction of the result columns.

Code
WITH inputs(geom) AS (VALUES
    ('CIRCULARSTRING(0 0, 1 1, 2 0)'::geometry),
    ('TRIANGLE((0 0, 0 2, 2 0, 0 0))'::geometry),
    ('TIN(((0 0, 0 2, 2 0, 0 0)))'::geometry),
    ('POLYHEDRALSURFACE(((0 0, 0 2, 2 0, 0 0)))'::geometry)
)
SELECT ST_GeometryType(geom) || ' →' AS input,
       ST_GeometryType(ST_ForceSFS(geom)) AS "SFS 1.1 (default)",
       ST_GeometryType(ST_ForceSFS(geom, '1.2')) AS "SFS 1.2"
FROM inputs;
Вивід растрових зображень
input          |   SFS 1.1 (default)   |       SFS 1.2
------------------------+-----------------------+----------------------
 ST_CircularString →    | ST_LineString         | ST_LineString
 ST_Triangle →          | ST_Polygon            | ST_Triangle
 ST_Tin →               | ST_GeometryCollection | ST_Tin
 ST_PolyhedralSurface → | ST_GeometryCollection | ST_PolyhedralSurface
(4 rows)

Див. також

ST_CurveToLine, ST_ForceCurve


Назва

ST_ForceRHR — Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.

Короткий огляд

geometry ST_ForceRHR(geometry g);

Опис

Примушує орієнтацію вершин полігону слідувати правилу правої руки, за яким область, обмежена полігоном, знаходиться праворуч від межі. Зокрема, зовнішнє кільце орієнтовано за годинниковою стрілкою, а внутрішні кільця - проти годинникової стрілки. Ця функція є синонімом ST_ForcePolygonCW

[Примітка]

Вищезазначене визначення правила правої руки суперечить визначенням, що використовуються в інших контекстах. Щоб уникнути плутанини, рекомендується використовувати ST_ForcePolygonCW.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_ForceRHR('POLYGON((0 0 2,5 0 2,0 5 2,0 0 2),(1 1 2,1 3 2,3 1 2,1 1 2))'
  );
Вивід растрових зображень
POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))
Figure
Geometry figure for visual-st-forcerhr-01

Назва

ST_LineExtend — Повертає лінію, розширений вперед і назад на вказані відстані.

Короткий огляд

geometry ST_LineExtend(geometry line, float distance_forward, float distance_backward=0.0);

Опис

Повертає лінію, продовжену вперед і назад шляхом додавання нових початкових (і кінцевих) точок на заданій відстані (відстанях). Відстань, рівна нулю, не додає точку. Допускаються тільки невід'ємні відстані. Напрямок доданих точок визначається першими (і останніми) двома відмінними точками лінії. Повторювані точки ігноруються.

Доступність: 3.4.0

Приклад: Продовжує лінію на 5 одиниць вперед і 6 одиниць назад

Code
SELECT ST_LineExtend('LINESTRING(0 0,0 10)'::geometry, 5, 6);
Вивід растрових зображень
LINESTRING(0 -6,0 0,0 10,0 15)
Figure
Geometry figure for visual-st-lineextend-01

Назва

ST_LineToCurve — Перетворює лінійну геометрію на криву геометрію.

Короткий огляд

geometry ST_LineToCurve(geometry geomANoncircular);

Опис

Перетворює прості LINESTRING/POLYGON в CIRCULAR STRINGs і вигнуті полігони. Зверніть увагу, що для опису вигнутого еквівалента потрібно набагато менше точок.

[Примітка]

Якщо вхідні дані LINESTRING/POLYGON недостатньо вигнуті, щоб чітко відобразити криву, функція поверне ту саму вхідну геометрію.

Доступність: 1.3.0

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

This example converts a linear Polygon approximating a circle to a CurvePolygon.

Code
WITH data AS (
    SELECT ST_Buffer('POINT(1 3)'::geometry, 3) AS geom
)
SELECT geom AS "input_Linear polygon",
       ST_LineToCurve(geom) AS "Curved polygon"
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_Linear polygon | POLYGON((4 3,3.942 2.415,3.772 1.852,3.494 1.333,3.121 0.879,2.667 0.506,2.148 0.228,1.585 0.058,1 0,0.415 0.058,-0.148 0.228,-0.667 0.506,-1.121 0.879,-1.494 1.333,-1.772 1.852,-1.942 2.415,-2 3,-1.942 3.585,-1.772 4.148,-1.494 4.667,-1.121 5.121,-0.667 5.494,-0.148 5.772,0.415 5.942,1 6,1.585 5.942,2.148 5.772,2.667 5.494,3.121 5.121,3.494 4.667,3.772 4.148,3.942 3.585,4 3))
Curved polygon       | CURVEPOLYGON(CIRCULARSTRING(4 3,-2 3,4 3))
Figure
Geometry figure for visual-st-linetocurve-01

This example converts a 3D linear ring to a CircularString while preserving Z.

Code
WITH data AS (
    SELECT ST_Translate(
        ST_Force3D(ST_Boundary(ST_Buffer(ST_Point(1, 3), 2, 2))),
        0, 0, 3
    ) AS geom
)
SELECT geom AS "input_Linear ring at Z=3",
       ST_LineToCurve(geom) AS "Circular string at Z=3"
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_Linear ring at Z=3 | LINESTRING Z (3 3 3,2.414 1.586 3,1 1 3,-0.414 1.586 3,-1 3 3,-0.414 4.414 3,1 5 3,2.414 4.414 3,3 3 3)
Circular string at Z=3   | CIRCULARSTRING Z (3 3 3,-1 3 3,3 3 3)
Figure
Geometry figure for visual-st-linetocurve-02

Див. також

ST_CurveToLine


Назва

ST_Multi — Повернути геометрію як геометрію MULTI*.

Короткий огляд

geometry ST_Multi(geometry geom);

Опис

Повертає геометрію як колекцію геометрії MULTI*. Якщо геометрія вже є колекцією, вона повертається без змін.

Приклади

A Polygon is converted to a single-element MultiPolygon. The coordinates are unchanged.

Code
SELECT ST_Multi('POLYGON ((10 30,30 30,30 10,10 10,10 30))');
Вивід растрових зображень
MULTIPOLYGON(((10 30,30 30,30 10,10 10,10 30)))
Figure
Geometry figure for visual-st-multi-01

Див. також

ST_AsText


Назва

ST_Normalize — Повернути геометрію в канонічній формі.

Короткий огляд

geometry ST_Normalize(geometry geom);

Опис

Повертає геометрію в нормалізованому/канонічному вигляді. Може змінювати порядок вершин у кільцях полігонів, кільцях у полігоні, елементах у багатогеометричному комплексі.

В основному корисний тільки для тестування (порівняння очікуваних і отриманих результатів).

Доступність: 2.3.0

Приклади

Code
SELECT ST_Normalize('GEOMETRYCOLLECTION(
    POINT(2 3),
    MULTILINESTRING((0 0,1 1),(2 2,3 3)),
    POLYGON(
      (0 10,0 0,10 0,10 10,0 10),
      (4 2,2 2,2 4,4 4,4 2),
      (6 8,8 8,8 6,6 6,6 8)
    )
  )');
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0),(6 6,8 6,8 8,6 8,6 6),(2 2,4 2,4 4,2 4,2 2)), MULTILINESTRING((2 2,3 3),(0 0,1 1)), POINT(2 3))
Figure
Geometry figure for visual-st-normalize-01

Див. також

ST_Equals,


Назва

ST_Project — Повертає точку, спроектовану від початкової точки на відстань і азимут.

Короткий огляд

geometry ST_Project(geometry g1, float distance, float azimuth);

geometry ST_Project(geometry g1, geometry g2, float distance);

geography ST_Project(geography g1, float distance, float azimuth);

geography ST_Project(geography g1, geography g2, float distance);

Опис

Повертає точку, спроектовану з точки вздовж геодезичної лінії з використанням заданої відстані та азимута (пеленга). Це відоме як пряма геодезична задача.

Двоточкова версія використовує шлях від першої до другої точки для неявного визначення азимута і використовує відстань, як і раніше.

Відстань вказана в метрах. Підтримуються від'ємні значення.

Азимут (також відомий як курс або пеленг) вимірюється в радіанах. Він вимірюється за годинниковою стрілкою від справжнього півночі.

  • Північ — це азимут нуль (0 градусів)

  • Схід — азимут π/2 (90 градусів)

  • Південь — азимут π (180 градусів)

  • Захід знаходиться на азимуті 3π/2 (270 градусів)

Підтримуються від'ємні значення азимута та значення, більші за 2π (360 градусів).

Доступність: 2.0.0

Покращено: 2.4.0 Дозволено негативну відстань і ненормалізований азимут.

Покращено: 3.4.0 Дозволено аргументи геометрії та двоточкову форму з пропуском азимута.

Приклад: Проекційна точка на відстані 100 000 метрів і пеленг 45 градусів

Code
SELECT ST_Project('POINT(0 0)'::geography, 100000, radians(45.0));
Вивід растрових зображень
POINT(0.635231029125537 0.639472334729198)
Figure
Geometry figure for visual-st-project-01

Назва

ST_QuantizeCoordinates — Встановлює найменш значущі біти координат у нуль

Короткий огляд

geometry ST_QuantizeCoordinates(geometry g, int prec_x, int prec_y = NULL, int prec_z = NULL, int prec_m = NULL);

Опис

ST_QuantizeCoordinates визначає кількість бітів (N), необхідних для представлення значення координати з заданою кількістю цифр після десяткової крапки, а потім встановлює всі біти, крім N найстарших, в нуль. Отримане значення координати все одно буде округлено до початкового значення, але його стисливість буде покращено. Це може призвести до значного зменшення використання дискового простору за умови, що стовпець геометрії використовує стисливий тип зберігання. Функція дозволяє вказати різну кількість цифр після десяткової крапки в кожному вимірі; невизначені виміри вважаються такими, що мають точність виміру x. Негативні цифри інтерпретуються як цифри ліворуч від десяткової крапки (тобто prec_x=-2 збереже значення координат з точністю до 100.

Координати, отримані за допомогою ST_QuantizeCoordinates, не залежать від геометрії, що містить ці координати, та відносного положення цих координат у геометрії. Як результат, використання цієї функції не впливає на існуючі топологічні відносини між геометріями. Функція може створити недійсну геометрію, якщо її викликати з кількістю цифр, меншою за внутрішню точність геометрії.

Доступність: 2.5.0

Технічна інформація

PostGIS зберігає всі значення координат у вигляді цілих чисел з подвійною точністю, які можуть надійно представляти 15 значущих цифр. Однак PostGIS може використовуватися для управління даними, які за своєю суттю мають менше 15 значущих цифр. Прикладом є дані TIGER, які надаються у вигляді географічних координат з точністю до шести цифр після десяткової крапки (отже, потрібно лише дев'ять значущих цифр довготи та вісім значущих цифр широти)

Коли доступно 15 значущих цифр, існує багато можливих представлень числа з 9 значущими цифрами. Число з подвійною точністю з плаваючою комою використовує 52 явних біти для представлення значущої частини (мантиси) координати. Для представлення мантиси з 9 значущими цифрами потрібно лише 30 бітів, що залишає 22 не значущих біти; ми можемо встановити їх значення на будь-яке, яке нам подобається, і все одно отримаємо число, яке округлюється до вхідного значення. Наприклад, значення 100,123456 можна представити числами з плаваючою комою, найближчими до 100,123456000000, 100,123456000001 та 100,123456432199. Усі вони є однаково дійсними, оскільки ST_AsText(geom, 6) поверне однаковий результат для будь-якого з цих вхідних значень. Оскільки ми можемо встановити ці біти на будь-яке значення, ST_QuantizeCoordinates встановлює 22 незначущі біти на нуль. Для довгої послідовності координат це створює шаблон блоків послідовних нулів, який PostgreSQL стискає більш ефективно.

[Примітка]

На розмір геометрії на диску потенційно впливає лише ST_QuantizeCoordinates. ST_MemSize, який повідомляє про використання геометрії в пам'яті, поверне те саме значення незалежно від дискового простору, який використовує геометрія.

Приклади

Code
SELECT ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4);
Вивід растрових зображень
POINT(100.12344360351562 0)
Figure
Geometry figure for visual-st-quantizecoordinates-01
Code
WITH test AS (SELECT 'POINT (123.456789123456 123.456789123456)'::geometry AS geom)
SELECT
  digits,
  encode(ST_QuantizeCoordinates(geom, digits), 'hex'),
  ST_QuantizeCoordinates(geom, digits)
FROM test, generate_series(15, -15, -1) AS digits;
Вивід растрових зображень
digits |                   encode                   |                  st_astext
--------+--------------------------------------------+----------------------------------------------
     15 | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
     14 | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
     13 | 01010000005e9a72083cdd5e405e9a72083cdd5e40 | POINT(123.45678912345599 123.45678912345599)
     12 | 0101000000409a72083cdd5e40409a72083cdd5e40 | POINT(123.45678912345556 123.45678912345556)
     11 | 0101000000009a72083cdd5e40009a72083cdd5e40 | POINT(123.45678912345466 123.45678912345466)
     10 | 0101000000009872083cdd5e40009872083cdd5e40 | POINT(123.45678912344738 123.45678912344738)
      9 | 0101000000008072083cdd5e40008072083cdd5e40 | POINT(123.45678912336007 123.45678912336007)
      8 | 0101000000000070083cdd5e40000070083cdd5e40 | POINT(123.45678912103176 123.45678912103176)
      7 | 0101000000000060083cdd5e40000060083cdd5e40 | POINT(123.4567891061306 123.4567891061306)
      6 | 0101000000000000083cdd5e40000000083cdd5e40 | POINT(123.45678901672363 123.45678901672363)
      5 | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
      4 | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
      3 | 01010000000000000038dd5e400000000038dd5e40 | POINT(123.45654296875 123.45654296875)
      2 | 01010000000000000000dd5e400000000000dd5e40 | POINT(123.453125 123.453125)
      1 | 01010000000000000000dc5e400000000000dc5e40 | POINT(123.4375 123.4375)
      0 | 01010000000000000000c05e400000000000c05e40 | POINT(123 123)
     -1 | 01010000000000000000005e400000000000005e40 | POINT(120 120)
     -2 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -3 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -4 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -5 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -6 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -7 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -8 | 010100000000000000000058400000000000005840 | POINT(96 96)
     -9 | 010100000000000000000058400000000000005840 | POINT(96 96)
    -10 | 010100000000000000000058400000000000005840 | POINT(96 96)
    -11 | 010100000000000000000058400000000000005840 | POINT(96 96)
    -12 | 010100000000000000000058400000000000005840 | POINT(96 96)
    -13 | 010100000000000000000058400000000000005840 | POINT(96 96)
    -14 | 010100000000000000000058400000000000005840 | POINT(96 96)
    -15 | 010100000000000000000058400000000000005840 | POINT(96 96)
(31 rows)

Див. також

ST_SnapToGrid


Назва

ST_RemovePoint — Видалити точку з лінії.

Короткий огляд

geometry ST_RemovePoint(geometry linestring, integer offset);

Опис

Видаляє точку з LineString, задавши її індекс (починаючи з 0). Корисно для перетворення замкнутої лінії (кільця) у відкриту лінію.

Покращено: 3.2.0

Доступність: 1.1.0

This function supports 3d and will not drop the z-index.

Приклади

Гарантує, що лінії не будуть закриті, видаляючи кінцеву точку закритих ліній (кільця). Припускає, що геометрична фігура має тип LINESTRING

Code
UPDATE sometable
    SET geom = ST_RemovePoint(geom, ST_NPoints(geom) - 1)
    FROM sometable
    WHERE ST_IsClosed(geom);

Див. також

ST_AddPoint, ST_NPoints, ST_NumPoints


Назва

ST_RemoveRepeatedPoints — Повертає версію геометрії з видаленими дублікатами точок.

Короткий огляд

geometry ST_RemoveRepeatedPoints(geometry geom, float8 tolerance = 0.0);

Опис

Повертає версію заданої геометрії з видаленими дублюючими послідовними точками. Функція обробляє тільки (Multi)LineStrings, (Multi)Polygons і MultiPoints, але її можна викликати з будь-яким типом геометрії. Елементи GeometryCollections обробляються індивідуально. Кінцеві точки LineStrings зберігаються.

Якщо вказано ненульовий параметр tolerance, вершини, що знаходяться на відстані, яка не перевищує допуск, вважаються дублікатами. Відстань обчислюється у 2D (площина XY).

Покращено: 3.2.0

Доступність: 2.2.0

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_RemoveRepeatedPoints('MULTIPOINT ((1 1),(2 2),(3 3),(2 2))');
Вивід растрових зображень
MULTIPOINT((1 1),(2 2),(3 3))
Figure
Geometry figure for visual-st-removerepeatedpoints-01
Code
SELECT ST_RemoveRepeatedPoints('LINESTRING (0 0,0 0,1 1,0 0,1 1,2 2)');
Вивід растрових зображень
LINESTRING(0 0,1 1,0 0,1 1,2 2)
Figure
Geometry figure for visual-st-removerepeatedpoints-02

Приклад: Елементи колекції обробляються окремо.

Code
SELECT ST_RemoveRepeatedPoints('GEOMETRYCOLLECTION (LINESTRING (1 1,2 2,2 2,3 3),POINT (4 4),POINT (4 4),POINT (5 5))');
Вивід растрових зображень
GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3), POINT(4 4), POINT(4 4), POINT(5 5))
Figure
Geometry figure for visual-st-removerepeatedpoints-03

Приклад: Повторне видалення точок з допуском відстані.

Code
SELECT ST_RemoveRepeatedPoints('LINESTRING (0 0,0 0,1 1,5 5,1 1,2 2)', 2);
Вивід растрових зображень
LINESTRING(0 0,5 5,2 2)
Figure
Geometry figure for visual-st-removerepeatedpoints-04

Див. також

ST_Simplify


Назва

ST_RemoveIrrelevantPointsForView — Видаляє точки, які не мають значення для візуалізації певного прямокутного виду геометрії.

Короткий огляд

geometry ST_RemoveIrrelevantPointsForView(geometry geom, box2d bounds, boolean cartesian_hint = false);

Опис

Повертає geometryбез точок, що не мають значення для візуалізації геометрії в заданому прямокутному вікні.

Ця функція може бути використана для швидкої попередньої обробки геометрій, які повинні бути відтворені тільки в певних межах.

Оцінюються тільки геометрії типу (MULTI)POLYGON і (MULTI)LINESTRING. Інші геометрії залишаються без змін.

На відміну від ST_ClipByBox2D(), ця функція

  • сортує точки без обчислення нових точок перетину, що дозволяє уникнути помилок округлення і, як правило, підвищує продуктивність,

  • повертає геометрію з однаковою або схожою кількістю точок,

  • призводить до однакового результату візуалізації в межах заданого виду, і

  • може призвести до самоперетину, що зробить отриману геометрію недійсною (див. приклад нижче).

Якщо cartesian_hint встановлено на true, алгоритм застосовує додаткові оптимізації, що включають декартову математику, для подальшого зменшення кількості отриманих точок. Зверніть увагу, що використання цієї опції може призвести до появи артефактів рендерингу, якщо отримані координати перед рендерингом проектуються в іншу (не декартову) систему координат.

[Застереження]

Для полігонів ця функція наразі не гарантує, що результат є дійсним. Цю ситуацію можна перевірити за допомогою ST_IsValid та виправити за допомогою ST_MakeValid.

Доступність: 3.5.0

Приклади

The input polygon has 55 points. The result retains 15 points, while rendering the same shape inside the view envelope.

Code
WITH data(geom, view) AS (VALUES (
  'POLYGON((3.2 14.2,6.8 14.2,7.6 11.9,7.2 9.8,7.8 7.2,10.3 7.2,11.5 7.5,13.8 7.2,14.6 5.9,14.2 4.8,14.8 3.2,14.6 0.9,13.2 -1.2,12.8 -3.8,12 -4.1,11 -4,9.8 -4.2,8.8 -4.8,8.3 -2.5,6.5 0.2,5.8 2.2,5.3 0.2,3.5 -1.5,2.8 -3.8,1.6 -4.5,-0.3 -5.2,-2.2 -5.8,-0.9 -4.8,-1.5 -4.4,-1.8 -2.8,-1.2 -1.8,0.5 -1.8,1.8 -1.8,2.3 -0.1,1.5 1.8,1.8 3.2,0 3.5,-3.2 4.2,-5.2 4.2,-4.4 4.9,-4.9 5.5,-4.3 5.9,-3.8 6.4,-3 6.9,-3.2 7.8,-2.2 8.2,-1.7 8.9,-2.7 9.4,-2.2 9.9,-1.4 10.9,-1.8 11.8,-1.2 12.2,-2.3 12.8,-2.9 13.2,0.6 13.5,3.2 14.2))'::geometry,
  ST_MakeEnvelope(0.1, 0, 10, 10)
))
SELECT geom AS input_geom,
       view AS input_view,
       ST_RemoveIrrelevantPointsForView(geom, view, true) AS result,
       view AS view
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_geom | POLYGON((3.2 14.2,6.8 14.2,7.6 11.9,7.2 9.8,7.8 7.2,10.3 7.2,11.5 7.5,13.8 7.2,14.6 5.9,14.2 4.8,14.8 3.2,14.6 0.9,13.2 -1.2,12.8 -3.8,12 -4.1,11 -4,9.8 -4.2,8.8 -4.8,8.3 -2.5,6.5 0.2,5.8 2.2,5.3 0.2,3.5 -1.5,2.8 -3.8,1.6 -4.5,-0.3 -5.2,-2.2 -5.8,-0.9 -4.8,-1.5 -4.4,-1.8 -2.8,-1.2 -1.8,0.5 -1.8,1.8 -1.8,2.3 -0.1,1.5 1.8,1.8 3.2,0 3.5,-3.2 4.2,-5.2 4.2,-4.4 4.9,-4.9 5.5,-4.3 5.9,-3.8 6.4,-3 6.9,-3.2 7.8,-2.2 8.2,-1.7 8.9,-2.7 9.4,-2.2 9.9,-1.4 10.9,-1.8 11.8,-1.2 12.2,-2.3 12.8,-2.9 13.2,0.6 13.5,3.2 14.2))
input_view | POLYGON((0.1 0,0.1 10,10 10,10 0,0.1 0))
result     | POLYGON((7.6 11.9,7.2 9.8,7.8 7.2,10.3 7.2,11 -4,8.3 -2.5,6.5 0.2,5.8 2.2,5.3 0.2,3.5 -1.5,2.3 -0.1,1.5 1.8,1.8 3.2,0 3.5,-2.9 13.2,7.6 11.9))
view       | POLYGON((0.1 0,0.1 10,10 10,10 0,0.1 0))
Figure
Geometry figure for visual-st-removeirrelevantpointsforview-01

Only linework affecting the view is retained; existing vertices are reused.

Code
WITH data(geom, view) AS (VALUES (
  'MULTILINESTRING((0 0,10 0,20 0,30 0),(0 15,5 15,10 15,15 15,20 15,25 15,30 15,40 15),(13 13,15 15,17 17))'::geometry,
  ST_MakeEnvelope(12, 12, 18, 18)
))
SELECT geom AS input_geom,
       view AS input_view,
       ST_RemoveIrrelevantPointsForView(geom, view, true) AS result,
       view AS view
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_geom | MULTILINESTRING((0 0,10 0,20 0,30 0),(0 15,5 15,10 15,15 15,20 15,25 15,30 15,40 15),(13 13,15 15,17 17))
input_view | POLYGON((12 12,12 18,18 18,18 12,12 12))
result     | MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
view       | POLYGON((12 12,12 18,18 18,18 12,12 12))
Figure
Geometry figure for visual-st-removeirrelevantpointsforview-02

A line with no segment relevant to the view becomes empty.

Code
SELECT ST_RemoveIrrelevantPointsForView('LINESTRING(0 0,10 0,20 0,30 0)',
ST_MakeEnvelope(12, 12, 18, 18), true);
Вивід растрових зображень
LINESTRING EMPTY

Removing vertices without computing intersections can introduce self-intersections in the result.

Code
WITH data(geom, view) AS (VALUES (
  'POLYGON((0 10,0 0,10 -10,30 0,25 20,10 -5,0 10))'::geometry,
  ST_MakeEnvelope(-5, 1, 20, 12)
))
SELECT geom AS input_geom,
       view AS input_view,
       ST_RemoveIrrelevantPointsForView(geom, view, true) AS result,
       view AS view
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_geom | POLYGON((0 10,0 0,10 -10,30 0,25 20,10 -5,0 10))
input_view | POLYGON((-5 1,-5 12,20 12,20 1,-5 1))
result     | POLYGON((0 10,0 0,30 0,25 20,10 -5,0 10))
view       | POLYGON((-5 1,-5 12,20 12,20 1,-5 1))
Figure
Geometry figure for visual-st-removeirrelevantpointsforview-04

With the default cartesian_hint, the function removes only points known to be irrelevant to the view.

Code
WITH data(geom, view) AS (VALUES (
  'POLYGON((0 30,15 30,30 30,30 0,0 0,0 30))'::geometry,
  ST_MakeEnvelope(12, 12, 18, 18)
))
SELECT geom AS input_geom,
       view AS input_view,
       ST_RemoveIrrelevantPointsForView(geom, view) AS result,
       view AS view
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_geom | POLYGON((0 30,15 30,30 30,30 0,0 0,0 30))
input_view | POLYGON((12 12,12 18,18 18,18 12,12 12))
result     | POLYGON((0 30,30 30,30 0,0 0,0 30))
view       | POLYGON((12 12,12 18,18 18,18 12,12 12))
Figure
Geometry figure for visual-st-removeirrelevantpointsforview-05

Див. також

ST_ClipByBox2D, ST_Intersection


Назва

ST_RemoveSmallParts — Видаляє невеликі частини (кільця полігону або лінії) геометрії.

Короткий огляд

geometry ST_RemoveSmallParts(geometry geom, double precision minSizeX, double precision minSizeY);

Опис

Повертає geometry без дрібних частин (зовнішніх або внутрішніх кілець полігону або лінійних елементів).

Ця функція може бути використана як попередній етап обробки для створення спрощених карт, наприклад, для видалення невеликих островів або отворів.

Він оцінює тільки геометрії типу (MULTI)POLYGON і (MULTI)LINESTRING. Інші геометрії залишаються без змін.

Якщо minSizeX більше 0, частини сортуються, якщо їх ширина менше minSizeX.

Якщо minSizeY більше 0, деталі сортуються, якщо їх висота менше minSizeY.

Обидва параметри minSizeX та minSizeY вимірюються в одиницях системи координат геометрії.

Для типів полігонів оцінка проводиться окремо для кожного кільця, що може призвести до одного з наступних результатів:

  • оригінальна геометрія,

  • POLYGON з усіма кільцями з меншою кількістю вершин,

  • POLYGON зі зменшеною кількістю внутрішніх кілець (можливо, з меншою кількістю вершин),

  • POLYGON EMPTY, або

  • MULTIPOLYGON зі зменшеною кількістю полігонів (можливо, з меншою кількістю внутрішніх кілець або вершин), або

  • MULTIPOLYGON EMPTY.

Для типів лінійних рядків оцінка виконується для кожної лінії, що може призвести до одного з таких результатів:

  • оригінальна геометрія,

  • LINESTRING зі зменшеною кількістю вершин,

  • LINESTRING EMPTY,

  • MULTILINESTRING зі зменшеною кількістю лінійних ланцюгів (які можуть мати менше вершин), або

  • MULTILINESTRING EMPTY.

Доступність: 3.5.0

Приклади

Code
SELECT ST_RemoveSmallParts('MULTIPOLYGON(
    ((60 160,120 160,120 220,60 220,60 160),(70 170,70 210,110 210,110 170,70 170)),
    ((85 75,155 75,155 145,85 145,85 75)),
    ((50 110,70 110,70 130,50 130,50 110)))',
    50, 50);
Вивід растрових зображень
MULTIPOLYGON(((60 160,120 160,120 220,60 220,60 160)),((85 75,155 75,155 145,85 145,85 75)))
Figure
Geometry figure for visual-st-removesmallparts-01
Code
SELECT ST_RemoveSmallParts('LINESTRING(10 10,20 20)',
    50, 50);
Вивід растрових зображень
LINESTRING EMPTY

Назва

ST_Reverse — Повернути геометрію з оберненим порядком вершин.

Короткий огляд

geometry ST_Reverse(geometry g1);

Опис

Може використовуватися для будь-якої геометрії та змінює порядок вершин.

Покращено: 2.4.0 додано підтримку кривих.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

Code
WITH data(geom) AS (VALUES (
  ST_MakeLine(ST_Point(1, 2), ST_Point(1, 10))
))
SELECT geom AS input_line,
       ST_Reverse(geom) AS reversed_line
FROM data;
Вивід растрових зображень
input_line      |    reversed_line
----------------------+----------------------
 LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)
(1 row)
Figure
Geometry figure for visual-st-reverse-01

Назва

ST_Segmentize — Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.

Короткий огляд

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

Опис

Повертає змінену геометрію/географію, в якій немає сегментів довжиною більше max_segment_length. Довжина обчислюється у 2D. Сегменти завжди розділяються на підсегменти однакової довжини.

  • Для геометрії максимальна довжина вимірюється в одиницях просторової системи відліку.

  • Для географії максимальна довжина вимірюється в метрах. Відстані обчислюються на сфері. Додані вершини створюються вздовж дуг сферичного великого кола, визначених кінцевими точками відрізків.

[Примітка]

Це тільки скорочує довгі сегменти. Сегменти, довжина яких не перевищує максимальну, не подовжуються.

[Застереження]

Для вхідних даних, що містять довгі сегменти, вказання відносно короткого max_segment_length може призвести до додавання дуже великої кількості вершин. Це може статися ненавмисно, якщо аргумент випадково вказано як кількість сегментів, а не максимальну довжину.

Доступність: 1.2.2

Покращено: 3.0.0 Сегментація геометрії тепер створює підсегменти однакової довжини

Покращено: 2.3.0 Сегментація географії тепер створює підсегменти однакової довжини

Покращено: 2.1.0 додано підтримку географії.

Змінено: 2.1.0 В результаті впровадження підтримки географії використання ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5) спричиняє помилку неоднозначної функції. Вхідні дані потрібно правильно вказати як геометрію або географію. Використовуйте ST_GeomFromText, ST_GeogFromText або перетворення до необхідного типу (наприклад, ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )

Приклади

Сегментація лінії. Довгі сегменти розділяються рівномірно, а короткі сегменти не розділяються.

Code
SELECT ST_Segmentize('MULTILINESTRING((0 0,0 1,0 9),(1 10,1 18))'::geometry,
5);
Вивід растрових зображень
MULTILINESTRING((0 0,0 1,0 5,0 9),(1 10,1 14,1 18))
Figure
Geometry figure for visual-st-segmentize-01

Сегментація полігону:

Code
SELECT ST_Segmentize('POLYGON((0 0,0 8,30 0,0 0))'::geometry,
        10);
Вивід растрових зображень
POLYGON((0 0,0 8,7.5 6,15 4,22.5 2,30 0,20 0,10 0,0 0))
Figure
Geometry figure for visual-st-segmentize-02

Сегментація географічної лінії з використанням максимальної довжини сегмента 2000 кілометрів. Вершини додаються вздовж дуги великого кола, що з'єднує кінцеві точки.

Code
SELECT ST_Segmentize(('LINESTRING (0 0,60 60)'::geography), 2000000);
Вивід растрових зображень
LINESTRING(0 0,4.252632294621186 8.43596525986862,8.69579947419404 16.824093489701564,13.550465473227048 25.107950473646188,19.1066053508691 33.21091076089908,25.779290201459894 41.01711439406505,34.188839517966954 48.337222885886,45.238153936612264 54.84733442373889,60 60)
Figure
Geometry figure for visual-st-segmentize-03

Див. також

ST_LineSubstring


Назва

ST_SetPoint — Замінити точку лінійного об'єкта на задану точку.

Короткий огляд

geometry ST_SetPoint(geometry linestring, integer zerobasedposition, geometry point);

Опис

Замінити точку N лінійного елемента на задану точку. Індекс починається з 0. Негативні індекси рахуються назад, так що -1 є останньою точкою. Це особливо корисно в тригерах, коли потрібно зберегти зв'язки між суглобами при переміщенні однієї вершини.

Доступність: 1.1.0

Оновлено 2.3.0: негативна індексація

This function supports 3d and will not drop the z-index.

Приклади

Change first point in line string from -1 3 to -1 1.

Code
SELECT ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)');
Вивід растрових зображень
LINESTRING(-1 1,-1 3)
Figure
Geometry figure for visual-st-setpoint-01

Change last point in a line string (let's play with 3D linestring this time)

Code
SELECT ST_SetPoint(foo.geom, ST_NumPoints(foo.geom) - 1, 'POINT(-1 1 3)')
FROM (SELECT 'LINESTRING(-1 2 3,-1 3 4,5 6 7)'::geometry As geom) As foo;
Вивід растрових зображень
LINESTRING(-1 2 3,-1 3 4,-1 1 3)
Figure
Geometry figure for visual-st-setpoint-02
Code
SELECT ST_SetPoint(g, -3, p)
FROM ST_GeomFromText('LINESTRING(0 0,1 1,2 2,3 3,4 4)') AS g
    CROSS JOIN ST_PointN(g, 1) as p;
Вивід растрових зображень
LINESTRING(0 0,1 1,0 0,3 3,4 4)
Figure
Geometry figure for visual-st-setpoint-03

Назва

ST_ShiftLongitude — Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.

Короткий огляд

geometry ST_ShiftLongitude(geometry geom);

Опис

Зчитує кожну точку/вершину в геометрії та зміщує її координату довготи з -180..0 на 180..360 і навпаки, якщо вона знаходиться в цих діапазонах. Ця функція є симетричною, тому результатом є представлення даних -180..180 у вигляді 0..360 та представлення даних 0..360 у вигляді -180..180.

[Примітка]

Це корисно тільки для даних з координатами в довготі/широті; наприклад, SRID 4326 (географічна система WGS 84).

[Застереження]

Помилка версії до 1.3.4 заважала цій функції працювати з MULTIPOINT. Версія 1.3.4+ також працює з MULTIPOINT.

This function supports 3d and will not drop the z-index.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN.

ПРИМІТКА: ця функція була перейменована з "ST_Shift_Longitude" у версії 2.2.0

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example performs a forward longitude shift on a single point.

Code
SELECT ST_ShiftLongitude('SRID=4326;POINT(270 0)'::geometry)
Вивід растрових зображень
POINT(-90 0)
Figure
Geometry figure for visual-st-shiftlongitude-01

This example performs a reverse longitude shift on a single point.

Code
SELECT ST_ShiftLongitude('SRID=4326;POINT(-90 0)'::geometry)
Вивід растрових зображень
POINT(270 0)
Figure
Geometry figure for visual-st-shiftlongitude-02

This example shows that LineStrings are shifted only where coordinates require it.

Code
SELECT ST_ShiftLongitude('SRID=4326;LINESTRING(174 12,182 13)'::geometry)
Вивід растрових зображень
LINESTRING(174 12,-178 13)
Figure
Geometry figure for visual-st-shiftlongitude-03

Див. також

ST_WrapX


Назва

ST_WrapX — Оберніть геометрію навколо значення X.

Короткий огляд

geometry ST_WrapX(geometry geom, float8 wrap, float8 move);

Опис

Ця функція розділяє вхідні геометрії, а потім переміщує кожен отриманий компонент, що потрапляє праворуч (для від'ємного значення 'move') або ліворуч (для додатного значення 'move') від заданої лінії 'wrap' у напрямку, визначеному параметром 'move', і нарешті знову об'єднує частини разом.

[Примітка]

Це корисно для "перецентрування" вхідних даних довготи та широти, щоб об'єкти, що представляють інтерес, не з'являлися з одного боку на інший.

Доступність: 2.3.0 вимагає GEOS

This function supports 3d and will not drop the z-index.

Приклади

Move all components whose bounding boxes fall completely to the left of x = 0 by +360.

Code
SELECT ST_WrapX(geom, 0, 360);

Move all components whose bounding boxes fall completely to the left of x = -30 by +360.

Code
SELECT ST_WrapX(geom, -30, 360);

Див. також

ST_ShiftLongitude


Назва

ST_SnapToGrid — Прив'яжіть всі точки вхідної геометрії до регулярної сітки.

Короткий огляд

geometry ST_SnapToGrid(geometry geomA, float originX, float originY, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float size);

geometry ST_SnapToGrid(geometry geomA, geometry pointOrigin, float sizeX, float sizeY, float sizeZ, float sizeM);

Опис

Варіант 1,2,3: Прив'язати всі точки вхідної геометрії до сітки, визначеної її початком і розміром комірки. Видалити послідовні точки, що потрапляють на одну комірку, і в кінцевому підсумку повернути NULL, якщо вихідних точок недостатньо для визначення геометрії заданого типу. Зібрані геометрії в колекції видаляються з неї. Корисно для зменшення точності.

Варіант 4: Введено в версії 1.1.0 — прив'язує всі точки вхідної геометрії до сітки, визначеної її початком (другий аргумент, повинен бути точкою) і розмірами комірок. Вкажіть 0 як розмір для будь-якого виміру, який не потрібно прив'язувати до сітки.

[Примітка]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple).

[Примітка]

До версії 1.1.0 ця функція завжди повертала 2D-геометрію. Починаючи з версії 1.1.0, повернена геометрія матиме ту саму розмірність, що й вхідна, а значення вищих розмірностей залишатимуться незмінними. Використовуйте версію, що приймає другий аргумент геометрії, щоб визначити всі розмірності сітки.

Доступність: 1.0.0RC1

Доступність: 1.1.0 - підтримка Z і M

This function supports 3d and will not drop the z-index.

Приклади

Snap a geometry column to a precision grid of 10^-3.

Code
UPDATE mytable
   SET geom = ST_SnapToGrid(geom, 0.001);

Display how the same grid size rounds a LineString.

Code
SELECT ST_SnapToGrid('LINESTRING(1.1115678 2.123,4.111111 3.2374897,4.11112 3.23748667)'::geometry,
        0.001);
Вивід растрових зображень
LINESTRING(1.112 2.123,4.111 3.237)
Figure
Geometry figure for visual-st-snaptogrid-01

This example snaps a 4D geometry.

Code
SELECT ST_SnapToGrid('LINESTRING(-1.1115678 2.123 2.3456 1.11111,
        4.111111 3.2374897 3.1234 1.1111,-1.11111112 2.123 2.3456 1.1111112)'::geometry,
        'POINT(1.12 2.22 3.2 4.4444)',
        0.1, 0.1, 0.1, 0.01);
Вивід растрових зображень
LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144)
Figure
Geometry figure for visual-st-snaptogrid-02

With a 4D geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps m and z the same.

Code
SELECT ST_SnapToGrid('LINESTRING(-1.1115678 2.123 3 2.3456,
        4.111111 3.2374897 3.1234 1.1111)'::geometry,
       0.01);
Вивід растрових зображень
LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)
Figure
Geometry figure for visual-st-snaptogrid-03

Назва

ST_Snap — Прив'язати сегменти та вершини вхідної геометрії до вершин еталонної геометрії.

Короткий огляд

geometry ST_Snap(geometry input, geometry reference, float tolerance);

Опис

Прив'язує вершини та сегменти геометрії до вершин іншої геометрії. Для контролю місця прив'язки використовується допуск відстані прив'язки. Результатом є геометрія з прив'язаними вершинами. Якщо прив'язка не відбувається, геометрія залишається без змін.

З'єднання однієї геометрії з іншою може підвищити надійність операцій накладання, усуваючи майже збіжні краї (які спричиняють проблеми під час обчислення вузлів і перетинів).

Занадто часте прив'язування може призвести до створення некоректної топології, тому кількість і розташування прив'язаних вершин визначається за допомогою евристичних методів, які визначають, коли прив'язування є безпечним. Однак це може призвести до пропуску деяких потенційних прив'язок.

[Примітка]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple) та валідність (див. ST_IsValid).

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

A MultiPolygon snapped to a LineString at 1.01 times their distance.

Code
SELECT ST_Snap(poly, line, ST_Distance(poly, line)*1.01) AS polysnapped
FROM (SELECT
   ST_GeomFromText('MULTIPOLYGON(
     ((26 125,26 200,126 200,126 125,26 125 ),
      ( 51 150,101 150,76 175,51 150 )),
      (( 151 100,151 200,176 175,151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107,54 84,101 100)') As line
    ) As foo;
Вивід растрових зображень
MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
Figure
Geometry figure for visual-st-snap-01

A MultiPolygon snapped to a LineString at 1.25 times their distance.

Code
SELECT ST_Snap(poly, line, ST_Distance(poly, line)*1.25) AS polysnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
    (( 26 125,26 200,126 200,126 125,26 125 ),
      ( 51 150,101 150,76 175,51 150 )),
      (( 151 100,151 200,176 175,151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107,54 84,101 100)') As line
    ) As foo;
Вивід растрових зображень
MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
Figure
Geometry figure for visual-st-snap-02

The LineString snapped to the original MultiPolygon at 1.01 times their distance.

Code
SELECT ST_Snap(line, poly, ST_Distance(poly, line)*1.01) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     ((26 125,26 200,126 200,126 125,26 125),
      (51 150,101 150,76 175,51 150 )),
      ((151 100,151 200,176 175,151 100)))') As poly,
       ST_GeomFromText('LINESTRING (5 107,54 84,101 100)') As line
    ) As foo;
Вивід растрових зображень
LINESTRING(5 107,26 125,54 84,101 100)
Figure
Geometry figure for visual-st-snap-03

The LineString snapped to the original MultiPolygon at 1.25 times their distance.

Code
SELECT ST_Snap(line, poly, ST_Distance(poly, line)*1.25) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     (( 26 125,26 200,126 200,126 125,26 125 ),
      (51 150,101 150,76 175,51 150 )),
      ((151 100,151 200,176 175,151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107,54 84,101 100)') As line
    ) As foo;
Вивід растрових зображень
LINESTRING(26 125,54 84,101 100)
Figure
Geometry figure for visual-st-snap-04

Див. також

ST_SnapToGrid


Назва

ST_SwapOrdinates — Повертає версію заданої геометрії із заміненими значеннями ординат.

Короткий огляд

geometry ST_SwapOrdinates(geometry geom, cstring ords);

Опис

Повертає версію заданої геометрії із заміненими заданими координатами.

Параметр ords — це 2-символьний рядок, що позначає координати, які потрібно поміняти місцями. Допустимі імена: x, y, z та m.

Доступність: 2.2.0

This method supports Circular Strings and Curves.

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклад

This example scales the M value by 2.

Code
SELECT ST_SwapOrdinates(ST_Scale(ST_SwapOrdinates(g, 'xm'),
      2, 1
    ),
  'xm') FROM ( SELECT 'POINT ZM (0 0 0 2)'::geometry g ) foo;
Вивід растрових зображень
POINT ZM (0 0 0 4)
Figure
Geometry figure for visual-st-swapordinates-01

Див. також

ST_FlipCoordinates

7.6. Перевірка геометрії

Анотація

Ці функції перевіряють, чи геометрії є дійсними відповідно до стандарту OGC SFS. Вони також надають інформацію про характер і місце розташування недійсних елементів. Існує також функція для створення дійсної геометрії з недійсної.

  • ST_IsValid — Перевіряє, чи геометрія має правильну форму в 2D.
  • ST_IsValidDetail — Повертає рядок valid_detail, в якому вказано, чи є геометрія дійсною, а якщо ні, то причина та місце розташування.
  • ST_IsValidReason — Returns text stating if a geometry is valid, or a reason for invalidity.
  • ST_MakeValid — Attempts to make an invalid geometry valid without losing vertices.

Назва

ST_IsValid — Перевіряє, чи геометрія має правильну форму в 2D.

Короткий огляд

boolean ST_IsValid(geometry g);

boolean ST_IsValid(geometry g, integer flags);

Опис

Перевіряє, чи значення ST_Geometry є правильно сформованим і дійсним у 2D відповідно до правил OGC. Для геометрій з 3 і 4 вимірами дійсність все ще перевіряється тільки у 2 вимірах. Для геометрій, які є недійсними, видається повідомлення PostgreSQL NOTICE з детальною інформацією про причини недійсності.

Для версії з параметром flags підтримувані значення задокументовані в ST_IsValidDetailЦя версія не друкує ПОВІДОМЛЕННЯ, що пояснює недійсність.

Більш детальну інформацію про визначення геометричної валідності див. Розділ 4.4, «Перевірка геометрії»

[Примітка]

SQL-MM визначає результат ST_IsValid(NULL) як 0, тоді як PostGIS повертає NULL.

Виконується модулем GEOS.

Версія, що підтримує прапорці, доступна починаючи з 2.0.0.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.9

[Примітка]

Ні специфікації OGC-SFS, ні SQL-MM не містять аргументу прапорця для ST_IsValid. Прапорець є розширенням PostGIS.

Приклади

Code
SELECT ST_IsValid('LINESTRING(0 0,1 1)') As good_line,
ST_IsValid('POLYGON((0 0,1 1,1 2,1 1,0 0))') As bad_poly;
Вивід растрових зображень
NOTICE:  Self-intersection at or near point 0 0
 good_line | bad_poly
-----------+----------
 t         | f
Figure
Geometry figure for visual-st-isvalid-01

Find tables with invalid geometries in registered geometry columns.

Code
CREATE TEMP TABLE invalid_geometry_columns (
    table_name text,
    column_name text,
    invalid_count bigint
);

DO $$
DECLARE
    rec record;
    invalid_count bigint;
BEGIN
    FOR rec IN
        SELECT f_table_schema, f_table_name, f_geometry_column
        FROM geometry_columns
        ORDER BY f_table_schema, f_table_name, f_geometry_column
    LOOP
        EXECUTE format(
            'SELECT count(*) FROM %I.%I WHERE NOT ST_IsValid(%I, 0)',
            rec.f_table_schema,
            rec.f_table_name,
            rec.f_geometry_column
        ) INTO invalid_count;

        IF invalid_count 
> 0 THEN
            INSERT INTO invalid_geometry_columns
            VALUES (
                format('%I.%I', rec.f_table_schema, rec.f_table_name),
                rec.f_geometry_column,
                invalid_count
            );
        END IF;
    END LOOP;
END;
$$;

SELECT * FROM invalid_geometry_columns;

Назва

ST_IsValidDetail — Повертає рядок valid_detail, в якому вказано, чи є геометрія дійсною, а якщо ні, то причина та місце розташування.

Короткий огляд

valid_detail ST_IsValidDetail(geometry geom, integer flags);

Опис

Повертає рядок valid_detail, що містить логічне значення (valid), яке вказує, чи є геометрія дійсною, рядок varchar (reason), що вказує причину, чому вона є недійсною, та геометрію (location), що вказує, де вона є недійсною.

Корисно для поліпшення комбінації ST_IsValid та ST_IsValidReason для створення детального звіту про недійсні геометрії.

Опціональний параметр flags є бітовим полем. Він може мати такі значення:

  • 0: Використовуйте звичайну семантику валідності OGC SFS.

  • 1: Consider certain kinds of self-touching rings (inverted shells and exverted holes) as valid. This is also known as "the ESRI flag", since this is the validity model used by those tools. Note that this is invalid under the OGC model.

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

This example returns the first three rejects from a successful quintuplet experiment.

Code
SELECT gid, reason(ST_IsValidDetail(geom)), location(ST_IsValidDetail(geom)) as location
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
    FROM generate_series(-4,6) x1
    CROSS JOIN generate_series(2,5) y1
    CROSS JOIN generate_series(1,8) z1
    WHERE x1 
> y1*0.5 AND z1 < x1*y1) As e
    INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
    FROM generate_series(-3,6) x1
    CROSS JOIN generate_series(2,5) y1
    CROSS JOIN generate_series(1,10) z1
    WHERE x1 
> y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff) 
> 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;
Вивід растрових зображень
 gid  |      reason       |  location
------+-------------------+-------------
 5330 | Self-intersection | POINT(32 5)
 5340 | Self-intersection | POINT(42 5)
 5350 | Self-intersection | POINT(52 5)

This example reports a valid LineString.

Code
SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');
Вивід растрових зображень
 valid | reason | location
-------+--------+----------
 t     |        |
Figure
Geometry figure for visual-st-isvaliddetail-02

Див. також

ST_IsValid, ST_IsValidReason


Назва

ST_IsValidReason — Returns text stating if a geometry is valid, or a reason for invalidity.

Короткий огляд

text ST_IsValidReason(geometry geomA);

text ST_IsValidReason(geometry geomA, integer flags);

Опис

Returns text stating if a geometry is valid, or if invalid a reason why.

Useful in combination with ST_IsValid to generate a detailed report of invalid geometries and reasons.

Allowed flags are documented in ST_IsValidDetail.

Виконується модулем GEOS.

Доступність: 1.4

Availability: 2.0 version taking flags.

Приклади

This example uses an invalid bow-tie polygon.

Code
SELECT ST_IsValidReason(
    'POLYGON ((100 200,100 100,200 200,
     200 100,100 200))'::geometry) as validity_info;
Вивід растрових зображень
Self-intersection[150 150]
Figure
Geometry figure for visual-st-isvalidreason-01

This example returns the first three rejects from a successful quintuplet experiment.

Code
SELECT gid, ST_IsValidReason(geom) as validity_info
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
    FROM generate_series(-4,6) x1
    CROSS JOIN generate_series(2,5) y1
    CROSS JOIN generate_series(1,8) z1
    WHERE x1 
> y1*0.5 AND z1 < x1*y1) As e
    INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
    FROM generate_series(-3,6) x1
    CROSS JOIN generate_series(2,5) y1
    CROSS JOIN generate_series(1,10) z1
    WHERE x1 
> y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff) 
> 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;
Вивід растрових зображень
 gid  |      validity_info
------+--------------------------
 5330 | Self-intersection [32 5]
 5340 | Self-intersection [42 5]
 5350 | Self-intersection [52 5]

Simple example.

Code
SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');
Вивід растрових зображень
 st_isvalidreason
------------------
 Valid Geometry
Figure
Geometry figure for visual-st-isvalidreason-03

Див. також

ST_IsValid, ST_Summary


Назва

ST_MakeValid — Attempts to make an invalid geometry valid without losing vertices.

Короткий огляд

geometry ST_MakeValid(geometry input);

geometry ST_MakeValid(geometry input, text params);

Опис

The function attempts to create a valid representation of a given invalid geometry without losing any of the input vertices. Valid geometries are returned unchanged.

Supported inputs are: POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS and GEOMETRYCOLLECTIONS containing any mix of them.

In case of full or partial dimensional collapses, the output geometry may be a collection of lower-to-equal dimension geometries, or a geometry of lower dimension.

Single polygons may become multi-geometries in case of self-intersections.

The params argument can be used to supply an options string to select the method to use for building valid geometry. The options string is in the format "method=linework|structure keepcollapsed=true|false". If no "params" argument is provided, the "linework" algorithm will be used as the default.

The "method" key has two values.

  • "linework" is the default algorithm, and builds valid geometries by first extracting all lines, noding that linework together, then building a value output from the linework. The requirement that no vertices are lost can generate complex collections as outputs.

  • "structure" is an algorithm that distinguishes between interior and exterior rings, building new geometry by unioning exterior rings, and then differencing all interior rings. The results tend to be more intuitive, where collapsed lines are discarded in the output.

The "keepcollapsed" key is only valid for the "structure" algorithm, and takes a value of "true" or "false".

  • Keep collapsed of "false" is the default, and means that geometry components that collapse to a lower dimensionality, for example a one-point linestring will be dropped.

  • Keep collapsed of "true" means geometry components that collapse to a lower dimensionality will be retained.

Виконується модулем GEOS.

Доступність: 2.0.0

Enhanced: 2.0.1, speed improvements

Enhanced: 2.1.0, added support for GEOMETRYCOLLECTION and MULTIPOINT.

Enhanced: 3.1.0, added removal of Coordinates with NaN values.

Enhanced: 3.2.0, added algorithm options, 'linework' and 'structure' which requires GEOS >= 3.10.0.

This function supports 3d and will not drop the z-index.

Приклади

Make valid a MultiPolygon of two overlapping polygons using the linework and structure methods.

Code
SELECT ST_MakeValid(before_geom) AS linework,
  ST_MakeValid(before_geom, 'method=structure') AS structure
FROM (SELECT 'MULTIPOLYGON(((186 194,187 194,188 195,189 195,190 195,
191 195,192 195,193 194,194 194,194 193,195 192,195 191,
195 190,195 189,195 188,194 187,194 186,14 6,13 6,12 5,11 5,
10 5,9 5,8 5,7 6,6 6,6 7,5 8,5 9,5 10,5 11,5 12,6 13,6 14,186 194)),
((150 90,149 80,146 71,142 62,135 55,128 48,119 44,110 41,100 40,
90 41,81 44,72 48,65 55,58 62,54 71,51 80,50 90,51 100,
54 109,58 118,65 125,72 132,81 136,90 139,100 140,110 139,
119 136,128 132,135 125,142 118,146 109,149 100,150 90)))'::geometry AS before_geom) AS f;
Вивід растрових зображень
MULTIPOLYGON(((11 5,10 5,9 5,8 5,7 6,6 6,6 7,5 8,5 9,5 10,5 11,5 12,6 13,6 14,56.769 64.769,58 62,64 56,14 6,13 6,12 5,11 5)),((54 71,51 80,50 90,51 100,54 109,58 118,65 125,72 132,81 136,90 139,100 140,110 139,119 136,125.231 133.231,56.769 64.769,54 71)),((186 194,187 194,188 195,189 195,190 195,191 195,192 195,193 194,194 194,194 193,195 192,195 191,195 190,195 189,195 188,194 187,194 186,134 126,128 132,125.231 133.231,186 194)),((135 125,142 118,146 109,149 100,150 90,149 80,146 71,142 62,135 55,128 48,119 44,110 41,100 40,90 41,81 44,72 48,65 55,64 56,134 126,135 125))) | MULTIPOLYGON(((149 80,146 71,142 62,135 55,128 48,119 44,110 41,100 40,90 41,81 44,72 48,65 55,64 56,14 6,13 6,12 5,11 5,10 5,9 5,8 5,7 6,6 6,6 7,5 8,5 9,5 10,5 11,5 12,6 13,6 14,56.769 64.769,54 71,51 80,50 90,51 100,54 109,58 118,65 125,72 132,81 136,90 139,100 140,110 139,119 136,125.231 133.231,186 194,187 194,188 195,189 195,190 195,191 195,192 195,193 194,194 194,194 193,195 192,195 191,195 190,195 189,195 188,194 187,194 186,134 126,135 125,142 118,146 109,149 100,150 90,149 80)))
Figure
Geometry figure for visual-st-makevalid-01

Make valid a MultiPolygon of six overlapping polygons using the linework and structure methods.

Code
SELECT ST_MakeValid(before_geom) AS linework,
  ST_MakeValid(before_geom, 'method=structure') AS structure
FROM (SELECT 'MULTIPOLYGON(((91 50,79 22,51 10,23 22,11 50,23 78,51 90,79 78,91 50)),
      ((91 100,79 72,51 60,23 72,11 100,23 128,51 140,79 128,91 100)),
      ((91 150,79 122,51 110,23 122,11 150,23 178,51 190,79 178,91 150)),
      ((141 50,129 22,101 10,73 22,61 50,73 78,101 90,129 78,141 50)),
      ((141 100,129 72,101 60,73 72,61 100,73 128,101 140,129 128,141 100)),
      ((141 150,129 122,101 110,73 122,61 150,73 178,101 190,129 178,141 150)))'::geometry AS before_geom) AS c;
Вивід растрових зображень
MULTIPOLYGON(((51 110,68.5 117.5,61 100,68.5 82.5,51 90,23 78,21.714 75,11 100,21.714 125,23 122,51 110)),((51 190,76 179.286,73 178,61 150,68.5 132.5,51 140,23 128,21.714 125,11 150,23 178,51 190)),((141 150,130.286 125,129 128,101 140,83.5 132.5,91 150,79 178,76 179.286,101 190,129 178,141 150)),((129 78,101 90,83.5 82.5,91 100,83.5 117.5,101 110,129 122,130.286 125,141 100,130.286 75,129 78)),((101 10,76 20.714,79 22,91 50,83.5 67.5,101 60,129 72,130.286 75,141 50,129 22,101 10)),((11 50,21.714 75,23 72,51 60,68.5 67.5,61 50,73 22,76 20.714,51 10,23 22,11 50)),((83.5 82.5,80.286 75,79 78,76 79.286,83.5 82.5)),((83.5 67.5,76 70.714,79 72,80.286 75,83.5 67.5)),((68.5 67.5,71.714 75,73 72,76 70.714,68.5 67.5)),((68.5 82.5,76 79.286,73 78,71.714 75,68.5 82.5)),((83.5 132.5,80.286 125,79 128,76 129.286,83.5 132.5)),((83.5 117.5,76 120.714,79 122,80.286 125,83.5 117.5)),((68.5 117.5,71.714 125,73 122,76 120.714,68.5 117.5)),((68.5 132.5,76 129.286,73 128,71.714 125,68.5 132.5))) | MULTIPOLYGON(((23 22,11 50,21.714 75,11 100,21.714 125,11 150,23 178,51 190,76 179.286,101 190,129 178,141 150,130.286 125,141 100,130.286 75,141 50,129 22,101 10,76 20.714,51 10,23 22)))
Figure
Geometry figure for visual-st-makevalid-02

Collapsed Geometry Examples

Code
SELECT ST_MakeValid(
'LINESTRING(0 0,0 0)',
'method=structure keepcollapsed=true'
);
Вивід растрових зображень
POINT(0 0)
Figure
Geometry figure for visual-st-makevalid-03
Code
SELECT ST_MakeValid(
'LINESTRING(0 0,0 0)',
'method=structure keepcollapsed=false'
);
Вивід растрових зображень
LINESTRING EMPTY

7.7. Функції просторової системи координат

Анотація

Ці функції працюють із системою просторових координат геометрій, визначеною в таблиці spatial_ref_sys.

  • ST_InverseTransformPipeline — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат, використовуючи обернену функцію визначеного конвеєра перетворення координат.
  • ST_SetSRID — Встановити SRID для геометрії.
  • ST_SRID — Повертає ідентифікатор просторової прив'язки для геометрії.
  • ST_Transform — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ST_TransformPipeline — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат за допомогою визначеного конвеєра перетворення координат.
  • postgis_srs_codes — Повернути список кодів SRS, пов'язаних із зазначеним органом.
  • postgis_srs — Повернути запис метаданих для запитуваного органу та srid.
  • postgis_srs_all — Повернути записи метаданих для кожної системи просторових координат у базовій базі даних Proj.
  • postgis_srs_search — Повернути записи метаданих для проектованих систем координат, області використання яких повністю містять параметр меж.

Назва

ST_InverseTransformPipeline — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат, використовуючи обернену функцію визначеного конвеєра перетворення координат.

Короткий огляд

geometry ST_InverseTransformPipeline(geometry geom, text pipeline, integer to_srid);

Опис

Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат за допомогою визначеного конвеєра перетворення координат, що працює в зворотному напрямку.

Детальні відомості про написання конвеєра перетворення див. у ST_TransformPipeline.

Доступність: 3.4.0

SRID вхідної геометрії ігнорується, а SRID вихідної геометрії буде встановлено на нуль, якщо значення не буде вказано за допомогою опціонального параметра to_srid. При використанні ST_TransformPipeline конвеєр виконується в прямому напрямку. При використанні `ST_InverseTransformPipeline()` конвеєр виконується в зворотному напрямку.

Перетворення за допомогою конвеєрів є спеціалізованою версією ST_Transform. У більшості випадків `ST_Transform` вибере правильні операції для перетворення між системами координат, і його слід вважати кращим варіантом.

Приклади

Змінити WGS 84 long lat на UTM 31N за допомогою перетворення EPSG:16031

This example transforms in the inverse direction.

Code
SELECT ST_InverseTransformPipeline(
        'POINT(426857.9877165967 5427937.523342293)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::16031'
    ) AS wgs_geom;
Вивід растрових зображень
POINT(2 48.99999999999999)
Figure
Geometry figure for visual-st-inversetransformpipeline-01

Приклад GDA2020.

This example uses ST_Transform with automatic selection of a conversion pipeline.

Code
SELECT ST_Transform('SRID=4939;POINT(143.0 -37.0)'::geometry, 7844) AS gda2020_auto;
Вивід растрових зображень
POINT(143.00000635638918 -36.999986706128176)
Figure
Geometry figure for visual-st-inversetransformpipeline-02

Назва

ST_SetSRID — Встановити SRID для геометрії.

Короткий огляд

geometry ST_SetSRID(geometry geom, integer srid);

Опис

Встановлює SRID для геометрії на певне ціле значення. Корисно при побудові обмежувальних рамок для запитів.

[Примітка]

Ця функція жодним чином не трансформує координати геометрії — вона просто встановлює метадані, що визначають просторову систему відліку, в якій, як передбачається, знаходиться геометрія. Використовуйте ST_Transform, якщо ви хочете трансформувати геометрію в нову проекцію.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method supports Circular Strings and Curves.

Приклади

Mark a point as WGS 84 longitude/latitude.

Code
SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611), 4326) AS wgs84long_lat;
Вивід растрових зображень
SRID=4326;POINT(-123.365556 48.428611)
Figure
Geometry figure for visual-st-setsrid-01

Mark a point as WGS 84 longitude/latitude and then transform it to Web Mercator.

Code
SELECT ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611), 4326), 3785) AS sphere_merc;
Вивід растрових зображень
SRID=3785;POINT(-13732990.8753491 6178458.96425423)
Figure
Geometry figure for visual-st-setsrid-02

Назва

ST_SRID — Повертає ідентифікатор просторової прив'язки для геометрії.

Короткий огляд

integer ST_SRID(geometry g1);

Опис

Повертає ідентифікатор просторової прив'язки для ST_Geometry, як визначено в таблиці spatial_ref_sys. Розділ 4.5, «Spatial Reference Systems»

[Примітка]

Таблиця spatial_ref_sys — це таблиця, яка каталогізує всі системи просторових посилань, відомі PostGIS, і використовується для перетворення з однієї системи просторових посилань в іншу. Тому, якщо ви плануєте перетворювати геометрії, важливо перевірити, чи маєте ви правильний ідентифікатор системи просторових посилань.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3: 5.1.5

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)', 4326));
Вивід растрових зображень
st_srid
---------
    4326
(1 row)

Назва

ST_Transform — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.

Короткий огляд

geometry ST_Transform(geometry g1, integer srid);

geometry ST_Transform(geometry geom, text to_proj);

geometry ST_Transform(geometry geom, text from_proj, text to_proj);

geometry ST_Transform(geometry geom, text from_proj, integer to_srid);

Опис

Повертає нову геометрію з координатами, перетвореними в іншу систему просторових координат. Просторова система координат призначення to_srid може бути ідентифікована за допомогою дійсного цілочисельного параметра SRID (тобто вона повинна існувати в таблиці spatial_ref_sys). Як альтернатива, для to_proj та/або from_proj можна використовувати просторову систему координат, визначену як рядок PROJ.4, однак ці методи не є оптимізованими. Якщо просторова система координат призначення виражена рядком PROJ.4 замість SRID, SRID вихідної геометрії буде встановлено на нуль. За винятком функцій з from_proj, вхідні геометрії повинні мати визначений SRID.

ST_Transform часто плутають з ST_SetSRID. ST_Transform фактично змінює координати геометрії з однієї системи просторових координат на іншу, тоді як ST_SetSRID() просто змінює ідентифікатор SRID геометрії.

ST_Transform автоматично вибирає відповідний конвеєр перетворення, враховуючи вихідну та цільову просторові системи координат. Щоб використовувати конкретний метод перетворення, скористайтеся ST_TransformPipeline.

[Примітка]

Вимагає компіляції PostGIS з підтримкою PROJ. Використовуйте PostGIS_Full_Version, щоб підтвердити, що підтримка PROJ скомпільована.

[Примітка]

Якщо використовується більше одного перетворення, корисно мати функціональний індекс для часто використовуваних перетворень, щоб скористатися перевагами використання індексу.

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Покращено: 2.3.0 додано підтримку прямого тексту PROJ.4.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.6

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Змінити геометрію площини штату Массачусетс з американських футів на WGS 84 довгота-широта

Code
SELECT ST_Transform(
  'SRID=2249;POLYGON((743238 2967416,743238 2967450,
    743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
  4326) AS wgs_geom;
Вивід растрових зображень
SRID=4326;POLYGON((-71.1776848522251 42.3902896512903,-71.17768437663261 42.390382947801015,-71.17758443054647 42.390382667791854,-71.17758259272304 42.390289364798825,-71.1776848522251 42.3902896512903))
Figure
Geometry figure for visual-st-transform-01

3D Circular String example.

Code
SELECT ST_Transform('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'::geometry,
    4326);
Вивід растрових зображень
SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512903 1,-71.17768437663261 42.390382947801015 2,
-71.17758443054647 42.390382667791854 3,
-71.17758259272304 42.390289364798825 3,-71.1776848522251 42.3902896512903 4)

    
Figure
Geometry figure for visual-st-transform-02

Приклад створення часткового функціонального індексу. Для таблиць, в яких ви не впевнені, що всі геометрії будуть заповнені, найкраще використовувати частковий індекс, який оминає нульові геометрії, що дозволить заощадити простір і зробити ваш індекс меншим та ефективнішим.

Code
CREATE INDEX idx_geom_26986_parcels
  ON parcels
  USING gist
  (ST_Transform(geom, 26986))
  WHERE geom IS NOT NULL;
    

Приклади використання тексту PROJ.4 для перетворення з використанням власних просторових посилань.

Find intersection of two polygons near the North pole, using a custom Gnomic projection. See http://boundlessgeo.com/2012/02/flattening-the-peel/.

Code
WITH data AS (
  SELECT
    ST_GeomFromText('POLYGON((170 50,170 72,-130 72,-130 50,170 50))', 4326) AS p1,
    ST_GeomFromText('POLYGON((-170 68,-170 90,-141 90,-141 68,-170 68))', 4326) AS p2,
    '+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs'::text AS gnom
)
SELECT ST_Transform(ST_Intersection(ST_Transform(p1, gnom), ST_Transform(p2, gnom)),
  gnom, 4326)
FROM data;
Вивід растрових зображень
POLYGON((-140.9999840290591 73.42768865981984,-141 68,-170 68,-170.0000026915361 74.05492179637055,-140.9999840290591 73.42768865981984))
Figure
Geometry figure for visual-st-transform-03

Налаштування поведінки перетворення

Іноді перетворення координат із зміщенням сітки може завершитися невдачею, наприклад, якщо PROJ.4 не було створено з файлами зміщення сітки або координати не лежать у діапазоні, для якого визначено зміщення сітки. За замовчуванням PostGIS видасть помилку, якщо файл зміщення сітки відсутній, але цю поведінку можна налаштувати для кожного SRID окремо, або шляхом тестування різних значень to_proj тексту PROJ.4, або шляхом зміни значення proj4text в таблиці spatial_ref_sys.

Наприклад, параметр proj4text +datum=NAD87 є скороченою формою для наступного параметра +nadgrids:

Code
+nadgrids=@conus, @alaska, @ntv2_0.gsb, @ntv1_can.dat

Префікс @ означає, що помилка не повідомляється, якщо файли відсутні, але якщо кінець списку досягнуто, а відповідний файл не знайдено (тобто знайдено і перекривається), то видається помилка.

Якщо, навпаки, ви хочете переконатися, що принаймні стандартні файли присутні, але якщо всі файли були проскановані без результату, застосовується нульове перетворення, ви можете використовувати:

Code
+nadgrids=@conus, @alaska, @ntv2_0.gsb, @ntv1_can.dat, null

Файл нульового зсуву сітки є дійсним файлом зсуву сітки, що охоплює весь світ і не застосовує жодного зсуву. Отже, для повного прикладу, якщо ви хочете змінити PostGIS так, щоб перетворення до SRID 4267, які не лежать у правильному діапазоні, не викликали помилку ERROR, ви повинні використати наступне:

Code
UPDATE spatial_ref_sys SET proj4text = '+proj=longlat +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null +no_defs' WHERE srid = 4267;

Назва

ST_TransformPipeline — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат за допомогою визначеного конвеєра перетворення координат.

Короткий огляд

geometry ST_TransformPipeline(geometry g1, text pipeline, integer to_srid);

Опис

Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат за допомогою визначеного конвеєра перетворення координат.

Трубопроводи трансформації визначаються за допомогою будь-якого з наступних форматів рядків:

  • urn:ogc:def:coordinateOperation:AUTHORITY::CODE. Зверніть увагу, що простий рядок EPSG:CODE не ідентифікує координатну операцію однозначно: той самий код EPSG може використовуватися для визначення CRS.

  • Рядок конвеєра PROJ у форматі: +proj=pipeline .... Автоматична нормалізація осей не застосовуватиметься, і за необхідності викликаюча сторона повинна буде додати додатковий крок конвеєра або видалити кроки axisswap.

  • З'єднані операції у формі: urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618.

Доступність: 3.4.0

SRID вхідної геометрії ігнорується, а SRID вихідної геометрії буде встановлено на нуль, якщо значення не буде вказано за допомогою опціонального параметра to_srid. При використанні `ST_TransformPipeline()` конвеєр виконується в прямому напрямку. При використанні ST_InverseTransformPipeline конвеєр виконується в зворотному напрямку.

Перетворення за допомогою конвеєрів є спеціалізованою версією ST_Transform. У більшості випадків `ST_Transform` вибере правильні операції для перетворення між системами координат, і його слід вважати кращим варіантом.

Приклади

Змінити WGS 84 long lat на UTM 31N за допомогою перетворення EPSG:16031

This example transforms in the forward direction.

Code
SELECT
    ST_SetSRID(ST_TransformPipeline(
        'SRID=4326;POINT(2 49)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::16031'
    ), 32631) AS utm_geom;
Вивід растрових зображень
SRID=32631;POINT(426857.9877165967 5427937.523342293)
Figure
Geometry figure for visual-st-transformpipeline-01

This example transforms in the inverse direction.

Code
SELECT
    ST_SetSRID(ST_InverseTransformPipeline(
        'SRID=32631;POINT(426857.9877165967 5427937.523342293)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::16031'
    ), 4326) AS wgs_geom;
Вивід растрових зображень
SRID=4326;POINT(2 48.99999999999999)
Figure
Geometry figure for visual-st-transformpipeline-02

Приклад GDA2020.

This example uses ST_Transform with automatic selection of a conversion pipeline.

Code
SELECT ST_Transform('SRID=4939;POINT(143.0 -37.0)'::geometry, 7844) AS gda2020_auto;
Вивід растрових зображень
POINT(143.00000635638918 -36.999986706128176)
Figure
Geometry figure for visual-st-transformpipeline-03

Using a defined conversion (EPSG:8447)

Code
SELECT
    ST_TransformPipeline(
        'SRID=4939;POINT(143.0 -37.0)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::8447'
    ) AS gda2020_code;
Вивід растрових зображень
POINT(143.0000063280214 -36.999986718287545)

This example uses a PROJ pipeline definition matching EPSG:8447, as returned from projinfo. Any axisswap steps must be removed.

Code
SELECT
    ST_TransformPipeline(
        'SRID=4939;POINT(143.0 -37.0)'::geometry,
        '+proj=pipeline
   +step +proj=unitconvert +xy_in=deg +xy_out=rad
   +step +proj=hgridshift +grids=au_icsm_GDA94_GDA2020_conformal_and_distortion.tif
   +step +proj=unitconvert +xy_in=rad +xy_out=deg'
    ) AS gda2020_pipeline;
Вивід растрових зображень
POINT(143.0000063280214 -36.999986718287545)

Назва

postgis_srs_codes — Повернути список кодів SRS, пов'язаних із зазначеним органом.

Короткий огляд

setof text postgis_srs_codes(text auth_name);

Опис

Повертає набір усіх auth_srid для заданого auth_name.

Доступність: 3.4.0

Версія Proj 6+

Приклади

Перелічіть перші десять кодів, пов'язаних з органом EPSG.

Code
SELECT * FROM postgis_srs_codes('EPSG') ORDER BY 1 LIMIT 10;
Вивід растрових зображень
10156
10157
10158
10160
10162
10163
10164
10165
10166
10167

Назва

postgis_srs — Повернути запис метаданих для запитуваного органу та srid.

Короткий огляд

setof record postgis_srs(text auth_name, text auth_srid);

Опис

Повертає запис метаданих для запитуваного auth_srid для заданого auth_name. Запис буде містити auth_name, auth_srid, srname, srtext, proj4text та кути області використання, point_sw і point_ne.

Доступність: 3.4.0

Версія Proj 6+

Приклади

Отримати метадані для EPSG:3005.

Code
SELECT auth_name, auth_srid, srname,point_sw AS point_sw,point_ne AS point_ne
FROM postgis_srs('EPSG', '3005');
Вивід растрових зображень
-[ RECORD 1 ]-------------------
auth_name | EPSG
auth_srid | 3005
srname    | NAD83 / BC Albers
point_sw  | POINT(-139.04 48.25)
point_ne  | POINT(-114.08 60.01)

Назва

postgis_srs_all — Повернути записи метаданих для кожної системи просторових координат у базовій базі даних Proj.

Короткий огляд

набір записів postgis_srs_all(void);

Опис

Повертає набір усіх записів метаданих у базовій базі даних Proj. Записи матимуть auth_name, auth_srid, srname, srtext, proj4text та кути області використання, point_sw і point_ne.

Доступність: 3.4.0

Версія Proj 6+

Приклади

Отримайте перші 10 записів метаданих з бази даних Proj.

Code
SELECT auth_name, auth_srid, srname FROM postgis_srs_all() ORDER BY auth_name, auth_srid LIMIT 10;
Вивід растрових зображень
auth_name | auth_srid |                                srname
-----------+-----------+----------------------------------------------------------------------
 EPSG      | 10156     | ETRS89 + MSL UK & Ireland VORF08 depth
 EPSG      | 10157     | ETRS89 + CD UK & Ireland VORF08 depth
 EPSG      | 10158     | S34J-IRF
 EPSG      | 10160     | S34J reconstruction east-orientated
 EPSG      | 10162     | JGD2011 / Japan Plane Rectangular CS I + JGD2011 (vertical) height
 EPSG      | 10163     | JGD2011 / Japan Plane Rectangular CS II + JGD2011 (vertical) height
 EPSG      | 10164     | JGD2011 / Japan Plane Rectangular CS III + JGD2011 (vertical) height
 EPSG      | 10165     | JGD2011 / Japan Plane Rectangular CS IV + JGD2011 (vertical) height
 EPSG      | 10166     | JGD2011 / Japan Plane Rectangular CS V + JGD2011 (vertical) height
 EPSG      | 10167     | JGD2011 / Japan Plane Rectangular CS VI + JGD2011 (vertical) height    

7.8. Введення геометрії

Анотація

Ці функції створюють геометричні об'єкти з різних текстових або бінарних форматів.

7.8.1. Well-Known Text (WKT)

  • ST_BdPolyFromText — Побудувати полігон, заданий довільною сукупністю замкнутих лінійних відрізків у вигляді добре відомого текстового представлення MultiLineString.
  • ST_BdMPolyFromText — Побудувати мультиполігон на основі довільної сукупності замкнутих лінійних відрізків у вигляді текстового представлення MultiLineString. Загальновідоме текстове представлення.
  • ST_GeogFromText — Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).
  • ST_GeographyFromText — Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).
  • ST_GeomCollFromText — Створює колекцію Geometry з колекції WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_GeomFromEWKT — Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).
  • ST_GeomFromMARC21 — Приймає географічні дані MARC21/XML як вхідні дані та повертає геометричний об'єкт PostGIS.
  • ST_GeometryFromText — Returns a geometry from Well-Known Text (WKT). Alias for ST_GeomFromText.
  • ST_GeomFromText — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).
  • ST_LineFromText — Створює геометрію з представлення WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_MLineFromText — Повернути вказане значення ST_MultiLineString з представлення WKT.
  • ST_MPointFromText — Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.
  • ST_MPolyFromText — Створює геометрію MultiPolygon з WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_PointFromText — Створює точку Геометрія з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується невідомий.
  • ST_PolygonFromText — Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.
  • ST_WKTToSQL — Returns a geometry from Well-Known Text (WKT). SQL/MM alias for ST_GeomFromText.

Назва

ST_BdPolyFromText — Побудувати полігон, заданий довільною сукупністю замкнутих лінійних відрізків у вигляді добре відомого текстового представлення MultiLineString.

Короткий огляд

geometry ST_BdPolyFromText(text WKT, integer srid);

Опис

Побудувати полігон, заданий довільною сукупністю замкнутих лінійних відрізків у вигляді добре відомого текстового представлення MultiLineString.

[Примітка]

Видає помилку, якщо WKT не є MULTILINESTRING. Видає помилку, якщо вихідні дані є MULTIPOLYGON; у цьому випадку використовуйте ST_BdMPolyFromText або дивіться ST_BuildArea() для підходу, специфічного для postgis.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Виконується модулем GEOS.

Доступність: 1.1.0

Див. також

ST_BuildArea, ST_BdMPolyFromText


Назва

ST_BdMPolyFromText — Побудувати мультиполігон на основі довільної сукупності замкнутих лінійних відрізків у вигляді текстового представлення MultiLineString. Загальновідоме текстове представлення.

Короткий огляд

geometry ST_BdMPolyFromText(text WKT, integer srid);

Опис

Побудувати полігон, заданий довільною сукупністю замкнутих ліній, полігонів, багатолінійних ліній у вигляді добре відомого текстового представлення.

[Примітка]

Видає помилку, якщо WKT не є MULTILINESTRING. Примусово виводить MULTIPOLYGON, навіть якщо результат насправді складається лише з одного POLYGON; використовуйте ST_BdPolyFromText, якщо ви впевнені, що в результаті операції буде отримано один POLYGON, або дивіться ST_BuildArea() для підходу, специфічного для postgis.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Виконується модулем GEOS.

Доступність: 1.1.0

Див. також

ST_BuildArea, ST_BdPolyFromText


Назва

ST_GeogFromText — Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).

Короткий огляд

geography ST_GeogFromText(text EWKT);

Опис

Повертає географічний об'єкт із відомого тексту або розширеного відомого представлення. Якщо не вказано, використовується SRID 4326. Це псевдонім для ST_GeographyFromText. Точки завжди виражаються у форматі довготи та широти.

Приклади

Add a WGS 84 geography point column to a table.

Code
ALTER TABLE sometable ADD COLUMN geog geography(POINT, 4326);

Populate the geography column from longitude and latitude columns.

Code
UPDATE sometable
SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')');

Specify a geography point using EPSG:4267, NAD27.

Code
SELECT ST_GeogFromText('SRID=4267;POINT(-77.0092 38.889588)');
Вивід растрових зображень
SRID=4267;POINT(-77.0092 38.889588)
Figure
Geometry figure for visual-st-geogfromtext-01

Див. також

ST_AsText, ST_GeographyFromText


Назва

ST_GeographyFromText — Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).

Короткий огляд

geography ST_GeographyFromText(text EWKT);

Опис

Повертає географічний об'єкт із загальновідомого текстового представлення. Якщо не вказано, використовується SRID 4326.

Див. також

ST_GeogFromText, ST_AsText


Назва

ST_GeomCollFromText — Створює колекцію Geometry з колекції WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

Короткий огляд

geometry ST_GeomCollFromText(text WKT, integer srid);

geometry ST_GeomCollFromText(text WKT);

Опис

Створює колекцію Geometry з представлення Well-Known-Text (WKT) із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.

OGC SPEC 3.2.6.2 — опція SRID взята з набору вимог відповідності

Повертає null, якщо WKT не є GEOMETRYCOLLECTION

[Примітка]

Якщо ви абсолютно впевнені, що всі ваші геометрії WKT є колекціями, не використовуйте цю функцію. Вона працює повільніше, ніж ST_GeomFromText, оскільки додає додатковий крок перевірки.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification.

Приклади

Code
SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2), LINESTRING(1 2,3 4))');

Див. також

ST_GeomFromText, ST_SRID


Назва

ST_GeomFromEWKT — Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).

Короткий огляд

geometry ST_GeomFromEWKT(text EWKT);

Опис

Створює об'єкт PostGIS ST_Geometry з представлення OGC Extended Well-Known text (EWKT).

[Примітка]

Формат EWKT не є стандартом OGC, а специфічним форматом PostGIS, що включає ідентифікатор просторової системи координат (SRID).

Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Create a LineString with SRID 4269.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)') AS geom;
Вивід растрових зображень
geometry_type | srid
---------------+------
 ST_LineString | 4269
(1 row)

Create a MultiLineString with SRID 4269.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))') AS geom;
Вивід растрових зображень
geometry_type    | srid
---------------------+------
 ST_MultiLineString  | 4269
(1 row)

Create a Point with SRID 4269.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)') AS geom;
Вивід растрових зображень
geometry_type | srid
---------------+------
 ST_Point      | 4269
(1 row)

Create a Polygon with SRID 4269.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))') AS geom;
Вивід растрових зображень
geometry_type | srid
---------------+------
 ST_Polygon    | 4269
(1 row)

Create a MultiPolygon with SRID 4269.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 42.3152774590236,
-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,
-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,
-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,
-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,
-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,
-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,
-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,
-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,
-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,
-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,
-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,
-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,
-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,
-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,
-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,
-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,
-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,
-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,
-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,
-71.1031880899493 42.3152774590236)),
((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,
-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))') AS geom;
Вивід растрових зображень
geometry_type   | srid
-------------------+------
 ST_MultiPolygon   | 4269
(1 row)

Create a 3D CircularString without an SRID.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)') AS geom;
Вивід растрових зображень
geometry_type    | srid
--------------------+------
 ST_CircularString  | 0
(1 row)

Create a PolyhedralSurface without an SRID.

Code
SELECT ST_GeometryType(geom) AS geometry_type, ST_SRID(geom) AS srid
FROM ST_GeomFromEWKT('POLYHEDRALSURFACE(
    ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
    ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
    ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
    ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
    ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
    ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)') AS geom;
Вивід растрових зображень
geometry_type       | srid
--------------------------+------
 ST_PolyhedralSurface     | 0
(1 row)

Див. також

ST_AsEWKT, ST_GeomFromText


Назва

ST_GeomFromMARC21 — Приймає географічні дані MARC21/XML як вхідні дані та повертає геометричний об'єкт PostGIS.

Короткий огляд

geometry ST_GeomFromMARC21 ( text marcxml );

Опис

Ця функція створює геометрію PostGIS з запису MARC21/XML, який може містити POINT або POLYGON. У разі наявності декількох географічних даних в одному записі MARC21/XML, буде повернуто MULTIPOINT або MULTIPOLYGON. Якщо запис містить змішані типи геометрії, буде повернуто GEOMETRYCOLLECTION. Повертає NULL, якщо запис MARC21/XML не містить географічних даних (поле даних: 034).

Підтримувані версії LOC MARC21/XML:

Доступність: 3.3.0, вимагає libxml2 2.6+

[Примітка]

Кодовані картографічні математичні дані MARC21/XML наразі не надають жодних засобів для опису просторової системи координат закодованих координат, тому ця функція завжди повертатиме геометрію з SRID 0.

[Примітка]

Повернуті геометрії POLYGON завжди будуть орієнтовані за годинниковою стрілкою.

Приклади

Перетворення географічних даних MARC21/XML, що містять один POINT, закодований як hddd.dddddd

Code
SELECT ST_GeomFromMARC21(
'<record xmlns="http://www.loc.gov/MARC21/slim">
    <leader
>00000nz a2200000nc 4500</leader>
    <controlfield tag="001"
>040277569</controlfield>
    <datafield tag="034" ind1=" " ind2=" ">
        <subfield code="d"
>W004.500000</subfield>
        <subfield code="e"
>W004.500000</subfield>
        <subfield code="f"
>N054.250000</subfield>
        <subfield code="g"
>N054.250000</subfield>
    </datafield>
</record
>'
);
Вивід растрових зображень
POINT(-4.5 54.25)
Figure
Geometry figure for visual-st-geomfrommarc21-01

Перетворення географічних даних MARC21/XML, що містять один POLYGON, закодований як hdddmmss

Code
SELECT ST_GeomFromMARC21(
'<record xmlns="http://www.loc.gov/MARC21/slim">
    <leader
>01062cem a2200241 a 4500</leader>
    <controlfield tag="001"
>   84696781 </controlfield>
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a"
>a</subfield>
        <subfield code="b"
>50000</subfield>
        <subfield code="d"
>E0130600</subfield>
        <subfield code="e"
>E0133100</subfield>
        <subfield code="f"
>N0523900</subfield>
        <subfield code="g"
>N0522300</subfield>
    </datafield>
</record
>'
);
Вивід растрових зображень
POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65))
Figure
Geometry figure for visual-st-geomfrommarc21-02

Перетворення географічних даних MARC21/XML, що містять POLYGON та POINT:

Code
SELECT ST_GeomFromMARC21(
'<record xmlns="http://www.loc.gov/MARC21/slim">
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a"
>a</subfield>
        <subfield code="b"
>50000</subfield>
        <subfield code="d"
>E0130600</subfield>
        <subfield code="e"
>E0133100</subfield>
        <subfield code="f"
>N0523900</subfield>
        <subfield code="g"
>N0522300</subfield>
    </datafield>
    <datafield tag="034" ind1=" " ind2=" ">
        <subfield code="d"
>W004.500000</subfield>
        <subfield code="e"
>W004.500000</subfield>
        <subfield code="f"
>N054.250000</subfield>
        <subfield code="g"
>N054.250000</subfield>
    </datafield>
</record
>'
);
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65)), POINT(-4.5 54.25))
Figure
Geometry figure for visual-st-geomfrommarc21-03

Див. також

ST_AsMARC21


Назва

ST_GeometryFromText — Returns a geometry from Well-Known Text (WKT). Alias for ST_GeomFromText.

Короткий огляд

geometry ST_GeometryFromText(text WKT);

geometry ST_GeometryFromText(text WKT, integer srid);

Опис

This function is an alias for ST_GeomFromText and provides the same signatures.

Доступність: 1.2.2

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.4

Див. також

ST_GeomFromText


Назва

ST_GeomFromText — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).

Короткий огляд

geometry ST_GeomFromText(text WKT);

geometry ST_GeomFromText(text WKT, integer srid);

Опис

Створює об'єкт PostGIS ST_Geometry на основі текстового представлення OGC Well-Known.

[Примітка]

Існує два варіанти функції ST_GeomFromText. Перший не приймає SRID і повертає геометрію без визначеної системи просторових координат (SRID=0). Другий приймає SRID як другий аргумент і повертає геометрію, яка включає цей SRID як частину своїх метаданих.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2 - опція SRID належить до набору вимог відповідності.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.4

This method supports Circular Strings and Curves.

[Примітка]

Хоча ST_MakePoint не відповідає стандарту OGC, він працює швидше, ніж ST_GeomFromText і ST_PointFromText. Він також простіший у використанні для числових значень координат. ST_Point — це інший варіант, схожий за швидкістю на ST_MakePoint і сумісний з OGC, але підтримує тільки 2D-точки.

Змінено: 2.0.0 У попередніх версіях PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') було дозволено. Тепер це є некоректним у PostGIS 2.0.0 для кращої відповідності стандартам SQL/MM. Тепер це слід писати як ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')

Приклади

Create a LineString with SRID 0.

Code
SELECT ST_SRID(ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)'));
Вивід растрових зображень
0
Figure
Geometry figure for st-geomfromtext-linestring-srid0

Create the same LineString with SRID 4269.

Code
SELECT ST_SRID(ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)', 4269));
Вивід растрових зображень
4269
Figure
Geometry figure for st-geomfromtext-linestring-srid4269

Create a MultiLineString.

Code
SELECT ST_GeometryType(ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))'));
Вивід растрових зображень
ST_MultiLineString
Figure
Geometry figure for st-geomfromtext-multilinestring

Create a Point.

Code
SELECT ST_GeometryType(ST_GeomFromText('POINT(-71.064544 42.28787)'));
Вивід растрових зображень
ST_Point

Create a Polygon.

Code
SELECT ST_GeometryType(ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))'));
Вивід растрових зображень
ST_Polygon
Figure
Geometry figure for st-geomfromtext-polygon

Create a MultiPolygon with SRID 4326.

Code
SELECT ST_GeometryType(ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236,
-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,
-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,
-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,
-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,
-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,
-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,
-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,
-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,
-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,
-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,
-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,
-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,
-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,
-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,
-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,
-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,
-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,
-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,
-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,
-71.1031880899493 42.3152774590236)),
((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,
-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))', 4326));
Вивід растрових зображень
ST_MultiPolygon
Figure
Geometry figure for st-geomfromtext-multipolygon

Create a CircularString.

Code
SELECT ST_GeometryType(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
Вивід растрових зображень
ST_CircularString
Figure
Geometry figure for st-geomfromtext-circularstring

Назва

ST_LineFromText — Створює геометрію з представлення WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

Короткий огляд

geometry ST_LineFromText(text WKT);

geometry ST_LineFromText(text WKT, integer srid);

Опис

Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0. Якщо переданий WKT не є LINESTRING, повертається null.

[Примітка]

OGC SPEC 3.2.6.2 — необов'язковий SRID взято з набору вимог відповідності.

[Примітка]

Якщо ви знаєте, що всі ваші геометрії є LINESTRINGS, ефективніше просто використовувати ST_GeomFromText. Це просто викликає ST_GeomFromText і додає додаткову перевірку, що він повертає лінію.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 7.2.8

Приклади

Code
SELECT ST_LineFromText('LINESTRING(1 2,3 4)') AS aline,
ST_LineFromText('POINT(1 2)') IS NULL AS null_return;
Вивід растрових зображень
aline                 | null_return
------------------------------------
LINESTRING(1 2,3 4)  | t
                
Figure
Geometry figure for visual-st-linefromtext-01

Див. також

ST_GeomFromText


Назва

ST_MLineFromText — Повернути вказане значення ST_MultiLineString з представлення WKT.

Короткий огляд

geometry ST_MLineFromText(text WKT, integer srid);

geometry ST_MLineFromText(text WKT);

Опис

Створює геометрію з добре відомого тексту (WKT) із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

OGC SPEC 3.2.6.2 — опція SRID взята з набору вимог відповідності

Повертає null, якщо WKT не є MULTILINESTRING

[Примітка]

Якщо ви абсолютно впевнені, що всі ваші геометрії WKT є точками, не використовуйте цю функцію. Вона працює повільніше, ніж ST_GeomFromText, оскільки додає додатковий крок перевірки.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 9.4.4

Приклади

Code
SELECT ST_MLineFromText('MULTILINESTRING((1 2,3 4),(4 5,6 7))');

Див. також

ST_GeomFromText


Назва

ST_MPointFromText — Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.

Короткий огляд

geometry ST_MPointFromText(text WKT, integer srid);

geometry ST_MPointFromText(text WKT);

Опис

Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується значення 0.

OGC SPEC 3.2.6.2 — опція SRID взята з набору вимог відповідності

Повертає null, якщо WKT не є MULTIPOINT

[Примітка]

Якщо ви абсолютно впевнені, що всі ваші геометрії WKT є точками, не використовуйте цю функцію. Вона працює повільніше, ніж ST_GeomFromText, оскільки додає додатковий крок перевірки.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. 3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 9.2.4

Приклади

Code
SELECT ST_MPointFromText('MULTIPOINT((1 2),(3 4))');
SELECT ST_MPointFromText('MULTIPOINT((-70.9590 42.1180),(-70.9611 42.1223))', 4326);

Див. також

ST_GeomFromText


Назва

ST_MPolyFromText — Створює геометрію MultiPolygon з WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

Короткий огляд

geometry ST_MPolyFromText(text WKT, integer srid);

geometry ST_MPolyFromText(text WKT);

Опис

Створює багатокутник з WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

OGC SPEC 3.2.6.2 — опція SRID взята з набору вимог відповідності

Видає помилку, якщо WKT не є MULTIPOLYGON

[Примітка]

Якщо ви абсолютно впевнені, що всі ваші геометрії WKT є багатокутниками, не використовуйте цю функцію. Вона працює повільніше, ніж ST_GeomFromText, оскільки додає додатковий крок перевірки.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 9.6.4

Приклади

Create a 3D MultiPolygon with an interior ring and SRID 0.

Code
SELECT ST_MPolyFromText(
    'MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),
                   (5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))'
);
Вивід растрових зображень
MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))
Figure
Geometry figure for visual-st-mpolyfromtext-01

Create a MultiPolygon with SRID 4326.

Code
SELECT ST_MPolyFromText(
    'MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.9765 42.0872,
      -70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,
      -70.9758 42.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,
      -70.9756 42.0906,-70.9753 42.0907,-70.9753 42.0917,-70.9757 42.0924,
      -70.9755 42.0928,-70.9755 42.0942,-70.9751 42.0948,-70.9755 42.0953,
      -70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.9767 42.0987,
      -70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,
      -70.977 42.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,
      -70.9775 42.1042,-70.9773 42.1043,-70.9776 42.1043,-70.9778 42.1048,
      -70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,
      -70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,
      -70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,
      -70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,
      -70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273,-70.9408 42.1513,
      -70.9315 42.1165,-70.916 42.1002)))',
    4326
);
Вивід растрових зображень
SRID=4326;MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.9765 42.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,-70.9758 42.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.9753 42.0907,-70.9753 42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.9751 42.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.9767 42.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,-70.977 42.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.9773 42.1043,-70.9776 42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,-70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273,-70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))
Figure
Geometry figure for visual-st-mpolyfromtext-02

Див. також

ST_GeomFromText, ST_SRID


Назва

ST_PointFromText — Створює точку Геометрія з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується невідомий.

Короткий огляд

geometry ST_PointFromText(text WKT);

geometry ST_PointFromText(text WKT, integer srid);

Опис

Створює об'єкт точки PostGIS ST_Geometry з текстового представлення OGC Well-Known. Якщо SRID не вказано, за замовчуванням використовується невідоме значення (наразі 0). Якщо геометрія не є представленням точки WKT, повертає null. Якщо WKT повністю недійсне, видає помилку.

[Примітка]

Існує 2 варіанти функції ST_PointFromText, перший не приймає SRID і повертає геометрію без визначеної системи просторових координат. Другий приймає ідентифікатор просторової координатної системи як другий аргумент і повертає ST_Geometry, що включає цей srid як частину своїх метаданих. SRID повинен бути визначений у таблиці spatial_ref_sys.

[Примітка]

Якщо ви абсолютно впевнені, що всі ваші геометрії WKT є точками, не використовуйте цю функцію. Вона працює повільніше, ніж ST_GeomFromText, оскільки додає додатковий крок перевірки. Якщо ви створюєте точки з координат довготи та широти і для вас важливіша продуктивність та точність, ніж відповідність OGC, використовуйте ST_MakePointабо псевдонім, що відповідає OGC ST_Point.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2 - опція SRID належить до набору вимог відповідності.

This method implements the SQL/MM specification. SQL-MM 3: 6.1.8

Приклади

Create a point with the default SRID 0.

Code
SELECT ST_PointFromText('POINT(-71.064544 42.28787)');
Вивід растрових зображень
POINT(-71.064544 42.28787)
Figure
Geometry figure for visual-st-pointfromtext-01

Create a point with SRID 4326.

Code
SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);
Вивід растрових зображень
SRID=4326;POINT(-71.064544 42.28787)
Figure
Geometry figure for visual-st-pointfromtext-02

Назва

ST_PolygonFromText — Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.

Короткий огляд

geometry ST_PolygonFromText(text WKT);

geometry ST_PolygonFromText(text WKT, integer srid);

Опис

Створює геометрію з WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0. Повертає null, якщо WKT не є полігоном.

OGC SPEC 3.2.6.2 — опція SRID взята з набору вимог відповідності

[Примітка]

Якщо ви абсолютно впевнені, що всі ваші геометрії WKT є полігонами, не використовуйте цю функцію. Вона працює повільніше, ніж ST_GeomFromText, оскільки додає додатковий крок перевірки.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 8.3.6

Приклади

The result is returned as a native geometry. The documentation test runner compares that value directly with the readable EWKT shown below and uses the same geometry for the generated figure.

Code
SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');
Вивід растрових зображень
POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))
Figure
Geometry figure for visual-st-polygonfromtext-01
Code
SELECT ST_PolygonFromText('POINT(1 2)') IS NULL AS point_is_notpoly;
Вивід растрових зображень
t

Див. також

ST_GeomFromText


Назва

ST_WKTToSQL — Returns a geometry from Well-Known Text (WKT). SQL/MM alias for ST_GeomFromText.

Короткий огляд

geometry ST_WKTToSQL(text WKT);

Опис

This function is the SQL/MM alias for ST_GeomFromText with no SRID argument.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.34

Див. також

ST_GeomFromText

7.8.2. Добре відомий бінарний файл (WKB)

  • ST_GeogFromWKB — Створює географічний екземпляр на основі добре відомого двійкового геометричного представлення (WKB) або розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromEWKB — Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromWKB — Створює екземпляр геометрії з добре відомого двійкового представлення геометрії (WKB) та опціонального SRID.
  • ST_LineFromWKB — Creates a LINESTRING from a WKB representation, optionally using a given SRID.
  • ST_LinestringFromWKB — Creates a LINESTRING from a WKB representation, optionally using a given SRID.
  • ST_PointFromWKB — Створює геометрію з WKB із заданим SRID
  • ST_WKBToSQL — Returns a geometry from Well-Known Binary (WKB). SQL/MM alias for ST_GeomFromWKB without an SRID argument.

Назва

ST_GeogFromWKB — Створює географічний екземпляр на основі добре відомого двійкового геометричного представлення (WKB) або розширеного добре відомого двійкового представлення (EWKB).

Короткий огляд

geography ST_GeogFromWKB(bytea wkb);

Опис

Функція ST_GeogFromWKB бере добре відоме двійкове представлення (WKB) геометрії або PostGIS Extended WKB і створює екземпляр відповідного типу географії. Ця функція виконує роль Geometry Factory в SQL.

Якщо SRID не вказано, за замовчуванням використовується значення 4326 (WGS 84 long lat).

This method supports Circular Strings and Curves.

Приклади

Although bytea rep contains single \, these need to be escaped when inserting into a table.

Code
SELECT ST_GeogFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@');
Вивід растрових зображень
LINESTRING(-113.98 39.198,-113.981 39.195)
Figure
Geometry figure for visual-st-geogfromwkb-01

Див. також

ST_GeogFromText, ST_AsBinary


Назва

ST_GeomFromEWKB — Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).

Короткий огляд

geometry ST_GeomFromEWKB(bytea EWKB);

Опис

Constructs a PostGIS geometry from an Extended Well-Known Binary (EWKB) representation.

[Примітка]

Формат EWKB не є стандартом OGC, а специфічним форматом PostGIS, що включає ідентифікатор просторової системи координат (SRID)

Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example constructs LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) in NAD83 longitude/latitude (SRID 4269) from its EWKB representation.

PostgreSQL escape string syntax (E'...') always interprets backslash escapes. Each backslash therefore has to be doubled so that the bytea input parser receives the octal escapes.

Code
SELECT ST_GeomFromEWKB((
    E'\\001\\002\\000\\000\\040\\255\\020\\000\\000\\003\\000\\000\\000\\344\\112\\075' ||
    E'\\013\\102\\312\\121\\300\\156\\303\\050\\010\\036\\041\\105\\100\\047\\277\\105' ||
    E'\\047\\113\\312\\121\\300\\366\\173\\142\\235\\052\\041\\105\\100\\225\\174\\354' ||
    E'\\056\\120\\312\\121\\300\\160\\231\\323\\145\\061\\041\\105\\100'
)::bytea);
Вивід растрових зображень
0102000020AD10000003000000E44A3D0B42CA51C06EC328081E21454027BF45274BCA51C0F67B629D2A214540957CEC2E50CA51C07099D36531214540
Figure
Geometry figure for visual-st-geomfromewkb-01

With standard_conforming_strings enabled (the default), ordinary string literals preserve backslashes. The same EWKB can therefore be written with a single backslash before each octal byte value.

Code
SELECT ST_GeomFromEWKB((
    '\001\002\000\000\040\255\020\000\000\003\000\000\000\344\112\075' ||
    '\013\102\312\121\300\156\303\050\010\036\041\105\100\047\277\105' ||
    '\047\113\312\121\300\366\173\142\235\052\041\105\100\225\174\354' ||
    '\056\120\312\121\300\160\231\323\145\061\041\105\100'
)::bytea);
Вивід растрових зображень
0102000020AD10000003000000E44A3D0B42CA51C06EC328081E21454027BF45274BCA51C0F67B629D2A214540957CEC2E50CA51C07099D36531214540

Назва

ST_GeomFromWKB — Створює екземпляр геометрії з добре відомого двійкового представлення геометрії (WKB) та опціонального SRID.

Короткий огляд

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

Опис

Функція ST_GeomFromWKB приймає добре відоме двійкове представлення геометрії та ідентифікатор просторової системи відліку (SRID) і створює екземпляр відповідного типу геометрії. Ця функція виконує роль Geometry Factory в SQL. Це альтернативна назва для ST_WKBToSQL.

Якщо SRID не вказано, за замовчуванням використовується значення 0 (Невідомо).

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2 - необов'язковий SRID з набору вимог відповідності

This method implements the SQL/MM specification. SQL-MM 3: 5.1.41

This method supports Circular Strings and Curves.

Приклади

Although bytea rep contains single \, these need to be escaped when inserting into a table. Unless standard_conforming_strings is set to on.

Code
SELECT ST_GeomFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@', 4326);
Вивід растрових зображень
SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)
Figure
Geometry figure for visual-st-geomfromwkb-01
Code
SELECT ST_GeomFromWKB(ST_AsEWKB('POINT(2 5)'::geometry)
  );
Вивід растрових зображень
POINT(2 5)
Figure
Geometry figure for visual-st-geomfromwkb-02

Назва

ST_LineFromWKB — Creates a LINESTRING from a WKB representation, optionally using a given SRID.

Короткий огляд

geometry ST_LineFromWKB(bytea WKB);

geometry ST_LineFromWKB(bytea WKB, integer srid);

Опис

The ST_LineFromWKB function takes a Well-Known Binary (WKB) representation of a geometry and an optional Spatial Reference System ID (SRID), and creates a LINESTRING geometry. It is a type-specific geometry factory in SQL.

If an SRID is not specified, it defaults to 0. NULL is returned if the input bytea does not represent a LINESTRING geometry.

[Примітка]

OGC SPEC 3.2.6.2 — необов'язковий SRID взято з набору вимог відповідності.

[Примітка]

If you know all your geometries are LINESTRINGs, it is more efficient to use ST_GeomFromWKB directly. This function calls ST_GeomFromWKB and adds validation that the result is a LINESTRING.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 7.2.9

Приклади

Code
SELECT ST_LineFromWKB(
    ST_AsBinary(ST_GeomFromText('LINESTRING(1 2,3 4)'))
) AS aline,
ST_LineFromWKB(
    ST_AsBinary(ST_GeomFromText('POINT(1 2)'))
) IS NULL AS null_return;
Вивід растрових зображень
aline                 | null_return
------------------------------------
LINESTRING(1 2,3 4)  | t
                
Figure
Geometry figure for visual-st-linefromwkb-01

Назва

ST_LinestringFromWKB — Creates a LINESTRING from a WKB representation, optionally using a given SRID.

Короткий огляд

geometry ST_LinestringFromWKB(bytea WKB);

geometry ST_LinestringFromWKB(bytea WKB, integer srid);

Опис

The ST_LinestringFromWKB function takes a Well-Known Binary (WKB) representation of a geometry and an optional Spatial Reference System ID (SRID), and creates a LINESTRING geometry. It is an alias for ST_LineFromWKB.

If an SRID is not specified, it defaults to 0. NULL is returned if the input bytea does not represent a LINESTRING geometry.

[Примітка]

OGC SPEC 3.2.6.2 — необов'язковий SRID взято з набору вимог відповідності.

[Примітка]

If you know all your geometries are LINESTRINGs, it is more efficient to use ST_GeomFromWKB directly. This function calls ST_GeomFromWKB and adds validation that the result is a LINESTRING.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3: 7.2.9

Приклади

Code
SELECT ST_LinestringFromWKB(
    ST_AsBinary(ST_GeomFromText('LINESTRING(1 2,3 4)'))
) AS aline,
ST_LinestringFromWKB(
    ST_AsBinary(ST_GeomFromText('POINT(1 2)'))
) IS NULL AS null_return;
Вивід растрових зображень
aline                 | null_return
------------------------------------
LINESTRING(1 2,3 4)  | t
Figure
Geometry figure for visual-st-linestringfromwkb-01

Див. також

ST_GeomFromWKB, ST_LineFromWKB


Назва

ST_PointFromWKB — Створює геометрію з WKB із заданим SRID

Короткий огляд

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

Опис

Функція ST_PointFromWKB приймає добре відоме двійкове представлення геометрії та ідентифікатор просторової системи відліку (SRID) і створює екземпляр відповідного типу геометрії — у цьому випадку геометрії POINT. Ця функція виконує роль Geometry Factory в SQL.

Якщо SRID не вказано, за замовчуванням використовується 0. Якщо вхідний параметр bytea не представляє геометрію POINT, повертається NULL.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2

This method implements the SQL/MM specification. SQL-MM 3: 6.1.9

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_PointFromWKB(ST_AsEWKB('POINT(2 5)'::geometry));
Вивід растрових зображень
POINT(2 5)
Figure
Geometry figure for visual-st-pointfromwkb-01
Code
SELECT ST_PointFromWKB(ST_AsEWKB('LINESTRING(2 5,2 6)'::geometry));
Вивід растрових зображень
null

Див. також

ST_GeomFromWKB, ST_LineFromWKB


Назва

ST_WKBToSQL — Returns a geometry from Well-Known Binary (WKB). SQL/MM alias for ST_GeomFromWKB without an SRID argument.

Короткий огляд

geometry ST_WKBToSQL(bytea WKB);

Опис

This function is the SQL/MM alias for ST_GeomFromWKB with no SRID argument.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.36

Див. також

ST_GeomFromWKB

7.8.3. Інші формати

  • ST_Box2dFromGeoHash — Повернути BOX2D із рядка GeoHash.
  • ST_GeomFromGeoHash — Повернути геометрію з рядка GeoHash.
  • ST_GeomFromGML — Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeomFromGeoJSON — Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS
  • ST_GeomFromKML — Приймає в якості вхідних даних KML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeomFromTWKB — Створює екземпляр геометрії з представлення геометрії TWKB ("Tiny Well-Known Binary").
  • ST_GMLToSQL — Returns a geometry from GML. Alias for ST_GeomFromGML.
  • ST_LineFromEncodedPolyline — Створює LineString з закодованої полілінії.
  • ST_PointFromGeoHash — Повернути точку з рядка GeoHash.
  • ST_FromFlatGeobufToTable — Створює таблицю на основі структури даних FlatGeobuf.
  • ST_FromFlatGeobuf — Зчитує дані FlatGeobuf.

Назва

ST_Box2dFromGeoHash — Повернути BOX2D із рядка GeoHash.

Короткий огляд

box2d ST_Box2dFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Опис

Повернути BOX2D із рядка GeoHash.

Якщо не вказано precision, ST_Box2dFromGeoHash повертає BOX2D на основі повної точності вхідного рядка GeoHash.

Якщо вказано precision, ST_Box2dFromGeoHash використає стільки символів з GeoHash, щоб створити BOX2D. Менші значення точності дають більші BOX2D, а більші значення збільшують точність.

Доступність: 2.1.0

Приклади

Code
SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0');
Вивід растрових зображень
BOX(-115.172816 36.114646,-115.172816 36.114646)
Code
SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0);
Вивід растрових зображень
BOX(-180 -90,180 90)
Code
SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10);
Вивід растрових зображень
BOX(-115.17282128334 36.1146408319473,-115.172810554504 36.1146461963654)

Назва

ST_GeomFromGeoHash — Повернути геометрію з рядка GeoHash.

Короткий огляд

geometry ST_GeomFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Опис

Повернути геометрію з рядка GeoHash. Геометрія буде полігоном, що представляє межі GeoHash.

Якщо не вказано precision, ST_GeomFromGeoHash повертає полігон на основі повної точності вхідного рядка GeoHash.

Якщо вказано precision, ST_GeomFromGeoHash використає стільки символів з GeoHash, щоб створити полігон.

Доступність: 2.1.0

Приклади

The cells are returned together so their relative sizes remain visible in a shared coordinate frame.

Code
SELECT ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4) AS "precision 4", ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 5) AS "precision 5", ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 6) AS "precision 6";
Вивід растрових зображень
-[ RECORD 1 ]----------
precision 4 | POLYGON((-115.3125 36.03515625,-115.3125 36.2109375,-114.9609375 36.2109375,-114.9609375 36.03515625,-115.3125 36.03515625))
precision 5 | POLYGON((-115.1806640625 36.0791015625,-115.1806640625 36.123046875,-115.13671875 36.123046875,-115.13671875 36.0791015625,-115.1806640625 36.0791015625))
precision 6 | POLYGON((-115.1806640625 36.112060546875,-115.1806640625 36.1175537109375,-115.169677734375 36.1175537109375,-115.169677734375 36.112060546875,-115.1806640625 36.112060546875))
Figure
Geometry figure for visual-st-geomfromgeohash-01

Назва

ST_GeomFromGML — Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS

Короткий огляд

geometry ST_GeomFromGML(text geomgml);

geometry ST_GeomFromGML(text geomgml, integer srid);

Опис

Створює об'єкт PostGIS ST_Geometry з представлення OGC GML.

ST_GeomFromGML працює тільки для фрагментів геометрії GML. При спробі використання на всьому документі GML видає помилку.

Підтримувані версії OGC GML:

  • GML 3.2.1 Namespace

  • GML 3.1.1 Simple Features profile SF-2 (з сумісністю з GML 3.1.0 та 3.0.0)

  • GML 2.1.2

Стандарти OGC GML, див.: http://www.opengeospatial.org/standards/gml:

Доступність: 1.5, вимагає libxml2 1.6+

Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN.

Покращено: 2.0.0 додано опціональний параметр srid за замовчуванням.

Enhanced: 3.7.0 support for GML ArcString, curved Ring, and CurvePolygon geometries was introduced.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

GML дозволяє змішані розміри (наприклад, 2D і 3D в одній MultiGeometry). Оскільки геометрії PostGIS цього не дозволяють, ST_GeomFromGML перетворює всю геометрію в 2D, якщо знаходить відсутній розмір Z.

GML підтримує змішані SRS всередині одного MultiGeometry. Оскільки геометрії PostGIS цього не роблять, ST_GeomFromGML у цьому випадку перепроектує всі підгеометрії до кореневого вузла SRS. Якщо для кореневого вузла GML недоступний атрибут srsName, функція видає помилку.

Функція ST_GeomFromGML не є педантичною щодо явного простору імен GML. Ви можете не згадувати його явно для загального використання. Але він необхідний, якщо ви хочете використовувати функцію XLink всередині GML.

Приклади

A single geometry with srsName.

Code
        SELECT ST_AsEWKT(ST_GeomFromGML($$
            <gml:LineString xmlns:gml="http://www.opengis.net/gml"
                    srsName="EPSG:4269">
                <gml:coordinates>
            -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
                </gml:coordinates>
            </gml:LineString>
        $$));

                
Вивід растрових зображень
SRID=4269;LINESTRING(-71.16028 42.258729,-71.160837 42.259112,-71.161143 42.25932)
Figure
Geometry figure for visual-st-geomfromgml-01

XLink usage.

Code
        SELECT ST_AsEWKT(ST_GeomFromGML($$
            <gml:LineString xmlns:gml="http://www.opengis.net/gml"
                    xmlns:xlink="http://www.w3.org/1999/xlink"
                    srsName="EPSG:4269">
        <gml:pointProperty>
            <gml:Point gml:id="p1"
><gml:pos
>-71.16028 42.258729</gml:pos
></gml:Point>
        </gml:pointProperty>
        <gml:pos
>-71.160837 42.259112</gml:pos>
        <gml:pos
>-71.161143 42.258729</gml:pos>
                <gml:pointProperty>
                    <gml:Point xlink:type="simple" xlink:href="#p1"/>
                </gml:pointProperty>
            </gml:LineString>
        $$));

                
Вивід растрових зображень
SRID=4269;LINESTRING(-71.16028 42.258729,-71.160837 42.259112,-71.161143 42.258729,-71.16028 42.258729)
Figure
Geometry figure for visual-st-geomfromgml-02

Polyhedral Surface.

Code
SELECT ST_AsEWKT(ST_GeomFromGML('
<gml:PolyhedralSurface xmlns:gml="http://www.opengis.net/gml">
<gml:polygonPatches>
  <gml:PolygonPatch>
    <gml:exterior>
      <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
    <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
    <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
    <gml:LinearRing
><gml:posList srsDimension="3"
>1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
    <gml:LinearRing
><gml:posList srsDimension="3"
>0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
    <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface
>'));
Вивід растрових зображень
POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))
Figure
Geometry figure for visual-st-geomfromgml-03

Назва

ST_GeomFromGeoJSON — Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS

Короткий огляд

geometry ST_GeomFromGeoJSON(text geomjson);

geometry ST_GeomFromGeoJSON(json geomjson);

geometry ST_GeomFromGeoJSON(jsonb geomjson);

Опис

Створює об'єкт геометрії PostGIS з представлення GeoJSON.

ST_GeomFromGeoJSON працює тільки для фрагментів JSON Geometry. При спробі використання на всьому документі JSON видається помилка.

Покращено: 3.0.0, якщо не вказано інше, геометрія за замовчуванням аналізується як SRID=4326.

Покращено: версія 2.5.0 тепер підтримує json та jsonb як вхідні дані.

Доступність: 2.0.0 вимагає - JSON-C >= 0.9

[Примітка]

Якщо JSON-C не ввімкнено, замість виводу ви отримаєте повідомлення про помилку. Щоб увімкнути JSON-C, запустіть configure --with-jsondir=/path/to/json-c. Детальніше див. Розділ 2.2.3, «Конфігурація збірки».

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}') AS wkt;
Вивід растрових зображень
POINT(-48.23456 20.12345)
Figure
Geometry figure for visual-st-geomfromgeojson-01

This example creates a 3D LineString.

Code
SELECT ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}') AS wkt;
Вивід растрових зображень
LINESTRING Z (1 2 3,4 5 6,7 8 9)
Figure
Geometry figure for visual-st-geomfromgeojson-02

Назва

ST_GeomFromKML — Приймає в якості вхідних даних KML-представлення геометрії та видає об'єкт геометрії PostGIS

Короткий огляд

geometry ST_GeomFromKML(text geomkml);

Опис

Constructs a PostGIS geometry from an OGC KML representation.

ST_GeomFromKML працює тільки для фрагментів геометрії KML. При спробі використання на всьому документі KML видається помилка.

Підтримувані версії OGC KML:

  • Простір імен KML 2.2.0

Стандарти OGC KML, див.: http://www.opengeospatial.org/standards/kml:

Доступність: 1.5, вимагає libxml2 2.6+

This function supports 3d and will not drop the z-index.

[Примітка]

ST_GeomFromKML does not support SQL/MM curve geometries.

Приклади

A single LineString geometry.

Code
        SELECT ST_AsEWKT(ST_GeomFromKML($$
            <LineString>
                <coordinates
>-71.1663, 42.2614
                    -71.1667, 42.2616</coordinates>
            </LineString>
        $$));

                
Вивід растрових зображень
SRID=4326;LINESTRING(-71.1663 42.2614,-71.1667 42.2616)
Figure
Geometry figure for visual-st-geomfromkml-01

Назва

ST_GeomFromTWKB — Створює екземпляр геометрії з представлення геометрії TWKB ("Tiny Well-Known Binary").

Короткий огляд

geometry ST_GeomFromTWKB(bytea twkb);

Опис

Функція ST_GeomFromTWKB приймає геометричне представлення TWKB ("Tiny Well-Known Binary") (WKB) і створює екземпляр відповідного типу геометрії.

Приклади

Code
SELECT ST_GeomFromTWKB(ST_AsTWKB('LINESTRING(126 34,127 35)'::geometry));
Вивід растрових зображень
LINESTRING(126 34, 127 35)
Figure
Geometry figure for visual-st-geomfromtwkb-01
Code
SELECT ST_GeomFromTWKB(E'\\x620002f7f40dbce4040105');
Вивід растрових зображень
LINESTRING(-113.98 39.198,-113.981 39.195)
Figure
Geometry figure for visual-st-geomfromtwkb-02

Див. також

ST_AsTWKB


Назва

ST_GMLToSQL — Returns a geometry from GML. Alias for ST_GeomFromGML.

Короткий огляд

geometry ST_GMLToSQL(text geomgml);

geometry ST_GMLToSQL(text geomgml, integer srid);

Опис

This function is an alias for ST_GeomFromGML and provides the same signatures.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.50.

Доступність: 1.5, вимагає libxml2 1.6+

Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN.

Покращено: 2.0.0 додано опціональний параметр srid за замовчуванням.

Enhanced: 3.7.0 support for GML ArcString, curved Ring, and CurvePolygon geometries was introduced.


Назва

ST_LineFromEncodedPolyline — Створює LineString з закодованої полілінії.

Короткий огляд

geometry ST_LineFromEncodedPolyline(text polyline, integer precision=5);

Опис

Створює об'єкт LineString із кодованої полілінії.

Опціональний параметр precision визначає, скільки десяткових знаків буде збережено в кодованій полілінії. Значення повинно бути однаковим при кодуванні та декодуванні, інакше координати будуть неправильними.

Див. http://developers.google.com/maps/documentation/utilities/polylinealgorithm

Доступність: 2.2.0

Приклади

This example creates a LineString from a polyline.

Code
SELECT ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@');
Вивід растрових зображень
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)
Figure
Geometry figure for visual-st-linefromencodedpolyline-01

This example selects a different precision than the one used for polyline encoding.

Code
SELECT ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@', 6);
Вивід растрових зображень
SRID=4326;LINESTRING(-12.02 3.85,-12.095 4.07,-12.6453 4.3252)

    
Figure
Geometry figure for visual-st-linefromencodedpolyline-02

Див. також

ST_AsEncodedPolyline


Назва

ST_PointFromGeoHash — Повернути точку з рядка GeoHash.

Короткий огляд

point ST_PointFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Опис

Повернути точку з рядка GeoHash. Точка представляє центральну точку GeoHash.

Якщо не вказано precision, ST_PointFromGeoHash повертає точку на основі повної точності вхідного рядка GeoHash.

Якщо вказано precision, ST_PointFromGeoHash використає стільки символів з GeoHash, скільки потрібно для створення точки.

Доступність: 2.1.0

Приклади

Code
SELECT ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0');
Вивід растрових зображень
POINT(-115.172816 36.114646)
Figure
Geometry figure for visual-st-pointfromgeohash-01
Code
SELECT ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4);
Вивід растрових зображень
POINT(-115.13671875 36.123046875)
Figure
Geometry figure for visual-st-pointfromgeohash-02
Code
SELECT ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10);
Вивід растрових зображень
POINT(-115.172815918922 36.1146435141563)
Figure
Geometry figure for visual-st-pointfromgeohash-03

Назва

ST_FromFlatGeobufToTable — Створює таблицю на основі структури даних FlatGeobuf.

Короткий огляд

void ST_FromFlatGeobufToTable(text schemaname, text tablename, bytea FlatGeobuf input data);

Опис

Створює таблицю на основі структури даних FlatGeobuf. (http://flatgeobuf.org).

schema Ім'я схеми.

table Ім'я таблиці.

data Введіть дані FlatGeobuf.

Доступність: 3.2.0


Назва

ST_FromFlatGeobuf — Зчитує дані FlatGeobuf.

Короткий огляд

setof anyelement ST_FromFlatGeobuf(anyelement Table reference, bytea FlatGeobuf input data);

Опис

Читає дані FlatGeobuf (http://flatgeobuf.org). ПРИМІТКА: PostgreSQL bytea не може перевищувати 1 ГБ.

tabletype посилання на тип таблиці.

data вхідні дані FlatGeobuf.

Доступність: 3.2.0

7.9. Вивід геометрії

Анотація

Ці функції перетворюють геометричні об'єкти в різні текстові або двійкові формати.

7.9.1. Well-Known Text (WKT)

  • ST_AsEWKT — Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsText — Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.

Назва

ST_AsEWKT — Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.

Короткий огляд

text ST_AsEWKT(geometry g1);

text ST_AsEWKT(geometry g1, integer maxdecimaldigits=15);

text ST_AsEWKT(geography g1);

text ST_AsEWKT(geography g1, integer maxdecimaldigits=15);

Опис

Повертає добре відоме текстове представлення геометрії з префіксом SRID. Опціональний аргумент maxdecimaldigits може використовуватися для зменшення максимальної кількості десяткових цифр після плаваючої коми, що використовуються у вихідних даних (за замовчуванням — 15).

Для виконання зворотного перетворення представлення EWKT у геометрію PostGIS використовуйте ST_GeomFromEWKT.

[Застереження]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

[Примітка]

Специфікація WKT не включає SRID. Щоб отримати формат OGC WKT, використовуйте ST_AsText.

[Застереження]

Формат WKT не зберігає точність, тому щоб запобігти обрізанню плаваючої точки, для передачі використовуйте формат ST_AsBinaryабо ST_AsEWKB.

Покращено: 3.1.0 підтримка опціонального параметра точності.

Покращено: 2.0.0 додано підтримку географії, багатогранних поверхонь, трикутників і TIN.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT ST_AsEWKT('0103000020e61000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000'::geometry);
Вивід растрових зображень
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
Figure
Geometry figure for visual-st-asewkt-01
Code
SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018E20A4100000000485F024100000000000000400000000018E20A4100000000305C02410000000000000840');
Вивід растрових зображень
CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)
Figure
Geometry figure for visual-st-asewkt-02

Назва

ST_AsText — Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.

Короткий огляд

text ST_AsText(geometry g1);

text ST_AsText(geometry g1, integer maxdecimaldigits = 15);

text ST_AsText(geography g1);

text ST_AsText(geography g1, integer maxdecimaldigits = 15);

Опис

Повертає представлення геометрії/географії у форматі OGC Well-Known Text (WKT). Опціональний аргумент maxdecimaldigits може використовуватися для обмеження кількості цифр після десяткової крапки у вихідних координатах (за замовчуванням — 15).

Для виконання зворотного перетворення представлення WKT в геометрію PostGIS використовуйте ST_GeomFromText.

[Примітка]

Стандартне представлення OGC WKT не включає SRID. Щоб включити SRID як частину вихідного представлення, використовуйте нестандартну функцію PostGIS ST_AsEWKT

[Застереження]

Текстове представлення чисел у WKT може не зберігати повну точність з плаваючою комою. Щоб забезпечити повну точність зберігання або передачі даних, найкраще використовувати формат Well-Known Binary (WKB) (див. ST_AsBinaryта maxdecimaldigits).

[Застереження]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

Доступність: 1.5 — додано підтримку географії.

Покращено: 2.5 — додано опційний параметр точності.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3: 5.1.25

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_AsText('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000');
Вивід растрових зображень
POLYGON((0 0,0 1,1 1,1 0,0 0))
Figure
Geometry figure for visual-st-astext-01

Повна точність виводу є стандартною настройкою.

Code
SELECT ST_AsText('POINT(111.1111111 1.1111111)'::geometry);
Вивід растрових зображень
POINT(111.1111111 1.1111111)

Аргумент maxdecimaldigits можна використовувати для обмеження точності виводу.

Code
SELECT ST_AsText('POINT(111.1111111 1.1111111)'::geometry, 2);
Вивід растрових зображень
POINT(111.11 1.11)

7.9.2. Добре відомий бінарний файл (WKB)

  • ST_AsBinary — Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsEWKB — Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.
  • ST_AsHEXEWKB — Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR).

Назва

ST_AsBinary — Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.

Короткий огляд

bytea ST_AsBinary(geometry g1);

bytea ST_AsBinary(geometry g1, text NDR_or_XDR);

bytea ST_AsBinary(geography g1);

bytea ST_AsBinary(geography g1, text NDR_or_XDR);

Опис

Повертає представлення геометрії у форматі OGC/ISO Well-Known Binary (WKB). Перший варіант функції за замовчуванням використовує кодування, що відповідає ендіану сервера. Другий варіант функції приймає текстовий аргумент, що визначає кодування ендіана: 'NDR' для little-endian або 'XDR' для big-endian. Введення невідомих аргументів призведе до виведення little-endian.

Формат WKB корисний для читання геометричних даних з бази даних та збереження повної числової точності. Це дозволяє уникнути округлення точності, яке може відбуватися у текстових форматах, таких як WKT.

Для виконання зворотного перетворення WKB в геометрію PostGIS використовуйте ST_GeomFromWKB.

[Примітка]

Формат OGC/ISO WKB не включає SRID. Щоб отримати формат EWKB, який включає SRID, використовуйте ST_AsEWKB

[Примітка]

PostgreSQL за замовчуванням виводить значення bytea у шістнадцятковому кодуванні. Якщо ваші графічні інструменти вимагають старого способу роботи, то встановіть у базі даних SET bytea_output=“escape”.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Покращено: 2.0.0 додано підтримку вищих розмірностей координат.

Покращено: 2.0.0 додано підтримку вказання ендіанності для географічних даних.

Доступність: 1.5.0 додано підтримку географії.

Changed: 2.0.0 Inputs to this function can not be unknown -- must be geometry. Constructs such as ST_AsBinary('POINT(1 2)') are no longer valid and you will get an n ST_AsBinary(unknown) is not unique error. Code like that needs to be changed to ST_AsBinary('POINT(1 2)'::geometry);. If that is not possible, then install legacy.sql.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3: 5.1.37

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326));
Вивід растрових зображень
\x01030000000100000005000000000000000000000000000000000000000000000000000000000000
000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000
00000000000000000000000000
Code
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326), 'XDR');
Вивід растрових зображень
\x000000000300000001000000050000000000000000000000000000000000000000000000003ff000
00000000003ff00000000000003ff00000000000003ff00000000000000000000000000000000000
00000000000000000000000000

Назва

ST_AsEWKB — Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.

Короткий огляд

bytea ST_AsEWKB(geometry g1);

bytea ST_AsEWKB(geometry g1, text NDR_or_XDR);

Опис

Повертає представлення геометрії у форматі Extended Well-Known Binary (EWKB) з метаданими SRID. Перший варіант функції за замовчуванням використовує кодування, що відповідає порядку байтів на сервері. Другий варіант функції приймає текстовий аргумент, що визначає кодування ендіана: 'NDR' для little-endian або 'XDR' для big-endian. Введення невідомих аргументів призведе до виведення little-endian.

Формат WKB корисний для читання геометричних даних з бази даних та збереження повної числової точності. Це дозволяє уникнути округлення точності, яке може відбуватися у текстових форматах, таких як WKT.

Для виконання зворотного перетворення EWKB в геометрію PostGIS використовуйте ST_GeomFromEWKB.

[Примітка]

Щоб отримати формат OGC/ISO WKB, використовуйте ST_AsBinary. Зверніть увагу, що формат OGC/ISO WKB не включає SRID.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326));
Вивід растрових зображень
\x0103000020e610000001000000050000000000000000000000000000000000000000000000000000
00000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000
0000000000000000000000000000000000
Code
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326), 'XDR');
Вивід растрових зображень
\x0020000003000010e600000001000000050000000000000000000000000000000000000000000000
003ff00000000000003ff00000000000003ff00000000000003ff000000000000000000000000000
0000000000000000000000000000000000

Див. також

ST_AsBinary, ST_GeomFromEWKB, ST_SRID


Назва

ST_AsHEXEWKB — Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR).

Короткий огляд

text ST_AsHEXEWKB(geometry g1, text NDRorXDR);

text ST_AsHEXEWKB(geometry g1);

Опис

Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR). Якщо кодування не вказано, використовується NDR.

Доступність: 1.2.2

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326));
Вивід растрових зображень
0103000020E6100000010000000500
00000000000000000000000000000000
00000000000000000000000000000000F03F
000000000000F03F000000000000F03F000000000000F03
F000000000000000000000000000000000000000000000000

Which gives the same answer as:

Code
SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326)::text;

7.9.3. Інші формати

  • ST_AsEncodedPolyline — Повертає закодовану полілінію з геометрії LineString.
  • ST_AsFlatGeobuf — Повернути представлення FlatGeobuf набору рядків.
  • ST_AsGeobuf — Повернути представлення Geobuf набору рядків.
  • ST_AsGeoJSON — Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsGML — Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsKML — Повернути геометрію як елемент KML.
  • ST_AsLatLonText — Повернути представлення градусів, хвилин, секунд заданої точки.
  • ST_AsMARC21 — Повертає геометрію у вигляді запису MARC21/XML із полем географічних даних (034).
  • ST_AsMVTGeom — Перетворює геометрію в координатну систему плитки MVT.
  • ST_AsMVT — Агрегатна функція, що повертає MVT-представлення набору рядків.
  • ST_AsSVG — Повертає дані SVG-шляху для геометрії.
  • ST_AsTWKB — Повертає геометрію у вигляді TWKB, також відомого як "Tiny Well-Known Binary" (маленький добре відомий двійковий файл)
  • ST_AsX3D — Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_GeoHash — Повернути представлення геометрії у форматі GeoHash.

Назва

ST_AsEncodedPolyline — Повертає закодовану полілінію з геометрії LineString.

Короткий огляд

text ST_AsEncodedPolyline(geometry geom, integer precision=5);

Опис

Returns the geometry in the Encoded Polyline Algorithm Format. The format stores latitude and longitude deltas as integers after multiplying coordinates by 10 raised to the requested precision.

The informal names polyline5 and polyline6 refer to the same encoding with precision 5 and 6. The precision must match when encoding and decoding; otherwise the coordinates are scaled incorrectly.

The input geometry must use SRID 4326, with longitude as X and latitude as Y. Use ST_Transform to transform geometries in other coordinate systems before encoding.

The OSRM API returns precision 5 for geometries=polyline and precision 6 for geometries=polyline6. Decode the resulting route.geometry with ST_LineFromEncodedPolyline using the matching precision.

Доступність: 2.2.0

Приклади

Encode the same WGS 84 LineString using precision 5 and 6.

Code
WITH route AS (
  SELECT ST_GeomFromEWKT(
    'SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'
  ) AS geom
)
SELECT ST_AsEncodedPolyline(geom, 5) AS polyline5,
       ST_AsEncodedPolyline(geom, 6) AS polyline6
FROM route;
Вивід растрових зображень
polyline5          |            polyline6
-----------------------------+----------------------------------
 _p~iF~ps|U_ulLnnqC_mqNvxq`@ | _izlhA~rlgdF_{geC~ywl@_kwzCn`{nI

Decode an OSRM route.geometry returned with geometries=polyline6.

Code
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline(
  '_izlhA~rlgdF_{geC~ywl@_kwzCn`{nI',
  6
)) AS route;
Вивід растрових зображень
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)
Figure
Geometry figure for visual-st-asencodedpolyline-02

The Google Maps JavaScript Geometry library decodes precision-5 strings. This browser example assumes that map is an initialized Google map.

Code
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry"
></script>
<script>
  const encodedPath = "_p~iF~ps|U_ulLnnqC_mqNvxq`@";
  const flightPath = new google.maps.Polyline({
    path: google.maps.geometry.encoding.decodePath(encodedPath),
    map: map,
    strokeColor: "#0000CC",
    strokeOpacity: 1.0,
    strokeWeight: 4
  });
</script>

Назва

ST_AsFlatGeobuf — Повернути представлення FlatGeobuf набору рядків.

Короткий огляд

bytea ST_AsFlatGeobuf(anyelement set row);

bytea ST_AsFlatGeobuf(anyelement row, bool index);

bytea ST_AsFlatGeobuf(anyelement row, bool index, text geom_name);

Опис

Повертає представлення FlatGeobuf (http://flatgeobuf.org) набору рядків, що відповідають FeatureCollection. ПРИМІТКА: PostgreSQL bytea не може перевищувати 1 ГБ.

row дані рядка, що містять принаймні стовпець геометрії.

index вмикає/вимикає створення просторового індексу. За замовчуванням встановлено значення false.

geom_name — це назва стовпця геометрії в даних рядка. Якщо NULL, за замовчуванням буде використано перший знайдений стовпець геометрії.

Доступність: 3.2.0


Назва

ST_AsGeobuf — Повернути представлення Geobuf набору рядків.

Короткий огляд

bytea ST_AsGeobuf(anyelement set row);

bytea ST_AsGeobuf(anyelement row, text geom_name);

Опис

Повертає представлення Geobuf (https://github.com/mapbox/geobuf) набору рядків, що відповідають FeatureCollection. Кожна вхідна геометрія аналізується для визначення максимальної точності для оптимального зберігання. Зверніть увагу, що Geobuf у його поточній формі не може бути переданий потоком, тому повний вихід буде зібраний у пам'яті.

row дані рядка, що містять принаймні стовпець геометрії.

geom_name — це назва стовпця геометрії в даних рядка. Якщо NULL, за замовчуванням буде використано перший знайдений стовпець геометрії.

Доступність: 2.4.0

Приклади

Code
SELECT encode(ST_AsGeobuf(q, 'geom'), 'base64')
FROM (SELECT 'POLYGON((0 0,0 1,1 1,1 0,0 0))'::geometry AS geom) AS q;
Вивід растрових зображень
GAAiEAoOCgwIBBoIAAAAAgIAAAE=

Назва

ST_AsGeoJSON — Повернути геометрію або об'єкт у форматі GeoJSON.

Короткий огляд

text ST_AsGeoJSON(record feature, text geom_column="", integer maxdecimaldigits=9, boolean pretty_bool=false, text id_column='');

text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);

text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);

Опис

Повертає геометрію як об'єкт GeoJSON "geometry" або рядок як об'єкт GeoJSON "feature".

Отримані геометричні та об'єктні представлення GeoJSON відповідають специфікаціям GeoJSON RFC 7946, за винятком випадків, коли розібрані геометрії посилаються на CRS, відмінну від WGS84 довготи та широти (EPSG:4326, urn:ogc:def:crs:OGC::CRS84); у такому випадку до об'єкта геометрії GeoJSON за замовчуванням буде додано короткий ідентифікатор CRS SRID. Підтримуються як 2D, так і 3D геометрії. GeoJSON підтримує тільки типи геометрії SFS 1.1 (наприклад, не підтримуються криві).

Параметр geom_column використовується для розрізнення декількох стовпців геометрії. Якщо його опустити, буде визначено перший стовпець геометрії в записі. І навпаки, передача цього параметра збереже пошуки типів стовпців.

Аргумент maxdecimaldigits можна використовувати для зменшення максимальної кількості десяткових знаків, що використовуються у вихідних даних (за замовчуванням — 9). Якщо ви використовуєте EPSG:4326 і виводите геометрію тільки для відображення, для багатьох карт хорошим вибором може бути maxdecimaldigits=6.

[Застереження]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

Аргумент options можна використовувати для додавання BBOX або CRS у вихідні дані GeoJSON:

  • 0: означає відсутність опції

  • 1: GeoJSON BBOX

  • 2: GeoJSON коротка CRS (наприклад, EPSG:4326)

  • 4: GeoJSON Long CRS (наприклад, urn:ogc:def:crs:EPSG::4326)

  • 8: GeoJSON Короткий CRS, якщо не EPSG:4326 (за замовчуванням)

Параметр id_column використовується для встановлення елемента "id" повернутих об'єктів GeoJSON. Відповідно до GeoJSON RFC, це ПОВИННО використовуватися, коли елемент має загальновживаний ідентифікатор, такий як первинний ключ. Якщо це не вказано, створені елементи не отримають елемент "id", а всі стовпці, крім геометрії, включаючи будь-які потенційні ключі, просто потраплять в елемент "properties" елемента.

Якщо вхідний запис містить дублікати імен стовпців, об'єкт «властивості» буде містити повторювані ключі. У цьому випадку функція ST_AsGeoJSON видає попередження, оскільки PostgreSQL jsonb зберігає тільки останнє значення для дублікатів ключів.

The GeoJSON specification states that polygons are oriented using the Right-Hand Rule, and some clients require this orientation. This can be ensured by using ST_ForcePolygonCCW. The specification also requires that geometry be in the WGS84 coordinate system (SRID = 4326). If necessary geometry can be projected into WGS84 using ST_Transform: ST_Transform(geom, 4326 ).

GeoJSON можна протестувати та переглянути онлайн за адресами geojson.io та geojsonlint.com. Він широко підтримується веб-картографічними фреймворками:

Доступність: 1.3.4

Доступність: 1.5.0 додано підтримку географії.

Змінено: 2.0.0 підтримка аргументів за замовчуванням та іменованих аргументів.

Змінено: 3.0.0 підтримка записів як вхідних даних

Змінено: 3.0.0 виведення SRID, якщо не EPSG:4326.

Змінено: 3.5.0 Дозволено вказувати стовпець, що містить feature id

Змінено: 3.7.0 додано попередження про дублювання ключів

This function supports 3d and will not drop the z-index.

Приклади

Створити колекцію об'єктів:

Code
SELECT json_build_object(
    'type', 'FeatureCollection',
    'features', json_agg(ST_AsGeoJSON(t.*, id_column =
> 'id')::json)
    )
FROM ( VALUES (1, 'one', 'POINT(1 1)'::geometry),
              (2, 'two', 'POINT(2 2)'),
              (3, 'three', 'POINT(3 3)')
     ) as t(id, name, geom);
Вивід растрових зображень
{"type" : "FeatureCollection", "features" : [{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "id": 2, "properties": {"name": "two"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "id": 3, "properties": {"name": "three"}}]}

Створити Feature:

Code
SELECT ST_AsGeoJSON(t.*, id_column =
> 'id')
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
Вивід растрових зображень
{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}

Не забудьте перетворити дані в довготу WGS84, широту, щоб вони відповідали специфікації GeoJSON:

Code
SELECT ST_AsGeoJSON(ST_Transform(geom, 4326)) FROM fe_edges LIMIT 1;
Вивід растрових зображень
{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}

Підтримуються 3D-геометрії:

Code
SELECT ST_AsGeoJSON('LINESTRING(1 2 3,4 5 6)');
Вивід растрових зображень
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

Аргумент Options можна використовувати для додавання BBOX і CRS у вихідні дані GeoJSON:

Code
SELECT ST_AsGeoJSON(ST_SetSRID('POINT(1 1)'::geometry, 4326), 9, 4|1);
Вивід растрових зображень
{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1.000000000,1.000000000,1.000000000,1.000000000],"coordinates":[1,1]}

Назва

ST_AsGML — Повернути геометрію як елемент GML версії 2 або 3.

Короткий огляд

text ST_AsGML(geometry geom, integer maxdecimaldigits=15, integer options=0);

text ST_AsGML(geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

text ST_AsGML(integer version, geometry geom, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

text ST_AsGML(integer version, geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

Опис

Повернути геометрію як елемент мови географічної розмітки (GML). Параметр version, якщо вказано, може мати значення 2 або 3. Якщо параметр version не вказано, за замовчуванням використовується значення 2. Аргумент maxdecimaldigits можна використовувати для зменшення максимальної кількості десяткових знаків, що використовуються у вихідних даних (за замовчуванням 15).

[Застереження]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

GML 2 відноситься до версії 2.1.2, GML 3 – до версії 3.1.1

Аргумент "options" є бітовим полем. Він може використовуватися для визначення типу виводу CRS у виводі GML та для оголошення даних як lat/lon:

  • 0: Коротка CRS GML (наприклад, EPSG:4326), значення за замовчуванням

  • 1: GML Long CRS (наприклад, urn:ogc:def:crs:EPSG::4326)

  • 2: Тільки для GML 3, видаліть атрибут srsDimension з вихідних даних.

  • 4: Тільки для GML 3 використовуйте тег <LineString> замість <Curve> для ліній.

  • 16: Заявити, що дані є широтою/довготою (наприклад, srid=4326). За замовчуванням вважається, що дані є планарними. Ця опція корисна тільки для виводу GML 3.1.1, пов'язаного з порядком осей. Тому, якщо ви її встановите, координати будуть поміняні місцями, і порядок буде широта-довгота замість довгота-широта, як у базі даних.

  • 32: Вивести прямокутник геометрії (контур).

Аргумент "namespace prefix" може використовуватися для вказання власного префікса простору імен або відсутності префікса (якщо поле порожнє). Якщо префікс "gml" нульовий або пропущений, використовується префікс "gml"

Доступність: 1.3.2

Доступність: 1.5.0 додано підтримку географії.

Покращено: додано підтримку префікса 2.0.0. Додано опцію 4 для GML3, що дозволяє використовувати тег LineString замість Curve для ліній. Додано підтримку GML3 для багатогранних поверхонь і TINS. Додано опцію 32 для виведення прямокутника.

Змінено: 2.0.0 використання аргументів із стандартними іменами

Покращено: 2.1.0 Додано підтримку ідентифікаторів для GML 3.

[Примітка]

Тільки версія 3+ ST_AsGML підтримує багатогранні поверхні та TINS.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 17.2

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Version 2.

Code
SELECT ST_AsGML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326));
Вивід растрових зображень
<gml:Polygon srsName="EPSG:4326"
><gml:outerBoundaryIs
><gml:LinearRing
><gml:coordinates
>0,0 0,1 1,1 1,0 0,0</gml:coordinates
></gml:LinearRing
></gml:outerBoundaryIs
></gml:Polygon
>

Version 3.

Flip coordinates and output extended EPSG (16 | 1)

Code
SELECT ST_AsGML(3, ST_GeomFromText('POINT(5.234234233242 6.34534534534)', 4326), 5, 17);
Вивід растрових зображень
<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"
><gml:pos srsDimension="2"
>6.34535 5.23423</gml:pos
></gml:Point
>

Output the envelope (32).

Code
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 32);
Вивід растрових зображень
<gml:Envelope srsName="EPSG:4326" srsDimension="2"
><gml:lowerCorner
>1 2</gml:lowerCorner
><gml:upperCorner
>10 20</gml:upperCorner
></gml:Envelope
>

Output the envelope (32), reverse (lat lon instead of lon lat) (16), long srs (1) = 32 | 16 | 1 = 49.

Code
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 49);
Вивід растрових зображень
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326" srsDimension="2"
><gml:lowerCorner
>2 1</gml:lowerCorner
><gml:upperCorner
>20 10</gml:upperCorner
></gml:Envelope
>

This example uses a PolyhedralSurface.

Code
SELECT ST_AsGML(
3,
'POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'::geometry);
Вивід растрових зображень
 <gml:PolyhedralSurface>
<gml:polygonPatches>
   <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing>
           <gml:posList srsDimension="3"
>0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList>
        </gml:LinearRing>
    </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing>
           <gml:posList srsDimension="3"
>0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList>
        </gml:LinearRing>
    </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing>
           <gml:posList srsDimension="3"
>0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList>
        </gml:LinearRing>
    </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing>
           <gml:posList srsDimension="3"
>1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList>
        </gml:LinearRing>
    </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing>
           <gml:posList srsDimension="3"
>0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList>
        </gml:LinearRing>
    </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing>
           <gml:posList srsDimension="3"
>0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList>
        </gml:LinearRing>
    </gml:exterior>
   </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface
>

Див. також

ST_GeomFromGML


Назва

ST_AsKML — Повернути геометрію як елемент KML.

Короткий огляд

text ST_AsKML(geometry geom, integer maxdecimaldigits=15, text nprefix=NULL);

text ST_AsKML(geography geog, integer maxdecimaldigits=15, text nprefix=NULL);

Опис

Повернути геометрію як елемент мови розмітки Keyhole (KML). Максимальна кількість десяткових знаків за замовчуванням — 15, простір імен за замовчуванням — без префікса.

[Застереження]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

Доступність: 1.2.2 — пізніші варіанти, що містять параметр версії, з'явилися в 1.3.2

Покращено: 2.0.0 - Додано префікс простору імен, використання аргументів за замовчуванням та іменованих аргументів

Змінено: 3.0.0 - Вилучено підпис варіанту "versioned"

[Примітка]

Потрібно, щоб PostGIS було скомпільовано з підтримкою Proj. Використовуйте PostGIS_Full_Version, щоб підтвердити, що підтримка proj скомпільована.

[Примітка]

Вихідні дані AsKML не працюватимуть з геометріями, які не мають SRID

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))', 4326));
Вивід растрових зображень
<Polygon
><outerBoundaryIs
><LinearRing
><coordinates
>0,0 0,1 1,1 1,0 0,0</coordinates
></LinearRing
></outerBoundaryIs
></Polygon
>

This example outputs a 3D LineString.

Code
SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3,4 5 6)');
Вивід растрових зображень
<LineString
><coordinates
>1,2,3 4,5,6</coordinates
></LineString
>

Див. також

ST_AsSVG, ST_AsGML


Назва

ST_AsLatLonText — Повернути представлення градусів, хвилин, секунд заданої точки.

Короткий огляд

text ST_AsLatLonText(geometry pt, text format='');

Опис

Повертає представлення точки у градусах, хвилинах і секундах.

[Примітка]

Передбачається, що точка знаходиться в проекції широти/довготи. Координати X (довгота) та Y (широта) у вихідних даних нормалізовано до "нормального" діапазону (-180 до +180 для довготи, -90 до +90 для широти).

Параметр text є рядком формату, що містить формат для отриманого тексту, подібний до рядка формату дати. Допустимі символи: "D" для градусів, "M" для хвилин, "S" для секунд і "C" для основних напрямків (NSEW). Символи DMS можна повторювати, щоб вказати бажану ширину та точність ("SSS.SSSS" означає "1,0023").

"M", "S" та "C" є необов'язковими. Якщо "C" опущено, градуси позначаються знаком "-", якщо вони південні або західні. Якщо "S" опущено, хвилини відображаються у вигляді десяткових чисел із точністю до заданої кількості цифр. Якщо "M" також опущено, градуси відображаються у вигляді десяткових чисел із точністю до заданої кількості цифр.

Якщо рядок формату пропущено (або має нульову довжину), буде використано формат за замовчуванням.

Доступність: 2.0

Приклади

Формат за замовчуванням.

Code
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));
Вивід растрових зображень
2°19'29.928"S 3°14'3.243"W

Надання формату (такого самого, як за замовчуванням).

Code
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"C'));
Вивід растрових зображень
2°19'29.928"S 3°14'3.243"W

Символи, крім D, M, S, C і ., просто пропускаються.

Code
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C'));
Вивід растрових зображень
2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W

Підписані ступені замість основних напрямків.

Code
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"'));
Вивід растрових зображень
-2°19'29.928" -3°14'3.243"

Десятичні градуси.

Code
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
Вивід растрових зображень
2.3250 degrees S 3.2342 degrees W

Надмірно великі значення нормалізуються.

Code
SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));
Вивід растрових зображень
72°19'29.928"S 57°45'56.757"E

Назва

ST_AsMARC21 — Повертає геометрію у вигляді запису MARC21/XML із полем географічних даних (034).

Короткий огляд

text ST_AsMARC21 ( geometry geom , text format='hdddmmss' );

Опис

Ця функція повертає запис MARC21/XML з Кодованими картографічними математичними даними, що представляють обмежувальну рамку заданої геометрії. Параметр format дозволяє кодувати координати в підполях $d,$e,$f та $g у всіх форматах, що підтримуються стандартом MARC21/XML. Допустимі формати:

  • основний напрямок, градуси, хвилини та секунди (за замовчуванням): hdddmmss

  • десятиградусні градуси з основним напрямком: hddd.dddddd

  • десятиградусні градуси без вказівки сторони світу: ddd.dddddd

  • десятикратні хвилини з основним напрямком: hdddmm.mmmm

  • десятинні хвилини без вказівки напрямку: dddmm.mmmm

  • десятинні секунди з основним напрямком: hdddmmss.sss

Знак десяткового числа може бути також комою, наприклад hdddmm,mmmm.

Точність десяткових форматів може бути обмежена кількістю символів після десяткового знака, наприклад hdddmm.mm для десяткових хвилин з точністю до двох десяткових знаків.

Ця функція ігнорує розміри Z і M.

Підтримувані версії LOC MARC21/XML:

Доступність: 3.3.0

[Примітка]

Ця функція не підтримує геометрії, що не є lon/lat, оскільки вони не підтримуються стандартом MARC21/XML (Coded Cartographic Mathematical Data).

[Примітка]

Стандарт MARC21/XML не передбачає жодних засобів для анотування просторової системи координат для кодованих картографічних математичних даних, що означає, що ця інформація буде втрачена після перетворення у формат MARC21/XML.

Приклади

Перетворення POINT у формат MARC21/XML у вигляді hdddmmss (за замовчуванням)

Code
SELECT ST_AsMARC21('SRID=4326;POINT(-4.504289 54.253312)'::geometry);
Вивід растрових зображень
                                st_asmarc21
-------------------------------------------------
<record xmlns="http://www.loc.gov/MARC21/slim">
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a"
>a</subfield>
        <subfield code="d"
>W0043015</subfield>
        <subfield code="e"
>W0043015</subfield>
        <subfield code="f"
>N0541512</subfield>
        <subfield code="g"
>N0541512</subfield>
    </datafield>
</record>

Перетворення POLYGON у формат MARC21/XML з десятковими градусами

Code
SELECT ST_AsMARC21('SRID=4326;POLYGON((-4.5792388916015625 54.18172660239091,-4.56756591796875 54.196993557130355,-4.546623229980469 54.18313300502024,-4.5792388916015625 54.18172660239091))'::geometry,'hddd.dddd');

<record xmlns="http://www.loc.gov/MARC21/slim">
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a"
>a</subfield>
        <subfield code="d"
>W004.5792</subfield>
        <subfield code="e"
>W004.5466</subfield>
        <subfield code="f"
>N054.1970</subfield>
        <subfield code="g"
>N054.1817</subfield>
    </datafield>
</record>



Перетворення GEOMETRYCOLLECTION у формат MARC21/XML з десятковими хвилинами. Порядок геометрій у вихідних даних MARC21/XML відповідає їхньому порядку в колекції.

Code
SELECT ST_AsMARC21('SRID=4326;GEOMETRYCOLLECTION(POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65)),POINT(-4.5 54.25))'::geometry,'hdddmm.mmmm');
Вивід растрових зображень
                                st_asmarc21
-------------------------------------------------
<record xmlns="http://www.loc.gov/MARC21/slim">
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a"
>a</subfield>
        <subfield code="d"
>E01307.0000</subfield>
        <subfield code="e"
>E01331.0000</subfield>
        <subfield code="f"
>N05240.0000</subfield>
        <subfield code="g"
>N05224.0000</subfield>
    </datafield>
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a"
>a</subfield>
        <subfield code="d"
>W00430.0000</subfield>
        <subfield code="e"
>W00430.0000</subfield>
        <subfield code="f"
>N05415.0000</subfield>
        <subfield code="g"
>N05415.0000</subfield>
    </datafield>
</record>

Див. також

ST_GeomFromMARC21


Назва

ST_AsMVTGeom — Перетворює геометрію в координатну систему плитки MVT.

Короткий огляд

geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);

Опис

Перетворює геометрію в координатну систему плитки MVT (Mapbox Vector Tile), обрізаючи її до меж плитки, якщо потрібно. Геометрія повинна бути в системі координат цільової карти (використовуючи ST_Transform, якщо потрібно). Зазвичай це Web Mercator (SRID:3857).

Функція намагається зберегти правильність геометрії та виправити її, якщо це необхідно. Це може призвести до скорочення геометрії результату до нижчого виміру.

The function performs geometry simplification appropriate to the integer tile coordinate space. After transforming to tile coordinates it snaps coordinates to the integer grid, removes repeated points, and removes points that lie on straight lines. It does not perform general-purpose, scale-dependent simplification such as ST_Simplify. To reduce detail before tile conversion, simplify the geometry in map coordinates before calling ST_AsMVTGeom.

Необхідно вказати прямокутні межі плитки в просторі координат цільової карти, щоб можна було трансформувати геометрію та обрізати її за необхідності. Межі можна створити за допомогою ST_TileEnvelope.

Ця функція використовується для перетворення геометрії в координатну систему плиток, необхідну для ST_AsMVT.

geom — геометрія, яку потрібно трансформувати в системі координат цільової карти.

bounds — прямокутні межі плитки в просторі координат карти, без буфера.

extent — розмір площі плитки в просторі координат плитки, як визначено в специфікації MVT. За замовчуванням — 4096.

buffer — розмір буфера в просторі координат плиток для обрізки геометрії. За замовчуванням — 256.

clip_geom — це логічне значення, яке визначає, чи геометрії обрізаються або кодуються без змін. За замовчуванням встановлено значення true.

Доступність: 2.4.0

[Примітка]

Починаючи з версії 3.0, під час конфігурації можна вибрати Wagyu для обрізання та перевірки полігонів MVT. Ця бібліотека працює швидше та дає більш правильні результати, ніж стандартна GEOS, але може пропускати невеликі полігони.

Приклади

Code
SELECT ST_AsMVTGeom('POLYGON ((0 0,10 0,10 5,0 -5,0 0))',
    ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
    4096, 0, false);
Вивід растрових зображень
MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))
Figure
Geometry figure for visual-st-asmvtgeom-01

Канонічний приклад для плитки Web Mercator з використанням обчислених меж плитки для запиту та обрізки геометрії. Припускається, що стовпець data.geom має srid 4326.

Code
SELECT ST_AsMVTGeom(ST_Transform(geom, 3857 ),
            ST_TileEnvelope(12, 513, 412),
            extent =
> 4096,
            buffer =
> 64) AS geom
  FROM data
  WHERE geom && ST_Transform(ST_TileEnvelope(12, 513, 412, margin =
> (64.0 / 4096)), 4326)



Назва

ST_AsMVT — Агрегатна функція, що повертає MVT-представлення набору рядків.

Короткий огляд

bytea ST_AsMVT(anyelement set row);

bytea ST_AsMVT(anyelement row, text name);

bytea ST_AsMVT(anyelement row, text name, integer extent);

bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name);

bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name, text feature_id_name);

Опис

Агрегатна функція, яка повертає двійкове Mapbox Vector Tile представлення набору рядків, що відповідають шару плиток. Рядки повинні містити стовпець геометрії, який буде закодований як геометрія об'єкта. Геометрія повинна бути в просторі координат плитки та відповідати специфікації MVT. ST_AsMVTGeom можна використовувати для перетворення геометрії в простір координат плитки. Інші стовпці рядків кодуються як атрибути об'єкта.

Формат Mapbox Vector Tile може зберігати об'єкти з різними наборами атрибутів. Щоб скористатися цією можливістю, надайте стовпець JSONB у даних рядка, що містить об'єкти Json одного рівня. Ключі та значення в значеннях JSONB будуть закодовані як атрибути об'єктів.

Плитки з декількома шарами можна створити, об'єднавши кілька викликів цієї функції за допомогою || або STRING_AGG.

[Важливо]

Не викликайте з GEOMETRYCOLLECTION як елемент у рядку. Однак ви можете використовувати ST_AsMVTGeom, щоб підготувати колекцію геометрії для включення.

row дані рядка, що містять принаймні стовпець геометрії.

name — це назва шару. За замовчуванням використовується рядок "default".

extent — це розмір плитки в просторі екрана, як визначено в специфікації. За замовчуванням — 4096.

geom_name — це ім'я стовпця геометрії в даних рядка. За замовчуванням це перший стовпець геометрії. Зверніть увагу, що PostgreSQL за замовчуванням автоматично перетворює ідентифікатори без лапок у нижній регістр, що означає, що якщо стовпець геометрії не взято в лапки, наприклад "MyMVTGeom", цей параметр повинен бути вказаний малими літерами.

feature_id_name — це назва стовпця Feature ID у даних рядка. Якщо значення NULL або від’ємне, Feature ID не встановлюється. Перший стовпець, що відповідає назві та дійсному типу (smallint, integer, bigint), буде використано як Feature ID, а всі наступні стовпці будуть додано як властивості. Властивості JSON не підтримуються.

Покращено: 3.0 — додано підтримку ідентифікатора функції.

Покращено: 2.5.0 — додано підтримку паралельних запитів.

Доступність: 2.4.0

Приклади

Code
WITH mvtgeom AS
(
  SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12, 513, 412), extent =
> 4096, buffer =
> 64) AS geom, name, description
  FROM points_of_interest
  WHERE geom && ST_TileEnvelope(12, 513, 412, margin =
> (64.0 / 4096))
)
SELECT ST_AsMVT(mvtgeom.*)
FROM mvtgeom;


        

Див. також

ST_AsMVTGeom, ST_TileEnvelope


Назва

ST_AsSVG — Повертає дані SVG-шляху для геометрії.

Короткий огляд

text ST_AsSVG(geometry geom, integer rel=0, integer maxdecimaldigits=15);

text ST_AsSVG(geography geog, integer rel=0, integer maxdecimaldigits=15);

Опис

Повернути геометрію як дані шляху Scalar Vector Graphics (SVG). Використовуйте 1 як другий аргумент, щоб дані шляху були реалізовані у вигляді відносних переміщень, за замовчуванням (або 0) використовуються абсолютні переміщення. Третій аргумент може бути використаний для зменшення максимальної кількості десяткових цифр, що використовуються у вихідних даних (за замовчуванням 15). Точкові геометрії будуть відображатися як cx/cy, коли аргумент 'rel' дорівнює 0, x/y, коли 'rel' дорівнює 1. Багатоточкові геометрії розділяються комами (","), геометрії GeometryCollection розділяються крапками з комою (";").

Для роботи з графікою PostGIS SVG, ознайомтеся з бібліотекою pg_svg, яка надає функції plpgsql для роботи з результатами ST_AsSVG.

Покращено: 3.4.0 для підтримки всіх типів кривих

Змінено: 2.0.0 для використання аргументів за замовчуванням та підтримки іменованих аргументів

Доступність: 1.2.2. Доступність: 1.4.0 Змінено в PostGIS 1.4.0, щоб включити команду L в абсолютний шлях для відповідності http://www.w3.org/TR/SVG/paths.html#PathDataBNF

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_AsSVG('POLYGON((0 0,0 1,1 1,1 0,0 0))'::geometry);
Вивід растрових зображень
M 0 0 L 0 -1 1 -1 1 0 Z
Figure
Geometry figure for visual-st-assvg-01

Circular string

Code
SELECT ST_AsSVG('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)'::geometry);
Вивід растрових зображень
M -2 0 A 2 2 0 0 1 2 0 A 2 2 0 0 1 2 -4
Figure
Geometry figure for visual-st-assvg-02

Multi-curve

Code
SELECT ST_AsSVG('MULTICURVE((5 5,3 5,3 3,0 3),
CIRCULARSTRING(0 0,2 1,2 2))'::geometry, 0, 0);
Вивід растрових зображень
M 5 -5 L 3 -5 3 -3 0 -3 M 0 0 A 2 2 0 0 0 2 -2
Figure
Geometry figure for visual-st-assvg-03

Multi-surface

Code
SELECT ST_AsSVG('MULTISURFACE(
CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),
    (-1 0,0 0.5,1 0,0 1,-1 0)),
((7 8,10 10,6 14,4 11,7 8)))'::geometry, 0, 2);
Вивід растрових зображень
M -2 0 A 1 1 0 0 0 0 0 A 1 1 0 0 0 2 0 A 2 2 0 0 0 -2 0 Z
M -1 0 L 0 -0.5 1 0 0 -1 -1 0 Z
M 7 -8 L 10 -10 6 -14 4 -11 Z
Figure
Geometry figure for visual-st-assvg-04

Назва

ST_AsTWKB — Повертає геометрію у вигляді TWKB, також відомого як "Tiny Well-Known Binary" (маленький добре відомий двійковий файл)

Короткий огляд

bytea ST_AsTWKB(geometry geom, integer prec=0, integer prec_z=0, integer prec_m=0, boolean with_sizes=false, boolean with_boxes=false);

bytea ST_AsTWKB(geometry[] geom, bigint[] ids, integer prec=0, integer prec_z=0, integer prec_m=0, boolean with_sizes=false, boolean with_boxes=false);

Опис

Повертає геометрію у форматі TWKB (Tiny Well-Known Binary). TWKB — це стислий двійковий формат, орієнтований на мінімізацію розміру вихідних даних.

Параметри десяткових цифр контролюють точність збереження даних у вихідних даних. За замовчуванням значення округлюються до найближчої одиниці перед кодуванням. Якщо потрібно передати більш точні дані, збільште це число. Наприклад, значення 1 означає, що перша цифра праворуч від десяткової крапки буде збережена.

Параметри розмірів та обмежувальних рамок визначають, чи буде у вихідні дані включена додаткова інформація про довжину кодованого об'єкта та межі об'єкта. За замовчуванням вони не включені. Не вмикайте їх, якщо ваше програмне забезпечення не використовує їх, оскільки вони лише займають місце (а економія місця є метою TWKB).

Форма функції з вхідним масивом використовується для перетворення набору геометрій та унікальних ідентифікаторів у набір TWKB, який зберігає ідентифікатори. Це корисно для клієнтів, які хочуть розпакувати набір, а потім отримати доступ до додаткової інформації про об'єкти всередині. Масиви можна створити за допомогою функції array_agg. Інші параметри працюють так само, як і для простої форми функції.

[Примітка]

Специфікація формату доступна в Інтернеті за адресою https://github.com/TWKB/Specification, а код для створення клієнта JavaScript можна знайти за адресою https://github.com/TWKB/twkb.js.

Покращено: 2.4.0 покращення пам'яті та швидкості.

Доступність: 2.2.0

Приклади

Code
SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
Вивід растрових зображень
\x02000202020808

Щоб створити агрегований об'єкт TWKB, що містить ідентифікатори, спочатку агрегуйте потрібні геометрії та об'єкти за допомогою функції "array_agg()", а потім викличте відповідну функцію TWKB.

Code
SELECT ST_AsTWKB(array_agg(geom), array_agg(gid)) FROM mytable;
Вивід растрових зображень
\x040402020400000202

Назва

ST_AsX3D — Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML

Короткий огляд

text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);

Опис

Повертає геометрію у вигляді елемента вузла у форматі X3D xml http://www.web3d.org/standards/number/19776-1. Якщо maxdecimaldigits (точність) не вказано, то за замовчуванням використовується значення 15.

[Примітка]

Існують різні варіанти перетворення геометрії PostGIS у X3D, оскільки типи геометрії X3D не відповідають безпосередньо типам геометрії PostGIS, а деякі новіші типи X3D, які можуть бути кращими відповідниками, ми уникнули, оскільки більшість інструментів візуалізації наразі їх не підтримують. Ось відповідники, на яких ми зупинилися. Якщо у вас є думки щодо цієї ідеї або способів, як ми можемо дозволити користувачам вказувати свої бажані відповідники, будь ласка, повідомте нам про це.

Нижче наведено, як ми наразі відображаємо типи PostGIS 2D/3D у типи X3D

Аргумент «options» є бітовим полем, яке визначає, чи слід представляти координати за допомогою геопросторового вузла X3D GeoCoordinates і чи слід перевертати осі x/y. За замовчуванням ST_AsX3D виводить дані у формі бази даних (long,lat або X,Y), але за замовчуванням X3D може бути краще використовувати lat/lon, y/x.

  • 0: X/Y у порядку бази даних (наприклад, long/lat = X,Y є стандартним порядком бази даних), значення за замовчуванням та непросторові координати (просто звичайний старий тег Coordinate).

  • 1: Перевернути X і Y. Якщо використовується разом з опцією GeoCoordinate, то вихідні дані будуть за замовчуванням "latitude_first", а координати також будуть перевернуті.

  • 2: Вивести координати в GeoSpatial GeoCoordinates. Ця опція видасть помилку, якщо геометрії не відповідають WGS 84 long lat (srid: 4326). Наразі це єдиний підтримуваний тип GeoCoordinate. Дивіться специфікації X3D, що визначають систему просторових координат.. Стандартним результатом буде GeoCoordinate geoSystem='"GD" "WE" "longitude_first"'. Якщо ви віддаєте перевагу стандартному для X3D GeoCoordinate geoSystem='"GD" 'WE' "latitude_first"', використовуйте (2 + 1) = 3.

Тип PostGIS2D X3D ТипТип 3D X3D
LINESTRINGще не реалізовано - буде PolyLine2DLineSet
MULTILINESTRINGще не реалізовано - буде PolyLine2DIndexedLineSet
MULTIPOINTPolypoint2DPointSet
POINTвиводить координати, розділені пробіламививодить координати, розділені пробілами
(MULTI) POLYGON, POLYHEDRALSURFACEНедійсна розмітка X3DIndexedFaceSet (внутрішні кільця наразі виводяться як інший набір облич)
TINTriangleSet2D (ще не реалізовано)IndexedTriangleSet
[Примітка]

Підтримка 2D-геометрії ще не завершена. Внутрішні кільця наразі малюються як окремі полігони. Ми працюємо над цим.

У 3D-просторі відбувається багато прогресивних змін, особливо в області інтеграції X3D з HTML5

Також є гарний відкритий X3D-переглядач, який можна використовувати для перегляду відтворених геометрій. Безкоштовні бінарні файли Free Wrl http://freewrl.sourceforge.net/ доступні для Mac, Linux та Windows. Для перегляду геометрій використовуйте пакет FreeWRL_Launcher.

Також зверніть увагу на мінімалістичний переглядач PostGIS X3D, який використовує цю функцію, та відкритий набір інструментів x3dDom html/js.

Доступність: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML

Покращено: 2.2.0: Підтримка геокоординат та перевертання осей (x/y, long/lat). Детальніше дивіться в налаштуваннях.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Create a complete X3D document containing a cube that is viewable in FreeWRL and other X3D viewers.

Code
SELECT '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
  <Scene>
    <Transform>
      <Shape>
       <Appearance>
            <Material emissiveColor=''0 0 1''/>
       </Appearance
> ' ||
       ST_AsX3D(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ||
      '</Shape>
    </Transform>
  </Scene>
</X3D
>' As x3ddoc;
Вивід растрових зображень
    x3ddoc
    --------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
  <Scene>
    <Transform>
      <Shape>
       <Appearance>
            <Material emissiveColor='0 0 1'/>
       </Appearance>
       <IndexedFaceSet  coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'>
            <Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' />
      </IndexedFaceSet>
      </Shape>
    </Transform>
  </Scene>
</X3D>

PostGIS buildings.

Скопіюйте та вставте результат цього запиту в x3d scene viewer і натисніть Show (Показати)

Code
SELECT string_agg('<Shape
>' || ST_AsX3D(CG_Extrude(geom, 0,0, i*0.5)) ||
    '<Appearance>
          <Material diffuseColor="' || (0.01*i)::text || ' 0.8 0.2" specularColor="' || (0.05*i)::text || ' 0 0.5"/>
        </Appearance>
    </Shape
>', '')
FROM ST_Subdivide(ST_Letters('PostGIS'),20) WITH ORDINALITY AS f(geom,i);

The following preview shows the extruded geometry generated from a simplified version of the same source lettering. It is a geometry preview, not X3D markup; use the preceding ST_AsX3D query output in an X3D viewer to inspect the native X3D scene.

Code
SELECT
    CG_Extrude(
        ST_SimplifyPreserveTopology(ST_Letters('PostGIS'), 2),
        0, 0, 10
    ) AS buildings;
Вивід растрових зображень
GEOMETRYCOLLECTION Z (POLYHEDRALSURFACE Z (((42.6 39.2 0,36.3 24.5 0,17 20.3 0,17.9 0 0,0 0 0,0 73.8 0,27.3 73.6 0,36.3 70 0,41.8 61.6 0,42.6 39.2 0),(26.5 55.7 0,17 58.8 0,17 35.3 0,25.6 36.2 0,26.5 55.7 0)),((42.6 39.2 10,41.8 61.6 10,36.3 70 10,27.3 73.6 10,0 73.8 10,0 0 10,17.9 0 10,17 20.3 10,36.3 24.5 10,42.6 39.2 10),(26.5 55.7 10,25.6 36.2 10,17 35.3 10,17 58.8 10,26.5 55.7 10)),((42.6 39.2 0,42.6 39.2 10,36.3 24.5 10,36.3 24.5 0,42.6 39.2 0)),((36.3 24.5 0,36.3 24.5 10,17 20.3 10,17 20.3 0,36.3 24.5 0)),((17 20.3 0,17 20.3 10,17.9 0 10,17.9 0 0,17 20.3 0)),((17.9 0 0,17.9 0 10,0 0 10,0 0 0,17.9 0 0)),((0 0 0,0 0 10,0 73.8 10,0 73.8 0,0 0 0)),((0 73.8 0,0 73.8 10,27.3 73.6 10,27.3 73.6 0,0 73.8 0)),((27.3 73.6 0,27.3 73.6 10,36.3 70 10,36.3 70 0,27.3 73.6 0)),((36.3 70 0,36.3 70 10,41.8 61.6 10,41.8 61.6 0,36.3 70 0)),((41.8 61.6 0,41.8 61.6 10,42.6 39.2 10,42.6 39.2 0,41.8 61.6 0)),((26.5 55.7 0,26.5 55.7 10,17 58.8 10,17 58.8 0,26.5 55.7 0)),((17 58.8 0,17 58.8 10,17 35.3 10,17 35.3 0,17 58.8 0)),((17 35.3 0,17 35.3 10,25.6 36.2 10,25.6 36.2 0,17 35.3 0)),((25.6 36.2 0,25.6 36.2 10,26.5 55.7 10,26.5 55.7 0,25.6 36.2 0))),POLYHEDRALSURFACE Z (((69.01 58 0,84.51 52.5 0,89.71 39.9 0,87.81 9.7 0,81.71 2.9 0,71.31 -0.5 0,54.91 3.9 0,48.31 17.8 0,50.61 48.7 0,58.01 55.6 0,69.01 58 0),(73.91 38.9 0,69.11 42.6 0,64.21 38.9 0,64.21 18.9 0,68.91 15.2 0,73.91 18.9 0,73.91 38.9 0)),((69.01 58 10,58.01 55.6 10,50.61 48.7 10,48.31 17.8 10,54.91 3.9 10,71.31 -0.5 10,81.71 2.9 10,87.81 9.7 10,89.71 39.9 10,84.51 52.5 10,69.01 58 10),(73.91 38.9 10,73.91 18.9 10,68.91 15.2 10,64.21 18.9 10,64.21 38.9 10,69.11 42.6 10,73.91 38.9 10)),((69.01 58 0,69.01 58 10,84.51 52.5 10,84.51 52.5 0,69.01 58 0)),((84.51 52.5 0,84.51 52.5 10,89.71 39.9 10,89.71 39.9 0,84.51 52.5 0)),((89.71 39.9 0,89.71 39.9 10,87.81 9.7 10,87.81 9.7 0,89.71 39.9 0)),((87.81 9.7 0,87.81 9.7 10,81.71 2.9 10,81.71 2.9 0,87.81 9.7 0)),((81.71 2.9 0,81.71 2.9 10,71.31 -0.5 10,71.31 -0.5 0,81.71 2.9 0)),((71.31 -0.5 0,71.31 -0.5 10,54.91 3.9 10,54.91 3.9 0,71.31 -0.5 0)),((54.91 3.9 0,54.91 3.9 10,48.31 17.8 10,48.31 17.8 0,54.91 3.9 0)),((48.31 17.8 0,48.31 17.8 10,50.61 48.7 10,50.61 48.7 0,48.31 17.8 0)),((50.61 48.7 0,50.61 48.7 10,58.01 55.6 10,58.01 55.6 0,50.61 48.7 0)),((58.01 55.6 0,58.01 55.6 10,69.01 58 10,69.01 58 0,58.01 55.6 0)),((73.91 38.9 0,73.91 38.9 10,69.11 42.6 10,69.11 42.6 0,73.91 38.9 0)),((69.11 42.6 0,69.11 42.6 10,64.21 38.9 10,64.21 38.9 0,69.11 42.6 0)),((64.21 38.9 0,64.21 38.9 10,64.21 18.9 10,64.21 18.9 0,64.21 38.9 0)),((64.21 18.9 0,64.21 18.9 10,68.91 15.2 10,68.91 15.2 0,64.21 18.9 0)),((68.91 15.2 0,68.91 15.2 10,73.91 18.9 10,73.91 18.9 0,68.91 15.2 0)),((73.91 18.9 0,73.91 18.9 10,73.91 38.9 10,73.91 38.9 0,73.91 18.9 0))),POLYHEDRALSURFACE Z (((111.02 37.6 0,123.92 31.1 0,130.72 20.8 0,126.82 5.3 0,116.02 -0.3 0,94.02 3.7 0,98.82 18.9 0,112.52 15.3 0,115.02 17.6 0,98.72 29.6 0,96.12 45.4 0,100.52 53 0,107.32 57.1 0,128.92 54.7 0,122.72 39.9 0,112.02 42.1 0,111.02 37.6 0)),((111.02 37.6 10,112.02 42.1 10,122.72 39.9 10,128.92 54.7 10,107.32 57.1 10,100.52 53 10,96.12 45.4 10,98.72 29.6 10,115.02 17.6 10,112.52 15.3 10,98.82 18.9 10,94.02 3.7 10,116.02 -0.3 10,126.82 5.3 10,130.72 20.8 10,123.92 31.1 10,111.02 37.6 10)),((111.02 37.6 0,111.02 37.6 10,123.92 31.1 10,123.92 31.1 0,111.02 37.6 0)),((123.92 31.1 0,123.92 31.1 10,130.72 20.8 10,130.72 20.8 0,123.92 31.1 0)),((130.72 20.8 0,130.72 20.8 10,126.82 5.3 10,126.82 5.3 0,130.72 20.8 0)),((126.82 5.3 0,126.82 5.3 10,116.02 -0.3 10,116.02 -0.3 0,126.82 5.3 0)),((116.02 -0.3 0,116.02 -0.3 10,94.02 3.7 10,94.02 3.7 0,116.02 -0.3 0)),((94.02 3.7 0,94.02 3.7 10,98.82 18.9 10,98.82 18.9 0,94.02 3.7 0)),((98.82 18.9 0,98.82 18.9 10,112.52 15.3 10,112.52 15.3 0,98.82 18.9 0)),((112.52 15.3 0,112.52 15.3 10,115.02 17.6 10,115.02 17.6 0,112.52 15.3 0)),((115.02 17.6 0,115.02 17.6 10,98.72 29.6 10,98.72 29.6 0,115.02 17.6 0)),((98.72 29.6 0,98.72 29.6 10,96.12 45.4 10,96.12 45.4 0,98.72 29.6 0)),((96.12 45.4 0,96.12 45.4 10,100.52 53 10,100.52 53 0,96.12 45.4 0)),((100.52 53 0,100.52 53 10,107.32 57.1 10,107.32 57.1 0,100.52 53 0)),((107.32 57.1 0,107.32 57.1 10,128.92 54.7 10,128.92 54.7 0,107.32 57.1 0)),((128.92 54.7 0,128.92 54.7 10,122.72 39.9 10,122.72 39.9 0,128.92 54.7 0)),((122.72 39.9 0,122.72 39.9 10,112.02 42.1 10,112.02 42.1 0,122.72 39.9 0)),((112.02 42.1 0,112.02 42.1 10,111.02 37.6 10,111.02 37.6 0,112.02 42.1 0))),POLYHEDRALSURFACE Z (((156.82 17.7 0,167.02 16 0,167.02 -0.9 0,149.22 2 0,141.42 11.3 0,141.12 42.7 0,134.62 41.8 0,134.62 58.9 0,141.12 57.9 0,140.02 75.4 0,157.92 75.4 0,156.82 57.9 0,166.02 58.9 0,166.02 41.8 0,156.82 42.7 0,156.82 17.7 0)),((156.82 17.7 10,156.82 42.7 10,166.02 41.8 10,166.02 58.9 10,156.82 57.9 10,157.92 75.4 10,140.02 75.4 10,141.12 57.9 10,134.62 58.9 10,134.62 41.8 10,141.12 42.7 10,141.42 11.3 10,149.22 2 10,167.02 -0.9 10,167.02 16 10,156.82 17.7 10)),((156.82 17.7 0,156.82 17.7 10,167.02 16 10,167.02 16 0,156.82 17.7 0)),((167.02 16 0,167.02 16 10,167.02 -0.9 10,167.02 -0.9 0,167.02 16 0)),((167.02 -0.9 0,167.02 -0.9 10,149.22 2 10,149.22 2 0,167.02 -0.9 0)),((149.22 2 0,149.22 2 10,141.42 11.3 10,141.42 11.3 0,149.22 2 0)),((141.42 11.3 0,141.42 11.3 10,141.12 42.7 10,141.12 42.7 0,141.42 11.3 0)),((141.12 42.7 0,141.12 42.7 10,134.62 41.8 10,134.62 41.8 0,141.12 42.7 0)),((134.62 41.8 0,134.62 41.8 10,134.62 58.9 10,134.62 58.9 0,134.62 41.8 0)),((134.62 58.9 0,134.62 58.9 10,141.12 57.9 10,141.12 57.9 0,134.62 58.9 0)),((141.12 57.9 0,141.12 57.9 10,140.02 75.4 10,140.02 75.4 0,141.12 57.9 0)),((140.02 75.4 0,140.02 75.4 10,157.92 75.4 10,157.92 75.4 0,140.02 75.4 0)),((157.92 75.4 0,157.92 75.4 10,156.82 57.9 10,156.82 57.9 0,157.92 75.4 0)),((156.82 57.9 0,156.82 57.9 10,166.02 58.9 10,166.02 58.9 0,156.82 57.9 0)),((166.02 58.9 0,166.02 58.9 10,166.02 41.8 10,166.02 41.8 0,166.02 58.9 0)),((166.02 41.8 0,166.02 41.8 10,156.82 42.7 10,156.82 42.7 0,166.02 41.8 0)),((156.82 42.7 0,156.82 42.7 10,156.82 17.7 10,156.82 17.7 0,156.82 42.7 0))),POLYHEDRALSURFACE Z (((213.81 13.2 0,208.11 4.2 0,198.51 -0.3 0,184.21 0.9 0,174.91 8.8 0,172.61 57.4 0,175.21 66.1 0,180.91 71.6 0,209.81 74 0,209.81 58.4 0,189.11 56.8 0,188.61 18.7 0,193.81 14.8 0,199.11 16.5 0,199.11 32.2 0,193.41 32.2 0,193.41 46.4 0,213.81 46.4 0,213.81 13.2 0)),((213.81 13.2 10,213.81 46.4 10,193.41 46.4 10,193.41 32.2 10,199.11 32.2 10,199.11 16.5 10,193.81 14.8 10,188.61 18.7 10,189.11 56.8 10,209.81 58.4 10,209.81 74 10,180.91 71.6 10,175.21 66.1 10,172.61 57.4 10,174.91 8.8 10,184.21 0.9 10,198.51 -0.3 10,208.11 4.2 10,213.81 13.2 10)),((213.81 13.2 0,213.81 13.2 10,208.11 4.2 10,208.11 4.2 0,213.81 13.2 0)),((208.11 4.2 0,208.11 4.2 10,198.51 -0.3 10,198.51 -0.3 0,208.11 4.2 0)),((198.51 -0.3 0,198.51 -0.3 10,184.21 0.9 10,184.21 0.9 0,198.51 -0.3 0)),((184.21 0.9 0,184.21 0.9 10,174.91 8.8 10,174.91 8.8 0,184.21 0.9 0)),((174.91 8.8 0,174.91 8.8 10,172.61 57.4 10,172.61 57.4 0,174.91 8.8 0)),((172.61 57.4 0,172.61 57.4 10,175.21 66.1 10,175.21 66.1 0,172.61 57.4 0)),((175.21 66.1 0,175.21 66.1 10,180.91 71.6 10,180.91 71.6 0,175.21 66.1 0)),((180.91 71.6 0,180.91 71.6 10,209.81 74 10,209.81 74 0,180.91 71.6 0)),((209.81 74 0,209.81 74 10,209.81 58.4 10,209.81 58.4 0,209.81 74 0)),((209.81 58.4 0,209.81 58.4 10,189.11 56.8 10,189.11 56.8 0,209.81 58.4 0)),((189.11 56.8 0,189.11 56.8 10,188.61 18.7 10,188.61 18.7 0,189.11 56.8 0)),((188.61 18.7 0,188.61 18.7 10,193.81 14.8 10,193.81 14.8 0,188.61 18.7 0)),((193.81 14.8 0,193.81 14.8 10,199.11 16.5 10,199.11 16.5 0,193.81 14.8 0)),((199.11 16.5 0,199.11 16.5 10,199.11 32.2 10,199.11 32.2 0,199.11 16.5 0)),((199.11 32.2 0,199.11 32.2 10,193.41 32.2 10,193.41 32.2 0,199.11 32.2 0)),((193.41 32.2 0,193.41 32.2 10,193.41 46.4 10,193.41 46.4 0,193.41 32.2 0)),((193.41 46.4 0,193.41 46.4 10,213.81 46.4 10,213.81 46.4 0,193.41 46.4 0)),((213.81 46.4 0,213.81 46.4 10,213.81 13.2 10,213.81 13.2 0,213.81 46.4 0))),POLYHEDRALSURFACE Z (((235.82 72.9 0,236.82 0 0,218.52 0 0,218.52 73.8 0,235.82 72.9 0)),((235.82 72.9 10,218.52 73.8 10,218.52 0 10,236.82 0 10,235.82 72.9 10)),((235.82 72.9 0,235.82 72.9 10,236.82 0 10,236.82 0 0,235.82 72.9 0)),((236.82 0 0,236.82 0 10,218.52 0 10,218.52 0 0,236.82 0 0)),((218.52 0 0,218.52 0 10,218.52 73.8 10,218.52 73.8 0,218.52 0 0)),((218.52 73.8 0,218.52 73.8 10,235.82 72.9 10,235.82 72.9 0,218.52 73.8 0))),POLYHEDRALSURFACE Z (((258.33 49.5 0,279.93 34.6 0,283.43 25.9 0,282.53 15.4 0,277.93 6.8 0,270.73 1.6 0,252.33 0.5 0,241.53 4.9 0,246.43 20.6 0,260.73 16.4 0,266.23 18.7 0,267.43 23.2 0,245.63 39.4 0,242.03 48.6 0,242.83 59.6 0,247.53 67.3 0,257.53 73.2 0,280.43 70.8 0,275.23 56.4 0,264.53 58.3 0,258.73 55.1 0,258.33 49.5 0)),((258.33 49.5 10,258.73 55.1 10,264.53 58.3 10,275.23 56.4 10,280.43 70.8 10,257.53 73.2 10,247.53 67.3 10,242.83 59.6 10,242.03 48.6 10,245.63 39.4 10,267.43 23.2 10,266.23 18.7 10,260.73 16.4 10,246.43 20.6 10,241.53 4.9 10,252.33 0.5 10,270.73 1.6 10,277.93 6.8 10,282.53 15.4 10,283.43 25.9 10,279.93 34.6 10,258.33 49.5 10)),((258.33 49.5 0,258.33 49.5 10,279.93 34.6 10,279.93 34.6 0,258.33 49.5 0)),((279.93 34.6 0,279.93 34.6 10,283.43 25.9 10,283.43 25.9 0,279.93 34.6 0)),((283.43 25.9 0,283.43 25.9 10,282.53 15.4 10,282.53 15.4 0,283.43 25.9 0)),((282.53 15.4 0,282.53 15.4 10,277.93 6.8 10,277.93 6.8 0,282.53 15.4 0)),((277.93 6.8 0,277.93 6.8 10,270.73 1.6 10,270.73 1.6 0,277.93 6.8 0)),((270.73 1.6 0,270.73 1.6 10,252.33 0.5 10,252.33 0.5 0,270.73 1.6 0)),((252.33 0.5 0,252.33 0.5 10,241.53 4.9 10,241.53 4.9 0,252.33 0.5 0)),((241.53 4.9 0,241.53 4.9 10,246.43 20.6 10,246.43 20.6 0,241.53 4.9 0)),((246.43 20.6 0,246.43 20.6 10,260.73 16.4 10,260.73 16.4 0,246.43 20.6 0)),((260.73 16.4 0,260.73 16.4 10,266.23 18.7 10,266.23 18.7 0,260.73 16.4 0)),((266.23 18.7 0,266.23 18.7 10,267.43 23.2 10,267.43 23.2 0,266.23 18.7 0)),((267.43 23.2 0,267.43 23.2 10,245.63 39.4 10,245.63 39.4 0,267.43 23.2 0)),((245.63 39.4 0,245.63 39.4 10,242.03 48.6 10,242.03 48.6 0,245.63 39.4 0)),((242.03 48.6 0,242.03 48.6 10,242.83 59.6 10,242.83 59.6 0,242.03 48.6 0)),((242.83 59.6 0,242.83 59.6 10,247.53 67.3 10,247.53 67.3 0,242.83 59.6 0)),((247.53 67.3 0,247.53 67.3 10,257.53 73.2 10,257.53 73.2 0,247.53 67.3 0)),((257.53 73.2 0,257.53 73.2 10,280.43 70.8 10,280.43 70.8 0,257.53 73.2 0)),((280.43 70.8 0,280.43 70.8 10,275.23 56.4 10,275.23 56.4 0,280.43 70.8 0)),((275.23 56.4 0,275.23 56.4 10,264.53 58.3 10,264.53 58.3 0,275.23 56.4 0)),((264.53 58.3 0,264.53 58.3 10,258.73 55.1 10,258.73 55.1 0,264.53 58.3 0)),((258.73 55.1 0,258.73 55.1 10,258.33 49.5 10,258.33 49.5 0,258.73 55.1 0))))
Figure
Geometry figure for visual-st-asx3d-02

An Octagon elevated 3 Units and decimal precision of 6.

Code
SELECT ST_AsX3D(ST_Translate(ST_Force3D(ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,
    3),
  6) As x3dfrag;
Вивід растрових зображень
x3dfrag
--------
<IndexedFaceSet  convex='false' coordIndex='0 1 2 3 4 5 6 7'
><Coordinate point='15 10 3 13.535534 6.464466 3 10 5 3 6.464466 6.464466 3 5 10 3 6.464466 13.535534 3 10 15 3 13.535534 13.535534 3 ' /></IndexedFaceSet>

TIN.

Code
SELECT ST_AsX3D(ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')) As x3dfrag;
Вивід растрових зображень
    x3dfrag
    --------
<IndexedTriangleSet  index='0 1 2 3 4 5'
><Coordinate point='0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0'/></IndexedTriangleSet>

Closed multilinestring (the boundary of a polygon with holes).

Code
SELECT ST_AsX3D(ST_GeomFromEWKT('MULTILINESTRING((20 0 10,16 -12 10,0 -16 10,-12 -12 10,-20 0 10,-12 16 10,0 24 10,16 16 10,20 0 10),
  (12 0 10,8 8 10,0 12 10,-8 8 10,-8 0 10,-8 -4 10,0 -8 10,8 -4 10,12 0 10))')
) As x3dfrag;
Вивід растрових зображень
    x3dfrag
    --------
<IndexedLineSet  coordIndex='0 1 2 3 4 5 6 7 0 -1 8 9 10 11 12 13 14 15 8'>
    <Coordinate point='20 0 10 16 -12 10 0 -16 10 -12 -12 10 -20 0 10 -12 16 10 0 24 10 16 16 10 12 0 10 8 8 10 0 12 10 -8 8 10 -8 0 10 -8 -4 10 0 -8 10 8 -4 10 ' />
 </IndexedLineSet>

Назва

ST_GeoHash — Повернути представлення геометрії у форматі GeoHash.

Короткий огляд

text ST_GeoHash(geometry geom, integer maxchars=full_precision_of_point);

Опис

Обчислює GeoHash представлення геометрії. GeoHash кодує географічну точку в текстову форму, яку можна сортувати та шукати за префіксом. Коротший GeoHash є менш точним представленням точки. Його можна уявити як прямокутник, що містить точку.

Значення геометрії, що не є точками, з ненульовим розміром також можна відобразити у кодах GeoHash. Точність коду залежить від географічного розміру геометрії.

Якщо maxchars не вказано, повертається код GeoHash для найменшої комірки, що містить вхідну геометрію. Точки повертають GeoHash з точністю 20 символів (це приблизно достатньо для повної подвійної точності вхідних даних). Інші геометричні типи можуть повертати GeoHash з меншою точністю, залежно від розміру геометрії. Більші геометрії представлені з меншою точністю, менші — з більшою. Коробка, визначена кодом GeoHash, завжди містить вхідний об'єкт.

Якщо вказано maxchars, то повернений код GeoHash має не більше цього значення символів. Він відображається на (можливо) менш точне представлення вхідної геометрії. Для не точкових об'єктів початковою точкою обчислення є центр обмежувальної рамки геометрії.

Доступність: 1.4.0

[Примітка]

ST_GeoHash вимагає, щоб вхідні геометричні дані були в географічних координатах (довгота/широта).

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_GeoHash(ST_Point(-126, 48));
Вивід растрових зображень
c0w3hf1s70w3hf1s70w3
Code
SELECT ST_GeoHash(ST_Point(-126, 48), 5);
Вивід растрових зображень
c0w3h

This example shows that the GeoHash for a line containing a point is a prefix of the point code.

Code
SELECT ST_GeoHash('LINESTRING(-126 48,-126.1 48.1)'::geometry);
Вивід растрових зображень
c0w3

7.10. Оператори

Анотація

Ці записи документують просторові оператори, визначені PostGIS. Оператори доповнюють каталог функцій, надаючи стислі символічні предикати для взаємодій обмежувальних рамок та просторових відносин. Їх семантика відповідає тим самим геометричним правилам, що й відповідні функції, але оптимізована для використання в виразах SQL та фільтруванні з підтримкою індексу.

7.10.1. Оператори обмежувальної рамки

  • && — Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.
  • &&(geometry,box2df) — Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).
  • &&(box2df,geometry) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.
  • &&(box2df,box2df) — Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.
  • &&& — Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.
  • &&&(geometry,gidx) — Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).
  • &&&(gidx,geometry) — Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.
  • &&&(gidx,gidx) — Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.
  • &< — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться ліворуч від обмежувальної рамки B.
  • &<| — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться нижче обмежувальної рамки B.
  • &> — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться праворуч від обмежувальної рамки B.
  • << — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго ліворуч від B.
  • <<| — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго нижче B.
  • = — Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.
  • >> — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго праворуч від B.
  • @ — Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B.
  • @(geometry,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).
  • @(box2df,geometry) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.
  • @(box2df,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.
  • |&> — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться над обмежувальною рамкою B.
  • |>> — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго над обмежувальною рамкою B.
  • ~ — Повертає TRUE, якщо обмежувальна рамка A містить B.
  • ~(geometry,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).
  • ~(box2df,geometry) — Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.
  • ~(box2df,box2df) — Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).
  • ~= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

Назва

&& — Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.

Короткий огляд

boolean &&( geometry A , geometry B );

boolean &&( geography A , geography B );

Опис

Оператор && повертає TRUE, якщо 2D обмежувальна рамка геометрії A перетинає 2D обмежувальну рамку геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Доступність: 1.5.0 додано підтримку географії.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 && tbl2.column2 AS overlaps
FROM ( VALUES
    (1, 'LINESTRING(0 0, 3 3)'::geometry),
    (2, 'LINESTRING(0 1, 0 5)'::geometry)) AS tbl1,
( VALUES
    (3, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overlaps
---------+---------+----------
       1 |       3 | t
       2 |       3 | f
(2 rows)
Figure
Geometry figure for visual-geometry-overlaps-01

Див. також

ST_Intersects, ST_Extent, |&>, &>, &<|, &<, ~, @


Назва

&&(geometry,box2df) — Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).

Короткий огляд

boolean &&( geometry A , box2df B );

Опис

Оператор && повертає TRUE, якщо кешована 2D обмежувальна рамка геометрії A перетинає 2D обмежувальну рамку B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_Point(1,1) && ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS overlaps;
Вивід растрових зображень
 overlaps
----------
 t
(1 row)

Назва

&&(box2df,geometry) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.

Короткий огляд

boolean &&( box2df A , geometry B );

Опис

Оператор && повертає TRUE, якщо 2D обмежувальна рамка A перетинає кешовану 2D обмежувальну рамку геометрії B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_Point(1,1) AS overlaps;
Вивід растрових зображень
 overlaps
----------
 t
(1 row)

Назва

&&(box2df,box2df) — Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.

Короткий огляд

boolean &&( box2df A , box2df B );

Опис

Оператор && повертає TRUE, якщо дві 2D обмежувальні рамки A і B перетинаються, використовуючи точність float. Це означає, що якщо A (або B) є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку (BOX2DF) з точністю float

[Примітка]

Цей оператор призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_MakeBox2D(ST_Point(1,1), ST_Point(3,3)) AS overlaps;
Вивід растрових зображень
 overlaps
----------
 t
(1 row)

Назва

&&& — Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.

Короткий огляд

boolean &&&( geometry A , geometry B );

Опис

Оператор &&& повертає TRUE, якщо n-вимірна обмежувальна рамка геометрії A перетинає n-вимірну обмежувальну рамку геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Доступність: 2.0.0

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

3D LineStrings.

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3d,
                        tbl1.column2 && tbl2.column2 AS overlaps_2d
FROM ( VALUES
    (1, 'LINESTRING Z(0 0 1, 3 3 2)'::geometry),
    (2, 'LINESTRING Z(1 2 0, 0 5 -1)'::geometry)) AS tbl1,
( VALUES
    (3, 'LINESTRING Z(1 2 1, 4 6 1)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overlaps_3d | overlaps_2d
---------+---------+-------------+-------------
       1 |       3 | t           | t
       2 |       3 | f           | t
Figure
Geometry figure for visual-geometry-overlaps-nd-01

3M LineStrings.

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3zm,
                        tbl1.column2 && tbl2.column2 AS overlaps_2d
FROM ( VALUES
    (1, 'LINESTRING M(0 0 1, 3 3 2)'::geometry),
    (2, 'LINESTRING M(1 2 0, 0 5 -1)'::geometry)) AS tbl1,
( VALUES
    (3, 'LINESTRING M(1 2 1, 4 6 1)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overlaps_3zm | overlaps_2d
---------+---------+-------------+-------------
       1 |       3 | t           | t
       2 |       3 | f           | t
Figure
Geometry figure for visual-geometry-overlaps-nd-02

Див. також

&&


Назва

&&&(geometry,gidx) — Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).

Короткий огляд

boolean &&&( geometry A , gidx B );

Опис

Оператор &&& повертає TRUE, якщо кешована n-вимірна обмежувальна рамка геометрії A перетинає n-вимірну обмежувальну рамку B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box3d, вона буде внутрішньо перетворена в обмежувальну рамку 3D з точністю float (GIDX)

[Примітка]

Цей оператор призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_MakePoint(1,1,1) &&& ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) AS overlaps;
Вивід растрових зображень
 overlaps
----------
 t
(1 row)

Назва

&&&(gidx,geometry) — Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.

Короткий огляд

boolean &&&( gidx A , geometry B );

Опис

Оператор &&& повертає TRUE, якщо n-вимірна обмежувальна рамка A перетинає кешовану n-вимірну обмежувальну рамку геометрії B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box3d, вона буде внутрішньо перетворена в 3D обмежувальну рамку (GIDX) з точністю float

[Примітка]

Цей оператор призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_MakePoint(1,1,1) AS overlaps;
Вивід растрових зображень
 overlaps
----------
 t
(1 row)

Назва

&&&(gidx,gidx) — Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.

Короткий огляд

boolean &&&( gidx A , gidx B );

Опис

Оператор &&& повертає TRUE, якщо дві n-вимірні обмежувальні рамки A і B перетинаються, використовуючи точність float. Це означає, що якщо A (або B) є (подвійної точності) box3d, вона буде внутрішньо перетворена в обмежувальну рамку 3D з точністю float (GIDX)

[Примітка]

Цей оператор призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_3DMakeBox(ST_MakePoint(1,1,1), ST_MakePoint(3,3,3)) AS overlaps;
Вивід растрових зображень
 overlaps
----------
 t
(1 row)

Назва

&< — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться ліворуч від обмежувальної рамки B.

Короткий огляд

boolean &<( geometry A , geometry B );

Опис

Оператор &< повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться ліворуч від обмежувальної рамки геометрії B, або, точніше, перекриває або НЕ знаходиться праворуч від обмежувальної рамки геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 &< tbl2.column2 AS overleft
FROM
  ( VALUES
    (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING(0 0, 3 3)'::geometry),
    (3, 'LINESTRING(0 1, 0 5)'::geometry),
    (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overleft
---------+---------+----------
       1 |       2 | f
       1 |       3 | f
       1 |       4 | t
(3 rows)
Figure
Geometry figure for visual-st-geometry-overleft-01

Див. також

&&, |&>, &>, &<|


Назва

&<| — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться нижче обмежувальної рамки B.

Короткий огляд

boolean &<|( geometry A , geometry B );

Опис

Оператор &<| повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться нижче обмежувальної рамки геометрії B, або, точніше, перекриває або НЕ знаходиться вище обмежувальної рамки геометрії B.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 &<| tbl2.column2 AS overbelow
FROM
  ( VALUES
    (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING(0 0, 3 3)'::geometry),
    (3, 'LINESTRING(0 1, 0 5)'::geometry),
    (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overbelow
---------+---------+-----------
       1 |       2 | f
       1 |       3 | t
       1 |       4 | t
(3 rows)
Figure
Geometry figure for visual-st-geometry-overbelow-01

Див. також

&&, |&>, &>, &<


Назва

&> — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться праворуч від обмежувальної рамки B.

Короткий огляд

boolean &>( geometry A , geometry B );

Опис

Оператор &> повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться праворуч від обмежувальної рамки геометрії B, або, точніше, перекриває або НЕ знаходиться ліворуч від обмежувальної рамки геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 &
> tbl2.column2 AS overright
FROM
  ( VALUES
    (1, 'LINESTRING(1 2,4 6)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING(0 0,3 3)'::geometry),
    (3, 'LINESTRING(0 1,0 5)'::geometry),
    (4, 'LINESTRING(6 0,6 1)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overright
---------+---------+-----------
       1 |       2 | t
       1 |       3 | t
       1 |       4 | f
(3 rows)
Figure
Geometry figure for visual-st-geometry-overright-01

Див. також

&&, |&>, &<|, &<


Назва

<< — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго ліворуч від B.

Короткий огляд

boolean <<( geometry A , geometry B );

Опис

Оператор << повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго ліворуч від обмежувальної рамки геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 << tbl2.column2 AS left
FROM
  ( VALUES
    (1, 'LINESTRING (1 2, 1 5)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING (0 0, 4 3)'::geometry),
    (3, 'LINESTRING (6 0, 6 5)'::geometry),
    (4, 'LINESTRING (2 2, 5 6)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | left
---------+---------+------
       1 |       2 | f
       1 |       3 | t
       1 |       4 | t
(3 rows)
Figure
Geometry figure for visual-st-geometry-left-01

Див. також

>>, |>>, <<|


Назва

<<| — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго нижче B.

Короткий огляд

boolean <<|( geometry A , geometry B );

Опис

Оператор <<| повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго нижче обмежувальної рамки геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 <<| tbl2.column2 AS below
FROM
  ( VALUES
    (1, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING (1 4, 1 7)'::geometry),
    (3, 'LINESTRING (6 1, 6 5)'::geometry),
    (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | below
---------+---------+-------
       1 |       2 | t
       1 |       3 | f
       1 |       4 | f
(3 rows)
Figure
Geometry figure for visual-st-geometry-below-01

Див. також

<<, >>, |>>


Назва

= — Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.

Короткий огляд

boolean =( geometry A , geometry B );

boolean =( geography A , geography B );

Опис

Оператор = повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B. PostgreSQL використовує оператори =, < та >, визначені для геометрій, для виконання внутрішнього впорядкування та порівняння геометрій (тобто в операторах GROUP BY або ORDER BY).

[Примітка]

Цей оператор вважає рівними лише геометрію/географію, які є абсолютно однаковими в усіх відношеннях, мають однакові координати в однаковому порядку. Для "просторової рівності", яка ігнорує такі речі, як порядок координат, і може виявляти об'єкти, що займають однакову просторову площу, але мають різне представлення, використовуйте ST_OrderingEqualsабо ST_Equals

[Застереження]

Цей операнд НЕ використовуватиме жодних індексів, які можуть бути доступні для геометрій. Для перевірки точної рівності за допомогою індексу поєднайте = з &&.

Змінено: 2.4.0, у попередніх версіях це була рівність обмежувальної рамки, а не геометрична рівність. Якщо вам потрібна рівність обмежувальної рамки, використовуйте замість цього ~=.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT 'LINESTRING(0 0,0 1,1 0)'::geometry = 'LINESTRING(1 1,0 0)'::geometry;
Вивід растрових зображень
 ?column?
----------
 f
(1 row)
Figure
Geometry figure for visual-st-geometry-eq-01
Code
SELECT column1
FROM ( VALUES
    ('LINESTRING(0 0, 1 1)'::geometry),
    ('LINESTRING(1 1, 0 0)'::geometry)) AS foo;
Вивід растрових зображень
          st_astext
---------------------
 LINESTRING(0 0,1 1)
 LINESTRING(1 1,0 0)
(2 rows)
Figure
Geometry figure for visual-st-geometry-eq-02

Note: the GROUP BY uses the "=" to compare for geometry equivalency.

Code
SELECT column1
FROM ( VALUES
    ('LINESTRING(0 0, 1 1)'::geometry),
    ('LINESTRING(1 1, 0 0)'::geometry)) AS foo
GROUP BY column1;
Вивід растрових зображень
      st_astext
---------------------
 LINESTRING(0 0,1 1)
 LINESTRING(1 1,0 0)
(2 rows)
Figure
Geometry figure for visual-st-geometry-eq-03

In versions prior to 2.0, this used to return true.

Code
SELECT 'POINT(1707296.37 4820536.77)'::geometry =
   'POINT(1707296.27 4820536.87)'::geometry As pt_intersect;
Вивід растрових зображень
 pt_intersect
--------------
 f
(1 row)

Див. також

ST_Equals, ST_OrderingEquals, ~=


Назва

>> — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго праворуч від B.

Короткий огляд

boolean >>( geometry A , geometry B );

Опис

Оператор >> повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго праворуч від обмежувальної рамки геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 
>
> tbl2.column2 AS right
FROM
  ( VALUES
    (1, 'LINESTRING (2 3,5 6)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING (1 4,1 7)'::geometry),
    (3, 'LINESTRING (6 1,6 5)'::geometry),
    (4, 'LINESTRING (0 0,4 3)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | right
---------+---------+-------
       1 |       2 | t
       1 |       3 | f
       1 |       4 | f
(3 rows)
Figure
Geometry figure for visual-st-geometry-right-01

Див. також

<<, |>>, <<|


Назва

@ — Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B.

Короткий огляд

boolean @( geometry A , geometry B );

Опис

Оператор @ повертає TRUE, якщо обмежувальна рамка геометрії A повністю міститься в обмежувальній рамці геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 @ tbl2.column2 AS contained
FROM
  ( VALUES
    (1, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING (0 0, 4 4)'::geometry),
    (3, 'LINESTRING (2 2, 4 4)'::geometry),
    (4, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | contained
---------+---------+-----------
       1 |       2 | t
       1 |       3 | f
       1 |       4 | t
(3 rows)
Figure
Geometry figure for visual-st-geometry-contained-01

Див. також

~, &&


Назва

@(geometry,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).

Короткий огляд

boolean @( geometry A , box2df B );

Опис

Оператор @ повертає TRUE, якщо 2D обмежувальна рамка геометрії A міститься в 2D обмежувальній рамці B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_Buffer('POINT(2 2)'::geometry, 1) @ ST_MakeBox2D(ST_Point(0, 0), ST_Point(5, 5)) AS is_contained;
Вивід растрових зображень
t

Назва

@(box2df,geometry) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.

Короткий огляд

boolean @( box2df A , geometry B );

Опис

Оператор @ повертає TRUE, якщо 2D обмежувальна рамка A міститься в 2D обмежувальній рамці геометрії B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_MakeBox2D(ST_Point(2, 2), ST_Point(3, 3)) @ ST_Buffer('POINT(1 1)'::geometry, 10) AS is_contained;
Вивід растрових зображень
t

Назва

@(box2df,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.

Короткий огляд

boolean @( box2df A , box2df B );

Опис

Оператор @ повертає TRUE, якщо 2D обмежувальна рамка A міститься в 2D обмежувальній рамці B, використовуючи точність float. Це означає, що якщо A (або B) є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_MakeBox2D(ST_Point(2, 2), ST_Point(3, 3)) @ ST_MakeBox2D(ST_Point(0, 0), ST_Point(5, 5)) AS is_contained;
Вивід растрових зображень
t

Назва

|&> — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться над обмежувальною рамкою B.

Короткий огляд

boolean |&>( geometry A , geometry B );

Опис

Оператор |&> повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться над обмежувальною рамкою геометрії B, або, точніше, перекриває або НЕ знаходиться нижче обмежувальної рамки геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 |&
> tbl2.column2 AS overabove
FROM
  ( VALUES
    (1, 'LINESTRING(6 0,6 4)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING(0 0,3 3)'::geometry),
    (3, 'LINESTRING(0 1,0 5)'::geometry),
    (4, 'LINESTRING(1 2,4 6)'::geometry)) AS tbl2;
Вивід растрових зображень
 column1 | column1 | overabove
---------+---------+-----------
       1 |       2 | t
       1 |       3 | f
       1 |       4 | f
(3 rows)
Figure
Geometry figure for visual-st-geometry-overabove-01

Див. також

&&, &>, &<|, &<


Назва

|>> — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго над обмежувальною рамкою B.

Короткий огляд

boolean |>>( geometry A , geometry B );

Опис

Оператор |>> повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго над обмежувальною рамкою геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 |>> tbl2.column2 AS above
FROM
  ( VALUES
    (1, 'LINESTRING (1 4,1 7)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING (0 0,4 2)'::geometry),
    (3, 'LINESTRING (6 1,6 5)'::geometry),
    (4, 'LINESTRING (2 3,5 6)'::geometry)) AS tbl2;
Вивід растрових зображень
column1 | column1 | above
---------+---------+-------
       1 |       2 | t
       1 |       3 | f
       1 |       4 | f
(3 rows)
Figure
Geometry figure for visual-st-geometry-above-01

Див. також

<<, >>, <<|


Назва

~ — Повертає TRUE, якщо обмежувальна рамка A містить B.

Короткий огляд

boolean ~( geometry A , geometry B );

Опис

Оператор ~ повертає TRUE, якщо обмежувальна рамка геометрії A повністю містить обмежувальну рамку геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT tbl1.column1, tbl2.column1, tbl1.column2 ~ tbl2.column2 AS contains
FROM
  ( VALUES
    (1, 'LINESTRING (0 0,3 3)'::geometry)) AS tbl1,
  ( VALUES
    (2, 'LINESTRING (0 0,4 4)'::geometry),
    (3, 'LINESTRING (1 1,2 2)'::geometry),
    (4, 'LINESTRING (0 0,3 3)'::geometry)) AS tbl2;
Вивід растрових зображень
column1 | column1 | contains
---------+---------+----------
       1 |       2 | f
       1 |       3 | t
       1 |       4 | t
(3 rows)
Figure
Geometry figure for visual-st-geometry-contain-01

Див. також

@, &&


Назва

~(geometry,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).

Короткий огляд

boolean ~( geometry A , box2df B );

Опис

Оператор ~ повертає TRUE, якщо 2D обмежувальна рамка геометрії A містить 2D обмежувальну рамку B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_Buffer('POINT(1 1)'::geometry, 10) ~ ST_MakeBox2D(ST_Point(0, 0), ST_Point(2, 2)) AS contains;
Вивід растрових зображень
t

Назва

~(box2df,geometry) — Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.

Короткий огляд

boolean ~( box2df A , geometry B );

Опис

Оператор ~ повертає TRUE, якщо 2D обмежувальна рамка A містить обмежувальну рамку геометрії B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_MakeBox2D(ST_Point(0, 0), ST_Point(5, 5)) ~ ST_Buffer('POINT(2 2)'::geometry, 1) AS contains;
Вивід растрових зображень
t

Назва

~(box2df,box2df) — Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).

Короткий огляд

boolean ~( box2df A , box2df B );

Опис

Оператор ~ повертає TRUE, якщо 2D обмежувальна рамка A містить 2D обмежувальну рамку B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Примітка]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

Code
SELECT ST_MakeBox2D(ST_Point(0, 0), ST_Point(5, 5)) ~ ST_MakeBox2D(ST_Point(2, 2), ST_Point(3, 3)) AS contains;
Вивід растрових зображень
t

Назва

~= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

Короткий огляд

boolean ~=( geometry A , geometry B );

Опис

Оператор ~= повертає TRUE, якщо обмежувальна рамка геометрії/географії A збігається з обмежувальною рамкою геометрії/географії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Доступність: 1.5.0 змінено поведінку

This function supports Polyhedral surfaces.

[Застереження]

У PostGIS 1.5 поведінка цього оператора змінилася: замість перевірки фактичної геометричної рівності тепер перевіряється лише рівність обмежувальної рамки. Щоб ускладнити справу, поведінка оператора також залежить від того, чи було оновлення жорстким чи м'яким. Щоб дізнатися, яку поведінку має ваша база даних, виконайте запит, наведений нижче. Щоб перевірити справжню рівність, використовуйте ST_OrderingEqualsабо ST_Equals.

Приклади

Code
SELECT 'LINESTRING(0 0,1 1)'::geometry ~= 'LINESTRING(0 1,1 0)'::geometry AS equality;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-geometry-same-01

Див. також

ST_Equals, ST_OrderingEquals, =

7.10.2. Оператори відстані

  • <-> — Повертає 2D відстань між A і B.
  • |=| — Повертає відстань між траєкторіями A і B у найближчій точці їх зближення.
  • <#> — Повертає 2D відстань між обмежувальними рамками A і B.
  • <<->> — Повертає n-вимірну відстань між геометріями A і B або обмежувальними рамками

Назва

<-> — Повертає 2D відстань між A і B.

Короткий огляд

double precision <->( geometry A , geometry B );

double precision <->( geography A , geography B );

Опис

Оператор <-> повертає 2D-відстань між двома геометріями. Використовується в розділі «ORDER BY» для надання наборів результатів найближчих сусідів з індексом за допомогою пошуку справжньої відстані KNN для геометрій та відстані на сфері для географічних даних.

[Примітка]

Цей операнд використовує 2D-індекси GiST, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, що використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Примітка]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою (не знаходиться в підзапиті/cte). Наприклад, 'SRID=3005;POINT(1011102 450541)'::geometry замість a.geom

Детальний приклад див. у семінарі PostGIS: Пошук найближчих сусідів.

Покращено: 2.2.0 — Поведінка True KNN («K найближчих сусідів») для геометрії та географії. Примітка: для географії KNN базується на сфері, а не на сфероїді.

Змінено: 2.2.0 — Старі обхідні шляхи з гібридною синтаксичною конструкцією можуть працювати повільніше після появи справжнього KNN. Дивіться приклади нижче.

Доступність: 2.0.0 — Слабкий KNN надає найближчих сусідів на основі геометричних відстаней до центроїдів, а не реальних відстаней. Точні результати для точок, неточні для всіх інших типів.

Приклади

Code
SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d, edabbr, vaabbr
FROM va2005
ORDER BY d limit 10;
Вивід растрових зображень
d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

Потім необроблена відповідь KNN:

Code
SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
FROM va2005
ORDER BY geom <-> 'SRID=3005;POINT(1011102 450541)'::geometry limit 10;
Вивід растрових зображень
        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

Якщо ви виконаєте "EXPLAIN ANALYZE" для двох запитів, ви побачите підвищення продуктивності для другого.

Коли план не може безпосередньо визначити точні відстані, використовуйте гібридний запит, щоб знайти справжніх найближчих сусідів. Спочатку виконайте запит CTE з використанням KNN з індексом, а потім точний запит, щоб отримати правильний порядок:

Code
WITH index_query AS (
  SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
    FROM va2005
  ORDER BY geom <-> 'SRID=3005;POINT(1011102 450541)'::geometry LIMIT 100)
  SELECT *
    FROM index_query
  ORDER BY d limit 10;
Вивід растрових зображень
        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

Див. також

ST_DWithin, ST_Distance, <#>


Назва

|=| — Повертає відстань між траєкторіями A і B у найближчій точці їх зближення.

Короткий огляд

double precision |=|( geometry A , geometry B );

Опис

Оператор |=| повертає 3D відстань між двома траєкторіями (див. ST_IsValidTrajectory). Це те саме, що й ST_DistanceCPA, але як оператор його можна використовувати для пошуку найближчих сусідів за допомогою N-вимірного індексу.

[Примітка]

Цей операнд використовує індекси ND GiST, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, що використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Примітка]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою (не в підзапиті/cte). Наприклад, 'SRID=3005;LINESTRINGM(0 0 0,0 0 1)'::geometry замість a.geom.

Доступність: 2.2.0.

Приклади

This example orders stored trajectories by their distance from a literal query trajectory.

Code
\set qt 'ST_AddMeasure(ST_MakeLine(ST_MakePointM(-350, 300, 0), ST_MakePointM(-410, 490, 0)), 10, 20)'

SELECT track_id, dist FROM (
  SELECT track_id,
    ST_DistanceCPA(tr, :qt) dist
  FROM trajectories
  ORDER BY tr |=| :qt
  LIMIT 5
) foo;
Вивід растрових зображень
track_id        dist
----------+-------------------
      395 | 0.576496831518066
      380 |  5.06797130410151
      390 |  7.72262293958322
      385 |   9.8004461358071
      405 |  10.9534397988433
(5 rows)

Назва

<#> — Повертає 2D відстань між обмежувальними рамками A і B.

Короткий огляд

double precision <#>( geometry A , geometry B );

Опис

Оператор <#> повертає відстань між двома обмежувальними прямокутниками з плаваючою комою, можливо зчитуючи їх із просторового індексу. Корисний для виконання наближеного упорядкування відстаней найближчих сусідів.

[Примітка]

Цей операнд використовує всі індекси, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, які використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Примітка]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою, наприклад ORDER BY (ST_GeomFromText('POINT(1 2)') <#> geom) замість g1.geom <#>.

Доступність: 2.0.0.

Приклади

Code
SELECT *
FROM (
SELECT b.tlid, b.mtfcc,
    b.geom <#
> ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
        745787 2948499,745740 2948468,745712 2948438,
        745690 2948384,745677 2948319)', 2249) As b_dist,
        ST_Distance(b.geom, ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
        745787 2948499,745740 2948468,745712 2948438,
        745690 2948384,745677 2948319)', 2249)) As act_dist
    FROM bos_roads As b
    ORDER BY b_dist, b.tlid
    LIMIT 100) As foo
    ORDER BY act_dist, tlid LIMIT 10;
Вивід растрових зображень
   tlid    | mtfcc |      b_dist      |     act_dist
-----------+-------+------------------+------------------
  85732027 | S1400 |                0 |                0
  85732029 | S1400 |                0 |                0
  85732031 | S1400 |                0 |                0
  85734335 | S1400 |                0 |                0
  85736037 | S1400 |                0 |                0
 624683742 | S1400 |                0 | 128.528874268666
  85719343 | S1400 | 260.839270432962 | 260.839270432962
  85741826 | S1400 | 164.759294123275 | 260.839270432962
  85732032 | S1400 |           277.75 | 311.830282365264
  85735592 | S1400 |           222.25 | 311.830282365264
(10 rows)

Див. також

ST_DWithin, ST_Distance, <->


Назва

<<->> — Повертає n-вимірну відстань між геометріями A і B або обмежувальними рамками

Короткий огляд

double precision <<->>( geometry A , geometry B );

Опис

Оператор <<->> повертає n-вимірну (евклідову) відстань між центроїдами обмежувальних рамок двох геометрій. Корисний для наближеного упорядкування найближчих сусідів за відстанню.

[Примітка]

Цей операнд використовує індекси n-D GiST, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, що використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Примітка]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою (не знаходиться в підзапиті/cte). Наприклад, 'SRID=3005;POINT(1011102 450541)'::geometry замість a.geom

Доступність: 2.2.0.

Див. також

<->

7.11. Просторові відносини

Анотація

Ці функції визначають просторові відносини між геометріями.

7.11.1. Топологічні відносини

  • ST_3DIntersects — Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_Contains — Перевіряє, чи кожна точка B лежить в A, і чи мають їхні внутрішні частини спільну точку
  • ST_ContainsProperly — Перевіряє, чи кожна точка B лежить у внутрішній частині A
  • ST_CoveredBy — Перевіряє, чи кожна точка A лежить в B
  • ST_Covers — Перевіряє, чи кожна точка B лежить в A
  • ST_Crosses — Перевіряє, чи дві геометрії мають деякі, але не всі внутрішні точки спільні
  • ST_Disjoint — Перевіряє, чи дві геометрії не мають спільних точок
  • ST_Equals — Перевіряє, чи дві геометрії містять однаковий набір точок
  • ST_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_LineCrossingDirection — Повертає число, що вказує на поведінку перетину двох LineStrings
  • ST_OrderingEquals — Перевіряє, чи дві геометрії представляють одну і ту ж геометрію і мають точки в одному і тому ж порядку напрямків
  • ST_Overlaps — Перевіряє, чи дві геометрії мають однакові розміри і перетинаються, але кожна з них має принаймні одну точку, яка не належить до іншої
  • ST_Relate — Перевіряє, чи дві геометрії мають топологічний зв'язок, що відповідає шаблону матриці перетину, або обчислює їх матрицю перетину
  • ST_RelateMatch — Перевіряє, чи відповідає матриця перетину DE-9IM шаблону матриці перетину
  • ST_Touches — Перевіряє, чи мають дві геометрії хоча б одну спільну точку, але їхні внутрішні частини не перетинаються
  • ST_Within — Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку

Назва

ST_3DIntersects — Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)

Короткий огляд

boolean ST_3DIntersects( geometry geomA , geometry geomB );

Опис

Перекриття, дотики, всередині всі означають просторове перетин. Якщо будь-яке з вищезазначених повертає значення true, то геометрії також просторово перетинаються. Роз'єднаність означає false для просторового перетину.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

[Примітка]

Через помилки плаваючої стійкості геометрії не завжди перетинаються так, як ви очікуєте після геометричної обробки. Наприклад, найближча точка на лінії до геометрії може не лежати на лінії. Для таких випадків, коли відстань в один сантиметр ви хочете вважати перетином, використовуйте ST_3DDWithin.

Змінено: 3.0.0 Вилучено бекенд SFCGAL, бекенд GEOS підтримує TIN.

Доступність: 2.0.0

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1

Приклади геометрії

Code
SELECT ST_3DIntersects(pt, line), ST_Intersects(pt, line)
FROM (SELECT 'POINT(0 0 2)'::geometry As pt, 'LINESTRING (0 0 1,0 2 3)'::geometry As line) As foo;
Вивід растрових зображень
st_3dintersects | st_intersects
-----------------+---------------
 f               | t
(1 row)
Figure
Geometry figure for visual-st-3dintersects-01

Приклади TIN

Code
SELECT ST_3DIntersects('TIN(((0 0 0,1 0 0,0 1 0,0 0 0)))'::geometry, 'POINT(.1 .1 0)'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-3dintersects-02

Див. також

ST_3DDWithin, ST_Intersects


Назва

ST_Contains — Перевіряє, чи кожна точка B лежить в A, і чи мають їхні внутрішні частини спільну точку

Короткий огляд

boolean ST_Contains(geometry geomA, geometry geomB);

Опис

Повертає TRUE, якщо геометрія A містить геометрію B. A містить B тоді і тільки тоді, коли всі точки B лежать всередині (тобто у внутрішній частині або на межі) A (або, що еквівалентно, жодна точка B не лежить поза межами A), а внутрішні частини A і B мають принаймні одну спільну точку.

У математичних термінах: ST_Contains(A, B) ⇔ (A ⋂ B = B) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

Відношення "містить" є рефлексивним: кожна геометрія містить саму себе. (На відміну від цього, у предикаті ST_ContainsProperly геометрія не містить саму себе належним чином). Відношення є антисиметричним: якщо ST_Contains(A,B) = true і ST_Contains(B,A) = true, то дві геометрії повинні бути топологічно рівними (ST_Equals(A,B) = true).

ST_Contains є оберненим до ST_Within. Отже, ST_Contains(A,B) = ST_Within(B,A).

[Примітка]

Оскільки внутрішні частини повинні мати спільну точку, тонкість визначення полягає в тому, що полігони та лінії не містять лінії та точки, що повністю лежать у їхніх межах. Для отримання додаткової інформації див. Тонкощі OGC Covers, Contains, Within. Предикат ST_Covers забезпечує більш всеосяжне відношення.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_Contains.

Виконано модулем GEOS

Покращено: 2.3.0 Покращення короткого замикання PIP розширено для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутнику.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Важливо]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3 - те саме, що і в (geometry B, geometry A)

This method implements the SQL/MM specification. SQL-MM 3: 5.1.31

Приклади

ST_Contains повертає TRUE у таких випадках:

A LineString contains a MultiPoint whose points lie in its interior or boundary.

Code
SELECT ST_Contains(a, b)
FROM (SELECT
  'LINESTRING (10 190,60 80,130 120,190 10)'::geometry AS a,
  'MULTIPOINT (60 80,190 10)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-contains-01

A Polygon contains a Point in its interior.

Code
SELECT ST_Contains(a, b)
FROM (SELECT
  'POLYGON ((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130))'::geometry AS a,
  'POINT (99 130)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-contains-02

A Polygon contains a LineString with interior points inside the Polygon.

Code
SELECT ST_Contains(a, b)
FROM (SELECT
  'POLYGON ((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130))'::geometry AS a,
  'LINESTRING (50 190,110 190,99 130)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-contains-03

A Polygon contains another Polygon in its interior.

Code
SELECT ST_Contains(a, b)
FROM (SELECT
  'POLYGON ((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130))'::geometry AS a,
  'POLYGON ((70 40,100 50,120 80,80 110,50 90,70 40))'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-contains-04

ST_Contains повертає FALSE у таких ситуаціях:

A Polygon does not contain a MultiPoint when one point lies in a hole.

Code
SELECT ST_Contains(a, b)
FROM (SELECT
  'POLYGON ((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130),(70 40,100 50,120 80,80 110,50 90,70 40))'::geometry AS a,
  'MULTIPOINT (99 130,87 70)'::geometry AS b
) AS example;
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-contains-05

A Polygon does not contain a LineString extending outside it.

Code
SELECT ST_Contains(a, b)
FROM (SELECT
  'POLYGON ((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130))'::geometry AS a,
  'LINESTRING (99 130,170 131)'::geometry AS b
) AS example;
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-contains-06

Через умову внутрішнього перетину ST_Contains повертає FALSE у таких ситуаціях (тоді як ST_Covers повертає TRUE):

A LineString does not contain a Point lying only on its boundary.

Code
SELECT ST_Contains(a, b), ST_Covers(a, b)
FROM (SELECT
  'LINESTRING (10 190,60 80,130 120,190 10)'::geometry AS a,
  'POINT (190 10)'::geometry AS b
) AS example;
Вивід растрових зображень
f | t
Figure
Geometry figure for visual-st-contains-07

A Polygon does not contain a LineString lying entirely on its boundary.

Code
SELECT ST_Contains(a, b), ST_Covers(a, b)
FROM (SELECT
  'POLYGON ((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130))'::geometry AS a,
  'LINESTRING (80 190,110 190,140 150,150 80)'::geometry AS b
) AS example;
Вивід растрових зображень
f | t
Figure
Geometry figure for visual-st-contains-08

This example tests a circle within another circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 10) AS smallc,
         ST_Buffer(center, 20) AS bigc
  FROM (SELECT 'POINT(1 2)'::geometry AS center) AS p
)
SELECT
  ST_Contains(smallc, bigc) AS smallcontainsbig,
  ST_Contains(bigc, smallc) AS bigcontainssmall,
  ST_Contains(bigc, ST_Union(smallc, bigc)) AS bigcontainsunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) AS bigisunion,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) AS bigcoversexterior,
  ST_Contains(bigc, ST_ExteriorRing(bigc)) AS bigcontainsexterior
FROM circles;
Вивід растрових зображень
-[ RECORD 1 ]-----
smallcontainsbig   | f
bigcontainssmall   | t
bigcontainsunion   | t
bigisunion         | t
bigcoversexterior  | t
bigcontainsexterior | f
Figure
Geometry figure for visual-st-contains-09

This example demonstrates the difference between contains and contains-properly predicates.

Code
SELECT
  ST_GeometryType(geom_a) AS geomtype,
  ST_Contains(geom_a, geom_a) AS acontainsa,
  ST_ContainsProperly(geom_a, geom_a) AS acontainspropa,
  ST_Contains(geom_a, ST_Boundary(geom_a)) AS acontainsba,
  ST_ContainsProperly(geom_a, ST_Boundary(geom_a)) AS acontainspropba
FROM (VALUES
    (ST_Buffer(ST_Point(1, 1), 5, 1)),
    (ST_MakeLine(ST_Point(1, 1), ST_Point(-1, -1))),
    (ST_Point(1, 1))
  ) AS foo(geom_a);
Вивід растрових зображень
geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f

 
Figure
Geometry figure for visual-st-contains-10

Назва

ST_ContainsProperly — Перевіряє, чи кожна точка B лежить у внутрішній частині A

Короткий огляд

boolean ST_ContainsProperly(geometry geomA, geometry geomB);

Опис

Повертає true, якщо кожна точка B лежить у внутрішній частині A (або, що еквівалентно, жодна точка B не лежить на межі або зовні A).

У математичних термінах: ST_ContainsProperly(A, B) ⇔ Int(A) ⋂ B = B

A містить B належним чином, якщо матриця перетину DE-9IM для двох геометрій збігається [T**FF*FF*]

A не містить себе належним чином, але містить себе.

Цей предикат використовується для обчислення перетинів набору геометрій з великою полігональною геометрією. Оскільки перетин є досить повільною операцією, ефективніше використовувати containsProperly для відфільтрування тестових геометрій, які повністю лежать всередині області. У цих випадках перетин апріорі відомий як точна оригінальна тестова геометрія.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_ContainsProperly.

[Примітка]

Перевага цього предиката над ST_Contains та ST_Intersects полягає в тому, що його можна обчислювати ефективніше, без необхідності обчислювати топологію в окремих точках.

Виконується модулем GEOS.

Доступність: 1.4.0

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Важливо]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

Приклади

This example tests a circle within another circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 10) AS smallc,
         ST_Buffer(center, 20) AS bigc
  FROM (SELECT 'POINT(1 2)'::geometry AS center) AS p
)
SELECT
  ST_ContainsProperly(smallc, bigc) AS smallcontainspropbig,
  ST_ContainsProperly(bigc, smallc) AS bigcontainspropsmall,
  ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) AS bigcontainspropunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) AS bigisunion,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) AS bigcoversexterior,
  ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) AS bigcontainsexterior
FROM circles;
Вивід растрових зображень
-[ RECORD 1 ]-----
smallcontainspropbig   | f
bigcontainspropsmall   | t
bigcontainspropunion   | f
bigisunion             | t
bigcoversexterior      | t
bigcontainsexterior    | f
Figure
Geometry figure for visual-st-containsproperly-01

This example demonstrates the difference between contains and contains-properly predicates.

Code
WITH input(geom) AS (VALUES
  (ST_Buffer(ST_Point(1, 1), 5, 1)),
  (ST_MakeLine(ST_Point(1, 1), ST_Point(-1, -1))),
  (ST_Point(1, 1))
)
SELECT ST_GeometryType(geom) AS geomtype,
       ST_Contains(geom, geom) AS acontainsa,
       ST_ContainsProperly(geom, geom) AS acontainspropa,
       ST_Contains(geom, ST_Boundary(geom)) AS acontainsba,
       ST_ContainsProperly(geom, ST_Boundary(geom)) AS acontainspropba
FROM input;
Вивід растрових зображень
geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f
 
Figure
Geometry figure for visual-st-containsproperly-02

Назва

ST_CoveredBy — Перевіряє, чи кожна точка A лежить в B

Короткий огляд

boolean ST_CoveredBy(geometry geomA, geometry geomB);

boolean ST_CoveredBy(geography geogA, geography geogB);

Опис

Повертає true, якщо кожна точка в геометрії/географії A лежить всередині (тобто перетинає внутрішню частину або межу) геометрії/географії B. Еквівалентно, перевіряє, що жодна точка A не лежить поза (зовні) B.

У математичних термінах: ST_CoveredBy(A, B) ⇔ A ⋂ B = A

ST_CoveredBy є оберненим до ST_Covers. Отже, ST_CoveredBy(A,B) = ST_Covers(B,A).

Як правило, цю функцію слід використовувати замість ST_Within, оскільки вона має простіше визначення, яке не містить особливості, що "межі не знаходяться всередині їх геометрії".

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_CoveredBy.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Важливо]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

Виконано модулем GEOS

Доступність: 1.2.2

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Це не стандарт OGC, але Oracle теж його має.

Приклади

This example tests a circle covered by another circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 10) AS smallc,
         ST_Buffer(center, 20) AS bigc
  FROM (SELECT 'POINT(1 2)'::geometry AS center) AS p
)
SELECT
  ST_CoveredBy(smallc, smallc) AS smallinsmall,
  ST_CoveredBy(smallc, bigc) AS smallcoveredbybig,
  ST_CoveredBy(ST_ExteriorRing(bigc), bigc) AS exteriorcoveredbybig,
  ST_Within(ST_ExteriorRing(bigc), bigc) AS exteriorwithinbig
FROM circles;
Вивід растрових зображень
smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exteriorwithinbig
--------------+-------------------+----------------------+------------------
 t            | t                 | t                    | f
(1 row) 
Figure
Geometry figure for visual-st-coveredby-01

Назва

ST_Covers — Перевіряє, чи кожна точка B лежить в A

Короткий огляд

boolean ST_Covers(geometry geomA, geometry geomB);

boolean ST_Covers(geography geogpolyA, geography geogpointB);

Опис

Повертає true, якщо кожна точка в геометрії/географії B лежить всередині (тобто перетинає внутрішню частину або межу) геометрії/географії A. Еквівалентно, перевіряє, що жодна точка B не лежить поза (зовні) A.

У математичних термінах: ST_Covers(A, B) ⇔ A ⋂ B = B

ST_Covers є оберненим до ST_CoveredBy. Отже, ST_Covers(A,B) = ST_CoveredBy(B,A).

Як правило, цю функцію слід використовувати замість ST_Contains, оскільки вона має простіше визначення, яке не містить особливості, що "геометрії не містять своїх меж".

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_Covers.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Важливо]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

Виконано модулем GEOS

Покращено: 2.4.0 Додано підтримку полігону в полігоні та лінії в полігоні для типу географії

Покращено: 2.3.0 Покращення короткого замикання PIP для геометрії, розширене для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутниках.

Доступність: 1.5 — додано підтримку географії.

Доступність: 1.2.2

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Це не стандарт OGC, але Oracle теж його має.

Приклади

Приклад геометрії

This example tests a circle covering another circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 10) AS smallc,
         ST_Buffer(center, 20) AS bigc
  FROM (SELECT 'POINT(1 2)'::geometry AS center) AS p
)
SELECT
  ST_Covers(smallc, smallc) AS smallinsmall,
  ST_Covers(smallc, bigc) AS smallcoversbig,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) AS bigcoversexterior,
  ST_Contains(bigc, ST_ExteriorRing(bigc)) AS bigcontainsexterior
FROM circles;
Вивід растрових зображень
smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
 t            | f              | t                 | f
(1 row) 
Figure
Geometry figure for visual-st-covers-01

Geography example

This example compares a point with a 300-meter buffer against a point and against a 10-meter buffer around that point.

Code
SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt,
  ST_Covers(ST_Buffer(geog_pt, 10), geog_pt) As buff_10m_covers_cent
  FROM (SELECT ST_Buffer('SRID=4326;POINT(-99.327 31.4821)'::geography, 300) As geog_poly,
        'SRID=4326;POINT(-99.33 31.483)'::geography As geog_pt ) As foo;
Вивід растрових зображень
poly_covers_pt | buff_10m_covers_cent
----------------+------------------
 f              | t

Див. також

ST_Contains, ST_CoveredBy, ST_Within


Назва

ST_Crosses — Перевіряє, чи дві геометрії мають деякі, але не всі внутрішні точки спільні

Короткий огляд

boolean ST_Crosses(geometry g1, geometry g2);

Опис

Порівнює два геометричні об'єкти і повертає true, якщо їх перетин "просторово перетинається", тобто геометрії мають деякі, але не всі внутрішні точки спільні. Перетин внутрішніх частин геометрій повинен бути не порожнім і мати розмірність, меншу за максимальну розмірність двох вхідних геометрій, а перетин двох геометрій не повинен дорівнювати жодній з геометрій. В іншому випадку повертається false. Відношення перетину є симетричним і нерефлексивним.

У математичних термінах: ST_Crosses(A, B) ⇔ (dim( Int(A) ⋂ Int(B) ) <max( dim( Int(A) ), dim( Int(B) ) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

Геометрії перетинаються, якщо їх матриця перетину DE-9IM збігається:

  • T*T****** для ситуацій "точка/лінія", "точка/площа" та "лінія/площа"

  • T*****T** для ситуацій "лінія/точка", "площа/точка" та "площа/лінія"

  • 0******** для ситуацій "лінія/лінія"

  • результатом є false для ситуацій "точка/точка" та "площа/площа"

[Примітка]

Специфікація OpenGIS Simple Features визначає цей предикат тільки для ситуацій "Точка/Лінія", "Точка/Площа", "Лінія/Лінія" та "Лінія/Площа". JTS / GEOS розширює визначення, щоб воно застосовувалося також до ситуацій "Лінія/Точка", "Площа/Точка" та "Площа/Лінія". Це робить відношення симетричним.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.29

Приклади

У всіх наведених нижче ситуаціях повертається значення true.

A LineString crosses a MultiPoint when some, but not all, points lie on the line.

Code
SELECT ST_Crosses(a, b)
FROM (SELECT
  'LINESTRING (10 190,60 80,130 120,190 10)'::geometry AS a,
  'MULTIPOINT (80 170,120 13,130 120,181 142)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-crosses-01

A Polygon crosses a MultiPoint when some, but not all, points lie in its interior.

Code
SELECT ST_Crosses(a, b)
FROM (SELECT
  'POLYGON ((30 190,10 100,10 10,90 20,110 70,80 130,30 190))'::geometry AS a,
  'MULTIPOINT (56 60,120 13,130 119,181 142)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-crosses-02

A LineString crosses a Polygon when part of the line lies inside and part outside.

Code
SELECT ST_Crosses(a, b)
FROM (SELECT
  'POLYGON ((30 190,10 100,10 10,90 20,110 70,80 130,30 190))'::geometry AS a,
  'LINESTRING (30 40,70 50,120 150,190 190)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-crosses-03

Two LineStrings cross when they share an interior point.

Code
SELECT ST_Crosses(a, b)
FROM (SELECT
  'LINESTRING (10 190,60 80,130 120,190 10)'::geometry AS a,
  'LINESTRING (10 10,70 30,110 120,190 190)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-crosses-04

Розглянемо ситуацію, коли користувач має дві таблиці: таблицю доріг і таблицю автомагістралей.

Code
CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

Code
CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

Щоб визначити список доріг, які перетинають шосе, використовуйте запит, подібний до:

Code
SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);

Див. також

ST_Contains, ST_Overlaps


Назва

ST_Disjoint — Перевіряє, чи дві геометрії не мають спільних точок

Короткий огляд

boolean ST_Disjoint( geometry A , geometry B );

Опис

Повертає true, якщо дві геометрії не перетинаються. Геометрії не перетинаються, якщо вони не мають спільних точок.

Якщо для пари геометрій справедливе будь-яке інше просторове відношення, вони не є роз'єднаними. Роз'єднаність означає, що ST_Intersects є хибним.

У математичних термінах: ST_Disjoint(A, B) ⇔ A ⋂ B = ∅

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

Виконано модулем GEOS

[Примітка]

Цей виклик функції не використовує індекси. Негативний предикат ST_Intersectsможна використовувати як більш ефективну альтернативу, яка використовує індекси: ST_Disjoint(A,B) = NOT ST_Intersects(A,B)

[Примітка]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 //s2.1.13.3 - a.Relate(b, 'FF*FF****')

This method implements the SQL/MM specification. SQL-MM 3: 5.1.26

Приклади

Code
SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0,0 2 )'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-disjoint-01
Code
SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0,0 2 )'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-disjoint-02

Див. також

ST_Intersects


Назва

ST_Equals — Перевіряє, чи дві геометрії містять однаковий набір точок

Короткий огляд

boolean ST_Equals(geometry A, geometry B);

Опис

Повертає true, якщо задані геометрії є "топологічно рівними". Використовуйте це для отримання "кращої" відповіді, ніж "=". Топологічна рівність означає, що геометрії мають однаковий розмір, а їхні набори точок займають однаковий простір. Це означає, що порядок вершин може бути різним у топологічно рівних геометріях. Щоб перевірити, чи порядок точок є послідовним, використовуйте ST_OrderingEquals (слід зауважити, що ST_OrderingEquals є дещо суворішим, ніж проста перевірка того, чи порядок точок є однаковим).

У математичних термінах: ST_Equals(A, B) ⇔ A = B

Діє наступне співвідношення: ST_Equals(A, B) ⇔ ST_Within(A,B) ∧ ST_Within(B,A)

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2

This method implements the SQL/MM specification. SQL-MM 3: 5.1.24

Змінено: 2.2.0 Повертає true навіть для недійсних геометрій, якщо вони є бінарними рівними

Приклади

Code
SELECT ST_Equals('LINESTRING(0 0,10 10)',
'LINESTRING(0 0,5 5,10 10)');
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-equals-01
Code
SELECT ST_Equals(ST_Reverse('LINESTRING(0 0,10 10)'),
'LINESTRING(0 0,5 5,10 10)');
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-equals-02

Назва

ST_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)

Короткий огляд

boolean ST_Intersects( geometry geomA , geometry geomB );

boolean ST_Intersects( geography geogA , geography geogB );

Опис

Повертає true, якщо дві геометрії перетинаються. Геометрії перетинаються, якщо вони мають спільну точку.

Для географії використовується допуск відстані 0,00001 метра (тобто точки, які знаходяться дуже близько одна до одної, вважаються пересічними).

У математичних термінах: ST_Intersects(A, B) ⇔ A ⋂ B ≠ ∅

Геометрії перетинаються, якщо їх матриця перетину DE-9IM відповідає одній з наступних:

  • T********

  • *T*******

  • ***T*****

  • ****T****

Просторове перетин передбачається всіма іншими тестами просторових відносин, за винятком ST_Disjoint, який перевіряє, що геометрії НЕ перетинаються.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

Змінено: 3.0.0 Вилучено версію SFCGAL та додано вбудовану підтримку 2D TINS.

Покращено: 2.5.0 Підтримує GEOMETRYCOLLECTION.

Покращено: 2.3.0 Покращення короткого замикання PIP розширено для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутнику.

Виконується модулем GEOS (для геометрії), географія є рідною

Доступність: 1.5 було впроваджено підтримку географії.

[Примітка]

Для географії ця функція має похибку відстані приблизно 0,00001 метра і використовує обчислення сфери, а не сфероїда.

[Примітка]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 //s2.1.13.3 - ST_Intersects(g1, g2 ) --> Not (ST_Disjoint(g1, g2 ))

This method implements the SQL/MM specification. SQL-MM 3: 5.1.27

This method supports Circular Strings and Curves.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

Code
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0,0 2 )'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-intersects-01
Code
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0,0 2 )'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-intersects-02

This example looks up rows in a table; for faster lookup, the geometry column should have a GiST index.

Code
SELECT id, name FROM cities WHERE ST_Intersects(geom, 'SRID=4326;POLYGON((28 53,27.707 52.293,27 52,26.293 52.293,26 53,26.293 53.707,27 54,27.707 53.707,28 53))');
Вивід растрових зображень
id | name
----+-------
  2 | Minsk
(1 row)

Приклади з географії

Code
SELECT ST_Intersects('SRID=4326;LINESTRING(-43.23456 72.4567,-43.23456 72.4568)'::geography,
'SRID=4326;POINT(-43.23456 72.4567772)'::geography
);
Вивід растрових зображень
t

Див. також

&&, ST_3DIntersects, ST_Disjoint


Назва

ST_LineCrossingDirection — Повертає число, що вказує на поведінку перетину двох LineStrings

Короткий огляд

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

Опис

Задано дві лінії, повертає ціле число від -3 до 3, що вказує на тип перетину між ними. 0 означає відсутність перетину. Підтримується тільки для LINESTRINGs.

Номер перетину має таке значення:

  • 0: ЛІНІЯ БЕЗ ПЕРЕТИНУ

  • -1: ПЕРЕТИН ЛІНІЇ ЗЛІВА

  • 1: ПЕРЕТИН ЛІНІЇ СПРАВА

  • -2: КІНЕЦЬ ЛІНІЇ МУЛЬТИКРОС ЛІВОРУЧ

  • 2: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ СПРАВА

  • -3: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ Ж САМИЙ ПЕРШИЙ ЗЛІВА

  • 3: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ Ж САМИЙ ПЕРШИЙ ПРАВОРУЧ

Доступність: 1.4

Приклади

Приклад: ЛІНІЯ ПЕРЕТИНАЄ ЛІВОРУЧ і ЛІНІЯ ПЕРЕТИНАЄ ПРАВОРУЧ

Code
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  'LINESTRING(25 169,89 114,40 70,86 43)'::geometry As lineA,
  'LINESTRING (20 140,71 74,161 53)'::geometry As lineB
  ) As foo;
Вивід растрових зображень
A_cross_B | B_cross_A
-----------+-----------
        -1 |         1
Figure
Geometry figure for visual-st-linecrossingdirection-01

Приклад:

Code
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
 'LINESTRING(25 169,89 114,40 70,86 43)'::geometry As lineA,
 'LINESTRING(171 154,20 140,71 74,161 53)'::geometry As lineB
  ) As foo;
Вивід растрових зображень
A_cross_B | B_cross_A
-----------+-----------
         3 |        -3
Figure
Geometry figure for visual-st-linecrossingdirection-02

Приклад: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ САМИЙ ПЕРШИЙ ЛІВИЙ і ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ САМИЙ ПЕРШИЙ ПРАВИЙ

Code
SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  'LINESTRING(25 169,89 114,40 70,86 43)'::geometry As lineA,
  'LINESTRING(5 90,71 74,20 140,171 154)'::geometry As lineB
  ) As foo;
Вивід растрових зображень
A_cross_B | B_cross_A
-----------+-----------
        -2 |         2
Figure
Geometry figure for visual-st-linecrossingdirection-03

Приклад:Знаходить всі вулиці, які перетинаються

Code

SELECT s1.gid, s2.gid, ST_LineCrossingDirection(s1.geom, s2.geom)
  FROM streets s1 CROSS JOIN streets s2
         ON (s1.gid != s2.gid AND s1.geom && s2.geom )
WHERE ST_LineCrossingDirection(s1.geom, s2.geom) 
> 0;

Див. також

ST_Crosses


Назва

ST_OrderingEquals — Перевіряє, чи дві геометрії представляють одну і ту ж геометрію і мають точки в одному і тому ж порядку напрямків

Короткий огляд

boolean ST_OrderingEquals(geometry A, geometry B);

Опис

ST_OrderingEquals порівнює дві геометрії і повертає t (TRUE), якщо геометрії рівні і координати мають однаковий порядок; в іншому випадку повертає f (FALSE).

[Примітка]

Ця функція реалізована відповідно до специфікації ArcSDE SQL, а не SQL-MM. http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals

This method implements the SQL/MM specification. SQL-MM 3: 5.1.43

Приклади

Code
SELECT ST_OrderingEquals('LINESTRING(0 0,10 10)',
'LINESTRING(0 0,5 5,10 10)');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-orderingequals-01
Code
SELECT ST_OrderingEquals('LINESTRING(0 0,10 10)',
'LINESTRING(0 0,10 10)');
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-orderingequals-02
Code
SELECT ST_OrderingEquals('POLYGON((0 0,0 1,1 1,1 0,0 0))',
'POLYGON((0 0,1 0,1 1,0 1,0 0))');
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-orderingequals-03

Див. також

&&, ST_Equals, ST_Reverse


Назва

ST_Overlaps — Перевіряє, чи дві геометрії мають однакові розміри і перетинаються, але кожна з них має принаймні одну точку, яка не належить до іншої

Короткий огляд

boolean ST_Overlaps(geometry A, geometry B);

Опис

Повертає TRUE, якщо геометрії A і B "просторово перекриваються". Дві геометрії перекриваються, якщо вони мають однаковий розмір, їх внутрішні частини перетинаються в цьому розмірі і кожна з них має принаймні одну точку всередині іншої (або, що еквівалентно, жодна з них не покриває іншу). Відношення перекриття є симетричним і нерефлексивним.

У математичних термінах: ST_Overlaps(A, B) ⇔ ( dim(A) = dim(B) = dim( Int(A) ⋂ Int(B) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_Overlaps.

Виконано модулем GEOS

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.32

Приклади

ST_Overlaps повертає TRUE у таких ситуаціях:

Two MultiPoints overlap when they share some, but not all, points.

Code
SELECT ST_Overlaps(a, b)
FROM (SELECT
  'MULTIPOINT ((20 20),(40 90),(80 130),(140 100),(110 40),(120 170),(150 70))'::geometry AS a,
  'MULTIPOINT ((180 10),(40 90),(80 130),(160 150),(110 40),(50 50),(50 160))'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-overlaps-01

Two LineStrings overlap along part of their paths.

Code
SELECT ST_Overlaps(a, b)
FROM (SELECT
  'LINESTRING (10 10,40 90,70 110,140 110,170 130,190 190)'::geometry AS a,
  'LINESTRING (10 190,50 130,90 110,130 110,160 70,180 10)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-overlaps-02

Two Polygons overlap where their interiors intersect and neither contains the other.

Code
SELECT ST_Overlaps(a, b)
FROM (SELECT
  'POLYGON ((140 140,140 122,135 105,126 100,118 99,110 94,100 86,97 73,102 59,98 49,87 38,70 30,55 29,40 30,28 38,20 50,14 66,10 84,6 100,4 119,4 143,6 166,10 180,18 191,28 195,40 190,55 189,67 186,86 179,112 165,124 158,133 148,140 140),(48 177,40 177,30 174,24 166,22 159,25 155,30 153,40 154,45 157,52 162,53 169,51 174,48 177))'::geometry AS a,
  'POLYGON ((75 63,79 50,87 38,95 31,108 25,124 22,140 18,154 11,166 6,176 10,184 21,188 35,190 58,190 82,193 104,190 121,185 139,178 154,166 163,154 171,139 172,124 171,112 165,96 152,92 142,92 126,86 116,79 110,75 104,72 94,73 86,75 76,75 63))'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-overlaps-03

Точка на лінійному елементі міститься, але оскільки вона має менший розмір, вона не перетинається і не перекривається.

Code
SELECT ST_Overlaps(a, b) AS overlaps, ST_Crosses(a, b) AS crosses,
       ST_Intersects(a, b) AS intersects, ST_Contains(b, a) AS b_contains_a
FROM (SELECT 'POINT (100 100)'::geometry As a,
             'LINESTRING (30 50,40 160,160 40,180 160)'::geometry  AS b) AS t
Вивід растрових зображень
overlaps | crosses | intersects | b_contains_a
---------+----------------------+--------------
f        | f       | t          | t
Figure
Geometry figure for visual-st-overlaps-04

Лінія, яка частково покриває багатокутник, перетинається і перетинає його, але не перекриває, оскільки має інший розмір.

Code
SELECT ST_Overlaps(a, b) AS overlaps, ST_Crosses(a, b) AS crosses,
       ST_Intersects(a, b) AS intersects, ST_Contains(a, b) AS contains
FROM (SELECT 'POLYGON ((40 170,90 30,180 100,40 170))'::geometry AS a,
             'LINESTRING(10 10,190 190)'::geometry AS b) AS t;
Вивід растрових зображень
overlap | crosses | intersects | contains
---------+---------+------------+--------------
 f       | t       | t          | f
Figure
Geometry figure for visual-st-overlaps-05

Два багатокутники, які перетинаються, але жоден з них не міститься в іншому, перекриваються, але не перетинаються, оскільки їх перетин має однаковий розмір.

Code
SELECT ST_Overlaps(a, b) AS overlaps, ST_Crosses(a, b) AS crosses,
       ST_Intersects(a, b) AS intersects, ST_Contains(b, a) AS b_contains_a,
       ST_Dimension(a) AS dim_a, ST_Dimension(b) AS dim_b,
       ST_Dimension(ST_Intersection(a, b)) AS dim_int
FROM (SELECT 'POLYGON ((40 170,90 30,180 100,40 170))'::geometry AS a,
             'POLYGON ((110 180,20 60,130 90,110 180))'::geometry AS b) As t;
Вивід растрових зображень
overlaps | crosses | intersects | b_contains_a | dim_a | dim_b | dim_int
----------+---------+------------+--------------+-------+-------+-----------
 t        | f       | t          | f            |     2 |     2 |       2
Figure
Geometry figure for visual-st-overlaps-06

Назва

ST_Relate — Перевіряє, чи дві геометрії мають топологічний зв'язок, що відповідає шаблону матриці перетину, або обчислює їх матрицю перетину

Короткий огляд

boolean ST_Relate(geometry geomA, geometry geomB, text intersectionMatrixPattern);

text ST_Relate(geometry geomA, geometry geomB);

text ST_Relate(geometry geomA, geometry geomB, integer boundaryNodeRule);

Опис

Ці функції дозволяють перевіряти та оцінювати просторові (топологічні) відносини між двома геометріями, як визначено в Моделі з розширеними розмірами 9-перетину (DE-9IM).

DE-9IM визначається як 9-елементна матриця, що вказує розмір перетинів між внутрішньою, межовою та зовнішньою частинами двох геометрій. Він представлений 9-символьним текстовим рядком із використанням символів 'F', '0', '1', '2' (наприклад, "FF1FF0102").

Певний тип просторових відносин можна перевірити, зіставивши матрицю перетину з шаблоном матриці перетину. Шаблони можуть містити додаткові символи 'T' (що означає "перетин не порожній") та "*" (що означає "будь-яке значення"). Загальні просторові відносини забезпечуються названими функціями ST_Contains, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches та ST_Within. Використання явного шаблону дозволяє перевірити кілька умов перетину, перехрещення тощо за один крок. Це також дозволяє перевірити просторові відносини, які не мають іменованої функції просторових відносин. Наприклад, відношення "Внутрішнє перетинання" має шаблон DE-9IM T********, який не оцінюється жодним іменованим предикатом.

Для отримання додаткової інформації див. Розділ 5.1, «Determining Spatial Relationships».

Варіант 1: Перевіряє, чи дві геометрії пов'язані просторово відповідно до заданого intersectionMatrixPattern.

[Примітка]

На відміну від більшості названих предикатів просторових відносин, це НЕ включає автоматичний виклик індексу. Причина полягає в тому, що деякі відносини є істинними для геометрій, які НЕ перетинаються (наприклад, Disjoint). Якщо ви використовуєте шаблон відносин, який вимагає перетину, включіть виклик індексу &&.

[Примітка]

Краще використовувати функцію іменованих відносин, якщо вона доступна, оскільки вона автоматично використовує просторовий індекс, якщо такий існує. Крім того, вона може реалізовувати оптимізацію продуктивності, яка недоступна при повній оцінці відносин.

Варіант 2: Повертає матричний рядок DE-9IM для просторового відношення між двома вхідними геометріями. Матричний рядок можна перевірити на відповідність шаблону DE-9IM за допомогою ST_RelateMatch.

Варіант 3: Як і варіант 2, але дозволяє вказати правило межового вузла. Правило межового вузла дозволяє більш точно контролювати, чи кінцеві точки MultiLineStrings вважаються такими, що лежать у внутрішній частині DE-9IM або на межі. Значення boundaryNodeRule є такими:

  • 1: OGC-Mod2 — кінцеві точки лінії знаходяться в межах межі, якщо їх кількість непарна. Це правило визначено стандартом OGC SFS і є стандартним для функції ST_Relate.

  • 2: Кінцева точка — всі кінцеві точки знаходяться в межі.

  • 3: MultivalentEndpoint - кінцеві точки знаходяться в межі, якщо вони зустрічаються більше одного разу. Іншими словами, межа - це всі "приєднані" або "внутрішні" кінцеві точки (але не "неприєднані/зовнішні").

  • 4: MonovalentEndpoint - кінцеві точки знаходяться в межі, якщо вони зустрічаються тільки один раз. Іншими словами, межа - це всі "неприєднані" або "зовнішні" кінцеві точки.

Ця функція не входить до специфікації OGC, але є імпліцитною. Див. s2.1.13.2

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.25

Виконано модулем GEOS

Покращено: 2.0.0 — додано підтримку для визначення правила граничного вузла.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

Приклади

Використання функції з булевим значенням для перевірки просторових взаємозв'язків.

Code
SELECT ST_Relate('POINT(1 2)', ST_Buffer('POINT(1 2)', 2), '0FFFFF212');
Вивід растрових зображень
t
Code
SELECT ST_Relate('POINT(1 2)', ST_Buffer('POINT(1 2)', 2), '*FF*FF212');
Вивід растрових зображень
t

Тестування власного шаблону просторових відносин як умови запиту за допомогою && для уможливлення використання просторового індексу.

Find compounds that properly intersect (not just touch) a poly (Interior Intersects)

Code
SELECT c.* , p.name As poly_name
    FROM polys AS p
    INNER JOIN compounds As c
          ON c.geom && p.geom
             AND ST_Relate(p.geom, c.geom, 'T********');

Обчислення матриці перетину для просторових відносин.

Code
SELECT ST_Relate('POINT(1 2)',
ST_Buffer('POINT(1 2)', 2));
Вивід растрових зображень
0FFFFF212
Code
SELECT ST_Relate('LINESTRING(1 2,3 4)',
'LINESTRING(5 6,7 8)' );
Вивід растрових зображень
FF1FF0102
Figure
Geometry figure for visual-st-relate-04

Використання різних правил граничних вузлів для обчислення просторових відносин між LineString і MultiLineString з дублюючою кінцевою точкою (3 3):

  • Використовуючи правило OGC-Mod2 (1), дубльована кінцева точка знаходиться в всередині MultiLineString, тому запис матриці DE-9IM [aB:bI] дорівнює 0, а [aB:bB] дорівнює F.

  • Використовуючи правило Endpoint (2), дубльована кінцева точка знаходиться в межі MultiLineString, тому запис матриці DE-9IM [aB:bI] дорівнює F, а [aB:bB] дорівнює 0.

Code
WITH data AS (SELECT
  'LINESTRING(1 1,3 3)'::geometry AS a_line,
  'MULTILINESTRING((3 3,3 5),(3 3,5 3))'::geometry AS b_multiline
)
SELECT ST_Relate(a_line, b_multiline, 1) AS bnr_mod2,
       ST_Relate(a_line, b_multiline, 2) AS bnr_endpoint
    FROM data;
Вивід растрових зображень
bnr_mod2  | bnr_endpoint
-----------+--------------
 FF10F0102 | FF1F00102
Figure
Geometry figure for visual-st-relate-05

Назва

ST_RelateMatch — Перевіряє, чи відповідає матриця перетину DE-9IM шаблону матриці перетину

Короткий огляд

boolean ST_RelateMatch(text intersectionMatrix, text intersectionMatrixPattern);

Опис

Перевіряє, чи значення intersectionMatrix моделі Dimensionally Extended 9-Intersection Model (DE-9IM) відповідає intersectionMatrixPattern. Значення матриці перетину можна обчислити за допомогою ST_Relate.

Для отримання додаткової інформації див. Розділ 5.1, «Determining Spatial Relationships».

Виконано модулем GEOS

Доступність: 2.0.0

Приклади

Code
SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF') ;
Вивід растрових зображень
t

Шаблони для загальних просторових відносин, що відповідають значенням матриці перетину, для лінії в різних положеннях відносно багатокутника

Code
SELECT pat.name AS relationship, pat.val AS pattern,
       mat.name AS position, mat.val AS matrix,
       ST_RelateMatch(mat.val, pat.val) AS match
    FROM (VALUES ( 'Equality', 'T1FF1FFF1' ),
                 ( 'Overlaps', 'T*T***T**' ),
                 ( 'Within', 'T*F**F***' ),
                 ( 'Disjoint', 'FF*FF****' )) AS pat(name, val)
    CROSS JOIN
        (VALUES  ('non-intersecting', 'FF1FF0212'),
                 ('overlapping', '1010F0212'),
                 ('inside', '1FF0FF212')) AS mat(name, val);
Вивід растрових зображень
relationship |  pattern  |     position     |  matrix   | match
--------------+-----------+------------------+-----------+-------
 Equality     | T1FF1FFF1 | non-intersecting | FF1FF0212 | f
 Equality     | T1FF1FFF1 | overlapping      | 1010F0212 | f
 Equality     | T1FF1FFF1 | inside           | 1FF0FF212 | f
 Overlaps     | T*T***T** | non-intersecting | FF1FF0212 | f
 Overlaps     | T*T***T** | overlapping      | 1010F0212 | t
 Overlaps     | T*T***T** | inside           | 1FF0FF212 | f
 Within       | T*F**F*** | non-intersecting | FF1FF0212 | f
 Within       | T*F**F*** | overlapping      | 1010F0212 | f
 Within       | T*F**F*** | inside           | 1FF0FF212 | t
 Disjoint     | FF*FF**** | non-intersecting | FF1FF0212 | t
 Disjoint     | FF*FF**** | overlapping      | 1010F0212 | f
 Disjoint     | FF*FF**** | inside           | 1FF0FF212 | f

Назва

ST_Touches — Перевіряє, чи мають дві геометрії хоча б одну спільну точку, але їхні внутрішні частини не перетинаються

Короткий огляд

boolean ST_Touches(geometry A, geometry B);

Опис

Повертає TRUE, якщо A і B перетинаються, але їх внутрішні частини не перетинаються. Іншими словами, A і B мають принаймні одну спільну точку, і спільні точки лежать принаймні на одній межі. Для вхідних даних Point/Point відношення завжди є FALSE, оскільки точки не мають меж.

У математичних термінах: ST_Touches(A, B) ⇔ (Int(A) ⋂ Int(B) = ∅) ∧ (A ⋂ B ≠ ∅)

Ця залежність зберігається, якщо матриця перетину DE-9IM для двох геометрій відповідає одній з наступних:

  • FT*******

  • F**T*****

  • F***T****

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, замість цього використовуйте _ST_Touches.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.28

Приклади

Предикат ST_Touches повертає TRUE у наведених нижче прикладах.

Two Polygons touching along a boundary segment.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190))'::geometry AS a,
  'POLYGON ((80 110,140 140,190 110,180 40,140 10,80 50,80 70,80 110))'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-01

Two Polygons touching at a boundary point.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190))'::geometry AS a,
  'POLYGON ((140 140,190 110,180 40,140 10,80 70,140 140))'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-02

A Polygon and a LineString touching at the line endpoint.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((80 10,50 40,50 90,80 130,140 120,160 70,140 30,80 10))'::geometry AS a,
  'LINESTRING (30 190,180 150,160 70)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-03

Two LineStrings touching at their endpoints.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'LINESTRING (10 10,60 140,140 190)'::geometry AS a,
  'LINESTRING (140 190,190 10)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-04

Two LineStrings touching where an endpoint meets the other line.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'LINESTRING (10 10,60 140,140 190)'::geometry AS a,
  'LINESTRING (60 140,190 10)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-05

A Point touching a Polygon boundary.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((30 30,10 110,40 190,120 170,180 180,170 100,130 10,30 30))'::geometry AS a,
  'POINT (170 100)'::geometry AS b
) AS example;
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-06
Code
SELECT ST_Touches('LINESTRING(0 0,1 1,0 2)'::geometry, 'POINT(1 1)'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-st-touches-07
Code
SELECT ST_Touches('LINESTRING(0 0,1 1,0 2)'::geometry, 'POINT(0 2)'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-touches-08

Назва

ST_Within — Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку

Короткий огляд

boolean ST_Within(geometry A, geometry B);

Опис

Повертає TRUE, якщо геометрія A знаходиться всередині геометрії B. A знаходиться всередині B тоді і тільки тоді, коли всі точки A лежать всередині (тобто в середині або на межі) B (або, що еквівалентно, жодна точка A не лежить поза межами B), і внутрішні частини A і B мають принаймні одну спільну точку.

Щоб ця функція мала сенс, геометрії джерел повинні мати однакову проекцію координат та однаковий SRID.

У математичних термінах: ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

Внутрішнє відношення є рефлексивним: кожна геометрія знаходиться всередині себе. Відношення є антисиметричним: якщо ST_Within(A,B) = true і ST_Within(B,A) = true, то дві геометрії повинні бути топологічно рівними (ST_Equals(A,B) = true).

ST_Within є оберненим до ST_Contains. Отже, ST_Within(A,B) = ST_Contains(B,A).

[Примітка]

Оскільки внутрішні частини повинні мати спільну точку, тонкість визначення полягає в тому, що лінії та точки, які повністю лежать на межі полігонів або ліній, не входять до геометрії. Для отримання додаткової інформації див. Тонкощі OGC Covers, Contains, Within. Предикат ST_CoveredBy забезпечує більш всеосяжне відношення.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_Within.

Виконано модулем GEOS

Покращено: 2.3.0 Покращення короткого замикання PIP для геометрії, розширене для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутниках.

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Важливо]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')

This method implements the SQL/MM specification. SQL-MM 3: 5.1.30

Приклади

This example defines two concentric circles once in a CTE so the same inputs can be rendered and then reused in related predicate checks.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 20) AS smallc,
         ST_Buffer(center, 40) AS bigc
  FROM (SELECT 'POINT(50 50)'::geometry AS center) AS p
)
SELECT smallc AS small_circle,
       bigc AS big_circle
FROM circles;
Вивід растрових зображень
POLYGON((70 50,69.616 46.098,68.478 42.346,66.629 38.889,64.142 35.858,61.111 33.371,57.654 31.522,53.902 30.384,50 30,46.098 30.384,42.346 31.522,38.889 33.371,35.858 35.858,33.371 38.889,31.522 42.346,30.384 46.098,30 50,30.384 53.902,31.522 57.654,33.371 61.111,35.858 64.142,38.889 66.629,42.346 68.478,46.098 69.616,50 70,53.902 69.616,57.654 68.478,61.111 66.629,64.142 64.142,66.629 61.111,68.478 57.654,69.616 53.902,70 50)) | POLYGON((90 50,89.231 42.196,86.955 34.693,83.259 27.777,78.284 21.716,72.223 16.741,65.307 13.045,57.804 10.769,50 10,42.196 10.769,34.693 13.045,27.777 16.741,21.716 21.716,16.741 27.777,13.045 34.693,10.769 42.196,10 50,10.769 57.804,13.045 65.307,16.741 72.223,21.716 78.284,27.777 83.259,34.693 86.955,42.196 89.231,50 90,57.804 89.231,65.307 86.955,72.223 83.259,78.284 78.284,83.259 72.223,86.955 65.307,89.231 57.804,90 50))
Figure
Geometry figure for visual-st-within-01

Using the same circles, ST_Within is reflexive on each circle, false from the larger circle into the smaller one, and true for ST_Union only when the union does not extend beyond the larger circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 20) AS smallc,
         ST_Buffer(center, 40) AS bigc
  FROM (SELECT 'POINT(50 50)'::geometry AS center) AS p
)
SELECT
  ST_Within(smallc, smallc) AS smallinsmall,
  ST_Within(smallc, bigc) AS smallinbig,
  ST_Within(bigc, smallc) AS biginsmall,
  ST_Within(ST_Union(smallc, bigc), bigc) AS unioninbig,
  ST_Within(bigc, ST_Union(smallc, bigc)) AS biginunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) AS bigisunion
FROM circles;
Вивід растрових зображень
t | t | f | t | t | t
Figure
Geometry figure for visual-st-within-02

7.11.2. Відношення дистанції

  • ST_3DDWithin — Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDFullyWithin — Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_DFullyWithin — Перевіряє, чи геометрія повністю знаходиться в межах відстані від іншої
  • ST_DWithin — Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної
  • ST_PointInsideCircle — Перевіряє, чи геометрія точки знаходиться всередині кола, визначеного центром і радіусом

Назва

ST_3DDWithin — Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані

Короткий огляд

boolean ST_3DDWithin(geometry g1, geometry g2, double precision distance_of_srid);

Опис

Повертає значення true, якщо 3D-відстань між двома геометричними значеннями не перевищує відстань distance_of_srid. Відстань вказується в одиницях, визначених просторовою системою координат геометрій. Щоб ця функція мала сенс, вихідні геометрії повинні бути в одній системі координат (мати однаковий SRID).

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This method implements the SQL/MM specification. SQL-MM ?

Доступність: 2.0.0

Приклади

Compare the same transformed point and line in both 3D and 2D. The 3D test fails because the Z difference matters even though the 2D footprints are close enough.

Code
WITH sample AS (
  SELECT ST_Transform('SRID=4326;POINT(-72.1235 42.3521 4)'::geometry, 2163) AS input_point,
         ST_Transform(
           'SRID=4326;LINESTRING(-72.1260 42.45 15,-72.123 42.1546 20)'::geometry,
           2163
         ) AS input_line
)
SELECT ST_3DDWithin(input_point, input_line, 126.8) AS within_dist_3d,
       ST_DWithin(input_point, input_line, 126.8) AS within_dist_2d,
       input_point AS input_point,
       input_line AS input_line
FROM sample;
Вивід растрових зображень
-[ RECORD 1 ]--+----------------------------------------------------------------------------------------------------------------------------------
within_dist_3d | f
within_dist_2d | t
input_point    | POINT Z (-11774128.9 5237160.2 4)
input_line     | LINESTRING Z (-11774339.5 5243556.8 15,-11773706.7 5215256.3 20)

Назва

ST_3DDFullyWithin — Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані

Короткий огляд

boolean ST_3DDFullyWithin(geometry g1, geometry g2, double precision distance);

Опис

Повертає значення true, якщо 3D-геометрії повністю знаходяться на заданій відстані одна від одної. Відстань задається в одиницях, визначених просторовою системою координат геометрій. Щоб ця функція мала сенс, вихідні геометрії повинні мати однакову проекцію координат і однаковий SRID.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

Доступність: 2.0.0

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

This example compares distance-within predicates in 2D and 3D. The point is distance-within the line in 3D, but the full 3D line is not within the same distance of the point.

Code
WITH data AS (
  SELECT
    'POINT(1 1 2)'::geometry AS geom_a,
    'LINESTRING(1 5 2,2 7 20,1 9 100,14 12 3)'::geometry AS geom_b
)
SELECT
  ST_3DDFullyWithin(geom_a, geom_b, 10) AS d3dfullywithin10,
  ST_3DDWithin(geom_a, geom_b, 10) AS d3dwithin10,
  ST_DFullyWithin(geom_a, geom_b, 20) AS d2dfullywithin20,
  ST_3DDFullyWithin(geom_a, geom_b, 20) AS d3dfullywithin20
FROM data;
Вивід растрових зображень
d3dfullywithin10 | d3dwithin10 | d2dfullywithin20 | d3dfullywithin20
------------------+-------------+------------------+------------------
 f                | t           | t                | f 
Figure
Geometry figure for visual-st-3ddfullywithin-01

Назва

ST_DFullyWithin — Перевіряє, чи геометрія повністю знаходиться в межах відстані від іншої

Короткий огляд

boolean ST_DFullyWithin(geometry g1, geometry g2, double precision distance);

Опис

Повертає значення true, якщо g2 повністю знаходиться в межах distance від g1. Візуально умова є істинною, якщо g2 знаходиться в межах буфера distance від g1. Відстань вказується в одиницях, визначених просторовою системою координат геометрій.

[Примітка]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

Доступність: 1.5.0

Змінено: 3.5.0: логіка функції тепер використовує перевірку вмісту в буфері, а не алгоритм ST_MaxDistance. Результати будуть відрізнятися від попередніх версій, але повинні бути ближчими до очікувань користувачів.

Приклади

Code
SELECT
    ST_DFullyWithin(geom_a, geom_b, 10) AS DFullyWithin10,
    ST_DWithin(geom_a, geom_b, 10) AS DWithin10,
    ST_DFullyWithin(geom_a, geom_b, 20) AS DFullyWithin20
FROM (VALUES
    ('POINT(1 1)'::geometry, 'LINESTRING(1 5,2 7,1 9,14 12)'::geometry)
    ) AS v(geom_a, geom_b)
Вивід растрових зображень
dfullywithin10 | dwithin10 | dfullywithin20
----------------+-----------+----------------
 f              | t         | t
Figure
Geometry figure for visual-st-dfullywithin-01

Назва

ST_DWithin — Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної

Короткий огляд

boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid = true);

Опис

Повертає значення true, якщо геометрії знаходяться в межах заданої відстані

Для geometry: Відстань вказується в одиницях, визначених просторовою системою координат геометрій. Щоб ця функція мала сенс, вихідні геометрії повинні бути в одній системі координат (мати однаковий SRID).

Для geography: одиниці виміру в метрах, а вимірювання відстані за замовчуванням виконується за допомогою use_spheroid = true. Для прискорення обчислень використовуйте use_spheroid = false для вимірювання на сфері.

[Примітка]

Для 3D-геометрій використовуйте ST_3DDWithin.

[Примітка]

Цей виклик функції включає порівняння обмежувальної рамки, яке використовує будь-які індекси, доступні для геометрій.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

Доступність: 1.5.0 було впроваджено підтримку географії

Покращено: 2.1.0 покращено швидкість роботи з географією. Детальніше див. Пришвидшення роботи з географією.

Покращено: 2.1.0 додано підтримку кривих геометрій.

До версії 1.3 функція ST_Expand зазвичай використовувалася разом з && та ST_Distance для перевірки відстані, і до версії 1.3.4 ця функція використовувала таку логіку. Починаючи з версії 1.3.4, ST_DWithin використовує швидшу функцію короткого замикання відстані.

Приклади

This self-contained geometry example keeps the compared shapes visible while also returning the boolean results.

Code
WITH sample AS (
  SELECT ST_Buffer('POINT(100 90)'::geometry, 50, 'quad_segs=2') AS coverage,
         ST_Point(120, 120) AS inside_pt,
         ST_Point(170, 90) AS outside_pt
)
SELECT ST_DWithin(coverage, inside_pt, 0) AS inside_now,
       ST_DWithin(coverage, outside_pt, 10) AS outside_within_10,
       coverage AS coverage_geom,
       inside_pt AS inside_geom,
       outside_pt AS outside_geom
FROM sample;
Вивід растрових зображень
-[ RECORD 1 ]-----
inside_now        | t
outside_within_10 | f
coverage_geom     | POLYGON((150 90,135 55,100 40,65 55,50 90,65 125,100 140,135 125,150 90))
inside_geom       | POINT(120 120)
outside_geom      | POINT(170 90)
Figure
Geometry figure for visual-st-dwithin-01

Find the nearest hospital to each school. That is within 3000 units of the school. We do an ST_DWithin search to utilize indexes to limit our search list. That the non-indexable ST_Distance needs to process. If the units of the spatial reference is meters then units would be meters.

Code
SELECT DISTINCT ON (s.gid) s.gid, s.school_name, s.geom, h.hospital_name
  FROM schools s
    LEFT JOIN hospitals h ON ST_DWithin(s.geom, h.geom, 3000)
  ORDER BY s.gid, ST_Distance(s.geom, h.geom);

The schools with no close hospitals. Find all schools with no hospital within 3000 units away from the school. Units are in units of spatial reference (for example meters, feet, or degrees).

Code
SELECT s.gid, s.school_name
  FROM schools s
    LEFT JOIN hospitals h ON ST_DWithin(s.geom, h.geom, 3000)
  WHERE h.gid IS NULL;

Find locations more than 3000 units away from their nearest hospital. Use NOT EXISTS so that a location is returned only when no nearby hospital exists.

Code
SELECT l.location_name
  FROM locations l
  WHERE NOT EXISTS (
    SELECT 1
    FROM hospitals h
    WHERE ST_DWithin(l.geom, h.geom, 3000)
  );

Find broadcasting towers that a receiver with limited range can receive. Data is geometry in Spherical Mercator (SRID=3857), ranges are approximate.

Code
CREATE INDEX ON broadcasting_towers USING gist (geom);
CREATE INDEX ON broadcasting_towers USING gist (ST_Expand(geom, sending_range));

Query towers that a 4-kilometer receiver in Minsk Hackerspace can get. Note: two conditions are required because the shorter LEAST(b.sending_range, 4000) will not use an index.

Code
SELECT b.tower_id, b.geom
  FROM broadcasting_towers b
  WHERE ST_DWithin(b.geom, 'SRID=3857;POINT(3072163.4 7159374.1)', 4000)
    AND ST_DWithin(b.geom, 'SRID=3857;POINT(3072163.4 7159374.1)', b.sending_range);

Див. також

ST_Distance, ST_3DDWithin


Назва

ST_PointInsideCircle — Перевіряє, чи геометрія точки знаходиться всередині кола, визначеного центром і радіусом

Короткий огляд

boolean ST_PointInsideCircle(geometry a_point, float center_x, float center_y, float radius);

Опис

Повертає значення true, якщо геометрія є точкою і знаходиться всередині кола з центром center_x,center_y і радіусом radius.

[Застереження]

Не використовує просторові індекси. Замість цього використовуйте ST_DWithin.

Доступність: 1.2

Змінено: 2.2.0 У попередніх версіях це називалося ST_Point_Inside_Circle

Приклади

Code
SELECT ST_PointInsideCircle(ST_Point(1, 2), 0.5, 2, 3);
Вивід растрових зображень
t
Figure
Geometry figure for visual-st-pointinsidecircle-01

Див. також

ST_DWithin

7.12. Функції вимірювання

Анотація

Ці функції обчислюють відстані, площі та кути. Існують також функції для обчислення геометричних величин, визначених за вимірами.

  • ST_Area — Повертає площу полігональної геометрії.
  • ST_Azimuth — Повертає азимут на північ від лінії між двома точками.
  • ST_Angle — Повертає кут між двома векторами, визначеними 3 або 4 точками, або 2 лініями.
  • ST_ClosestPoint — Повертає 2D точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії від однієї геометрії до іншої.
  • ST_3DClosestPoint — Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_Distance — Повертає відстань між двома геометричними або географічними значеннями.
  • ST_3DDistance — Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_DistanceSphere — Повертає мінімальну відстань у метрах між двома геометріями довготи/широти, використовуючи модель сферичної Землі.
  • ST_DistanceSpheroid — Повертає мінімальну відстань між двома геометріями lon/lat, використовуючи сфероїдальну модель Землі.
  • ST_FrechetDistance — Повертає відстань Фреше між двома геометріями.
  • ST_HausdorffDistance — Повертає відстань Гаусдорфа між двома геометріями.
  • ST_Length — Повертає 2D довжину лінійної геометрії.
  • ST_Length2D — Повертає 2D довжину лінійної геометрії. Псевдонім для ST_Length
  • ST_3DLength — Повертає 3D довжину лінійної геометрії.
  • ST_LengthSpheroid — Повертає 2D або 3D довжину/периметр геометрії lon/lat на сфероїді.
  • ST_LongestLine — Повертає найдовшу 2D лінію між двома геометріями.
  • ST_3DLongestLine — Повертає найдовшу 3D лінію між двома геометріями
  • ST_MaxDistance — Повертає найбільшу відстань між двома геометріями в проекційних одиницях.
  • ST_3DMaxDistance — Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_MinimumClearance — Повертає мінімальний зазор геометрії, міру міцності геометрії.
  • ST_MinimumClearanceLine — Повертає двоточкову лінію LineString, що охоплює мінімальний простір геометрії.
  • ST_Perimeter — Повертає довжину межі полігональної геометрії або географії.
  • ST_Perimeter2D — Повертає 2D периметр полігональної геометрії. Псевдонім для ST_Perimeter.
  • ST_3DPerimeter — Повертає 3D периметр полігональної геометрії.
  • ST_ShortestLine — Повертає найкоротшу 2D лінію між двома геометріями
  • ST_3DShortestLine — Повертає найкоротшу 3D лінію між двома геометріями

Назва

ST_Area — Повертає площу полігональної геометрії.

Короткий огляд

float ST_Area(geometry g1);

float ST_Area(geography geog, boolean use_spheroid = true);

Опис

Повертає площу полігональної геометрії. Для типів геометрії обчислюється площина 2D (плоска) з одиницями, визначеними SRID. Для типів географії за замовчуванням площа визначається на сфероїді з одиницями в квадратних метрах. Для обчислення площі за допомогою швидшої, але менш точної сферичної моделі використовуйте ST_Area(geog,false).

Покращено: 2.0.0 - додано підтримку 2D багатогранних поверхонь.

Покращено: 2.2.0 — вимірювання на сфероїді виконується за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0.

Змінено: 3.0.0 - більше не залежить від SFCGAL.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 8.1.2, 9.5.3

This function supports Polyhedral surfaces.

[Примітка]

Для багатогранних поверхонь підтримуються тільки 2D багатогранні поверхні (не 2.5D). Для 2.5D може бути надано відповідь, відмінну від нуля, але тільки для граней, які повністю лежать у площині XY.

Приклади

Площа ділянки в квадратних футах для ділянки землі в штаті Массачусетс і помножте на коефіцієнт перетворення, щоб отримати квадратні метри. Зверніть увагу, що це квадратні фути, оскільки EPSG:2249 — це система координат штату Массачусетс

Code
SELECT ST_Area(geom) AS sqft,
       ST_Area(geom) * 0.3048 ^ 2 AS sqm
FROM (
  SELECT 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
          743265 2967450,743265.625 2967416,743238 2967416))'::geometry AS geom
) AS subquery;
Вивід растрових зображень
sqft   |     sqm
--------+-------------
928.625 | 86.27208552
Figure
Geometry figure for visual-st-area-01

Return area square feet and transform to Massachusetts state plane meters (EPSG:26986) to get square meters. Note this is in square feet because 2249 is Massachusetts State Plane Feet and transformed area is in square meters since EPSG:26986 is state plane Massachusetts meters.

Code
SELECT ST_Area(geom) AS sqft,
       round(ST_Area(ST_Transform(geom, 26986))::numeric, 6) AS sqm
FROM (
  SELECT 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
          743265 2967450,743265.625 2967416,743238 2967416))'::geometry AS geom
) AS subquery;
Вивід растрових зображень
sqft   |    sqm
--------+-----------
928.625 | 86.272431
Figure
Geometry figure for visual-st-area-02

Поверніть площу в квадратних футах і квадратних метрах, використовуючи тип даних "географія". Зверніть увагу, що ми перетворюємо геометрію в географію (перед тим, як це зробити, переконайтеся, що ваша геометрія відповідає стандарту WGS 84 long lat 4326). Географія завжди вимірюється в метрах. Це лише для демонстрації та порівняння. Зазвичай ваша таблиця вже зберігається в типі даних "географія".

Code
SELECT round((ST_Area(geog) / 0.3048 ^ 2)::numeric, 2) AS sqft_spheroid,
       round((ST_Area(geog, false) / 0.3048 ^ 2)::numeric, 2) AS sqft_sphere,
       round(ST_Area(geog)::numeric, 2) AS sqm_spheroid
FROM (
  SELECT ST_Transform(
           'SRID=2249;POLYGON((743238 2967416,743238 2967450,
           743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
           4326
         )::geography AS geog
) AS subquery;
Вивід растрових зображень
sqft_spheroid | sqft_sphere | sqm_spheroid
----------------+-------------+--------------
         928.68 |      926.61 |        86.28

Якщо ваші дані вже знаходяться в географії:

Code
SELECT ST_Area(geog) / 0.3048 ^ 2 AS sqft,
               ST_Area(the_geog) AS sqm
        FROM somegeogtable;

Назва

ST_Azimuth — Повертає азимут на північ від лінії між двома точками.

Короткий огляд

float ST_Azimuth(geometry origin, geometry target);

float ST_Azimuth(geography origin, geography target);

Опис

Повертає азимут в радіанах від точки відліку до точки призначення або NULL, якщо ці дві точки збігаються. Кут азимута є додатним кутом за годинниковою стрілкою, відлічуваним від додатної осі Y (геометрія) або північного меридіана (географія): Північ = 0; Північний схід = π/4; Схід = π/2; Південний схід = 3π/4; Південь = π; Південний захід 5π/4; Захід = 3π/2; Північний захід = 7π/4.

Для типу географії рішення азимута відоме як обернена геодезична задача.

Азимут — це математичне поняття, яке визначається як кут між опорним вектором і точкою, вимірюється в радіанах. Результат у радіанах можна перетворити в градуси за допомогою функції PostgreSQL degrees().

For offsetting lines relative to their direction, use ST_OffsetCurve. For projecting a point by distance and bearing, use ST_Project.

Доступність: 1.1.0

Покращено: 2.0.0 додано підтримку географії.

Покращено: вимірювання 2.2.0 на сфероїді, виконане за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0.

Приклади

Геометрія Азимут у градусах

Code
SELECT degrees(ST_Azimuth(ST_Point(25, 45), ST_Point(75, 100))) AS degA_B,
       degrees(ST_Azimuth(ST_Point(75, 100), ST_Point(25, 45) )) AS degB_A;
Вивід растрових зображень
dega_b       |     degb_a
------------------+------------------
42.27368900609371 | 222.27368900609372

Compass direction labels can be computed from the azimuth.

Code
WITH directions(deg) AS (VALUES
  (0), (45), (90), (135), (180), (225), (270), (315)
),
bearings AS (
  SELECT deg,
         degrees(ST_Azimuth(ST_Point(0, 0),
                            ST_MakePoint(sin(radians(deg)),
                                         cos(radians(deg))))) AS azimuth
  FROM directions
)
SELECT deg,
       round(azimuth::numeric, 1) AS azimuth,
       (ARRAY['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW', 'N'])
         [floor((azimuth + 22.5) / 45)::int + 1] AS direction
FROM bearings
ORDER BY deg;
Вивід растрових зображень
deg | azimuth | direction
-----+---------+-----------
   0 |     0.0 | N
  45 |    45.0 | NE
  90 |    90.0 | E
 135 |   135.0 | SE
 180 |   180.0 | S
 225 |   225.0 | SW
 270 |   270.0 | W
 315 |   315.0 | NW

Azimuth from Point(25, 45) to Point(75, 100), shown against the positive Y axis (north).

Code
WITH points AS (
  SELECT 'POINT(25 45)'::geometry AS origin,
         'POINT(75 100)'::geometry AS target
)
SELECT round(degrees(ST_Azimuth(origin, target))::numeric, 6) AS degrees,
       ST_MakeLine(origin, ST_Translate(origin, 0, 105)) AS north,
       ST_MakeLine(origin, target) AS direction
FROM points;
Вивід растрових зображень
42.273689 | LINESTRING(25 45,25 150) | LINESTRING(25 45,75 100)
Figure
Geometry figure for visual-st-azimuth-03

Reverse azimuth from Point(75, 100) to Point(25, 45).

Code
WITH points AS (
  SELECT 'POINT(75 100)'::geometry AS origin,
         'POINT(25 45)'::geometry AS target
)
SELECT round(degrees(ST_Azimuth(origin, target))::numeric, 6) AS degrees,
       ST_MakeLine(origin, ST_Translate(origin, 0, 90)) AS north,
       ST_MakeLine(origin, target) AS direction
FROM points;
Вивід растрових зображень
222.273689 | LINESTRING(75 100,75 190) | LINESTRING(75 100,25 45)
Figure
Geometry figure for visual-st-azimuth-04

Назва

ST_Angle — Повертає кут між двома векторами, визначеними 3 або 4 точками, або 2 лініями.

Короткий огляд

float ST_Angle(geometry point1, geometry point2, geometry point3, geometry point4);

float ST_Angle(geometry line1, geometry line2);

Опис

Обчислює кут за годинниковою стрілкою між двома векторами.

Варіант 1: обчислює кут, утворений точками P1-P2-P3. Якщо вказано четверту точку, обчислюється кут між точками P1-P2 і P3-P4

Варіант 2: обчислює кут між двома векторами S1-E1 і S2-E2, визначеними початковою і кінцевою точками вхідних ліній

Результатом є позитивний кут між 0 і 2π радіанами. Результат у радіанах можна перетворити на градуси за допомогою функції PostgreSQL degrees().

Зверніть увагу, що ST_Angle(P1,P2,P3) = ST_Angle(P2,P1,P2,P3).

Доступність: 2.5.0

Приклади

Кут між трьома точками

Code
SELECT degrees(ST_Angle('POINT(0 0)', 'POINT(10 10)', 'POINT(20 0)'));
Вивід растрових зображень
270
Figure
Geometry figure for visual-st-angle-01

Кут між векторами, визначеними чотирма точками

Code
SELECT degrees(ST_Angle('POINT (10 10)', 'POINT (0 0)', 'POINT(90 90)', 'POINT (100 80)'));
Вивід растрових зображень
269.9999999999999
Figure
Geometry figure for visual-st-angle-02

Кут між векторами, визначеними початковою та кінцевою точками ліній

Code
SELECT degrees(ST_Angle('LINESTRING(0 0,0.3 0.7,1 1)', 'LINESTRING(0 0,0.2 0.5,1 0)'));
Вивід растрових зображень
45
Figure
Geometry figure for visual-st-angle-03

Див. також

ST_Azimuth


Назва

ST_ClosestPoint — Повертає 2D точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії від однієї геометрії до іншої.

Короткий огляд

geometry ST_ClosestPoint(geometry geom1, geometry geom2);

geography ST_ClosestPoint(geography geom1, geography geom2, boolean use_spheroid = true);

Опис

Повертає двовимірну точку на geom1, яка найближча до geom2. Це перша точка найкоротшої лінії між геометріями (розрахована за допомогою ST_ShortestLine).

[Примітка]

Якщо у вас є 3D-геометрія, ви можете скористатися ST_3DClosestPoint.

Покращено: 3.4.0 - Підтримка географії.

Доступність: 1.5.0

Приклади

Найближчою точкою для точки та лінійного елемента є сама точка. Найближчою точкою для лінійного елемента та точки є точка на лінії.

Code
SELECT ST_ClosestPoint(pt, line) AS cp_pt_line, ST_ClosestPoint(line, pt) AS cp_line_pt
    FROM (SELECT 'POINT (160 40)'::geometry AS pt,
                 'LINESTRING (10 30,50 50,30 110,70 90,180 140,130 190)'::geometry AS line ) AS t;
Вивід растрових зображень
cp_pt_line   |                cp_line_pt
----------------+------------------------------------------
 POINT(160 40)  | POINT(125.75342465753425 115.34246575342466)
Figure
Geometry figure for visual-st-closestpoint-01

Find the closest point on polygon A to polygon B.

Code
WITH source AS (
  SELECT 'POLYGON ((190 150,20 10,160 70,190 150))'::geometry AS a,
         ST_Buffer('POINT(80 160)'::geometry, 30) AS b
)
SELECT b AS polygon_b,
       ST_ClosestPoint(a, b) AS closest_point
FROM source;
Вивід растрових зображень
POLYGON((110 160,109.424 154.147,107.716 148.519,104.944 143.333,101.213 138.787,96.667 135.056,91.481 132.284,85.853 130.576,80 130,74.147 130.576,68.519 132.284,63.333 135.056,58.787 138.787,55.056 143.333,52.284 148.519,50.576 154.147,50 160,50.576 165.853,52.284 171.481,55.056 176.667,58.787 181.213,63.333 184.944,68.519 187.716,74.147 189.424,80 190,85.853 189.424,91.481 187.716,96.667 184.944,101.213 181.213,104.944 176.667,107.716 171.481,109.424 165.853,110 160)) | POINT(131.59149149528952 101.89887534906195)
Figure
Geometry figure for visual-st-closestpoint-02

Назва

ST_3DClosestPoint — Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.

Короткий огляд

geometry ST_3DClosestPoint(geometry g1, geometry g2);

Опис

Повертає тривимірну точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії в 3D. Довжина найкоротшої лінії в 3D є відстанню в 3D.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Доступність: 2.0.0

Змінено: 2.2.0 - якщо введено 2 2D геометрії, повертається 2D точка (замість старого поведінки, що припускає 0 для відсутнього Z). У випадку 2D і 3D, Z більше не вважається 0 для відсутнього Z.

Приклади

Compare the 3D closest point to the 2D closest point for a LineString and a Point.

Code
WITH input AS (
  SELECT 'POINT(100 100 30)'::geometry AS pt,
         'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 1000)'::geometry AS line
)
SELECT ST_3DClosestPoint(line, pt) AS cp3d_line_pt,
       ST_ClosestPoint(line, pt) AS cp2d_line_pt
FROM input;
Вивід растрових зображень
-[ RECORD 1 ]--+--------------------------------------------------------
cp3d_line_pt   | POINT(54.69937988676193 128.93502291722837 11.547586950660556)
cp2d_line_pt   | POINT(73.07692307692307 115.38461538461539)
Figure
Geometry figure for visual-st-3dclosestpoint-01

Compare the 3D closest point to the 2D closest point for a LineString and a MultiPoint.

Code
WITH input AS (
  SELECT 'MULTIPOINT(100 100 30,50 74 1000)'::geometry AS pt,
         'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 900)'::geometry AS line
)
SELECT ST_3DClosestPoint(line, pt) AS cp3d_line_pt,
       ST_ClosestPoint(line, pt) AS cp2d_line_pt
FROM input;
Вивід растрових зображень
-[ RECORD 1 ]--+--------------------------------------------------------
cp3d_line_pt   | POINT(54.69937988676193 128.93502291722837 11.547586950660556)
cp2d_line_pt   | POINT(50 75)
Figure
Geometry figure for visual-st-3dclosestpoint-02

Compare the 3D closest point to the 2D closest point for a Polygon and a MultiLineString.

Code
WITH input AS (
  SELECT ST_GeomFromEWKT(
           'POLYGON((175 150 5,20 40 5,35 45 5,50 60 5,100 100 5,175 150 5))'
         ) AS poly,
         ST_GeomFromEWKT(
           'MULTILINESTRING((175 155 2,20 40 20,50 60 -2,125 100 1,175 155 1),
                            (1 10 2,5 20 1))'
         ) AS mline
)
SELECT ST_3DClosestPoint(poly, mline) AS cp3d,
       ST_ClosestPoint(poly, mline) AS cp2d
FROM input;
Вивід растрових зображень
-[ RECORD 1 ]--+---------------------------------------
cp3d           | POINT(40.45454545454545 53.63636363636364 5)
cp2d           | POINT(20 40)
Figure
Geometry figure for visual-st-3dclosestpoint-03

Назва

ST_Distance — Повертає відстань між двома геометричними або географічними значеннями.

Короткий огляд

float ST_Distance(geometry g1, geometry g2);

float ST_Distance(geography geog1, geography geog2, boolean use_spheroid = true);

Опис

Для типів geometry повертає мінімальну 2D декартову (плоску) відстань між двома геометріями в проекційних одиницях (одиницях просторової прив'язки).

Для типів geography за замовчуванням повертається мінімальна геодезична відстань між двома географічними об'єктами в метрах, обчислена на сфероїді, визначеному SRID. Якщо use_spheroid має значення false, використовується швидший сферичний розрахунок.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.23

This method supports Circular Strings and Curves.

Доступність: 1.5.0 Підтримка географії була впроваджена в версії 1.5. Покращення швидкості для плоских об'єктів для кращої обробки великих або численних вершин геометрії

Покращено: 2.1.0 покращено швидкість роботи з географією. Детальніше див. Пришвидшення роботи з географією.

Покращено: 2.1.0 — додано підтримку кривих геометрій.

Покращено: 2.2.0 — вимірювання на сфероїді виконується за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0.

Змінено: 3.0.0 - більше не залежить від SFCGAL.

Приклади геометрії

Приклад геометрії - одиниці виміру в плоских градусах 4326 - це довжина в градусах за системою WGS 84, одиниці виміру - градуси.

Code
SELECT ST_Distance(
'SRID=4326;POINT(-72.1235 42.3521)'::geometry,
'SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geometry );
Вивід растрових зображень
0.00150567726382282

Приклад геометрії — одиниці виміру в метрах (SRID: 3857, пропорційно до пікселів на популярних веб-мапах). Хоча значення не відповідає дійсності, сусідні значення можна порівняти правильно, що робить цей вибір хорошим для таких алгоритмів, як KNN або KMeans.

Code
SELECT ST_Distance(
ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 3857),
ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geometry, 3857) );
Вивід растрових зображень
167.441410065196

Приклад геометрії — одиниці виміру в метрах (SRID: 3857, як вище, але скориговано за допомогою cos(lat) для врахування спотворення)

Code
SELECT ST_Distance(
ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 3857),
ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geometry, 3857)
        ) * cosd(42.3521);
Вивід растрових зображень
123.742351254151

Приклад геометрії — одиниці виміру в метрах (SRID: 26986 метри площини штату Массачусетс) (найточніше для штату Массачусетс)

Code
SELECT ST_Distance(
ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 26986),
ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geometry, 26986) );
Вивід растрових зображень
123.797937878454

Приклад геометрії — одиниці виміру в метрах (SRID: 2163 US National Atlas Equal area) (найменша точність)

Code
SELECT ST_Distance(
ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 2163),
ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geometry, 2163) );
Вивід растрових зображень
126.664256056812

Приклади з географії

Те саме, що й у прикладі з геометрією, але зверніть увагу на одиниці виміру в метрах — для трохи швидшого та менш точного обчислення використовуйте сферу.

Code
SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist
FROM (SELECT
    'SRID=4326;POINT(-72.1235 42.3521)'::geography as gg1,
    'SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geography as gg2
    ) As foo  ;
Вивід растрових зображень
spheroid_dist   |   sphere_dist
------------------+------------------
 123.802076746848 | 123.475736916397

Назва

ST_3DDistance — Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.

Короткий огляд

float ST_3DDistance(geometry g1, geometry g2);

Опис

Повертає 3-вимірну мінімальну декартову відстань між двома геометріями в проекційних одиницях (одиницях просторової прив'язки).

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This method implements the SQL/MM specification. SQL-MM ISO/IEC 13249-3

Доступність: 2.0.0

Змінено: 2.2.0 - У випадку 2D та 3D, Z більше не вважається рівним 0 для відсутнього Z.

Змінено: 3.0.0 - Вилучено версію SFCGAL

Приклади

Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line) Note that currently no vertical datum support so Z is not transformed and assumed to be same units as final.

Code
SELECT ST_3DDistance(
            ST_Transform('SRID=4326;POINT(-72.1235 42.3521 4)'::geometry, 2163),
                ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45 15,-72.123 42.1546 20)'::geometry, 2163)
            ) As dist_3d,
            ST_Distance(
                ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 2163),
                ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45,-72.123 42.1546)'::geometry, 2163)
            ) As dist_2d;
Вивід растрових зображень
dist_3d      |     dist_2d
------------------+-----------------
 127.295059324629 | 126.66425605671

Multilinestring and polygon both 3D and 2D distance. Same example as 3D closest point example.

Code
SELECT ST_3DDistance(poly, mline) As dist3d,
    ST_Distance(poly, mline) As dist2d
        FROM (SELECT  'POLYGON((175 150 5,20 40 5,35 45 5,50 60 5,100 100 5,175 150 5))'::geometry as poly,
               'MULTILINESTRING((175 155 2,20 40 20,50 60 -2,125 100 1,175 155 1),(1 10 2,5 20 1))'::geometry as mline) as foo;
Вивід растрових зображень
dist3d       | dist2d
-------------------+--------
                 0 |      0
Figure
Geometry figure for visual-st-3ddistance-02

Назва

ST_DistanceSphere — Повертає мінімальну відстань у метрах між двома геометріями довготи/широти, використовуючи модель сферичної Землі.

Короткий огляд

float ST_DistanceSphere(geometry geomlonlatA, geometry geomlonlatB, float8 radius=6371008);

Опис

Повертає мінімальну відстань у метрах між двома точками lon/lat. Використовує сферичну Землю та радіус, отриманий із сфероїда, визначеного SRID. Швидше, ніж ST_DistanceSpheroid, але менш точне. У версіях PostGIS до 1.5 реалізовано тільки для точок.

Доступність: 1.5 — додано підтримку інших типів геометрії, крім точок. Попередні версії працюють тільки з точками.

Змінено: 2.2.0 У попередніх версіях це називалося ST_Distance_Sphere

Приклади

Code
WITH sample AS (
    SELECT
        ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) AS geom,
        ST_GeomFromText('POINT(-118 38)', 4326) AS pt
)
SELECT
    round(ST_DistanceSphere(ST_Centroid(geom), pt)::numeric, 2) AS dist_meters,
    round(ST_Distance(
        ST_Transform(ST_Centroid(geom), 32611),
        ST_Transform(pt, 32611)
    )::numeric, 2) AS dist_utm11_meters,
    round(ST_Distance(ST_Centroid(geom), pt)::numeric, 5) AS dist_degrees,
    round(ST_Distance(
        ST_Transform(geom, 32611),
        ST_Transform(pt, 32611)
    )::numeric, 2) AS min_dist_line_point_meters
FROM sample;
Вивід растрових зображень
dist_meters | dist_utm11_meters | dist_degrees | min_dist_line_point_meters
-------------+-------------------+--------------+----------------------------
    70424.71 |          70438.00 |      0.72900 |                   65871.18
Figure
Geometry figure for visual-st-distancesphere-01

Див. також

ST_Distance, ST_DistanceSpheroid


Назва

ST_DistanceSpheroid — Повертає мінімальну відстань між двома геометріями lon/lat, використовуючи сфероїдальну модель Землі.

Короткий огляд

float ST_DistanceSpheroid(geometry geomlonlatA, geometry geomlonlatB, spheroid measurement_spheroid=WGS84);

Опис

Повертає мінімальну відстань у метрах між двома геометріями lon/lat, заданими для певного сфероїда. Див. пояснення сфероїдів, наведене для ST_LengthSpheroid.

[Примітка]

Ця функція не враховує SRID геометрії. Вона припускає, що координати геометрії базуються на наданому сфероїді.

Доступність: 1.5 — додано підтримку інших типів геометрії, крім точок. Попередні версії працюють тільки з точками.

Змінено: 2.2.0 У попередніх версіях це називалося ST_Distance_Spheroid

Приклади

Code
WITH input AS (
  SELECT ST_Centroid(
           ST_GeomFromText(
             'LINESTRING(-118.584 38.374,-118.583 38.5)', 4326
           )
         ) AS source,
         ST_GeomFromText('POINT(-118 38)', 4326) AS target
)
SELECT round(
         ST_DistanceSpheroid(
           source,
           target,
           'SPHEROID["WGS 84",6378137,298.257223563]'
         )::numeric,
         2
       ) AS dist_meters_spheroid,
       round(ST_DistanceSphere(source, target)::numeric, 2)
         AS dist_meters_sphere,
       round(
         ST_Distance(
           ST_Transform(source, 32611),
           ST_Transform(target, 32611)
         )::numeric,
         2
       ) AS dist_utm11_meters
FROM input;
Вивід растрових зображень
dist_meters_spheroid | dist_meters_sphere | dist_utm11_meters
----------------------+--------------------+-------------------
             70454.92 |           70424.71 |          70438.00
Figure
Geometry figure for visual-st-distance-spheroid-01

Див. також

ST_Distance, ST_DistanceSphere


Назва

ST_FrechetDistance — Повертає відстань Фреше між двома геометріями.

Короткий огляд

float ST_FrechetDistance(geometry g1, geometry g2, float densifyFrac = -1);

Опис

Реалізує алгоритм обчислення відстані Фреше, обмеженої дискретними точками для обох геометрій, на основі Computing Discrete Fréchet Distance. Відстань Фреше — це міра подібності кривих, що враховує розташування та порядок точок уздовж кривих. Тому вона часто є кращою за відстань Гаусдорфа.

Коли вказано опціональний параметр densifyFrac, ця функція виконує ущільнення сегментів перед обчисленням дискретної відстані Фреше. Параметр densifyFrac встановлює частку, на яку ущільнюється кожен сегмент. Кожен сегмент буде розділений на декілька підсегментів однакової довжини, частка яких у загальній довжині найближча до заданої частки.

Одиниці вимірювання відповідають одиницям просторової системи координат геометрії.

[Примітка]

Поточна реалізація підтримує тільки вершини як дискретні місця розташування. Це можна розширити, щоб дозволити використання довільної щільності точок.

[Примітка]

Чим менше значення densifyFrac ми вказуємо, тим точніше буде відстань Фреше. Однак час обчислення та використання пам'яті зростають пропорційно до квадрату кількості підсегментів.

Виконується модулем GEOS.

Availability: 2.4.0 - requires GEOS >= 3.7.0

Приклади

Both lines are traversed from left to right. The first line is straight, while the second bows upward through its middle vertex. The point ordering matters, so keeping both inputs in the same direction makes the comparison clearer.

Code
WITH lines AS (
  SELECT 'LINESTRING (0 0,100 0)'::geometry AS baseline,
         'LINESTRING (0 0,50 50,100 0)'::geometry AS bowed
)
SELECT baseline AS baseline,
       bowed AS bowed,
       ST_FrechetDistance(baseline, bowed) AS discrete_distance,
       ST_FrechetDistance(baseline, bowed, 0.5) AS densified_distance
FROM lines;
Вивід растрових зображень
-[ RECORD 1 ]-----+----------------------------
baseline           | LINESTRING(0 0,100 0)
bowed              | LINESTRING(0 0,50 50,100 0)
discrete_distance  | 70.7106781186548
densified_distance | 50
Figure
Geometry figure for visual-st-frechetdistance-01

Див. також

ST_HausdorffDistance


Назва

ST_HausdorffDistance — Повертає відстань Гаусдорфа між двома геометріями.

Короткий огляд

float ST_HausdorffDistance(geometry g1, geometry g2);

float ST_HausdorffDistance(geometry g1, geometry g2, float densifyFrac);

Опис

Повертає відстань Гаусдорфа між двома геометріями. Відстань Гаусдорфа — це міра схожості або відмінності двох геометрій.

Функція фактично обчислює "дискретну відстань Гаусдорфа". Це відстань Гаусдорфа, обчислена в дискретних точках геометрії. Параметр densifyFrac можна вказати, щоб отримати більш точний результат шляхом ущільнення сегментів перед обчисленням дискретної відстані Гаусдорфа. Кожен сегмент розділяється на кілька підсегментів однакової довжини, частка яких у довжині сегмента найближча до заданої частки.

Одиниці вимірювання відповідають одиницям просторової системи координат геометрії.

[Примітка]

Цей алгоритм НЕ є еквівалентним стандартній відстані Гаусдорфа. Однак він обчислює наближення, яке є правильним для великої підмножини корисних випадків. Одним з важливих випадків є лінійні рядки, які приблизно паралельні один одному і мають приблизно однакову довжину. Це корисний показник для зіставлення ліній.

Доступність: 1.5.0

Приклади

Hausdorff distance and minimum distance between two lines. The Hausdorff witness segment from the original illustration is retained and its length is checked against the computed distance.

Code
WITH lines AS (
  SELECT 'LINESTRING (20 70,70 60,110 70,170 70)'::geometry AS geomA,
         'LINESTRING (20 90,130 90,60 100,190 100)'::geometry AS geomB,
         'LINESTRING (52.69230769230769 63.46153846153846,60 100)'::geometry AS hausdorff_segment
)
SELECT round(ST_HausdorffDistance(geomA, geomB)::numeric, 6) AS hausdorff_distance,
       round(ST_Distance(geomA, geomB)::numeric, 6) AS distance,
       round(ST_Length(hausdorff_segment)::numeric, 6) AS witness_length,
       ST_ShortestLine(geomA, geomB) AS distance_segment
FROM lines;
Вивід растрових зображень
37.262066 | 20.000000 | 37.262066 | LINESTRING(20 70,20 90)
Figure
Geometry figure for visual-st-hausdorffdistance-01

Приклад: Відстань Гаусдорфа з ущільненням.

Code
SELECT ST_HausdorffDistance(
            'LINESTRING (130 0,0 0,0 150)'::geometry,
            'LINESTRING (10 10,10 150,130 10)'::geometry,
            0.5);
Вивід растрових зображень
70
Figure
Geometry figure for visual-st-hausdorffdistance-02

Приклад: Для кожної будівлі знайдіть ділянку, яка найкраще її представляє. Спочатку ми вимагаємо, щоб ділянка перетиналася з геометрією будівлі. DISTINCT ON гарантує, що кожна будівля буде вказана тільки один раз. ORDER BY .. ST_HausdorffDistance вибирає ділянку, яка найбільш схожа на будівлю.

Code
SELECT DISTINCT ON (buildings.gid) buildings.gid, parcels.parcel_id
   FROM buildings
       INNER JOIN parcels
       ON ST_Intersects(buildings.geom, parcels.geom)
   ORDER BY buildings.gid, ST_HausdorffDistance(buildings.geom, parcels.geom);

Див. також

ST_FrechetDistance


Назва

ST_Length — Повертає 2D довжину лінійної геометрії.

Короткий огляд

float ST_Length(geometry a_2dlinestring);

float ST_Length(geography geog, boolean use_spheroid = true);

Опис

Для типів геометрії: повертає двовимірну декартову довжину геометрії, якщо це LineString, MultiLineString, ST_Curve, ST_MultiCurve. Для плоских геометрій повертається 0; замість цього використовуйте ST_Perimeter. Одиниці довжини визначаються просторовою системою відліку геометрії.

Для географічних типів: обчислення виконується за допомогою оберненого геодезичного розрахунку. Одиниці довжини вимірюються в метрах. Сфероїд визначається SRID; якщо SRID не вказано, використовується WGS84. Якщо use_spheroid = false, обчислення базується на сфері, а не на сфероїді.

Наразі для геометрії це псевдонім для ST_Length2D, але це може змінитися для підтримки вищих вимірів.

Змінено: 2.0.0 Істотна зміна — у попередніх версіях застосування цього до MULTI/POLYGON типу geography давало периметр POLYGON/MULTIPOLYGON. У 2.0.0 це було змінено, щоб повертати 0 відповідно до поведінки геометрії. Будь ласка, використовуйте ST_Perimeter, якщо ви хочете отримати периметр полігону

[Примітка]

Для географії за замовчуванням використовується сфероїдальна модель. Щоб скористатися швидшим, але менш точним сферичним розрахунком, використовуйте ST_Length(gg,false);

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3: 7.1.2, 9.3.4

Доступність: підтримка географії 1.5.0 була введена в версії 1.5.

Приклади геометрії

Довжина повернення в футах для рядка рядка. Зверніть увагу, що це в футах, оскільки EPSG:2249 - це фути штату Массачусетс

Code
SELECT ST_Length(ST_GeomFromText(
'LINESTRING(743238 2967416,743238 2967450,743265 2967450,
743265.625 2967416,743238 2967416)',
2249));
Вивід растрових зображень
122.63074400009504
Figure
Geometry figure for visual-st-length-01

This example transforms a WGS 84 LineString to Massachusetts State Plane meters.

Code
SELECT ST_Length(ST_Transform(
        'SRID=4326;LINESTRING(-72.1260 42.45,-72.1240 42.45666,-72.123 42.1546)'::geometry,
            26986
    )
);
Вивід растрових зображень
34309.4563576191
Figure
Geometry figure for visual-st-length-02

Приклади з географії

Повернути довжину географічної лінії WGS 84

This example uses the default spheroid calculation.

Code
SELECT ST_Length(the_geog) As length_spheroid, ST_Length(the_geog, false) As length_sphere
FROM (SELECT ST_GeographyFromText('SRID=4326;LINESTRING(-72.1260 42.45,-72.1240 42.45666,-72.123 42.1546)') As the_geog)
 As foo;
Вивід растрових зображень
length_spheroid  |  length_sphere
------------------+------------------
34310.5703627284 | 34346.20609607416
Figure
Geometry figure for visual-st-length-03

Назва

ST_Length2D — Повертає 2D довжину лінійної геометрії. Псевдонім для ST_Length

Короткий огляд

float ST_Length2D(geometry a_2dlinestring);

Опис

Повертає 2D довжину геометрії, якщо це лінія або багатолінійна лінія. Це псевдонім для ST_Length

Див. також

ST_Length, ST_3DLength


Назва

ST_3DLength — Повертає 3D довжину лінійної геометрії.

Короткий огляд

float ST_3DLength(geometry a_3dlinestring);

Опис

Повертає тривимірну або двовимірну довжину геометрії, якщо це LineString або MultiLineString. Для двовимірних ліній повертається лише двовимірна довжина (так само, як ST_Length і ST_Length2D)

This function supports 3d and will not drop the z-index.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 7.1, 10.3

Змінено: 2.0.0 У попередніх версіях це називалося ST_Length3D

Приклади

Довжина повернення в футах для 3D-кабелю. Зверніть увагу, що це в футах, оскільки EPSG:2249 — це фути штату Массачусетс

Code
SELECT ST_3DLength(ST_GeomFromText(
'LINESTRING(743238 2967416 1,743238 2967450 1,743265 2967450 3,
743265.625 2967416 3,743238 2967416 3)',
2249));
Вивід растрових зображень
122.70471674145682
Figure
Geometry figure for visual-st-3dlength-01

Див. також

ST_Length, ST_Length2D


Назва

ST_LengthSpheroid — Повертає 2D або 3D довжину/периметр геометрії lon/lat на сфероїді.

Короткий огляд

float ST_LengthSpheroid(geometry a_geometry, spheroid a_spheroid);

Опис

Calculates the length or perimeter of a geometry on a spheroid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection. The spheroid is specified by a text value as follows:

SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>]

Наприклад:

SPHEROID["GRS_1980",6378137,298.257222101]

Доступність: 1.2.2

Змінено: 2.2.0 У попередніх версіях ця функція називалася ST_Length_Spheroid і мала псевдонім ST_3DLength_Spheroid

This function supports 3d and will not drop the z-index.

Приклади

Measure a table geometry directly on a spheroid when the coordinates are stored in longitude and latitude.

Code
SELECT ST_LengthSpheroid(
    geometry_column,
    'SPHEROID["GRS_1980",6378137,298.257222101]'
    )
FROM geometry_table;

This example measures a 2D MultiLineString and each component separately on the same spheroid.

Code
WITH sample AS (
  SELECT 'MULTILINESTRING((-118.584 38.374,-118.583 38.5),
          (-71.05957 42.3589,-71.061 43))'::geometry AS geom,
         CAST('SPHEROID["GRS_1980",6378137,298.257222101]' AS spheroid) AS sph_m
)
SELECT ST_LengthSpheroid(geom, sph_m) AS tot_len,
       ST_LengthSpheroid(ST_GeometryN(geom, 1), sph_m) AS len_line1,
       ST_LengthSpheroid(ST_GeometryN(geom, 2), sph_m) AS len_line2
FROM sample;
Вивід растрових зображень
tot_len      |    len_line1     |    len_line2
------------------+------------------+------------------
 85204.52077117894 | 13986.87252824332 | 71217.64824293563
Figure
Geometry figure for visual-st-length-spheroid-01

This example uses 3D input; Z contributes to the measured result.

Code
WITH sample AS (
  SELECT 'MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30),
          (-71.05957 42.3589 75,-71.061 43 90))'::geometry AS geom,
         CAST('SPHEROID["GRS_1980",6378137,298.257222101]' AS spheroid) AS sph_m
)
SELECT ST_LengthSpheroid(geom, sph_m) AS tot_len,
       ST_LengthSpheroid(ST_GeometryN(geom, 1), sph_m) AS len_line1,
       ST_LengthSpheroid(ST_GeometryN(geom, 2), sph_m) AS len_line2
FROM sample;
Вивід растрових зображень
tot_len      |    len_line1    |    len_line2
------------------+-----------------+------------------
 85204.52592562366 | 13986.876103023424 | 71217.64982260024
Figure
Geometry figure for visual-st-length-spheroid-02

Див. також

ST_GeometryN, ST_Length


Назва

ST_LongestLine — Повертає найдовшу 2D лінію між двома геометріями.

Короткий огляд

geometry ST_LongestLine(geometry g);

geometry ST_LongestLine(geometry g1, geometry g2);

Опис

Повертає найдовшу двовимірну лінію між точками двох геометрій. Повернена лінія починається в точці g1 і закінчується в точці g2.

Найдовша лінія завжди проходить між двома вершинами. Якщо знайдено більше однієї лінії, функція повертає першу найдовшу лінію. Довжина лінії дорівнює відстані, поверненій функцією ST_MaxDistance.

If only one geometry is provided, or g1 and g2 are the same geometry, returns the line between the two vertices farthest apart in the geometry. The endpoints of the line lie on the circle computed by ST_MinimumBoundingCircle.

Доступність: 1.5.0

Enhanced: 3.7.0 - support for a single geometry input.

Приклади

Longest line between a Point and a LineString.

Code
SELECT ST_LongestLine(
        'POINT (160 40)',
        'LINESTRING (10 30,50 50,30 110,70 90,180 140,130 190)' ) AS lline;
Вивід растрових зображень
LINESTRING(160 40,130 190)
Figure
Geometry figure for visual-st-longestline-01

Longest line between two polygons.

Code
SELECT ST_LongestLine(
        'POLYGON ((190 150,20 10,160 70,190 150))',
        ST_Buffer('POINT(80 160)', 30)
            ) AS llinewkt;
Вивід растрових зображень
LINESTRING(20 10,91.4805029709527 187.7163859753386)
Figure
Geometry figure for visual-st-longestline-02

Найдовша лінія, що проходить через одну геометрію. Довжина лінії дорівнює максимальній відстані. Кінцеві точки лінії лежать на мінімальному обмежувальному колі.

Code
SELECT ST_LongestLine(geom) AS llinewkt,
                  ST_MaxDistance(geom) AS max_dist,
                  ST_Length(ST_LongestLine(geom)) AS lenll
FROM (SELECT 'POLYGON ((40 180,110 160,180 180,180 120,140 90,160 40,80 10,70 40,20 50,40 180),
              (60 140,99 77.5,90 140,60 140))'::geometry AS geom) AS t;
Вивід растрових зображень
llinewkt          |      max_dist      |       lenll
---------------------------+--------------------+--------------------
 LINESTRING(20 50,180 180) | 206.15528128088303 | 206.15528128088303
Figure
Geometry figure for visual-st-longestline-03

Назва

ST_3DLongestLine — Повертає найдовшу 3D лінію між двома геометріями

Короткий огляд

geometry ST_3DLongestLine(geometry g1, geometry g2);

Опис

Повертає найдовшу тривимірну лінію між двома геометріями. Якщо таких ліній більше однієї, функція повертає першу найдовшу лінію. Повернена лінія починається в g1 і закінчується в g2. Тривимірна довжина лінії дорівнює відстані, поверненій функцією ST_3DMaxDistance.

Доступність: 2.0.0

Змінено: 2.2.0 - якщо введено 2 2D геометрії, повертається 2D точка (замість старого поведінки, що припускає 0 для відсутнього Z). У випадку 2D і 3D, Z більше не вважається 0 для відсутнього Z.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

Longest line between a LineString and a Point, comparing the 3D and 2D results.

Code
SELECT ST_3DLongestLine(line, pt) AS lol3d_line_pt, ST_LongestLine(line, pt) AS lol2d_line_pt
FROM (
    SELECT 'POINT(100 100 30)'::geometry AS pt,
           'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 1000)'::geometry AS line
) AS foo;
Вивід растрових зображень
lol3d_line_pt           |       lol2d_line_pt
-----------------------------------+----------------------------
 LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100)
Figure
Geometry figure for visual-st-3dlongestline-01

Longest line between a LineString and a MultiPoint, comparing the 3D and 2D results.

Code
SELECT ST_3DLongestLine(line, pt) AS lol3d_line_pt, ST_LongestLine(line, pt) AS lol2d_line_pt
FROM (
    SELECT 'MULTIPOINT(100 100 30,50 74 1000)'::geometry AS pt,
           'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 900)'::geometry AS line
) AS foo;
Вивід растрових зображень
lol3d_line_pt          |      lol2d_line_pt
---------------------------------+--------------------------
 LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74)
Figure
Geometry figure for visual-st-3dlongestline-02

Longest line between a Polygon and a MultiLineString, comparing the 3D and 2D results.

Code
SELECT ST_3DLongestLine(poly, mline) AS lol3d, ST_LongestLine(poly, mline) AS lol2d
FROM (
    SELECT ST_GeomFromEWKT(
               'POLYGON((175 150 5,20 40 5,35 45 5,50 60 5,100 100 5,175 150 5))'
           ) AS poly,
           ST_GeomFromEWKT(
               'MULTILINESTRING((175 155 2,20 40 20,50 60 -2,125 100 1,175 155 1),
               (1 10 2,5 20 1))'
           ) AS mline
) AS foo;
Вивід растрових зображень
lol3d             |          lol2d
------------------------------+--------------------------
 LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10)
Figure
Geometry figure for visual-st-3dlongestline-03

Назва

ST_MaxDistance — Повертає найбільшу відстань між двома геометріями в проекційних одиницях.

Короткий огляд

float ST_MaxDistance(geometry g);

float ST_MaxDistance(geometry g1, geometry g2);

Опис

Повертає максимальну відстань між двома геометріями у двовимірному просторі, в проекційних одиницях. Максимальна відстань завжди виникає між двома вершинами. Це довжина лінії, повернена функцією ST_LongestLine.

If only one geometry is provided, or g1 and g2 are the same geometry, returns the distance between the two vertices farthest apart in that geometry.

Доступність: 1.5.0

Enhanced: 3.7.0 - support for a single geometry input.

Приклади

Максимальна відстань між точкою та лініями.

Code
SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 0,0 2 )'::geometry);
Вивід растрових зображень
2
Figure
Geometry figure for visual-st-maxdistance-01
Code
SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 2,2 2 )'::geometry);
Вивід растрових зображень
2.82842712474619
Figure
Geometry figure for visual-st-maxdistance-02

Максимальна відстань між вершинами однієї геометрії.

Code
SELECT ST_MaxDistance('POLYGON ((10 10,10 0,0 0,10 10))'::geometry);
Вивід растрових зображень
14.142135623730951
Figure
Geometry figure for visual-st-maxdistance-03

Назва

ST_3DMaxDistance — Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.

Короткий огляд

float ST_3DMaxDistance(geometry g1, geometry g2);

Опис

Повертає тривимірну максимальну декартову відстань між двома геометріями в проекційних одиницях (одиницях просторової прив'язки).

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Доступність: 2.0.0

Змінено: 2.2.0 - У випадку 2D та 3D, Z більше не вважається рівним 0 для відсутнього Z.

Приклади

Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line) Note that currently no vertical datum support so Z is not transformed and assumed to be same units as final.

Code
SELECT ST_3DMaxDistance(
            ST_Transform('SRID=4326;POINT(-72.1235 42.3521 10000)'::geometry, 2163),
                ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45 15,-72.123 42.1546 20)'::geometry, 2163)
            ) As dist_3d,
            ST_MaxDistance(
                ST_Transform('SRID=4326;POINT(-72.1235 42.3521 10000)'::geometry, 2163),
                ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45 15,-72.123 42.1546 20)'::geometry, 2163)
            ) As dist_2d;
Вивід растрових зображень
dist_3d      |     dist_2d
------------------+------------------
 24383.7467488441 | 22247.8472107251

Назва

ST_MinimumClearance — Повертає мінімальний зазор геометрії, міру міцності геометрії.

Короткий огляд

float ST_MinimumClearance(geometry g);

Опис

Геометрія може відповідати критеріям валідності згідно з ST_IsValid(полігони) або ST_IsSimple(лінії), але стати невалідною, якщо одна з її вершин буде переміщена на невелику відстань. Це може статися через втрату точності під час перетворення в текстові формати (такі як WKT, KML, GML, GeoJSON) або бінарні формати, які не використовують координати з подвійною точністю з плаваючою комою (наприклад, MapInfo TAB).

Мінімальний зазор — це кількісна міра стійкості геометрії до зміни точності координат. Це найбільша відстань, на яку можна перемістити вершини геометрії, не порушуючи її цілісності. Більші значення мінімального зазору вказують на більшу стійкість.

Якщо геометрія має мінімальний зазор e, то:

  • У геометрії немає двох різних вершин, відстань між якими менша за e.

  • Жодна вершина не знаходиться ближче, ніж e до відрізка лінії, кінцевою точкою якого вона не є.

Якщо для геометрії не існує мінімального зазору (наприклад, для окремої точки або для MultiPoint, точки якого є ідентичними), повертається значення Infinity.

Щоб уникнути проблем з валідністю, спричинених втратою точності, ST_ReducePrecisionможе зменшити точність координат, гарантуючи при цьому валідність полігональної геометрії.

Доступність: 2.3.0

Приклади

Code
SELECT ST_MinimumClearance('POLYGON ((0 0,1 0,1 1,0.5 3.2e-4,0 0))');
Вивід растрових зображень
0.00032
Figure
Geometry figure for visual-st-minimumclearance-01

Назва

ST_MinimumClearanceLine — Повертає двоточкову лінію LineString, що охоплює мінімальний простір геометрії.

Короткий огляд

Geometry ST_MinimumClearanceLine(geometry g);

Опис

Повертає двоточкову лінію LineString, що охоплює мінімальний зазор геометрії. Якщо геометрія не має мінімального зазору, повертається LINESTRING EMPTY.

Виконується модулем GEOS.

Доступність: 2.3.0 - вимагає GEOS >= 3.6.0

Приклади

Code
SELECT ST_MinimumClearanceLine('POLYGON ((0 0,1 0,1 1,0.5 3.2e-4,0 0))');
Вивід растрових зображень
LINESTRING(0.5 0.00032,0.5 0)
                  
Figure
Geometry figure for visual-st-minimumclearanceline-01

Див. також

ST_MinimumClearance


Назва

ST_Perimeter — Повертає довжину межі полігональної геометрії або географії.

Короткий огляд

float ST_Perimeter(geometry g1);

float ST_Perimeter(geography geog, boolean use_spheroid = true);

Опис

Повертає 2D периметр геометрії/географії, якщо це ST_Surface, ST_MultiSurface (Polygon, MultiPolygon). Для геометрій, що не мають площі, повертається 0. Для лінійних геометрій використовуйте ST_Length. Для типів геометрії одиниці виміру периметра визначаються просторовою системою відліку геометрії.

Для географічних типів обчислення виконуються за допомогою оберненої геодезичної задачі, де одиниці периметра вимірюються в метрах. Сфероїд визначається SRID; якщо SRID не вказано, використовується WGS84. Якщо use_spheroid = false, обчислення будуть наближатися до сфери, а не до сфероїда.

Наразі це псевдонім для ST_Perimeter2D, але це може змінитися для підтримки вищих вимірів.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3: 8.1.3, 9.5.4

Доступність 2.0.0: додано підтримку географії

Приклади

Geometry.

Повернути периметр у футах для полігону та мультиполігону. Зверніть увагу, що це фути, оскільки EPSG:2249 — це фути штату Массачусетс.

Code
SELECT ST_Perimeter(ST_GeomFromText(
'POLYGON((743238 2967416,743238 2967450,743265 2967450,
743265.625 2967416,743238 2967416))',
2249));
Вивід растрових зображень
122.63074400009504
Figure
Geometry figure for visual-st-perimeter-01
Code
SELECT ST_Perimeter(ST_GeomFromText(
'MULTIPOLYGON(((763104.471273676 2949418.44119003,
763104.477769673 2949418.42538203,
763104.189609677 2949418.22343004,763104.471273676 2949418.44119003)),
((763104.471273676 2949418.44119003,763095.804579742 2949436.33850239,
763086.132105649 2949451.46730207,763078.452329651 2949462.11549407,
763075.354136904 2949466.17407812,763064.362142565 2949477.64291974,
763059.953961626 2949481.28983009,762994.637609571 2949532.04103014,
762990.568508415 2949535.06640477,762986.710889563 2949539.61421415,
763117.237897679 2949709.50493431,763235.236617789 2949617.95619822,
763287.718121842 2949562.20592617,763111.553321674 2949423.91664605,
763104.471273676 2949418.44119003)))',
2249));
Вивід растрових зображень
845.227713366825
Figure
Geometry figure for visual-st-perimeter-02

Повернути периметр у метрах і футах для полігону та мультиполігону. Зверніть увагу, що це географічні координати (WGS 84 long lat)

Code
SELECT  ST_Perimeter(geog) As per_meters, ST_Perimeter(geog)/0.3048 As per_ft
FROM ST_GeogFromText('POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,
-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.1776848522251 42.3902896512902))') As geog;
Вивід растрових зображень
per_meters    |      per_ft
-----------------+------------------
37.37904625414049 | 122.63466618812497
Figure
Geometry figure for visual-st-perimeter-03

This example uses a MultiPolygon.

Code
SELECT  ST_Perimeter(geog) As per_meters, ST_Perimeter(geog, false) As per_sphere_meters, ST_Perimeter(geog)/0.3048 As per_ft
FROM ST_GeogFromText('MULTIPOLYGON(((-71.1044543107478 42.340674480411,-71.1044542869917 42.3406744369506,
-71.1044553562977 42.340673886454,-71.1044543107478 42.340674480411)),
((-71.1044543107478 42.340674480411,-71.1044860600303 42.3407237015564,-71.1045215770124 42.3407653385914,
-71.1045498002983 42.3407946553165,-71.1045611902745 42.3408058316308,-71.1046016507427 42.340837442371,
-71.104617893173 42.3408475056957,-71.1048586153981 42.3409875993595,-71.1048736143677 42.3409959528211,
-71.1048878050242 42.3410084812078,-71.1044020965803 42.3414730072048,
-71.1039672113619 42.3412202916693,-71.1037740497748 42.3410666421308,
-71.1044280218456 42.3406894151355,-71.1044543107478 42.340674480411)))') As geog;
Вивід растрових зображень
per_meters    | per_sphere_meters |      per_ft
------------------+-------------------+------------------
 257.634283683311 |  257.412311446337 | 845.256836231335
                        
Figure
Geometry figure for visual-st-perimeter-04

Назва

ST_Perimeter2D — Повертає 2D периметр полігональної геометрії. Псевдонім для ST_Perimeter.

Короткий огляд

float ST_Perimeter2D(geometry geomA);

Опис

Повертає двовимірний периметр багатокутної геометрії.

[Примітка]

Наразі це псевдонім для ST_Perimeter. У майбутніх версіях ST_Perimeter може повертати найбільший периметр для геометрії. Це питання ще розглядається

Див. також

ST_Perimeter


Назва

ST_3DPerimeter — Повертає 3D периметр полігональної геометрії.

Короткий огляд

float ST_3DPerimeter(geometry geomA);

Опис

Повертає тривимірний периметр геометрії, якщо це полігон або мультиполігон. Якщо геометрія двовимірна, то повертається двовимірний периметр.

This function supports 3d and will not drop the z-index.

This method implements the SQL/MM specification. SQL-MM ISO/IEC 13249-3: 8.1, 10.5

Змінено: 2.0.0 У попередніх версіях це називалося ST_Perimeter3D

Приклади

Периметр злегка піднятого полігону в повітрі в штаті Массачусетс, фути площини штату

Code
SELECT ST_3DPerimeter(geom), ST_Perimeter2D(geom), ST_Perimeter(geom) FROM
            (SELECT 'SRID=2249;POLYGON((743238 2967416 2,743238 2967450 1,
743265.625 2967416 1,743238 2967416 2))'::geometry As geom) As foo;
Вивід растрових зображень
ST_3DPerimeter  |  st_perimeter2d  |   st_perimeter
------------------+------------------+------------------
105.46579359767418 | 105.43299727218763 | 105.43299727218763
Figure
Geometry figure for visual-st-3dperimeter-01

Назва

ST_ShortestLine — Повертає найкоротшу 2D лінію між двома геометріями

Короткий огляд

geometry ST_ShortestLine(geometry geom1, geometry geom2);

geography ST_ShortestLine(geography geom1, geography geom2, boolean use_spheroid = true);

Опис

Повертає найкоротшу двовимірну лінію між двома геометріями. Повернена лінія починається в geom1 і закінчується в geom2. Якщо geom1 і geom2 перетинаються, результатом є лінія, що починається і закінчується в точці перетину. Довжина лінії дорівнює значенню, яке повертає ST_Distance для g1 і g2.

Покращено: 3.4.0 - підтримка географії.

Доступність: 1.5.0

Приклади

Shortest line between a Point and a LineString.

Code
SELECT ST_ShortestLine(
        'POINT (160 40)',
        'LINESTRING (10 30,50 50,30 110,70 90,180 140,130 190)') As sline;
Вивід растрових зображень
LINESTRING(160 40,125.75342465753425 115.34246575342466)
Figure
Geometry figure for visual-st-shortestline-01

Shortest line between polygons.

Code
SELECT ST_ShortestLine(
         'POLYGON ((190 150,20 10,160 70,190 150))',
         ST_Buffer('POINT(80 160)', 30)
                  ) AS llinewkt;
Вивід растрових зображень
LINESTRING(131.59149149528952 101.89887534906195,101.21320343559643 138.78679656440357)
Figure
Geometry figure for visual-st-shortestline-02

Назва

ST_3DShortestLine — Повертає найкоротшу 3D лінію між двома геометріями

Короткий огляд

geometry ST_3DShortestLine(geometry g1, geometry g2);

Опис

Повертає найкоротшу тривимірну лінію між двома геометріями. Якщо функція знаходить більше однієї найкоротшої лінії, вона повертає тільки першу. Якщо g1 і g2 перетинаються тільки в одній точці, функція повертає лінію, початок і кінець якої знаходяться в цій точці перетину. Якщо g1 і g2 перетинаються в більш ніж одній точці, функція поверне лінію, початок і кінець якої знаходяться в одній точці, але це може бути будь-яка з точок перетину. Повернена лінія завжди починатиметься в g1 і закінчуватиметься в g2. Тривимірна довжина лінії, яку повертає ця функція, завжди буде такою ж, як ST_3DDistanceповертає для g1 і g2.

Доступність: 2.0.0

Змінено: 2.2.0 - якщо введено 2 2D геометрії, повертається 2D точка (замість старого поведінки, що припускає 0 для відсутнього Z). У випадку 2D і 3D, Z більше не вважається 0 для відсутнього Z.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

Compare the 3D shortest line to the 2D shortest line for a LineString and a Point.

Code
WITH input AS (
  SELECT 'POINT(100 100 30)'::geometry AS pt,
         'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 1000)'::geometry AS line
)
SELECT ST_3DShortestLine(line, pt) AS shl3d_line_pt,
       ST_ShortestLine(line, pt) AS shl2d_line_pt
FROM input;
Вивід растрових зображень
-[ RECORD 1 ]--+--------------------------------------------------------------------------------
shl3d_line_pt  | LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30)
shl2d_line_pt  | LINESTRING(73.07692307692307 115.38461538461539,100 100)
Figure
Geometry figure for visual-st-3dshortestline-01

Compare the 3D shortest line to the 2D shortest line for a LineString and a MultiPoint.

Code
WITH input AS (
  SELECT 'MULTIPOINT(100 100 30,50 74 1000)'::geometry AS pt,
         'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 900)'::geometry AS line
)
SELECT ST_3DShortestLine(line, pt) AS shl3d_line_pt,
       ST_ShortestLine(line, pt) AS shl2d_line_pt
FROM input;
Вивід растрових зображень
-[ RECORD 1 ]--+--------------------------------------------------------------------------------
shl3d_line_pt  | LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30)
shl2d_line_pt  | LINESTRING(50 75,50 74)
Figure
Geometry figure for visual-st-3dshortestline-02

Compare the 3D shortest line to the 2D shortest line for a Polygon and a MultiLineString.

Code
WITH input AS (
  SELECT ST_GeomFromEWKT(
           'POLYGON((175 150 5,20 40 5,35 45 5,50 60 5,100 100 5,175 150 5))'
         ) AS poly,
         ST_GeomFromEWKT(
           'MULTILINESTRING((175 155 2,20 40 20,50 60 -2,125 100 1,175 155 1),
                            (1 10 2,5 20 1))'
         ) AS mline
)
SELECT ST_3DShortestLine(poly, mline) AS shl3d,
       ST_ShortestLine(poly, mline) AS shl2d
FROM input;
Вивід растрових зображень
-[ RECORD 1 ]--+--------------------------------------------------------------------------------------
shl3d          | LINESTRING(40.45454545454545 53.63636363636364 5,40.45454545454545 53.63636363636364 5)
shl2d          | LINESTRING(20 40,20 40)
Figure
Geometry figure for visual-st-3dshortestline-03

7.13. Функції накладання

Анотація

Ці функції обчислюють результати, що виникають при накладенні двох геометрій. Вони також відомі як булеві операції теорії множин точок. Також надаються деякі пов'язані функції.

  • ST_ClipByBox2D — Обчислює частину геометрії, що потрапляє в прямокутник.
  • ST_Difference — Обчислює геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B.
  • ST_Intersection — Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_MemUnion — Агрегатна функція, яка об'єднує геометрії в пам'яті ефективним, але повільнішим способом.
  • ST_Node — Вузли — сукупність ліній.
  • ST_Split — Повертає колекцію геометрій, створених шляхом розділення однієї геометрії іншою геометрією.
  • ST_Subdivide — Обчислює прямолінійний поділ геометрії.
  • ST_SymDifference — Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.
  • ST_UnaryUnion — Обчислює об'єднання компонентів однієї геометрії.
  • ST_Union — Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

Назва

ST_ClipByBox2D — Обчислює частину геометрії, що потрапляє в прямокутник.

Короткий огляд

geometry ST_ClipByBox2D(geometry geom, box2d box);

Опис

Обрізає геометрію за допомогою 2D-коробки швидким і толерантним, але, можливо, некоректним способом. Топологічно некоректні вхідні геометрії не призводять до виникнення виняткових ситуацій. Не гарантується коректність вихідної геометрії (зокрема, можуть виникнути самоперетини для полігону).

Виконується модулем GEOS.

Доступність: 2.2.0

Приклади

This example relies on the implicit cast from geometry to box2d for the second parameter.

Code
SELECT ST_ClipByBox2D(geom, ST_MakeEnvelope(0, 0, 10, 10)) FROM mytab;

Назва

ST_Difference — Обчислює геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B.

Короткий огляд

geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1);

Опис

Повертає геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B. Це еквівалентно A - ST_Intersection(A,B). Якщо A повністю міститься в B, то повертається порожня атомарна геометрія відповідного типу.

[Примітка]

Це єдина функція накладання, де порядок введення має значення. ST_Difference(A, B) завжди повертає частину A.

If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.

Виконано модулем GEOS

Покращено: 3.1.0 приймає параметр gridSize.

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.20

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Приклади

Різниця між 2D лініями.

Code
SELECT ST_Difference('LINESTRING(50 100,50 200)'::geometry,
        'LINESTRING(50 50,50 150)'::geometry
    );
Вивід растрових зображень
LINESTRING(50 150,50 200)
Figure
Geometry figure for visual-st-difference-01

Різниця між 3D-точками.

Code
SELECT ST_Difference('MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)' :: geometry,
 'POINT(-118.614 38.281 5)' :: geometry
);
Вивід растрових зображень
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)
Figure
Geometry figure for visual-st-difference-02

Назва

ST_Intersection — Обчислює геометрію, що представляє спільну частину геометрій A і B.

Короткий огляд

geometry ST_Intersection( geometry geomA , geometry geomB , float8 gridSize = -1 );

geography ST_Intersection( geography geogA , geography geogB );

Опис

Повертає геометрію, що представляє перетин двох геометрій. Іншими словами, це та частина геометрії A і геометрії B, яка є спільною для обох геометрій.

Якщо геометрії не мають спільних точок (тобто є роз'єднаними), то повертається порожня атомарна геометрія відповідного типу.

If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.

ST_Intersection у поєднанні з ST_Intersects корисний для обрізання геометрій, наприклад, у запитах на обмежувальну рамку, буфер або регіон, де потрібна лише частина геометрії, що знаходиться всередині країни або регіону, що цікавить.

[Примітка]

Spatial predicates such as ST_Intersects and overlay functions such as ST_Intersection are computed by different algorithms. For very close or nearly coincident coordinates, floating-point precision and geometric robustness may make a predicate return true while the computed intersection is empty, or place an intersection point slightly away from the input line. For repeatable overlay results, snap inputs to a suitable grid first, for example with ST_ReducePrecision, or use the gridSize parameter when all input vertices already lie on the grid.

[Примітка]

For geography this is a thin wrapper around the geometry implementation. Спочатку визначається найкращий SRID, який відповідає обмежувальній рамці 2 географічних об'єктів (якщо географічні об'єкти знаходяться в межах однієї половини зони UTM, але не в одній і тій же UTM, вибирається одна з них) (віддаючи перевагу UTM або Ламберту Азимутальному рівновеликому (LAEA) північному/південному полюсу, а в найгіршому випадку використовуючи проекцію Меркатора), а потім перетинається в найкращому плоскому просторовому відліку і перетворюється назад в географію WGS84.

[Застереження]

Ця функція видалить значення координати M, якщо вони присутні.

[Застереження]

If working with 3D geometries, you may want to use SFCGAL based CG_3DIntersection which does a proper 3D intersection for 3D geometries. Although this function works with Z-coordinate, it does an averaging of Z-Coordinate.

Виконано модулем GEOS

Покращено: 3.1.0 приймає параметр gridSize

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0

Змінено: 3.0.0 не залежить від SFCGAL.

Доступність: 1.5 додано підтримку типу даних географії.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.18

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Приклади

Code
SELECT ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0,0 2 )'::geometry);
Вивід растрових зображень
POINT EMPTY
Code
SELECT ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0,0 2 )'::geometry);
Вивід растрових зображень
POINT(0 0)
Figure
Geometry figure for visual-st-intersection-02

Виріжте всі лінії (треки) за країною. Тут ми припускаємо, що геометрія країни є POLYGON або MULTIPOLYGONS. ПРИМІТКА: ми зберігаємо тільки перетини, які утворюють LINESTRING або MULTILINESTRING, оскільки нас не цікавлять траси, які просто мають спільну точку. Дамп необхідний для розширення колекції геометрії в окремі частини MULT*. Нижче наведено досить загальний приклад, який підійде для полігонів тощо, якщо змінити умову where.

Code
select clipped.gid, clipped.f_name, clipped_geom
from (
         select trails.gid, trails.f_name,
             (ST_Dump(ST_Intersection(country.geom, trails.geom))).geom clipped_geom
         from country
              inner join trails on ST_Intersects(country.geom, trails.geom)
     ) as clipped
where ST_Dimension(clipped.clipped_geom) = 1;

Для полігонів, наприклад, орієнтирів полігону, ви також можете використовувати іноді швидший хак, який буферизує все, крім полігону, на 0,0, що призводить до порожньої колекції геометрії. (Таким чином, колекція геометрії, що містить полігони, лінії та точки, буферизовані на 0,0, залишить тільки полігони і розчиниться оболонку колекції.)

Code
select poly.gid,
    ST_Multi(ST_Buffer(ST_Intersection(country.geom, poly.geom),
            0.0
        )
    ) clipped_geom
from country
     inner join poly on ST_Intersects(country.geom, poly.geom)
where not ST_IsEmpty(ST_Buffer(ST_Intersection(country.geom, poly.geom), 0.0));

Note this is not a true 3D intersection. It uses 2.5D geometries (geometries with Z ordinates, but where calculations are performed in 2D). The same input is compared with CG_3DIntersection, which performs a true 3D intersection.

Code
WITH data AS (
  SELECT 'LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)'::geometry AS input_linestring,
         'POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8))'::geometry AS input_polygon
)
SELECT input_linestring AS input_linestring,
       input_polygon AS input_polygon,
       ST_Intersection(input_linestring, input_polygon) AS intersection_2d,
       CG_3DIntersection(input_linestring, input_polygon) AS intersection_3d
FROM data;
Вивід растрових зображень
LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10) | POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8)) | LINESTRING Z (1 1 8,0.5 0.5 8,0 0 10) | LINESTRING Z (1 1 8,0.5 0.5 8)
Figure
Geometry figure for visual-st-intersection-03

Назва

ST_MemUnion — Агрегатна функція, яка об'єднує геометрії в пам'яті ефективним, але повільнішим способом.

Короткий огляд

geometry ST_MemUnion(geometry set geomfield);

Опис

Агрегатна функція, яка об'єднує вхідні геометрії, зливаючи їх для отримання геометрії результату без перекриттів. Результатом може бути одна геометрія, MultiGeometry або Geometry Collection.

[Примітка]

Дає той самий результат, що й ST_Union, але використовує менше пам'яті та більше процесорного часу. Ця агрегатна функція працює шляхом послідовного об'єднання геометрій, на відміну від агрегату ST_Union, який спочатку накопичує масив, а потім об'єднує вміст за допомогою швидкого алгоритму.

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Приклади

Code
SELECT id,
       ST_MemUnion(geom) as singlegeom
FROM sometable f
GROUP BY id;

Див. також

ST_Union


Назва

ST_Node — Вузли — сукупність ліній.

Короткий огляд

geometry ST_Node(geometry geom);

Опис

Повертає (Multi)LineString, що представляє повністю вузлову версію колекції лінійних рядків. Вузли зберігають усі вхідні вузли та вводять мінімально можливу кількість нових вузлів. Результуюча лінія розчиняється (дублі ліній видаляються).

Це хороший спосіб створити повністю вузлові лінії, які можна використовувати як вхідні дані для ST_Polygonize.

ST_UnaryUnion також може використовуватися для з'єднання та роз'єднання ліній. Він надає можливість вказати розмір сітки gridSize, що дозволяє отримати простіший та надійніший результат. Див. також ST_Unionдля агрегованого варіанту.

This function supports 3d and will not drop the z-index.

Виконується модулем GEOS.

Доступність: 2.0.0

Змінено: 2.4.0 ця функція використовує GEOSNode внутрішньо замість GEOSUnaryUnion. Це може призвести до того, що отримані лінійні рядки матимуть інший порядок і напрямок порівняно з PostGIS < 2.4.

Приклади

Noding a 3D LineString which self-intersects.

Code
SELECT ST_Node('LINESTRINGZ(0 0 0, 10 10 10, 0 10 5, 10 0 3)'::geometry) As  output;
Вивід растрових зображень
MULTILINESTRING Z ((0 0 0,5 5 4.5),(5 5 4.5,10 10 10,0 10 5,5 5 4.5),(5 5 4.5,10 0 3))
Figure
Geometry figure for visual-st-node-01

З'єднання двох лінійних об'єктів, які мають спільні лінії. Зверніть увагу, що лінія результату розчиняється.

Code
SELECT ST_Node('MULTILINESTRING ((2 5,2 1,7 1),(6 1,4 1,2 3,2 5))'::geometry) As  output;
Вивід растрових зображень
MULTILINESTRING((2 5,2 3),(2 3,2 1,4 1),(4 1,2 3),(4 1,6 1),(6 1,7 1))
Figure
Geometry figure for visual-st-node-02

Див. також

ST_UnaryUnion, ST_Union


Назва

ST_Split — Повертає колекцію геометрій, створених шляхом розділення однієї геометрії іншою геометрією.

Короткий огляд

geometry ST_Split(geometry input, geometry blade);

Опис

Функція підтримує розділення LineString за межею (Multi)Point, (Multi)LineString або (Multi)Polygon, або (Multi)Polygon за LineString. Коли (Multi)Polygon використовується як лезо, його лінійні компоненти (межа) використовуються для розділення вхідних даних. Результуюча геометрія завжди є колекцією.

Ця функція в певному сенсі є протилежною до ST_Union. Застосування ST_Union до повернутої колекції теоретично повинно дати вихідну геометрію (хоча через числове округлення це може бути не зовсім так).

[Примітка]

Якщо вхідні дані та лезо не перетинаються через проблеми з числовою точністю, вхідні дані можуть не розділитися як очікується. Щоб уникнути такої ситуації, може бути необхідним спочатку прив'язати вхідні дані до леза за допомогою ST_Snap з невеликим допуском.

Доступність: 2.0.0 вимагає GEOS

Покращено: 2.2.0 додано підтримку розділення лінії мультилінією, мультиточкою або (мульти)полігоном.

Покращено: 2.5.0 додано підтримку розділення полігону мультилінією.

Приклади

Split a circular polygon by a diagonal line.

Code
SELECT
         ST_Split(
           ST_Buffer('POINT(100 90)'::geometry, 50),
           'LINESTRING(10 10,190 190)'::geometry
         );
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((150 90,149 80.2,146.2 70.9,141.6 62.2,135.4 54.6,127.8 48.4,119.1 43.8,109.8 41,100 40,90.2 41,80.9 43.8,72.2 48.4,64.6 54.6,60.1 60.1,129.9 129.9,135.4 125.4,141.6 117.8,146.2 109.1,149 99.8,150 90)), POLYGON((60.1 60.1,58.4 62.2,53.8 70.9,51 80.2,50 90,51 99.8,53.8 109.1,58.4 117.8,64.6 125.4,72.2 131.6,80.9 136.2,90.2 139,100 140,109.8 139,119.1 136.2,127.8 131.6,129.9 129.9,60.1 60.1)))
Figure
Geometry figure for visual-st-split-01

Розділити MultiLineString за точкою, яка лежить точно на обох елементах LineStrings.

Code
SELECT ST_Split('MULTILINESTRING((10 10,190 190),(15 15,30 30,100 90))',
    ST_Point(30, 30));
Вивід растрових зображень
GEOMETRYCOLLECTION(
    LINESTRING(10 10,30 30),
    LINESTRING(30 30,190 190),
    LINESTRING(15 15,30 30),
    LINESTRING(30 30,100 90)
)
Figure
Geometry figure for visual-st-split-02

Розділити лінію String за точкою, яка не лежить точно на лінії. Показано за допомогою ST_Snap, щоб прив'язати лінію до точки, щоб її можна було розділити.

Code
WITH data AS (SELECT
  'LINESTRING(0 0,100 100)'::geometry AS line,
  'POINT(51 50)':: geometry AS point
)
SELECT ST_Split(ST_Snap(line, point, 1), point) AS snapped_split,
       ST_Split(line, point) AS not_snapped_not_split
       FROM data;
Вивід растрових зображень
-[ RECORD 1 ]---------
snapped_split         | GEOMETRYCOLLECTION(LINESTRING(0 0,51 50), LINESTRING(51 50,100 100))
not_snapped_not_split | GEOMETRYCOLLECTION(LINESTRING(0 0,100 100))
Figure
Geometry figure for visual-st-split-03

Див. також

ST_Snap, ST_Union


Назва

ST_Subdivide — Обчислює прямолінійний поділ геометрії.

Короткий огляд

setof geometry ST_Subdivide(geometry geom, integer max_vertices=256, float8 gridSize = -1);

Опис

Повертає набір геометрій, які є результатом поділу geom на частини за допомогою прямолінійних ліній, причому кожна частина містить не більше ніж max_vertices.

max_vertices має бути 5 або більше, оскільки для зображення закритого прямокутника потрібно 5 точок.

If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.

Операції типу "точка в полігоні" та інші просторові операції зазвичай виконуються швидше для індексованих підрозділених набори даних. Оскільки обмежувальні рамки для частин зазвичай охоплюють меншу площу, ніж оригінальна геометрія bbox, запити до індексу дають менше випадків "влучання". Випадки "влучання" обробляються швидше, оскільки просторові операції, що виконуються індексом, перевіряють менше точок.

[Примітка]

При перетворенні поділеної геометрії на географію, отримана географія може відрізнятися від оригіналу. Поділ додає вершини в плоскому (геометричному) просторі. Якщо вершини вставляються вздовж межі, вони змінять географічне представлення, де краї інтерпретуються як геодезичні сегменти. Щоб мінімізувати спотворення, спочатку ущільніть географію за допомогою ST_Segmentize, щоб додати геодезичні вершини, а потім перетворіть на геометрію перед поділом.

[Примітка]

Це функція повернення набору (SRF), яка повертає набір рядків, що містять окремі значення геометрії. Її можна використовувати в списку SELECT або в розділі FROM для створення набору результатів з одним записом для кожної геометрії результату.

Виконується модулем GEOS.

Доступність: 2.2.0

Покращено: 2.5.0 повторно використовує існуючі точки при розділенні полігону, кількість вершин зменшено з 8 до 5.

Покращено: 3.1.0 приймає параметр gridSize.

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0

Приклади

Приклад: Розділіть полігон на частини з не більше ніж 10 вершинами та присвойте кожній частині унікальний ідентифікатор.

Code
SELECT row_number() OVER() As rn,geom As wkt
    FROM (SELECT ST_Subdivide('POLYGON((132 10,119 23,85 35,68 29,66 28,49 42,32 56,22 64,32 110,40 119,36 150,
        57 158,75 171,92 182,114 184,132 186,146 178,176 184,179 162,184 141,190 122,
        190 100,185 79,186 56,186 52,178 34,168 18,147 13,132 10))'::geometry, 10))  AS f(geom);
Вивід растрових зображень
rn │                                                      wkt
────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  1 │ POLYGON((85 35,68 29,66 28,32 56,22 64,29.82608695652174 100,119 100,119 23,85 35))
  2 │ POLYGON((186 52,178 34,168 18,147 13,132 10,119 23,119 56,186 56,186 52))
  3 │ POLYGON((185 79,186 56,119 56,119 100,190 100,185 79))
  4 │ POLYGON((40 119,36 150,57 158,75 171,92 182,114 184,114 100,29.82608695652174 100,32 110,40 119))
  5 │ POLYGON((132 186,146 178,176 184,179 162,184 141,190 122,190 100,114 100,114 184,132 186))
  
Figure
Geometry figure for visual-st-subdivide-01

Приклад: Ущільніть довгу географічну лінію за допомогою ST_Segmentize(geography, distance) і використовуйте ST_Subdivide, щоб розділити отриману лінію на підлінії з 8 вершинами. Ущільнення мінімізує вплив змін на географічне представлення геометрії під час поділу.

Code
SELECT ST_Subdivide(ST_Segmentize('LINESTRING(0 0,85 85)'::geography,
                          1200000)::geometry, 8);
Вивід растрових зображень
LINESTRING(0 0,0.487578359029357 5.57659056746196,0.984542144675897 11.1527721155093,1.50101059639722 16.7281035483571,1.94532113630331 21.25)
LINESTRING(1.94532113630331 21.25,2.04869538062779 22.3020741387339,2.64204641967673 27.8740533545155,3.29994062412787 33.443216802941,4.04836719489742 39.0084282520239,4.59890468420694 42.5)
LINESTRING(4.59890468420694 42.5,4.92498503922732 44.5680389206321,5.98737409390639 50.1195229244701,7.3290919767674 55.6587646879025,8.79638749938413 60.1969505994924)
LINESTRING(8.79638749938413 60.1969505994924,9.11375579533779 61.1785363177625,11.6558166691368 66.6648504160202,15.642041247655 72.0867690601745,22.8716627200212 77.3609628116894,24.6991785131552 77.8939011989848)
LINESTRING(24.6991785131552 77.8939011989848,39.4046096622744 82.1822848017636,44.7994523421035 82.5156766227011)
LINESTRING(44.7994523421035 82.5156766227011,85 85)
Figure
Geometry figure for visual-st-subdivide-02

Приклад: Розділіть складні геометрії таблиці на місці. Оригінальні записи геометрії видаляються з вихідної таблиці, а нові записи для кожної розділеної геометрії результату вставляються.

Code

WITH complex_areas_to_subdivide AS (
    DELETE from polygons_table
    WHERE ST_NPoints(geom) 
> 255
    RETURNING id, column1, column2, column3, geom
)
INSERT INTO polygons_table (fid, column1, column2, column3, geom)
    SELECT fid, column1, column2, column3,
           ST_Subdivide(geom, 255) as geom
    FROM complex_areas_to_subdivide;

Приклад: Створіть нову таблицю, що містить поділені геометрії, зберігаючи ключ оригінальної геометрії, щоб нову таблицю можна було об'єднати з вихідною таблицею. Оскільки ST_Subdivide є функцією, що повертає набір (таблицю) і повертає набір рядків з одним значенням, ця синтаксична конструкція автоматично створює таблицю з одним рядком для кожної частини результату.

Code
CREATE TABLE subdivided_geoms AS
    SELECT pkey, ST_Subdivide(geom) AS geom
    FROM original_geoms;

Назва

ST_SymDifference — Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.

Короткий огляд

geometry ST_SymDifference(geometry geomA, geometry geomB, float8 gridSize = -1);

Опис

Повертає геометрію, що представляє частини геометрій A і B, які не перетинаються. Це еквівалентно ST_Union(A,B) - ST_Intersection(A,B). Це називається симетричною різницею, оскільки ST_SymDifference(A,B) = ST_SymDifference(B,A).

If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.

Виконано модулем GEOS

Покращено: 3.1.0 приймає параметр gridSize.

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.21

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Приклади

This example shows a 2D-safe symmetric difference of two LineStrings.

Code
SELECT ST_SymDifference('LINESTRING(50 100,50 200)',
        'LINESTRING(50 50,50 150)'
    );
Вивід растрових зображень
MULTILINESTRING((50 150,50 200),(50 50,50 100))
Figure
Geometry figure for visual-st-symdifference-01

In 3D, this example does not produce the expected result.

Code
SELECT ST_SymDifference('LINESTRING(1 2 1,1 4 2)',
    'LINESTRING(1 1 3,1 3 4)');
Вивід растрових зображень
MULTILINESTRING((1 3 4,1 4 2),(1 1 3,1 2 1))
Figure
Geometry figure for visual-st-symdifference-02

Назва

ST_UnaryUnion — Обчислює об'єднання компонентів однієї геометрії.

Короткий огляд

geometry ST_UnaryUnion(geometry geom, float8 gridSize = -1);

Опис

Одновхідний варіант ST_Union. Вхідними даними може бути одна геометрія, MultiGeometry або GeometryCollection. Об'єднання застосовується до окремих елементів вхідних даних.

Цю функцію можна використовувати для виправлення полігонів MultiPolygons, які є недійсними через перекриття компонентів. Однак кожний з компонентів вхідних даних повинен бути дійсним. Недійсний компонент вхідних даних, такий як полігон у формі метелика, може спричинити помилку. З цієї причини краще використовувати ST_MakeValid.

Інше застосування цієї функції — об'єднання та роз'єднання набору лінійних рядків, які перетинаються або перекриваються, щоб зробити їх простими. (ST_Node також виконує цю функцію, але не надає опцію gridSize.)

Можна поєднати ST_UnaryUnion з ST_Collect, щоб точно налаштувати кількість геометрій, які об'єднуються одночасно. Це дозволяє досягти компромісу між використанням пам'яті та часом обчислення, забезпечуючи баланс між ST_Union та ST_MemUnion.

If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Покращено: 3.1.0 приймає параметр gridSize.

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0

Доступність: 2.0.0


Назва

ST_Union — Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

Короткий огляд

geometry ST_Union(geometry g1, geometry g2);

geometry ST_Union(geometry g1, geometry g2, float8 gridSize);

geometry ST_Union(geometry[] g1_array);

geometry ST_Union(geometry set g1field);

geometry ST_Union(geometry set g1field, float8 gridSize);

Опис

Об'єднує геометрії вхідних даних, об'єднуючи геометрію для отримання геометрії результату без перекриттів. Результатом може бути атомна геометрія, MultiGeometry або колекція геометрій. Існує в декількох варіантах:

Варіант з двома входами: повертає геометрію, яка є об'єднанням двох вхідних геометрій. Якщо будь-який з входів має значення NULL, то повертається NULL.

Варіант масиву: повертає геометрію, яка є об'єднанням масиву геометрій.

Агрегований варіант: повертає геометрію, яка є об'єднанням набору рядків геометрій. Функція ST_Union() є "агрегованою" функцією в термінології PostgreSQL. Це означає, що вона працює з рядками даних так само, як функції SUM() та AVG(), і, як більшість агрегатів, ігнорує геометрії NULL.

Див. ST_UnaryUnionдля неагрегованого варіанту з одним вхідним параметром.

Масив ST_Union та варіанти набору використовують швидкий алгоритм каскадного об'єднання, описаний у http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html

If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.

[Примітка]

ST_Collect іноді може використовуватися замість ST_Union, якщо результат не повинен бути неперекривним. ST_Collect зазвичай працює швидше, ніж ST_Union, оскільки не виконує обробку зібраних геометрій.

Виконується модулем GEOS.

ST_Union створює MultiLineString і не з'єднує LineStrings в один LineString. Для з'єднання LineStrings використовуйте ST_LineMerge.

ПРИМІТКА: раніше ця функція називалася GeomUnion(), але була перейменована з "Union", оскільки UNION є зарезервованим словом SQL.

Покращено: 3.1.0 приймає параметр gridSize.

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0

Змінено: 3.0.0 не залежить від SFCGAL.

Доступність: 1.4.0 — ST_Union було вдосконалено. Було впроваджено ST_Union(geomarray), а також пришвидшено збір агрегатів у PostgreSQL.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

[Примітка]

Агрегована версія не визначена явно в OGC SPEC.

This method implements the SQL/MM specification. SQL-MM 3: 5.1.19 z-індекс (висота) при використанні полігонів.

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Приклади

Приклад агрегату

Code
SELECT id,
       ST_Union(geom) as singlegeom
FROM sometable f
GROUP BY id;
              

Неагрегований приклад

Code
SELECT ST_Union('POINT(1 2)'::geometry, 'POINT(-2 3)'::geometry);
Вивід растрових зображень
MULTIPOINT((1 2),(-2 3))
Figure
Geometry figure for visual-st-union-01
Code
SELECT ST_Union('POINT(1 2)'::geometry, 'POINT(1 2)'::geometry);
Вивід растрових зображень
POINT(1 2)
Figure
Geometry figure for visual-st-union-02

3D example - sort of supports 3D (and with mixed geometry types!)

Code
SELECT ST_Union(geom)
FROM (
    SELECT 'POLYGON Z((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5))'::geometry geom
    UNION ALL
    SELECT 'POINT Z(5 5 5)'::geometry geom
    UNION ALL
    SELECT 'POINT Z(-2 3 1)'::geometry geom
    UNION ALL
    SELECT 'LINESTRING Z(5 5 5,10 10 10)'::geometry geom
) AS foo;
Вивід растрових зображень
GEOMETRYCOLLECTION(POINT(-2 3 1), LINESTRING(5 5 5,10 10 10), POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)))
Figure
Geometry figure for visual-st-union-03

This 3D example does not mix dimensions.

Code
SELECT ST_Union(geom)
FROM (
    SELECT 'POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2))'::geometry geom
    UNION ALL
    SELECT 'POINT(5 5 5)'::geometry geom
    UNION ALL
    SELECT 'POINT(-2 3 1)'::geometry geom
    UNION ALL
    SELECT 'LINESTRING(5 5 5,10 10 10)'::geometry geom
) AS foo;
Вивід растрових зображень
GEOMETRYCOLLECTION(POINT(-2 3 1), LINESTRING(5 5 5,10 10 10), POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2)))
Figure
Geometry figure for visual-st-union-04

This example unions an array built from a query.

Code
SELECT ST_Union(ARRAY(SELECT geom FROM sometable));

This example unions an array of linestrings.

Code
SELECT ST_Union(ARRAY[
    'LINESTRING(1 2,3 4)'::geometry,
    'LINESTRING(4 5,5 6)'::geometry
]) As wktunion;
Вивід растрових зображень
MULTILINESTRING((1 2,3 4),(4 5,5 6))
Figure
Geometry figure for visual-st-union-05

7.14. Обробка геометрії

Анотація

Ці функції обчислюють геометричні конструкції або змінюють розмір чи форму геометрії.

  • ST_Buffer — Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.
  • ST_BuildArea — Створює полігональну геометрію, утворену лініями геометрії.
  • ST_Centroid — Повертає геометричний центр геометрії.
  • ST_ChaikinSmoothing — Повертає згладжену версію геометрії, використовуючи алгоритм Чайкіна.
  • ST_CatmullRomSmoothing — Returns a smoothed version of a geometry, using the Catmull-Rom spline algorithm
  • ST_ConcaveHull — Обчислює можливу увігнуту геометрію, яка містить усі вершини вхідної геометрії
  • ST_ConvexHull — Обчислює опуклу оболонку геометрії.
  • ST_DelaunayTriangles — Повертає триангуляцію Делауея вершин геометрії.
  • ST_FilterByM — Видаляє вершини на основі їхнього значення M
  • ST_GeneratePoints — Генерує множину випадкових точок, що містяться в полігоні або полігоні.
  • ST_GeometricMedian — Повертає геометричну медіану MultiPoint.
  • ST_LineMerge — Повернути лінії, утворені зшиванням MultiLineString.
  • ST_MaximumInscribedCircle — Обчислює найбільше коло, що міститься в геометрії.
  • ST_LargestEmptyCircle — Обчислює найбільше коло, яке не перетинається з геометрією.
  • ST_MinimumBoundingCircle — Повертає найменший полігон кола, що містить геометрію.
  • ST_MinimumBoundingRadius — Повертає центр і радіус найменшого кола, що містить геометрію.
  • ST_OrientedEnvelope — Повертає прямокутник з мінімальною площею, що містить геометрію.
  • ST_OffsetCurve — Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії.
  • ST_PointOnSurface — Обчислює точку, яка гарантовано лежить у полігоні або на геометрії.
  • ST_Polygonize — Обчислює сукупність полігонів, утворених з ліній набору геометрій.
  • ST_ReducePrecision — Повертає дійсну геометрію з точками, округленими до допуску сітки.
  • ST_SharedPaths — Повертає колекцію, що містить шляхи, спільні для двох вхідних ліній/мультиліній.
  • ST_Simplify — Повертає спрощене представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.
  • ST_SimplifyPreserveTopology — Повертає спрощене та дійсне представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.
  • ST_SimplifyPolygonHull — Обчислює спрощену зовнішню або внутрішню оболонку полігональної геометрії із збереженням топології.
  • ST_SimplifyVW — Повертає спрощене представлення геометрії, використовуючи алгоритм Вісвалінгама-Вайатта
  • ST_SetEffectiveArea — Встановлює ефективну площу для кожної вершини, використовуючи алгоритм Вісвалінгама-Вайатта.
  • ST_TriangulatePolygon — Обчислює обмежену триангуляцію Делоне полігонів
  • ST_VoronoiLines — Повертає межі діаграми Вороного вершин геометрії.
  • ST_VoronoiPolygons — Повертає комірки діаграми Вороного вершин геометрії.

Назва

ST_Buffer — Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.

Короткий огляд

geometry ST_Buffer(geometry g1, float radius_of_buffer, text buffer_style_parameters = '');

geometry ST_Buffer(geometry g1, float radius_of_buffer, integer num_seg_quarter_circle);

geography ST_Buffer(geography g1, float radius_of_buffer, text buffer_style_parameters);

geography ST_Buffer(geography g1, float radius_of_buffer, integer num_seg_quarter_circle);

Опис

Обчислює POLYGON або MULTIPOLYGON, що представляє всі точки, відстань яких від геометрії/географії менше або дорівнює заданій відстані. Від'ємна відстань зменшує геометрію, а не розширює її. Від'ємна відстань може повністю зменшити полігон, і в цьому випадку повертається POLYGON EMPTY. Для точок і ліній від'ємні відстані завжди повертають порожні результати.

Для геометрії відстань вказується в одиницях просторової системи координат геометрії. Для географії відстань вказується в метрах.

Опціональний третій параметр контролює точність і стиль буфера. Точність кругових дуг у буфері визначається як кількість лінійних сегментів, що використовуються для апроксимації чверті кола (за замовчуванням — 8). Стиль буфера можна вказати, надавши список пар ключ=значення, розділених пробілами, як показано нижче:

  • 'quad_segs=#' : кількість відрізків лінії, що використовуються для апроксимації чверті кола (за замовчуванням — 8).

  • 'endcap=round|flat|square' : стиль кінцевої частини (за замовчуванням "round"). 'butt' приймається як синонім 'flat'.

  • 'join=round|mitre|bevel' : стиль з'єднання (за замовчуванням "round"). 'miter' приймається як синонім 'mitre'.

  • 'mitre_limit=#.#' : обмеження кута зрізу (впливає тільки на стиль з'єднання з кутом зрізу). 'miter_limit' приймається як синонім 'mitre_limit'.

  • “side=both|left|right” : за замовчуванням “both”. “left” або “right” виконує односторонній буфер на геометрії, причому буферована сторона відносна до напрямку лінії. Це застосовується тільки до геометрії LINESTRING і не впливає на геометрії POINT або POLYGON. За замовчуванням кінцеві кришки є квадратними, коли вказано “left” або “right”.

[Примітка]

For geography this is a thin wrapper around the geometry implementation. Визначає плоску систему просторових координат, яка найкраще відповідає обмежувальній рамці географічного об'єкта (спробує UTM, рівновелику азимутальну проекцію Ламберта (LAEA) з північним/південним полюсом і, нарешті, проекцію Меркатора). Буфер обчислюється в плоскому просторі, а потім перетворюється назад у WGS84. Це може не дати бажаного результату, якщо вхідний об'єкт набагато більший за зону UTM або перетинає лінію зміни дати

[Примітка]

Буфер може обробляти недійсні вхідні дані, а вихідні дані завжди мають дійсну полігональну геометрію. Буферизація за відстанню 0 іноді використовується як спосіб виправлення недійсних полігонів. ST_MakeValidбільш підходить для цього процесу, оскільки може обробляти мультиполігони.

[Примітка]

Буферизація іноді використовується для виконання пошуку в межах певної відстані. Для цього випадку використання ефективніше використовувати ST_DWithin.

[Примітка]

Ця функція ігнорує вимір Z. Вона завжди дає двовимірний результат, навіть якщо використовується для тривимірної геометрії.

Покращено: 2.5.0 - Підтримка геометрії ST_Buffer була покращена, щоб дозволити вказати бічне буферизування side=both|left|right.

Доступність: 1.5 - ST_Buffer було вдосконалено для підтримки різних кінцевих капсул та типів з'єднання. Це корисно, наприклад, для перетворення лінійних дорожніх об'єктів у полігонні дороги з плоскими або квадратними краями замість заокруглених. Додано тонкий обгортковий об'єкт для географії.

Виконується модулем GEOS.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1.30

Приклади

The textual results are rounded to whole coordinate units for readability. Each result remains available as text, while the manual initially favors the shared input/output figure.

quad_segs=8 (за замовчуванням)

Code
SELECT ST_Buffer(
  ST_GeomFromText('POINT(100 90)'),
  50, 'quad_segs=8');
Вивід растрових зображень
POLYGON((150 90,149 80,146 71,142 62,135 55,128 48,119 44,110 41,100 40,90 41,81 44,72 48,65 55,58 62,54 71,51 80,50 90,51 100,54 109,58 118,65 125,72 132,81 136,90 139,100 140,110 139,119 136,128 132,135 125,142 118,146 109,149 100,150 90))
Figure
Geometry figure for st-buffer-example-01

quad_segs=2

Code
SELECT ST_Buffer(
  ST_GeomFromText('POINT(100 90)'),
  50, 'quad_segs=2');
Вивід растрових зображень
POLYGON((150 90,135 55,100 40,65 55,50 90,65 125,100 140,135 125,150 90))
Figure
Geometry figure for st-buffer-example-02

endcap=round join=round (за замовчуванням)

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'endcap=round join=round');
Вивід растрових зображень
POLYGON((143 157,144 158,146 159,148 160,150 160,152 160,154 159,156 158,157 157,158 156,159 154,160 152,160 150,160 50,160 48,159 46,158 44,157 43,156 42,154 41,152 40,150 40,148 40,146 41,144 42,143 43,142 44,141 46,140 48,140 50,140 126,57 43,56 42,54 41,52 40,50 40,48 40,46 41,44 42,43 43,42 44,41 46,40 48,40 50,40 52,41 54,42 56,43 57,143 157))
Figure
Geometry figure for st-buffer-example-03

endcap=square

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'endcap=square join=round');
Вивід растрових зображень
POLYGON((143 157,144 158,146 159,148 160,150 160,152 160,154 159,156 158,157 157,158 156,159 154,160 152,160 150,160 50,160 40,140 40,140 126,57 43,50 36,36 50,143 157))
Figure
Geometry figure for st-buffer-example-04

endcap=flat

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'endcap=flat join=round');
Вивід растрових зображень
POLYGON((143 157,144 158,146 159,148 160,150 160,152 160,154 159,156 158,157 157,158 156,159 154,160 152,160 150,160 50,140 50,140 126,57 43,43 57,143 157))
Figure
Geometry figure for st-buffer-example-05

join=bevel

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'join=bevel');
Вивід растрових зображень
POLYGON((143 157,160 150,160 50,160 48,159 46,158 44,157 43,156 42,154 41,152 40,150 40,148 40,146 41,144 42,143 43,142 44,141 46,140 48,140 50,140 126,57 43,56 42,54 41,52 40,50 40,48 40,46 41,44 42,43 43,42 44,41 46,40 48,40 50,40 52,41 54,42 56,43 57,143 157))
Figure
Geometry figure for st-buffer-example-06

join=mitre mitre_limit=5.0 (стандартне обмеження mitre)

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'join=mitre mitre_limit=5.0');
Вивід растрових зображень
POLYGON((160 174,160 50,160 48,159 46,158 44,157 43,156 42,154 41,152 40,150 40,148 40,146 41,144 42,143 43,142 44,141 46,140 48,140 50,140 126,57 43,56 42,54 41,52 40,50 40,48 40,46 41,44 42,43 43,42 44,41 46,40 48,40 50,40 52,41 54,42 56,43 57,160 174))
Figure
Geometry figure for st-buffer-example-07

join=mitre mitre_limit=1

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'join=mitre mitre_limit=1.0');
Вивід растрових зображень
POLYGON((148 162,160 157,160 50,160 48,159 46,158 44,157 43,156 42,154 41,152 40,150 40,148 40,146 41,144 42,143 43,142 44,141 46,140 48,140 50,140 126,57 43,56 42,54 41,52 40,50 40,48 40,46 41,44 42,43 43,42 44,41 46,40 48,40 50,40 52,41 54,42 56,43 57,148 162))
Figure
Geometry figure for st-buffer-example-08

side=left

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'side=left');
Вивід растрових зображень
POLYGON((150 50,150 150,50 50,43 57,143 157,144 158,146 159,148 160,150 160,152 160,154 159,156 158,157 157,158 156,159 154,160 152,160 150,160 50,150 50))
Figure
Geometry figure for st-buffer-example-09

side=right

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'side=right');
Вивід растрових зображень
POLYGON((50 50,150 150,150 50,140 50,140 126,57 43,50 50))
Figure
Geometry figure for st-buffer-example-10

side=left join=mitre

Code
SELECT ST_Buffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
  10, 'side=left join=mitre');
Вивід растрових зображень
POLYGON((150 50,150 150,50 50,43 57,160 174,160 50,150 50))
Figure
Geometry figure for st-buffer-example-11

right-hand winding, polygon boundary side=left

Code
SELECT ST_Buffer(
  ST_ForceRHR(ST_Boundary(ST_GeomFromText(
    'POLYGON ((50 50,50 150,150 150,150 50,50 50))'))),
  20, 'side=left');
Вивід растрових зображень
POLYGON((50 50,50 150,150 150,150 50,50 50))
Figure
Geometry figure for st-buffer-example-12

right-hand winding, polygon boundary side=right

Code
SELECT ST_Buffer(
  ST_ForceRHR(ST_Boundary(ST_GeomFromText(
    'POLYGON ((50 50,50 150,150 150,150 50,50 50))'))),
  20, 'side=right');
Вивід растрових зображень
POLYGON((50 50,50 70,50 150,150 150,150 50,70 50,50 50),(70 70,130 70,130 130,70 130,70 70))
Figure
Geometry figure for st-buffer-example-13
 

A buffered point approximates a circle. A buffered point forcing approximation of (see diagram) 2 points per quarter circle is poly with 8 sides (see diagram)

Code
SELECT ST_NPoints(ST_Buffer('POINT(100 90)'::geometry, 50)) As promisingcircle_pcount,
ST_NPoints(ST_Buffer('POINT(100 90)'::geometry, 50, 2)) As lamecircle_pcount;
Вивід растрових зображень
promisingcircle_pcount | lamecircle_pcount
------------------------+-------------------
             33 |                9

A lighter, less smooth circle using only 2 points per quarter circle is an octagon.

The following example creates a 100 meter octagon in NAD83 longitude/latitude by transforming to the Massachusetts state plane meter projection and then buffering. The figure shows the input and output in separate panels because the coordinates are in different SRIDs.

Code
WITH input AS (
  SELECT ST_SetSRID(ST_Point(-71.063526, 42.35785), 4269) AS point_4269
), projected AS (
  SELECT point_4269,
         ST_Transform(point_4269, 26986) AS point_26986
  FROM input
)
SELECT point_4269 AS input_point_4269,
       ST_Buffer(point_26986, 100, 2) AS octagon_26986
FROM projected;
Вивід растрових зображень
SRID=4269;POINT(-71.063526 42.35785) | SRID=26986;POLYGON((236057.5905746494 900908.7599186979,236028.30125276805 900838.0492405792,235957.5905746494 900808.7599186979,235886.87989653074 900838.0492405792,235857.5905746494 900908.7599186979,235886.87989653074 900979.4705968165,235957.5905746494 901008.7599186979,236028.30125276805 900979.4705968165,236057.5905746494 900908.7599186979))
Figure
Geometry figure for visual-st-buffer-15

Buffering a polygon by a positive distance and then by the same negative distance is a morphological closing operation. It can be useful for smoothing noisy boundaries, such as simplifying a coastline by removing narrow inlets and bays. The result intentionally changes the shape and area of the input, and the distance must be chosen in the units of the input SRS. For data in a geographic SRS, transform to a projected SRS suited to the operation first; for cartographic visualization in Web Mercator, using that display SRS can be appropriate.

Smooth a coastline using a 1 km closing operation, then simplify the result. The example uses Massachusetts State Plane meter units for the operation.

Code
WITH projected AS (
  SELECT id, ST_Transform(geom, 26986) AS geom
  FROM coast
),
closed AS (
  SELECT id, ST_Buffer(ST_Buffer(geom, 1000), -1000) AS geom
  FROM projected
)
SELECT id, ST_Transform(ST_SimplifyPreserveTopology(geom, 50), 4326) AS geom
FROM closed;

The same technique is described in Paul Ramsey's Removing Complexities. The final simplification step is optional; use ST_SimplifyPreserveTopology when polygonal validity matters, and check the result against the cartographic or analytical tolerance required by the application.

A small negative buffer can also be used as a heuristic to find narrow polygon spikes. The query below compares how much area and perimeter remain after erosion. A large erosion_index indicates that the perimeter dropped proportionally more than the area. This is only a preselection aid; the threshold and buffer distance must be chosen for the data units and the kind of spike being checked.

Code
WITH sample(id, geom) AS (
  VALUES
    ('plain', 'POLYGON((0 0,10 0,10 10,0 10,0 0))'::geometry),
    ('spike', 'POLYGON((0 0,10 0,10 10,5.2 10,5 16,4.8 10,0 10,0 0))'::geometry)
),
eroded AS (
  SELECT id, geom, ST_Buffer(geom, -0.5) AS eroded_geom
  FROM sample
),
scored AS (
  SELECT id,
         round((
           ST_Area(eroded_geom) / ST_Area(geom) /
           NULLIF(ST_Perimeter(eroded_geom) / ST_Perimeter(geom), 0)
         )::numeric, 3) AS erosion_index
  FROM eroded
  WHERE NOT ST_IsEmpty(eroded_geom)
)
SELECT id, erosion_index, erosion_index > 1.1 AS possible_spike
FROM scored
ORDER BY id;
Вивід растрових зображень
id   | erosion_index | possible_spike
-------+---------------+----------------
 plain |         0.900 | f
 spike |         1.147 | t
Figure
Geometry figure for visual-st-buffer-16

A variable-distance buffer can be approximated by buffering each vertex of a line by a distance interpolated along the line, building the convex hull for each consecutive pair of vertex buffers, and unioning the segment hulls. As with any geometry buffer, distances are in the units of the input SRS.

Taper a line buffer from 5 to 25 units along the line.

Code
WITH line AS (
  SELECT 'LINESTRING(0 0, 100 0, 160 40)'::geometry AS geom
),
vertices AS (
  SELECT (dump).path[1] AS n,
         (dump).geom AS geom,
         line.geom AS line_geom
  FROM line
  CROSS JOIN LATERAL ST_DumpPoints(line.geom) AS dump
),
radii AS (
  SELECT n,
         geom,
         5 + (25 - 5) * ST_LineLocatePoint(line_geom, geom) AS radius
  FROM vertices
),
segments AS (
  SELECT n,
         geom,
         radius,
         lead(geom) OVER (ORDER BY n) AS next_geom,
         lead(radius) OVER (ORDER BY n) AS next_radius
  FROM radii
)
SELECT ST_Union(
         ST_ConvexHull(
           ST_Collect(
             ST_Buffer(geom, radius),
             ST_Buffer(next_geom, next_radius)
           )
         )
       ) AS tapered_buffer
FROM segments
WHERE next_geom IS NOT NULL;
Вивід растрових зображень
POLYGON((96.758 -16.301,-0.975 -4.904,-1.913 -4.619,-2.778 -4.157,-3.536 -3.536,-4.157 -2.778,-4.619 -1.913,-4.904 -0.975,-5 0,-4.904 0.975,-4.619 1.913,-4.157 2.778,-3.536 3.536,-2.778 4.157,-1.913 4.619,-0.975 4.904,93.101 15.875,142.322 57.678,146.111 60.787,150.433 63.097,155.123 64.52,160 65,164.877 64.52,169.567 63.097,173.889 60.787,177.678 57.678,180.787 53.889,183.097 49.567,184.52 44.877,185 40,184.52 35.123,183.097 30.433,180.787 26.111,177.678 22.322,173.889 19.213,169.567 16.903,106.36 -15.355,103.242 -16.301,100 -16.62,96.758 -16.301))
Figure
Geometry figure for visual-st-buffer-17

Назва

ST_BuildArea — Створює полігональну геометрію, утворену лініями геометрії.

Короткий огляд

geometry ST_BuildArea(geometry geom);

Опис

Створює площинну геометрію, утворену лініями, що складають вхідну геометрію. Вхідними даними можуть бути LineString, MultiLineString, Polygon, MultiPolygon або GeometryCollection. Результатом є Polygon або MultiPolygon, залежно від вхідних даних. Якщо вхідні лінії не утворюють полігонів, повертається NULL.

На відміну від ST_MakePolygon, ця функція приймає кільця, утворені декількома лініями, і може утворювати будь-яку кількість полігонів.

Ця функція перетворює внутрішні кільця на отвори. Щоб перетворити внутрішні кільця також на полігони, використовуйте ST_Polygonize.

[Примітка]

Для коректної роботи цієї функції вхідні лінії повинні бути правильно позначені вузлами. Для позначення ліній можна використовувати ST_Node.

Якщо вхідні лінії перетинаються, ця функція створить недійсні полігони. ST_MakeValidможна використовувати для забезпечення дійсності вихідних даних.

Доступність: 1.1.0

Приклади

Building an area from five input lines.

Code
WITH data(geom) AS (VALUES
   ('LINESTRING (180 40,30 20,20 90)'::geometry),
  ('LINESTRING (180 40,160 160)'::geometry),
  ('LINESTRING (160 160,80 190,80 120,20 90)'::geometry),
  ('LINESTRING (80 60,120 130,150 80)'::geometry),
  ('LINESTRING (80 60,150 80)'::geometry)
)
SELECT ST_BuildArea(ST_Collect(geom )) AS wkt
    FROM data;
Вивід растрових зображень
POLYGON((180 40,30 20,20 90,80 120,80 190,160 160,180 40),(150 80,120 130,80 60,150 80))
Figure
Geometry figure for visual-st-buildarea-01

Create a donut from two circular polygons.

Code
WITH input AS (
  SELECT 'POINT(100 90)'::geometry AS geom
),
rings AS (
  SELECT ST_Buffer(geom, 25, 'quad_segs=1') AS inring,
         ST_Buffer(geom, 50, 'quad_segs=1') AS outring
  FROM input
)
SELECT inring AS inner_ring,
       outring AS outer_ring,
       ST_BuildArea(ST_Collect(inring, outring)) AS area
FROM rings;
Вивід растрових зображень
-[ RECORD 1 ]-----
inner_ring | POLYGON((125 90,100 65,75 90,100 115,125 90))
outer_ring | POLYGON((150 90,100 40,50 90,100 140,150 90))
area       | POLYGON((150 90,100 40,50 90,100 140,150 90),(125 90,100 115,75 90,100 65,125 90))
Figure
Geometry figure for visual-st-buildarea-02

Input linework that crosses at non-endpoint intersections must be noded before building areas:

Code
WITH lines(geom) AS (VALUES
  ('LINESTRING(36 35,45 307)'::geometry),
  ('LINESTRING(30 290,390 280)'::geometry),
  ('LINESTRING(320 60,300 310)'::geometry),
  ('LINESTRING(20 60,320 60)'::geometry),
  ('LINESTRING(120 140,168 225)'::geometry),
  ('LINESTRING(140 220,220 150,120 170)'::geometry)
),
noded AS (
  SELECT ST_Node(ST_UnaryUnion(ST_Collect(geom))) AS geom FROM lines
)
SELECT ST_BuildArea(geom) AS area
FROM noded;
Вивід растрових зображень
POLYGON((320 60,36.8 60,44.4 289.6,302.2 282.4,320 60),(156.9 205.3,135.2 167,220 150,156.9 205.3))
Figure
Geometry figure for visual-st-buildarea-03

Див. також

ST_Collect, ST_MakePolygon, ST_MakeValid, ST_Node, ST_Polygonize, ST_BdPolyFromText, ST_BdMPolyFromText (обгортки для цієї функції зі стандартним інтерфейсом OGC)


Назва

ST_Centroid — Повертає геометричний центр геометрії.

Короткий огляд

geometry ST_Centroid(geometry g1);

geography ST_Centroid(geography g1, boolean use_spheroid = true);

Опис

Обчислює точку, яка є геометричним центром маси геометрії. Для [MULTI]POINTs, центроїд є середнім арифметичним вхідних координат. Для [MULTI]LINESTRINGs, центроїд обчислюється за допомогою зваженої довжини кожного відрізка лінії. Для [MULTI]POLYGONs, центроїд обчислюється за площею. Якщо надано порожню геометрію, повертається порожній GEOMETRYCOLLECTION. Якщо вказано NULL, повертається NULL. Якщо вказано CIRCULARSTRING або COMPOUNDCURVE, вони спочатку перетворюються на лінії за допомогою CurveToLine, а потім так само, як для LINESTRING

Для вхідних даних змішаного розміру результат дорівнює центроїду компонента Геометрії найвищого розміру (оскільки геометрії нижчого розміру не мають "ваги" для центроїда).

Зверніть увагу, що для полігональних геометрій центр ваги не обов'язково лежить всередині полігону. Наприклад, дивіться схему нижче, що зображує центр ваги С-подібного полігону. Щоб побудувати точку, яка гарантовано лежить всередині полігону, використовуйте ST_PointOnSurface.

Нове в версії 2.3.0: підтримка CIRCULARSTRING та COMPOUNDCURVE (за допомогою CurveToLine)

Доступність: 2.4.0 додано підтримку географії.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3: 8.1.4, 9.5.5

Приклади

Centroid of a MultiPoint.

Code
SELECT ST_Centroid(
  'MULTIPOINT (8 24,10 92,12 154,17 68,28 10,29 52,29 84,55 50,56 24,131 14,160 180,189 180)');
Вивід растрових зображень
POINT(60.333 77.667)
Figure
Geometry figure for st-centroid-multipoint

Centroid of a LineString.

Code
SELECT ST_Centroid(
  'LINESTRING (190 160,10 190,40 90,20 70,10 10,30 40,30 10,110 40,70 10,110 10,140 40,140 10,160 30,180 10)');
Вивід растрових зображень
POINT(76.191 79.876)
Figure
Geometry figure for visual-st-centroid-02

Centroid of a Polygon.

Code
SELECT ST_Centroid(
  'POLYGON ((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190))');
Вивід растрових зображень
POINT(80.251 113.405)
Figure
Geometry figure for visual-st-centroid-03

Centroid of the highest-dimension components of a GeometryCollection.

Code
SELECT ST_Centroid(
  'GEOMETRYCOLLECTION (POLYGON ((190 170,180 100,80 140,80 160,130 160,110 180,110 190,180 180,190 170)),
    LINESTRING (80 120,120 20,140 70,150 30,180 50,190 10),
    MULTIPOINT (19 150,22 49,30 13,32 101,45 35,67 88,75 16))');
Вивід растрових зображень
POINT(143.361 148.263)
Figure
Geometry figure for visual-st-centroid-04
Code
SELECT ST_Centroid(g)
FROM  ST_GeomFromText('CIRCULARSTRING(0 2,-1 1,0 0,0.5 0,1 0,2 1,1 2,0.5 2,0 2)')  AS g ;
Вивід растрових зображень
st_astext
-------------
 POINT(0.5 1)
(1 row)
Figure
Geometry figure for visual-st-centroid-05
Code
SELECT ST_Centroid(g)
FROM  ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 2,-1 1,0 0),(0 0,0.5 0,1 0), CIRCULARSTRING( 1 0,2 1,1 2),(1 2,0.5 2,0 2))' ) AS g;
Вивід растрових зображень
st_astext
-------------
 POINT(0.5 1)
(1 row)
Figure
Geometry figure for visual-st-centroid-06

Centroids of the parts of a MultiPolygon.

Code
SELECT ST_Collect(ST_Centroid(geom) ORDER BY path)
FROM ST_Dump('MULTIPOLYGON (
    ((0 0,0 1,1 1,1 0,0 0)),
    ((2 2,2 3,3 3,3 2,2 2))
  )'::geometry);
Вивід растрових зображень
MULTIPOINT((0.5 0.5),(2.5 2.5))
Figure
Geometry figure for visual-st-centroid-07

Назва

ST_ChaikinSmoothing — Повертає згладжену версію геометрії, використовуючи алгоритм Чайкіна.

Короткий огляд

geometry ST_ChaikinSmoothing(geometry geom, integer nIterations = 1, boolean preserveEndPoints = false);

Опис

Згладжує лінійну або полігональну геометрію за допомогою алгоритму Чайкіна. Ступінь згладжування контролюється параметром nIterations. На кожній ітерації кожна внутрішня вершина замінюється двома вершинами, розташованими на 1/4 довжини відрізків лінії перед і після вершини. Розумний ступінь згладжування забезпечується 3 ітераціями; максимальне значення обмежено 5.

Якщо preserveEndPoints має значення true, кінцеві точки кілець полігону не згладжуються. Кінцеві точки лінійних об'єктів завжди зберігаються.

[Примітка]

Кількість вершин подвоюється з кожною ітерацією, тому геометрія результату може мати набагато більше точок, ніж вхідні дані. Щоб зменшити кількість точок, скористайтеся функцією спрощення результату (див. ST_Simplify, ST_SimplifyPreserveTopologyта ST_SimplifyVW).

Результатом є інтерпольовані значення для розмірів Z і M, якщо вони присутні.

This function supports 3d and will not drop the z-index.

Доступність: 2.5.0

Приклади

Smoothing a Polygon using 1, 2 and 3 iterations.

Code
SELECT n AS iterations, ST_ChaikinSmoothing(
    'POLYGON ((20 20,60 90,10 150,100 190,190 160,130 120,190 50,140 70,120 10,90 60,20 20))', n
  ) AS smoothed
FROM generate_series(1, 3) AS n;
Вивід растрових зображень
1 | POLYGON((30 37.5,50 72.5,47.5 105,22.5 135,32.5 160,77.5 180,122.5 182.5,167.5 167.5,175 150,145 130,145 102.5,175 67.5,177.5 55,152.5 65,135 55,125 25,112.5 22.5,97.5 47.5,72.5 50,37.5 30,30 37.5))
2 | POLYGON((35 46.25,45 63.75,49.375 80.625,48.125 96.875,41.25 112.5,28.75 127.5,25 141.25,30 153.75,43.75 165,66.25 175,88.75 180.625,111.25 181.875,133.75 178.75,156.25 171.25,169.375 163.125,173.125 154.375,167.5 145,152.5 135,145 123.125,145 109.375,152.5 93.75,167.5 76.25,175.625 64.375,176.875 58.125,171.25 57.5,158.75 62.5,148.125 62.5,139.375 57.5,132.5 47.5,127.5 32.5,121.875 24.375,115.625 23.125,108.75 28.75,101.25 41.25,91.25 48.125,78.75 49.375,63.75 45,46.25 35,35.625 31.875,31.875 35.625,35 46.25))
3 | POLYGON((37.5 50.625,42.5 59.375,46.09375 67.96875,48.28125 76.40625,49.0625 84.6875,48.4375 92.8125,46.40625 100.78125,42.96875 108.59375,38.125 116.25,31.875 123.75,27.8125 130.9375,25.9375 137.8125,26.25 144.375,28.75 150.625,33.4375 156.5625,40.3125 162.1875,49.375 167.5,60.625 172.5,71.875 176.40625,83.125 179.21875,94.375 180.9375,105.625 181.5625,116.875 181.09375,128.125 179.53125,139.375 176.875,150.625 173.125,159.53125 169.21875,166.09375 165.15625,170.3125 160.9375,172.1875 156.5625,171.71875 152.03125,168.90625 147.34375,163.75 142.5,156.25 137.5,150.625 132.03125,146.875 126.09375,145 119.6875,145 112.8125,146.875 105.46875,150.625 97.65625,156.25 89.375,163.75 80.625,169.53125 73.28125,173.59375 67.34375,175.9375 62.8125,176.5625 59.6875,175.46875 57.96875,172.65625 57.65625,168.125 58.75,161.875 61.25,156.09375 62.5,150.78125 62.5,145.9375 61.25,141.5625 58.75,137.65625 55,134.21875 50,131.25 43.75,128.75 36.25,126.09375 30.46875,123.28125 26.40625,120.3125 24.0625,117.1875 23.4375,113.90625 24.53125,110.46875 27.34375,106.875 31.875,103.125 38.125,98.75 42.96875,93.75 46.40625,88.125 48.4375,81.875 49.0625,75 48.28125,67.5 46.09375,59.375 42.5,50.625 37.5,43.59375 34.21875,38.28125 32.65625,34.6875 32.8125,32.8125 34.6875,32.65625 38.28125,34.21875 43.59375,37.5 50.625))
Figure
Geometry figure for visual-st-chaikinsmoothing-01

Smoothing a LineString using 1, 2 and 3 iterations.

Code
SELECT n AS iterations, ST_ChaikinSmoothing(
    'LINESTRING (10 140,80 130,100 190,190 150,140 20,120 120,50 30,30 100)', n
  ) AS smoothed
FROM generate_series(1, 3) AS n;
Вивід растрових зображень
1 | LINESTRING(10 140,62.5 132.5,85 145,95 175,122.5 180,167.5 160,177.5 117.5,152.5 52.5,135 45,125 95,102.5 97.5,67.5 52.5,45 47.5,30 100)
2 | LINESTRING(10 140,49.375 134.375,68.125 135.625,79.375 141.875,87.5 152.5,92.5 167.5,101.875 176.25,115.625 178.75,133.75 175,156.25 165,170 149.375,175 128.125,171.25 101.25,158.75 68.75,148.125 50.625,139.375 46.875,132.5 57.5,127.5 82.5,119.375 95.625,108.125 96.875,93.75 86.25,76.25 63.75,61.875 51.25,50.625 48.75,41.25 60.625,30 100)
3 | LINESTRING(10 140,39.53125 135.78125,54.0625 134.6875,63.4375 135.3125,70.9375 137.1875,76.5625 140.3125,81.40625 144.53125,85.46875 149.84375,88.75 156.25,91.25 163.75,94.84375 169.6875,99.53125 174.0625,105.3125 176.875,112.1875 178.125,120.15625 177.8125,129.21875 175.9375,139.375 172.5,150.625 167.5,159.6875 161.09375,166.5625 153.28125,171.25 144.0625,173.75 133.4375,174.0625 121.40625,172.1875 107.96875,168.125 93.125,161.875 76.875,156.09375 64.21875,150.78125 55.15625,145.9375 49.6875,141.5625 47.8125,137.65625 49.53125,134.21875 54.84375,131.25 63.75,128.75 76.25,125.46875 85.78125,121.40625 92.34375,116.5625 95.9375,110.9375 96.5625,104.53125 94.21875,97.34375 88.90625,89.375 80.625,80.625 69.375,72.65625 60.625,65.46875 54.375,59.0625 50.625,53.4375 49.375,48.28125 51.71875,43.59375 57.65625,38.4375 70.46875,30 100)
Figure
Geometry figure for visual-st-chaikinsmoothing-02

Smoothing a triangle shows the weakest visual change, so it is kept last.

Code
SELECT ST_ChaikinSmoothing(geom) smoothed
FROM (SELECT  'POLYGON((0 0,8 8,0 16,0 0))'::geometry geom) AS foo;
Вивід растрових зображень
POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2))
Figure
Geometry figure for visual-st-chaikinsmoothing-03

Назва

ST_CatmullRomSmoothing — Returns a smoothed version of a geometry, using the Catmull-Rom spline algorithm

Короткий огляд

geometry ST_CatmullRomSmoothing(geometry geom, integer nSegments = 5);

Опис

Smoothes a linear or polygonal geometry using the Catmull-Rom spline algorithm. Unlike ST_ChaikinSmoothing, this is an interpolating spline: the output curve passes through every original vertex. Between each pair of consecutive original vertices, nSegments - 1 new intermediate points are inserted.

The nSegments parameter controls the density of the output. With nSegments = 5 (the default), each original span is divided into 5 sub-segments (inserting 4 new points per span). The minimum value is 2.

At least 4 input vertices are required to apply smoothing; geometries with fewer vertices are returned unchanged. Points and multipoints are always returned unchanged.

[Примітка]

The output vertex count grows as 1 + (N-1) * nSegments for open lines, and 1 + N * nSegments for closed rings, where N is the number of input vertices. For large geometries, use a simplification function on the result to reduce the number of points (see ST_Simplify, ST_SimplifyPreserveTopology and ST_SimplifyVW).

Результатом є інтерпольовані значення для розмірів Z і M, якщо вони присутні.

This function supports 3d and will not drop the z-index.

Доступність: 3.6.0

Приклади

Smoothing a LineString using nSegments = 5 and 10.

Code
WITH input(geom) AS (VALUES
  ('LINESTRING (10 140,80 130,100 190,190 150,140 20,120 120,50 30,30 100)'::geometry)
)
SELECT ST_CatmullRomSmoothing(geom, 5) AS segments_5,
  ST_CatmullRomSmoothing(geom, 10) AS segments_10
FROM input;
Вивід растрових зображень
LINESTRING(10 140,24.8 136.88,40.4 132.64,55.6 128.96,69.2 127.52,80 130,86.08 139.12,88.24 153.76,89.36 169.84,92.32 183.28,100 190,115.76 189.84,137.68 185.52,160.72 177.28,179.84 165.36,190 150,188.48 126.08,178.64 93.44,164.56 59.76,150.32 32.72,140 20,134.88 28.32,132.24 52.56,130.16 82.64,126.72 108.48,120 120,108.4 111.6,93.2 90,76.8 63.6,61.6 40.8,50 30,42.8 33.76,38.4 46.48,35.6 64.32,33.2 83.44,30 100) | LINESTRING(10 140,17.225 138.685,24.8 136.88,32.575 134.795,40.4 132.64,48.125 130.625,55.6 128.96,62.675 127.855,69.2 127.52,75.025 128.165,80 130,83.71 133.615,86.08 139.12,87.47 146.005,88.24 153.76,88.75 161.875,89.36 169.84,90.43 177.145,92.32 183.28,95.39 187.735,100 190,106.795 190.455,115.76 189.84,126.265 188.185,137.68 185.52,149.375 181.875,160.72 177.28,171.085 171.765,179.84 165.36,186.355 158.095,190 150,190.535 139.61,188.48 126.08,184.345 110.37,178.64 93.44,171.875 76.25,164.56 59.76,157.205 44.93,150.32 32.72,144.415 24.09,140 20,137.01 21.54,134.88 28.32,133.37 39.08,132.24 52.56,131.25 67.5,130.16 82.64,128.73 96.72,126.72 108.48,123.89 116.66,120 120,114.8 117.975,108.4 111.6,101.1 101.925,93.2 90,85 76.875,76.8 63.6,68.9 51.225,61.6 40.8,55.2 33.375,50 30,45.975 30.52,42.8 33.76,40.325 39.24,38.4 46.48,36.875 55,35.6 64.32,34.425 73.96,33.2 83.44,31.775 92.28,30 100)
Figure
Geometry figure for visual-st-catmullromsmoothing-01

Smoothing a 4-point collinear line with default nSegments=5 shows the minimal change case.

Code
SELECT ST_CatmullRomSmoothing('LINESTRING(0 0,5 0,10 0,15 0)');
Вивід растрових зображень
LINESTRING(0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 0,12 0,13 0,14 0,15 0)
Figure
Geometry figure for visual-st-catmullromsmoothing-02

Smoothing a Polygon using nSegments = 5 and 10. This larger example is kept last.

Code
WITH input(geom) AS (VALUES
  ('POLYGON ((20 20,60 90,10 150,100 190,190 160,130 120,190 50,140 70,120 10,90 60,20 20))'::geometry)
)
SELECT ST_CatmullRomSmoothing(geom, 5) AS segments_5,
  ST_CatmullRomSmoothing(geom, 10) AS segments_10
FROM input;
Вивід растрових зображень
POLYGON((20 20,22.4 27.12,32.4 40.56,45.2 57.44,56 74.88,60 90,53.52 102.96,39.76 115.68,24.24 127.92,12.48 139.44,10 150,19.04 160.4,35.92 170.8,57.28 180,79.76 186.8,100 190,120.4 188.64,143.2 183.52,164.8 176.08,181.6 167.76,190 160,185.68 153.12,171.04 146.16,152.56 138.64,136.72 130.08,130 120,136.08 106.48,150.64 89.84,168.16 72.96,183.12 58.72,190 50,186.56 49.52,176.48 55.36,163.12 63.44,149.84 69.68,140 70,134.24 61.36,130.32 46.48,127.28 29.92,124.16 16.24,120 10,115.28 14.4,110.64 26.4,105.36 41.2,98.72 54,90 60,76.8 56,59.6 45.2,42 32.4,27.6 22.4,20 20)) | POLYGON((20 20,19.95 22.59,22.4 27.12,26.75 33.23,32.4 40.56,38.75 48.75,45.2 57.44,51.15 66.27,56 74.88,59.15 82.91,60 90,58.015 96.495,53.52 102.96,47.205 109.365,39.76 115.68,31.875 121.875,24.24 127.92,17.545 133.785,12.48 139.44,9.735 144.855,10 150,13.33 155.125,19.04 160.4,26.71 165.675,35.92 170.8,46.25 175.625,57.28 180,68.59 183.775,79.76 186.8,90.37 188.925,100 190,109.675 189.88,120.4 188.64,131.725 186.46,143.2 183.52,154.375 180,164.8 176.08,174.025 171.94,181.6 167.76,187.075 163.72,190 160,189.535 156.54,185.68 153.12,179.245 149.68,171.04 146.16,161.875 142.5,152.56 138.64,143.905 134.52,136.72 130.08,131.815 125.26,130 120,131.635 113.81,136.08 106.48,142.645 98.37,150.64 89.84,159.375 81.25,168.16 72.96,176.305 65.33,183.12 58.72,187.915 53.49,190 50,189.32 48.715,186.56 49.52,182.14 51.905,176.48 55.36,170 59.375,163.12 63.44,156.26 67.045,149.84 69.68,144.28 70.835,140 70,136.83 66.745,134.24 61.36,132.11 54.415,130.32 46.48,128.75 38.125,127.28 29.92,125.79 22.435,124.16 16.24,122.27 11.905,120 10,117.585 10.95,115.28 14.4,112.995 19.75,110.64 26.4,108.125 33.75,105.36 41.2,102.255 48.15,98.72 54,94.665 58.15,90 60,84.125 59.15,76.8 56,68.475 51.15,59.6 45.2,50.625 38.75,42 32.4,34.175 26.75,27.6 22.4,22.725 19.95,20 20))
Figure
Geometry figure for visual-st-catmullromsmoothing-03

Назва

ST_ConcaveHull — Обчислює можливу увігнуту геометрію, яка містить усі вершини вхідної геометрії

Короткий огляд

geometry ST_ConcaveHull(geometry param_geom, float param_pctconvex, boolean param_allow_holes = false);

Опис

Увігнутий контур — це (зазвичай) увігнута геометрія, яка містить вхідні дані, а її вершини є підмножиною вершин вхідних даних. У загальному випадку увігнутий корпус є полігоном. Увігнутий корпус двох або більше колінеарних точок є двоточковим LineString. Увігнутий корпус однієї або більше ідентичних точок є точкою. Полігон не буде містити отворів, якщо опціональний аргумент param_allow_holes не вказано як true.

Уявіть собі увігнутий контур, що "обгортає" набір точок. Це відрізняється від опуклого контуру, який більше нагадує гумку, натягнуту навколо точок. Увігнутий контур зазвичай має меншу площу і є більш природною межею для вхідних точок.

Параметр param_pctconvex контролює увігнутість обчислюваної оболонки. Значення 1 створює опуклу оболонку. Значення від 1 до 0 створюють оболонки із зростаючою увігнутістю. Значення 0 створює оболонку з максимальною увігнутістю (але все одно єдиний полігон). Вибір відповідного значення залежить від характеру вхідних даних, але часто значення між 0,3 і 0,1 дають прийнятні результати.

[Примітка]

Технічно, параметр param_pctconvex визначає довжину як частку різниці між найдовшим і найкоротшим ребрами в триангуляції Делоне вхідних точок. Ребра, довші за цю довжину, "видаляються" з триангуляції. Трикутники, що залишаються, утворюють увігнуту оболонку.

Для точкових і лінійних вхідних даних оболонка охоплюватиме всі точки вхідних даних. Для полігональних вхідних даних оболонка охоплюватиме всі точки вхідних даних а також всі області, що охоплюються вхідними даними. Якщо ви хочете отримати точкову оболонку полігональних вхідних даних, спочатку перетворіть їх у точки за допомогою ST_Points.

This is not an aggregate function. To compute the concave hull of a set of geometries use ST_Collect (e.g. ST_ConcaveHull(ST_Collect(geom ), 0.80).

Доступність: 2.0.0

Покращено: 3.3.0, увімкнено вбудовану реалізацію GEOS для GEOS 3.11+

Приклади

Concave hull of a MultiPoint.

Code
SELECT ST_ConcaveHull('MULTIPOINT ((10 72),(53 76),(56 66),(63 58),(71 51),(81 48),(91 46),(101 45),(111 46),(121 47),(131 50),(140 55),(145 64),(144 74),(135 80),(125 83),(115 85),(105 87),(95 89),(85 91),(75 93),(65 95),(55 98),(45 102),(37 107),(29 114),(22 122),(19 132),(18 142),(21 151),(27 160),(35 167),(44 172),(54 175),(64 178),(74 180),(84 181),(94 181),(104 181),(114 181),(124 181),(134 179),(144 177),(153 173),(162 168),(171 162),(177 154),(182 145),(184 135),(139 132),(136 142),(128 149),(119 153),(109 155),(99 155),(89 155),(79 153),(69 150),(61 144),(63 134),(72 128),(82 125),(92 123),(102 121),(112 119),(122 118),(132 116),(142 113),(151 110),(161 106),(170 102),(178 96),(185 88),(189 78),(190 68),(189 58),(185 49),(179 41),(171 34),(162 29),(153 25),(143 23),(133 21),(123 19),(113 19),(102 19),(92 19),(82 19),(72 21),(62 22),(52 25),(43 29),(33 34),(25 41),(19 49),(14 58),(21 73),(31 74),(42 74),(173 134),(161 134),(150 133),(97 104),(52 117),(157 156),(94 171),(112 106),(169 73),(58 165),(149 40),(70 33),(147 157),(48 153),(140 96),(47 129),(173 55),(144 86),(159 67),(150 146),(38 136),(111 170),(124 94),(26 59),(60 41),(71 162),(41 64),(88 110),(122 34),(151 97),(157 56),(39 146),(88 33),(159 45),(47 56),(138 40),(129 165),(33 48),(106 31),(169 147),(37 122),(71 109),(163 89),(37 156),(82 170),(180 72),(29 142),(46 41),(59 155),(124 106),(157 80),(175 82),(56 50),(62 116),(113 95),(144 167))',
         0.1 );
Вивід растрових зображень
st_astext
-----------
POLYGON ((18 142, 21 151, 27 160, 35 167, 44 172, 54 175, 64 178, 74 180, 84 181, 94 181, 104 181, 114 181, 124 181, 134 179, 144 177, 153 173, 162 168, 171 162, 177 154, 182 145, 184 135, 173 134, 161 134, 150 133, 139 132, 136 142, 128 149, 119 153, 109 155, 99 155, 89 155, 79 153, 69 150, 61 144, 63 134, 72 128, 82 125, 92 123, 102 121, 112 119, 122 118, 132 116, 142 113, 151 110, 161 106, 170 102, 178 96, 185 88, 189 78, 190 68, 189 58, 185 49, 179 41, 171 34, 162 29, 153 25, 143 23, 133 21, 123 19, 113 19, 102 19, 92 19, 82 19, 72 21, 62 22, 52 25, 43 29, 33 34, 25 41, 19 49, 14 58, 10 72, 21 73, 31 74, 42 74, 53 76, 56 66, 63 58, 71 51, 81 48, 91 46, 101 45, 111 46, 121 47, 131 50, 140 55, 145 64, 144 74, 135 80, 125 83, 115 85, 105 87, 95 89, 85 91, 75 93, 65 95, 55 98, 45 102, 37 107, 29 114, 22 122, 19 132, 18 142))
(1 row)
Figure
Geometry figure for visual-st-concavehull-01

Concave hull of a MultiPoint, allowing holes.

Code
SELECT ST_ConcaveHull('MULTIPOINT ((132 64),(114 64),(99 64),(81 64),(63 64),(57 49),(52 36),(46 20),(37 20),(26 20),(32 36),(39 55),(43 69),(50 84),(57 100),(63 118),(68 133),(74 149),(81 164),(88 180),(101 180),(112 180),(119 164),(126 149),(132 131),(139 113),(143 100),(150 84),(157 69),(163 51),(168 36),(174 20),(163 20),(150 20),(143 36),(139 49),(132 64),(99 151),(92 138),(88 124),(81 109),(74 93),(70 82),(83 82),(99 82),(112 82),(126 82),(121 96),(114 109),(110 122),(103 138),(99 151),(34 27),(43 31),(48 44),(46 58),(52 73),(63 73),(61 84),(72 71),(90 69),(101 76),(123 71),(141 62),(166 27),(150 33),(159 36),(146 44),(154 53),(152 62),(146 73),(134 76),(143 82),(141 91),(130 98),(126 104),(132 113),(128 127),(117 122),(112 133),(119 144),(108 147),(119 153),(110 171),(103 164),(92 171),(86 160),(88 142),(79 140),(72 124),(83 131),(79 118),(68 113),(63 102),(68 93),(35 45))',
         0.15, true );
Вивід растрових зображень
st_astext
-----------
POLYGON ((43 69, 50 84, 57 100, 63 118, 68 133, 74 149, 81 164, 88 180, 101 180, 112 180, 119 164, 126 149, 132 131, 139 113, 143 100, 150 84, 157 69, 163 51, 168 36, 174 20, 163 20, 150 20, 143 36, 139 49, 132 64, 114 64, 99 64, 81 64, 63 64, 57 49, 52 36, 46 20, 37 20, 26 20, 32 36, 35 45, 39 55, 43 69), (88 124, 81 109, 74 93, 83 82, 99 82, 112 82, 121 96, 114 109, 110 122, 103 138, 92 138, 88 124))
(1 row)
Figure
Geometry figure for visual-st-concavehull-02

Порівняння увігнутого корпусу полігону з увігнутим корпусом складових точок. Корпус дотримується меж полігону, тоді як оболонка на основі точок цього не робить.

Code
WITH data(geom) AS (VALUES
   ('POLYGON ((10 90,39 85,61 79,50 90,80 80,95 55,25 60,90 45,70 16,63 38,60 10,50 30,43 27,30 10,20 20,10 90))'::geometry)
)
SELECT ST_ConcaveHull(geom, 0.1) AS polygon_hull,
       ST_ConcaveHull(ST_Points(geom), 0.1) AS points_hull
    FROM data;
Вивід растрових зображень
POLYGON((60 10,50 30,43 27,30 10,20 20,10 90,39 85,50 90,80 80,95 55,90 45,70 16,60 10)) | POLYGON((25 60,10 90,39 85,50 90,80 80,95 55,90 45,70 16,60 10,30 10,20 20,43 27,50 30,63 38,61 79,25 60))
Figure
Geometry figure for visual-st-concavehull-03

Використання з ST_Collect для обчислення увігнутої оболонки набору геометрій.

This example estimates an infected area from point observations.

Code
SELECT disease_type,
    ST_ConcaveHull(ST_Collect(obs_pnt), 0.3 ) AS geom
  FROM disease_obs
  GROUP BY disease_type;

Назва

ST_ConvexHull — Обчислює опуклу оболонку геометрії.

Короткий огляд

geometry ST_ConvexHull(geometry geomA);

Опис

Обчислює опуклу оболонку геометрії. Опукла оболонка — це найменша опукла геометрія, яка охоплює всі геометрії у вхідних даних.

Опуклу оболонку можна уявити як геометрію, отриману шляхом обертання гумової стрічки навколо набору геометрій. Це відрізняється від увігнутої оболонки, яка аналогічна "упаковці" геометрій. Опукла оболонка часто використовується для визначення зони впливу на основі набору точкових спостережень.

У загальному випадку опукла оболонка є полігоном. Опукла оболонка двох або більше колінеарних точок є двоточковою лінією. Опукла оболонка однієї або більше однакових точок є точкою.

Це не агрегатна функція. Щоб обчислити опуклу оболонку набору геометрій, використовуйте ST_Collect, щоб об'єднати їх у колекцію геометрій (наприклад, ST_ConvexHull(ST_Collect(geom)).

Виконано модулем GEOS

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1.16

This function supports 3d and will not drop the z-index.

Приклади

Compute the convex hull of a MultiLineString and a MultiPoint.

Code
SELECT ST_ConvexHull(ST_Collect(ST_GeomFromText('MULTILINESTRING((100 190,10 8),(150 10,20 30))'),
            ST_GeomFromText('MULTIPOINT(50 5,150 30,50 10,10 10)')
            ));
Вивід растрових зображень
st_astext
-----------
POLYGON((50 5,10 8,10 10,100 190,150 30,150 10,50 5))
(1 row)
Figure
Geometry figure for visual-st-convexhull-01

Використання разом із ST_Collect для обчислення опуклих оболонок наборів геометричних фігур.

This example returns an estimated infected area from point observations.

Code
SELECT d.disease_type,
    ST_ConvexHull(ST_Collect(d.geom)) As geom
    FROM disease_obs As d
    GROUP BY d.disease_type;

Назва

ST_DelaunayTriangles — Повертає триангуляцію Делауея вершин геометрії.

Короткий огляд

geometry ST_DelaunayTriangles(geometry g1, float tolerance = 0.0, int4 flags = 0);

Опис

Обчислює триангуляцію Делоне вершин вхідної геометрії. Опціональний параметр tolerance можна використовувати для з'єднання сусідніх вхідних вершин, що в деяких ситуаціях підвищує надійність. Результуюча геометрія обмежується опуклою оболонкою вхідних вершин. Представлення результуючої геометрії визначається кодом flags:

  • 0 - GEOMETRYCOLLECTION трикутних полігонів (за замовчуванням)

  • 1 - MULTILINESTRING граней триангуляції

  • 2 - TIN триангуляції

Виконується модулем GEOS.

Доступність: 2.1.0

This function supports 3d and will not drop the z-index.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Triangulation of the vertices of a polygon and a buffered point.

Code
WITH data AS (
  SELECT polygon, ST_Buffer(center, 20) AS point_buffer
  FROM (SELECT
    'POLYGON((175 150,20 40,50 60,125 100,175 150))'::geometry AS polygon,
    'POINT(110 170)'::geometry AS center
  ) AS input
)
SELECT ST_DelaunayTriangles(ST_Union(polygon, point_buffer)) AS triangles
FROM data;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((96 184,93 181,96 156,96 184)), POLYGON((96 184,96 156,102 188,96 184)), POLYGON((96 184,102 188,99 187,96 184)), POLYGON((102 188,96 156,99 153,102 188)), POLYGON((102 188,99 153,102 152,102 188)), POLYGON((102 188,102 152,106 190,102 188)), POLYGON((106 190,102 152,106 150,106 190)), POLYGON((106 190,106 150,110 190,106 190)), POLYGON((110 190,106 150,110 150,110 190)), POLYGON((110 190,110 150,118 188,110 190)), POLYGON((110 190,118 188,114 190,110 190)), POLYGON((118 188,110 150,121 153,118 188)), POLYGON((118 188,121 153,121 187,118 188)), POLYGON((121 187,121 153,124 156,121 187)), POLYGON((121 187,124 156,124 184,121 187)), POLYGON((121 187,124 184,175 150,121 187)), POLYGON((175 150,124 184,127 181,175 150)), POLYGON((175 150,127 181,128 178,175 150)), POLYGON((175 150,128 178,130 174,175 150)), POLYGON((175 150,130 174,130 170,175 150)), POLYGON((175 150,130 170,130 166,175 150)), POLYGON((175 150,130 166,128 162,175 150)), POLYGON((175 150,128 162,127 159,175 150)), POLYGON((175 150,127 159,124 156,175 150)), POLYGON((175 150,124 156,125 100,175 150)), POLYGON((125 100,124 156,121 153,125 100)), POLYGON((125 100,121 153,118 152,125 100)), POLYGON((125 100,118 152,114 150,125 100)), POLYGON((125 100,114 150,110 150,125 100)), POLYGON((125 100,110 150,106 150,125 100)), POLYGON((125 100,106 150,102 152,125 100)), POLYGON((125 100,102 152,99 153,125 100)), POLYGON((125 100,99 153,50 60,125 100)), POLYGON((125 100,50 60,20 40,125 100)), POLYGON((20 40,50 60,90 166,20 40)), POLYGON((20 40,90 166,90 170,20 40)), POLYGON((20 40,90 170,90 174,20 40)), POLYGON((20 40,90 174,92 178,20 40)), POLYGON((92 178,90 174,90 170,92 178)), POLYGON((92 178,90 170,92 162,92 178)), POLYGON((92 178,92 162,93 159,92 178)), POLYGON((92 178,93 159,93 181,92 178)), POLYGON((93 181,93 159,96 156,93 181)), POLYGON((96 156,93 159,50 60,96 156)), POLYGON((96 156,50 60,99 153,96 156)), POLYGON((50 60,93 159,92 162,50 60)), POLYGON((50 60,92 162,90 166,50 60)), POLYGON((90 166,92 162,90 170,90 166)), POLYGON((110 150,114 150,121 153,110 150)), POLYGON((121 153,114 150,118 152,121 153)), POLYGON((124 156,127 159,130 166,124 156)), POLYGON((124 156,130 166,128 178,124 156)), POLYGON((124 156,128 178,124 184,124 156)), POLYGON((124 184,128 178,127 181,124 184)), POLYGON((128 178,130 166,130 170,128 178)), POLYGON((128 178,130 170,130 174,128 178)), POLYGON((130 166,127 159,128 162,130 166)))
Figure
Geometry figure for visual-st-delaunaytriangles-01

Triangulation edges returned as a MULTILINESTRING.

Code
WITH data AS (
  SELECT polygon, ST_Buffer(center, 20) AS point_buffer
  FROM (SELECT
    'POLYGON((175 150,20 40,50 60,125 100,175 150))'::geometry AS polygon,
    'POINT(110 170)'::geometry AS center
  ) AS input
)
SELECT ST_DelaunayTriangles(ST_Union(polygon, point_buffer), 0.001, 1) AS triangulation_edges
FROM data;
Вивід растрових зображень
MULTILINESTRING((121 187,175 150),(118 188,121 187),(114 190,118 188),(110 190,114 190),(106 190,110 190),(102 188,106 190),(99 187,102 188),(96 184,99 187),(93 181,96 184),(92 178,93 181),(20 40,92 178),(20 40,125 100),(125 100,175 150),(124 156,125 100),(124 156,175 150),(124 156,127 159),(127 159,175 150),(127 159,128 162),(128 162,175 150),(128 162,130 166),(130 166,175 150),(130 166,130 170),(130 170,175 150),(130 174,130 170),(130 174,175 150),(128 178,130 174),(128 178,175 150),(127 181,128 178),(127 181,175 150),(124 184,127 181),(124 184,175 150),(121 187,124 184),(124 156,124 184),(121 187,124 156),(121 153,124 156),(121 153,121 187),(118 188,121 153),(110 150,121 153),(110 150,118 188),(110 150,110 190),(110 190,118 188),(106 150,110 150),(106 150,110 190),(106 190,106 150),(102 152,106 150),(102 152,106 190),(102 152,102 188),(99 153,102 152),(99 153,102 188),(96 156,99 153),(96 156,102 188),(96 156,96 184),(96 184,102 188),(93 181,96 156),(93 159,96 156),(93 159,93 181),(92 178,93 159),(92 162,93 159),(92 162,92 178),(90 170,92 162),(90 170,92 178),(90 170,90 174),(90 174,92 178),(20 40,90 174),(20 40,90 170),(90 170,90 166),(20 40,90 166),(50 60,90 166),(20 40,50 60),(50 60,125 100),(50 60,99 153),(99 153,125 100),(50 60,96 156),(50 60,93 159),(50 60,92 162),(90 166,92 162),(102 152,125 100),(106 150,125 100),(110 150,125 100),(110 150,114 150),(114 150,125 100),(114 150,118 152),(118 152,125 100),(118 152,121 153),(121 153,125 100),(114 150,121 153),(124 184,128 178),(124 156,128 178),(128 178,130 166),(124 156,130 166),(127 159,130 166),(128 178,130 170))
Figure
Geometry figure for visual-st-delaunaytriangles-02

Triangulation of 42 points forming an L shape.

Code
WITH data AS (
  SELECT 'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,
    150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,
    14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,
    6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,
    14 94,14 74,14 54,14 34,14 14)'::geometry AS l_shape_points
)
SELECT ST_DelaunayTriangles(l_shape_points) AS triangles
FROM data;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((6 194,6 190,14 194,6 194)), POLYGON((14 194,6 190,14 174,14 194)), POLYGON((14 194,14 174,154 14,14 194)), POLYGON((154 14,14 174,14 154,154 14)), POLYGON((154 14,14 154,150 14,154 14)), POLYGON((154 14,150 14,154 6,154 14)), POLYGON((154 6,150 14,134 6,154 6)), POLYGON((134 6,150 14,134 14,134 6)), POLYGON((134 6,134 14,114 14,134 6)), POLYGON((134 6,114 14,114 6,134 6)), POLYGON((114 6,114 14,94 14,114 6)), POLYGON((114 6,94 14,94 6,114 6)), POLYGON((94 6,94 14,74 14,94 6)), POLYGON((94 6,74 14,74 6,94 6)), POLYGON((74 6,74 14,54 14,74 6)), POLYGON((74 6,54 14,54 6,74 6)), POLYGON((54 6,54 14,34 14,54 6)), POLYGON((54 6,34 14,34 6,54 6)), POLYGON((34 6,34 14,14 14,34 6)), POLYGON((34 6,14 14,14 6,34 6)), POLYGON((14 6,14 14,10 6,14 6)), POLYGON((10 6,14 14,6 10,10 6)), POLYGON((10 6,6 10,7 7,10 6)), POLYGON((10 6,7 7,8 6,10 6)), POLYGON((7 7,6 10,6 8,7 7)), POLYGON((6 10,14 14,6 30,6 10)), POLYGON((6 30,14 14,14 34,6 30)), POLYGON((6 30,14 34,6 50,6 30)), POLYGON((6 50,14 34,14 54,6 50)), POLYGON((6 50,14 54,6 70,6 50)), POLYGON((6 70,14 54,14 74,6 70)), POLYGON((6 70,14 74,6 90,6 70)), POLYGON((6 90,14 74,14 94,6 90)), POLYGON((6 90,14 94,6 110,6 90)), POLYGON((6 110,14 94,14 114,6 110)), POLYGON((6 110,14 114,6 130,6 110)), POLYGON((6 130,14 114,14 134,6 130)), POLYGON((6 130,14 134,6 150,6 130)), POLYGON((6 150,14 134,14 154,6 150)), POLYGON((6 150,14 154,6 170,6 150)), POLYGON((6 170,14 154,14 174,6 170)), POLYGON((6 170,14 174,6 190,6 170)), POLYGON((14 154,14 134,150 14,14 154)), POLYGON((150 14,14 134,134 14,150 14)), POLYGON((134 14,14 134,114 14,134 14)), POLYGON((114 14,14 134,14 114,114 14)), POLYGON((114 14,14 114,94 14,114 14)), POLYGON((94 14,14 114,14 94,94 14)), POLYGON((94 14,14 94,74 14,94 14)), POLYGON((74 14,14 94,14 74,74 14)), POLYGON((74 14,14 74,54 14,74 14)), POLYGON((54 14,14 74,14 54,54 14)), POLYGON((54 14,14 54,34 14,54 14)), POLYGON((34 14,14 54,14 34,34 14)), POLYGON((34 14,14 34,14 14,34 14)))
Figure
Geometry figure for visual-st-delaunaytriangles-03

Приклад використання вершин із значеннями Z.

Code
SELECT ST_DelaunayTriangles(
  'MULTIPOINT Z(14 14 10,150 14 100,34 6 25,20 10 150)'::geometry);
Вивід растрових зображень
GEOMETRYCOLLECTION Z (POLYGON Z ((14 14 10,20 10 150,34 6 25,14 14 10)),POLYGON Z ((14 14 10,34 6 25,150 14 100,14 14 10)))

Назва

ST_FilterByM — Видаляє вершини на основі їхнього значення M

Короткий огляд

geometry ST_FilterByM(geometry geom, double precision min, double precision max = null, boolean returnM = false);

Опис

Відфільтровує вершинні точки на основі їх M-значення. Повертає геометрію, що містить тільки вершинні точки, M-значення яких більше або дорівнює мінімальному значенню і менше або дорівнює максимальному значенню. Якщо аргумент max-value не вказано, враховується тільки значення min. Якщо четвертий аргумент не вказано, m-значення не буде включено в результуючу геометрію. Якщо в результуючій геометрії залишилося занадто мало вершинних точок для її типу, буде повернута порожня геометрія. У колекції геометрій геометрії без достатньої кількості точок просто пропускаються без повідомлення.

Ця функція в основному призначена для використання разом із ST_SetEffectiveArea. ST_EffectiveArea встановлює ефективну площу вершини в її m-значенні. За допомогою ST_FilterByM можна отримати спрощену версію геометрії без будь-яких обчислень, просто за допомогою фільтрування

[Примітка]

Існує різниця в тому, що повертає ST_SimplifyVW, коли недостатньо точок відповідають критеріям, порівняно з ST_FilterByM. ST_SimplifyVW повертає геометрію з достатньою кількістю точок, тоді як ST_FilterByM повертає порожню геометрію

[Примітка]

Зверніть увагу, що повернута геометрія може бути недійсною

[Примітка]

Ця функція повертає всі розмірності, включаючи значення Z і M

Доступність: 2.5.0

Приклади

Лінійний рядок фільтрується

Code
SELECT ST_FilterByM(geom, 30) simplified
FROM (SELECT  ST_SetEffectiveArea('LINESTRING(5 2,3 8,6 20,7 25,10 10)'::geometry) geom) As foo;
Вивід растрових зображень
LINESTRING(5 2,7 25,10 10)
Figure
Geometry figure for visual-st-filterbym-01

Назва

ST_GeneratePoints — Генерує множину випадкових точок, що містяться в полігоні або полігоні.

Короткий огляд

geometry ST_GeneratePoints(geometry g, integer npoints, integer seed = 0);

Опис

ST_GeneratePoints генерує мультиточку, що складається з заданої кількості псевдовипадкових точок, які лежать у межах вхідної області. Опціональний параметр seed використовується для повторного генерування детермінованої послідовності точок і повинен бути більшим за нуль.

Доступність: 2.3.0

Покращено: 3.0.0, додано параметр seed

Приклади

Generate 12 points inside a buffered LineString using the deterministic seed 1996.

Code
WITH source AS (
  SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
           10, 'endcap=round join=round') AS geom
)
SELECT geom AS area,
       ST_GeneratePoints(geom, 12, 1996) AS points
FROM source;
Вивід растрових зображень
POLYGON((142.929 157.071,144.444 158.315,146.173 159.239,148.049 159.808,150 160,151.951 159.808,153.827 159.239,155.556 158.315,157.071 157.071,158.315 155.556,159.239 153.827,159.808 151.951,160 150,160 50,159.808 48.049,159.239 46.173,158.315 44.444,157.071 42.929,155.556 41.685,153.827 40.761,151.951 40.192,150 40,148.049 40.192,146.173 40.761,144.444 41.685,142.929 42.929,141.685 44.444,140.761 46.173,140.192 48.049,140 50,140 125.858,57.071 42.929,55.556 41.685,53.827 40.761,51.951 40.192,50 40,48.049 40.192,46.173 40.761,44.444 41.685,42.929 42.929,41.685 44.444,40.761 46.173,40.192 48.049,40 50,40.192 51.951,40.761 53.827,41.685 55.556,42.929 57.071,142.929 157.071)) | MULTIPOINT((97.546 111.15),(155.206 69.56),(101.94 114.818),(90.308 91.125),(151.257 106.401),(143.12 120.461),(152.952 146.697),(119.774 123.985),(148.672 40.92),(54.376 45.337),(150.667 88.153),(129.634 120.578))
Figure
Geometry figure for visual-st-generatepoints-01

Задано таблицю полігонів s. Поверніть 12 окремих точок для кожного полігону. Результати будуть різними при кожному запуску.

Code
SELECT s.id, dp.path[1] AS pt_id, dp.geom
FROM s, ST_DumpPoints(ST_GeneratePoints(s.geom, 12)) AS dp;

Generate dot-density points from a polygon table, using the absolute value of an attribute as the number of points and keeping the sign of the attribute for styling.

Code
SELECT z.id,
       CASE WHEN z.count_delta < 0 THEN -1 ELSE 1 END AS sign,
       dp.path[1] AS pt_id,
       dp.geom
FROM zones AS z
CROSS JOIN LATERAL ST_DumpPoints(
    ST_GeneratePoints(z.geom, abs(z.count_delta)::integer, z.id + 1)
) AS dp
WHERE z.count_delta <> 0;

Див. також

ST_DumpPoints


Назва

ST_GeometricMedian — Повертає геометричну медіану MultiPoint.

Короткий огляд

geometry ST_GeometricMedian ( geometry geom, float8 tolerance = NULL, int max_iter = 10000, boolean fail_if_not_converged = false);

Опис

Обчислює приблизну геометричну медіану геометрії MultiPoint за допомогою алгоритму Вайзфельда. Геометрична медіана — це точка, що мінімізує суму відстаней до вхідних точок. Вона забезпечує міру центральності, яка є менш чутливою до виняткових точок, ніж центроїд (центр маси).

Алгоритм повторюється доти, доки зміна відстані між послідовними ітераціями не стане меншою за заданий параметр tolerance. Якщо ця умова не виконана після max_iterations ітерацій, функція видає помилку і завершує роботу, якщо fail_if_not_converged не встановлено в false (за замовчуванням).

Якщо аргумент tolerance не вказано, значення допуску обчислюється на основі розмірів вхідної геометрії.

Якщо присутні, значення вхідної точки M інтерпретуються як їх відносні ваги.

Доступність: 2.3.0

Покращено: 2.5.0 Додано підтримку M як ваги точок.

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

Compare the geometric median and centroid of a MultiPoint.

Code
WITH test AS (
SELECT 'MULTIPOINT((10 10),(10 40),(40 10),(190 190))'::geometry geom)
SELECT
  ST_Centroid(geom) centroid,
  ST_GeometricMedian(geom) median
FROM test;
Вивід растрових зображень
centroid      |                 median
--------------------+----------------------------------------
   POINT(62.5 62.5) | POINT(25.01778421249728 25.01778421249728)
(1 row)
Figure
Geometry figure for st-geometricmedian-example

Див. також

ST_Centroid


Назва

ST_LineMerge — Повернути лінії, утворені зшиванням MultiLineString.

Короткий огляд

geometry ST_LineMerge(geometry amultilinestring);

geometry ST_LineMerge(geometry amultilinestring, boolean directed);

Опис

Повертає LineString або MultiLineString, утворений шляхом з'єднання лінійних елементів MultiLineString. Лінії з'єднуються в кінцевих точках на двосторонніх перетинах. Лінії не з'єднуються на перетинах з трьома або більше точками.

Якщо directed має значення TRUE, то ST_LineMerge не змінюватиме порядок точок у LineStrings, тому лінії з протилежними напрямками не будуть об'єднані

[Примітка]

Використовуйте тільки з MultiLineString/LineStrings. Інші типи геометрії повертають порожній GeometryCollection

Виконується модулем GEOS.

Покращено: 3.3.0 приймає спрямований параметр.

Для використання параметра directed необхідна версія GEOS >= 3.11.0.

Доступність: 1.1.0

[Застереження]

Ця функція видаляє розмірність M.

Приклади

Cardinality 2

Nodes with cardinality 2 are merged away.

Code
SELECT ST_LineMerge('MULTILINESTRING((10 160,60 120),(120 140,60 120),(120 140,180 120))'
);
Вивід растрових зображень
LINESTRING(10 160,60 120,120 140,180 120)
Figure
Geometry figure for visual-st-linemerge-01

Cardinality 3 or More

Лінії не об'єднуються на перетинах зі ступенем > 2.

Code
SELECT ST_LineMerge('MULTILINESTRING((10 160,60 120),(120 140,60 120),(120 140,180 120),(100 180,120 140))'
);
Вивід растрових зображень
MULTILINESTRING((10 160,60 120,120 140),(100 180,120 140),(120 140,180 120))
Figure
Geometry figure for visual-st-linemerge-02

Лінії, що не стикаються

Якщо об'єднання неможливе через непересічні лінії, повертається оригінальний MultiLineString.

Code
SELECT ST_LineMerge('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32))'
);
Вивід растрових зображень
MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33))
Figure
Geometry figure for visual-st-linemerge-03

Направлений параметр

Lines with opposite directions are not merged if directed is TRUE.

Code
SELECT ST_LineMerge('MULTILINESTRING((60 30,10 70),(120 50,60 30),(120 50,180 30))',
TRUE);
Вивід растрових зображень
MULTILINESTRING((120 50,60 30,10 70),(120 50,180 30))
Figure
Geometry figure for visual-st-linemerge-04

Обробка Z-виміру

Code
SELECT ST_LineMerge('MULTILINESTRING((-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 6),(-29 -27 12,-30 -29.7 5),(-45 -33 1,-46 -32 11))'
        );
Вивід растрових зображень
LINESTRING Z (-30 -29.7 5,-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 1,-46 -32 11)
Figure
Geometry figure for visual-st-linemerge-05

Див. також

ST_Segmentize, ST_LineSubstring


Назва

ST_MaximumInscribedCircle — Обчислює найбільше коло, що міститься в геометрії.

Короткий огляд

(geometry, geometry, double precision) ST_MaximumInscribedCircle(geometry geom);

Опис

Знаходить найбільше коло, яке міститься в (мульти)полігоні або не перетинається з лініями та точками. Повертає запис із полями:

  • center - центр кола

  • nearest - точка на геометрії, найближча до центру

  • radius - радіус кола

Для полігональних вхідних даних коло вписується в межі кільця, використовуючи внутрішні кільця як межі. Для лінійних і точкових вхідних даних коло вписується в опуклу оболонку вхідних даних, використовуючи лінії і точки вхідних даних як додаткові межі.

Доступність: 3.1.0.

Потрібна версія GEOS >= 3.9.0.

Приклади

Maximum inscribed circle of a polygon. Center, nearest point, radius, circle, and radius line are returned.

Code
WITH mic AS (
  SELECT * FROM ST_MaximumInscribedCircle(
    'POLYGON ((40 180,110 160,180 180,180 120,140 90,160 40,80 10,70 40,20 50,40 180),
              (60 140,50 90,90 140,60 140))')
)
SELECT round(radius::numeric, 3) AS radius,
       ST_SnapToGrid(center, 1) AS center,
       ST_SnapToGrid(nearest, 1) AS nearest,
       ST_SnapToGrid(ST_Buffer(center, radius), 1) AS circle,
       ST_SnapToGrid(ST_MakeLine(center, nearest), 1) AS radius_line
FROM mic;
Вивід растрових зображень
-[ RECORD 1 ]-----
radius      | 45.189
center      | POINT(97 76)
nearest     | POINT(62 105)
circle      | POLYGON((142 76,141 68,139 59,135 51,129 44,122 39,114 35,106 32,97 31,88 32,80 35,72 39,65 44,59 51,55 59,53 68,52 76,53 85,55 94,59 101,65 108,72 114,80 118,88 121,97 122,106 121,114 118,122 114,129 108,135 101,139 94,141 85,142 76))
radius_line | LINESTRING(97 76,62 105)
Figure
Geometry figure for visual-st-maximuminscribedcircle-01

Maximum inscribed circle of a MultiLineString.

Code
WITH mic AS (
  SELECT * FROM ST_MaximumInscribedCircle(
    'MULTILINESTRING((100 40,10 150),(10 160,100 150),(190 150,80 40))')
)
SELECT round(radius::numeric, 3) AS radius,
       ST_SnapToGrid(center, 1) AS center,
       ST_SnapToGrid(nearest, 1) AS nearest,
       ST_SnapToGrid(ST_Buffer(center, radius), 1) AS circle,
       ST_SnapToGrid(ST_MakeLine(center, nearest), 1) AS radius_line
FROM mic;
Вивід растрових зображень
-[ RECORD 1 ]-----
radius      | 39.924
center      | POINT(94 110)
nearest     | POINT(63 85)
circle      | POLYGON((134 110,133 103,131 95,127 88,122 82,116 77,109 74,102 71,94 71,86 71,79 74,72 77,66 82,61 88,57 95,55 103,54 110,55 118,57 126,61 133,66 139,72 144,79 147,86 150,94 150,102 150,109 147,116 144,122 139,127 133,131 126,133 118,134 110))
radius_line | LINESTRING(94 110,63 85)
Figure
Geometry figure for visual-st-maximuminscribedcircle-02

Назва

ST_LargestEmptyCircle — Обчислює найбільше коло, яке не перетинається з геометрією.

Короткий огляд

(geometry, geometry, double precision) ST_LargestEmptyCircle(geometry geom, double precision tolerance=0.0, geometry boundary=POINT EMPTY);

Опис

Знаходить найбільше коло, яке не перетинається з набором точкових і лінійних перешкод. (Полігональні геометрії можуть бути включені як перешкоди, але використовуються тільки їх межі.) Центр кола обмежений межами полігональної фігури, яка за замовчуванням є опуклою оболонкою вхідної геометрії. Центр кола — це точка всередині межі, яка має найбільшу відстань від перешкод. Саме коло задається центром і найближчою точкою, що лежить на перешкоді, яка визначає радіус кола.

Центр кола визначається з заданою точністю, яка визначається допуском на відстань, за допомогою ітераційного алгоритму. Якщо точність відстані не вказана, використовується розумне значення за замовчуванням.

Повертає запис із полями:

  • center - центр кола

  • nearest - точка на геометрії, найближча до центру

  • radius - радіус кола

Щоб знайти найбільше порожнє коло всередині полігону, див. ST_MaximumInscribedCircle.

Доступність: 3.4.0.

Потрібна версія GEOS >= 3.9.0.

Приклади

Largest empty circle within a set of lines.

Code
WITH obstacles(geom) AS (VALUES ('MULTILINESTRING (
        (10 100,60 180,130 150,190 160),
        (20 50,70 70,90 20,110 40),
        (160 30,100 100,180 100))'::geometry)),
circle AS (
  SELECT result.*
  FROM obstacles
  CROSS JOIN LATERAL ST_LargestEmptyCircle(obstacles.geom) AS result
)
SELECT round(radius::numeric, 6) AS radius,
       ST_SnapToGrid(center, 1) AS center,
       ST_SnapToGrid(nearest, 1) AS nearest,
       ST_SnapToGrid(ST_MakeLine(center, nearest), 1) AS radius_line,
       ST_SnapToGrid(ST_Buffer(center, radius), 1) AS circle
FROM circle;
Вивід растрових зображень
-[ RECORD 1 ]-----
radius      | 39.260545
center      | POINT(62 108)
nearest     | POINT(70 70)
radius_line | LINESTRING(62 108,70 70)
circle      | POLYGON((101 108,100 101,98 93,94 87,89 81,83 76,77 72,69 70,62 69,54 70,47 72,40 76,34 81,29 87,25 93,23 101,22 108,23 116,25 123,29 130,34 136,40 141,47 145,54 147,62 148,69 147,77 145,83 141,89 136,94 130,98 123,100 116,101 108))
Figure
Geometry figure for visual-st-largestemptycircle-01

Largest empty circle within a set of points, constrained to lie in a polygon. The constraint polygon boundary is included both as an obstacle and as the constraint for the circle center.

Code
WITH inputs(points, boundary) AS (VALUES (
  'MULTIPOINT ((70 50),(60 130),(130 150),(80 90))'::geometry,
  'POLYGON ((90 190,10 100,60 10,190 40,120 100,190 180,90 190))'::geometry
)),
circle AS (
  SELECT result.*
  FROM inputs
  CROSS JOIN LATERAL ST_LargestEmptyCircle(
    ST_Collect(points, boundary), 0, boundary
  ) AS result
)
SELECT round(radius::numeric, 6) AS radius,
       ST_SnapToGrid(center, 1) AS center,
       ST_SnapToGrid(nearest, 1) AS nearest,
       ST_SnapToGrid(ST_MakeLine(center, nearest), 1) AS radius_line,
       ST_SnapToGrid(ST_Buffer(center, radius), 1) AS circle
FROM circle;
Вивід растрових зображень
-[ RECORD 1 ]-----
radius      | 19.903876
center      | POINT(97 100)
nearest     | POINT(80 90)
radius_line | LINESTRING(97 100,80 90)
circle      | POLYGON((117 100,117 96,116 92,114 89,111 86,108 83,105 82,101 80,97 80,93 80,90 82,86 83,83 86,81 89,79 92,78 96,77 100,78 104,79 108,81 111,83 114,86 116,90 118,93 119,97 120,101 119,105 118,108 116,111 114,114 111,116 108,117 104,117 100))
Figure
Geometry figure for visual-st-largestemptycircle-02

Див. також

ST_MinimumBoundingRadius


Назва

ST_MinimumBoundingCircle — Повертає найменший полігон кола, що містить геометрію.

Короткий огляд

geometry ST_MinimumBoundingCircle(geometry geomA, integer num_segs_per_qt_circ=48);

Опис

Повертає найменший полігон кола, що містить геометрію.

[Примітка]

Обмежувальне коло наближається полігоном із 48 сегментами на чверть кола за замовчуванням. Оскільки полігон є наближенням мінімального обмежувального кола, деякі точки в геометрії вхідних даних можуть не міститися в полігоні. Наближення можна поліпшити, збільшивши кількість сегментів. Для додатків, де наближення не підходить, можна використовувати ST_MinimumBoundingRadius.

Використовуйте з ST_Collect, щоб отримати мінімальне обмежуюче коло набору геометрій.

Щоб обчислити дві точки, що лежать на мінімальному колі (максимальний діаметр), використовуйте ST_LongestLine.

Відношення площі полігону до площі його мінімального обмежувального кола називається коефіцієнтом компактності Реока.

Виконується модулем GEOS.

Доступність: 1.4.0

Приклади

Code
SELECT d.disease_type,
ST_MinimumBoundingCircle(ST_Collect(d.geom)) As geom
FROM disease_obs As d
GROUP BY d.disease_type;

Minimum bounding circle of a point and linestring, using 8 segments to approximate a quarter circle.

Code
SELECT ST_MinimumBoundingCircle(ST_Collect('LINESTRING(55 75,125 150)',
ST_Point(20, 80)), 8
) As wktmbc;
Вивід растрових зображень
POLYGON((72.5 178.4024474346694,84.86920388664029 177.18418718546332,96.76306620464646 173.57622349601382,107.72451249529237 167.71720838753708,117.33230052487836 159.83230052487838,125.21720838753708 150.22451249529237,131.07622349601382 139.26306620464646,134.68418718546332 127.3692038866403,135.9024474346694 115,134.68418718546332 102.63079611335971,131.07622349601382 90.73693379535354,125.21720838753708 79.77548750470766,117.33230052487838 70.16769947512164,107.72451249529237 62.282791612462916,96.76306620464648 56.42377650398619,84.86920388664032 52.815812814536685,72.50000000000001 51.59755256533059,60.13079611335969 52.815812814536685,48.236933795353536 56.42377650398618,37.27548750470765 62.28279161246291,27.667699475121637 70.16769947512162,19.782791612462923 79.77548750470763,13.923776503986204 90.7369337953535,10.315812814536692 102.63079611335968,9.097552565330588 114.99999999999999,10.315812814536685 127.3692038866403,13.923776503986197 139.2630662046465,19.78279161246291 150.22451249529234,27.667699475121623 159.83230052487835,37.275487504707634 167.71720838753708,48.236933795353494 173.5762234960138,60.13079611335967 177.18418718546332,72.5 178.4024474346694))
Figure
Geometry figure for visual-st-minimumboundingcircle-01

Назва

ST_MinimumBoundingRadius — Повертає центр і радіус найменшого кола, що містить геометрію.

Короткий огляд

(geometry, double precision) ST_MinimumBoundingRadius(geometry geom);

Опис

Обчислює центр і радіус найменшого кола, що містить геометрію. Повертає запис із полями:

  • center - центр кола

  • radius - радіус кола

Використовуйте з ST_Collect, щоб отримати мінімальне обмежуюче коло набору геометрій.

Щоб обчислити дві точки, що лежать на мінімальному колі (максимальний діаметр), використовуйте ST_LongestLine.

Доступність - 2.3.0

Приклади

Code
SELECT center, radius FROM ST_MinimumBoundingRadius('POLYGON((26426 65078,26531 65242,26075 65136,26096 65427,26426 65078))');
Вивід растрових зображень
st_astext                 |      radius
------------------------------------------+------------------
 POINT(26284.84180271327 65267.114509082545) | 247.43604559140655
Figure
Geometry figure for visual-st-minimumboundingradius-01

Назва

ST_OrientedEnvelope — Повертає прямокутник з мінімальною площею, що містить геометрію.

Короткий огляд

geometry ST_OrientedEnvelope( geometry geom );

Опис

Повертає прямокутник з мінімальною площею, що охоплює геометрію. Зверніть увагу, що може існувати більше одного такого прямокутника. У разі вироджених вхідних даних може повертати Point або LineString.

Доступність: 2.5.0.

Вимагає GEOS >= 3.6.0.

Приклади

Code
SELECT ST_OrientedEnvelope('MULTIPOINT ((0 0),(-1 -1),(3 2))');
Вивід растрових зображень
POLYGON((3 2,-1 -1,-1.12 -0.84,2.88 2.16,3 2))
Figure
Geometry figure for visual-st-orientedenvelope-01

Oriented envelope of a Point and LineString.

Code
SELECT ST_OrientedEnvelope(ST_Collect('LINESTRING(55 75,125 150)',
                ST_Point(20, 80))
                ) As wktenv;
Вивід растрових зображень
POLYGON((20 80,125 150,138.0769230769241 130.38461538461573,33.07692307692291 60.384615384615195,20 80))
Figure
Geometry figure for visual-st-orientedenvelope-02

Назва

ST_OffsetCurve — Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії.

Короткий огляд

geometry ST_OffsetCurve(geometry line, float signed_distance, text style_parameters='');

Опис

Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії. Всі точки повернутих геометрій знаходяться не далі, ніж на заданій відстані від вхідної геометрії. Корисно для обчислення паралельних ліній відносно центральної лінії.

Для позитивної відстані зміщення знаходиться з лівого боку від лінії введення і зберігає той самий напрямок. Для негативної відстані воно знаходиться з правого боку і має протилежний напрямок.

Одиниці відстані вимірюються в одиницях просторової системи координат.

Зверніть увагу, що результат може бути MULTILINESTRING або EMPTY для деяких вхідних геометрій із "фігурою пазла".

Додатковий третій параметр дозволяє вказати список пар ключ=значення, розділених пробілами, для налаштування операцій наступним чином:

  • 'quad_segs=#' : кількість сегментів, що використовуються для апроксимації чверті кола (за замовчуванням 8).

  • 'join=round|mitre|bevel' : стиль з'єднання (за замовчуванням "round"). 'miter' також приймається як синонім 'mitre'.

  • 'mitre_limit=#.#' : обмеження коефіцієнта mitre (впливає тільки на стиль mitred). 'miter_limit' також приймається як синонім 'mitre_limit'.

Виконується модулем GEOS.

У GEOS 3.11 поведінка змінилася, тому криві зміщення тепер мають той самий напрямок, що й лінія введення, як для позитивних, так і для негативних зміщень.

Доступність: 2.0

Покращено: 2.5 — додано підтримку GEOMETRYCOLLECTION та MULTILINESTRING

[Примітка]

Ця функція ігнорує вимір Z. Вона завжди дає двовимірний результат, навіть якщо використовується для тривимірної геометрії.

Приклади

Compute an open buffer around roads.

Code
SELECT ST_Union(
 ST_OffsetCurve(f.geom, f.width/2, 'quad_segs=4 join=round'),
 ST_OffsetCurve(f.geom, -f.width/2, 'quad_segs=4 join=round')
) as track
FROM someroadstable;

                

Offset 15 units with quad_segs=4 join=round.

Code
SELECT ST_OffsetCurve(
    ST_GeomFromText('LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)'),
    15, 'quad_segs=4 join=round');
Вивід растрових зображень
LINESTRING(164 1,18 1,15.073645169758077 1.288220793951544,
    12.259748514523654 2.141807012330698,9.66644650470597 3.527955815461818,
    7.393398282201788 5.393398282201788,5.393398282201788 7.393398282201788,
    3.527955815461818 9.66644650470597,2.141807012330696 12.259748514523654,
    1.288220793951544 15.073645169758075,1 18,1 195)
Figure
Geometry figure for visual-st-offsetcurve-01

Offset -15 units with quad_segs=4 join=round.

Code
SELECT ST_OffsetCurve(
    geom,
    -15,
    'quad_segs=4 join=round') As notsocurvy
    FROM ST_GeomFromText('LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
Вивід растрових зображень
LINESTRING(164 31,31 31,31 195)
Figure
Geometry figure for visual-st-offsetcurve-02

Apply two negative offsets to obtain a smoother curve; the distances combine to -45 units.

Code
SELECT ST_OffsetCurve(
    ST_OffsetCurve(
        geom,
        -30,
        'quad_segs=4 join=round'),
    -15,
    'quad_segs=4 join=round') As morecurvy
    FROM ST_GeomFromText('LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
Вивід растрових зображень
LINESTRING(164 61,61 61,61 195)
Figure
Geometry figure for visual-st-offsetcurve-03

Collect the positive offset and the double-offset to produce parallel curves.

Code
SELECT ST_Collect(
    ST_OffsetCurve(geom, 15, 'quad_segs=4 join=round'),
    ST_OffsetCurve(
        ST_OffsetCurve(
            geom,
            -30,
            'quad_segs=4 join=round'),
        -15,
        'quad_segs=4 join=round')
) As parallel_curves
    FROM ST_GeomFromText('LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
Вивід растрових зображень
MULTILINESTRING((164 1,18 1,15.073645169758077 1.288220793951544,
12.259748514523654 2.141807012330698,9.66644650470597 3.527955815461818,
7.393398282201788 5.393398282201788,5.393398282201788 7.393398282201788,
3.527955815461818 9.66644650470597,2.141807012330696 12.259748514523654,
1.288220793951544 15.073645169758075,1 18,1 195),(164 61,61 61,61 195))
Figure
Geometry figure for visual-st-offsetcurve-04

Offset 15 units with a bevel join.

Code
SELECT ST_OffsetCurve(
    ST_GeomFromText('LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)'),
        15, 'quad_segs=4 join=bevel');
Вивід растрових зображень
LINESTRING(164 1,18 1,7.393398282201788 5.393398282201788,
    5.393398282201788 7.393398282201788,1 18,1 195)
Figure
Geometry figure for visual-st-offsetcurve-05

Collect offsets on both sides using a mitre join and a mitre limit of 2.2.

Code
SELECT ST_Collect(
    ST_OffsetCurve(geom, 15, 'quad_segs=4 join=mitre mitre_limit=2.2'),
    ST_OffsetCurve(geom, -15, 'quad_segs=4 join=mitre mitre_limit=2.2')
    )
    FROM ST_GeomFromText('LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
Вивід растрових зображень
MULTILINESTRING((164 1,11.786796564403577 1,1 11.786796564403577,1 195),
    (164 31,31 31,31 195))
Figure
Geometry figure for visual-st-offsetcurve-06

Див. також

ST_Buffer


Назва

ST_PointOnSurface — Обчислює точку, яка гарантовано лежить у полігоні або на геометрії.

Короткий огляд

geometry ST_PointOnSurface(geometry g1);

Опис

Повертає POINT, який гарантовано лежить всередині поверхні (полігон, MULTIPOLYGON та CURVEPOLYGON). У PostGIS ця функція також працює з лінійними та точковими геометріями.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.14.2 // s3.2.18.2

This method implements the SQL/MM specification. SQL-MM 3: 8.1.5, 9.5.6. Специфікації визначають ST_PointOnSurface тільки для геометрії поверхні. PostGIS розширює функцію для підтримки всіх поширених типів геометрії. Інші бази даних (Oracle, DB2, ArcSDE) підтримують цю функцію, здається, тільки для поверхонь. SQL Server 2008 підтримує всі поширені типи геометрії.

This function supports 3d and will not drop the z-index.

Приклади

Point on surface of a MultiPoint.

Code
SELECT ST_PointOnSurface(
  'MULTIPOINT (8 24,10 92,12 154,17 68,28 10,29 52,29 84,55 50,56 24,131 14,160 180,189 180)');
Вивід растрових зображень
POINT(55 50)
Figure
Geometry figure for st-pointonsurface-multipoint

Point on surface of a LineString.

Code
SELECT ST_PointOnSurface(
  'LINESTRING (190 160,10 190,40 90,20 70,10 10,30 40,30 10,110 40,70 10,110 10,140 40,140 10,160 30,180 10)');
Вивід растрових зображень
POINT(40 90)
Figure
Geometry figure for visual-st-pointonsurface-02

Point on surface of a Polygon.

Code
SELECT ST_PointOnSurface(
  'POLYGON ((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190))');
Вивід растрових зображень
POINT(35 80)
Figure
Geometry figure for visual-st-pointonsurface-03

Point on surface of the highest-dimension components of a GeometryCollection.

Code
SELECT ST_PointOnSurface(
  'GEOMETRYCOLLECTION (POLYGON ((190 170,180 100,80 140,80 160,130 160,110 180,110 190,180 180,190 170)),
    LINESTRING (80 120,120 20,140 70,150 30,180 50,190 10),
    MULTIPOINT (19 150,22 49,30 13,32 101,45 35,67 88,75 16))');
Вивід растрових зображень
POINT(133.571 150)
Figure
Geometry figure for visual-st-pointonsurface-04
Code
SELECT ST_PointOnSurface('LINESTRING(0 5 1,0 0 1,0 10 2)');
Вивід растрових зображень
st_asewkt
--------------
 POINT(0 0 1)
(1 row)
Figure
Geometry figure for visual-st-pointonsurface-05

Приклад: Результат ST_PointOnSurface гарантовано лежить всередині полігонів, тоді як точка, обчислена за допомогою ST_Centroid, може лежати поза ними.

Code
SELECT ST_PointOnSurface(geom) AS pt_on_surf, ST_Centroid(geom) AS centroid
    FROM (SELECT 'POLYGON ((130 120,120 190,30 140,50 20,190 20,
                      170 100,90 60,90 130,130 120))'::geometry AS geom) AS t;
Вивід растрових зображень
pt_on_surf    |                  centroid
-----------------+---------------------------------------------
 POINT(62.5 110) | POINT(100.18264840182648 85.11415525114155)
Figure
Geometry figure for visual-st-pointonsurface-06

Назва

ST_Polygonize — Обчислює сукупність полігонів, утворених з ліній набору геометрій.

Короткий огляд

geometry ST_Polygonize(geometry set geomfield);

geometry ST_Polygonize(geometry[] geom_array);

Опис

Створює GeometryCollection, що містить полігони, утворені лініями набору геометрій. Якщо вхідні лінії не утворюють полігонів, повертається порожній GeometryCollection.

Ця функція створює полігони, що охоплюють усі обмежені області. Якщо результат повинен утворювати дійсну полігональну геометрію, використовуйте ST_BuildArea, щоб запобігти заповненню отворів.

[Примітка]

Щоб ця функція працювала належним чином, вхідні лінії повинні бути правильно вузлові. Щоб переконатися, що вхідні дані є вузловими, перед полігоном використовуйте ST_Node на вхідній геометрії.

[Примітка]

GeometryCollections може бути складно обробляти за допомогою зовнішніх інструментів. Використовуйте ST_Dump, щоб перетворити полігонізований результат на окремі полігони.

Виконується модулем GEOS.

Доступність: 1.0.0RC1

Приклади

Polygonize a set of input lines.

Code
WITH data(geom) AS (
  VALUES
    ('LINESTRING (180 40,30 20,20 90)'::geometry),
    ('LINESTRING (180 40,160 160)'::geometry),
    ('LINESTRING (80 60,120 130,150 80)'::geometry),
    ('LINESTRING (80 60,150 80)'::geometry),
    ('LINESTRING (20 90,70 70,80 130)'::geometry),
    ('LINESTRING (80 130,160 160)'::geometry),
    ('LINESTRING (20 90,20 160,70 190)'::geometry),
    ('LINESTRING (70 190,80 130)'::geometry),
    ('LINESTRING (70 190,160 160)'::geometry)
)
SELECT ST_Polygonize(geom)
FROM data;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((180 40,30 20,20 90,70 70,80 130,160 160,180 40),(150 80,120 130,80 60,150 80)), POLYGON((80 60,120 130,150 80,80 60)), POLYGON((80 130,70 70,20 90,20 160,70 190,80 130)), POLYGON((160 160,80 130,70 190,160 160)))
Figure
Geometry figure for visual-st-polygonize-01

Polygonizing two polygon coverages and transferring attributes to the resultants:

Code
WITH poly_a(id, geom) AS (VALUES
  ('a1', 'POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))'::geometry),
  ('a2', 'POLYGON ((4 0, 8 0, 8 4, 4 4, 4 0))'::geometry)
),
poly_b(id, geom) AS (VALUES
  ('b1', 'POLYGON ((0 0, 8 0, 8 2, 0 2, 0 0))'::geometry),
  ('b2', 'POLYGON ((0 2, 8 2, 8 4, 0 4, 0 2))'::geometry)
),
lines AS (
  SELECT ST_Boundary(geom) AS geom FROM poly_a
  UNION ALL
  SELECT ST_Boundary(geom) FROM poly_b
),
noded AS (
  SELECT ST_UnaryUnion(ST_Collect(geom)) AS geom FROM lines
),
cells AS (
  SELECT (ST_Dump(ST_Polygonize(geom))).geom AS geom FROM noded
)
SELECT a.id AS id_a,
       b.id AS id_b,
       c.geom AS geom
FROM cells AS c
LEFT JOIN poly_a AS a ON ST_Within(ST_PointOnSurface(c.geom), a.geom)
LEFT JOIN poly_b AS b ON ST_Within(ST_PointOnSurface(c.geom), b.geom)
WHERE a.id IS NOT NULL OR b.id IS NOT NULL
ORDER BY id_a, id_b;
Вивід растрових зображень
id_a | id_b |              geom
------+------+--------------------------------
 a1   | b1   | POLYGON((4 0,0 0,0 2,4 2,4 0))
 a1   | b2   | POLYGON((4 4,4 2,0 2,0 4,4 4))
 a2   | b1   | POLYGON((4 0,4 2,8 2,8 0,4 0))
 a2   | b2   | POLYGON((4 2,4 4,8 4,8 2,4 2))
Figure
Geometry figure for visual-st-polygonize-02

Polygonizing таблиці лінійних рядків:

Code
SELECT ST_Polygonize(geom_4269) As geomtextrep
FROM (SELECT geom_4269 FROM ma.suffolk_edges) As foo;
Вивід растрових зображень
geomtextrep
-------------
 SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,-71.040878 42.285678)),
 POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,-71.171794 42.354971,-71.170511 42.354855,
 -71.17112 42.354238,-71.17166 42.353675)))
(1 row)

Use ST_Dump to dump out the polygonize geoms into individual polygons.

Code
SELECT (ST_Dump(t.polycoll)).geom AS geomtextrep
FROM (SELECT ST_Polygonize(geom_4269) AS polycoll
    FROM (SELECT geom_4269 FROM ma.suffolk_edges)
        As foo) AS t;
Вивід растрових зображень
geomtextrep
-------------
 SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,
-71.040878 42.285678))
 SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,
-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 42.353675))
(2 rows)

Назва

ST_ReducePrecision — Повертає дійсну геометрію з точками, округленими до допуску сітки.

Короткий огляд

geometry ST_ReducePrecision(geometry g, float8 gridsize);

Опис

Повертає дійсну геометрію, в якій всі точки округлені до заданого допуску сітки, а об'єкти, що не відповідають допуску, видалені.

На відміну від ST_SnapToGrid, повернута геометрія буде дійсною, без самоперетинів кілець або згорнутих компонентів.

Зниження точності може бути використано для:

  • відповідність координат точності даних

  • зменшити кількість координат, необхідних для представлення геометрії

  • забезпечити правильний вивід геометрії у формати, що використовують нижчу точність (наприклад, текстові формати, такі як WKT, GeoJSON або KML, коли кількість десяткових знаків у виводі обмежена).

  • експорт дійсної геометрії в системи, які використовують нижчу або обмежену точність (наприклад, SDE, значення толерантності Oracle)

Доступність: 3.1.0.

Потрібна версія GEOS >= 3.9.0.

Приклади

Code
SELECT ST_ReducePrecision('POINT(1.412 19.323)', 0.1);
Вивід растрових зображень
POINT(1.4 19.3)
Figure
Geometry figure for visual-st-reduceprecision-01
Code
SELECT ST_ReducePrecision('POINT(1.412 19.323)', 1.0);
Вивід растрових зображень
POINT(1 19)
Figure
Geometry figure for visual-st-reduceprecision-02
Code
SELECT ST_ReducePrecision('POINT(1.412 19.323)', 10);
Вивід растрових зображень
POINT(0 20)
Figure
Geometry figure for visual-st-reduceprecision-03

Зниження точності може зменшити кількість вершин

Code
SELECT ST_ReducePrecision('LINESTRING (10 10,19.6 30.1,20 30,20.3 30,40 40)', 1);
Вивід растрових зображень
LINESTRING (10 10, 20 30, 40 40)
Figure
Geometry figure for visual-st-reduceprecision-04

Точне скорочення розділяє полігони, якщо це необхідно для забезпечення валідності

Code
WITH data(geom) AS (
  VALUES ('POLYGON ((10 10,60 60.1,70 30,40 40,50 10,10 10))'::geometry)
)
SELECT geom AS input,
       ST_ReducePrecision(geom, 10) AS reduced
FROM data;
Вивід растрових зображень
-[ RECORD 1 ]------------------------------------------------
input   | POLYGON((10 10,60 60.1,70 30,40 40,50 10,10 10))
reduced | MULTIPOLYGON(((10 10,40 40,50 10,10 10)),((40 40,60 60,70 30,40 40)))
Figure
Geometry figure for visual-st-reduceprecision-05

Назва

ST_SharedPaths — Повертає колекцію, що містить шляхи, спільні для двох вхідних ліній/мультиліній.

Короткий огляд

geometry ST_SharedPaths(geometry lineal1, geometry lineal2);

Опис

Повертає колекцію, що містить шляхи, спільні для двох вхідних геометрій. Ті, що йдуть в одному напрямку, знаходяться в першому елементі колекції, ті, що йдуть в протилежному напрямку, знаходяться в другому елементі. Самі шляхи задаються в напрямку першої геометрії.

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади: Пошук спільних шляхів

Adjacent shared path segments may be returned as separate or merged LineStrings depending on the GEOS version.

Find the shared paths of a MultiLineString and a LineString.

Code
SELECT ST_SharedPaths(ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),
      (51 150,101 150,76 175,51 150))'),
   ST_GeomFromText('LINESTRING(151 100,126 156.25,126 125,101 150,76 175)')
   )
Вивід растрових зображень
GEOMETRYCOLLECTION(MULTILINESTRING((126 156.25,126 125),
(101 150,76 175)),MULTILINESTRING EMPTY)
Figure
Geometry figure for visual-st-sharedpaths-01

Flip the LineString orientation to return the same paths in the opposite-direction member.

Code
SELECT ST_SharedPaths(ST_GeomFromText('LINESTRING(76 175,101 150,126 125,126 156.25,151 100)'),
   ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),
       (51 150,101 150,76 175,51 150))')
    )
Вивід растрових зображень
GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,
MULTILINESTRING((76 175,101 150),(126 125,126 156.25)))
Figure
Geometry figure for visual-st-sharedpaths-02

Назва

ST_Simplify — Повертає спрощене представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.

Короткий огляд

geometry ST_Simplify(geometry geom, float tolerance);

geometry ST_Simplify(geometry geom, float tolerance, boolean preserveCollapsed);

Опис

Обчислює спрощене представлення геометрії за допомогою алгоритму Дугласа-Пьюкера. Спрощення tolerance є значенням відстані в одиницях вхідної SRS. Спрощення видаляє вершини, які знаходяться в межах відстані толерантності спрощеної лінії. Результат може бути недійсним, навіть якщо вхідні дані є дійсними.

Функція може бути викликана з будь-яким типом геометрії (включаючи GeometryCollections), але спрощуються тільки елементи лінії та полігону. Кінцеві точки лінійної геометрії зберігаються.

Прапор preserveCollapsed зберігає невеликі геометрії, які в іншому випадку були б видалені з урахуванням заданого допуску. Наприклад, якщо лінія довжиною 1 м спрощується з допуском 10 м, то при значенні preserveCollapsed лінія не зникне. Цей прапор корисний для цілей візуалізації, щоб запобігти зникненню дуже невеликих об'єктів з карти.

[Примітка]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple), топологія може не зберегтися, а полігональні результати можуть бути недійсними (див. ST_IsValid). Використовуйте ST_SimplifyPreserveTopology, щоб зберегти топологію та забезпечити дійсність.

[Примітка]

Ця функція не зберігає межі, спільні для полігонів. Якщо це необхідно, використовуйте ST_CoverageSimplify.

Доступність: 1.2.2

Приклади

A circle simplified with a medium tolerance becomes an octagon, and with a large tolerance disappears.

Code
SELECT ST_NPoints(geom) AS np_before,
     ST_NPoints(ST_Simplify(geom, 0.1)) AS np01_notbadcircle,
     ST_NPoints(ST_Simplify(geom, 0.5)) AS np05_notquitecircle,
     ST_NPoints(ST_Simplify(geom, 1)) AS np1_octagon,
     ST_NPoints(ST_Simplify(geom, 10)) AS np10_gone,
     (ST_Simplify(geom, 100) is null) AS  np100_geometrygoesaway
FROM (SELECT ST_Buffer('POINT(1 3)', 10, 12) As geom) AS t;
Вивід растрових зображень
-[ RECORD 1 ]------------
np_before                | 49
np01_notbadcircle        | 33
np05_notquitecircle      | 17
np1_octagon              | 9
np10_gone                | null
np100_geometrygoesaway   | t

Спрощення набору ліній. Після спрощення лінії можуть перетинатися.

Code
SELECT ST_Simplify('MULTILINESTRING ((20 180,20 150,50 150,50 100,110 150,150 140,170 120),(20 10,80 30,90 120),(90 120,130 130),(130 130,130 70,160 40,180 60,180 90,140 80),(50 40,70 40,80 70,70 60,60 60,50 50,50 40))'::geometry,
40);
Вивід растрових зображень
MULTILINESTRING((20 180,50 100,170 120),(20 10,90 120),(90 120,130 130),(130 130,160 40,180 90,140 80),(50 40,80 70,50 40))
Figure
Geometry figure for visual-st-simplify-02

Спрощення багатокутника. Результати багатокутника можуть бути недійсними.

Code
SELECT ST_Simplify('MULTIPOLYGON (((90 110,80 180,50 160,10 170,10 140,20 110,90 110)),((40 80,100 100,120 160,170 180,190 70,140 10,110 40,60 40,40 80),(180 70,170 110,142.5 128.5,128.5 77.5,90 60,180 70)))'::geometry,
40);
Вивід растрових зображень
MULTIPOLYGON(((90 110,80 180,10 170,20 110,90 110)),((40 80,170 180,140 10,40 80),(180 70,142.5 128.5,90 60,180 70)))
Figure
Geometry figure for visual-st-simplify-03

Назва

ST_SimplifyPreserveTopology — Повертає спрощене та дійсне представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.

Короткий огляд

geometry ST_SimplifyPreserveTopology(geometry geom, float tolerance);

Опис

Обчислює спрощене представлення геометрії за допомогою варіанту алгоритму Дугласа-Пьюкера, який обмежує спрощення, щоб забезпечити топологію результату, ідентичну топології вхідних даних. Допуск спрощення tolerance є значенням відстані в одиницях вхідної SRS. Спрощення видаляє вершини, які знаходяться в межах допуску відстані спрощеної лінії, за умови збереження топології. Результат буде дійсним і простим, якщо вхідні дані є такими.

Функцію можна викликати з будь-яким типом геометрії (включаючи GeometryCollections), але спрощуються тільки елементи лінії та полігону. Для полігональних вхідних даних результат матиме таку саму кількість кілець (оболонок і отворів), і кільця не перетинатимуться. Кінцеві точки кілець можуть бути спрощені. Для лінійних вхідних даних результат матиме таку саму кількість ліній, і лінії не перетинатимуться, якщо вони не перетиналися в оригінальній геометрії. Кінцеві точки лінійної геометрії зберігаються.

[Примітка]

Ця функція не зберігає межі, спільні для полігонів. Якщо це необхідно, використовуйте ST_CoverageSimplify.

Виконується модулем GEOS.

Доступність: 1.3.3

Приклади

For the same example as ST_Simplify, ST_SimplifyPreserveTopology prevents the geometry from disappearing.

Code
SELECT  ST_NPoints(geom) AS np_before,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 0.1)) AS np01_notbadcircle,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 0.5)) AS np05_notquitecircle,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 1))   AS np1_octagon,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 10))  AS np10_minimal,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 100)) AS np100_minimal
FROM (SELECT ST_Buffer('POINT(1 3)', 10, 12) AS geom) AS t;
Вивід растрових зображень
np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_minimal | np100_minimal
-----------+-------------------+---------------------+-------------+--------------+---------------
        49 |                33 |                  17 |           9 |            4 |             4

Спрощення набору ліній із збереженням топології ліній, що не перетинаються.

Code
SELECT ST_SimplifyPreserveTopology('MULTILINESTRING ((20 180,20 150,50 150,50 100,110 150,150 140,170 120),(20 10,80 30,90 120),(90 120,130 130),(130 130,130 70,160 40,180 60,180 90,140 80),(50 40,70 40,80 70,70 60,60 60,50 50,50 40))'::geometry,
40);
Вивід растрових зображень
MULTILINESTRING((20 180,50 100,110 150,170 120),(20 10,80 30,90 120),(90 120,130 130),(130 130,130 70,160 40,180 90,140 80),(50 40,70 40,80 70,60 60,50 40))
Figure
Geometry figure for visual-st-simplifypreservetopology-02

Спрощення мультиполігону із збереженням топології оболонок і отворів.

Code
SELECT ST_SimplifyPreserveTopology('MULTIPOLYGON (((90 110,80 180,50 160,10 170,10 140,20 110,90 110)),((40 80,100 100,120 160,170 180,190 70,140 10,110 40,60 40,40 80),(180 70,170 110,142.5 128.5,128.5 77.5,90 60,180 70)))'::geometry,
40);
Вивід растрових зображень
MULTIPOLYGON(((90 110,80 180,10 170,20 110,90 110)),((40 80,100 100,170 180,190 70,140 10,40 80),(180 70,142.5 128.5,90 60,180 70)))
Figure
Geometry figure for visual-st-simplifypreservetopology-03

Назва

ST_SimplifyPolygonHull — Обчислює спрощену зовнішню або внутрішню оболонку полігональної геометрії із збереженням топології.

Короткий огляд

geometry ST_SimplifyPolygonHull(geometry param_geom, float vertex_fraction, boolean is_outer = true);

Опис

Обчислює спрощену зовнішню або внутрішню оболонку полігональної геометрії, що зберігає топологію. Зовнішня оболонка повністю покриває вхідну геометрію. Внутрішня оболонка повністю покривається вхідною геометрією. Результатом є полігональна геометрія, утворена підмножиною вхідних вершин. Мультиполігони та отвори обробляються і дають результат з такою ж структурою, як і вхідні дані.

Зменшення кількості вершин контролюється параметром vertex_fraction, який є числом в діапазоні від 0 до 1. Менші значення дають простіші результати, з меншою кількістю вершин і меншою увігнутістю. Як для зовнішніх, так і для внутрішніх оболонок частка вершин 1,0 дає вихідну геометрію. Для зовнішніх оболонок значення 0,0 дає опуклу оболонку (для одного полігона); для внутрішніх оболонок воно дає трикутник.

Процес спрощення працює шляхом поступового видалення увігнутих кутів, які містять найменшу площу, до досягнення цільового значення кількості вершин. Це запобігає перетину ребер, тому результатом завжди є дійсна полігональна геометрія.

Щоб отримати кращі результати з геометріями, що містять відносно довгі відрізки ліній, може знадобитися "сегментувати" вхідні дані, як показано нижче.

Виконується модулем GEOS.

Доступність: 3.3.0.

Вимагає GEOS >= 3.11.0.

Приклади

Outer hull of a Polygon.

Code
SELECT ST_SimplifyPolygonHull(
  'POLYGON ((131 158,136 163,161 165,173 156,179 148,169 140,186 144,190 137,185 131,174 128,174 124,166 119,158 121,158 115,165 107,161 97,166 88,166 79,158 57,145 57,112 53,111 47,93 43,90 48,88 40,80 39,68 32,51 33,40 31,39 34,49 38,34 38,25 34,28 39,36 40,44 46,24 41,17 41,14 46,19 50,33 54,21 55,13 52,11 57,22 60,34 59,41 68,75 72,62 77,56 70,46 72,31 69,46 76,52 82,47 84,56 90,66 90,64 94,56 91,33 97,36 100,23 100,22 107,29 106,31 112,46 116,36 118,28 131,53 132,59 127,62 131,76 130,80 135,89 137,87 143,73 145,80 150,88 150,85 157,99 162,116 158,115 165,123 165,122 170,134 164,131 158))'::geometry,
  0.3
);
Вивід растрових зображень
POLYGON((161 165,173 156,186 144,190 137,185 131,174 124,166 119,166 79,158 57,68 32,40 31,25 34,17 41,14 46,11 57,56 91,33 97,23 100,22 107,28 131,80 135,73 145,85 157,99 162,122 170,161 165))
Figure
Geometry figure for visual-st-simplifypolygonhull-01

Inner hull of a Polygon.

Code
SELECT ST_SimplifyPolygonHull(
  'POLYGON ((131 158,136 163,161 165,173 156,179 148,169 140,186 144,190 137,185 131,174 128,174 124,166 119,158 121,158 115,165 107,161 97,166 88,166 79,158 57,145 57,112 53,111 47,93 43,90 48,88 40,80 39,68 32,51 33,40 31,39 34,49 38,34 38,25 34,28 39,36 40,44 46,24 41,17 41,14 46,19 50,33 54,21 55,13 52,11 57,22 60,34 59,41 68,75 72,62 77,56 70,46 72,31 69,46 76,52 82,47 84,56 90,66 90,64 94,56 91,33 97,36 100,23 100,22 107,29 106,31 112,46 116,36 118,28 131,53 132,59 127,62 131,76 130,80 135,89 137,87 143,73 145,80 150,88 150,85 157,99 162,116 158,115 165,123 165,122 170,134 164,131 158))'::geometry,
  0.3, false
);
Вивід растрових зображень
POLYGON((131 158,116 158,99 162,89 137,76 130,59 127,28 131,46 116,36 100,64 94,75 72,41 68,33 54,68 32,90 48,112 53,145 57,158 57,161 97,158 115,158 121,190 137,169 140,179 148,161 165,131 158))
Figure
Geometry figure for visual-st-simplifypolygonhull-02

Outer hull simplification of a MultiPolygon, with segmentization.

Code
WITH letters AS (
  SELECT ST_Letters('xt') AS geom
)
SELECT geom AS input,
  ST_SimplifyPolygonHull(ST_Segmentize(geom, 2.0), 0.1) AS outer_hull
FROM letters;
Вивід растрових зображень
MULTIPOLYGON(((18.3 57.6,20.7 51,23.3 41.9,26 51,28.4 57.6,45.4 57.6,33.1 28.8,46.6 0,29.5 0,26.6 6.7,23.3 16.3,19.8 6.3,17.1 0,0 0,13.5 28.8,1.3 57.6,18.3 57.6)),((77.808 15.2,82.208 15.2,83.508 16,83.508 -0.9,82.108 -0.2,76.808 -0.2,76.108 -0.2,75.408 -0.2,74.608 -0.1,73.908 -0.1,73.208 0,72.508 0,71.808 0.1,71.108 0.2,70.408 0.3,69.708 0.5,69.008 0.6,68.408 0.9,67.708 1.1,67.008 1.4,66.408 1.7,65.708 2,65.108 2.4,64.408 2.8,63.808 3.2,63.208 3.7,62.608 4.1,62.108 4.7,61.508 5.2,61.008 5.8,60.508 6.4,60.008 7.1,59.508 7.8,59.108 8.6,58.708 9.5,58.308 10.4,57.908 11.3,57.608 12.3,57.608 42.7,52.208 42.7,51.108 41.8,51.108 58.9,52.208 57.9,57.608 57.9,57.608 74.4,56.508 75.4,74.408 75.4,73.308 74.2,73.308 57.9,81.408 57.9,82.508 58.9,82.508 41.8,81.408 42.7,73.308 42.7,73.308 17.7,73.408 17.4,73.608 17.2,73.808 16.9,74.008 16.7,74.208 16.5,74.408 16.3,74.708 16.1,75.008 15.9,75.308 15.7,75.608 15.6,76.008 15.5,76.308 15.4,76.708 15.3,77.008 15.2,77.408 15.2,77.808 15.2))) | MULTIPOLYGON(((45.4 57.6,44.631 55.8,33.869 30.6,46.6 0,29.5 0,19.8 6.3,18.45 3.15,17.1 0,0 0,10.969 23.4,9.688 37.8,2.062 55.8,1.3 57.6,45.4 57.6)),((83.508 16,83.508 -0.9,72.508 0,71.108 0.2,70.408 0.3,69.008 0.6,67.708 1.1,67.008 1.4,65.708 2,64.408 2.8,63.808 3.2,62.608 4.1,61.508 5.2,60.508 6.4,59.508 7.8,59.108 8.6,58.308 10.4,57.908 11.3,57.608 12.3,51.108 41.8,51.108 58.9,56.508 75.4,74.408 75.4,82.508 58.9,83.508 16)))
Figure
Geometry figure for visual-st-simplifypolygonhull-03

Назва

ST_SimplifyVW — Повертає спрощене представлення геометрії, використовуючи алгоритм Вісвалінгама-Вайатта

Короткий огляд

geometry ST_SimplifyVW(geometry geom, float tolerance);

Опис

Returns a simplified representation of a geometry using the Visvalingam-Whyatt algorithm. The simplification tolerance is an area value, in squared units of the input SRS. Simplification removes vertices which form "corners" with area less than the tolerance. The result may not be valid even if the input is.

Функція може бути викликана з будь-яким типом геометрії (включаючи GeometryCollections), але спрощуються тільки елементи лінії та полігону. Кінцеві точки лінійної геометрії зберігаються.

[Примітка]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple), топологія може не зберегтися, а полігональні результати можуть бути недійсними (див. ST_IsValid). Використовуйте ST_SimplifyPreserveTopology, щоб зберегти топологію та забезпечити дійсність. ST_CoverageSimplifyтакож зберігає топологію та дійсність.

This is a general-purpose simplification function. It may remove narrow polygon spikes when their effective area is below the tolerance, but it is not a dedicated spike-removal or polygon-repair operation. Use ST_IsValid to check the result and ST_MakeValid to repair invalid polygonal output if needed.

Ця функція не зберігає межі, спільні для полігонів. Якщо це необхідно, використовуйте ST_CoverageSimplify.

Ця функція обробляє 3D, і третій вимір впливатиме на результат.

Доступність: 2.2.0

Приклади

This polygon has a narrow spike whose effective area is small enough to be removed by a tolerance of 20 square units.

Code
SELECT geom AS original, ST_SimplifyVW(geom, 20) AS simplified
FROM (SELECT 'POLYGON((0 0,10 0,10 10,5.2 10,5 16,4.8 10,0 10,0 0))'::geometry AS geom) AS t;
Вивід растрових зображень
POLYGON((0 0,10 0,10 10,5.2 10,5 16,4.8 10,0 10,0 0)) | POLYGON((0 0,10 0,10 10,0 10,0 0))
Figure
Geometry figure for visual-st-simplifyvw-01

A LineString is simplified with a minimum-area tolerance of 30. For a linear simplification using ST_Simplify, a comparable tolerance would be a length in input-SRS units, so the value here is roughly that linear tolerance squared.

Code
SELECT ST_SimplifyVW(geom, 30) simplified
  FROM (SELECT 'LINESTRING(5 2,3 8,6 20,7 25,10 10)'::geometry AS geom) AS t;
Вивід растрових зображень
LINESTRING(5 2,7 25,10 10)
Figure
Geometry figure for visual-st-simplifyvw-02

Спрощення лінії.

Code
SELECT ST_SimplifyVW('LINESTRING (10 10,50 40,30 70,50 60,70 80,50 110,100 100,90 140,100 180,150 170,170 140,190 90,180 40,110 40,150 20)'::geometry,
1600);
Вивід растрових зображень
LINESTRING(10 10,100 100,100 180,150 170,190 90,150 20)
Figure
Geometry figure for visual-st-simplifyvw-03

Спрощення полігону.

Code
SELECT ST_SimplifyVW('POLYGON ((20 20,50 60,20 120,40 170,80 180,120 140,180 180,160 130,180 100,180 30,130 70,150 10,20 20))'::geometry,
1600);
Вивід растрових зображень
POLYGON((20 20,20 120,80 180,160 130,180 30,20 20))
Figure
Geometry figure for visual-st-simplifyvw-04

Назва

ST_SetEffectiveArea — Встановлює ефективну площу для кожної вершини, використовуючи алгоритм Вісвалінгама-Вайатта.

Короткий огляд

geometry ST_SetEffectiveArea(geometry geom, float threshold = 0, integer set_area = 1);

Опис

Встановлює ефективну площу для кожної вершини, використовуючи алгоритм Вісвалінгама-Вайатта. Ефективна площа зберігається як M-значення вершини. Якщо використовується опціональний параметр "threshold", буде повернуто спрощену геометрію, що містить тільки вершини з ефективною площею, більшою або рівною значенню порогу.

Ця функція може бути використана для спрощення на стороні сервера, коли вказано поріг. Інший варіант – використання порогового значення нуль. У цьому випадку буде повернуто повну геометрію з ефективними площами у вигляді M-значень, які клієнт може використовувати для дуже швидкого спрощення.

Фактично виконує операції тільки з (мульти)лініями та (мульти)полігонами, але ви можете безпечно викликати її з будь-яким типом геометрії. Оскільки спрощення відбувається на основі окремих об'єктів, ви також можете передати цій функції GeometryCollection.

[Примітка]

Зверніть увагу, що повернена геометрія може втратити свою простоту (див. ST_IsSimple)

[Примітка]

Зверніть увагу, що топологія може не зберегтися, що може призвести до недійсних геометрій. Для збереження топології використовуйте (див. ST_SimplifyPreserveTopology).

[Примітка]

Геометрія виводу втратить всю попередню інформацію в значеннях M

[Примітка]

Ця функція обробляє 3D, і третій вимір впливатиме на ефективну площу

Доступність: 2.2.0

Приклади

Обчислення ефективної площі LineString. Оскільки ми використовуємо порогове значення нуль, повертаються всі вершини вхідної геометрії.

Code
SELECT ST_SetEffectiveArea(geom) AS all_pts,
       ST_SetEffectiveArea(geom, 30) AS threshold_30
FROM (SELECT  'LINESTRING(5 2,3 8,6 20,7 25,10 10)'::geometry geom) As foo;
Вивід растрових зображень
-[ RECORD 1 ]------------------
all_pts      | LINESTRING M (5 2 3.4e+38,3 8 29,6 20 1.5,7 25 49.5,10 10 3.4e+38)
threshold_30 | LINESTRING M (5 2 3.4e+38,7 25 49.5,10 10 3.4e+38)
Figure
Geometry figure for visual-st-seteffectivearea-01

Див. також

ST_SimplifyVW


Назва

ST_TriangulatePolygon — Обчислює обмежену триангуляцію Делоне полігонів

Короткий огляд

geometry ST_TriangulatePolygon(geometry geom);

Опис

Обчислює обмежену триангуляцію Делоне для полігонів. Підтримуються отвори та мультиполігони.

"Обмежена триангуляція Делоне" полігону — це набір трикутників, утворених з вершин полігону, які точно його покривають, з максимальним сумарним внутрішнім кутом серед усіх можливих триангуляцій. Вона забезпечує "найкращу якість" триангуляції полігону.

Доступність: 3.3.0.

Вимагає GEOS >= 3.11.0.

Приклади

Тріангуляція квадрата.

Code
SELECT ST_TriangulatePolygon('POLYGON((0 0,0 1,1 1,1 0,0 0))');
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((0 0,0 1,1 1,0 0)), POLYGON((1 1,1 0,0 0,1 1)))
Figure
Geometry figure for visual-st-triangulatepolygon-01

Тріангуляція літери P.

Code
SELECT ST_TriangulatePolygon('POLYGON ((26 17,31 19,34 21,37 24,38 29,39 43,39 161,38 172,36 176,34 179,30 181,25 183,10 185,10 190,100 190,121 189,139 187,154 182,167 177,177 169,184 161,189 152,190 141,188 128,186 123,184 117,180 113,176 108,170 104,164 101,151 96,136 92,119 89,100 89,86 89,73 89,73 39,74 32,75 27,77 23,79 20,83 18,89 17,106 15,106 10,10 10,10 15,26 17),(152 147,151 152,149 157,146 162,142 166,137 169,132 172,126 175,118 177,109 179,99 180,89 180,80 179,76 178,74 176,73 171,73 100,85 99,91 99,102 99,112 100,121 102,128 104,134 107,139 110,143 114,147 118,149 123,151 128,153 141,152 147))'
);
Вивід растрових зображень
GEOMETRYCOLLECTION (POLYGON ((10 10, 10 15, 26 17, 10 10)), POLYGON ((25 183, 10 185, 10 190, 25 183)), POLYGON ((126 175, 121 189, 139 187, 126 175)), POLYGON ((137 169, 139 187, 154 182, 137 169)), POLYGON ((149 157, 167 177, 177 169, 149 157)), POLYGON ((153 141, 189 152, 190 141, 153 141)), POLYGON ((153 141, 188 128, 186 123, 153 141)), POLYGON ((186 123, 184 117, 180 113, 186 123)), POLYGON ((149 123, 176 108, 170 104, 149 123)), POLYGON ((147 118, 164 101, 151 96, 147 118)), POLYGON ((121 102, 136 92, 119 89, 121 102)), POLYGON ((85 99, 73 89, 73 100, 85 99)), POLYGON ((89 17, 106 15, 106 10, 89 17)), POLYGON ((83 18, 10 10, 26 17, 83 18)), POLYGON ((100 190, 25 183, 10 190, 100 190)), POLYGON ((121 189, 109 179, 100 190, 121 189)), POLYGON ((189 152, 152 147, 184 161, 189 152)), POLYGON ((153 141, 190 141, 188 128, 153 141)), POLYGON ((147 118, 170 104, 164 101, 147 118)), POLYGON ((139 110, 151 96, 136 92, 139 110)), POLYGON ((73 89, 85 99, 86 89, 73 89)), POLYGON ((83 18, 89 17, 106 10, 83 18)), POLYGON ((83 18, 26 17, 31 19, 83 18)), POLYGON ((100 190, 30 181, 25 183, 100 190)), POLYGON ((189 152, 153 141, 152 147, 189 152)), POLYGON ((176 108, 151 128, 180 113, 176 108)), POLYGON ((91 99, 86 89, 85 99, 91 99)), POLYGON ((10 10, 83 18, 106 10, 10 10)), POLYGON ((76 178, 100 190, 80 179, 76 178)), POLYGON ((86 89, 91 99, 100 89, 86 89)), POLYGON ((79 20, 83 18, 31 19, 79 20)), POLYGON ((102 99, 100 89, 91 99, 102 99)), POLYGON ((34 21, 79 20, 31 19, 34 21)), POLYGON ((112 100, 100 89, 102 99, 112 100)), POLYGON ((37 24, 79 20, 34 21, 37 24)), POLYGON ((100 89, 112 100, 119 89, 100 89)), POLYGON ((79 20, 37 24, 77 23, 79 20)), POLYGON ((119 89, 112 100, 121 102, 119 89)), POLYGON ((77 23, 37 24, 75 27, 77 23)), POLYGON ((136 92, 121 102, 128 104, 136 92)), POLYGON ((38 29, 75 27, 37 24, 38 29)), POLYGON ((134 107, 136 92, 128 104, 134 107)), POLYGON ((75 27, 38 29, 74 32, 75 27)), POLYGON ((139 110, 136 92, 134 107, 139 110)), POLYGON ((74 32, 38 29, 73 39, 74 32)), POLYGON ((151 96, 139 110, 143 114, 151 96)), POLYGON ((39 43, 73 39, 38 29, 39 43)), POLYGON ((151 96, 143 114, 147 118, 151 96)), POLYGON ((73 39, 39 43, 73 89, 73 39)), POLYGON ((170 104, 147 118, 149 123, 170 104)), POLYGON ((73 89, 39 43, 73 100, 73 89)), POLYGON ((176 108, 149 123, 151 128, 176 108)), POLYGON ((39 161, 73 100, 39 43, 39 161)), POLYGON ((180 113, 151 128, 186 123, 180 113)), POLYGON ((73 100, 39 161, 73 171, 73 100)), POLYGON ((186 123, 151 128, 153 141, 186 123)), POLYGON ((38 172, 73 171, 39 161, 38 172)), POLYGON ((151 152, 184 161, 152 147, 151 152)), POLYGON ((73 171, 38 172, 74 176, 73 171)), POLYGON ((184 161, 151 152, 177 169, 184 161)), POLYGON ((36 176, 74 176, 38 172, 36 176)), POLYGON ((149 157, 177 169, 151 152, 149 157)), POLYGON ((34 179, 74 176, 36 176, 34 179)), POLYGON ((146 162, 167 177, 149 157, 146 162)), POLYGON ((74 176, 34 179, 76 178, 74 176)), POLYGON ((167 177, 146 162, 154 182, 167 177)), POLYGON ((30 181, 76 178, 34 179, 30 181)), POLYGON ((154 182, 146 162, 142 166, 154 182)), POLYGON ((100 190, 76 178, 30 181, 100 190)), POLYGON ((154 182, 142 166, 137 169, 154 182)), POLYGON ((80 179, 100 190, 89 180, 80 179)), POLYGON ((139 187, 137 169, 132 172, 139 187)), POLYGON ((100 190, 99 180, 89 180, 100 190)), POLYGON ((139 187, 132 172, 126 175, 139 187)), POLYGON ((100 190, 109 179, 99 180, 100 190)), POLYGON ((121 189, 126 175, 118 177, 121 189)), POLYGON ((121 189, 118 177, 109 179, 121 189)))
Figure
Geometry figure for visual-st-triangulatepolygon-02

Triangulation of the polygon used in the CG_Tesselate example.

Code
SELECT ST_TriangulatePolygon('POLYGON (( 10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190 ))'::geometry
);
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((50 160,120 190,120 160,50 160)),
POLYGON((10 70,80 130,80 70,10 70)),
POLYGON((50 160,10 70,10 190,50 160)),
POLYGON((120 190,50 160,10 190,120 190)),
POLYGON((80 130,10 70,50 160,80 130)))
Figure
Geometry figure for visual-st-triangulatepolygon-03

Назва

ST_VoronoiLines — Повертає межі діаграми Вороного вершин геометрії.

Короткий огляд

geometry ST_VoronoiLines( geometry geom , float8 tolerance = 0.0 , geometry extend_to = NULL );

Опис

Обчислює двовимірну діаграму Вороного з вершин наданої геометрії та повертає межі між комірками в діаграмі як MultiLineString. Повертає null, якщо вхідна геометрія є null. Повертає порожню колекцію геометрії, якщо вхідна геометрія містить тільки одну вершину. Повертає порожню колекцію геометрії, якщо контур extend_to має нульову площу.

Додаткові параметри:

  • tolerance: Відстань, в межах якої вершини будуть вважатися еквівалентними. Надійність алгоритму можна підвищити, вказавши відстань толерантності, відмінну від нуля. (за замовчуванням = 0,0)

  • extend_to: Якщо присутній, діаграма розширюється, щоб охопити контур заданої геометрії, якщо він не менший за контур за замовчуванням (за замовчуванням = NULL, контур за замовчуванням — це обмежувальний прямокутник вхідних даних, розширений приблизно на 50%).

Виконується модулем GEOS.

Доступність: 2.3.0

Приклади

Voronoi diagram lines with a tolerance of 30 units.

Code
SELECT ST_VoronoiLines('MULTIPOINT (50 30,60 30,100 100,10 150,110 120)'::geometry,
            30) AS geom;
Вивід растрових зображень
MULTILINESTRING((135.555555555556 270,36.8181818181818 92.2727272727273),(36.8181818181818 92.2727272727273,-110 43.3333333333333),(230 -45.7142857142858,36.8181818181818 92.2727272727273))
Figure
Geometry figure for visual-st-voronoilines-01

Назва

ST_VoronoiPolygons — Повертає комірки діаграми Вороного вершин геометрії.

Короткий огляд

geometry ST_VoronoiPolygons( geometry geom , float8 tolerance = 0.0 , geometry extend_to = NULL );

Опис

Обчислює двовимірну діаграму Вороного на основі вершин наданої геометрії. Результатом є GEOMETRYCOLLECTION з POLYGON, що охоплює оболонку, більшу за розмір вхідних вершин. Повертає null, якщо вхідна геометрія є null. Повертає порожню колекцію геометрії, якщо вхідна геометрія містить тільки одну вершину. Повертає порожню колекцію геометрії, якщо контур extend_to має нульову площу.

Додаткові параметри:

  • tolerance: Відстань, в межах якої вершини будуть вважатися еквівалентними. Надійність алгоритму можна підвищити, вказавши відстань толерантності, відмінну від нуля. (за замовчуванням = 0,0)

  • extend_to: Якщо присутній, діаграма розширюється, щоб охопити контур заданої геометрії, якщо він не менший за контур за замовчуванням (за замовчуванням = NULL, контур за замовчуванням — це обмежувальний прямокутник вхідних даних, розширений приблизно на 50%).

Виконується модулем GEOS.

Доступність: 2.3.0

Приклади

Points overlaid on top of the Voronoi diagram.

Code
SELECT ST_VoronoiPolygons('MULTIPOINT (50 30,60 30,100 100,10 150,110 120)'::geometry
            ) AS geom;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((-110 270,100.5 270,59.34782608695652 132.82608695652175,36.81818181818182 92.27272727272727,-110 43.33333333333332,-110 270)),
POLYGON((-110 -90,-110 43.33333333333332,36.81818181818182 92.27272727272727,55 79.28571428571429,55 -90,-110 -90)),
POLYGON((230 -20.71428571428572,55 79.28571428571429,36.81818181818182 92.27272727272727,59.34782608695652 132.82608695652175,230 47.50000000000001,230 -20.71428571428572)), POLYGON((230 -90,55 -90,55 79.28571428571429,230 -20.71428571428572,230 -90)),
POLYGON((230 270,230 47.50000000000001,59.34782608695652 132.82608695652175,100.5 270,230 270)))
Figure
Geometry figure for visual-st-voronoipolygons-01

Voronoi diagram with a tolerance of 30 units.

Code
SELECT ST_VoronoiPolygons('MULTIPOINT (50 30,60 30,100 100,10 150,110 120)'::geometry,
            30) AS geom;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((-110 270,135.55555555555557 270,36.81818181818182 92.27272727272727,-110 43.33333333333332,-110 270)),
POLYGON((230 270,230 -45.71428571428574,36.81818181818182 92.27272727272727,135.55555555555557 270,230 270)),
POLYGON((230 -90,-110 -90,-110 43.33333333333332,36.81818181818182 92.27272727272727,230 -45.71428571428574,230 -90)))
Figure
Geometry figure for visual-st-voronoipolygons-02

7.15. Покриття

Анотація

Ці функції працюють з наборами полігональної геометрії, що утворюють "неявні покриття". Щоб утворити дійсне покриття, полігони не повинні перекриватися, а вершини суміжних ребер повинні збігатися. Покриття швидко обробляються і можуть оброблятися за допомогою віконних функцій, які зберігають топологію покриття всередині розділу вікна при зміні ребер.

  • ST_CoverageInvalidEdges — Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.
  • ST_CoverageClean — Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.
  • ST_CoverageSimplify — Віконна функція, яка спрощує краї полігонального покриття.
  • ST_CoverageEdges — Computes the unique edges of a polygonal coverage.
  • ST_CoverageUnion — Обчислює об'єднання набору полігонів, що утворюють покриття, видаляючи спільні ребра.

Назва

ST_CoverageInvalidEdges — Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.

Короткий огляд

geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance = 0);

Опис

Віконна функція, яка перевіряє, чи полігони у вікні утворюють дійсне полігональне покриття. Вона повертає лінійні індикатори, що показують розташування недійсних країв (якщо такі є) у кожному полігоні.

Набір дійсних полігонів є дійсним покриттям, якщо виконуються такі умови:

  • Неперекриваються - полігони не перекриваються (їх внутрішні частини не перетинаються)

  • Edge-Matched - вершини вздовж спільних ребер є ідентичними

Як віконна функція, для кожного вхідного полігону повертається значення. Для полігонів, які порушують одну або кілька умов дійсності, значенням, що повертається, є MULTILINESTRING, що містить проблемні краї. Полігони з дійсним покриттям повертають значення NULL. Неполігональні або порожні геометрії також дають значення NULL.

Умови дозволяють дійсному покриттю містити отвори (проміжки між полігонами), якщо сусідні полігони збігаються по краях. Однак дуже вузькі проміжки часто є небажаними. Якщо параметр tolerance задано з відстанню, відмінною від нуля, краї, що утворюють вужчі проміжки, також будуть повернуті як недійсні.

Полігони, що перевіряються на валідність покриття, також повинні бути валідними геометріями. Це можна перевірити за допомогою ST_IsValid.

Доступність: 3.4.0

Потрібна версія GEOS >= 3.12.0

Приклади

Invalid edges caused by overlap and non-matching vertices.

Code
WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((10 190,30 160,40 110,100 70,120 10,10 10,10 190))'::geometry),
  (2, 'POLYGON ((100 190,10 190,30 160,40 110,50 80,74 110.5,100 130,140 120,140 160,100 190))'::geometry),
  (3, 'POLYGON ((140 190,190 190,190 80,140 80,140 190))'::geometry),
  (4, 'POLYGON ((180 40,120 10,100 70,140 80,190 80,180 40))'::geometry)
)
SELECT id, ST_CoverageInvalidEdges(geom) OVER ()
  FROM coverage;
Вивід растрових зображень
id |               st_astext
----+---------------------------------------
  1 | LINESTRING (40 110, 100 70)
  2 | MULTILINESTRING ((100 130, 140 120, 140 160, 100 190), (40 110, 50 80, 74 110.5))
  3 | LINESTRING (140 80, 140 190)
  4 | null
Figure
Geometry figure for visual-st-coverageinvalidedges-01

This example tests the entire table for coverage validity.

Code
SELECT true = ALL (
    SELECT ST_CoverageInvalidEdges(geom) OVER () IS NULL
    FROM coverage
    );
      

Назва

ST_CoverageClean — Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.

Короткий огляд

geometry ST_CoverageClean(geometry winset geom, float8 gapMaximumWidth = 0, float8 snappingDistance = -1, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER');

Опис

Віконна функція, яка коригує грані набору дійсних полігональних геометрій для отримання чистого покриття. Очищення включає:

  • прив'язування вершин і ребер для усунення невеликих розбіжностей і забезпечення однакового вузла спільних ребер

  • об'єднання перекриттів у батьківський багатокутник

  • об'єднання вузьких проміжків у сусідні багатокутники

gapMaximumWidth контролює, які проміжки між полігонами об'єднуються. Проміжки шириною <= ця відстань об'єднуються в сусідній полігон.

snappingDistance контролює прив'язку вершин і ребер. За замовчуванням (-1) автоматично визначається відстань прив'язки на основі введеного розміру. Встановіть значення 0,0, щоб вимкнути прив'язку.

overlapMergeStrategy визначає, як перекриття об'єднуються в батьківський багатокутник:

  • MERGE_LONGEST_BORDER — об'єднує в багатокутник з найдовшою спільною межею

  • MERGE_MAX_AREA - об'єднує в багатокутник з максимальною площею

  • MERGE_MIN_AREA - об'єднує в багатокутник з мінімальною площею

  • MERGE_MIN_INDEX - об'єднує в багатокутник з найменшим індексом введення (визначається порядком введення багатокутників)

Результатом є чисте полігональне покриття, яке пройде перевірку за допомогою ST_CoverageInvalidEdges і може бути введено в функції обробки покриття.

[Примітка]

Щоб полегшити визначення максимальної ширини проміжків, їх можна обчислити, очистивши за допомогою gapMaximumWidth = > 0 і використовуючи ST_CoverageUnionдля об'єднання результату покриття. Дірки в об'єднанні відповідають проміжкам в оригінальному наборі даних. Ширину проміжків можна виміряти, витягнувши отвори у вигляді багатокутників і виконавши на них ST_MaximumInscribedCircle; ширина проміжку дорівнює подвійному обчисленому радіусу.

Доступність: 3.6.0 - вимагає GEOS >= 3.14.0

Приклади

Clean a coverage containing overlaps and narrow gaps, and compare the cleaned polygons with the original invalid edges.

Code
WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((10 190,30 160,27 134.5,40 110,122 47,120 10,10 10,10 190))'::geometry),
  (2, 'POLYGON ((150 190,10 190,30 160,50 140,40 110,50 80,130 70,135 111,140 130,140 160,150 190))'::geometry),
  (3, 'POLYGON ((140 190,190 190,190 80,140 80,140 190))'::geometry),
  (4, 'POLYGON ((190 10,120 10,97 77,160 90,170 70,190 80,190 10))'::geometry)
), processed AS (
  SELECT id,
         ST_CoverageClean(geom, 1) OVER () AS cleaned,
         ST_CoverageInvalidEdges(geom) OVER () AS invalid_edges
  FROM coverage
)
SELECT ST_Collect(cleaned ORDER BY id) AS cleaned,
       ST_Collect(invalid_edges ORDER BY id) AS invalid_edges
FROM processed;
Вивід растрових зображень
MULTIPOLYGON(((10 10,10 190,30 160,27 134.5,40 110,84.7 75.7,102 62.3,120 10,10 10)),((140 190,140 160,140 130,135 111,131.7 84.2,97 77,98 74,84.7 75.7,40 110,50 140,30 160,10 190,140 190)),((190 190,190 80,165 80,140 80,140 85.9,140 130,140 160,140 190,150 190,190 190)),((190 10,120 10,102 62.3,98 74,97 77,131.7 84.2,140 85.9,140 80,165 80,170 70,190 80,190 10))) | MULTILINESTRING((40 110,122 47,120 10),(40 110,50 80,130 70,135 111,140 130,140 160,150 190,10 190),(190 80,140 80,140 190,190 190),(120 10,97 77,160 90,170 70))
Figure
Geometry figure for visual-st-coverageclean-01

Назва

ST_CoverageSimplify — Віконна функція, яка спрощує краї полігонального покриття.

Короткий огляд

geometry ST_CoverageSimplify(geometry winset geom, float8 tolerance, boolean simplifyBoundary = true);

Опис

Віконна функція, яка спрощує краї полігонів у полігональному покритті. Спрощення зберігає топологію покриття. Це означає, що спрощені вихідні полігони є сумісними вздовж спільних країв і все ще утворюють дійсне покриття.

Спрощення використовує варіант алгоритму Visvalingam–Whyatt. Параметр tolerance має одиниці виміру відстані і приблизно дорівнює квадратному кореню з площі трикутників, що спрощуються.

Щоб спростити тільки "внутрішні" краї покриття (ті, що є спільними для двох полігонів), встановіть параметр simplifyBoundary на значення false.

Use this function to simplify adjacent polygon layers when shared boundaries must remain edge-matched. For a single geometry where only self-intersection and ring validity matter, see ST_SimplifyPreserveTopology.

[Примітка]

Якщо вхідні дані не є дійсним покриттям, у вихідних даних можуть з'явитися несподівані артефакти (наприклад, перетини меж або розділені межі, які здавалися спільними). Використовуйте ST_CoverageInvalidEdges, щоб визначити, чи є покриття дійсним.

Доступність: 3.4.0

Потрібна версія GEOS >= 3.12.0

Приклади

Simplify a polygonal coverage while preserving shared boundaries.

Code
WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((160 150,110 130,90 100,90 70,60 60,50 10,30 30,40 50,25 40,10 60,30 100,30 120,20 170,60 180,90 190,130 180,130 160,160 150),(40 160,50 140,66 125,60 100,80 140,90 170,60 160,40 160))'::geometry),
  (2, 'POLYGON ((40 160,60 160,90 170,80 140,60 100,66 125,50 140,40 160))'::geometry),
  (3, 'POLYGON ((110 130,160 50,140 50,120 33,90 30,50 10,60 60,90 70,90 100,110 130))'::geometry),
  (4, 'POLYGON ((160 150,150 120,160 90,160 50,110 130,160 150))'::geometry)
)
SELECT id, ST_CoverageSimplify(geom, 30) OVER ()
  FROM coverage;
Вивід растрових зображень
id |               st_astext
----+---------------------------------------
  1 | POLYGON ((160 150, 110 130, 50 10, 10 60, 20 170, 90 190, 160 150), (40 160, 66 125, 90 170, 40 160))
  2 | POLYGON ((40 160, 66 125, 90 170, 40 160))
  3 | POLYGON ((110 130, 160 50, 50 10, 110 130))
  4 | POLYGON ((160 150, 160 50, 110 130, 160 150))
Figure
Geometry figure for visual-st-coveragesimplify-01

Назва

ST_CoverageEdges — Computes the unique edges of a polygonal coverage.

Короткий огляд

geometry ST_CoverageEdges(geometry geom, integer edgetype = 0);

geometry ST_CoverageEdges(geometry[] geoms, integer edgetype = 0);

Опис

Returns a MultiLineString representing the unique edges of a polygonal coverage. A polygonal coverage is a set of non-overlapping polygons where adjacent polygons have matching vertices along shared edges.

The edgetype parameter can be used to select which edges are returned:

  • 0 (ALL) - all unique edges (default)

  • 1 (EXTERIOR) - only exterior edges (non-shared)

  • 2 (INTERIOR) - only interior edges (shared)

Availability: 3.7.0

Requires GEOS >= 3.15.0

Приклади

This example returns all unique edges of a coverage.

Code
WITH coverage(geom) AS (
  VALUES (
    'GEOMETRYCOLLECTION(
      POLYGON((0 0,10 0,10 10,0 10,0 0)),
      POLYGON((10 0,20 0,20 10,10 10,10 0))
    )'::geometry
  )
)
SELECT geom AS input_coverage,
       ST_CoverageEdges(geom) AS all_edges
FROM coverage;
Вивід растрових зображень
-[ RECORD 1 ]--+----------------------------------------------------------------------------------------------
input_coverage | GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),POLYGON((10 0,20 0,20 10,10 10,10 0)))
all_edges      | MULTILINESTRING((10 0,10 10),(10 10,0 10,0 0,10 0),(10 0,20 0,20 10,10 10))

This example returns only the interior shared edges of a coverage.

Code
WITH coverage(geom) AS (
  VALUES (
    'GEOMETRYCOLLECTION(
      POLYGON((0 0,10 0,10 10,0 10,0 0)),
      POLYGON((10 0,20 0,20 10,10 10,10 0))
    )'::geometry
  )
)
SELECT geom AS input_coverage,
       ST_CoverageEdges(geom, 2) AS shared_edges
FROM coverage;
Вивід растрових зображень
-[ RECORD 1 ]--+----------------------------------------------------------------------------------------------
input_coverage | GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),POLYGON((10 0,20 0,20 10,10 10,10 0)))
shared_edges   | MULTILINESTRING((10 0,10 10))

Назва

ST_CoverageUnion — Обчислює об'єднання набору полігонів, що утворюють покриття, видаляючи спільні ребра.

Короткий огляд

geometry ST_CoverageUnion(geometry set geom);

Опис

Агрегуюча функція, яка об'єднує набір полігонів, що утворюють полігональне покриття. Результатом є полігональна геометрія, що покриває ту саму площу, що й покриття. Ця функція дає той самий результат, що й ST_Union, але використовує структуру покриття для значно швидшого обчислення об'єднання.

[Примітка]

Якщо вхідні дані не є дійсним покриттям, у вихідних даних можуть з'явитися несподівані артефакти (наприклад, не об'єднані або перекриваються полігони). Використовуйте ST_CoverageInvalidEdges, щоб визначити, чи є покриття дійсним.

Доступність: 3.4.0 - вимагає GEOS >= 3.8.0

Приклади

Union a polygonal coverage.

Code
WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((10 10,10 150,80 190,110 150,90 110,40 110,50 60,10 10))'::geometry),
  (2, 'POLYGON ((120 10,10 10,50 60,100 70,120 10))'::geometry),
  (3, 'POLYGON ((140 80,120 10,100 70,40 110,90 110,110 150,140 80))'::geometry),
  (4, 'POLYGON ((140 190,120 170,140 130,160 150,140 190))'::geometry),
  (5, 'POLYGON ((180 160,170 140,140 130,160 150,140 190,180 160))'::geometry)
)
SELECT ST_CoverageUnion(geom) AS wkt
  FROM coverage;
Вивід растрових зображень
MULTIPOLYGON(((10 150,80 190,110 150,140 80,120 10,10 10,10 150),(50 60,100 70,40 110,50 60)),((120 170,140 190,180 160,170 140,140 130,120 170)))
Figure
Geometry figure for visual-st-coverageunion-01

7.16. Афінні перетворення

Анотація

Ці функції змінюють положення та форму геометрій за допомогою афінних перетворень.

  • ST_Affine — Застосувати афінне перетворення 3D до геометрії.
  • ST_Rotate — Обертає геометрію навколо точки початку координат.
  • ST_RotateX — Обертає геометрію навколо осі X.
  • ST_RotateY — Обертає геометрію навколо осі Y.
  • ST_RotateZ — Обертає геометрію навколо осі Z.
  • ST_Scale — Масштабує геометрію за заданими коефіцієнтами.
  • ST_Translate — Перетворює геометрію за заданими зміщеннями.
  • ST_TransScale — Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.

Назва

ST_Affine — Застосувати афінне перетворення 3D до геометрії.

Короткий огляд

geometry ST_Affine(geometry geomA, float a, float b, float c, float d, float e, float f, float g, float h, float i, float xoff, float yoff, float zoff);

geometry ST_Affine(geometry geomA, float a, float b, float d, float e, float xoff, float yoff);

Опис

Застосовує 3D афінне перетворення до геометрії, щоб виконати такі дії, як перенесення, обертання, масштабування за один крок.

Версія 1: Виклик

Code
ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff) 

представляє матрицю перетворення

Code
/ a  b  c  xoff \
| d  e  f  yoff |
| g  h  i  zoff |
\ 0  0  0     1 /

і вершини перетворюються наступним чином:

Code
x' = a*x + b*y + c*z + xoff
y' = d*x + e*y + f*z + yoff
z' = g*x + h*y + i*z + zoff

Всі функції перетворення/масштабування, наведені нижче, виражаються за допомогою такого афінного перетворення.

Версія 2: Застосовує 2D афінне перетворення до геометрії. Виклик

Code
ST_Affine(geom, a, b, d, e, xoff, yoff)

представляє матрицю перетворення.

Code
/  a  b  0  xoff  \       /  a  b  xoff  \
|  d  e  0  yoff  | rsp.  |  d  e  yoff  |
|  0  0  1     0  |       \  0  0     1  /
\  0  0  0     1  /

і вершини трансформуються наступним чином:

Code
x' = a*x + b*y + xoff
y' = d*x + e*y + yoff
z' = z 

Цей метод є підвидом вищезазначеного 3D-методу.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Доступність: 1.1.2. Назва змінена з Affine на ST_Affine у версії 1.2.2

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Rotate a 3D line 180 degrees about the z axis. Note this is long-hand for doing ST_Rotate();

Code
SELECT ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0, 1, 0, 0, 0) As using_affine,
    ST_Rotate(geom, pi()) As using_rotate
   FROM (SELECT 'LINESTRING(1 2 3,1 4 3)'::geometry As geom) As foo;
Вивід растрових зображень
using_affine         |        using_rotate
-----------------------------+-----------------------------
 LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)
(1 row)
Figure
Geometry figure for visual-st-affine-01

Rotate a 3D line 180 degrees in both the x and z axis.

Code
SELECT ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0)
    FROM (SELECT 'LINESTRING(1 2 3,1 4 3)'::geometry As geom) As foo;
Вивід растрових зображень
LINESTRING(-1 -2 -3,-1 -4 -3)
Figure
Geometry figure for visual-st-affine-02

Назва

ST_Rotate — Обертає геометрію навколо точки початку координат.

Короткий огляд

geometry ST_Rotate(geometry geomA, float rotRadians);

geometry ST_Rotate(geometry geomA, float rotRadians, float x0, float y0);

geometry ST_Rotate(geometry geomA, float rotRadians, geometry pointOrigin);

Опис

Обертає геометрію rotRadians проти годинникової стрілки навколо точки початку координат. Початок обертання можна вказати як геометрію POINT або як координати x та y. Якщо початок координат не вказано, геометрія обертається навколо POINT(0 0).

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Покращено: 2.0.0 додано додаткові параметри для визначення початку обертання.

Доступність: 1.1.2. Назва змінена з Rotate на ST_Rotate у версії 1.2.2

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example rotates a geometry by 180 degrees.

Code
SELECT ST_Rotate('LINESTRING (50 160,50 50,100 50)'::geometry, pi());
Вивід растрових зображень
LINESTRING(-50 -160,-50 -50,-100 -50)
Figure
Geometry figure for visual-st-rotate-01

This example rotates a geometry 30 degrees counter-clockwise around x=50, y=160.

Code
SELECT ST_Rotate('LINESTRING (50 160,50 50,100 50)'::geometry, pi()/6, 50, 160);
Вивід растрових зображень
LINESTRING(50 160,105 64.737206,148.30127 89.737206)
Figure
Geometry figure for visual-st-rotate-02

This example rotates a geometry 60 degrees clockwise around its centroid.

Code
SELECT ST_Rotate(geom, -pi()/3, ST_Centroid(geom))
FROM (SELECT 'LINESTRING (50 160,50 50,100 50)'::geometry AS geom) AS foo;
Вивід растрових зображень
LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708)
Figure
Geometry figure for visual-st-rotate-03

Назва

ST_RotateX — Обертає геометрію навколо осі X.

Короткий огляд

geometry ST_RotateX(geometry geomA, float rotRadians);

Опис

Обертає геометрію geomA - rotRadians навколо осі X.

[Примітка]

ST_RotateX(geomA, rotRadians) є скороченим варіантом ST_Affine(geomA, 1, 0, 0, 0, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 0, 0, 0).

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Доступність: 1.1.2. Назва змінена з RotateX на ST_RotateX у версії 1.2.2

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example rotates a line 90 degrees around the X axis.

Code
SELECT ST_RotateX('LINESTRING(1 2 3,1 1 1)', pi()/2);
Вивід растрових зображень
LINESTRING(1 -3 2,1 -1 1)
Figure
Geometry figure for visual-st-rotatex-01

Див. також

ST_Affine, ST_RotateY, ST_RotateZ


Назва

ST_RotateY — Обертає геометрію навколо осі Y.

Короткий огляд

geometry ST_RotateY(geometry geomA, float rotRadians);

Опис

Обертає геометрію geomA - rotRadians навколо осі y.

[Примітка]

ST_RotateY(geomA, rotRadians) є скороченим варіантом ST_Affine(geomA, cos(rotRadians), 0, sin(rotRadians), 0, 1, 0, -sin(rotRadians), 0, cos(rotRadians), 0, 0, 0).

Доступність: 1.1.2. Назва змінена з RotateY на ST_RotateY у версії 1.2.2.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example rotates a line 90 degrees around the Y axis.

Code
SELECT ST_RotateY('LINESTRING(1 2 3,1 1 1)', pi()/2);
Вивід растрових зображень
LINESTRING(3 2 -1,1 1 -1)
Figure
Geometry figure for visual-st-rotatey-01

Див. також

ST_Affine, ST_RotateX, ST_RotateZ


Назва

ST_RotateZ — Обертає геометрію навколо осі Z.

Короткий огляд

geometry ST_RotateZ(geometry geomA, float rotRadians);

Опис

Обертає геометрію geomA - rotRadians навколо осі Z.

[Примітка]

Це синонім ST_Rotate

[Примітка]

ST_RotateZ(geomA, rotRadians) є скороченим варіантом SELECT ST_Affine(geomA, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 0, 0, 0, 1, 0, 0, 0).

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Доступність: 1.1.2. Назва змінена з RotateZ на ST_RotateZ у версії 1.2.2

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

This example rotates a line 90 degrees around the Z axis.

Code
SELECT ST_RotateZ('LINESTRING(1 2 3,1 1 1)', pi()/2);
Вивід растрових зображень
LINESTRING(-2 1 3,-1 1 1)
Figure
Geometry figure for visual-st-rotatez-01

This example rotates a curved circle around the Z axis.

Code
SELECT ST_RotateZ(geom, pi()/2)
FROM (SELECT ST_LineToCurve(ST_Buffer('POINT(234 567)'::geometry, 3)) As geom) As foo;
Вивід растрових зображень
CURVEPOLYGON(CIRCULARSTRING(-567 237.00000000000003,-567 231.00000000000003,-567 237.00000000000003))
Figure
Geometry figure for visual-st-rotatez-02

Див. також

ST_Affine, ST_RotateX, ST_RotateY


Назва

ST_Scale — Масштабує геометрію за заданими коефіцієнтами.

Короткий огляд

geometry ST_Scale(geometry geomA, float XFactor, float YFactor, float ZFactor);

geometry ST_Scale(geometry geomA, float XFactor, float YFactor);

geometry ST_Scale(geometry geom, geometry factor);

geometry ST_Scale(geometry geom, geometry factor, geometry origin);

Опис

Масштабує геометрію до нового розміру, помножуючи ординати на відповідні параметри коефіцієнтів.

Версія, що приймає геометрію як параметр factor, дозволяє передавати 2d, 3dm, 3dz або 4d точку для встановлення коефіцієнта масштабування для всіх підтримуваних вимірів. Відсутні виміри в точці factor еквівалентні відсутності масштабування відповідного виміру.

Варіант з трьома геометріями дозволяє передавати «хибну точку відліку» для масштабування. Це дозволяє здійснювати «масштабування на місці», наприклад, використовуючи центроїд геометрії як хибну точку відліку. Без хибної точки відліку масштабування відбувається відносно фактичної точки відліку, тому всі координати просто множаться на коефіцієнт масштабування.

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

Доступність: 1.1.0.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Покращено: 2.2.0 додано підтримку масштабування всіх розмірів (параметр factor).

Покращено: 2.5.0 додано підтримку масштабування відносно локального початку координат (параметр origin).

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports M coordinates.

Приклади

This example scales X, Y, and Z values.

Code
SELECT ST_Scale('LINESTRING(1 2 3,1 1 1)', 0.5, 0.75, 0.8);
Вивід растрових зображень
LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8)
Figure
Geometry figure for visual-st-scale-01

This example scales X and Y values.

Code
SELECT ST_Scale('LINESTRING(1 2 3,1 1 1)', 0.5, 0.75);
Вивід растрових зображень
LINESTRING(0.5 1.5 3,0.5 0.75 1)
Figure
Geometry figure for visual-st-scale-02

This example scales X, Y, Z, and M values.

Code
SELECT ST_Scale('LINESTRING(1 2 3 4,1 1 1 1)',
    ST_MakePoint(0.5, 0.75, 2, -1));
Вивід растрових зображень
LINESTRING(0.5 1.5 6 -4,0.5 0.75 2 -1)
Figure
Geometry figure for visual-st-scale-03

This example scales X and Y values using a false origin.

Code
SELECT ST_Scale('LINESTRING(1 1,2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry);
Вивід растрових зображень
LINESTRING(1 1,3 3)
Figure
Geometry figure for visual-st-scale-04

Див. також

ST_Affine, ST_TransScale


Назва

ST_Translate — Перетворює геометрію за заданими зміщеннями.

Короткий огляд

geometry ST_Translate(geometry g1, float deltax, float deltay);

geometry ST_Translate(geometry g1, float deltax, float deltay, float deltaz);

Опис

Returns a new geometry whose coordinates are translated delta x,delta y,delta z units. Units are based on the units defined in spatial reference (SRID) for this geometry. M coordinates are preserved.

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

Доступність: 1.2.2

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports M coordinates.

Приклади

Перемістити точку на 1 градус довготи

Code
SELECT ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)', 4326), 1, 0) AS wgs_transgeomtxt;
Вивід растрових зображень
POINT(-70.01 42.37)

Перемістіть лінію на 1 градус довготи та 1/2 градуса широти

Code
SELECT ST_Translate(ST_GeomFromText('LINESTRING(-71.01 42.37,-71.11 42.38)', 4326), 1, 0.5) AS wgs_transgeomtxt;
Вивід растрових зображень
LINESTRING(-70.01 42.87,-70.11 42.88)
Figure
Geometry figure for visual-st-translate-02

Перемістити 3D-точку

Code
SELECT ST_Translate(CAST('POINT(0 0 0)' AS geometry), 5, 12, 3);
Вивід растрових зображень
POINT(5 12 3)

Move points with a measure coordinate

Code
SELECT ST_Translate('POINTM(0 0 11)', 5, 12);
Вивід растрових зображень
POINTM(5 12 11)
Figure
Geometry figure for visual-st-translate-04
Code
SELECT ST_Translate('POINT(0 0 7 11)', 5, 12, 3);
Вивід растрових зображень
POINT(5 12 10 11)

Переміщення кривої та точки

Code
SELECT ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 3,3.12 0.878,1 0,-1.121 5.1213,6 7,8 9,4 3))', 'POINT(1 3)'), 1, 2);
Вивід растрових зображень
GEOMETRYCOLLECTION(CURVEPOLYGON(CIRCULARSTRING(5 5,4.12 2.878,2 2,-0.121 7.1213,7 9,9 11,5 5)), POINT(2 5))
Figure
Geometry figure for visual-st-translate-06

Див. також

ST_Affine, ST_AsText, ST_GeomFromText


Назва

ST_TransScale — Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.

Короткий огляд

geometry ST_TransScale(geometry geomA, float deltaX, float deltaY, float XFactor, float YFactor);

Опис

Перетворює геометрію за допомогою аргументів deltaX і deltaY, а потім масштабує її за допомогою аргументів XFactor і YFactor, працюючи тільки в 2D.

[Примітка]

ST_TransScale(geomA, deltaX, deltaY, XFactor, YFactor) є скороченим варіантом ST_Affine(geomA, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, deltaX*XFactor, deltaY*YFactor, 0).

[Примітка]

До версії 1.3.4 ця функція виходила з ладу при використанні з геометріями, що містять КРИВІ. Ця проблема вирішена у версії 1.3.4+

Доступність: 1.1.0.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_TransScale('LINESTRING(1 2 3,1 1 1)', 0.5, 1, 1, 2);
Вивід растрових зображень
LINESTRING(1.5 6 3,1.5 4 1)
Figure
Geometry figure for visual-st-transscale-01

This example buffers a point to approximate a circle, converts it to a curve, translates it by 1,2, and scales it by 3,4.

Code
SELECT ST_TransScale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)), 1, 2, 3, 4);
Вивід растрових зображень
CURVEPOLYGON(CIRCULARSTRING(714 2276,696 2276,714 2276))
Figure
Geometry figure for visual-st-transscale-02

Див. також

ST_Affine, ST_Translate

7.17. Функції кластеризації

Анотація

Ці функції реалізують алгоритми кластеризації для наборів геометрій.

  • ST_ClusterDBSCAN — Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.
  • ST_ClusterIntersecting — Агрегуюча функція, яка групує вхідні геометрії у зв'язані набори.
  • ST_ClusterIntersectingWin — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, групуючи вхідні геометрії у пов'язані набори.
  • ST_ClusterRelateWin — Window function that returns a cluster id for each input geometry, clustering input geometries into connected sets using the relate pattern to determine whether the geometries are connected.
  • ST_MinimumSpanningTree — Window function that returns a tree id for each input geometry, clustering input geometries into connected trees using the Minimum Spanning Tree algorithm.
  • ST_ClusterKMeans — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.
  • ST_ClusterWithin — Агрегатна функція, яка групує геометрії за відстанню розділення.
  • ST_ClusterWithinWin — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.

Назва

ST_ClusterDBSCAN — Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.

Короткий огляд

integer ST_ClusterDBSCAN(geometry winset geom, float8 eps, integer minpoints);

Опис

Віконна функція, яка повертає номер кластера для кожної вхідної геометрії, використовуючи 2D алгоритм просторового кластеризації додатків на основі щільності з шумом (DBSCAN). На відміну від ST_ClusterKMeans, вона не вимагає вказання кількості кластерів, а замість цього використовує бажані параметри відстань (eps) та щільність (minpoints) для визначення кожного кластера.

Геометрія входу додається до кластера, якщо вона:

  • "Основна" геометрія, яка знаходиться в межах eps відстань щонайменше minpoints вхідних геометрій (включно з самою собою); або

  • Геометрія "border", що знаходиться в межах eps відстань від геометрії ядра.

Зверніть увагу, що геометрії меж можуть знаходитися на відстані eps від геометрій ядра в більш ніж одному кластері. Будь-яке призначення буде правильним, тому геометрія межі буде довільно призначена одному з доступних кластерів. У цій ситуації можливе створення правильного кластера з меншою кількістю геометрій, ніж minpoints. Щоб забезпечити детермінований прив'язку геометрій меж (так, щоб повторні виклики ST_ClusterDBSCAN давали однакові результати), використовуйте оператор ORDER BY у визначенні вікна. Неоднозначні прив'язки кластерів можуть відрізнятися від інших реалізацій DBSCAN.

[Примітка]

Геометріям, які не відповідають критеріям для приєднання до будь-якого кластера, присвоюється номер кластера NULL.

Доступність: 2.3.0

This method supports Circular Strings and Curves.

Приклади

Cluster polygons within 50 units of each other, requiring at least two polygons per cluster. The isolated polygon is reported as noise.

Code
WITH input(name, geom) AS (
  VALUES
    ('A1', ST_MakeEnvelope(0, 0, 10, 10)),
    ('A2', ST_MakeEnvelope(30, 0, 40, 10)),
    ('B1', ST_MakeEnvelope(100, 0, 110, 10)),
    ('B2', ST_MakeEnvelope(130, 0, 140, 10)),
    ('noise', ST_MakeEnvelope(250, 0, 260, 10))
), clustered AS (
  SELECT name,
         geom,
         ST_ClusterDBSCAN(geom, eps => 50, minpoints => 2)
           OVER (ORDER BY name) AS cid
  FROM input
)
SELECT COALESCE(cid::text, 'noise') AS cluster,
       string_agg(name, ',' ORDER BY name) AS members,
       ST_Collect(geom ORDER BY name) AS cluster_geom
FROM clustered
GROUP BY cid
ORDER BY cid NULLS LAST;
Вивід растрових зображень
0 | A1,A2 | MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((30 0,30 10,40 10,40 0,30 0)))
1 | B1,B2 | MULTIPOLYGON(((100 0,100 10,110 10,110 0,100 0)),((130 0,130 10,140 10,140 0,130 0)))
noise | noise | MULTIPOLYGON(((250 0,250 10,260 10,260 0,250 0)))
Figure
Geometry figure for visual-st-clusterdbscan-01

Приклад об'єднання ділянок з однаковим номером кластера в геометричні колекції.

Code
SELECT cid, ST_Collect(geom) AS cluster_geom, array_agg(parcel_id) AS ids_in_cluster FROM (
    SELECT parcel_id, ST_ClusterDBSCAN(geom, eps => 0.5, minpoints => 5) over () AS cid, geom
    FROM parcels) sq
GROUP BY cid;
    

Назва

ST_ClusterIntersecting — Агрегуюча функція, яка групує вхідні геометрії у зв'язані набори.

Короткий огляд

geometry[] ST_ClusterIntersecting(geometry set g);

Опис

Агрегатна функція, яка повертає масив GeometryCollections, розділяючи вхідні геометрії на з'єднані кластери, які не перетинаються. Кожна геометрія в кластері перетинається принаймні з однією іншою геометрією в кластері і не перетинається з жодною геометрією в інших кластерах.

Доступність: 2.2.0

Приклади

Code
WITH testdata AS
  (SELECT unnest(
           ARRAY['LINESTRING (0 0,1 1)'::geometry,
           'LINESTRING (5 5,4 4)'::geometry,
           'LINESTRING (6 6,7 7)'::geometry,
           'LINESTRING (0 0,-1 -1)'::geometry,
           'POLYGON ((0 0,4 0,4 4,0 4,0 0))'::geometry]) AS geom)

SELECT unnest(ST_ClusterIntersecting(geom)) FROM testdata;
Вивід растрових зображень
GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),LINESTRING(5 5,4 4),LINESTRING(0 0,-1 -1),POLYGON((0 0,4 0,4 4,0 4,0 0)))
GEOMETRYCOLLECTION(LINESTRING(6 6,7 7))
Figure
Geometry figure for visual-st-clusterintersecting-01

Назва

ST_ClusterIntersectingWin — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, групуючи вхідні геометрії у пов'язані набори.

Короткий огляд

integer ST_ClusterIntersectingWin(geometry winset geom);

Опис

Віконна функція, яка будує з'єднані кластери геометрій, що перетинаються. Можна пройти всі геометрії в кластері, не виходячи з нього. Повертається номер кластера, до якого належить аргумент геометрії, або null для нульових вхідних даних.

Доступність: 3.4.0

Приклади

Return an explicit cluster id for each input geometry. Using the conventional cid alias keeps the geometry column ready for color-by-cluster rendering.

Code
WITH testdata(id, geom) AS (
  VALUES (1, 'LINESTRING (0 0,1 1)'::geometry),
         (2, 'LINESTRING (5 5,4 4)'::geometry),
         (3, 'LINESTRING (6 6,7 7)'::geometry),
         (4, 'LINESTRING (0 0,-1 -1)'::geometry),
         (5, 'POLYGON ((0 0,4 0,4 4,0 4,0 0))'::geometry)
), clustered AS (
  SELECT id,
         geom,
         ST_ClusterIntersectingWin(geom) OVER () AS cid
  FROM testdata
)
SELECT id,
       geom AS geom_wkt,
       cid
FROM clustered
ORDER BY id;
Вивід растрових зображень
id |            geom_wkt            | cid
----+--------------------------------+-----
  1 | LINESTRING(0 0,1 1)            |   0
  2 | LINESTRING(5 5,4 4)            |   0
  3 | LINESTRING(6 6,7 7)            |   1
  4 | LINESTRING(0 0,-1 -1)          |   0
  5 | POLYGON((0 0,4 0,4 4,0 4,0 0)) |   0
Figure
Geometry figure for visual-st-clusterintersectingwin-01

Назва

ST_ClusterRelateWin — Window function that returns a cluster id for each input geometry, clustering input geometries into connected sets using the relate pattern to determine whether the geometries are connected.

Короткий огляд

integer ST_ClusterRelateWin(geometry winset geom, text relate_matrix);

Опис

A window function that builds connected clusters of geometries that intersect. Geometries are added to a cluster if they share a pairwise DE9IM relationship with another member of the cluster. With this function it is possible to build a cluster of all objects that touch at boundaries, but exclude those that merely overlap.

Availability: 3.7.0

Приклади

This collection of line strings would form a single cluster using ST_ClusterIntersectingWin, but using ST_ClusterRelateWin can be clustered into three groups that connect only via their end points.

Code
WITH data(id, geom) AS (
  VALUES (1, 'LINESTRING(0 0,1 1)'::geometry),
         (2, 'LINESTRING(2 2,1 1)'::geometry),
         (3, 'LINESTRING(0 1,1 0)'::geometry),
         (4, 'LINESTRING(0 1,0 4)'::geometry),
         (5, 'LINESTRING(2 2,2 4)'::geometry),
         (6, 'LINESTRING(1.5 2.5,2.5 3.5)'::geometry)
), clustered AS (
  SELECT id, geom,
         ST_ClusterRelateWin(geom, '****0****') OVER () AS cluster
  FROM data
)
SELECT cluster,
       string_agg(id::text, ',' ORDER BY id) AS members,
       ST_Collect(geom ORDER BY id) AS cluster_geom
FROM clustered
GROUP BY cluster
ORDER BY cluster;
Вивід растрових зображень
0 | 1,2,5 | MULTILINESTRING((0 0,1 1),(2 2,1 1),(2 2,2 4))
1 | 3,4 | MULTILINESTRING((0 1,1 0),(0 1,0 4))
2 | 6 | MULTILINESTRING((1.5 2.5,2.5 3.5))
Figure
Geometry figure for visual-st-clusterrelatewin-01

Назва

ST_MinimumSpanningTree — Window function that returns a tree id for each input geometry, clustering input geometries into connected trees using the Minimum Spanning Tree algorithm.

Короткий огляд

integer ST_MinimumSpanningTree(geometry winset geom);

Опис

A window function that builds connected graphs of line strings based on the Minimum Spanning Tree (MST) of the input geometries. The return value is the cluster number that the geometry argument participates in, or zero if it is not part of the minimum tree.

The Minimum Spanning Tree connects all geometries in the window partition such that the total length of the connecting lines is minimized. If the graph is not fully connected (e.g. infinite distance between some geometries), it produces a Minimum Spanning Forest, and each connected component is assigned a unique tree ID.

Availability: 3.7.0

Requires GEOS >= 3.15.0

Приклади

These six edges describe a square with both diagonals. The minimum spanning tree keeps three edges and excludes the rest.

Code
WITH edges(id, geom) AS (
  VALUES
    (1, 'LINESTRING(0 0,1 0)'::geometry),
    (2, 'LINESTRING(0 0,0 1)'::geometry),
    (3, 'LINESTRING(1 1,0 1)'::geometry),
    (4, 'LINESTRING(1 1,1 0)'::geometry),
    (5, 'LINESTRING(0 0,1 1)'::geometry),
    (6, 'LINESTRING(1 0,0 1)'::geometry)
), marked AS (
  SELECT id,
         geom,
         ST_MinimumSpanningTree(geom) OVER (ORDER BY id) AS tree_id
  FROM edges
)
SELECT string_agg(id::text, ',' ORDER BY id)
         FILTER (WHERE tree_id > 0) AS tree_edge_ids,
       ST_Collect(geom ORDER BY id)
         FILTER (WHERE tree_id > 0) AS tree_edges,
       string_agg(id::text, ',' ORDER BY id)
         FILTER (WHERE tree_id = 0) AS excluded_edge_ids,
       ST_Collect(geom ORDER BY id)
         FILTER (WHERE tree_id = 0) AS excluded_edges
FROM marked;
Вивід растрових зображень
-[ RECORD 1 ]-----
tree_edge_ids     | 1,2,3
tree_edges        | MULTILINESTRING((0 0,1 0),(0 0,0 1),(1 1,0 1))
excluded_edge_ids | 4,5,6
excluded_edges    | MULTILINESTRING((1 1,1 0),(0 0,1 1),(1 0,0 1))

Назва

ST_ClusterKMeans — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.

Короткий огляд

integer ST_ClusterKMeans( geometry winset geom , integer k , float8 max_radius );

Опис

Повертає K-means номер кластера для кожної вхідної геометрії. Відстань, що використовується для кластеризації, - це відстань між центроїдами для 2D-геометрій і відстань між центрами обмежувальних рамок для 3D-геометрій. Для вхідних даних POINT координата M буде розглядатися як вага вхідних даних і повинна бути більшою за 0.

max_radius, якщо встановлено, змусить ST_ClusterKMeans генерувати більше кластерів, ніж k, гарантуючи, що жоден кластер у вихідних даних не матиме радіус, більший за max_radius. Це корисно для аналізу доступності.

Покращено: 3.2.0 Підтримка max_radius

Покращено: 3.1.0 Підтримка 3D-геометрії та ваги

Доступність: 2.3.0

Приклади

Define the parcel geometries once in a CTE and reuse them across the executable examples.

Parcels color-coded by cluster number (cid).

Code
WITH parcels(parcel_id, geom) AS (
  VALUES
    ('A1', ST_MakeEnvelope(0, 0, 10, 10)),
    ('A2', ST_MakeEnvelope(10, 0, 20, 10)),
    ('B1', ST_MakeEnvelope(100, 0, 110, 10)),
    ('B2', ST_MakeEnvelope(110, 0, 120, 10)),
    ('C1', ST_MakeEnvelope(200, 0, 210, 10)),
    ('C2', ST_MakeEnvelope(210, 0, 220, 10))
), clustered AS (
  SELECT parcel_id,
         geom,
         ST_ClusterKMeans(geom, 3) OVER (ORDER BY parcel_id) AS cid
  FROM parcels
)
SELECT cid,
       string_agg(parcel_id, ',' ORDER BY parcel_id) AS parcels,
       ST_Union(geom) AS cluster_geom
FROM clustered
GROUP BY cid
ORDER BY cid;
Вивід растрових зображень
0 | C1,C2 | POLYGON((200 10,210 10,220 10,220 0,210 0,200 0,200 10))
1 | A1,A2 | POLYGON((0 10,10 10,20 10,20 0,10 0,0 0,0 10))
2 | B1,B2 | POLYGON((100 10,110 10,120 10,120 0,110 0,100 0,100 10))
Figure
Geometry figure for visual-st-clusterkmeans-01

Розподіл кластерів ділянок за типом:

Code
WITH parcel_geoms AS (
  SELECT geom
  FROM ST_Subdivide(
    ST_Buffer('SRID=3857;LINESTRING(40 100,98 100,100 150,60 90)'::geometry,
              40, 'endcap=square'),
    12) AS geom
), parcels AS (
  SELECT lpad(row_number() OVER (ORDER BY ST_YMin(geom), ST_XMin(geom))::text, 3, '0') AS parcel_id,
         geom,
         ('{residential,commercial}'::text[])[1 + mod(row_number() OVER (ORDER BY ST_YMin(geom), ST_XMin(geom)), 2)] AS type
  FROM parcel_geoms
)
SELECT ST_ClusterKMeans(geom, 3) over (PARTITION BY type) AS cid,
       parcel_id,
       type,
       ST_SnapToGrid(geom, 1) AS parcel_geom
FROM parcels
ORDER BY type, parcel_id;
Вивід растрових зображень
cid | parcel_id |    type     | parcel_geom
-----+-----------+-------------+--------------------------------------------------------------
   0 | 001       | commercial  | POLYGON((33 60,0 60,0 98,71 98,71 35,33 60))
   2 | 003       | commercial  | POLYGON((106 98,138 98,137 91,134 84,131 77,126 71,120 66,113 63,106 61,106 98))
   2 | 005       | commercial  | POLYGON((140 148,138 98,72 98,72 148,140 148))
   1 | 007       | commercial  | POLYGON((109 189,116 187,123 183,129 178,134 171,137 164,139 156,140 148,109 148,109 189))
   0 | 002       | residential | POLYGON((71 98,106 98,106 61,98 60,88 60,71 35,71 98))
   2 | 004       | residential | POLYGON((0 98,0 140,45 140,67 172,72 178,72 98,0 98))
   1 | 006       | residential | POLYGON((72 178,78 183,85 187,93 189,101 190,109 189,109 148,72 148,72 178))
Figure
Geometry figure for visual-st-clusterkmeans-02

Example: Clustering a preaggregated planetary-scale data population dataset using 3D clustering and weighting. Identify at least 20 regions based on Kontur Population Data that do not span more than 3000 km from their center:

Code
CREATE TABLE kontur_population_3000km_clusters AS
SELECT
    geom,
    ST_ClusterKMeans(
        ST_Force4D(
            ST_Transform(ST_Force3D(geom), 4978),
            mvalue => population
        ),
        20,
        max_radius => 3000000
    ) OVER () AS cid
FROM kontur_population;

The clustering produces 46 regions. Clusters are centered at well-populated regions such as New York and Moscow. Greenland forms one cluster, several island clusters span the antimeridian, and cluster edges follow the Earth's curvature.

Kontur population clustered with 3000 km maximum radius.

Cluster weighted city populations on the Earth in geocentric coordinates. The maximum radius is specified in meters, while the returned geometries stay in WGS 84 for display.

Code
WITH population(place, population, geom) AS (
  VALUES
    ('Boston', 5.0, ST_SetSRID(ST_Point(-71.06, 42.36), 4326)),
    ('New York', 20.0, ST_SetSRID(ST_Point(-74.01, 40.71), 4326)),
    ('London', 15.0, ST_SetSRID(ST_Point(-0.13, 51.51), 4326)),
    ('Paris', 11.0, ST_SetSRID(ST_Point(2.35, 48.86), 4326)),
    ('Osaka', 19.0, ST_SetSRID(ST_Point(135.50, 34.69), 4326)),
    ('Tokyo', 37.0, ST_SetSRID(ST_Point(139.69, 35.68), 4326)),
    ('Melbourne', 5.0, ST_SetSRID(ST_Point(144.96, -37.81), 4326)),
    ('Sydney', 5.0, ST_SetSRID(ST_Point(151.21, -33.87), 4326))
), clustered AS (
  SELECT place,
         geom,
         ST_ClusterKMeans(
           ST_Force4D(
             ST_Transform(ST_Force3D(geom), 4978),
             mvalue => population
           ),
           4,
           max_radius => 3000000
         ) OVER (ORDER BY place) AS cid
  FROM population
)
SELECT cid,
       string_agg(place, ', ' ORDER BY place) AS places,
       ST_Collect(geom ORDER BY place) AS cluster_geom
FROM clustered
GROUP BY cid
ORDER BY cid;
Вивід растрових зображень
0 | Melbourne, Sydney | MULTIPOINT((144.96 -37.81),(151.21 -33.87))
1 | Boston, New York | MULTIPOINT((-71.06 42.36),(-74.01 40.71))
2 | Osaka, Tokyo | MULTIPOINT((135.5 34.69),(139.69 35.68))
3 | London, Paris | MULTIPOINT((-0.13 51.51),(2.35 48.86))
Figure
Geometry figure for visual-st-clusterkmeans-03

Назва

ST_ClusterWithin — Агрегатна функція, яка групує геометрії за відстанню розділення.

Короткий огляд

geometry[] ST_ClusterWithin(geometry set g, float8 distance);

Опис

Агрегатна функція, яка повертає масив GeometryCollections, де кожна колекція є кластером, що містить деякі вхідні геометрії. Кластеризація розділяє вхідні геометрії на набори, в яких кожна геометрія знаходиться в межах заданої відстані від принаймні однієї іншої геометрії в тому самому кластері. Відстані є декартовими відстанями в одиницях SRID.

ST_ClusterWithin еквівалентний виконанню ST_ClusterDBSCAN з minpoints => 0.

Доступність: 2.2.0

This method supports Circular Strings and Curves.

Приклади

Code
WITH testdata AS
  (SELECT unnest(ARRAY['LINESTRING (0 0,1 1)'::geometry,
               'LINESTRING (5 5,4 4)'::geometry,
               'LINESTRING (6 6,7 7)'::geometry,
               'LINESTRING (0 0,-1 -1)'::geometry,
               'POLYGON ((0 0,4 0,4 4,0 4,0 0))'::geometry]) AS geom)

SELECT unnest(ST_ClusterWithin(geom, 1.4)) FROM testdata;
Вивід растрових зображень
GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),LINESTRING(5 5,4 4),LINESTRING(0 0,-1 -1),POLYGON((0 0,4 0,4 4,0 4,0 0)))
GEOMETRYCOLLECTION(LINESTRING(6 6,7 7))
Figure
Geometry figure for visual-st-clusterwithin-01

Назва

ST_ClusterWithinWin — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.

Короткий огляд

integer ST_ClusterWithinWin(geometry winset geom, float8 distance);

Опис

Віконна функція, яка повертає номер кластера для кожної вхідної геометрії. Кластеризація розділяє геометрії на набори, в яких кожна геометрія знаходиться в межах заданої відстані distance від принаймні однієї іншої геометрії в тому самому кластері. Відстані є декартовими відстанями в одиницях SRID.

ST_ClusterWithinWin еквівалентно виконанню ST_ClusterDBSCAN з minpoints => 0.

Доступність: 3.4.0

This method supports Circular Strings and Curves.

Приклади

Code
WITH testdata AS (
  SELECT id, geom::geometry FROM (
  VALUES  (1, 'LINESTRING (0 0,1 1)'),
          (2, 'LINESTRING (5 5,4 4)'),
          (3, 'LINESTRING (6 6,7 7)'),
          (4, 'LINESTRING (0 0,-1 -1)'),
          (5, 'POLYGON ((0 0,4 0,4 4,0 4,0 0))')) AS t(id, geom)
)
SELECT id,
  geom,
  ST_ClusterWithinWin(geom, 1.4) OVER () AS cluster
FROM testdata;
Вивід растрових зображень
id |           st_astext            | cluster
----+--------------------------------+---------
  1 | LINESTRING(0 0,1 1)            |       0
  2 | LINESTRING(5 5,4 4)            |       0
  3 | LINESTRING(6 6,7 7)            |       1
  4 | LINESTRING(0 0,-1 -1)          |       0
  5 | POLYGON((0 0,4 0,4 4,0 4,0 0)) |       0
Figure
Geometry figure for visual-st-clusterwithinwin-01

7.18. Функції обмежувальної рамки

Анотація

Ці функції створюють або оперують обмежувальними рамками. Вони також можуть надавати та приймати значення геометрії, використовуючи автоматичні або явні приведення типів.

Див. також Розділ 13.7, «Функції PostGIS Box».

  • Box2D — Повертає BOX2D, що представляє 2D розмір геометрії.
  • Box3D — Повертає BOX3D, що представляє 3D-розмір геометрії.
  • ST_EstimatedExtent — Повертає приблизний діапазон просторової таблиці.
  • ST_Expand — Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.
  • ST_Extent — Агрегатна функція, яка повертає обмежувальну рамку геометрій.
  • ST_3DExtent — Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_MakeBox2D — Створює BOX2D, визначений двома 2D точковими геометріями.
  • ST_3DMakeBox — Створює BOX3D, визначений двома геометріями 3D-точок.
  • ST_XMax — Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.
  • ST_XMin — Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.
  • ST_YMax — Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.
  • ST_YMin — Повертає мінімальне значення Y для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZMax — Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZMin — Повертає мінімальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_XSize — Returns the X size of a 2D or 3D bounding box or a geometry.
  • ST_YSize — Returns the Y size of a 2D or 3D bounding box or a geometry.
  • ST_ZSize — Returns the Z size of a 2D or 3D bounding box or a geometry.
  • ST_MMin — Повертає M-мінімум геометрії.
  • ST_MMax — Returns the M maxima of a geometry.
  • ST_MSize — Returns the M size of a geometry.

Назва

Box2D — Повертає BOX2D, що представляє 2D розмір геометрії.

Короткий огляд

box2d Box2D(geometry geom);

Опис

Повертає box2d, що представляє 2D розмір геометрії.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT Box2D('LINESTRING(1 2,3 4,5 6)'::geometry);
Вивід растрових зображень
BOX(1 2,5 6)
Figure
Geometry figure for visual-box2d-01
Code
SELECT Box2D('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'::geometry);
Вивід растрових зображень
BOX(220186.99512189245 150406,220288.24878054656 150506.12682932706)
Figure
Geometry figure for visual-box2d-02

Див. також

Box3D, ST_GeomFromText


Назва

Box3D — Повертає BOX3D, що представляє 3D-розмір геометрії.

Короткий огляд

box3d Box3D(geometry geom);

Опис

Повертає box3d, що представляє 3D-розмір геометрії.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT Box3D('LINESTRING(1 2 3,3 4 5,5 6 5)'::geometry);
Вивід растрових зображень
BOX3D(1 2 3,5 6 5)
Figure
Geometry figure for visual-box3d-01
Code
SELECT Box3D('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)'::geometry);
Вивід растрових зображень
BOX3D(220186.99512189245 150406 1,220288.24878054656 150506.12682932706 1)
Figure
Geometry figure for visual-box3d-02

Див. також

Box2D, ST_GeomFromEWKT


Назва

ST_EstimatedExtent — Повертає приблизний діапазон просторової таблиці.

Короткий огляд

box2d ST_EstimatedExtent(text schema_name, text table_name, text geocolumn_name, boolean parent_only);

box2d ST_EstimatedExtent(text schema_name, text table_name, text geocolumn_name);

box2d ST_EstimatedExtent(text table_name, text geocolumn_name);

Опис

Повертає приблизний діапазон просторової таблиці у вигляді box2d. Якщо не вказано, використовується поточна схема. Приблизний діапазон береться зі статистики стовпця геометрії. Зазвичай це набагато швидше, ніж обчислення точного діапазону таблиці за допомогою ST_Extent або ST_3DExtent.

За замовчуванням також використовуються статистичні дані, зібрані з дочірніх таблиць (таблиць з INHERITS), якщо вони доступні. Якщо parent_only встановлено на TRUE, використовуються тільки статистичні дані для заданої таблиці, а дочірні таблиці ігноруються.

Для PostgreSQL >= 8.0.0 статистика збирається за допомогою VACUUM ANALYZE, а результат буде приблизно 95% від фактичного. Для PostgreSQL <8.0.0 статистика збирається за допомогою update_geometry_stats(), а результат є точним.

[Примітка]

За відсутності статистики (порожня таблиця або не викликано ANALYZE) ця функція повертає NULL. До версії 1.5.4 замість цього виникало виключення.

[Примітка]

Для імен таблиць та/або просторів імен, що містять спеціальні символи та лапки, може знадобитися спеціальна обробка. Користувач зазначає: "Для схем і таблиць використовуйте правила екранування ідентифікаторів, щоб створити рядок у подвійних лапках, а потім видаліть перший і останній символи подвійних лапок. Для стовпця геометрії передайте як є"

Доступність: 1.0.0

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Estimated_Extent.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_EstimatedExtent('ny', 'edges', 'geom');
Вивід растрових зображень
st_estimatedextent
--------------------------------------------------
 BOX(-8877653 4912316,-8010225.5 5589284)
(1 row)
Code
SELECT ST_EstimatedExtent('feature_poly', 'geom');
Вивід растрових зображень
st_estimatedextent
---------------------------------------------------------------------
 BOX(-124.659652709961 24.6830825805664,-67.7798080444336 49.0012092590332)
(1 row)

Див. також

ST_Extent, ST_3DExtent


Назва

ST_Expand — Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.

Короткий огляд

geometry ST_Expand(geometry geom, float units_to_expand);

geometry ST_Expand(geometry geom, float dx, float dy, float dz=0, float dm=0);

box2d ST_Expand(box2d box, float units_to_expand);

box2d ST_Expand(box2d box, float dx, float dy);

box3d ST_Expand(box3d box, float units_to_expand);

box3d ST_Expand(box3d box, float dx, float dy, float dz=0);

Опис

Повертає обмежувальну рамку, розширену від обмежувальної рамки вхідних даних, або шляхом вказання єдиної відстані, на яку слід розширити рамку по обох осях, або шляхом вказання відстані розширення для кожної осі. Використовує подвійну точність. Може використовуватися для запитів відстані або для додавання фільтра обмежувальної рамки до запиту, щоб скористатися перевагами просторового індексу.

На додаток до версії ST_Expand, яка приймає та повертає геометрію, надаються варіанти, які приймають та повертають типи даних box2d та box3d.

Відстані вказані в одиницях просторової системи координат вхідних даних.

ST_Expand схожий на ST_Buffer, за винятком того, що під час буферизації геометрія розширюється в усіх напрямках, а ST_Expand розширює обмежувальну рамку вздовж кожної осі.

[Примітка]

До версії 1.3 ST_Expand використовувався разом з ST_Distance для виконання індексованих запитів на відстань. Наприклад, geom &&ST_Expand('POINT(10 20)', 10) AND ST_Distance(geom, 'POINT(10 20)') <10. Це було замінено простішою та ефективнішою функцією ST_DWithin.

Доступність: 1.5.0 поведінка змінена на виведення координат подвійної точності замість float4.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Покращено: додано підтримку версії 2.3.0 для розширення поля на різну величину в різних вимірах.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

[Примітка]

У наведених нижче прикладах використовується карта США National Atlas Equal Area (SRID=2163), яка є метровою проекцією

10-meter expanded box around bbox of a linestring.

Code
SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163), 10) As box2d);
Вивід растрових зображень
BOX(2312882 110666,2312990 110724)
Figure
Geometry figure for visual-st-expand-01

This example expands a 3D box by 10 meters.

Code
SELECT ST_Expand(CAST('BOX3D(778783 2951741 1,794875 2970042.61545891 10)' AS box3d), 10)
Вивід растрових зображень
BOX3D(778773 2951731 -9,794885 2970052.61545891 20)

This example renders the text representation of a 10-meter expanded box around a point geometry.

Code
SELECT ST_Expand('SRID=2163;POINT(2312980 110676)'::geometry, 10);
Вивід растрових зображень
SRID=2163;POLYGON((2312970 110666,2312970 110686,2312990 110686,2312990 110666,2312970 110666))
Figure
Geometry figure for visual-st-expand-03

Див. також

ST_Buffer, ST_DWithin, ST_SRID


Назва

ST_Extent — Агрегатна функція, яка повертає обмежувальну рамку геометрій.

Короткий огляд

box2d ST_Extent(geometry set geomfield);

Опис

Агрегатна функція, яка повертає обмежувальну рамку box2d, що обмежує набір геометрій.

Координати обмежувальної рамки знаходяться в просторовій системі координат вхідних геометрій.

ST_Extent за своєю концепцією схожий на SDO_AGGR_MBR Oracle Spatial/Locator.

[Примітка]

ST_Extent повертає прямокутники тільки з координатами X і Y, навіть для 3D-геометрій. Щоб повернути координати XYZ, використовуйте ST_3DExtent.

[Примітка]

Повернене значення box3d не містить SRID. Використовуйте ST_SetSRID, щоб перетворити його на геометрію з метаданими SRID. SRID є таким самим, як і вхідні геометрії.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

[Примітка]

У наведених нижче прикладах використовується система координат штату Массачусетс (SRID=2249)

Code
SELECT ST_Extent(geom) AS bextent FROM sometable;
Вивід растрових зображень
BOX(739651.875 2908247.25,794875.8125 2970042.75)

Return extent of each geometry category.

Code
SELECT ST_Extent(geom) as bextent
FROM sometable
GROUP BY category ORDER BY category;
Вивід растрових зображень
bextent                       |         name
----------------------------------------------------+----------------
 BOX(778783.5625 2951741.25,794875.8125 2970042.75) | A
 BOX(751315.8125 2919164.75,765202.6875 2935417.25) | B
 BOX(739651.875 2917394.75,756688.375 2935866)      | C

This example converts the extent back into a geometry and renders its extended text representation.

Code
SELECT ST_SetSRID(ST_Extent(geom), 2249) AS bextent FROM sometable;
Вивід растрових зображень
SRID=2249;POLYGON((739651.875 2908247.25,739651.875 2970042.75,794875.8125 2970042.75,
794875.8125 2908247.25,739651.875 2908247.25))
        

Назва

ST_3DExtent — Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.

Короткий огляд

box3d ST_3DExtent(geometry set geomfield);

Опис

Агрегатна функція, яка повертає обмежувальну рамку box3d(включає координату Z), що обмежує набір геометрій.

Координати обмежувальної рамки знаходяться в просторовій системі координат вхідних геометрій.

[Примітка]

Повернене значення box3d не містить SRID. Використовуйте ST_SetSRID, щоб перетворити його на геометрію з метаданими SRID. SRID є таким самим, як і вхідні геометрії.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Змінено: 2.0.0 У попередніх версіях це називалося ST_Extent3D

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
SELECT ST_3DExtent(foo.geom) As b3extent
FROM (SELECT ST_MakePoint(x, y, z) As geom
    FROM generate_series(1, 3) As x
        CROSS JOIN generate_series(1, 2) As y
        CROSS JOIN generate_series(0, 2) As Z) As foo;
Вивід растрових зображень
BOX3D(1 1 0,3 2 2)

This example returns the extent of several elevated CircularStrings.

Code
SELECT ST_3DExtent(foo.geom) As b3extent
FROM (SELECT ST_Translate(ST_Force3DZ(ST_LineToCurve(ST_Buffer(ST_Point(x, y), 1))), 0, 0, z) As geom
    FROM generate_series(1, 3) As x
        CROSS JOIN generate_series(1, 2) As y
        CROSS JOIN generate_series(0, 2) As Z) As foo;
Вивід растрових зображень
BOX3D(0 0 0,4 3 2)

Див. також

ST_Extent, ST_Force3DZ, ST_SetSRID


Назва

ST_MakeBox2D — Створює BOX2D, визначений двома 2D точковими геометріями.

Короткий огляд

box2d ST_MakeBox2D(geometry pointLowLeft, geometry pointUpRight);

Опис

Створює box2d, визначений двома геометріями Point. Це корисно для виконання запитів діапазону.

Приклади

Return all features that fall within or partly reside in a US National Atlas coordinate bounding box. It is assumed here that the geometries are stored with SRID=2163 (US National Atlas equal area).

Code
SELECT feature_id, feature_name, geom
FROM features
WHERE geom && ST_SetSRID(
  ST_MakeBox2D(
    ST_Point(-989502.1875, 528439.5625),
    ST_Point(-987121.375, 529933.1875)
  ),
  2163
);

Див. також

ST_Point, ST_SetSRID, ST_SRID


Назва

ST_3DMakeBox — Створює BOX3D, визначений двома геометріями 3D-точок.

Короткий огляд

box3d ST_3DMakeBox(geometry point3DLowLeftBottom, geometry point3DUpRightTop);

Опис

Створює box3d, визначений двома геометріями 3D Point.

Ця функція підтримує 3D і не знижує z-індекс.

Змінено: 2.0.0 У попередніх версіях це називалося ST_MakeBox3D

Приклади

Code
SELECT ST_3DMakeBox(ST_MakePoint(-989502.1875, 528439.5625, 10),
    ST_MakePoint(-987121.375 , 529933.1875, 10))
Вивід растрових зображень
BOX3D(-989502.1875 528439.5625 10,-987121.375 529933.1875 10)

Див. також

ST_MakePoint, ST_SetSRID, ST_SRID


Назва

ST_XMax — Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.

Короткий огляд

float ST_XMax(box3d aGeomorBox2DorBox3D);

Опис

Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_XMax('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
4
Code
SELECT ST_XMax('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
5
Figure
Geometry figure for visual-st-xmax-02
Code
SELECT ST_XMax(CAST('BOX(-3 2,3 4)' AS box2d));
Вивід растрових зображень
3

Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D.

Code
SELECT ST_XMax('LINESTRING(1 3,5 6)');
Вивід растрових зображень
ERROR: BOX3D parser - doesn't start with BOX3D(
Code
SELECT ST_XMax('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'::geometry);
Вивід растрових зображень
220288.248780547
Figure
Geometry figure for visual-st-xmax-05

Назва

ST_XMin — Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.

Короткий огляд

float ST_XMin(box3d aGeomorBox2DorBox3D);

Опис

Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_XMin('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
1
Code
SELECT ST_XMin('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
1
Figure
Geometry figure for visual-st-xmin-02
Code
SELECT ST_XMin(CAST('BOX(-3 2,3 4)' AS box2d));
Вивід растрових зображень
-3

Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D.

Code
SELECT ST_XMin('LINESTRING(1 3,5 6)');
Вивід растрових зображень
ERROR: BOX3D parser - doesn't start with BOX3D(
Code
SELECT ST_XMin('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'::geometry);
Вивід растрових зображень
220186.995121892
Figure
Geometry figure for visual-st-xmin-05

Назва

ST_YMax — Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.

Короткий огляд

float ST_YMax(box3d aGeomorBox2DorBox3D);

Опис

Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_YMax('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
5
Code
SELECT ST_YMax('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
6
Figure
Geometry figure for visual-st-ymax-02
Code
SELECT ST_YMax(CAST('BOX(-3 2,3 4)' AS box2d));
Вивід растрових зображень
4

Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D.

Code
SELECT ST_YMax('LINESTRING(1 3,5 6)');
Вивід растрових зображень
ERROR: BOX3D parser - doesn't start with BOX3D(
Code
SELECT ST_YMax('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'::geometry);
Вивід растрових зображень
150506.126829327
Figure
Geometry figure for visual-st-ymax-05

Назва

ST_YMin — Повертає мінімальне значення Y для 2D або 3D обмежувальної рамки або геометрії.

Короткий огляд

float ST_YMin(box3d aGeomorBox2DorBox3D);

Опис

Повертає мінімальне значення Y 2D або 3D обмежувальної рамки або геометрії.

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_YMin('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
2
Code
SELECT ST_YMin('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
3
Figure
Geometry figure for visual-st-ymin-02
Code
SELECT ST_YMin(CAST('BOX(-3 2,3 4)' AS box2d));
Вивід растрових зображень
2

Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D.

Code
SELECT ST_YMin('LINESTRING(1 3,5 6)');
Вивід растрових зображень
ERROR: BOX3D parser - doesn't start with BOX3D(
Code
SELECT ST_YMin('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'::geometry);
Вивід растрових зображень
150406
Figure
Geometry figure for visual-st-ymin-05

Назва

ST_ZMax — Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії.

Короткий огляд

float ST_ZMax(box3d aGeomorBox2DorBox3D);

Опис

Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії..

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_ZMax('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
6
Code
SELECT ST_ZMax('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
7
Figure
Geometry figure for visual-st-zmax-02
Code
SELECT ST_ZMax('BOX3D(-3 2 1,3 4 1)');
Вивід растрових зображень
1

Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D.

Code
SELECT ST_ZMax('LINESTRING(1 3 4,5 6 7)');
Вивід растрових зображень
ERROR: BOX3D parser - doesn't start with BOX3D(
Code
SELECT ST_ZMax('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'::geometry);
Вивід растрових зображень
3
Figure
Geometry figure for visual-st-zmax-05

Назва

ST_ZMin — Повертає мінімальне значення Z для 2D або 3D обмежувальної рамки або геометрії.

Короткий огляд

float ST_ZMin(box3d aGeomorBox2DorBox3D);

Опис

Повертає мінімальне значення Z 2D- або 3D-обмежувальної рамки або геометрії.

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_ZMin('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
3
Code
SELECT ST_ZMin('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
4
Figure
Geometry figure for visual-st-zmin-02
Code
SELECT ST_ZMin('BOX3D(-3 2 1,3 4 1)');
Вивід растрових зображень
1

Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D.

Code
SELECT ST_ZMin('LINESTRING(1 3 4,5 6 7)');
Вивід растрових зображень
ERROR: BOX3D parser - doesn't start with BOX3D(
Code
SELECT ST_ZMin('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'::geometry);
Вивід растрових зображень
1
Figure
Geometry figure for visual-st-zmin-05

Назва

ST_XSize — Returns the X size of a 2D or 3D bounding box or a geometry.

Короткий огляд

float ST_XSize(box3d aGeomorBox2DorBox3D);

Опис

Returns the X size of a 2D or 3D bounding box or a geometry, computed as ST_XMax(aGeomorBox2DorBox3D) - ST_XMin(aGeomorBox2DorBox3D).

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Availability: 3.7.0

Приклади

Code
SELECT ST_XSize('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
3
Code
SELECT ST_XSize('LINESTRING(1 3,5 6)'::geometry);
Вивід растрових зображень
4
Figure
Geometry figure for visual-st-xsize-02

Див. також

ST_XMin, ST_XMax, ST_YSize, ST_ZSize, ST_MSize


Назва

ST_YSize — Returns the Y size of a 2D or 3D bounding box or a geometry.

Короткий огляд

float ST_YSize(box3d aGeomorBox2DorBox3D);

Опис

Returns the Y size of a 2D or 3D bounding box or a geometry, computed as ST_YMax(aGeomorBox2DorBox3D) - ST_YMin(aGeomorBox2DorBox3D).

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Availability: 3.7.0

Приклади

Code
SELECT ST_YSize('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
3
Code
SELECT ST_YSize('LINESTRING(1 3,5 6)'::geometry);
Вивід растрових зображень
3
Figure
Geometry figure for visual-st-ysize-02

Див. також

ST_YMin, ST_YMax, ST_XSize, ST_ZSize, ST_MSize


Назва

ST_ZSize — Returns the Z size of a 2D or 3D bounding box or a geometry.

Короткий огляд

float ST_ZSize(box3d aGeomorBox2DorBox3D);

Опис

Returns the Z size of a 2D or 3D bounding box or a geometry, computed as ST_ZMax(aGeomorBox2DorBox3D) - ST_ZMin(aGeomorBox2DorBox3D).

[Примітка]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Availability: 3.7.0

Приклади

Code
SELECT ST_ZSize('BOX3D(1 2 3,4 5 6)');
Вивід растрових зображень
3
Code
SELECT ST_ZSize('LINESTRING(1 3 4,5 6 7)'::geometry);
Вивід растрових зображень
3
Figure
Geometry figure for visual-st-zsize-02

Див. також

ST_ZMin, ST_ZMax, ST_XSize, ST_YSize, ST_MSize


Назва

ST_MMin — Повертає M-мінімум геометрії.

Короткий огляд

float ST_MMin(geometry geom);

Опис

Returns the M minima of a geometry, or null if the geometry lacks M values.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_MMin('POINT M (1 2 3)');
Вивід растрових зображень
3

Назва

ST_MMax — Returns the M maxima of a geometry.

Короткий огляд

float ST_MMax(geometry geom);

Опис

Returns the M maxima of a geometry, or null if the geometry lacks M values.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT ST_MMax('POINT M (1 2 3)');
Вивід растрових зображень
3

Назва

ST_MSize — Returns the M size of a geometry.

Короткий огляд

float ST_MSize(geometry geom);

Опис

Returns the M size of a geometry, computed as ST_MMax(geom) - ST_MMin(geom), or null if the geometry lacks M values.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Availability: 3.7.0

Приклади

Code
SELECT ST_MSize('LINESTRING M (1 2 3,4 6 8)');
Вивід растрових зображень
5
Figure
Geometry figure for visual-st-msize-01

Див. також

ST_MMin, ST_MMax, ST_XSize, ST_YSize, ST_ZSize

7.19. Лінійне посилання

Анотація

Ці функції вимірюють і визначають місце розташування подій уздовж лінійних об'єктів. Вони підтримують класичний робочий процес лінійного посилання, що полягає у вираженні позицій у вигляді дробів або вимірів уздовж маршрутів і перетворенні цих вимірів назад у просторові координати.

  • ST_LineInterpolatePoint — Повертає точку, інтерпольовану вздовж лінії в дробовому місці.
  • ST_3DLineInterpolatePoint — Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці.
  • ST_LineInterpolatePoints — Повертає точки, інтерпольовані вздовж лінії з дробовим інтервалом.
  • ST_LineLocatePoint — Повертає дробове значення відстані найближчої точки на лінії до заданої точки.
  • ST_LineSubstring — Повертає частину лінії між двома дробовими позиціями.
  • ST_LocateAlong — Повертає точку (точки) на геометрії, яка відповідає значенню міри.
  • ST_LocateBetween — Повертає частини геометрії, які відповідають діапазону вимірювання.
  • ST_LocateBetweenElevations — Повертає частини геометрії, що лежать у діапазоні висоти (Z).
  • ST_InterpolatePoint — Повертає інтерпольоване значення геометрії, найближчої до точки.
  • ST_3DInterpolatePoint — Returns the interpolated measure of a geometry closest to a point in 3D.
  • ST_AddMeasure — Інтерполює виміри вздовж лінійної геометрії.

Назва

ST_LineInterpolatePoint — Повертає точку, інтерпольовану вздовж лінії в дробовому місці.

Короткий огляд

geometry ST_LineInterpolatePoint(geometry a_linestring, float8 a_fraction);

geography ST_LineInterpolatePoint(geography a_linestring, float8 a_fraction, boolean use_spheroid = true);

Опис

Повертає точку, інтерпольовану вздовж лінії в дробовому місці. Перший аргумент повинен бути LINESTRING. Другий аргумент — це число з плаваючою комою від 0 до 1, що позначає дрібну частину довжини лінії, де має бути розташована точка. Значення Z і M інтерполюються, якщо вони є.

Див. ST_LineLocatePointдля обчислення найближчого до точки місця розташування лінії.

[Примітка]

ST_3DLineInterpolatePoint обчислює точки в 3D і інтерполює тільки значення M.

[Примітка]

Починаючи з версії 1.1.1, ця функція також інтерполює значення M і Z (якщо вони присутні), тоді як у попередніх версіях вони встановлювалися на 0,0.

Доступність: 0.8.2, підтримка Z і M додана в 1.1.1

Змінено: 2.1.0. До версії 2.0.x ця функція називалася ST_Line_Interpolate_Point.

This function supports 3d and will not drop the z-index.

Приклади

This example returns the point 20 percent along a line.

Code
SELECT ST_LineInterpolatePoint(
'LINESTRING(25 50,100 125,150 190)',
0.2);
Вивід растрових зображень
POINT(51.5974135047432 76.5974135047432)
Figure
Geometry figure for visual-st-lineinterpolatepoint-01

Середина 3D лінії:

Code
SELECT ST_LineInterpolatePoint(
'LINESTRING(1 2 3,4 5 6,6 7 8)',
0.5);
Вивід растрових зображень
POINT(3.5 4.5 5.5)
Figure
Geometry figure for visual-st-lineinterpolatepoint-02

Найближча точка на прямій до точки:

Code
SELECT ST_LineInterpolatePoint(
    line.geom,
    ST_LineLocatePoint(line.geom, 'POINT(4 3)'))
FROM (SELECT 'LINESTRING(1 2,4 5,6 7)'::geometry As geom) AS line;
Вивід растрових зображень
POINT(3 4)
Figure
Geometry figure for visual-st-lineinterpolatepoint-03

An interpolated point can be offset to the left or right of a line by using ST_OffsetCurve before interpolation. This is useful for locating an address point beside a street centerline.

Code
WITH street AS (
    SELECT 'LINESTRING(0 0, 10 0)'::geometry AS geom,
           100 AS from_num,
           200 AS to_num
)
SELECT
    ST_LineInterpolatePoint(
        ST_OffsetCurve(geom, -2),
        (160 - from_num)::float8 / (to_num - from_num)
    ) AS interpolated_offset_point
FROM street;
Вивід растрових зображень
interpolated_offset_point
---------------------------
 POINT(6 -2)
Figure
Geometry figure for visual-st-lineinterpolatepoint-04

Назва

ST_3DLineInterpolatePoint — Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці.

Короткий огляд

geometry ST_3DLineInterpolatePoint(geometry a_linestring, float8 a_fraction);

Опис

Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці. Перший аргумент повинен бути LINESTRING. Другий аргумент — це число з плаваючою комою від 0 до 1, що позначає місце розташування точки як дробу довжини лінії. Якщо значення M присутнє, воно інтерполюється.

[Примітка]

ST_LineInterpolatePoint обчислює точки в 2D, а потім інтерполює значення для Z і M, тоді як ця функція обчислює точки в 3D і інтерполює тільки значення M.

Доступність: 3.0.0

This function supports 3d and will not drop the z-index.

Приклади

Точка повернення 20% вздовж 3D лінії

Code
SELECT ST_3DLineInterpolatePoint(
'LINESTRING(25 50 70,100 125 90,150 190 200)',
0.20);
Вивід растрових зображень
POINT Z (59.06758929108215 84.06758929108216 79.0846904776219)
Figure
Geometry figure for visual-st-3dlineinterpolatepoint-01

Назва

ST_LineInterpolatePoints — Повертає точки, інтерпольовані вздовж лінії з дробовим інтервалом.

Короткий огляд

geometry ST_LineInterpolatePoints(geometry a_linestring, float8 a_fraction, boolean repeat);

geography ST_LineInterpolatePoints(geography a_linestring, float8 a_fraction, boolean use_spheroid = true, boolean repeat = true);

Опис

Повертає одну або кілька точок, інтерпольованих вздовж лінії з дробовим інтервалом. Перший аргумент повинен бути LINESTRING. Другий аргумент — це float8 від 0 до 1, що представляє відстань між точками як дріб довжини лінії. Якщо третій аргумент має значення false, буде побудовано не більше однієї точки (що еквівалентно ST_LineInterpolatePoint)

Якщо результат має нуль або один пункт, він повертається як POINT. Якщо він має два або більше пунктів, він повертається як MULTIPOINT.

Доступність: 2.5.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

This example returns points every 20 percent along a two-dimensional line.

Code
SELECT ST_LineInterpolatePoints(
'LINESTRING(25 50,100 125,150 190)',
0.20);
Вивід растрових зображень
MULTIPOINT((51.5974135047432 76.5974135047432),(78.1948270094864 103.194827009486),(104.132163186446 130.37181214238),(127.066081593223 160.18590607119),(150 190))
Figure
Geometry figure for visual-st-lineinterpolatepoints-01

Назва

ST_LineLocatePoint — Повертає дробове значення відстані найближчої точки на лінії до заданої точки.

Короткий огляд

float8 ST_LineLocatePoint(geometry a_linestring, geometry a_point);

float8 ST_LineLocatePoint(geography a_linestring, geography a_point, boolean use_spheroid = true);

Опис

Повертає число з плаваючою комою в діапазоні від 0 до 1, що представляє розташування найближчої точки на LineString до заданої точки Point, як частку довжини 2d line.

Ви можете використовувати повернуте місце розташування для вилучення точки (ST_LineInterpolatePoint) або підрядка (ST_LineSubstring).

Це корисно для наближення кількості адрес

Доступність: 1.1.0

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Line_Locate_Point.

Приклади

This example approximates the street number of a house by locating the closest point on a street line. The subquery generates sample house and street data, and ST_DWithin excludes houses that are too far from the street.

Code
SELECT house_loc As as_text_house_loc,
    startstreet_num +
        CAST( (endstreet_num - startstreet_num)
            * ST_LineLocatePoint(street_line, house_loc) As integer) As street_num
FROM
(SELECT 'LINESTRING(1 2,3 4)'::geometry As street_line,
    ST_Point(x*1.01, y*1.03) As house_loc, 10 As startstreet_num,
        20 As endstreet_num
FROM generate_series(1, 3) x CROSS JOIN generate_series(2, 4) As y)
As foo
WHERE ST_DWithin(street_line, house_loc, 0.2);
Вивід растрових зображень
as_text_house_loc | street_num
-------------------+------------
 POINT(1.01 2.06)  |         10
 POINT(2.02 3.09)  |         15
 POINT(3.03 4.12)  |         20
Figure
Geometry figure for visual-st-linelocatepoint-01

This example finds the closest point on a line to a point or other geometry.

Code
SELECT ST_LineInterpolatePoint(
    foo.the_line,
    ST_LineLocatePoint(foo.the_line, 'POINT(4 3)'::geometry))
FROM (SELECT 'LINESTRING(1 2,4 5,6 7)'::geometry As the_line) As foo;
Вивід растрових зображень
POINT(3 4)
Figure
Geometry figure for visual-st-linelocatepoint-02

This example locates the closest segment and point on a LineString.

Code
WITH data AS (
  SELECT
    'LINESTRING (0 0, 10 10, 20 20, 30 30)'::geometry AS line,
    'POINT(15 15.1)'::geometry AS pt
),
segments AS (
  SELECT
    s.i,
    d.pt,
    ST_MakeLine(ST_PointN(d.line, s.i), ST_PointN(d.line, s.i + 1)) AS segment
  FROM data AS d
  CROSS JOIN LATERAL generate_series(1, ST_NumPoints(d.line) - 1) AS s(i)
)
SELECT
  i AS segment_number,
  round(ST_Distance(segment, pt)::numeric, 3) AS distance,
  ST_ClosestPoint(segment, pt) AS closest_point
FROM segments
ORDER BY ST_Distance(segment, pt)
LIMIT 1;
Вивід растрових зображень
segment_number | distance |   closest_point
----------------+----------+--------------------
              2 |    0.071 | POINT(15.05 15.05)
Figure
Geometry figure for visual-st-linelocatepoint-03

Назва

ST_LineSubstring — Повертає частину лінії між двома дробовими позиціями.

Короткий огляд

geometry ST_LineSubstring(geometry a_linestring, float8 startfraction, float8 endfraction);

geography ST_LineSubstring(geography a_linestring, float8 startfraction, float8 endfraction);

Опис

Computes the line which is the section of the input line starting and ending at the given fractional locations. The first argument must be a LINESTRING. The second and third arguments are values in the range [0, 1] representing the start and end locations. For geometry inputs, the fractions are measured in 2D line length. The Z and M values are interpolated for added endpoints if present.

Якщо startfraction та endfraction мають однакове значення, це еквівалентно ST_LineInterpolatePoint.

[Примітка]

Це працює тільки з LINESTRING. Щоб використовувати на суміжних MULTILINESTRING, спочатку об'єднайте їх за допомогою ST_LineMerge.

[Примітка]

Починаючи з версії 1.1.1, ця функція інтерполює значення M і Z. У попередніх версіях Z і M встановлювалися на невизначені значення.

Покращено: 3.4.0 - Додано підтримку географії.

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Line_Substring.

Доступність: 1.1.0, підтримка Z і M додана в 1.1.1

This function supports 3d and will not drop the z-index.

Приклади

Extract the middle third of a LineString, from 0.333 to 0.666.

Code
SELECT ST_LineSubstring(
'LINESTRING (20 180,50 20,90 80,120 40,180 150)',
0.333,
0.666);
Вивід растрових зображень
LINESTRING (45.17311810399485 45.74337011202746, 50 20, 90 80, 112.97593050157862 49.36542599789519)
Figure
Geometry figure for visual-st-linesubstring-01

Якщо початкова та кінцева точки однакові, результатом є ТОЧКА.

Code
SELECT ST_LineSubstring(
'LINESTRING(25 50,100 125,150 190)',
0.333,
0.333);
Вивід растрових зображень
POINT(69.28469348539744 94.28469348539744)
Figure
Geometry figure for visual-st-linesubstring-02

Запит для розрізання LineString на секції довжиною 100 або менше. Він використовує generate_series() з CROSS JOIN LATERAL для створення еквівалента циклу FOR.

The final generated step is filtered out when the line length is an exact multiple of the requested section length.

Code
WITH data(id, geom) AS (VALUES
        ( 'A', 'LINESTRING( 0 0, 200 0)'::geometry ),
        ( 'B', 'LINESTRING( 0 100, 350 100)'::geometry ),
        ( 'C', 'LINESTRING( 0 200, 50 200)'::geometry )
    )
SELECT id, i,
       ST_LineSubstring(geom, startfrac, LEAST( endfrac, 1 )) AS geom
FROM (
    SELECT id, geom, ST_Length(geom) len, 100 sublen FROM data
    ) AS d
CROSS JOIN LATERAL (
    SELECT i, (sublen * i) / len AS startfrac,
              (sublen * (i+1)) / len AS endfrac
    FROM generate_series(0, floor( len / sublen )::integer ) AS t(i)
    WHERE (sublen * i) / len <
> 1.0
    ) AS d2;
Вивід растрових зображень
id | i |            geom
----+---+-----------------------------
 A  | 0 | LINESTRING(0 0,100 0)
 A  | 1 | LINESTRING(100 0,200 0)
 B  | 0 | LINESTRING(0 100,100 100)
 B  | 1 | LINESTRING(100 100,200 100)
 B  | 2 | LINESTRING(200 100,300 100)
 B  | 3 | LINESTRING(300 100,350 100)
 C  | 0 | LINESTRING(0 200,50 200)
Figure
Geometry figure for visual-st-linesubstring-03

Split a LineString by points by locating the points along the line, adding the 0 and 1 endpoints, and extracting substrings between adjacent locations.

Code
WITH data AS (
  SELECT 'LINESTRING(0 0, 10 0)'::geometry AS line,
         'MULTIPOINT((2 0),(5 0),(8 0))'::geometry AS points
),
fractions AS (
  SELECT 0.0 AS fraction
  UNION ALL
  SELECT 1.0
  UNION ALL
  SELECT ST_LineLocatePoint(line, (dp).geom)
  FROM data
  CROSS JOIN LATERAL ST_Dump(points) AS dp
),
ordered AS (
  SELECT DISTINCT fraction
  FROM fractions
),
segments AS (
  SELECT fraction AS start_fraction,
         lead(fraction) OVER (ORDER BY fraction) AS end_fraction
  FROM ordered
)
SELECT row_number() OVER (ORDER BY start_fraction) AS segment_id,
       ST_LineSubstring(line, start_fraction, end_fraction) AS geom
FROM data
CROSS JOIN segments
WHERE end_fraction IS NOT NULL
  AND start_fraction <
> end_fraction
ORDER BY start_fraction;
Вивід растрових зображень
segment_id |         geom
------------+----------------------
          1 | LINESTRING(0 0,2 0)
          2 | LINESTRING(2 0,5 0)
          3 | LINESTRING(5 0,8 0)
          4 | LINESTRING(8 0,10 0)
Figure
Geometry figure for visual-st-linesubstring-04

Заходи з реалізації географії вздовж сфероїда, геометрія вздовж лінії

Code
SELECT ST_LineSubstring(
'LINESTRING(-118.2436 34.0522,-71.0570 42.3611)'::geography,
0.333,
0.666) AS geog_sub,
ST_LineSubstring(
    'LINESTRING(-118.2436 34.0522,-71.0570 42.3611)'::geometry,
    0.333,
    0.666) AS geom_sub;
Вивід растрових зображень
-[ RECORD 1 ]----------
geog_sub | LINESTRING(-103.911641 38.931128,-87.941787 41.831072)
geom_sub | LINESTRING(-102.530462 36.819064,-86.817324 39.585927)
Figure
Geometry figure for visual-st-linesubstring-05

For geometry inputs, the fractional locations are based on the 2D length of the line, even when the input has Z values. The resulting Z values are interpolated along the selected 2D location.

Code
WITH data AS (
  SELECT 'LINESTRING Z (0 0 0,0 2 5,0 10 10)'::geometry AS geom
)
SELECT ST_Length(geom) AS length_2d,
       ST_3DLength(geom) AS length_3d,
       ST_LineSubstring(geom, 0, 0.5) AS substring
FROM data;
Вивід растрових зображень
length_2d |    length_3d     |              substring
-----------+------------------+-------------------------------------
        10 | 14.819145939191106 | LINESTRING Z (0 0 0,0 2 5,0 5 6.875)
Figure
Geometry figure for visual-st-linesubstring-06

Назва

ST_LocateAlong — Повертає точку (точки) на геометрії, яка відповідає значенню міри.

Короткий огляд

geometry ST_LocateAlong(geometry geom_with_measure, float8 measure, float8 offset = 0);

Опис

Повертає місцезнаходження вздовж виміряної геометрії, яке має задані значення вимірювання. Результатом є точка або багатоточка. Полігональні вхідні дані не підтримуються.

Якщо вказано offset, результат буде зміщений вліво або вправо від лінії введення на вказану відстань. Позитивне зміщення буде вліво, а негативне — вправо.

[Примітка]

Використовуйте цю функцію тільки для лінійних геометрій з компонентом M

Семантика визначається стандартом ISO/IEC 13249-3 SQL/MM Spatial.

Доступність: 1.1.0 під старою назвою ST_Locate_Along_Measure.

Змінено: 2.0.0 у попередніх версіях це називалося ST_Locate_Along_Measure.

This function supports M coordinates.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1.13

Приклади

Code
SELECT ST_LocateAlong(
'MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))'::geometry,
3);
Вивід растрових зображень
MULTIPOINT M ((1 2 3),(9 4 3),(1 2 3))
Figure
Geometry figure for visual-st-locatealong-01

Назва

ST_LocateBetween — Повертає частини геометрії, які відповідають діапазону вимірювання.

Короткий огляд

geometry ST_LocateBetween(geometry geom, float8 measure_start, float8 measure_end, float8 offset = 0);

Опис

Повернути геометрію (колекцію) з частинами виміряної геометрії вхідних даних, які відповідають заданому діапазону вимірювання (включно).

Якщо вказано offset, результат буде зміщений вліво або вправо від вхідної лінії на вказану відстань. Позитивне зміщення буде вліво, а негативне — вправо.

Обрізка не опуклого полігону може призвести до некоректної геометрії.

Семантика визначається стандартом ISO/IEC 13249-3 SQL/MM Spatial.

Доступність: 1.1.0 під старою назвою ST_Locate_Between_Measures.

Змінено: 2.0.0 — у попередніх версіях ця функція називалася ST_Locate_Between_Measures.Змінено: 2.0.0 — у попередніх версіях ця функція називалася ST_Locate_Between_Measures.

Покращено: 3.0.0 - додано підтримку POLYGON, TIN, TRIANGLE.

This function supports M coordinates.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1

Приклади

Code
SELECT ST_LocateBetween(
'MULTILINESTRING M ((1 2 3,3 4 2,9 4 3),(1 2 3,5 4 5))'::geometry,
1.5,
3);
Вивід растрових зображень
GEOMETRYCOLLECTION M (LINESTRING M (1 2 3,3 4 2,9 4 3),POINT M (1 2 3))
Figure
Geometry figure for visual-st-locatebetween-01

Extract the section between measures 2 and 8, offset to the left. Because the clipped line and the offset result share the same coordinate space, this example is intended for a single overlay panel rather than separate side-by-side figures.

Code
SELECT ST_LocateBetween(
ST_AddMeasure(
    'LINESTRING (20 180,50 20,100 120,180 20)',
    0,
    10),
2,
8,
20);
Вивід растрових зображень
MULTILINESTRING((54.49835 104.53427,58.700561 82.122481,82.111456 128.944272,84.248937 132.324934,87.01637 135.21267,90.303073 137.491987,93.977598 139.071724,97.892984 139.888702,101.892639 139.910247,105.816599 139.135495,109.507928 137.595434,112.818995 135.351657,115.617376 132.493901,145.310173 95.377905))
Figure
Geometry figure for visual-st-locatebetween-02

Назва

ST_LocateBetweenElevations — Повертає частини геометрії, що лежать у діапазоні висоти (Z).

Короткий огляд

geometry ST_LocateBetweenElevations(geometry geom, float8 elevation_start, float8 elevation_end);

Опис

Повертає геометрію (колекцію) з частинами геометрії, що лежать у діапазоні висоти (Z).

Обрізка не опуклого полігону може призвести до некоректної геометрії.

Доступність: 1.4.0

Покращено: 3.0.0 - додано підтримку POLYGON, TIN, TRIANGLE.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_LocateBetweenElevations(
'LINESTRING(1 2 3,4 5 6)'::geometry,
2,
4);
Вивід растрових зображень
MULTILINESTRING Z ((1 2 3,2 3 4))
Figure
Geometry figure for visual-st-locatebetweenelevations-01
Code
SELECT ST_LocateBetweenElevations(
'LINESTRING(1 2 6,4 5 -1,7 8 9)',
6,
9) As ewelev;
Вивід растрових зображень
GEOMETRYCOLLECTION Z (POINT Z (1 2 6),LINESTRING Z (6.1 7.1 6,7 8 9))
Figure
Geometry figure for visual-st-locatebetweenelevations-02

Див. також

ST_Dump, ST_LocateBetween


Назва

ST_InterpolatePoint — Повертає інтерпольоване значення геометрії, найближчої до точки.

Короткий огляд

float8 ST_InterpolatePoint(geometry linear_geom_with_measure, geometry point);

Опис

Повертає інтерпольоване значення вимірювання лінійної геометрії в місці, найближчому до заданої точки.

[Примітка]

Використовуйте цю функцію тільки для лінійних геометрій з компонентом M

Доступність: 2.0.0

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_InterpolatePoint(
'LINESTRING M (0 0 0,10 0 20)',
'POINT(5 5)');
Вивід растрових зображень
10
Figure
Geometry figure for visual-st-interpolatepoint-01

Назва

ST_3DInterpolatePoint — Returns the interpolated measure of a geometry closest to a point in 3D.

Короткий огляд

float8 ST_3DInterpolatePoint(geometry linear_geom_with_measure, geometry point);

Опис

Returns the interpolated measure value of a linear ZM geometry at the location closest to the given point, using 3D (XYZ) distance for the projection. Use this function when the geometry has significant Z variation, such as flight trajectories, where ST_InterpolatePoint would give incorrect results by ignoring the Z dimension.

[Примітка]

The line must have both Z and M dimensions. The point should have a Z dimension.

Availability: 3.7.0

This function supports 3d and will not drop the z-index.

Приклади

This example interpolates on a line rising diagonally in Z, using a point at the 3D midpoint.

Code
SELECT ST_3DInterpolatePoint(
'LINESTRING ZM (0 0 0 0,10 0 10 20)',
'POINT Z (5 0 5)');
Вивід растрових зображень
10
Figure
Geometry figure for visual-st-3dinterpolatepoint-01

This example uses a vertical line with zero XY extent, where 3D projection works but 2D projection does not.

Code
SELECT ST_3DInterpolatePoint(
'LINESTRING ZM (0 0 0 0,0 0 10 100)',
'POINT Z (5 5 5)');
Вивід растрових зображень
50
Figure
Geometry figure for visual-st-3dinterpolatepoint-02

Назва

ST_AddMeasure — Інтерполює виміри вздовж лінійної геометрії.

Короткий огляд

geometry ST_AddMeasure(geometry geom_mline, float8 measure_start, float8 measure_end);

Опис

Повертає похідну геометрію з лінійно інтерпольованими значеннями вимірювання між початковою та кінцевою точками. Якщо геометрія не має вимірювального виміру, він додається. Якщо геометрія має вимірювальний вимір, він перезаписується новими значеннями. Підтримуються лише LINESTRINGS та MULTILINESTRINGS.

Доступність: 1.5.0

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT ST_AddMeasure(
'LINESTRING(1 0,2 0,4 0)',
1,
4) As ewelev;
Вивід растрових зображень
LINESTRING M (1 0 1,2 0 2,4 0 4)
Figure
Geometry figure for visual-st-addmeasure-01
Code
SELECT ST_AddMeasure(
'LINESTRING(1 0 4,2 0 4,4 0 4)',
10,
40) As ewelev;
Вивід растрових зображень
LINESTRING ZM (1 0 4 10,2 0 4 20,4 0 4 40)
Figure
Geometry figure for visual-st-addmeasure-02
Code
SELECT ST_AddMeasure(
'LINESTRINGM(1 0 4, 2 0 4, 4 0 4)',
10,
40) As ewelev;
Вивід растрових зображень
LINESTRING M (1 0 10,2 0 20,4 0 40)
Figure
Geometry figure for visual-st-addmeasure-03
Code
SELECT ST_AddMeasure(
'MULTILINESTRINGM((1 0 4, 2 0 4, 4 0 4),(1 0 4, 2 0 4, 4 0 4))',
10,
70) As ewelev;
Вивід растрових зображень
MULTILINESTRING M ((1 0 10,2 0 20,4 0 40),(1 0 40,2 0 50,4 0 70))
Figure
Geometry figure for visual-st-addmeasure-04

7.20. Функції траєкторії

Анотація

Ці функції підтримують роботу з траєкторіями. Траєкторія — це лінійна геометрія зі зростаючими значеннями (значення M) на кожній координаті. Просторово-часові дані можна моделювати, використовуючи відносні часи (наприклад, епоху) як значення вимірювань.

  • ST_IsValidTrajectory — Перевіряє, чи є геометрія дійсною траєкторією.
  • ST_ClosestPointOfApproach — Повертає міру в найближчій точці зближення двох траєкторій.
  • ST_DistanceCPA — Повертає відстань між найближчою точкою зближення двох траєкторій.
  • ST_CPAWithin — Перевіряє, чи найближча точка зближення двох траєкторій знаходиться в межах заданої відстані.

Назва

ST_IsValidTrajectory — Перевіряє, чи є геометрія дійсною траєкторією.

Короткий огляд

boolean ST_IsValidTrajectory(geometry line);

Опис

Перевіряє, чи геометрія кодує дійсну траєкторію. Дійсна траєкторія представлена як LINESTRING з вимірами (значеннями M). Значення вимірів повинні збільшуватися від кожної вершини до наступної.

Очікуються дійсні траєкторії як вхідні дані для просторово-часових функцій, таких як ST_ClosestPointOfApproach

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

Приклади

This example constructs a valid trajectory.

Code
SELECT ST_IsValidTrajectory(ST_MakeLine(ST_MakePointM(0, 0, 1),
ST_MakePointM(0, 1, 2)));
Вивід растрових зображень
t

This example constructs an invalid trajectory.

Code
SELECT ST_IsValidTrajectory(ST_MakeLine(ST_MakePointM(0, 0, 1), ST_MakePointM(0, 1, 0)));
Вивід растрових зображень
NOTICE:  Measure of vertex 1 (0) not bigger than measure of vertex 0 (1)
f

Див. також

ST_ClosestPointOfApproach


Назва

ST_ClosestPointOfApproach — Повертає міру в найближчій точці зближення двох траєкторій.

Короткий огляд

float8 ST_ClosestPointOfApproach(geometry track1, geometry track2);

Опис

Повертає найменшу величину, при якій точки, інтерпольовані вздовж заданих траєкторій, знаходяться на найменшій відстані одна від одної.

Вхідні дані повинні бути дійсними траєкторіями, перевіреними за допомогою ST_IsValidTrajectory. Якщо траєкторії не перетинаються в діапазонах M, повертається значення Null.

Щоб отримати фактичні точки за обчисленим виміром, використовуйте ST_LocateAlong.

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

Приклади

Return the time in which two objects moving between 10:00 and 11:00 are closest to each other and their distance at that point.

Code
WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0,10 0 5)'::geometry,
    extract(epoch from timestamp '2015-05-26 10:00' AT TIME ZONE 'UTC'),
    extract(epoch from timestamp '2015-05-26 11:00' AT TIME ZONE 'UTC')
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10,12 1 2)'::geometry,
    extract(epoch from timestamp '2015-05-26 10:00' AT TIME ZONE 'UTC'),
    extract(epoch from timestamp '2015-05-26 11:00' AT TIME ZONE 'UTC')
  ) b
), cpa AS (
  SELECT ST_ClosestPointOfApproach(a, b) m FROM inp
), points AS (
  SELECT ST_GeometryN(ST_LocateAlong(a, m), 1) pa,
         ST_GeometryN(ST_LocateAlong(b, m), 1) pb
  FROM inp, cpa
)
SELECT to_timestamp(m) AT TIME ZONE 'UTC' t,
       ST_3DDistance(pa, pb) distance,
       pa AS pa, pb AS pb
FROM points, cpa;
Вивід растрових зображень
-[ RECORD 1 ]-----------------------------
t        | 2015-05-26 10:45:31.034483
distance | 1.9652147377620688
pa       | POINT ZM (7.59 0 3.79 1432637131.03)
pb       | POINT ZM (9.1 1.24 3.93 1432637131.03)
Figure
Geometry figure for visual-st-closestpointofapproach-01

Назва

ST_DistanceCPA — Повертає відстань між найближчою точкою зближення двох траєкторій.

Короткий огляд

float8 ST_DistanceCPA(geometry track1, geometry track2);

Опис

Повертає відстань (у 2D) між двома траєкторіями в точці їх найближчого зближення.

Вхідні дані повинні бути дійсними траєкторіями, перевіреними за допомогою ST_IsValidTrajectory. Якщо траєкторії не перетинаються в діапазонах M, повертається значення Null.

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

Приклади

Return the minimum distance of two objects moving between 10:00 and 11:00.

Code
WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0,10 0 5)'::geometry,
    extract(epoch from timestamp '2015-05-26 10:00' AT TIME ZONE 'UTC'),
    extract(epoch from timestamp '2015-05-26 11:00' AT TIME ZONE 'UTC')
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10,12 1 2)'::geometry,
    extract(epoch from timestamp '2015-05-26 10:00' AT TIME ZONE 'UTC'),
    extract(epoch from timestamp '2015-05-26 11:00' AT TIME ZONE 'UTC')
  ) b
)
SELECT ST_DistanceCPA(a, b) distance FROM inp;
Вивід растрових зображень
1.9652147377620688
Figure
Geometry figure for visual-st-distancecpa-01

Назва

ST_CPAWithin — Перевіряє, чи найближча точка зближення двох траєкторій знаходиться в межах заданої відстані.

Короткий огляд

boolean ST_CPAWithin(geometry track1, geometry track2, float8 dist);

Опис

Перевіряє, чи два рухомі об'єкти коли-небудь були ближче, ніж зазначена відстань.

Вхідні дані повинні бути дійсними траєкторіями, перевіреними за допомогою ST_IsValidTrajectory. Якщо траєкторії не перетинаються в діапазонах M, повертається значення False.

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

Приклади

Code
WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0,10 0 5)'::geometry,
    extract(epoch from timestamp '2015-05-26 10:00' AT TIME ZONE 'UTC'),
    extract(epoch from timestamp '2015-05-26 11:00' AT TIME ZONE 'UTC')
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10,12 1 2)'::geometry,
    extract(epoch from timestamp '2015-05-26 10:00' AT TIME ZONE 'UTC'),
    extract(epoch from timestamp '2015-05-26 11:00' AT TIME ZONE 'UTC')
  ) b
)
SELECT ST_CPAWithin(a, b, 2), ST_DistanceCPA(a, b) distance FROM inp;
Вивід растрових зображень
st_cpawithin |     distance
--------------+------------------
 t            | 1.9652147377620688
Figure
Geometry figure for visual-st-cpawithin-01

7.21. Version Functions

Анотація

These functions report and upgrade PostGIS versions.

Назва

PostGIS_Extensions_Upgrade — Packages and upgrades PostGIS extensions (e.g. postgis_raster, postgis_topology, postgis_sfcgal) to given or latest version.

Короткий огляд

text PostGIS_Extensions_Upgrade(text target_version=null);

Опис

Packages and upgrades PostGIS extensions to given or latest version. Only extensions you have installed in the database will be packaged and upgraded if needed. Reports full PostGIS version and build configuration infos after. This is short-hand for doing multiple CREATE EXTENSION .. FROM unpackaged and ALTER EXTENSION .. UPDATE for each PostGIS extension. Currently only tries to upgrade extensions postgis, postgis_raster, postgis_sfcgal, and postgis_topology.

Доступність: 2.5.0

Changed: 3.4.0 to add target_version argument.

Changed: 3.3.0 support for upgrades from any PostGIS version. Does not work on all systems.

Changed: 3.0.0 to repackage loose extensions and support postgis_raster.

Приклади

Code
SELECT PostGIS_Extensions_Upgrade();
Вивід растрових зображень
NOTICE:  Packaging extension postgis
NOTICE:  Packaging extension postgis_raster
NOTICE:  Packaging extension postgis_sfcgal
NOTICE:  Extension postgis_topology is not available or not packagable for some reason

Назва

PostGIS_Full_Version — Reports full PostGIS version and build configuration infos.

Короткий огляд

text PostGIS_Full_Version();

Опис

Reports full PostGIS version and build configuration infos. Also informs about synchronization between libraries and scripts suggesting upgrades as needed.

Enhanced: 3.4.0 now includes extra PROJ configurations NETWORK_ENABLED, URL_ENDPOINT and DATABASE_PATH of proj.db location

Приклади

Code
SELECT PostGIS_Full_Version();
Вивід растрових зображень
POSTGIS="3.7.0dev 3.7.0alpha1-477-ga9004e778" [EXTENSION] PGSQL="180" GEOS="3.15.0beta1" SFCGAL="2.3.0" PROJ="9.8.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org DATABASE_PATH=/usr/share/proj/proj.db" GDAL="GDAL 3.13.1, released 2026/06/01" LIBXML="2.15.3"

Назва

PostGIS_GEOS_Version — Returns the version number of the GEOS library.

Короткий огляд

text PostGIS_GEOS_Version();

Опис

Returns the version number of the GEOS library, or NULL if GEOS support is not enabled.

Приклади

Code
SELECT PostGIS_GEOS_Version();
Вивід растрових зображень
3.12.0dev-CAPI-1.18.0

Назва

PostGIS_GEOS_Compiled_Version — Returns the version number of the GEOS library against which PostGIS was built.

Короткий огляд

text PostGIS_GEOS_Compiled_Version();

Опис

Returns the version number of the GEOS library, or against which PostGIS was built.

Доступність: 3.4.0

Приклади

Code
SELECT PostGIS_GEOS_Compiled_Version();
Вивід растрових зображень
3.12.0

Назва

PostGIS_Liblwgeom_Version — Returns the version number of the liblwgeom library. This should match the version of PostGIS.

Короткий огляд

text PostGIS_Liblwgeom_Version();

Опис

Returns the version number of the liblwgeom library/

Приклади

Code
SELECT PostGIS_Liblwgeom_Version();
Вивід растрових зображень
3.4.0dev 3.3.0rc2-993-g61bdf43a7

Назва

PostGIS_LibXML_Version — Returns the version number of the libxml2 library.

Короткий огляд

text PostGIS_LibXML_Version();

Опис

Returns the version number of the LibXML2 library.

Доступність: 1.5

Приклади

Code
SELECT PostGIS_LibXML_Version();
Вивід растрових зображень
2.9.10

Назва

PostGIS_LibJSON_Version — Returns the version number of the libjson-c library.

Короткий огляд

text PostGIS_LibJSON_Version();

Опис

Returns the version number of the LibJSON-C library.

Приклади

Code
SELECT PostGIS_LibJSON_Version();
Вивід растрових зображень
0.17

Назва

PostGIS_Lib_Build_Date — Returns build date of the PostGIS library.

Короткий огляд

text PostGIS_Lib_Build_Date();

Опис

Returns build date of the PostGIS library.

Приклади

Code
SELECT PostGIS_Lib_Build_Date();
Вивід растрових зображень
2023-06-22 03:56:11

Назва

PostGIS_Lib_Version — Returns the version number of the PostGIS library.

Короткий огляд

text PostGIS_Lib_Version();

Опис

Returns the version number of the PostGIS library.

Приклади

Code
SELECT PostGIS_Lib_Version();
Вивід растрових зображень
3.4.0dev

Назва

PostGIS_PROJ_Version — Returns the version number of the PROJ4 library.

Короткий огляд

text PostGIS_PROJ_Version();

Опис

Returns the version number of the PROJ library and some configuration options of proj.

Enhanced: 3.4.0 now includes NETWORK_ENABLED, URL_ENDPOINT and DATABASE_PATH of proj.db location

Приклади

Code
SELECT PostGIS_PROJ_Version();
Вивід растрових зображень
7.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db

Назва

PostGIS_PROJ_Compiled_Version — Returns the version number of the PROJ library against which PostGIS was built.

Короткий огляд

text PostGIS_PROJ_Compiled_Version();

Опис

Returns the version number of the PROJ library, or against which PostGIS was built.

Доступність: 3.5.0

Приклади

Code
SELECT PostGIS_PROJ_Compiled_Version();
Вивід растрових зображень
9.1.1

Назва

PostGIS_Wagyu_Version — Returns the version number of the internal Wagyu library.

Короткий огляд

text PostGIS_Wagyu_Version();

Опис

Returns the version number of the internal Wagyu library, or NULL if Wagyu support is not enabled.

Приклади

Code
SELECT PostGIS_Wagyu_Version();
Вивід растрових зображень
0.5.0 (Internal)

Назва

PostGIS_Scripts_Build_Date — Returns build date of the PostGIS scripts.

Короткий огляд

text PostGIS_Scripts_Build_Date();

Опис

Returns build date of the PostGIS scripts.

Доступність: 1.0.0RC1

Приклади

Code
SELECT PostGIS_Scripts_Build_Date();
Вивід растрових зображень
2023-06-22 03:56:11

Назва

PostGIS_Scripts_Installed — Returns version of the PostGIS scripts installed in this database.

Короткий огляд

text PostGIS_Scripts_Installed();

Опис

Returns version of the PostGIS scripts installed in this database.

[Примітка]

If the output of this function doesn't match the output of PostGIS_Scripts_Released you probably missed to properly upgrade an existing database. See the Upgrading section for more info.

Availability: 0.9.0

Приклади

Code
SELECT PostGIS_Scripts_Installed();
Вивід растрових зображень
3.4.0dev 3.3.0rc2-993-g61bdf43a7

Назва

PostGIS_Scripts_Released — Returns the version number of the postgis.sql script released with the installed PostGIS lib.

Короткий огляд

text PostGIS_Scripts_Released();

Опис

Returns the version number of the postgis.sql script released with the installed PostGIS lib.

[Примітка]

Starting with version 1.1.0 this function returns the same value of PostGIS_Lib_Version. Kept for backward compatibility.

Availability: 0.9.0

Приклади

Code
SELECT PostGIS_Scripts_Released();
Вивід растрових зображень
3.4.0dev 3.3.0rc2-993-g61bdf43a7

Назва

PostGIS_Version — Returns PostGIS version number and compile-time options.

Короткий огляд

text PostGIS_Version();

Опис

Returns PostGIS version number and compile-time options.

Приклади

Code
SELECT PostGIS_Version();
Вивід растрових зображень
3.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1

7.22. Великі уніфіковані змінні (GUC)

Анотація

У цьому розділі перелічено власні великі уніфіковані змінні PostGIS (GUC). Їх можна налаштувати глобально, для бази даних, для сеансу або для транзакції. Найкраще налаштовувати на глобальному рівні або на рівні бази даних.

Більше прикладів використання див. SQL SET та SQL ALTER SYSTEM

  • postgis.gdal_datapath — Параметр конфігурації для призначення значення параметра GDAL_DATA GDAL. Якщо не встановлено, використовується змінна GDAL_DATA, встановлена в середовищі.
  • postgis.gdal_enabled_drivers — Параметр конфігурації для встановлення увімкнених драйверів GDAL у середовищі PostGIS. Впливає на змінну конфігурації GDAL GDAL_SKIP.
  • postgis.enable_outdb_rasters — Булева опція конфігурації для увімкнення доступу до растрових смуг out-db.
  • postgis.gdal_vsi_options — Конфігурація рядка для встановлення параметрів, що використовуються під час роботи з растровим файлом out-db.
  • postgis.gdal_cpl_debug — Булева конфігурація для ввімкнення та вимкнення реєстрації повідомлень про налагодження GDAL.

Назва

postgis.gdal_datapath — Параметр конфігурації для призначення значення параметра GDAL_DATA GDAL. Якщо не встановлено, використовується змінна GDAL_DATA, встановлена в середовищі.

Опис

Змінна PostgreSQL GUC для встановлення значення опції GDAL_DATA GDAL. Значення postgis.gdal_datapath повинно бути повним фізичним шляхом до файлів даних GDAL.

Ця опція конфігурації найбільш корисна для платформ Windows, де шлях до файлів даних GDAL не є жорстко заданим. Цю опцію також слід встановити, якщо файли даних GDAL не знаходяться в очікуваному GDAL шляху.

[Примітка]

Цей параметр можна встановити у файлі конфігурації PostgreSQL postgresql.conf. Його також можна встановити для окремого з'єднання або транзакції.

Доступність: 2.2.0

[Примітка]

Додаткова інформація про GDAL_DATA доступна в розділі "Параметри конфігурації" на сайті GDAL Опція конфігурації.

Приклади

Встановити та скинути postgis.gdal_datapath

Code
SET postgis.gdal_datapath TO '/usr/local/share/gdal.hidden';
SET postgis.gdal_datapath TO default;
                

Налаштування Windows для певної бази даних

Code
ALTER DATABASE gisdb
SET postgis.gdal_datapath = 'C:/Program Files/PostgreSQL/9.3/gdal-data';

Назва

postgis.gdal_enabled_drivers — Параметр конфігурації для встановлення увімкнених драйверів GDAL у середовищі PostGIS. Впливає на змінну конфігурації GDAL GDAL_SKIP.

Опис

Параметр конфігурації для встановлення увімкнених драйверів GDAL у середовищі PostGIS. Впливає на змінну конфігурації GDAL GDAL_SKIP. Цей параметр можна встановити у файлі конфігурації PostgreSQL: postgresql.conf. Його також можна встановити для з'єднання або транзакції.

Початкове значення postgis.gdal_enabled_drivers також можна встановити, передавши змінну середовища POSTGIS_GDAL_ENABLED_DRIVERS зі списком увімкнених драйверів процесу, що запускає PostgreSQL.

Увімкнені драйвери GDAL можна вказати за короткою назвою або кодом драйвера. Короткі назви або коди драйверів можна знайти за посиланням GDAL Raster Formats. Можна вказати кілька драйверів, розділивши їх пробілом.

[Примітка]

Для postgis.gdal_enabled_drivers доступні три спеціальні коди. Коди чутливі до регістру.

  • DISABLE_ALL вимикає всі драйвери GDAL. Якщо присутній, DISABLE_ALL замінює всі інші значення в postgis.gdal_enabled_drivers.

  • ENABLE_ALL вмикає всі драйвери GDAL.

  • VSICURL вмикає віртуальну файлову систему GDAL /vsicurl/.

Коли postgis.gdal_enabled_drivers встановлено на DISABLE_ALL, спроби використання растрів out-db, ST_FromGDALRaster(), ST_AsGDALRaster(), ST_AsTIFF(), ST_AsJPEG() та ST_AsPNG() призведуть до появи повідомлень про помилки.

[Примітка]

У стандартній установці PostGIS postgis.gdal_enabled_drivers встановлено на DISABLE_ALL.

[Примітка]

Додаткова інформація про GDAL_SKIP доступна в розділі "Параметри конфігурації" на сайті GDAL Опція конфігурації.

Доступність: 2.2.0

Приклади

Set and reset postgis.gdal_enabled_drivers for the current session.

Code
SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SET postgis.gdal_enabled_drivers = default;
                

Set specific drivers for all new connections to a database.

Code
ALTER DATABASE mygisdb SET postgis.gdal_enabled_drivers TO 'GTiff PNG JPEG';

Set the default for the whole database cluster to enable all drivers. This requires superuser access. Also note that database, session, and user settings override this.

This example writes the setting to postgres.auto.conf.

Code
ALTER SYSTEM SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';

Reload the PostgreSQL configuration so the changed setting is applied.

Code
SELECT pg_reload_conf();

Назва

postgis.enable_outdb_rasters — Булева опція конфігурації для увімкнення доступу до растрових смуг out-db.

Опис

Булева опція конфігурації для увімкнення доступу до растрових смуг out-db. Цю опцію можна встановити у файлі конфігурації PostgreSQL: postgresql.conf. Її також можна встановити для з'єднання або транзакції.

Початкове значення postgis.enable_outdb_rasters також можна встановити, передавши змінну середовища POSTGIS_ENABLE_OUTDB_RASTERS з значенням, відмінним від нуля, процесу, що запускає PostgreSQL.

[Примітка]

Навіть якщо postgis.enable_outdb_rasters має значення True, доступні растрові формати визначаються GUC postgis.gdal_enabled_drivers.

[Примітка]

У стандартній установці PostGIS postgis.enable_outdb_rasters встановлено на False.

Доступність: 2.2.0

Приклади

Set and reset postgis.enable_outdb_rasters for the current session.

Code
SET postgis.enable_outdb_rasters TO True;
SET postgis.enable_outdb_rasters = default;
SET postgis.enable_outdb_rasters = True;
SET postgis.enable_outdb_rasters = False;
                

Set the default for all new connections to a database.

Code
ALTER DATABASE gisdb SET postgis.enable_outdb_rasters = true;

Set the default for the whole database cluster. This requires superuser access. Also note that database, session, and user settings override this.

This example writes the setting to postgres.auto.conf.

Code
ALTER SYSTEM SET postgis.enable_outdb_rasters = true;

Reload the PostgreSQL configuration so the changed setting is applied.

Code
SELECT pg_reload_conf();

Назва

postgis.gdal_vsi_options — Конфігурація рядка для встановлення параметрів, що використовуються під час роботи з растровим файлом out-db.

Опис

Конфігурація рядка для встановлення опцій, що використовуються під час роботи з растровим файлом out-db. Опції конфігурації контролюють такі параметри, як обсяг простору, що GDAL виділяє для локального кешу даних, чи читати огляди та які ключі доступу використовувати для віддалених джерел даних out-db.

Доступність: 3.2.0

Приклади

Встановити postgis.gdal_vsi_options для поточної сесії:

Code
SET postgis.gdal_vsi_options = 'AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyy';

Встановіть postgis.gdal_vsi_options тільки для поточної транзакції за допомогою ключового слова LOCAL:

Code
SET LOCAL postgis.gdal_vsi_options = 'AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyy';

Назва

postgis.gdal_cpl_debug — Булева конфігурація для ввімкнення та вимкнення реєстрації повідомлень про налагодження GDAL.

Опис

За замовчуванням, журнали GDAL друкуються на stderr, а повідомлення нижчого рівня не друкуються взагалі. Встановлення цього GUC на true призведе до надсилання журналів GDAL до потоку журналів PostgreSQL, тож ви зможете бачити більше або менше з них, змінюючи client_min_message PostgreSQL GUC.

Доступність: 3.6.0

7.23. Функції усунення несправностей

Анотація

Ці функції є утилітами для усунення несправностей та відновлення геометричних даних. Вони потрібні лише у випадку, якщо геометричні дані якимось чином пошкоджені, що за звичайних обставин не повинно траплятися.

  • PostGIS_AddBBox — Додати обмежувальну рамку до геометрії.
  • PostGIS_DropBBox — Видалити кеш обмежувальної рамки з геометрії.
  • PostGIS_HasBBox — Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку.

Назва

PostGIS_AddBBox — Додати обмежувальну рамку до геометрії.

Короткий огляд

geometry PostGIS_AddBBox(geometry geomA);

Опис

Додати обмежувальну рамку до геометрії. Це пришвидшить запити на основі обмежувальної рамки, але збільшить розмір геометрії.

[Примітка]

Обмежувальні рамки автоматично додаються до геометрій, тому, як правило, це не потрібно, якщо тільки створена обмежувальна рамка якимось чином не пошкодилася або у вас стара версія, в якій відсутні обмежувальні рамки. Тоді вам потрібно видалити стару і додати нову.

This method supports Circular Strings and Curves.

Приклади

Code
UPDATE sometable
SET geom =  PostGIS_AddBBox(geom)
WHERE PostGIS_HasBBox(geom) = false;

Назва

PostGIS_DropBBox — Видалити кеш обмежувальної рамки з геометрії.

Короткий огляд

geometry PostGIS_DropBBox(geometry geomA);

Опис

Видалити кеш обмежувальної рамки з геометрії. Це зменшує розмір геометрії, але уповільнює запити на основі обмежувальної рамки. Також використовується для видалення пошкодженої обмежувальної рамки. Ознакою пошкодження кешованої обмежувальної рамки є те, що ST_Intersects та інші запити на відношення пропускають геометрії, які повинні повертати значення true.

[Примітка]

Обмежувальні рамки автоматично додаються до геометрій і покращують швидкість запитів, тому, як правило, це не потрібно, якщо тільки створена обмежувальна рамка якимось чином не пошкодилася або у вас стара версія, в якій відсутні обмежувальні рамки. У такому випадку потрібно видалити старі та додати заново. Таке пошкодження спостерігалося в серіях 8.3-8.3.6, де кешовані bboxes не завжди перераховувалися при зміні геометрії, і оновлення до нової версії без перезавантаження дампа не виправляє вже пошкоджені рамки. Тому можна вручну виправити за допомогою наведеного нижче коду та додати bbox заново або виконати перезавантаження дампа.

This method supports Circular Strings and Curves.

Приклади

This example drops cached bounding boxes where the stored box is wrong. Applying Box2D to ST_AsBinary forces a fresh box calculation, while Box2D on the table geometry reads the cached box.

Code
UPDATE sometable
SET geom =  PostGIS_DropBBox(geom)
WHERE Not (Box2D(ST_AsBinary(geom)) = Box2D(geom));
Вивід растрових зображень
UPDATE ...

After dropping corrupt cached boxes, re-add them where needed.

Code
UPDATE sometable
SET geom =  PostGIS_AddBBox(geom)
WHERE Not PostGIS_HasBBOX(geom);
Вивід растрових зображень
UPDATE ...

Назва

PostGIS_HasBBox — Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку.

Короткий огляд

boolean PostGIS_HasBBox(geometry geomA);

Опис

Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку. Використовуйте PostGIS_AddBBoxта PostGIS_DropBBoxдля керування кешуванням.

This method supports Circular Strings and Curves.

Приклади

Code
SELECT geom
FROM sometable WHERE PostGIS_HasBBox(geom) = false;

Розділ 8. Довідник функцій SFCGAL

SFCGAL — це бібліотека-обгортка C++ навколо CGAL, яка надає розширені 2D- та 3D-просторові функції. Для надійності координати геометрії мають точне раціональне числове представлення.

Інструкції з інсталяції бібліотеки можна знайти на домашній сторінці SFCGAL http://www.sfcgal.org). Щоб увімкнути функції, скористайтеся командою create extension postgis_sfcgal.

8.1. Функції управління SFCGAL

Анотація

У цьому розділі перелічено функції для визначення версії SFCGAL та залежностей бібліотек, які ви використовуєте.

  • postgis_sfcgal_version — Повертає версію SFCGAL, що використовується
  • postgis_sfcgal_full_version — Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL та Boost

Назва

postgis_sfcgal_version — Повертає версію SFCGAL, що використовується

Короткий огляд

текст postgis_sfcgal_version(void);

Опис

Повертає версію SFCGAL, що використовується

Доступність: 2.1.0

This method needs SFCGAL backend.

Див. також

postgis_sfcgal_full_version


Назва

postgis_sfcgal_full_version — Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL та Boost

Короткий огляд

текст postgis_sfcgal_full_version(void);

Опис

Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL і Boost

Доступність: 3.3.0

This method needs SFCGAL backend.

Див. також

postgis_sfcgal_version

8.2. SFCGAL Аксесори та сетери

Анотація

Ці функції забезпечують доступ до властивостей геометрій або їх налаштування. Геометрії, які в першу чергу підтримуються цими функціями, — це TINS і поліедральні поверхні.

  • CG_ForceLHR — Примусова орієнтація LHR
  • CG_IsPlanar — Перевірте, чи є поверхня плоскою
  • CG_IsSolid — Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • CG_MakeSolid — Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • CG_Orientation — Визначте орієнтацію поверхні
  • CG_Area — Обчислює площу геометрії
  • CG_3DArea — Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • CG_Volume — Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.

Назва

CG_ForceLHR — Примусова орієнтація LHR

Короткий огляд

geometry CG_ForceLHR(geometry geom);

Опис

Returns an equivalent geometry whose polygonal components follow the left-hand rule: exterior rings are counter-clockwise and interior rings are clockwise. Rings are reversed as needed; coordinates and dimensionality are preserved. The input must be valid.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Reorient a polygon and its hole to the left-hand rule.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,0 4,4 4,4 0,0 0),
                  (1 1,3 1,3 3,1 3,1 1))'::geometry AS geom
)
SELECT geom AS input_polygon,
       CG_ForceLHR(geom) AS lhr_polygon,
       ST_IsPolygonCCW(geom) AS input_is_lhr,
       ST_IsPolygonCCW(CG_ForceLHR(geom)) AS output_is_lhr
FROM data;
Вивід растрових зображень
POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 1,3 3,1 3,1 1)) | POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,1 3,3 3,3 1,1 1)) | f | t
Figure
Geometry figure for visual-cg-forcelhr-01

Назва

CG_IsPlanar — Перевірте, чи є поверхня плоскою

Короткий огляд

boolean CG_IsPlanar(geometry geom);

Опис

Tests whether the input geometry lies in a single plane in 3D.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Назва

CG_IsSolid — Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.

Короткий огляд

boolean CG_IsSolid(geometry geom1);

Опис

Returns true when the input carries the solid flag, such as a geometry produced by CG_MakeSolid. A closed PolyhedralSurface remains a surface until it is explicitly converted. This tests the representation, not shell closure or validity; no validity check is performed.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Compare the same closed shell before and after converting it to a solid.

Code
WITH data AS (
  SELECT 'POLYHEDRALSURFACE Z (
    ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
    ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
    ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
    ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
    ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
    ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
  )'::geometry AS geom
)
SELECT CG_IsSolid(geom) AS shell_is_solid,
       CG_IsSolid(CG_MakeSolid(geom)) AS solid_is_solid
FROM data;
Вивід растрових зображень
f | t
Figure
Geometry figure for visual-cg-issolid-01

Назва

CG_MakeSolid — Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.

Короткий огляд

geometry CG_MakeSolid(geometry geom1);

Опис

Marks a PolyhedralSurface or TIN as a solid. The input is expected to describe a closed shell; the function sets the solid representation and does not validate the shell.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Назва

CG_Orientation — Визначте орієнтацію поверхні

Короткий огляд

integer CG_Orientation(geometry geom);

Опис

Функція застосовується тільки до полігонів. Вона повертає -1, якщо полігон орієнтований проти годинникової стрілки, і 1, якщо полігон орієнтований за годинниковою стрілкою.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.


Назва

CG_Area — Обчислює площу геометрії

Короткий огляд

double precision CG_Area( geometry geom );

Опис

Обчислює площу геометричної фігури.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає значення подвійної точності, що представляє площу.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

Code
SELECT CG_Area('Polygon ((0 0,0 5,5 5,5 0,0 0),(1 1,2 1,2 2,1 2,1 1),(3 3,4 3,4 4,3 4,3 3))');
Вивід растрових зображень
23
Figure
Geometry figure for visual-cg-area-01

Див. також

CG_3DArea, ST_Area


Назва

CG_3DArea — Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.

Короткий огляд

floatCG_3DArea(geometry geom1);

Опис

Доступність: 3.5.0

This method needs SFCGAL backend.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 8.1, 10.5

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Примітка: За замовчуванням PolyhedralSurface, побудований на основі WKT, є геометрією поверхні, а не об'ємним тілом. Тому він має площу поверхні. Після перетворення на об'ємне тіло площа поверхні зникає.

Code
SELECT CG_3DArea(geom) As cube_surface_area,
CG_3DArea(CG_MakeSolid(geom)) As solid_surface_area
FROM (SELECT 'POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )'::geometry) As f(geom);
Вивід растрових зображень
cube_surface_area │ solid_surface_area
──────────────────┼────────────────────
6                 │ 0

Див. також

CG_Area, CG_MakeSolid, CG_IsSolid, CG_Area


Назва

CG_Volume — Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.

Короткий огляд

float CG_Volume(geometry geom1);

Опис

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 9.1 (same as CG_3DVolume)

Closed surface geometries can have non-zero volume. Use CG_MakeSolid when the geometry value itself must carry the solid flag.

Приклад

A closed polyhedral surface has volume. CG_MakeSolid makes the solid representation explicit.

Code
SELECT CG_Volume(geom) As cube_surface_vol,
CG_Volume(CG_MakeSolid(geom)) As solid_surface_vol
FROM (SELECT 'POLYHEDRALSURFACE( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )'::geometry) As f(geom);
Вивід растрових зображень
cube_surface_vol │ solid_surface_vol
─────────────────┼──────────────────
1                │ 1
Figure
Geometry figure for visual-cg-volume-01

Див. також

CG_3DArea, CG_MakeSolid, CG_IsSolid

8.3. Функції обробки та взаємозв'язків SFCGAL

  • CG_Intersection — Обчислює перетин двох геометрій
  • CG_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • CG_3DIntersects — Перевіряє, чи перетинаються дві 3D-геометрії
  • CG_Difference — Обчислює геометричну різницю між двома геометріями
  • CG_3DDifference — Виконати 3D-різницю
  • CG_Distance — Обчислює мінімальну відстань між двома геометріями
  • CG_3DDistance — Обчислює мінімальну 3D відстань між двома геометріями
  • CG_3DConvexHull — Обчислює 3D опуклу оболонку геометрії.
  • CG_3DIntersection — Виконати 3D перетин
  • CG_Union — Обчислює об'єднання двох геометрій
  • CG_3DUnion — Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • CG_AlphaShape — Обчислює альфа-форму, що охоплює геометрію
  • CG_ApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника
  • CG_ApproximateMedialAxis — Обчисліть приблизну медіальну вісь плоскої геометрії.
  • CG_GenerateFlatRoof — Generate a flat (box) roof from a footprint polygon.
  • CG_GenerateHippedRoof — Generate a hipped roof from a footprint polygon.
  • CG_GenerateGableRoof — Generate a gable roof from a footprint polygon.
  • CG_GenerateSkillionRoof — Generate a skillion (single-slope) roof from a footprint polygon.
  • CG_GenerateRoof — Generate a roof of the requested type from a footprint polygon.
  • CG_PolygonRepair — Repair an invalid polygon or multipolygon.
  • CG_ConstrainedDelaunayTriangles — Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • CG_Extrude — Видавити поверхню до відповідного об'єму
  • CG_ExtrudeStraightSkeleton — Пряма екструзія скелета
  • CG_GreeneApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника
  • CG_MinkowskiSum — Обчислює суму Мінковського
  • CG_OptimalAlphaShape — Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.
  • CG_OptimalConvexPartition — Обчислює оптимальний опуклий поділ геометрії багатокутника
  • CG_StraightSkeleton — Обчислити прямий скелет з геомeтрії
  • CG_Tesselate — Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • CG_Triangulate — Тріангулює полігональну геометрію
  • CG_Visibility — Обчислити полігон видимості з точки або сегмента в геометрії полігона
  • CG_YMonotonePartition — Обчислює y-монотонний поділ геометрії багатокутника
  • CG_StraightSkeletonPartition — Обчислює прямий скелетний поділ багатокутника.
  • CG_3DBuffer — Обчислює 3D-буфер навколо геометрії.
  • CG_Rotate — Повертає геометрію на заданий кут навколо початку координат (0,0).
  • CG_2DRotate — Повертає геометрію на заданий кут навколо вказаної точки в 2D.
  • CG_3DRotate — Обертає геометрію в 3D-просторі навколо вектора осі.
  • CG_RotateX — Повертає геометрію навколо осі X на заданий кут.
  • CG_RotateY — Повертає геометрію навколо осі Y на заданий кут.
  • CG_RotateZ — Повертає геометрію навколо осі Z на заданий кут.
  • CG_Scale — Масштабує геометрію рівномірно у всіх вимірах за заданим коефіцієнтом.
  • CG_3DScale — Масштабує геометрію за окремими коефіцієнтами вздовж осей X, Y та Z.
  • CG_3DScaleAroundCenter — Масштабує геометрію в 3D-просторі навколо вказаної центральної точки.
  • CG_Translate — Перекладає (переміщує) геометрію на задані відступи в 2D-просторі.
  • CG_3DTranslate — Перекладає (переміщує) геометрію на задані відступи в 3D-просторі.
  • CG_Simplify — Зменшує складність геометрії, зберігаючи при цьому основні характеристики та значення Z/M.
  • CG_3DAlphaWrapping — Обчислює 3D-обгортку альфа, яка суворо охоплює геометрію.
  • CG_NurbsCurveInterpolate — Creates an interpolating NURBS curve passing through all given data points
  • CG_NurbsCurveApproximate — Creates an approximating NURBS curve fitting data points within a tolerance
  • CG_NurbsCurveDerivative — Computes the derivative (tangent, curvature) of a NURBS curve at a given parameter

Назва

CG_Intersection — Обчислює перетин двох геометрій

Короткий огляд

geometry CG_Intersection( geometry geomA , geometry geomB );

Опис

Обчислює перетин двох геометрій.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає геометрію, що представляє перетин.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

Code
SELECT CG_Intersection('LINESTRING(0 0,5 5)', 'LINESTRING(5 0,0 5)');
Вивід растрових зображень
POINT(2.5 2.5)
Figure
Geometry figure for visual-cg-intersection-01

Назва

CG_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)

Короткий огляд

boolean CG_Intersects( geometry geomA , geometry geomB );

Опис

Повертає true, якщо дві геометрії перетинаються. Геометрії перетинаються, якщо вони мають спільну точку.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

Code
SELECT CG_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0,0 2 )'::geometry);
Вивід растрових зображень
f
Figure
Geometry figure for visual-cg-intersects-01
Code
SELECT CG_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0,0 2 )'::geometry);
Вивід растрових зображень
t
Figure
Geometry figure for visual-cg-intersects-02

Назва

CG_3DIntersects — Перевіряє, чи перетинаються дві 3D-геометрії

Короткий огляд

boolean CG_3DIntersects( geometry geomA , geometry geomB );

Опис

Перевіряє, чи перетинаються дві 3D-геометрії. 3D-геометрії перетинаються, якщо вони мають спільну точку в тривимірному просторі.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

Code
SELECT CG_3DIntersects('POINT(1.2 0.1 0)', 'POLYHEDRALSURFACE(((0 0 0,0.5 0.5 0,1 0 0,1 1 0,0 1 0,0 0 0)),((1 0 0,2 0 0,2 1 0,1 1 0,1 0 0),(1.2 0.2 0,1.2 0.8 0,1.8 0.8 0,1.8 0.2 0,1.2 0.2 0)))');
Вивід растрових зображень
t
Figure
Geometry figure for visual-cg-3dintersects-01

Назва

CG_Difference — Обчислює геометричну різницю між двома геометріями

Короткий огляд

geometry CG_Difference( geometry geomA , geometry geomB );

Опис

Обчислює геометричну різницю між двома геометріями. Результуюча геометрія є набором точок, які присутні в geomA, але відсутні в geomB.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає геометрію.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

Code
SELECT CG_Difference('POLYGON((0 0,0 1,1 1,1 0,0 0))'::geometry, 'LINESTRING(0 0,2 2)'::geometry);
Вивід растрових зображень
POLYGON((0 0,1 0,1 1,0 1,0 0))
Figure
Geometry figure for visual-cg-difference-01

Див. також

CG_3DDifference, ST_Difference


Назва

CG_3DDifference — Виконати 3D-різницю

Короткий огляд

geometry CG_3DDifference(geometry geom1, geometry geom2);

Опис

Повертає ту частину geom1, яка не входить до geom2.

Доступність: 3.5.0

This method needs SFCGAL backend.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Subtract a smaller tetrahedral solid and render the two inputs and the actual remaining solid separately.

Code
WITH data AS (
  SELECT CG_MakeSolid('POLYHEDRALSURFACE Z (
    ((0 0 0,0 4 0,4 0 0,0 0 0)),
    ((0 0 0,4 0 0,0 0 4,0 0 0)),
    ((0 0 0,0 0 4,0 4 0,0 0 0)),
    ((4 0 0,0 4 0,0 0 4,4 0 0))
  )'::geometry) AS outer_solid
), solids AS (
  SELECT outer_solid,
         ST_Scale(outer_solid, 0.5, 0.5, 0.5) AS inner_solid
  FROM data
)
SELECT outer_solid AS input_outer,
       inner_solid AS input_inner,
       CG_3DDifference(outer_solid, inner_solid) AS difference
FROM solids;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 0 0,0 0 0)),((0 0 0,4 0 0,0 0 4,0 0 0)),((0 0 0,0 0 4,0 4 0,0 0 0)),((4 0 0,0 4 0,0 0 4,4 0 0))) | POLYHEDRALSURFACE Z (((0 0 0,0 2 0,2 0 0,0 0 0)),((0 0 0,2 0 0,0 0 2,0 0 0)),((0 0 0,0 0 2,0 2 0,0 0 0)),((2 0 0,0 2 0,0 0 2,2 0 0))) | POLYHEDRALSURFACE Z (((0 2 0,4 0 0,2 0 0,0 2 0)),((0 0 2,2 0 0,0 0 4,0 0 2)),((0 0 2,0 4 0,0 2 0,0 0 2)),((4 0 0,0 4 0,0 0 4,4 0 0)),((4 0 0,0 2 0,0 4 0,4 0 0)),((2 0 0,4 0 0,0 0 4,2 0 0)),((0 4 0,0 0 2,0 0 4,0 4 0)),((0 0 2,0 2 0,2 0 0,0 0 2)))
Figure
Geometry figure for visual-cg-3ddifference-01

Назва

CG_Distance — Обчислює мінімальну відстань між двома геометріями

Короткий огляд

double precision CG_Distance( geometry geomA , geometry geomB );

Опис

Обчислює мінімальну відстань між двома геометріями.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає значення подвійної точності, що представляє відстань.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

Code
SELECT CG_Distance('LINESTRING(0.0 0.0,-1.0 -1.0)', 'LINESTRING(3.0 4.0,4.0 5.0)');
Вивід растрових зображень
5
Figure
Geometry figure for visual-cg-distance-01

Див. також

CG_3DDistance, CG_Distance


Назва

CG_3DDistance — Обчислює мінімальну 3D відстань між двома геометріями

Короткий огляд

double precision CG_3DDistance( geometry geomA , geometry geomB );

Опис

Обчислює мінімальну 3D відстань між двома геометріями.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає значення подвійної точності, що представляє 3D-відстань.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

Code
SELECT CG_3DDistance('LINESTRING(-1.0 0.0 2.0,1.0 0.0 3.0)', 'TRIANGLE((-4.0 0.0 1.0,4.0 0.0 1.0,0.0 4.0 1.0,-4.0 0.0 1.0))');
Вивід растрових зображень
1
Figure
Geometry figure for visual-cg-3ddistance-01

Див. також

CG_Distance, ST_3DDistance


Назва

CG_3DConvexHull — Обчислює 3D опуклу оболонку геометрії.

Короткий огляд

geometry CG_3DConvexHull(geometry geom1);

Опис

Computes the smallest convex three-dimensional geometry that contains the input. Unlike ST_ConvexHull, this function uses Z coordinates when constructing the hull.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Compute the 3D convex hull of a 3D LineString.

Code
WITH data AS (
  SELECT 'LINESTRING Z(0 0 5,1 5 3,5 7 6,9 5 3,5 7 5,6 3 5)'::geometry AS source_line
)
SELECT CG_3DConvexHull(source_line) AS convex_hull
FROM data;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((1 5 3,9 5 3,0 0 5,1 5 3)),((1 5 3,0 0 5,5 7 6,1 5 3)),((5 7 6,5 7 5,1 5 3,5 7 6)),((0 0 5,6 3 5,5 7 6,0 0 5)),((6 3 5,9 5 3,5 7 6,6 3 5)),((0 0 5,9 5 3,6 3 5,0 0 5)),((9 5 3,5 7 5,5 7 6,9 5 3)),((1 5 3,5 7 5,9 5 3,1 5 3)))
Figure
Geometry figure for visual-cg-3dconvexhull-01

Compare the extruded source geometry with its 3D convex hull.

Code
WITH footprints(label, geom, height) AS (VALUES
  ('C', 'POLYGON((0 0,0 8,5 8,5 6,2 6,2 2,5 2,5 0,0 0))'::geometry, 3),
  ('H', 'POLYGON((7 0,9 0,9 3,12 3,12 0,14 0,14 8,12 8,12 5,9 5,9 8,7 8,7 0))'::geometry, 7)
), parts AS (
  SELECT label, CG_Extrude(geom, 0, 0, height) AS geom
  FROM footprints
), shapes AS (
  SELECT ST_Collect(geom ORDER BY label) AS source_geometry
  FROM parts
)
SELECT
  source_geometry AS input_source_geometry,
  CG_3DConvexHull(source_geometry) AS convex_hull
FROM shapes;
Вивід растрових зображень
-[ RECORD 1 ]----------
input_source_geometry | GEOMETRYCOLLECTION(POLYHEDRALSURFACE(((0 0 0,0 8 0,5 8 0,5 6 0,2 6 0,2 2 0,5 2 0,5 0 0,0 0 0)),((0 0 3,5 0 3,5 2 3,2 2 3,2 6 3,5 6 3,5 8 3,0 8 3,0 0 3)),((0 0 0,0 0 3,0 8 3,0 8 0,0 0 0)),((0 8 0,0 8 3,5 8 3,5 8 0,0 8 0)),((5 8 0,5 8 3,5 6 3,5 6 0,5 8 0)),((5 6 0,5 6 3,2 6 3,2 6 0,5 6 0)),((2 6 0,2 6 3,2 2 3,2 2 0,2 6 0)),((2 2 0,2 2 3,5 2 3,5 2 0,2 2 0)),((5 2 0,5 2 3,5 0 3,5 0 0,5 2 0)),((5 0 0,5 0 3,0 0 3,0 0 0,5 0 0))), POLYHEDRALSURFACE(((7 0 0,7 8 0,9 8 0,9 5 0,12 5 0,12 8 0,14 8 0,14 0 0,12 0 0,12 3 0,9 3 0,9 0 0,7 0 0)),((7 0 7,9 0 7,9 3 7,12 3 7,12 0 7,14 0 7,14 8 7,12 8 7,12 5 7,9 5 7,9 8 7,7 8 7,7 0 7)),((7 0 0,7 0 7,7 8 7,7 8 0,7 0 0)),((7 8 0,7 8 7,9 8 7,9 8 0,7 8 0)),((9 8 0,9 8 7,9 5 7,9 5 0,9 8 0)),((9 5 0,9 5 7,12 5 7,12 5 0,9 5 0)),((12 5 0,12 5 7,12 8 7,12 8 0,12 5 0)),((12 8 0,12 8 7,14 8 7,14 8 0,12 8 0)),((14 8 0,14 8 7,14 0 7,14 0 0,14 8 0)),((14 0 0,14 0 7,12 0 7,12 0 0,14 0 0)),((12 0 0,12 0 7,12 3 7,12 3 0,12 0 0)),((12 3 0,12 3 7,9 3 7,9 3 0,12 3 0)),((9 3 0,9 3 7,9 0 7,9 0 0,9 3 0)),((9 0 0,9 0 7,7 0 7,7 0 0,9 0 0))))
convex_hull           | POLYHEDRALSURFACE(((14 8 7,14 0 0,14 8 0,14 8 7)),((14 0 7,7 8 7,7 0 7,14 0 7)),((0 8 3,7 8 7,0 8 0,0 8 3)),((0 0 3,7 8 7,0 8 3,0 0 3)),((0 0 3,0 8 3,0 0 0,0 0 3)),((7 0 7,7 8 7,0 0 3,7 0 7)),((14 0 7,14 0 0,14 8 7,14 0 7)),((7 0 7,14 0 0,14 0 7,7 0 7)),((14 8 7,7 8 7,14 0 7,14 8 7)),((0 0 0,0 8 3,0 8 0,0 0 0)),((0 0 0,14 0 0,0 0 3,0 0 0)),((0 0 3,14 0 0,7 0 7,0 0 3)),((0 8 0,14 0 0,0 0 0,0 8 0)),((14 8 0,14 0 0,0 8 0,14 8 0)),((14 8 0,7 8 7,14 8 7,14 8 0)),((0 8 0,7 8 7,14 8 0,0 8 0)))
Figure
Geometry figure for visual-cg-3dconvexhull-02

Див. також

ST_Letters, ST_AsX3D


Назва

CG_3DIntersection — Виконати 3D перетин

Короткий огляд

geometry CG_3DIntersection(geometry geom1, geometry geom2);

Опис

Повернути геометрію, яка є спільною частиною між geom1 і geom2.

Доступність: 3.5.0

This method needs SFCGAL backend.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

3D linestrings and polygons can intersect in a 3D segment.

Code
WITH data AS (
  SELECT 'LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)'::geometry AS input_linestring,
         'POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8))'::geometry AS input_polygon
)
SELECT input_linestring AS input_linestring,
       input_polygon AS input_polygon,
       CG_3DIntersection(input_linestring, input_polygon) AS intersection
FROM data;
Вивід растрових зображень
LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10) | POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8)) | LINESTRING Z (1 1 8,0.5 0.5 8)
Figure
Geometry figure for visual-cg-3dintersection-01

Intersect a cube shell with a vertical polygon.

Code
WITH data AS (
  SELECT 'POLYHEDRALSURFACE Z(
    ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
    ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
    ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
    ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
    ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
    ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
  )'::geometry AS input_cube,
  'POLYGON Z ((0 0 0,0 0 0.5,0 0.5 0.5,0 0.5 0,0 0 0))'::geometry AS input_polygon
)
SELECT input_cube AS input_cube,
       input_polygon AS input_polygon,
       CG_3DIntersection(input_cube, input_polygon) AS intersection
FROM data;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))) | POLYGON Z ((0 0 0,0 0 0.5,0 0.5 0.5,0 0.5 0,0 0 0)) | TIN Z (((0 0 0,0 0 0.5,0 0.5 0.5,0 0 0)),((0 0.5 0,0 0 0,0 0.5 0.5,0 0.5 0)))
Figure
Geometry figure for visual-cg-3dintersection-02

A smaller solid contained by a larger solid remains volumetric after intersection.

Code
WITH data AS (
  SELECT CG_MakeSolid('POLYHEDRALSURFACE Z (
    ((0 0 0,0 4 0,4 0 0,0 0 0)),
    ((0 0 0,4 0 0,0 0 4,0 0 0)),
    ((0 0 0,0 0 4,0 4 0,0 0 0)),
    ((4 0 0,0 4 0,0 0 4,4 0 0))
  )'::geometry) AS outer_solid
), solids AS (
  SELECT outer_solid,
         ST_Scale(outer_solid, 0.5, 0.5, 0.5) AS inner_solid
  FROM data
)
SELECT outer_solid AS input_outer,
       inner_solid AS input_inner,
       CG_3DIntersection(outer_solid, inner_solid) AS intersection
FROM solids;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 0 0,0 0 0)),((0 0 0,4 0 0,0 0 4,0 0 0)),((0 0 0,0 0 4,0 4 0,0 0 0)),((4 0 0,0 4 0,0 0 4,4 0 0))) | POLYHEDRALSURFACE Z (((0 0 0,0 2 0,2 0 0,0 0 0)),((0 0 0,2 0 0,0 0 2,0 0 0)),((0 0 0,0 0 2,0 2 0,0 0 0)),((2 0 0,0 2 0,0 0 2,2 0 0))) | POLYHEDRALSURFACE Z (((0 0 0,0 2 0,2 0 0,0 0 0)),((0 0 0,0 0 2,0 2 0,0 0 0)),((2 0 0,0 0 2,0 0 0,2 0 0)),((2 0 0,0 2 0,0 0 2,2 0 0)))
Figure
Geometry figure for visual-cg-3dintersection-03

Назва

CG_Union — Обчислює об'єднання двох геометрій

Короткий огляд

geometry CG_Union( geometry geomA , geometry geomB );

Опис

Обчислює об'єднання двох геометрій.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає геометрію, що представляє об'єднання.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

Code
SELECT CG_Union('POINT(.5 0)', 'LINESTRING(-1 0,1 0)');
Вивід растрових зображень
LINESTRING(-1 0,0.5 0,1 0)
Figure
Geometry figure for visual-cg-union-01

Див. також

CG_3DUnion, ST_Union


Назва

CG_3DUnion — Виконайте об'єднання 3D за допомогою postgis_sfcgal.

Короткий огляд

geometry CG_3DUnion(geometry geom1, geometry geom2);

geometry CG_3DUnion(geometry set g1field);

Опис

Доступність: 3.5.0

This method needs SFCGAL backend.

This method implements the SQL/MM specification. SQL-MM IEC 13249-3: 5.1

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Агрегатний варіант: повертає геометрію, яка є 3D об'єднанням набору рядків геометрій. Функція CG_3DUnion() є "агрегатною" функцією в термінології PostgreSQL. Це означає, що вона оперує рядками даних так само, як функції SUM() і AVG(), і, як і більшість агрегатів, ігнорує геометрії NULL.

Приклади

Union two overlapping tetrahedral solids.

Code
WITH solids AS (
  SELECT CG_MakeSolid('POLYHEDRALSURFACE Z (
           ((0 0 0,4 0 0,0 4 0,0 0 0)),
           ((0 0 0,0 0 4,4 0 0,0 0 0)),
           ((0 0 0,0 4 0,0 0 4,0 0 0)),
           ((4 0 0,0 0 4,0 4 0,4 0 0)))'::geometry) AS geom1,
         CG_MakeSolid('POLYHEDRALSURFACE Z (
           ((2 0 0,6 0 0,2 4 0,2 0 0)),
           ((2 0 0,2 0 4,6 0 0,2 0 0)),
           ((2 0 0,2 4 0,2 0 4,2 0 0)),
           ((6 0 0,2 0 4,2 4 0,6 0 0)))'::geometry) AS geom2
)
SELECT CG_3DUnion(geom1, geom2) AS union_result
FROM solids;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((2 0 0,0 0 0,2 2 0,2 0 0)),((2 0 2,0 0 0,2 0 0,2 0 2)),((0 0 4,0 4 0,0 0 0,0 0 4)),((2 0 2,0 4 0,0 0 4,2 0 2)),((0 4 0,2 2 0,0 0 0,0 4 0)),((2 2 0,0 4 0,2 0 2,2 2 0)),((0 0 0,2 0 2,0 0 4,0 0 0)),((4 0 0,2 0 0,2 2 0,4 0 0)),((4 0 0,2 0 2,2 0 0,4 0 0)),((4 0 0,2 2 0,6 0 0,4 0 0)),((2 0 2,4 0 0,2 0 4,2 0 2)),((2 0 2,2 4 0,2 2 0,2 0 2)),((2 4 0,2 0 4,6 0 0,2 4 0)),((2 2 0,2 4 0,6 0 0,2 2 0)),((2 4 0,2 0 2,2 0 4,2 4 0)),((4 0 0,6 0 0,2 0 4,4 0 0)))
Figure
Geometry figure for visual-cg-3dunion-01

Назва

CG_AlphaShape — Обчислює альфа-форму, що охоплює геометрію

Короткий огляд

geometry CG_AlphaShape(geometry geom, float alpha, boolean allow_holes = false);

Опис

Обчислює альфа-форму точок у геометрії. Альфа-форма — це (зазвичай) увігнута багатокутна геометрія, яка містить усі вершини вхідних даних і вершини якої є підмножиною вершин вхідних даних. Альфа-форма забезпечує більш точне наближення до форми вхідних даних, ніж форма, створена опуклою оболонкою.

"Тіснота прилягання" контролюється параметром alpha, який може мати значення від 0 до нескінченності. Менші значення альфа дають більш увігнуті результати. Значення альфа, більші за певне значення, що залежить від даних, дають опуклу оболонку вхідних даних.

[Примітка]

Після впровадження CGAL значення альфа є квадратом радіуса диска, що використовується в алгоритмі Alpha-Shape для "ерозії" триангуляції Делоне вхідних точок. Докладнішу інформацію див. у CGAL Alpha-Shapes. Це відрізняється від оригінального визначення альфа-форм, яке визначає альфа як радіус ерозійного диска.

Обчислена форма не містить отворів, якщо опціональний аргумент allow_holes не вказаний як true.

Ця функція ефективно обчислює увігнуту оболонку геометрії подібно до ST_ConcaveHull, але використовує CGAL та інший алгоритм.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.4.1.

This method needs SFCGAL backend.

Приклади

The original point cloud and the alpha-shape share one comparison frame.

Code
WITH data AS (
  SELECT 'MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),
(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),
(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry AS input_points
)
SELECT input_points AS input_points,

         CG_AlphaShape(input_points, 80.2) AS alpha_shape
FROM data;
Вивід растрових зображень
MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97)) | MULTIPOLYGON(((89 53,88 58,85 71,83 72,75 84,76 88,72 95,64 97,57 97,52 98,49 95,45 90,39 88,34 86,26 85,24 82,27 77,24 67,23 60,27 54,26 44,23 36,28 33,30 22,37 23,43 19,53 18,65 16,73 16,78 16,84 19,88 29,90 30,87 42,91 50,89 53)))
Figure
Geometry figure for visual-cg-alphashape-01

The same point cloud can produce a shape with a hole when holes are allowed.

Code
WITH data AS (
  SELECT 'MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry AS input_points
)
SELECT input_points AS input_points,

         CG_AlphaShape(input_points, 100.1, true) AS alpha_shape
FROM data;
Вивід растрових зображень
MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97)) | MULTIPOLYGON(((89 53,88 58,85 71,83 72,75 84,76 88,72 95,64 97,57 97,52 98,49 95,45 90,39 88,34 86,26 85,24 82,27 77,24 67,23 60,27 54,26 44,23 36,28 33,30 22,43 19,53 18,65 16,73 16,78 16,84 19,90 30,87 42,91 50,89 53),(36 68,40 75,43 80,60 81,68 73,77 67,81 60,82 54,81 47,78 43,76 27,62 22,54 32,44 42,38 46,36 61,36 68)))
Figure
Geometry figure for visual-cg-alphashape-02

The second documented point cloud also produces a holed alpha-shape.

Code
WITH data AS (
  SELECT 'MULTIPOINT ((132 64),(114 64),(99 64),(81 64),(63 64),(57 49),(52 36),(46 20),(37 20),(26 20),(32 36),(39 55),(43 69),(50 84),(57 100),(63 118),(68 133),(74 149),(81 164),(88 180),(101 180),(112 180),(119 164),(126 149),(132 131),(139 113),(143 100),(150 84),(157 69),(163 51),(168 36),(174 20),(163 20),(150 20),(143 36),(139 49),(132 64),(99 151),(92 138),(88 124),(81 109),(74 93),(70 82),(83 82),(99 82),(112 82),(126 82),(121 96),(114 109),(110 122),(103 138),(99 151),(34 27),(43 31),(48 44),(46 58),(52 73),(63 73),(61 84),(72 71),(90 69),(101 76),(123 71),(141 62),(166 27),(150 33),(159 36),(146 44),(154 53),(152 62),(146 73),(134 76),(143 82),(141 91),(130 98),(126 104),(132 113),(128 127),(117 122),(112 133),(119 144),(108 147),(119 153),(110 171),(103 164),(92 171),(86 160),(88 142),(79 140),(72 124),(83 131),(79 118),(68 113),(63 102),(68 93),(35 45))'::geometry AS input_points
)
SELECT input_points AS input_points,

         CG_AlphaShape(input_points, 102.2, true) AS alpha_shape
FROM data;
Вивід растрових зображень
MULTIPOINT((132 64),(114 64),(99 64),(81 64),(63 64),(57 49),(52 36),(46 20),(37 20),(26 20),(32 36),(39 55),(43 69),(50 84),(57 100),(63 118),(68 133),(74 149),(81 164),(88 180),(101 180),(112 180),(119 164),(126 149),(132 131),(139 113),(143 100),(150 84),(157 69),(163 51),(168 36),(174 20),(163 20),(150 20),(143 36),(139 49),(132 64),(99 151),(92 138),(88 124),(81 109),(74 93),(70 82),(83 82),(99 82),(112 82),(126 82),(121 96),(114 109),(110 122),(103 138),(99 151),(34 27),(43 31),(48 44),(46 58),(52 73),(63 73),(61 84),(72 71),(90 69),(101 76),(123 71),(141 62),(166 27),(150 33),(159 36),(146 44),(154 53),(152 62),(146 73),(134 76),(143 82),(141 91),(130 98),(126 104),(132 113),(128 127),(117 122),(112 133),(119 144),(108 147),(119 153),(110 171),(103 164),(92 171),(86 160),(88 142),(79 140),(72 124),(83 131),(79 118),(68 113),(63 102),(68 93),(35 45)) | MULTIPOLYGON(((168 36,163 51,157 69,150 84,143 100,139 113,132 131,126 149,119 164,112 180,101 180,88 180,81 164,74 149,68 133,63 118,57 100,50 84,43 69,39 55,35 45,32 36,26 20,37 20,46 20,52 36,57 49,63 64,81 64,90 69,99 64,114 64,132 64,139 49,143 36,150 20,163 20,174 20,168 36),(81 109,88 124,92 138,103 138,110 122,114 109,121 96,112 82,99 82,83 82,74 93,81 109)))
Figure
Geometry figure for visual-cg-alphashape-03

Назва

CG_ApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника

Короткий огляд

geometry CG_ApproxConvexPartition(geometry geom);

Опис

Обчислює наближене опукле розбиття геометрії полігону (за допомогою триангуляції).

[Примітка]

Розбиття багатокутника P — це набір полігонів, внутрішні частини яких не перетинаються, а об'єднання полігонів дорівнює внутрішній частині вихідного полігону P. Функції CG_ApproxConvexPartition і CG_GreeneApproxConvexPartition створюють приблизно оптимальні опуклі розбиття. Обидві ці функції створюють опуклі розбиття, спочатку розбиваючи полігон на простіші полігони. CG_ApproxConvexPartition використовує триангуляцію, а CG_GreeneApproxConvexPartition — монотонний поділ. Обидві ці функції гарантують, що вони створюють не більше ніж в чотири рази більше опуклих частин, ніж оптимальна кількість, але вони відрізняються за складністю виконання. Хоча алгоритм наближення на основі триангуляції часто дає менше опуклих частин, це не завжди так.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

Приклади

Approximate convex partition of the same polygon used by the other partition examples.

Code
WITH data AS (
  SELECT 'POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_ApproxConvexPartition(input_polygon) AS partition
FROM data;
Вивід растрових зображень
POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150)) | GEOMETRYCOLLECTION(POLYGON((156 150,83 181,89 131,148 120,156 150)), POLYGON((32 159,0 45,41 86,32 159)), POLYGON((107 61,32 159,41 86,107 61)), POLYGON((45 1,177 2,67 24,45 1)), POLYGON((41 86,45 1,67 24,41 86)), POLYGON((107 61,41 86,67 24,109 31,107 61)), POLYGON((148 120,107 61,109 31,170 60,148 120)), POLYGON((156 150,148 120,170 60,180 110,156 150)))
Figure
Geometry figure for visual-cg-approxconvexpartition-01

Назва

CG_ApproximateMedialAxis — Обчисліть приблизну медіальну вісь плоскої геометрії.

Короткий огляд

geometry CG_ApproximateMedialAxis(geometry geom);

geometry CG_ApproximateMedialAxis(geometry geom, boolean projected);

Опис

Повертає приблизну медіальну вісь для введеної площі на основі її прямого скелета. Використовує специфічний API SFCGAL, якщо побудований на основі сумісної версії (1.2.0+). В іншому випадку функція є лише обгорткою навколо CG_StraightSkeleton (повільніший варіант).

When projected is true, free endpoints of the medial axis are extended to reach the polygon boundary (projected medial axis). Requires SFCGAL 2.3.0+. When built against an older SFCGAL version, a notice is emitted and the non-projected result is returned instead.

Доступність: 3.5.0

Availability: 3.7.0 - projected parameter. Requires SFCGAL >= 2.3.0 for projected result; falls back to non-projected with a notice on older versions.

[Примітка]

Ця функція ігнорує вимір Z. Вона завжди дає двовимірний результат, навіть якщо використовується для тривимірної геометрії.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

A polygon and its approximate medial axis.

Code
WITH data AS (
  SELECT 'POLYGON((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190))'::geometry AS polygon
)
SELECT polygon AS input_polygon,
       CG_ApproximateMedialAxis(polygon) AS medial_axis
FROM data;
Вивід растрових зображень
POLYGON((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190)) | MULTILINESTRING((184.189 15.811,158.377 20),(50 20,158.377 20),(50 20,35 35),(35 153.151,35 35),(35 153.151,40.697 159.303),(164.04 164.04,40.697 159.303))
Figure
Geometry figure for visual-cg-approximatemedialaxis-01

This example computes the projected medial axis with free endpoints extended to the polygon boundary.

Code
SELECT CG_ApproximateMedialAxis('POLYGON((0 0,2 0,2 1,0 1,0 0))', true);
Вивід растрових зображень
MULTILINESTRING((0 0.5,0.5 0.5,1.5 0.5,2 0.5))
Figure
Geometry figure for visual-cg-approximatemedialaxis-02

Назва

CG_GenerateFlatRoof — Generate a flat (box) roof from a footprint polygon.

Короткий огляд

geometry CG_GenerateFlatRoof(geometry geom, float8 height);

Опис

Generate a flat (box-shaped) roof as a 3D PolyhedralSurface Z from a 2D footprint polygon. The roof height above the ground plane is given by height (default 3.0).

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

Приклади

Generate a flat roof two units above a rectangular footprint.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,5 0,5 4,0 4,0 0))'::geometry AS footprint
)
SELECT CG_GenerateFlatRoof(footprint, 2.0) AS roof
FROM data;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 0 0,0 4 0,5 4 0,5 0 0,0 0 0)),((0 0 2,5 0 2,5 4 2,0 4 2,0 0 2)),((0 0 0,0 0 2,0 4 2,0 4 0,0 0 0)),((0 4 0,0 4 2,5 4 2,5 4 0,0 4 0)),((5 4 0,5 4 2,5 0 2,5 0 0,5 4 0)),((5 0 0,5 0 2,0 0 2,0 0 0,5 0 0)))
Figure
Geometry figure for visual-cg-generateflatroof-01

Назва

CG_GenerateHippedRoof — Generate a hipped roof from a footprint polygon.

Короткий огляд

geometry CG_GenerateHippedRoof(geometry geom, float8 height);

Опис

Generate a hipped roof as a 3D PolyhedralSurface Z from a 2D footprint polygon. All sides slope upward to meet at a ridge or apex. The roof height is given by height (default 3.0).

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

Приклади

The footprint and hipped roof are shown side-by-side so the generated 3D faces do not hide behind the input footprint.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,5 0,5 4,0 4,0 0))'::geometry AS input_footprint
)
SELECT input_footprint AS input_footprint,
       CG_GenerateHippedRoof(input_footprint, 2.0) AS hipped_roof
FROM data;
Вивід растрових зображень
POLYGON((0 0,5 0,5 4,0 4,0 0)) | POLYHEDRALSURFACE Z (((0 4 0,5 4 0,5 0 0,0 0 0,0 4 0)),((0 4 0,0 0 0,2 2 2,0 4 0)),((0 0 0,5 0 0,3 2 2,2 2 2,0 0 0)),((5 0 0,5 4 0,3 2 2,5 0 0)),((5 4 0,0 4 0,2 2 2,3 2 2,5 4 0)))
Figure
Geometry figure for visual-cg-generatehippedroof-01

Назва

CG_GenerateGableRoof — Generate a gable roof from a footprint polygon.

Короткий огляд

geometry CG_GenerateGableRoof(geometry geom, float8 height, float8 slope_angle);

Опис

Generate a gable roof as a 3D PolyhedralSurface Z from a 2D footprint polygon. Two opposite sides are vertical gable ends; the other two sides slope to a horizontal ridge. height sets the ridge height above the ground (default 3.0) and slope_angle controls the pitch in degrees (default 30.0). The SRID of the input geometry is preserved.

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

Приклади

Generate a gable roof using a height of 2 and a 30 degree slope.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,5 0,5 4,0 4,0 0))'::geometry AS footprint
)
SELECT CG_GenerateGableRoof(footprint, 2.0, 30.0) AS roof
FROM data;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((5 4 0,5 0 0,0 0 0,0 4 0,5 4 0)),((0 4 0,0 0 0,0 2 1.155,0 4 0)),((0 0 0,5 0 0,5 2 1.155,0 2 1.155,0 0 0)),((5 0 0,5 4 0,5 2 1.155,5 0 0)),((5 4 0,0 4 0,0 2 1.155,5 2 1.155,5 4 0)))
Figure
Geometry figure for visual-cg-generategableroof-01

Назва

CG_GenerateSkillionRoof — Generate a skillion (single-slope) roof from a footprint polygon.

Короткий огляд

geometry CG_GenerateSkillionRoof(geometry geom, float8 height, float8 slope_angle, integer primary_edge_index);

Опис

Generate a skillion (single-slope, shed-style) roof as a 3D PolyhedralSurface Z from a 2D footprint polygon. The entire roof surface slopes in one direction. height sets the maximum ridge height (default 3.0), slope_angle sets the pitch in degrees (default 30.0), and primary_edge_index selects which polygon edge defines the high side (0-based, default 0).

When the combination of height and slope_angle would cause a side wall to vanish (the slope reaches the far edge before the full height is achieved), that face is omitted from the result. This means the number of output patches can vary depending on the parameters — a lower height relative to the footprint depth produces more faces than a taller, steeper configuration.

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

Приклади

Height 2.0 produces 6 faces (all walls present); height 4.0 produces 5 faces (one side wall is filtered out because the slope reaches the far edge before the full height).

Code
SELECT
  ST_NumPatches(CG_GenerateSkillionRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))', 2.0)) AS "height 2",
  ST_NumPatches(CG_GenerateSkillionRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))', 4.0)) AS "height 4";
Вивід растрових зображень
6 | 5

The height 2.0 result is shown with its footprint.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,5 0,5 4,0 4,0 0))'::geometry AS footprint
)
SELECT CG_GenerateSkillionRoof(footprint, 2.0) AS roof
FROM data;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 4 0,5 4 0,5 0 0,0 0 0,0 4 0)),((5 0 2,5 4 2,3.464 4 2,3.464 0 2,5 0 2)),((0 4 0,0 0 0,3.464 0 2,3.464 4 2,0 4 0)),((0 0 0,5 0 0,5 0 2,3.464 0 2,0 0 0)),((5 0 0,5 4 0,5 4 2,5 0 2,5 0 0)),((5 4 0,0 4 0,3.464 4 2,5 4 2,5 4 0)))
Figure
Geometry figure for visual-cg-generateskillionroof-02

Назва

CG_GenerateRoof — Generate a roof of the requested type from a footprint polygon.

Короткий огляд

geometry CG_GenerateRoof(geometry geom, text roof_type, float8 height, float8 slope_angle, integer primary_edge_index);

Опис

Generate a roof as a 3D PolyhedralSurface Z from a 2D footprint polygon. The roof_type parameter selects the roof style (default 'HIPPED'):

  • FLAT — flat box roof.

  • HIPPED — hipped roof (all sides slope to apex).

  • GABLE — gable roof (two sloping sides, two vertical ends).

  • SKILLION — single-slope (shed) roof.

height sets the roof height (default 3.0), slope_angle sets the pitch in degrees (default 30.0), and primary_edge_index selects the reference edge for skillion roofs (default 0).

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

Приклади

The generic dispatcher returns the same 3D roofs as the specialized helpers for the same footprint.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,4 0,4 4,0 4,0 0))'::geometry AS input_footprint
)
SELECT input_footprint AS input_footprint,
       CG_GenerateRoof(input_footprint, 'HIPPED', 2.0, 30.0, 0) AS hipped_roof,
       CG_GenerateRoof(input_footprint, 'FLAT', 2.0, 30.0, 0) AS flat_roof
FROM data;
Вивід растрових зображень
POLYGON((0 0,4 0,4 4,0 4,0 0)) | POLYHEDRALSURFACE Z (((0 4 0,4 4 0,4 0 0,0 0 0,0 4 0)),((0 4 0,0 0 0,2 2 2,0 4 0)),((0 0 0,4 0 0,2 2 2,0 0 0)),((4 0 0,4 4 0,2 2 2,4 0 0)),((4 4 0,0 4 0,2 2 2,4 4 0))) | POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 4 0,4 0 0,0 0 0)),((0 0 2,4 0 2,4 4 2,0 4 2,0 0 2)),((0 0 0,0 0 2,0 4 2,0 4 0,0 0 0)),((0 4 0,0 4 2,4 4 2,4 4 0,0 4 0)),((4 4 0,4 4 2,4 0 2,4 0 0,4 4 0)),((4 0 0,4 0 2,0 0 2,0 0 0,4 0 0)))
Figure
Geometry figure for visual-cg-generateroof-01

Назва

CG_PolygonRepair — Repair an invalid polygon or multipolygon.

Короткий огляд

geometry CG_PolygonRepair(geometry geom, text rule);

Опис

Repair an invalid polygon or multipolygon using CGAL's 2D Polygon Repair algorithm. Returns a MultiPolygon.

The rule parameter controls the repair strategy:

  • EVEN_ODD (default) — areas covered an odd number of times are kept. Available with CGAL 6.0+.

  • NON_ZERO — areas with non-zero winding number are kept. Requires CGAL 6.1+.

  • UNION — union of all input polygons. Requires CGAL 6.1+.

  • INTERSECTION — intersection of all input polygons. Requires CGAL 6.1+.

Availability: 3.7.0 - requires SFCGAL >= 2.3.0 and CGAL >= 6.0.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

Приклади

Repair a self-intersecting bowtie polygon with the default EVEN_ODD rule.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,2 2,2 0,0 2,0 0))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_PolygonRepair(input_polygon) AS repaired_polygon
FROM data;
Вивід растрових зображень
POLYGON((0 0,2 2,2 0,0 2,0 0)) | MULTIPOLYGON(((0 0,1 1,0 2,0 0)),((1 1,2 0,2 2,1 1)))
Figure
Geometry figure for visual-cg-polygonrepair-01

With the UNION rule, all winding area is kept. This rule requires CGAL 6.1 or later.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,2 2,2 0,0 2,0 0))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_PolygonRepair(input_polygon, 'UNION') AS repaired_polygon
FROM data;
Вивід растрових зображень
POLYGON((0 0,2 2,2 0,0 2,0 0)) | MULTIPOLYGON(((0 0,1 1,0 2,0 0)))
Figure
Geometry figure for visual-cg-polygonrepair-02

Див. також

ST_IsValid, ST_MakeValid


Назва

CG_ConstrainedDelaunayTriangles — Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.

Короткий огляд

geometry CG_ConstrainedDelaunayTriangles(geometry g1);

Опис

Повертає обмежену триангуляцію Делоне навколо вершин вхідної геометрії. Вихідними даними є TIN.

This method needs SFCGAL backend.

Доступність: 3.0.0

This function supports 3d and will not drop the z-index.

Приклади

Constrained Delaunay triangulation of the polygon and buffered point.

Code
SELECT
  CG_ConstrainedDelaunayTriangles(
    ST_Union(
      'POLYGON((175 150,20 40,50 60,125 100,175 150))'::geometry,
      ST_Buffer('POINT(110 170)'::geometry, 20)
    )
  );
Вивід растрових зображень
TIN(((50 60,175 150,20 40,50 60)),((125 100,50 60,20 40,125 100)),((50 60,125 100,175 150,50 60)),((130 170,129.6 166.1,175 150,130 170)),((128.5 162.3,175 150,129.6 166.1,128.5 162.3)),((130 170,124.1 155.9,129.6 166.1,130 170)),((126.6 158.9,175 150,128.5 162.3,126.6 158.9)),((129.6 166.1,126.6 158.9,128.5 162.3,129.6 166.1)),((124.1 155.9,175 150,126.6 158.9,124.1 155.9)),((129.6 166.1,124.1 155.9,126.6 158.9,129.6 166.1)),((121.1 153.4,175 150,124.1 155.9,121.1 153.4)),((110 150,121.1 153.4,124.1 155.9,110 150)),((117.7 151.5,175 150,121.1 153.4,117.7 151.5)),((113.9 150.4,117.7 151.5,121.1 153.4,113.9 150.4)),((113.9 150.4,175 150,117.7 151.5,113.9 150.4)),((20 40,113.9 150.4,110 150,20 40)),((20 40,175 150,113.9 150.4,20 40)),((20 40,110 150,106.1 150.4,20 40)),((113.9 150.4,121.1 153.4,110 150,113.9 150.4)),((20 40,106.1 150.4,102.3 151.5,20 40)),((110 150,124.1 155.9,128.5 177.7,110 150)),((20 40,102.3 151.5,98.9 153.4,20 40)),((106.1 150.4,110 150,98.9 153.4,106.1 150.4)),((20 40,98.9 153.4,95.9 155.9,20 40)),((102.3 151.5,106.1 150.4,98.9 153.4,102.3 151.5)),((20 40,95.9 155.9,93.4 158.9,20 40)),((98.9 153.4,110 150,95.9 155.9,98.9 153.4)),((20 40,93.4 158.9,91.5 162.3,20 40)),((95.9 155.9,110 150,102.3 188.5,95.9 155.9)),((20 40,91.5 162.3,90.4 166.1,20 40)),((93.4 158.9,95.9 155.9,91.5 162.3,93.4 158.9)),((20 40,90.4 166.1,90 170,20 40)),((91.5 162.3,95.9 155.9,90 170,91.5 162.3)),((20 40,90 170,90.4 173.9,20 40)),((90.4 166.1,91.5 162.3,90 170,90.4 166.1)),((20 40,90.4 173.9,91.5 177.7,20 40)),((90 170,95.9 155.9,102.3 188.5,90 170)),((90.4 173.9,90 170,91.5 177.7,90.4 173.9)),((91.5 177.7,90 170,102.3 188.5,91.5 177.7)),((93.4 181.1,91.5 177.7,95.9 184.1,93.4 181.1)),((95.9 184.1,91.5 177.7,102.3 188.5,95.9 184.1)),((98.9 186.6,95.9 184.1,102.3 188.5,98.9 186.6)),((102.3 188.5,110 150,128.5 177.7,102.3 188.5)),((106.1 189.6,102.3 188.5,110 190,106.1 189.6)),((110 190,102.3 188.5,117.7 188.5,110 190)),((113.9 189.6,110 190,117.7 188.5,113.9 189.6)),((117.7 188.5,102.3 188.5,128.5 177.7,117.7 188.5)),((121.1 186.6,124.1 184.1,175 150,121.1 186.6)),((121.1 186.6,117.7 188.5,124.1 184.1,121.1 186.6)),((124.1 184.1,126.6 181.1,175 150,124.1 184.1)),((124.1 184.1,117.7 188.5,128.5 177.7,124.1 184.1)),((126.6 181.1,128.5 177.7,175 150,126.6 181.1)),((126.6 181.1,124.1 184.1,128.5 177.7,126.6 181.1)),((128.5 177.7,129.6 173.9,175 150,128.5 177.7)),((128.5 177.7,124.1 155.9,130 170,128.5 177.7)),((129.6 173.9,130 170,175 150,129.6 173.9)),((129.6 173.9,128.5 177.7,130 170,129.6 173.9)))
Figure
Geometry figure for visual-cg-constraineddelaunaytriangles-01

ST_DelaunayTriangles applied to the same input. Triangle edges cross polygon boundaries.

Code
SELECT
  ST_DelaunayTriangles(
    ST_Union(
      'POLYGON((175 150,20 40,50 60,125 100,175 150))'::geometry,
      ST_Buffer('POINT(110 170)'::geometry, 20)
    )
  );
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((95.9 184.1,93.4 181.1,95.9 155.9,95.9 184.1)), POLYGON((95.9 184.1,95.9 155.9,102.3 188.5,95.9 184.1)), POLYGON((95.9 184.1,102.3 188.5,98.9 186.6,95.9 184.1)), POLYGON((102.3 188.5,95.9 155.9,98.9 153.4,102.3 188.5)), POLYGON((102.3 188.5,98.9 153.4,102.3 151.5,102.3 188.5)), POLYGON((102.3 188.5,102.3 151.5,106.1 189.6,102.3 188.5)), POLYGON((106.1 189.6,102.3 151.5,106.1 150.4,106.1 189.6)), POLYGON((106.1 189.6,106.1 150.4,110 190,106.1 189.6)), POLYGON((110 190,106.1 150.4,110 150,110 190)), POLYGON((110 190,110 150,117.7 188.5,110 190)), POLYGON((110 190,117.7 188.5,113.9 189.6,110 190)), POLYGON((117.7 188.5,110 150,121.1 153.4,117.7 188.5)), POLYGON((117.7 188.5,121.1 153.4,121.1 186.6,117.7 188.5)), POLYGON((121.1 186.6,121.1 153.4,124.1 155.9,121.1 186.6)), POLYGON((121.1 186.6,124.1 155.9,124.1 184.1,121.1 186.6)), POLYGON((121.1 186.6,124.1 184.1,175 150,121.1 186.6)), POLYGON((175 150,124.1 184.1,126.6 181.1,175 150)), POLYGON((175 150,126.6 181.1,128.5 177.7,175 150)), POLYGON((175 150,128.5 177.7,129.6 173.9,175 150)), POLYGON((175 150,129.6 173.9,130 170,175 150)), POLYGON((175 150,130 170,129.6 166.1,175 150)), POLYGON((175 150,129.6 166.1,128.5 162.3,175 150)), POLYGON((175 150,128.5 162.3,126.6 158.9,175 150)), POLYGON((175 150,126.6 158.9,124.1 155.9,175 150)), POLYGON((175 150,124.1 155.9,125 100,175 150)), POLYGON((125 100,124.1 155.9,121.1 153.4,125 100)), POLYGON((125 100,121.1 153.4,117.7 151.5,125 100)), POLYGON((125 100,117.7 151.5,113.9 150.4,125 100)), POLYGON((125 100,113.9 150.4,110 150,125 100)), POLYGON((125 100,110 150,106.1 150.4,125 100)), POLYGON((125 100,106.1 150.4,102.3 151.5,125 100)), POLYGON((125 100,102.3 151.5,98.9 153.4,125 100)), POLYGON((125 100,98.9 153.4,50 60,125 100)), POLYGON((125 100,50 60,20 40,125 100)), POLYGON((20 40,50 60,90.4 166.1,20 40)), POLYGON((20 40,90.4 166.1,90 170,20 40)), POLYGON((20 40,90 170,90.4 173.9,20 40)), POLYGON((20 40,90.4 173.9,91.5 177.7,20 40)), POLYGON((91.5 177.7,90.4 173.9,90 170,91.5 177.7)), POLYGON((91.5 177.7,90 170,91.5 162.3,91.5 177.7)), POLYGON((91.5 177.7,91.5 162.3,93.4 158.9,91.5 177.7)), POLYGON((91.5 177.7,93.4 158.9,93.4 181.1,91.5 177.7)), POLYGON((93.4 181.1,93.4 158.9,95.9 155.9,93.4 181.1)), POLYGON((95.9 155.9,93.4 158.9,50 60,95.9 155.9)), POLYGON((95.9 155.9,50 60,98.9 153.4,95.9 155.9)), POLYGON((50 60,93.4 158.9,91.5 162.3,50 60)), POLYGON((50 60,91.5 162.3,90.4 166.1,50 60)), POLYGON((90.4 166.1,91.5 162.3,90 170,90.4 166.1)), POLYGON((110 150,113.9 150.4,121.1 153.4,110 150)), POLYGON((121.1 153.4,113.9 150.4,117.7 151.5,121.1 153.4)), POLYGON((124.1 155.9,126.6 158.9,129.6 166.1,124.1 155.9)), POLYGON((124.1 155.9,129.6 166.1,128.5 177.7,124.1 155.9)), POLYGON((124.1 155.9,128.5 177.7,124.1 184.1,124.1 155.9)), POLYGON((124.1 184.1,128.5 177.7,126.6 181.1,124.1 184.1)), POLYGON((128.5 177.7,129.6 166.1,130 170,128.5 177.7)), POLYGON((128.5 177.7,130 170,129.6 173.9,128.5 177.7)), POLYGON((129.6 166.1,126.6 158.9,128.5 162.3,129.6 166.1)))
Figure
Geometry figure for visual-cg-constraineddelaunaytriangles-02

Назва

CG_Extrude — Видавити поверхню до відповідного об'єму

Короткий огляд

geometry CG_Extrude(geometry geom, float x, float y, float z);

Опис

Extrudes the input along the vector (x, y, z) and connects it to its translated copy. Extrusion can raise the dimensionality of the result, for example from a surface to a volume.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

The figures use ST_Affine to project Z diagonally into XY after extrusion. The returned geometry from CG_Extrude remains a 3D PolyhedralSurface.

Extruding an octagonal Polygon 30 units along Z.

Code
WITH data AS (
  SELECT ST_Buffer('POINT(100 90)'::geometry, 50, 'quad_segs=2') AS geom
), projected AS (
  SELECT ST_Force2D(ST_Affine(geom,
           1, 0, 0.5, 0, 1, 0.5, 0, 0, 0, 0, 0, 0)) AS input_geom,
         ST_Force2D(ST_Affine(CG_Extrude(geom, 0, 0, 30),
           1, 0, 0.5, 0, 1, 0.5, 0, 0, 0, 0, 0, 0)) AS output_geom
  FROM data
)
SELECT input_geom AS input_geometry,
       output_geom AS extruded_projection
FROM projected;
Вивід растрових зображень
POLYGON((150 90,135.355 54.645,100 40,64.645 54.645,50 90,64.645 125.355,100 140,135.355 125.355,150 90)) | POLYHEDRALSURFACE(((150 90,135.355 54.645,100 40,64.645 54.645,50 90,64.645 125.355,100 140,135.355 125.355,150 90)),((165 105,150.355 140.355,115 155,79.645 140.355,65 105,79.645 69.645,115 55,150.355 69.645,165 105)),((150 90,165 105,150.355 69.645,135.355 54.645,150 90)),((135.355 54.645,150.355 69.645,115 55,100 40,135.355 54.645)),((100 40,115 55,79.645 69.645,64.645 54.645,100 40)),((64.645 54.645,79.645 69.645,65 105,50 90,64.645 54.645)),((50 90,65 105,79.645 140.355,64.645 125.355,50 90)),((64.645 125.355,79.645 140.355,115 155,100 140,64.645 125.355)),((100 140,115 155,150.355 140.355,135.355 125.355,100 140)),((135.355 125.355,150.355 140.355,165 105,150 90,135.355 125.355)))
Figure
Geometry figure for visual-cg-extrude-01

Extruding a LineString 10 units along Z.

Code
WITH data AS (
  SELECT 'LINESTRING(50 50,100 90,95 150)'::geometry AS geom
), projected AS (
  SELECT ST_Force2D(ST_Affine(geom,
           1, 0, 0.5, 0, 1, 0.5, 0, 0, 0, 0, 0, 0)) AS input_geom,
         ST_Force2D(ST_Affine(CG_Extrude(geom, 0, 0, 10),
           1, 0, 0.5, 0, 1, 0.5, 0, 0, 0, 0, 0, 0)) AS output_geom
  FROM data
)
SELECT input_geom AS input_geometry,
       output_geom AS extruded_projection
FROM projected;
Вивід растрових зображень
LINESTRING(50 50,100 90,95 150) | POLYHEDRALSURFACE(((50 50,100 90,105 95,55 55,50 50)),((100 90,95 150,100 155,105 95,100 90)))
Figure
Geometry figure for visual-cg-extrude-02

Назва

CG_ExtrudeStraightSkeleton — Пряма екструзія скелета

Короткий огляд

geometry CG_ExtrudeStraightSkeleton(geometry geom, float roof_height, float body_height = 0);

Опис

Обчислює екструзію з максимальною висотою геометрії багатокутника.

[Примітка]

Perhaps the first (historically) use-case of straight skeletons: given a polygonal roof, the straight skeleton directly gives the layout of each tent. If each skeleton edge is lifted from the plane a height equal to its offset distance, the resulting roof is "correct" in that water will always fall down to the contour edges (the roof's border), regardless of where it falls on the roof. The function computes this extrusion aka "roof" on a polygon. If the argument body_height > 0, so the polygon is extruded like with CG_Extrude(polygon, 0, 0, body_height). The result is an union of these polyhedralsurfaces.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

Приклади

Extrude a polygon with a hole into a body and straight-skeleton roof.

Code
WITH data AS (
  SELECT 'POLYGON ((0 0,5 0,5 5,4 5,4 4,0 4,0 0),(1 1,1 2,2 2,2 1,1 1))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_ExtrudeStraightSkeleton(input_polygon, 3.0, 2.0) AS straight_skeleton_extrusion
FROM data;
Вивід растрових зображень
POLYGON((0 0,5 0,5 5,4 5,4 4,0 4,0 0),(1 1,1 2,2 2,2 1,1 1)) | POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 4 0,4 5 0,5 5 0,5 0 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((0 0 0,0 0 2,0 4 2,0 4 0,0 0 0)),((0 4 0,0 4 2,4 4 2,4 4 0,0 4 0)),((4 4 0,4 4 2,4 5 2,4 5 0,4 4 0)),((4 5 0,4 5 2,5 5 2,5 5 0,4 5 0)),((5 5 0,5 5 2,5 0 2,5 0 0,5 5 0)),((5 0 0,5 0 2,0 0 2,0 0 0,5 0 0)),((1 1 0,1 1 2,2 1 2,2 1 0,1 1 0)),((2 1 0,2 1 2,2 2 2,2 2 0,2 1 0)),((2 2 0,2 2 2,1 2 2,1 2 0,2 2 0)),((1 2 0,1 2 2,1 1 2,1 1 0,1 2 0)),((0 4 2,0 0 2,0.5 0.5 2.5,0.5 2.5 2.5,1 3 3,0 4 2)),((0 0 2,5 0 2,3.5 1.5 3.5,2.5 0.5 2.5,0.5 0.5 2.5,0 0 2)),((5 0 2,5 5 2,4.5 4.5 2.5,4.5 3.5 2.5,3.5 2.5 3.5,3.5 1.5 3.5,5 0 2)),((5 5 2,4 5 2,4.5 4.5 2.5,5 5 2)),((4 5 2,4 4 2,4.5 3.5 2.5,4.5 4.5 2.5,4 5 2)),((4 4 2,0 4 2,1 3 3,3 3 3,3.5 2.5 3.5,4.5 3.5 2.5,4 4 2)),((2 1 2,1 1 2,0.5 0.5 2.5,2.5 0.5 2.5,2 1 2)),((1 1 2,1 2 2,0.5 2.5 2.5,0.5 0.5 2.5,1 1 2)),((1 2 2,2 2 2,3 3 3,1 3 3,0.5 2.5 2.5,1 2 2)),((2 2 2,2 1 2,2.5 0.5 2.5,3.5 1.5 3.5,3.5 2.5 3.5,3 3 3,2 2 2)))
Figure
Geometry figure for visual-cg-extrudestraightskeleton-01

Назва

CG_GreeneApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника

Короткий огляд

geometry CG_GreeneApproxConvexPartition(geometry geom);

Опис

Обчислює наближене монотонне опукле розбиття геометрії багатокутника.

[Примітка]

Розбиття багатокутника P — це набір полігонів, внутрішні частини яких не перетинаються, а об'єднання полігонів дорівнює внутрішній частині вихідного полігону P. Функції CG_ApproxConvexPartition і CG_GreeneApproxConvexPartition створюють приблизно оптимальні опуклі розбиття. Обидві ці функції створюють опуклі розбиття, спочатку розбиваючи полігон на простіші полігони. CG_ApproxConvexPartition використовує триангуляцію, а CG_GreeneApproxConvexPartition — монотонний поділ. Обидві ці функції гарантують, що вони створюють не більше ніж в чотири рази більше опуклих частин, ніж оптимальна кількість, але вони відрізняються за складністю виконання. Хоча алгоритм наближення на основі триангуляції часто дає менше опуклих частин, це не завжди так.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

Приклади

Greene's monotone-based approximation uses the same polygon and stays directly comparable in one panel.

Code
WITH data AS (
  SELECT 'POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_GreeneApproxConvexPartition(input_polygon) AS partition
FROM data;
Вивід растрових зображень
POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150)) | GEOMETRYCOLLECTION(POLYGON((32 159,0 45,41 86,32 159)), POLYGON((45 1,177 2,67 24,45 1)), POLYGON((67 24,109 31,170 60,107 61,67 24)), POLYGON((41 86,45 1,67 24,41 86)), POLYGON((107 61,32 159,41 86,67 24,107 61)), POLYGON((148 120,107 61,170 60,148 120)), POLYGON((148 120,170 60,180 110,156 150,148 120)), POLYGON((156 150,83 181,89 131,148 120,156 150)))
Figure
Geometry figure for visual-cg-greeneapproxconvexpartition-01

Назва

CG_MinkowskiSum — Обчислює суму Мінковського

Короткий огляд

geometry CG_MinkowskiSum(geometry geom1, geometry geom2);

Опис

Ця функція виконує двовимірну суму Мінковського точки, лінії або багатокутника з багатокутником.

Сума Мінковського двох геометрій A і B — це множина всіх точок, які є сумою будь-якої точки в A і B. Суми Мінковського часто використовуються в плануванні руху та комп'ютерному проектуванні. Більш детальна інформація на Вікіпедія Сума Мінковського.

Перший параметр може бути будь-якою 2D-геометрією (точка, лінія, багатокутник). Якщо передається 3D-геометрія, вона буде перетворена в 2D шляхом примусового встановлення Z на 0, що може призвести до випадків недійсність. Другий параметр повинен бути 2D-багатокутником.

Реалізація використовує CGAL 2D Minkowskisum.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади

Minkowski sum of a LineString and a circular polygon. The line crosses the polygon, and the result sweeps the polygon along the line.

Code
WITH data AS (
  SELECT ST_MakeLine(ST_Point(10, 10), ST_Point(100, 100)) AS line,
         ST_Buffer('POINT(50 50)'::geometry, 30) AS circle
)
SELECT line AS input_line,
       circle AS input_circle,
       CG_MinkowskiSum(line, circle) AS minkowski_sum
FROM data;
Вивід растрових зображень
LINESTRING(10 10,100 100) | POLYGON((80 50,79.424 44.147,77.716 38.519,74.944 33.333,71.213 28.787,66.667 25.056,61.481 22.284,55.853 20.576,50 20,44.147 20.576,38.519 22.284,33.333 25.056,28.787 28.787,25.056 33.333,22.284 38.519,20.576 44.147,20 50,20.576 55.853,22.284 61.481,25.056 66.667,28.787 71.213,33.333 74.944,38.519 77.716,44.147 79.424,50 80,55.853 79.424,61.481 77.716,66.667 74.944,71.213 71.213,74.944 66.667,77.716 61.481,79.424 55.853,80 50)) | MULTIPOLYGON(((179.424 155.853,177.716 161.481,174.944 166.667,171.213 171.213,166.667 174.944,161.481 177.716,155.853 179.424,150 180,144.147 179.424,138.519 177.716,133.333 174.944,128.787 171.213,38.787 81.213,35.056 76.667,32.284 71.481,30.576 65.853,30 60,30.576 54.147,32.284 48.519,35.056 43.333,38.787 38.787,43.333 35.056,48.519 32.284,54.147 30.576,60 30,65.853 30.576,71.481 32.284,76.667 35.056,81.213 38.787,171.213 128.787,174.944 133.333,177.716 138.519,179.424 144.147,180 150,179.424 155.853)))
Figure
Geometry figure for visual-cg-minkowskisum-01

Minkowski sum of a MultiPoint and a polygon. The result contains one translated copy of the polygon for each point.

Code
WITH data AS (
  SELECT 'MULTIPOINT(25 50,70 25)'::geometry AS points,
         'POLYGON((130 150,20 40,50 60,125 100,130 150))'::geometry AS polygon
)
SELECT points AS input_points,
       polygon AS input_polygon,
       CG_MinkowskiSum(points, polygon) AS minkowski_sum
FROM data;
Вивід растрових зображень
MULTIPOINT((25 50),(70 25)) | POLYGON((130 150,20 40,50 60,125 100,130 150)) | MULTIPOLYGON(((45 90,75 110,150 150,155 200,45 90)),((90 65,120 85,195 125,200 175,90 65)))
Figure
Geometry figure for visual-cg-minkowskisum-02

Назва

CG_OptimalAlphaShape — Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.

Короткий огляд

geometry CG_OptimalAlphaShape(geometry geom, boolean allow_holes = false, integer nb_components = 1);

Опис

Обчислює «оптимальну» альфа-форму точок у геометрії. Альфа-форма обчислюється з використанням значення α, обраного таким чином, щоб:

  1. кількість елементів полігону дорівнює або менше, ніж nb_components (за замовчуванням 1)

  2. всі точки введення містяться в фігурі

Результат не буде містити отвори, якщо опціональний аргумент allow_holes не буде вказаний як true.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.4.1.

This method needs SFCGAL backend.

Приклади

The original point cloud and the optimal alpha-shape share one comparison frame.

Code
WITH data AS (
  SELECT 'MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),
(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),
(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry AS input_points
)
SELECT input_points AS input_points,

         CG_OptimalAlphaShape(input_points) AS optimal_alpha_shape
FROM data;
Вивід растрових зображень
MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97)) | MULTIPOLYGON(((89 53,88 58,83 64,85 71,83 72,75 77,75 84,76 88,72 95,64 97,57 97,52 98,49 95,45 90,39 88,34 86,26 85,24 82,27 77,24 67,23 60,27 54,26 44,23 36,28 33,30 22,37 23,43 19,53 18,65 16,73 16,78 16,84 19,88 29,90 30,87 42,91 50,89 53)))
Figure
Geometry figure for visual-cg-optimalalphashape-01

Allowing holes keeps the same outer shell but carves a central hole.

Code
WITH data AS (
  SELECT 'MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry AS input_points
)
SELECT input_points AS input_points,

         CG_OptimalAlphaShape(input_points, allow_holes => true) AS optimal_alpha_shape
FROM data;
Вивід растрових зображень
MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97)) | MULTIPOLYGON(((89 53,88 58,83 64,85 71,83 72,75 77,75 84,76 88,72 95,64 97,57 97,52 98,49 95,45 90,39 88,34 86,26 85,24 82,27 77,24 67,23 60,27 54,26 44,23 36,28 33,30 22,37 23,43 19,53 18,65 16,73 16,78 16,84 19,88 29,90 30,87 42,91 50,89 53),(36 68,40 75,43 80,50 86,60 81,68 73,77 67,81 60,82 54,81 47,78 43,81 29,76 27,70 20,62 22,55 26,54 32,48 34,44 42,38 46,36 61,36 68)))
Figure
Geometry figure for visual-cg-optimalalphashape-02

Див. також

ST_ConcaveHull, CG_AlphaShape


Назва

CG_OptimalConvexPartition — Обчислює оптимальний опуклий поділ геометрії багатокутника

Короткий огляд

geometry CG_OptimalConvexPartition(geometry geom);

Опис

Обчислює оптимальний опуклий поділ геометрії багатокутника.

[Примітка]

Розбиття багатокутника P — це набір багатокутників, внутрішні частини яких не перетинаються, а об'єднання багатокутників дорівнює внутрішній частині вихідного багатокутника P. CG_OptimalConvexPartition створює розбиття, яке є оптимальним за кількістю частин.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

Приклади

The optimal convex partition uses the same polygon and produces the smallest documented piece count.

Code
WITH data AS (
  SELECT 'POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_OptimalConvexPartition(input_polygon) AS partition
FROM data;
Вивід растрових зображень
POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150)) | GEOMETRYCOLLECTION(POLYGON((156 150,83 181,89 131,148 120,156 150)), POLYGON((32 159,0 45,41 86,32 159)), POLYGON((45 1,177 2,67 24,45 1)), POLYGON((41 86,45 1,67 24,41 86)), POLYGON((107 61,32 159,41 86,67 24,109 31,107 61)), POLYGON((148 120,107 61,109 31,170 60,180 110,148 120)), POLYGON((156 150,148 120,180 110,156 150)))
Figure
Geometry figure for visual-cg-optimalconvexpartition-01

Назва

CG_StraightSkeleton — Обчислити прямий скелет з геомeтрії

Короткий огляд

geometry CG_StraightSkeleton(geometry geom, boolean use_distance_as_m = false);

Опис

Computes the straight skeleton of a polygon by tracing the inward propagation of its edges. When use_distance_as_m is true, the M coordinate of each output point stores its distance from the input boundary.

Доступність: 3.5.0

Для використання опції use_distance_as_m необхідна версія SFCGAL >= 1.3.8

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Code
WITH data AS (
  SELECT 'POLYGON((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190))'::geometry AS polygon
)
SELECT CG_StraightSkeleton(polygon) AS straight_skeleton
FROM data;
Вивід растрових зображень
MULTILINESTRING((190 190,164.03987973986756 164.03987973986756),(10 190,40.697077206292434 159.30292279370755),(10 10,35 35),(190 10,184.18861169915812 15.811388300841896),(190 20,184.18861169915812 15.811388300841896),(160 30,158.3772233983162 20),(60 30,50 20),(60 130,35 153.15077848154866),(190 140,164.03987973986756 164.03987973986756),(184.18861169915812 15.811388300841896,158.3772233983162 20),(50 20,158.3772233983162 20),(50 20,35 35),(35 153.15077848154866,35 35),(35 153.15077848154866,40.697077206292434 159.30292279370755),(164.03987973986756 164.03987973986756,40.697077206292434 159.30292279370755))
Figure
Geometry figure for visual-cg-straightskeleton-01
Code
WITH data AS (
  SELECT 'POLYGON((0 0,1 0,1 1,0 1,0 0))'::geometry AS polygon
)
SELECT CG_StraightSkeleton(polygon, true) AS straight_skeleton_with_m
FROM data;
Вивід растрових зображень
MULTILINESTRING M ((0 0 0,0.5 0.5 0.5),(1 0 0,0.5 0.5 0.5),(1 1 0,0.5 0.5 0.5),(0 1 0,0.5 0.5 0.5))
Figure
Geometry figure for visual-cg-straightskeleton-02

Зверніть увагу, що дійсні вхідні дані з кільцями, які стикаються в одній точці, спричинять помилку.

Code
SELECT CG_StraightSkeleton('POLYGON((0 0,3 0,3 3,0 3,0 0),(0 0,1 2,2 1,0 0))'));
Вивід растрових зображень
NOTICE:  During straight_skeleton(A) :
NOTICE:    with A: POLYGON((0/1 0/1,3/1 0/1,3/1 3/1,0/1 3/1,0/1 0/1),(0/1 0/1,1/1 2/1,2/1 1/1,0/1 0/1))
ERROR:  straight skeleton of Polygon with point touching rings is not implemented.

Назва

CG_Tesselate — Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN

Короткий огляд

geometry CG_Tesselate(geometry geom);

Опис

Приймає як вхідні дані поверхню типу MULTI(POLYGON) або POLYHEDRALSURFACE і повертає представлення TIN за допомогою процесу тесселяції з використанням трикутників.

[Примітка]

ST_TriangulatePolygon виконує подібну функцію, за винятком того, що повертає колекцію геометрії багатокутників замість TIN, а також працює тільки з 2D-геометріями.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Tessellation divides each face of a cube into triangles.

Code
WITH data AS (
  SELECT 'POLYHEDRALSURFACE Z( ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) )'::geometry AS cube
)
SELECT CG_Tesselate(cube) AS tessellation
FROM data;
Вивід растрових зображень
TIN Z (((0 0 0,0 0 1,0 1 1,0 0 0)),((0 1 0,0 0 0,0 1 1,0 1 0)),((0 0 0,0 1 0,1 1 0,0 0 0)),((1 0 0,0 0 0,1 1 0,1 0 0)),((0 0 1,1 0 0,1 0 1,0 0 1)),((0 0 1,0 0 0,1 0 0,0 0 1)),((1 1 0,1 1 1,1 0 1,1 1 0)),((1 0 0,1 1 0,1 0 1,1 0 0)),((0 1 0,0 1 1,1 1 1,0 1 0)),((1 1 0,0 1 0,1 1 1,1 1 0)),((0 1 1,1 0 1,1 1 1,0 1 1)),((0 1 1,0 0 1,1 0 1,0 1 1)))
Figure
Geometry figure for visual-cg-tesselate-01

Tessellation of a Polygon.

Code
WITH data AS (
  SELECT 'POLYGON((10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190))'::geometry AS polygon
)
SELECT polygon AS input_polygon,
       CG_Tesselate(polygon) AS tessellation
FROM data;
Вивід растрових зображень
POLYGON((10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190)) | TIN(((80 130,10 70,80 70,80 130)),((50 160,10 190,10 70,50 160)),((80 130,50 160,10 70,80 130)),((120 160,120 190,50 160,120 160)),((120 190,10 190,50 160,120 190)))
Figure
Geometry figure for visual-cg-tesselate-02

Назва

CG_Triangulate — Тріангулює полігональну геометрію

Короткий огляд

geometry CG_Triangulate( geometry geom );

Опис

Триангулює полігональну геометрію.

Виконується модулем SFCGAL

[Примітка]

ПРИМІТКА: ця функція повертає геометрію, що представляє триангульований результат.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

Code
SELECT CG_Triangulate(
  'POLYGON((0 0,1 0,1 1,0 1,0 0),
            (0.2 0.2,0.2 0.8,0.8 0.8,0.8 0.2,0.2 0.2))'
);
Вивід растрових зображень
TIN(((0.8 0.2,0.2 0.2,1 0,0.8 0.2)),((0.2 0.2,0 0,1 0,0.2 0.2)),((1 1,0.8 0.8,0.8 0.2,1 1)),((0 1,0 0,0.2 0.2,0 1)),((0 1,0.2 0.8,1 1,0 1)),((0 1,0.2 0.2,0.2 0.8,0 1)),((0.2 0.8,0.8 0.8,1 1,0.2 0.8)),((0.2 0.8,0.2 0.2,0.8 0.2,0.2 0.8)),((1 1,0.8 0.2,1 0,1 1)),((0.8 0.8,0.2 0.8,0.8 0.2,0.8 0.8)))
Figure
Geometry figure for visual-cg-triangulate-01

Назва

CG_Visibility — Обчислити полігон видимості з точки або сегмента в геометрії полігона

Короткий огляд

geometry CG_Visibility(geometry polygon, geometry point);

geometry CG_Visibility(geometry polygon, geometry pointA, geometry pointB);

Опис

Returns the portion of a polygon visible from an observer point, or from the observer segment defined by pointA and pointB.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

Visibility from a point inside a polygon with holes.

Code
WITH data AS (
  SELECT 'POLYGON((23.5 23.5,23.5 173.5,173.5 173.5,173.5 23.5,23.5 23.5),(108 98,108 36,156 37,155 99,108 98),(107 157.5,107 106.5,135 107.5,133 127.5,143.5 127.5,143.5 108.5,153.5 109.5,151.5 166,107 157.5),(41 95.5,41 35,100.5 36,98.5 68,78.5 68,77.5 96.5,41 95.5),(39 150,40 104,97.5 106.5,95.5 152,39 150))'::geometry AS polygon,
         'POINT(91 87)'::geometry AS observer
)
SELECT ST_Collect(polygon, observer) AS input_scene,
       CG_Visibility(polygon, observer) AS visibility
FROM data;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((23.5 23.5,23.5 173.5,173.5 173.5,173.5 23.5,23.5 23.5),(108 98,108 36,156 37,155 99,108 98),(107 157.5,107 106.5,135 107.5,133 127.5,143.5 127.5,143.5 108.5,153.5 109.5,151.5 166,107 157.5),(41 95.5,41 35,100.5 36,98.5 68,78.5 68,77.5 96.5,41 95.5),(39 150,40 104,97.5 106.5,95.5 152,39 150)), POINT(91 87)) | POLYGON((78.5 68,98.5 68,108 43.93333333333334,108 98,121.96219931271477 107.03436426116838,107 106.5,107 135,97.5 106.5,65.28017241379311 105.09913793103448,77.5 96.5,78.5 68))
Figure
Geometry figure for visual-cg-visibility-01

Visibility from a segment inside the same polygon.

Code
WITH data AS (
  SELECT 'POLYGON((23.5 23.5,23.5 173.5,173.5 173.5,173.5 23.5,23.5 23.5),(108 98,108 36,156 37,155 99,108 98),(107 157.5,107 106.5,135 107.5,133 127.5,143.5 127.5,143.5 108.5,153.5 109.5,151.5 166,107 157.5),(41 95.5,41 35,100.5 36,98.5 68,78.5 68,77.5 96.5,41 95.5),(39 150,40 104,97.5 106.5,95.5 152,39 150))'::geometry AS polygon,
         'LINESTRING(78.5 68,98.5 68)'::geometry AS observer
)
SELECT ST_Collect(polygon, observer) AS input_scene,
       CG_Visibility(polygon,
                     ST_StartPoint(observer),
                     ST_EndPoint(observer)) AS visibility
FROM data;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((23.5 23.5,23.5 173.5,173.5 173.5,173.5 23.5,23.5 23.5),(108 98,108 36,156 37,155 99,108 98),(107 157.5,107 106.5,135 107.5,133 127.5,143.5 127.5,143.5 108.5,153.5 109.5,151.5 166,107 157.5),(41 95.5,41 35,100.5 36,98.5 68,78.5 68,77.5 96.5,41 95.5),(39 150,40 104,97.5 106.5,95.5 152,39 150)), LINESTRING(78.5 68,98.5 68)) | POLYGON((78.5 68,98.5 68,100.5 36,101.28125 23.5,111.7109375 23.5,108 36,108 98,110.73389524382901 106.63335340156533,107 106.5,107 157.5,108.51955307262571 173.5,95.75974025974025 173.5,97.5 106.5,70.9811529933481 105.3470066518847,77.5 96.5,78.5 68))
Figure
Geometry figure for visual-cg-visibility-02

Назва

CG_YMonotonePartition — Обчислює y-монотонний поділ геометрії багатокутника

Короткий огляд

geometry CG_YMonotonePartition(geometry geom);

Опис

Обчислює y-монотонний поділ геометрії багатокутника.

[Примітка]

Розбиття багатокутника P — це множина багатокутників, такі, що внутрішні частини багатокутників не перетинаються, а об'єднання багатокутників дорівнює внутрішній частині вихідного багатокутника P. Y-монотонний багатокутник — це багатокутник, вершини v1,…,vn якого можна розділити на два ланцюги v1,…,vk і vk,…,vn,v1, такі, що будь-яка горизонтальна лінія перетинає кожен ланцюг не більше одного разу. Цей алгоритм не гарантує обмеження кількості багатокутників, що утворюються, відносно оптимальної кількості.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

Приклади

The same polygon can also be partitioned into y-monotone pieces for downstream processing.

Code
WITH data AS (
  SELECT 'POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_YMonotonePartition(input_polygon) AS partition
FROM data;
Вивід растрових зображень
POLYGON((156 150,83 181,89 131,148 120,107 61,32 159,0 45,41 86,45 1,177 2,67 24,109 31,170 60,180 110,156 150)) | GEOMETRYCOLLECTION(POLYGON((32 159,0 45,41 86,32 159)), POLYGON((107 61,32 159,41 86,45 1,177 2,67 24,109 31,170 60,107 61)), POLYGON((156 150,83 181,89 131,148 120,107 61,170 60,180 110,156 150)))
Figure
Geometry figure for visual-cg-ymonotonepartition-01

Назва

CG_StraightSkeletonPartition — Обчислює прямий скелетний поділ багатокутника.

Короткий огляд

geometry CG_StraightSkeletonPartition(geometry geom, boolean auto_orientation);

Опис

Обчислює пряме скелетне розділення вхідної геометрії багатокутника geom. Прямий скелет — це розділення багатокутника на грані, утворені шляхом відстеження збігання його ребер. Якщо auto_orientation встановлено на true, функція автоматично налаштує орієнтацію вхідного багатокутника, щоб забезпечити правильні результати.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0.

This method needs SFCGAL backend.

Приклади

Code
SELECT CG_StraightSkeletonPartition('POLYGON((0 0,4 0,2 2,0 0))', true);
Вивід растрових зображень
POLYHEDRALSURFACE(((0 0,2 0.82842712474619,2 2,0 0)),((4 0,2 0.82842712474619,0 0,4 0)),((2 2,2 0.82842712474619,4 0,2 2)))
Figure
Geometry figure for visual-cg-straightskeletonpartition-01

Straight skeleton partition of a polygon.

Code
WITH data AS (
  SELECT 'POLYGON((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190))'::geometry AS polygon
)
SELECT polygon AS input_polygon,
       CG_StraightSkeletonPartition(polygon, true) AS skeleton_partition
FROM data;
Вивід растрових зображень
POLYGON((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190)) | POLYHEDRALSURFACE(((190 190,164.04 164.04,190 140,190 190)),((10 190,40.697 159.303,164.04 164.04,190 190,10 190)),((10 10,35 35,35 153.151,40.697 159.303,10 190,10 10)),((190 10,184.189 15.811,158.377 20,50 20,35 35,10 10,190 10)),((190 20,184.189 15.811,190 10,190 20)),((160 30,158.377 20,184.189 15.811,190 20,160 30)),((60 30,50 20,158.377 20,160 30,60 30)),((60 130,35 153.151,35 35,50 20,60 30,60 130)),((190 140,164.04 164.04,40.697 159.303,35 153.151,60 130,190 140)))
Figure
Geometry figure for visual-cg-straightskeletonpartition-02

Назва

CG_3DBuffer — Обчислює 3D-буфер навколо геометрії.

Короткий огляд

geometry CG_3DBuffer(geometry geom, float8 radius, integer segments, integer buffer_type);

Опис

Створює 3D-буфер навколо вхідної геометрії geom із заданим radius. Буфер будується в 3D-просторі, створюючи об'ємне представлення оточення геометрії. Параметр segments визначає кількість сегментів, що використовуються для апроксимації вигнутих ділянок буфера, з мінімальним значенням 4 сегменти. Параметр buffer_type визначає тип буфера, що створюється: 0: округлений буфер (за замовчуванням) 1: плоский буфер 2: квадратний буфер

Геометрія вхідних даних повинна бути точкою або лінією.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

Приклади

Code
SELECT CG_3DBuffer('POINT(0 0 0)', 1, 8, 0);
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 0 1, 0.5 -0.5 0.71, 0 -0.71 0.71, 0 0 1)), ... )

A rounded point buffer using 32 segments.

Code
SELECT
  'POINT(100 90)'::geometry AS input_geometry,
  CG_3DBuffer('POINT(100 90)'::geometry, 50, 32, 0) AS buffer;
Вивід растрових зображень
POINT(100 90) | POLYHEDRALSURFACE Z (((74 133 0,66 126 7,78 133 12,74 133 0)),((60 115 15,71 124 21,66 126 7,60 115 15)),((85 130 25,78 133 12,71 124 21,85 130 25)),((66 126 7,71 124 21,78 133 12,66 126 7)),((57 90 26,64 97 34,57 102 22,57 90 26)),((75 105 40,66 111 29,64 97 34,75 105 40)),((60 115 15,57 102 22,66 111 29,60 115 15)),((64 97 34,66 111 29,57 102 22,64 97 34)),((100 116 43,93 124 36,88 112 43,100 116 43)),((85 130 25,79 119 34,93 124 36,85 130 25)),((75 105 40,88 112 43,79 119 34,75 105 40)),((93 124 36,79 119 34,88 112 43,93 124 36)),((60 115 15,66 111 29,71 124 21,60 115 15)),((75 105 40,79 119 34,66 111 29,75 105 40)),((85 130 25,71 124 21,79 119 34,85 130 25)),((66 111 29,79 119 34,71 124 21,66 111 29)),((74 133 0,78 133 12,85 138 0,74 133 0)),((85 130 25,92 138 13,78 133 12,85 130 25)),((100 140 0,85 138 0,92 138 13,100 140 0)),((78 133 12,92 138 13,85 138 0,78 133 12)),((100 116 43,107 124 36,93 124 36,100 116 43)),((115 130 25,100 133 26,107 124 36,115 130 25)),((85 130 25,93 124 36,100 133 26,85 130 25)),((107 124 36,100 133 26,93 124 36,107 124 36)),((126 133 0,115 138 0,122 133 12,126 133 0)),((100 140 0,108 138 13,115 138 0,100 140 0)),((115 130 25,122 133 12,108 138 13,115 130 25)),((115 138 0,108 138 13,122 133 12,115 138 0)),((85 130 25,100 133 26,92 138 13,85 130 25)),((115 130 25,108 138 13,100 133 26,115 130 25)),((100 140 0,92 138 13,108 138 13,100 140 0)),((100 133 26,108 138 13,92 138 13,100 133 26)),((74 133 0,85 138 0,78 133 -12,74 133 0)),((100 140 0,92 138 -13,85 138 0,100 140 0)),((85 130 -25,78 133 -12,92 138 -13,85 130 -25)),((85 138 0,92 138 -13,78 133 -12,85 138 0)),((126 133 0,122 133 -12,115 138 0,126 133 0)),((115 130 -25,108 138 -13,122 133 -12,115 130 -25)),((100 140 0,115 138 0,108 138 -13,100 140 0)),((122 133 -12,108 138 -13,115 138 0,122 133 -12)),((100 116 -43,93 124 -36,107 124 -36,100 116 -43)),((85 130 -25,100 133 -26,93 124 -36,85 130 -25)),((115 130 -25,107 124 -36,100 133 -26,115 130 -25)),((93 124 -36,100 133 -26,107 124 -36,93 124 -36)),((100 140 0,108 138 -13,92 138 -13,100 140 0)),((115 130 -25,100 133 -26,108 138 -13,115 130 -25)),((85 130 -25,92 138 -13,100 133 -26,85 130 -25)),((108 138 -13,100 133 -26,92 138 -13,108 138 -13)),((74 133 0,78 133 -12,66 126 -7,74 133 0)),((85 130 -25,71 124 -21,78 133 -12,85 130 -25)),((60 115 -15,66 126 -7,71 124 -21,60 115 -15)),((78 133 -12,71 124 -21,66 126 -7,78 133 -12)),((100 116 -43,88 112 -43,93 124 -36,100 116 -43)),((75 105 -40,79 119 -34,88 112 -43,75 105 -40)),((85 130 -25,93 124 -36,79 119 -34,85 130 -25)),((88 112 -43,79 119 -34,93 124 -36,88 112 -43)),((57 90 -26,57 102 -22,64 97 -34,57 90 -26)),((60 115 -15,66 111 -29,57 102 -22,60 115 -15)),((75 105 -40,64 97 -34,66 111 -29,75 105 -40)),((57 102 -22,66 111 -29,64 97 -34,57 102 -22)),((85 130 -25,79 119 -34,71 124 -21,85 130 -25)),((75 105 -40,66 111 -29,79 119 -34,75 105 -40)),((60 115 -15,71 124 -21,66 111 -29,60 115 -15)),((79 119 -34,66 111 -29,71 124 -21,79 119 -34)),((74 133 0,66 126 -7,66 126 7,74 133 0)),((60 115 -15,57 116 0,66 126 -7,60 115 -15)),((60 115 15,66 126 7,57 116 0,60 115 15)),((66 126 -7,57 116 0,66 126 7,66 126 -7)),((57 90 -26,52 90 -15,57 102 -22,57 90 -26)),((50 90 0,52 103 -8,52 90 -15,50 90 0)),((60 115 -15,57 102 -22,52 103 -8,60 115 -15)),((52 90 -15,52 103 -8,57 102 -22,52 90 -15)),((57 90 26,57 102 22,52 90 15,57 90 26)),((60 115 15,52 103 8,57 102 22,60 115 15)),((50 90 0,52 90 15,52 103 8,50 90 0)),((57 102 22,52 103 8,52 90 15,57 102 22)),((60 115 -15,52 103 -8,57 116 0,60 115 -15)),((50 90 0,52 103 8,52 103 -8,50 90 0)),((60 115 15,57 116 0,52 103 8,60 115 15)),((52 103 -8,52 103 8,57 116 0,52 103 -8)),((126 133 0,122 133 12,134 126 7,126 133 0)),((115 130 25,129 124 21,122 133 12,115 130 25)),((140 115 15,134 126 7,129 124 21,140 115 15)),((122 133 12,129 124 21,134 126 7,122 133 12)),((100 116 43,112 112 43,107 124 36,100 116 43)),((125 105 40,121 119 34,112 112 43,125 105 40)),((115 130 25,107 124 36,121 119 34,115 130 25)),((112 112 43,121 119 34,107 124 36,112 112 43)),((143 90 26,143 102 22,136 97 34,143 90 26)),((140 115 15,134 111 29,143 102 22,140 115 15)),((125 105 40,136 97 34,134 111 29,125 105 40)),((143 102 22,134 111 29,136 97 34,143 102 22)),((115 130 25,121 119 34,129 124 21,115 130 25)),((125 105 40,134 111 29,121 119 34,125 105 40)),((140 115 15,129 124 21,134 111 29,140 115 15)),((121 119 34,134 111 29,129 124 21,121 119 34)),((100 116 43,88 112 43,100 105 48,100 116 43)),((75 105 40,87 98 48,88 112 43,75 105 40)),((100 90 50,100 105 48,87 98 48,100 90 50)),((88 112 43,87 98 48,100 105 48,88 112 43)),((57 90 26,64 83 34,64 97 34,57 90 26)),((75 75 40,74 90 43,64 83 34,75 75 40)),((75 105 40,64 97 34,74 90 43,75 105 40)),((64 83 34,74 90 43,64 97 34,64 83 34)),((100 64 43,100 75 48,88 68 43,100 64 43)),((100 90 50,87 82 48,100 75 48,100 90 50)),((75 75 40,88 68 43,87 82 48,75 75 40)),((100 75 48,87 82 48,88 68 43,100 75 48)),((75 105 40,74 90 43,87 98 48,75 105 40)),((75 75 40,87 82 48,74 90 43,75 75 40)),((100 90 50,87 98 48,87 82 48,100 90 50)),((74 90 43,87 82 48,87 98 48,74 90 43)),((57 90 26,52 90 15,57 78 22,57 90 26)),((50 90 0,52 77 8,52 90 15,50 90 0)),((60 65 15,57 78 22,52 77 8,60 65 15)),((52 90 15,52 77 8,57 78 22,52 90 15)),((57 90 -26,57 78 -22,52 90 -15,57 90 -26)),((60 65 -15,52 77 -8,57 78 -22,60 65 -15)),((50 90 0,52 90 -15,52 77 -8,50 90 0)),((57 78 -22,52 77 -8,52 90 -15,57 78 -22)),((74 47 0,66 54 7,66 54 -7,74 47 0)),((60 65 15,57 64 0,66 54 7,60 65 15)),((60 65 -15,66 54 -7,57 64 0,60 65 -15)),((66 54 7,57 64 0,66 54 -7,66 54 7)),((50 90 0,52 77 -8,52 77 8,50 90 0)),((60 65 -15,57 64 0,52 77 -8,60 65 -15)),((60 65 15,52 77 8,57 64 0,60 65 15)),((52 77 -8,57 64 0,52 77 8,52 77 -8)),((57 90 -26,64 97 -34,64 83 -34,57 90 -26)),((75 105 -40,74 90 -43,64 97 -34,75 105 -40)),((75 75 -40,64 83 -34,74 90 -43,75 75 -40)),((64 97 -34,74 90 -43,64 83 -34,64 97 -34)),((100 116 -43,100 105 -48,88 112 -43,100 116 -43)),((100 90 -50,87 98 -48,100 105 -48,100 90 -50)),((75 105 -40,88 112 -43,87 98 -48,75 105 -40)),((100 105 -48,87 98 -48,88 112 -43,100 105 -48)),((100 64 -43,88 68 -43,100 75 -48,100 64 -43)),((75 75 -40,87 82 -48,88 68 -43,75 75 -40)),((100 90 -50,100 75 -48,87 82 -48,100 90 -50)),((88 68 -43,87 82 -48,100 75 -48,88 68 -43)),((75 105 -40,87 98 -48,74 90 -43,75 105 -40)),((100 90 -50,87 82 -48,87 98 -48,100 90 -50)),((75 75 -40,74 90 -43,87 82 -48,75 75 -40)),((87 98 -48,87 82 -48,74 90 -43,87 98 -48)),((100 116 -43,107 124 -36,112 112 -43,100 116 -43)),((115 130 -25,121 119 -34,107 124 -36,115 130 -25)),((125 105 -40,112 112 -43,121 119 -34,125 105 -40)),((107 124 -36,121 119 -34,112 112 -43,107 124 -36)),((126 133 0,134 126 -7,122 133 -12,126 133 0)),((140 115 -15,129 124 -21,134 126 -7,140 115 -15)),((115 130 -25,122 133 -12,129 124 -21,115 130 -25)),((134 126 -7,129 124 -21,122 133 -12,134 126 -7)),((143 90 -26,136 97 -34,143 102 -22,143 90 -26)),((125 105 -40,134 111 -29,136 97 -34,125 105 -40)),((140 115 -15,143 102 -22,134 111 -29,140 115 -15)),((136 97 -34,134 111 -29,143 102 -22,136 97 -34)),((115 130 -25,129 124 -21,121 119 -34,115 130 -25)),((140 115 -15,134 111 -29,129 124 -21,140 115 -15)),((125 105 -40,121 119 -34,134 111 -29,125 105 -40)),((129 124 -21,134 111 -29,121 119 -34,129 124 -21)),((126 47 0,134 54 7,122 47 12,126 47 0)),((140 65 15,129 56 21,134 54 7,140 65 15)),((115 50 25,122 47 12,129 56 21,115 50 25)),((134 54 7,129 56 21,122 47 12,134 54 7)),((143 90 26,136 83 34,143 78 22,143 90 26)),((125 75 40,134 69 29,136 83 34,125 75 40)),((140 65 15,143 78 22,134 69 29,140 65 15)),((136 83 34,134 69 29,143 78 22,136 83 34)),((100 64 43,107 56 36,112 68 43,100 64 43)),((115 50 25,121 61 34,107 56 36,115 50 25)),((125 75 40,112 68 43,121 61 34,125 75 40)),((107 56 36,121 61 34,112 68 43,107 56 36)),((140 65 15,134 69 29,129 56 21,140 65 15)),((125 75 40,121 61 34,134 69 29,125 75 40)),((115 50 25,129 56 21,121 61 34,115 50 25)),((134 69 29,121 61 34,129 56 21,134 69 29)),((126 47 0,122 47 12,115 42 0,126 47 0)),((115 50 25,108 42 13,122 47 12,115 50 25)),((100 40 0,115 42 0,108 42 13,100 40 0)),((122 47 12,108 42 13,115 42 0,122 47 12)),((100 64 43,93 56 36,107 56 36,100 64 43)),((85 50 25,100 47 26,93 56 36,85 50 25)),((115 50 25,107 56 36,100 47 26,115 50 25)),((93 56 36,100 47 26,107 56 36,93 56 36)),((74 47 0,85 42 0,78 47 12,74 47 0)),((100 40 0,92 42 13,85 42 0,100 40 0)),((85 50 25,78 47 12,92 42 13,85 50 25)),((85 42 0,92 42 13,78 47 12,85 42 0)),((115 50 25,100 47 26,108 42 13,115 50 25)),((85 50 25,92 42 13,100 47 26,85 50 25)),((100 40 0,108 42 13,92 42 13,100 40 0)),((100 47 26,92 42 13,108 42 13,100 47 26)),((126 47 0,115 42 0,122 47 -12,126 47 0)),((100 40 0,108 42 -13,115 42 0,100 40 0)),((115 50 -25,122 47 -12,108 42 -13,115 50 -25)),((115 42 0,108 42 -13,122 47 -12,115 42 0)),((74 47 0,78 47 -12,85 42 0,74 47 0)),((85 50 -25,92 42 -13,78 47 -12,85 50 -25)),((100 40 0,85 42 0,92 42 -13,100 40 0)),((78 47 -12,92 42 -13,85 42 0,78 47 -12)),((100 64 -43,107 56 -36,93 56 -36,100 64 -43)),((115 50 -25,100 47 -26,107 56 -36,115 50 -25)),((85 50 -25,93 56 -36,100 47 -26,85 50 -25)),((107 56 -36,100 47 -26,93 56 -36,107 56 -36)),((100 40 0,92 42 -13,108 42 -13,100 40 0)),((85 50 -25,100 47 -26,92 42 -13,85 50 -25)),((115 50 -25,108 42 -13,100 47 -26,115 50 -25)),((92 42 -13,100 47 -26,108 42 -13,92 42 -13)),((126 47 0,122 47 -12,134 54 -7,126 47 0)),((115 50 -25,129 56 -21,122 47 -12,115 50 -25)),((140 65 -15,134 54 -7,129 56 -21,140 65 -15)),((122 47 -12,129 56 -21,134 54 -7,122 47 -12)),((100 64 -43,112 68 -43,107 56 -36,100 64 -43)),((125 75 -40,121 61 -34,112 68 -43,125 75 -40)),((115 50 -25,107 56 -36,121 61 -34,115 50 -25)),((112 68 -43,121 61 -34,107 56 -36,112 68 -43)),((143 90 -26,143 78 -22,136 83 -34,143 90 -26)),((140 65 -15,134 69 -29,143 78 -22,140 65 -15)),((125 75 -40,136 83 -34,134 69 -29,125 75 -40)),((143 78 -22,134 69 -29,136 83 -34,143 78 -22)),((115 50 -25,121 61 -34,129 56 -21,115 50 -25)),((125 75 -40,134 69 -29,121 61 -34,125 75 -40)),((140 65 -15,129 56 -21,134 69 -29,140 65 -15)),((121 61 -34,134 69 -29,129 56 -21,121 61 -34)),((126 47 0,134 54 -7,134 54 7,126 47 0)),((140 65 -15,143 64 0,134 54 -7,140 65 -15)),((140 65 15,134 54 7,143 64 0,140 65 15)),((134 54 -7,143 64 0,134 54 7,134 54 -7)),((143 90 -26,148 90 -15,143 78 -22,143 90 -26)),((150 90 0,148 77 -8,148 90 -15,150 90 0)),((140 65 -15,143 78 -22,148 77 -8,140 65 -15)),((148 90 -15,148 77 -8,143 78 -22,148 90 -15)),((143 90 26,143 78 22,148 90 15,143 90 26)),((140 65 15,148 77 8,143 78 22,140 65 15)),((150 90 0,148 90 15,148 77 8,150 90 0)),((143 78 22,148 77 8,148 90 15,143 78 22)),((140 65 -15,148 77 -8,143 64 0,140 65 -15)),((150 90 0,148 77 8,148 77 -8,150 90 0)),((140 65 15,143 64 0,148 77 8,140 65 15)),((148 77 -8,148 77 8,143 64 0,148 77 -8)),((100 64 43,112 68 43,100 75 48,100 64 43)),((125 75 40,113 82 48,112 68 43,125 75 40)),((100 90 50,100 75 48,113 82 48,100 90 50)),((112 68 43,113 82 48,100 75 48,112 68 43)),((143 90 26,136 97 34,136 83 34,143 90 26)),((125 105 40,126 90 43,136 97 34,125 105 40)),((125 75 40,136 83 34,126 90 43,125 75 40)),((136 97 34,126 90 43,136 83 34,136 97 34)),((100 116 43,100 105 48,112 112 43,100 116 43)),((100 90 50,113 98 48,100 105 48,100 90 50)),((125 105 40,112 112 43,113 98 48,125 105 40)),((100 105 48,113 98 48,112 112 43,100 105 48)),((125 75 40,126 90 43,113 82 48,125 75 40)),((125 105 40,113 98 48,126 90 43,125 105 40)),((100 90 50,113 82 48,113 98 48,100 90 50)),((126 90 43,113 98 48,113 82 48,126 90 43)),((74 47 0,78 47 12,66 54 7,74 47 0)),((85 50 25,71 56 21,78 47 12,85 50 25)),((60 65 15,66 54 7,71 56 21,60 65 15)),((78 47 12,71 56 21,66 54 7,78 47 12)),((100 64 43,88 68 43,93 56 36,100 64 43)),((75 75 40,79 61 34,88 68 43,75 75 40)),((85 50 25,93 56 36,79 61 34,85 50 25)),((88 68 43,79 61 34,93 56 36,88 68 43)),((57 90 26,57 78 22,64 83 34,57 90 26)),((60 65 15,66 69 29,57 78 22,60 65 15)),((75 75 40,64 83 34,66 69 29,75 75 40)),((57 78 22,66 69 29,64 83 34,57 78 22)),((85 50 25,79 61 34,71 56 21,85 50 25)),((75 75 40,66 69 29,79 61 34,75 75 40)),((60 65 15,71 56 21,66 69 29,60 65 15)),((79 61 34,66 69 29,71 56 21,79 61 34)),((100 64 -43,93 56 -36,88 68 -43,100 64 -43)),((85 50 -25,79 61 -34,93 56 -36,85 50 -25)),((75 75 -40,88 68 -43,79 61 -34,75 75 -40)),((93 56 -36,79 61 -34,88 68 -43,93 56 -36)),((74 47 0,66 54 -7,78 47 -12,74 47 0)),((60 65 -15,71 56 -21,66 54 -7,60 65 -15)),((85 50 -25,78 47 -12,71 56 -21,85 50 -25)),((66 54 -7,71 56 -21,78 47 -12,66 54 -7)),((57 90 -26,64 83 -34,57 78 -22,57 90 -26)),((75 75 -40,66 69 -29,64 83 -34,75 75 -40)),((60 65 -15,57 78 -22,66 69 -29,60 65 -15)),((64 83 -34,66 69 -29,57 78 -22,64 83 -34)),((85 50 -25,71 56 -21,79 61 -34,85 50 -25)),((60 65 -15,66 69 -29,71 56 -21,60 65 -15)),((75 75 -40,79 61 -34,66 69 -29,75 75 -40)),((71 56 -21,66 69 -29,79 61 -34,71 56 -21)),((143 90 -26,136 83 -34,136 97 -34,143 90 -26)),((125 75 -40,126 90 -43,136 83 -34,125 75 -40)),((125 105 -40,136 97 -34,126 90 -43,125 105 -40)),((136 83 -34,126 90 -43,136 97 -34,136 83 -34)),((100 64 -43,100 75 -48,112 68 -43,100 64 -43)),((100 90 -50,113 82 -48,100 75 -48,100 90 -50)),((125 75 -40,112 68 -43,113 82 -48,125 75 -40)),((100 75 -48,113 82 -48,112 68 -43,100 75 -48)),((100 116 -43,112 112 -43,100 105 -48,100 116 -43)),((125 105 -40,113 98 -48,112 112 -43,125 105 -40)),((100 90 -50,100 105 -48,113 98 -48,100 90 -50)),((112 112 -43,113 98 -48,100 105 -48,112 112 -43)),((125 75 -40,113 82 -48,126 90 -43,125 75 -40)),((100 90 -50,113 98 -48,113 82 -48,100 90 -50)),((125 105 -40,126 90 -43,113 98 -48,125 105 -40)),((113 82 -48,113 98 -48,126 90 -43,113 82 -48)),((143 90 26,148 90 15,143 102 22,143 90 26)),((150 90 0,148 103 8,148 90 15,150 90 0)),((140 115 15,143 102 22,148 103 8,140 115 15)),((148 90 15,148 103 8,143 102 22,148 90 15)),((143 90 -26,143 102 -22,148 90 -15,143 90 -26)),((140 115 -15,148 103 -8,143 102 -22,140 115 -15)),((150 90 0,148 90 -15,148 103 -8,150 90 0)),((143 102 -22,148 103 -8,148 90 -15,143 102 -22)),((126 133 0,134 126 7,134 126 -7,126 133 0)),((140 115 15,143 116 0,134 126 7,140 115 15)),((140 115 -15,134 126 -7,143 116 0,140 115 -15)),((134 126 7,143 116 0,134 126 -7,134 126 7)),((150 90 0,148 103 -8,148 103 8,150 90 0)),((140 115 -15,143 116 0,148 103 -8,140 115 -15)),((140 115 15,148 103 8,143 116 0,140 115 15)),((148 103 -8,143 116 0,148 103 8,148 103 -8)))
Figure
Geometry figure for visual-cg-3dbuffer-02

A coarser rounded point buffer using 5 segments.

Code
SELECT
  'POINT(100 90)'::geometry AS input_geometry,
  CG_3DBuffer('POINT(100 90)'::geometry, 50, 5, 0) AS buffer;
Вивід растрових зображень
POINT(100 90) | POLYHEDRALSURFACE Z (((74 133 0,60 115 15,85 130 25,74 133 0)),((57 90 26,75 105 40,60 115 15,57 90 26)),((100 116 43,85 130 25,75 105 40,100 116 43)),((60 115 15,75 105 40,85 130 25,60 115 15)),((74 133 0,85 130 25,100 140 0,74 133 0)),((100 116 43,115 130 25,85 130 25,100 116 43)),((126 133 0,100 140 0,115 130 25,126 133 0)),((85 130 25,115 130 25,100 140 0,85 130 25)),((74 133 0,100 140 0,85 130 -25,74 133 0)),((126 133 0,115 130 -25,100 140 0,126 133 0)),((100 116 -43,85 130 -25,115 130 -25,100 116 -43)),((100 140 0,115 130 -25,85 130 -25,100 140 0)),((74 133 0,85 130 -25,60 115 -15,74 133 0)),((100 116 -43,75 105 -40,85 130 -25,100 116 -43)),((57 90 -26,60 115 -15,75 105 -40,57 90 -26)),((85 130 -25,75 105 -40,60 115 -15,85 130 -25)),((74 133 0,60 115 -15,60 115 15,74 133 0)),((57 90 -26,50 90 0,60 115 -15,57 90 -26)),((57 90 26,60 115 15,50 90 0,57 90 26)),((60 115 -15,50 90 0,60 115 15,60 115 -15)),((126 133 0,115 130 25,140 115 15,126 133 0)),((100 116 43,125 105 40,115 130 25,100 116 43)),((143 90 26,140 115 15,125 105 40,143 90 26)),((115 130 25,125 105 40,140 115 15,115 130 25)),((100 116 43,75 105 40,100 90 50,100 116 43)),((57 90 26,75 75 40,75 105 40,57 90 26)),((100 64 43,100 90 50,75 75 40,100 64 43)),((75 105 40,75 75 40,100 90 50,75 105 40)),((57 90 26,50 90 0,60 65 15,57 90 26)),((57 90 -26,60 65 -15,50 90 0,57 90 -26)),((74 47 0,60 65 15,60 65 -15,74 47 0)),((50 90 0,60 65 -15,60 65 15,50 90 0)),((57 90 -26,75 105 -40,75 75 -40,57 90 -26)),((100 116 -43,100 90 -50,75 105 -40,100 116 -43)),((100 64 -43,75 75 -40,100 90 -50,100 64 -43)),((75 105 -40,100 90 -50,75 75 -40,75 105 -40)),((100 116 -43,115 130 -25,125 105 -40,100 116 -43)),((126 133 0,140 115 -15,115 130 -25,126 133 0)),((143 90 -26,125 105 -40,140 115 -15,143 90 -26)),((115 130 -25,140 115 -15,125 105 -40,115 130 -25)),((126 47 0,140 65 15,115 50 25,126 47 0)),((143 90 26,125 75 40,140 65 15,143 90 26)),((100 64 43,115 50 25,125 75 40,100 64 43)),((140 65 15,125 75 40,115 50 25,140 65 15)),((126 47 0,115 50 25,100 40 0,126 47 0)),((100 64 43,85 50 25,115 50 25,100 64 43)),((74 47 0,100 40 0,85 50 25,74 47 0)),((115 50 25,85 50 25,100 40 0,115 50 25)),((126 47 0,100 40 0,115 50 -25,126 47 0)),((74 47 0,85 50 -25,100 40 0,74 47 0)),((100 64 -43,115 50 -25,85 50 -25,100 64 -43)),((100 40 0,85 50 -25,115 50 -25,100 40 0)),((126 47 0,115 50 -25,140 65 -15,126 47 0)),((100 64 -43,125 75 -40,115 50 -25,100 64 -43)),((143 90 -26,140 65 -15,125 75 -40,143 90 -26)),((115 50 -25,125 75 -40,140 65 -15,115 50 -25)),((126 47 0,140 65 -15,140 65 15,126 47 0)),((143 90 -26,150 90 0,140 65 -15,143 90 -26)),((143 90 26,140 65 15,150 90 0,143 90 26)),((140 65 -15,150 90 0,140 65 15,140 65 -15)),((100 64 43,125 75 40,100 90 50,100 64 43)),((143 90 26,125 105 40,125 75 40,143 90 26)),((100 116 43,100 90 50,125 105 40,100 116 43)),((125 75 40,125 105 40,100 90 50,125 75 40)),((74 47 0,85 50 25,60 65 15,74 47 0)),((100 64 43,75 75 40,85 50 25,100 64 43)),((57 90 26,60 65 15,75 75 40,57 90 26)),((85 50 25,75 75 40,60 65 15,85 50 25)),((100 64 -43,85 50 -25,75 75 -40,100 64 -43)),((74 47 0,60 65 -15,85 50 -25,74 47 0)),((57 90 -26,75 75 -40,60 65 -15,57 90 -26)),((85 50 -25,60 65 -15,75 75 -40,85 50 -25)),((143 90 -26,125 75 -40,125 105 -40,143 90 -26)),((100 64 -43,100 90 -50,125 75 -40,100 64 -43)),((100 116 -43,125 105 -40,100 90 -50,100 116 -43)),((125 75 -40,100 90 -50,125 105 -40,125 75 -40)),((143 90 26,150 90 0,140 115 15,143 90 26)),((143 90 -26,140 115 -15,150 90 0,143 90 -26)),((126 133 0,140 115 15,140 115 -15,126 133 0)),((150 90 0,140 115 -15,140 115 15,150 90 0)))
Figure
Geometry figure for visual-cg-3dbuffer-03

A rounded buffer around a line using 32 segments.

Code
SELECT
  'LINESTRING(50 50,150 150,150 50)'::geometry AS input_geometry,
  CG_3DBuffer('LINESTRING(50 50,150 150,150 50)'::geometry, 10, 32, 0) AS buffer;
Вивід растрових зображень
LINESTRING(50 50,150 150,150 50) | POLYHEDRALSURFACE Z (((40 50 3,40 50 0,40 47 2,40 50 3)),((40 47 2,40 50 0,40 47 -2,40 47 2)),((40 47 -2,40 50 0,40 50 -3,40 47 -2)),((40 50 -3,40 50 0,40 53 -2,40 50 -3)),((40 53 -2,40 50 0,40 53 2,40 53 -2)),((40 53 2,40 50 0,40 50 3,40 53 2)),((40 53 2,40 50 3,41 52 4,40 53 2)),((41 52 4,40 50 3,41 50 5,41 52 4)),((41 50 5,40 50 3,41 48 4,41 50 5)),((41 48 4,40 50 3,40 47 2,41 48 4)),((40 47 2,40 47 -2,41 45 0,40 47 2)),((41 48 4,40 47 2,42 45 3,41 48 4)),((42 45 3,40 47 2,41 45 0,42 45 3)),((41 45 0,40 47 -2,42 45 -3,41 45 0)),((42 45 -3,40 47 -2,41 48 -4,42 45 -3)),((40 47 -2,40 50 -3,41 48 -4,40 47 -2)),((41 48 -4,40 50 -3,41 50 -5,41 48 -4)),((41 50 -5,40 50 -3,41 52 -4,41 50 -5)),((41 52 -4,40 50 -3,40 53 -2,41 52 -4)),((41 55 0,40 53 -2,40 53 2,41 55 0)),((41 52 -4,40 53 -2,42 55 -3,41 52 -4)),((42 55 -3,40 53 -2,41 55 0,42 55 -3)),((41 55 0,40 53 2,42 55 3,41 55 0)),((42 55 3,40 53 2,41 52 4,42 55 3)),((42 55 3,41 52 4,43 54 6,42 55 3)),((43 54 6,41 52 4,43 51 7,43 54 6)),((43 51 7,41 52 4,41 50 5,43 51 7)),((43 51 7,41 50 5,43 49 7,43 51 7)),((41 50 5,41 48 4,43 49 7,41 50 5)),((43 49 7,41 48 4,43 46 6,43 49 7)),((43 46 6,41 48 4,42 45 3,43 46 6)),((42 45 3,41 45 0,43 43 1,42 45 3)),((43 43 1,41 45 0,43 43 -1,43 43 1)),((43 43 -1,41 45 0,42 45 -3,43 43 -1)),((43 46 6,42 45 3,44 43 4,43 46 6)),((44 43 4,42 45 3,43 43 1,44 43 4)),((44 43 -4,42 45 -3,43 46 -6,44 43 -4)),((42 45 -3,41 48 -4,43 46 -6,42 45 -3)),((43 43 -1,42 45 -3,44 43 -4,43 43 -1)),((43 46 -6,41 48 -4,43 49 -7,43 46 -6)),((43 49 -7,41 48 -4,41 50 -5,43 49 -7)),((43 49 -7,41 50 -5,43 51 -7,43 49 -7)),((41 50 -5,41 52 -4,43 51 -7,41 50 -5)),((43 51 -7,41 52 -4,43 54 -6,43 51 -7)),((43 54 -6,41 52 -4,42 55 -3,43 54 -6)),((42 55 -3,41 55 0,43 57 -1,42 55 -3)),((43 57 -1,41 55 0,43 57 1,43 57 -1)),((43 57 1,41 55 0,42 55 3,43 57 1)),((43 54 -6,42 55 -3,44 57 -4,43 54 -6)),((44 57 -4,42 55 -3,43 57 -1,44 57 -4)),((43 57 1,42 55 3,44 57 4,43 57 1)),((44 57 4,42 55 3,43 54 6,44 57 4)),((43 54 6,46 56 7,44 57 4,43 54 6)),((44 57 4,46 56 7,146 156 7,44 57 4)),((44 57 4,146 156 7,144 157 4,44 57 4)),((46 56 7,43 54 6,45 53 8,46 56 7)),((43 54 6,43 51 7,45 53 8,43 54 6)),((45 53 8,43 51 7,45 50 9,45 53 8)),((43 51 7,43 49 7,45 50 9,43 51 7)),((45 50 9,43 49 7,45 47 8,45 50 9)),((45 47 8,43 49 7,43 46 6,45 47 8)),((45 47 8,43 46 6,46 44 7,45 47 8)),((46 44 7,43 46 6,44 43 4,46 44 7)),((43 43 1,43 43 -1,45 41 0,43 43 1)),((44 43 4,43 43 1,46 41 2,44 43 4)),((46 41 2,43 43 1,45 41 0,46 41 2)),((45 41 0,43 43 -1,46 41 -2,45 41 0)),((46 41 -2,43 43 -1,44 43 -4,46 41 -2)),((46 44 7,44 43 4,47 42 5,46 44 7)),((47 42 5,44 43 4,46 41 2,47 42 5)),((47 42 -5,44 43 -4,46 44 -7,47 42 -5)),((44 43 -4,43 46 -6,46 44 -7,44 43 -4)),((46 41 -2,44 43 -4,47 42 -5,46 41 -2)),((46 44 -7,43 46 -6,45 47 -8,46 44 -7)),((43 46 -6,43 49 -7,45 47 -8,43 46 -6)),((45 47 -8,43 49 -7,45 50 -9,45 47 -8)),((45 50 -9,43 49 -7,43 51 -7,45 50 -9)),((45 50 -9,43 51 -7,45 53 -8,45 50 -9)),((45 53 -8,43 51 -7,43 54 -6,45 53 -8)),((45 53 -8,43 54 -6,46 56 -7,45 53 -8)),((43 54 -6,44 57 -4,46 56 -7,43 54 -6)),((46 56 -7,44 57 -4,144 157 -4,46 56 -7)),((46 56 -7,144 157 -4,146 156 -7,46 56 -7)),((43 57 -1,43 57 1,143 157 -1,43 57 -1)),((143 157 -1,43 57 1,143 157 1,143 157 -1)),((43 57 -1,143 157 -1,44 57 -4,43 57 -1)),((44 57 -4,143 157 -1,144 157 -4,44 57 -4)),((43 57 1,44 57 4,143 157 1,43 57 1)),((143 157 1,44 57 4,144 157 4,143 157 1)),((146 159 2,143 157 1,144 157 4,146 159 2)),((146 159 2,144 157 4,147 158 5,146 159 2)),((147 158 5,144 157 4,146 156 7,147 158 5)),((46 56 7,45 53 8,145 153 8,46 56 7)),((146 156 7,46 56 7,145 153 8,146 156 7)),((147 158 5,146 156 7,149 157 7,147 158 5)),((149 157 7,146 156 7,148 154 9,149 157 7)),((146 156 7,145 153 8,148 154 9,146 156 7)),((145 153 8,45 53 8,48 54 9,145 153 8)),((148 154 9,145 153 8,48 54 9,148 154 9)),((48 54 9,45 53 8,47 52 10,48 54 9)),((45 53 8,45 50 9,47 52 10,45 53 8)),((47 52 10,45 50 9,47 48 10,47 52 10)),((47 48 10,45 50 9,45 47 8,47 48 10)),((47 48 10,45 47 8,48 46 9,47 48 10)),((48 46 9,45 47 8,46 44 7,48 46 9)),((48 46 9,46 44 7,49 43 7,48 46 9)),((49 43 7,46 44 7,47 42 5,49 43 7)),((46 41 2,45 41 0,47 40 0,46 41 2)),((47 40 0,45 41 0,46 41 -2,47 40 0)),((47 42 5,46 41 2,48 40 3,47 42 5)),((48 40 3,46 41 2,47 40 0,48 40 3)),((48 40 -3,46 41 -2,47 42 -5,48 40 -3)),((47 40 0,46 41 -2,48 40 -3,47 40 0)),((49 43 7,47 42 5,50 41 5,49 43 7)),((50 41 5,47 42 5,48 40 3,50 41 5)),((50 41 -5,47 42 -5,49 43 -7,50 41 -5)),((47 42 -5,46 44 -7,49 43 -7,47 42 -5)),((48 40 -3,47 42 -5,50 41 -5,48 40 -3)),((49 43 -7,46 44 -7,48 46 -9,49 43 -7)),((46 44 -7,45 47 -8,48 46 -9,46 44 -7)),((48 46 -9,45 47 -8,47 48 -10,48 46 -9)),((45 47 -8,45 50 -9,47 48 -10,45 47 -8)),((47 48 -10,45 50 -9,47 52 -10,47 48 -10)),((47 52 -10,45 50 -9,45 53 -8,47 52 -10)),((47 52 -10,45 53 -8,48 54 -9,47 52 -10)),((45 53 -8,145 153 -8,48 54 -9,45 53 -8)),((48 54 -9,145 153 -8,148 154 -9,48 54 -9)),((45 53 -8,46 56 -7,145 153 -8,45 53 -8)),((145 153 -8,46 56 -7,146 156 -7,145 153 -8)),((148 154 -9,145 153 -8,146 156 -7,148 154 -9)),((148 154 -9,146 156 -7,149 157 -7,148 154 -9)),((149 157 -7,146 156 -7,147 158 -5,149 157 -7)),((146 156 -7,144 157 -4,147 158 -5,146 156 -7)),((147 158 -5,144 157 -4,146 159 -2,147 158 -5)),((144 157 -4,143 157 -1,146 159 -2,144 157 -4)),((146 159 -2,143 157 -1,145 159 0,146 159 -2)),((145 159 0,143 157 -1,143 157 1,145 159 0)),((145 159 0,143 157 1,146 159 2,145 159 0)),((147 160 0,145 159 0,146 159 2,147 160 0)),((147 160 0,146 159 2,148 160 3,147 160 0)),((148 160 3,146 159 2,147 158 5,148 160 3)),((148 160 3,147 158 5,150 159 5,148 160 3)),((150 159 5,147 158 5,149 157 7,150 159 5)),((150 159 5,149 157 7,151 157 7,150 159 5)),((151 157 7,149 157 7,150 155 9,151 157 7)),((149 157 7,148 154 9,150 155 9,149 157 7)),((48 54 9,47 52 10,147 152 10,48 54 9)),((148 154 9,48 54 9,147 152 10,148 154 9)),((150 155 9,148 154 9,150 153 10,150 155 9)),((148 154 9,147 152 10,150 153 10,148 154 9)),((147 152 10,47 52 10,50 50 10,147 152 10)),((150 150 10,147 152 10,50 50 10,150 150 10)),((47 52 10,47 48 10,50 50 10,47 52 10)),((50 50 10,47 48 10,50 47 10,50 50 10)),((50 47 10,47 48 10,48 46 9,50 47 10)),((50 47 10,48 46 9,50 45 9,50 47 10)),((50 45 9,48 46 9,49 43 7,50 45 9)),((50 45 9,49 43 7,51 43 7,50 45 9)),((51 43 7,49 43 7,50 41 5,51 43 7)),((48 40 3,47 40 0,50 40 0,48 40 3)),((50 40 0,47 40 0,48 40 -3,50 40 0)),((50 41 5,48 40 3,52 40 3,50 41 5)),((52 40 3,48 40 3,50 40 0,52 40 3)),((50 40 0,48 40 -3,52 40 -3,50 40 0)),((52 40 -3,48 40 -3,50 41 -5,52 40 -3)),((51 43 7,50 41 5,53 42 5,51 43 7)),((53 42 5,50 41 5,52 40 3,53 42 5)),((52 40 -3,50 41 -5,53 42 -5,52 40 -3)),((53 42 -5,50 41 -5,51 43 -7,53 42 -5)),((50 41 -5,49 43 -7,51 43 -7,50 41 -5)),((51 43 -7,49 43 -7,50 45 -9,51 43 -7)),((49 43 -7,48 46 -9,50 45 -9,49 43 -7)),((50 45 -9,48 46 -9,50 47 -10,50 45 -9)),((48 46 -9,47 48 -10,50 47 -10,48 46 -9)),((50 47 -10,47 48 -10,50 50 -10,50 47 -10)),((50 50 -10,47 48 -10,47 52 -10,50 50 -10)),((47 52 -10,147 152 -10,50 50 -10,47 52 -10)),((50 50 -10,147 152 -10,150 150 -10,50 50 -10)),((47 52 -10,48 54 -9,147 152 -10,47 52 -10)),((147 152 -10,48 54 -9,148 154 -9,147 152 -10)),((150 153 -10,147 152 -10,148 154 -9,150 153 -10)),((150 153 -10,148 154 -9,150 155 -9,150 153 -10)),((150 155 -9,148 154 -9,149 157 -7,150 155 -9)),((150 155 -9,149 157 -7,151 157 -7,150 155 -9)),((151 157 -7,149 157 -7,150 159 -5,151 157 -7)),((149 157 -7,147 158 -5,150 159 -5,149 157 -7)),((150 159 -5,147 158 -5,148 160 -3,150 159 -5)),((147 158 -5,146 159 -2,148 160 -3,147 158 -5)),((148 160 -3,146 159 -2,147 160 0,148 160 -3)),((146 159 -2,145 159 0,147 160 0,146 159 -2)),((148 160 -3,147 160 0,150 160 0,148 160 -3)),((150 160 0,147 160 0,148 160 3,150 160 0)),((150 160 0,148 160 3,152 160 3,150 160 0)),((152 160 3,148 160 3,150 159 5,152 160 3)),((152 160 3,150 159 5,153 158 5,152 160 3)),((153 158 5,150 159 5,151 157 7,153 158 5)),((153 158 5,151 157 7,154 156 7,153 158 5)),((154 156 7,151 157 7,152 154 9,154 156 7)),((151 157 7,150 155 9,152 154 9,151 157 7)),((150 155 9,150 153 10,152 154 9,150 155 9)),((150 153 10,147 152 10,150 150 10,150 153 10)),((152 154 9,150 153 10,153 152 10,152 154 9)),((150 153 10,150 150 10,153 152 10,150 153 10)),((150 150 10,150 50 10,153 48 10,150 150 10)),((153 152 10,150 150 10,153 48 10,153 152 10)),((147 143 10,147 48 10,150 50 10,147 143 10)),((150 150 10,147 143 10,150 50 10,150 150 10)),((150 150 10,50 50 10,53 48 10,150 150 10)),((147 143 10,150 150 10,53 48 10,147 143 10)),((50 50 10,50 47 10,53 48 10,50 50 10)),((53 48 10,50 47 10,52 46 9,53 48 10)),((50 47 10,50 45 9,52 46 9,50 47 10)),((52 46 9,50 45 9,51 43 7,52 46 9)),((52 46 9,51 43 7,54 44 7,52 46 9)),((54 44 7,51 43 7,53 42 5,54 44 7)),((52 40 3,50 40 0,53 40 0,52 40 3)),((53 40 0,50 40 0,52 40 -3,53 40 0)),((53 42 5,52 40 3,54 41 2,53 42 5)),((54 41 2,52 40 3,53 40 0,54 41 2)),((53 40 0,52 40 -3,54 41 -2,53 40 0)),((54 41 -2,52 40 -3,53 42 -5,54 41 -2)),((54 44 7,53 42 5,56 43 4,54 44 7)),((56 43 4,53 42 5,54 41 2,56 43 4)),((54 41 -2,53 42 -5,56 43 -4,54 41 -2)),((56 43 -4,53 42 -5,54 44 -7,56 43 -4)),((53 42 -5,51 43 -7,54 44 -7,53 42 -5)),((54 44 -7,51 43 -7,52 46 -9,54 44 -7)),((51 43 -7,50 45 -9,52 46 -9,51 43 -7)),((52 46 -9,50 45 -9,50 47 -10,52 46 -9)),((52 46 -9,50 47 -10,53 48 -10,52 46 -9)),((53 48 -10,50 47 -10,50 50 -10,53 48 -10)),((50 50 -10,150 150 -10,53 48 -10,50 50 -10)),((53 48 -10,150 150 -10,147 143 -10,53 48 -10)),((147 48 -10,147 143 -10,150 50 -10,147 48 -10)),((150 50 -10,147 143 -10,150 150 -10,150 50 -10)),((150 50 -10,150 150 -10,153 48 -10,150 50 -10)),((153 48 -10,150 150 -10,153 152 -10,153 48 -10)),((153 152 -10,150 150 -10,150 153 -10,153 152 -10)),((150 150 -10,147 152 -10,150 153 -10,150 150 -10)),((153 152 -10,150 153 -10,152 154 -9,153 152 -10)),((152 154 -9,150 153 -10,150 155 -9,152 154 -9)),((152 154 -9,150 155 -9,151 157 -7,152 154 -9)),((152 154 -9,151 157 -7,154 156 -7,152 154 -9)),((154 156 -7,151 157 -7,153 158 -5,154 156 -7)),((151 157 -7,150 159 -5,153 158 -5,151 157 -7)),((153 158 -5,150 159 -5,152 160 -3,153 158 -5)),((150 159 -5,148 160 -3,152 160 -3,150 159 -5)),((152 160 -3,148 160 -3,150 160 0,152 160 -3)),((152 160 -3,150 160 0,153 160 0,152 160 -3)),((153 160 0,150 160 0,152 160 3,153 160 0)),((153 160 0,152 160 3,154 159 2,153 160 0)),((154 159 2,152 160 3,153 158 5,154 159 2)),((154 159 2,153 158 5,156 157 4,154 159 2)),((156 157 4,153 158 5,154 156 7,156 157 4)),((156 157 4,154 156 7,157 154 6,156 157 4)),((157 154 6,154 156 7,155 153 8,157 154 6)),((154 156 7,152 154 9,155 153 8,154 156 7)),((155 153 8,152 154 9,153 152 10,155 153 8)),((155 153 8,153 152 10,155 150 9,155 153 8)),((153 152 10,153 48 10,155 50 9,153 152 10)),((155 150 9,153 152 10,155 50 9,155 150 9)),((150 50 10,150 47 10,153 48 10,150 50 10)),((155 50 9,153 48 10,155 47 8,155 50 9)),((153 48 10,152 46 9,155 47 8,153 48 10)),((153 48 10,150 47 10,152 46 9,153 48 10)),((150 50 10,147 48 10,150 47 10,150 50 10)),((145 138 9,145 50 9,147 48 10,145 138 9)),((145 138 9,145 138 9,147 48 10,145 138 9)),((147 143 10,145 138 9,147 48 10,147 143 10)),((53 48 10,52 46 9,145 138 9,53 48 10)),((147 143 10,53 48 10,145 138 9,147 143 10)),((147 48 10,145 50 9,145 47 8,147 48 10)),((150 47 10,147 48 10,148 46 9,150 47 10)),((147 48 10,145 47 8,148 46 9,147 48 10)),((145 138 9,52 46 9,55 47 8,145 138 9)),((145 138 9,145 138 9,55 47 8,145 138 9)),((144 136 8,145 138 9,55 47 8,144 136 8)),((55 47 8,52 46 9,54 44 7,55 47 8)),((55 47 8,54 44 7,143 133 7,55 47 8)),((144 136 8,55 47 8,143 133 7,144 136 8)),((143 133 7,54 44 7,56 43 4,143 133 7)),((143 133 7,143 133 7,56 43 4,143 133 7)),((141 128 4,141 130 5,56 43 4,141 128 4)),((141 130 5,143 133 7,56 43 4,141 130 5)),((54 41 2,53 40 0,55 41 0,54 41 2)),((55 41 0,53 40 0,54 41 -2,55 41 0)),((56 43 4,54 41 2,57 43 1,56 43 4)),((57 43 1,54 41 2,55 41 0,57 43 1)),((55 41 0,54 41 -2,57 43 -1,55 41 0)),((57 43 -1,54 41 -2,56 43 -4,57 43 -1)),((141 128 4,56 43 4,57 43 1,141 128 4)),((140 127 3,141 128 4,57 43 1,140 127 3)),((140 126 1,140 127 3,57 43 1,140 126 1)),((57 43 -1,56 43 -4,141 128 -4,57 43 -1)),((140 126 -1,57 43 -1,140 127 -3,140 126 -1)),((140 127 -3,57 43 -1,141 128 -4,140 127 -3)),((56 43 -4,54 44 -7,143 133 -7,56 43 -4)),((141 130 -5,56 43 -4,143 133 -7,141 130 -5)),((143 133 -7,56 43 -4,143 133 -7,143 133 -7)),((141 128 -4,56 43 -4,141 130 -5,141 128 -4)),((54 44 -7,55 47 -8,143 133 -7,54 44 -7)),((143 133 -7,55 47 -8,144 136 -8,143 133 -7)),((54 44 -7,52 46 -9,55 47 -8,54 44 -7)),((52 46 -9,145 138 -9,55 47 -8,52 46 -9)),((55 47 -8,145 138 -9,145 138 -9,55 47 -8)),((55 47 -8,145 138 -9,144 136 -8,55 47 -8)),((52 46 -9,53 48 -10,145 138 -9,52 46 -9)),((145 138 -9,53 48 -10,147 143 -10,145 138 -9)),((145 50 -9,145 138 -9,147 48 -10,145 50 -9)),((147 48 -10,145 138 -9,145 138 -9,147 48 -10)),((147 48 -10,145 138 -9,147 143 -10,147 48 -10)),((150 47 -10,147 48 -10,150 50 -10,150 47 -10)),((153 48 -10,150 47 -10,150 50 -10,153 48 -10)),((145 47 -8,145 50 -9,147 48 -10,145 47 -8)),((148 46 -9,145 47 -8,147 48 -10,148 46 -9)),((148 46 -9,147 48 -10,150 47 -10,148 46 -9)),((155 47 -8,153 48 -10,155 50 -9,155 47 -8)),((153 48 -10,153 152 -10,155 50 -9,153 48 -10)),((155 50 -9,153 152 -10,155 150 -9,155 50 -9)),((152 46 -9,150 47 -10,153 48 -10,152 46 -9)),((155 47 -8,152 46 -9,153 48 -10,155 47 -8)),((155 150 -9,153 152 -10,155 153 -8,155 150 -9)),((153 152 -10,152 154 -9,155 153 -8,153 152 -10)),((155 153 -8,152 154 -9,154 156 -7,155 153 -8)),((155 153 -8,154 156 -7,157 154 -6,155 153 -8)),((157 154 -6,154 156 -7,156 157 -4,157 154 -6)),((154 156 -7,153 158 -5,156 157 -4,154 156 -7)),((156 157 -4,153 158 -5,154 159 -2,156 157 -4)),((153 158 -5,152 160 -3,154 159 -2,153 158 -5)),((154 159 -2,152 160 -3,153 160 0,154 159 -2)),((154 159 -2,153 160 0,155 159 0,154 159 -2)),((155 159 0,153 160 0,154 159 2,155 159 0)),((155 159 0,154 159 2,157 157 1,155 159 0)),((157 157 1,154 159 2,156 157 4,157 157 1)),((157 157 1,156 157 4,158 155 3,157 157 1)),((158 155 3,156 157 4,157 154 6,158 155 3)),((158 155 3,157 154 6,159 152 4,158 155 3)),((159 152 4,157 154 6,157 151 7,159 152 4)),((157 154 6,155 153 8,157 151 7,157 154 6)),((157 151 7,155 153 8,155 150 9,157 151 7)),((155 150 9,155 50 9,157 49 7,155 150 9)),((157 151 7,155 150 9,157 49 7,157 151 7)),((155 50 9,155 47 8,157 49 7,155 50 9)),((150 47 10,150 45 9,152 46 9,150 47 10)),((150 47 10,148 46 9,150 45 9,150 47 10)),((157 49 7,155 47 8,157 46 6,157 49 7)),((155 47 8,154 44 7,157 46 6,155 47 8)),((155 47 8,152 46 9,154 44 7,155 47 8)),((152 46 9,151 43 7,154 44 7,152 46 9)),((152 46 9,150 45 9,151 43 7,152 46 9)),((143 133 7,143 49 7,145 50 9,143 133 7)),((143 133 7,143 133 7,145 50 9,143 133 7)),((145 138 9,144 136 8,145 50 9,145 138 9)),((144 136 8,143 133 7,145 50 9,144 136 8)),((145 50 9,143 49 7,145 47 8,145 50 9)),((145 47 8,143 49 7,143 46 6,145 47 8)),((148 46 9,145 47 8,146 44 7,148 46 9)),((145 47 8,143 46 6,146 44 7,145 47 8)),((150 45 9,148 46 9,149 43 7,150 45 9)),((148 46 9,146 44 7,149 43 7,148 46 9)),((141 50 5,143 49 7,141 130 5,141 50 5)),((141 130 5,143 49 7,143 133 7,141 130 5)),((140 50 3,141 50 5,140 127 3,140 50 3)),((141 128 4,141 50 5,141 130 5,141 128 4)),((140 127 3,141 50 5,141 128 4,140 127 3)),((57 43 1,55 41 0,57 43 -1,57 43 1)),((57 43 1,57 43 -1,140 126 -1,57 43 1)),((140 126 1,57 43 1,140 126 0,140 126 1)),((140 126 0,57 43 1,140 126 -1,140 126 0)),((140 50 0,140 50 3,140 126 0,140 50 0)),((140 126 1,140 50 3,140 127 3,140 126 1)),((140 126 0,140 50 3,140 126 1,140 126 0)),((140 50 0,140 126 0,140 50 -3,140 50 0)),((140 50 -3,140 126 0,140 126 -1,140 50 -3)),((140 50 -3,140 126 -1,140 127 -3,140 50 -3)),((140 50 -3,140 127 -3,141 50 -5,140 50 -3)),((141 50 -5,140 127 -3,141 128 -4,141 50 -5)),((141 50 -5,141 128 -4,141 130 -5,141 50 -5)),((141 50 -5,141 130 -5,143 49 -7,141 50 -5)),((143 49 -7,141 130 -5,143 133 -7,143 49 -7)),((143 49 -7,143 133 -7,145 50 -9,143 49 -7)),((145 50 -9,143 133 -7,143 133 -7,145 50 -9)),((145 50 -9,143 133 -7,144 136 -8,145 50 -9)),((144 136 -8,145 138 -9,145 50 -9,144 136 -8)),((145 47 -8,143 49 -7,145 50 -9,145 47 -8)),((150 45 -9,148 46 -9,150 47 -10,150 45 -9)),((152 46 -9,150 45 -9,150 47 -10,152 46 -9)),((143 46 -6,143 49 -7,145 47 -8,143 46 -6)),((146 44 -7,143 46 -6,145 47 -8,146 44 -7)),((146 44 -7,145 47 -8,148 46 -9,146 44 -7)),((149 43 -7,146 44 -7,148 46 -9,149 43 -7)),((149 43 -7,148 46 -9,150 45 -9,149 43 -7)),((157 46 -6,155 47 -8,157 49 -7,157 46 -6)),((157 49 -7,155 47 -8,155 50 -9,157 49 -7)),((154 44 -7,152 46 -9,155 47 -8,154 44 -7)),((157 46 -6,154 44 -7,155 47 -8,157 46 -6)),((155 50 -9,155 150 -9,157 49 -7,155 50 -9)),((157 49 -7,155 150 -9,157 151 -7,157 49 -7)),((155 150 -9,155 153 -8,157 151 -7,155 150 -9)),((151 43 -7,150 45 -9,152 46 -9,151 43 -7)),((154 44 -7,151 43 -7,152 46 -9,154 44 -7)),((157 151 -7,155 153 -8,157 154 -6,157 151 -7)),((157 151 -7,157 154 -6,159 152 -4,157 151 -7)),((159 152 -4,157 154 -6,158 155 -3,159 152 -4)),((157 154 -6,156 157 -4,158 155 -3,157 154 -6)),((158 155 -3,156 157 -4,157 157 -1,158 155 -3)),((156 157 -4,154 159 -2,157 157 -1,156 157 -4)),((157 157 -1,154 159 -2,155 159 0,157 157 -1)),((157 157 -1,155 159 0,157 157 1,157 157 -1)),((159 155 0,157 157 -1,157 157 1,159 155 0)),((159 155 0,157 157 1,158 155 3,159 155 0)),((159 155 0,158 155 3,160 153 2,159 155 0)),((160 153 2,158 155 3,159 152 4,160 153 2)),((160 153 2,159 152 4,160 150 3,160 153 2)),((159 152 4,159 150 5,160 150 3,159 152 4)),((159 152 4,157 151 7,159 150 5,159 152 4)),((157 151 7,157 49 7,159 50 5,157 151 7)),((159 150 5,157 151 7,159 50 5,159 150 5)),((159 50 5,157 49 7,159 48 4,159 50 5)),((157 49 7,157 46 6,159 48 4,157 49 7)),((150 45 9,149 43 7,151 43 7,150 45 9)),((159 48 4,157 46 6,158 45 3,159 48 4)),((157 46 6,156 43 4,158 45 3,157 46 6)),((157 46 6,154 44 7,156 43 4,157 46 6)),((154 44 7,153 42 5,156 43 4,154 44 7)),((154 44 7,151 43 7,153 42 5,154 44 7)),((151 43 7,149 43 7,150 41 5,151 43 7)),((151 43 7,150 41 5,153 42 5,151 43 7)),((141 50 5,141 48 4,143 49 7,141 50 5)),((143 49 7,141 48 4,143 46 6,143 49 7)),((143 46 6,141 48 4,142 45 3,143 46 6)),((146 44 7,143 46 6,144 43 4,146 44 7)),((143 46 6,142 45 3,144 43 4,143 46 6)),((149 43 7,146 44 7,147 42 5,149 43 7)),((146 44 7,144 43 4,147 42 5,146 44 7)),((149 43 7,147 42 5,150 41 5,149 43 7)),((141 50 5,140 50 3,141 48 4,141 50 5)),((140 50 3,140 50 0,140 47 2,140 50 3)),((141 48 4,140 50 3,140 47 2,141 48 4)),((140 47 2,140 50 0,140 47 -2,140 47 2)),((140 47 -2,140 50 0,140 50 -3,140 47 -2)),((141 48 -4,140 50 -3,141 50 -5,141 48 -4)),((140 47 -2,140 50 -3,141 48 -4,140 47 -2)),((143 49 -7,141 48 -4,141 50 -5,143 49 -7)),((143 46 -6,141 48 -4,143 49 -7,143 46 -6)),((151 43 -7,149 43 -7,150 45 -9,151 43 -7)),((142 45 -3,141 48 -4,143 46 -6,142 45 -3)),((144 43 -4,142 45 -3,143 46 -6,144 43 -4)),((144 43 -4,143 46 -6,146 44 -7,144 43 -4)),((147 42 -5,144 43 -4,146 44 -7,147 42 -5)),((147 42 -5,146 44 -7,149 43 -7,147 42 -5)),((150 41 -5,149 43 -7,151 43 -7,150 41 -5)),((150 41 -5,147 42 -5,149 43 -7,150 41 -5)),((158 45 -3,157 46 -6,159 48 -4,158 45 -3)),((159 48 -4,157 46 -6,157 49 -7,159 48 -4)),((156 43 -4,154 44 -7,157 46 -6,156 43 -4)),((158 45 -3,156 43 -4,157 46 -6,158 45 -3)),((159 48 -4,157 49 -7,159 50 -5,159 48 -4)),((159 50 -5,157 49 -7,157 151 -7,159 50 -5)),((159 150 -5,159 50 -5,157 151 -7,159 150 -5)),((153 42 -5,151 43 -7,154 44 -7,153 42 -5)),((156 43 -4,153 42 -5,154 44 -7,156 43 -4)),((159 150 -5,157 151 -7,159 152 -4,159 150 -5)),((153 42 -5,150 41 -5,151 43 -7,153 42 -5)),((160 150 -3,159 150 -5,159 152 -4,160 150 -3)),((160 150 -3,159 152 -4,160 153 -2,160 150 -3)),((159 152 -4,158 155 -3,160 153 -2,159 152 -4)),((160 153 -2,158 155 -3,159 155 0,160 153 -2)),((158 155 -3,157 157 -1,159 155 0,158 155 -3)),((160 153 -2,159 155 0,160 153 2,160 153 -2)),((160 150 0,160 153 -2,160 153 2,160 150 0)),((160 150 0,160 153 2,160 150 3,160 150 0)),((159 150 5,159 50 5,160 50 3,159 150 5)),((160 150 3,159 150 5,160 50 3,160 150 3)),((160 150 3,160 50 3,160 50 0,160 150 3)),((160 150 0,160 150 3,160 50 0,160 150 0)),((160 50 3,159 50 5,159 48 4,160 50 3)),((160 50 3,159 48 4,160 47 2,160 50 3)),((159 48 4,158 45 3,160 47 2,159 48 4)),((160 47 2,158 45 3,159 45 0,160 47 2)),((158 45 3,157 43 1,159 45 0,158 45 3)),((158 45 3,156 43 4,157 43 1,158 45 3)),((156 43 4,154 41 2,157 43 1,156 43 4)),((156 43 4,153 42 5,154 41 2,156 43 4)),((153 42 5,152 40 3,154 41 2,153 42 5)),((153 42 5,150 41 5,152 40 3,153 42 5)),((150 41 5,147 42 5,148 40 3,150 41 5)),((150 41 5,148 40 3,152 40 3,150 41 5)),((141 48 4,140 47 2,142 45 3,141 48 4)),((142 45 3,140 47 2,141 45 0,142 45 3)),((144 43 4,142 45 3,143 43 1,144 43 4)),((142 45 3,141 45 0,143 43 1,142 45 3)),((147 42 5,144 43 4,146 41 2,147 42 5)),((144 43 4,143 43 1,146 41 2,144 43 4)),((147 42 5,146 41 2,148 40 3,147 42 5)),((140 47 2,140 47 -2,141 45 0,140 47 2)),((141 45 0,140 47 -2,142 45 -3,141 45 0)),((142 45 -3,140 47 -2,141 48 -4,142 45 -3)),((143 43 -1,141 45 0,142 45 -3,143 43 -1)),((143 43 -1,142 45 -3,144 43 -4,143 43 -1)),((146 41 -2,143 43 -1,144 43 -4,146 41 -2)),((146 41 -2,144 43 -4,147 42 -5,146 41 -2)),((148 40 -3,146 41 -2,147 42 -5,148 40 -3)),((148 40 -3,147 42 -5,150 41 -5,148 40 -3)),((152 40 -3,150 41 -5,153 42 -5,152 40 -3)),((152 40 -3,148 40 -3,150 41 -5,152 40 -3)),((159 45 0,158 45 -3,160 47 -2,159 45 0)),((160 47 -2,158 45 -3,159 48 -4,160 47 -2)),((157 43 -1,156 43 -4,158 45 -3,157 43 -1)),((159 45 0,157 43 -1,158 45 -3,159 45 0)),((160 47 -2,159 48 -4,160 50 -3,160 47 -2)),((159 48 -4,159 50 -5,160 50 -3,159 48 -4)),((154 41 -2,153 42 -5,156 43 -4,154 41 -2)),((157 43 -1,154 41 -2,156 43 -4,157 43 -1)),((160 50 -3,159 50 -5,159 150 -5,160 50 -3)),((160 150 -3,160 50 -3,159 150 -5,160 150 -3)),((154 41 -2,152 40 -3,153 42 -5,154 41 -2)),((160 50 0,160 50 -3,160 150 -3,160 50 0)),((160 150 0,160 50 0,160 150 -3,160 150 0)),((160 150 -3,160 153 -2,160 150 0,160 150 -3)),((160 50 3,160 47 2,160 50 0,160 50 3)),((160 50 0,160 47 -2,160 50 -3,160 50 0)),((160 47 2,160 47 -2,160 50 0,160 47 2)),((160 47 2,159 45 0,160 47 -2,160 47 2)),((157 43 1,157 43 -1,159 45 0,157 43 1)),((157 43 1,155 41 0,157 43 -1,157 43 1)),((157 43 1,154 41 2,155 41 0,157 43 1)),((154 41 2,153 40 0,155 41 0,154 41 2)),((154 41 2,152 40 3,153 40 0,154 41 2)),((152 40 3,148 40 3,150 40 0,152 40 3)),((152 40 3,150 40 0,153 40 0,152 40 3)),((148 40 3,146 41 2,147 40 0,148 40 3)),((148 40 3,147 40 0,150 40 0,148 40 3)),((143 43 1,141 45 0,143 43 -1,143 43 1)),((143 43 1,143 43 -1,145 41 0,143 43 1)),((146 41 2,143 43 1,145 41 0,146 41 2)),((146 41 2,145 41 0,147 40 0,146 41 2)),((145 41 0,143 43 -1,146 41 -2,145 41 0)),((147 40 0,145 41 0,146 41 -2,147 40 0)),((147 40 0,146 41 -2,148 40 -3,147 40 0)),((150 40 0,148 40 -3,152 40 -3,150 40 0)),((150 40 0,147 40 0,148 40 -3,150 40 0)),((153 40 0,152 40 -3,154 41 -2,153 40 0)),((153 40 0,150 40 0,152 40 -3,153 40 0)),((155 41 0,154 41 -2,157 43 -1,155 41 0)),((155 41 0,153 40 0,154 41 -2,155 41 0)))
Figure
Geometry figure for visual-cg-3dbuffer-04

A square buffer around the same line using 32 segments.

Code
SELECT
  'LINESTRING(50 50,150 150,150 50)'::geometry AS input_geometry,
  CG_3DBuffer('LINESTRING(50 50,150 150,150 50)'::geometry, 10, 32, 2) AS buffer;
Вивід растрових зображень
LINESTRING(50 50,150 150,150 50) | POLYHEDRALSURFACE Z (((50 36 0,50 36 -2,140 126 -2,140 126 0,50 36 0)),((140 126 -2,50 36 -2,49 36 -4,141 128 -4,140 126 -2)),((141 128 -4,49 36 -4,49 37 -6,142 130 -6,141 128 -4)),((142 130 -6,49 37 -6,48 38 -7,143 133 -7,142 130 -6)),((143 133 -7,48 38 -7,47 39 -8,144 137 -8,143 133 -7)),((144 137 -8,47 39 -8,46 40 -9,146 141 -9,144 137 -8)),((146 141 -9,46 40 -9,44 42 -10,148 145 -10,146 141 -9)),((148 145 -10,44 42 -10,43 43 -10,150 150 -10,148 145 -10)),((150 150 -10,43 43 -10,42 44 -10,152 155 -10,150 150 -10)),((152 155 -10,42 44 -10,40 46 -9,154 159 -9,152 155 -10)),((154 159 -9,40 46 -9,39 47 -8,156 163 -8,154 159 -9)),((156 163 -8,39 47 -8,38 48 -7,157 167 -7,156 163 -8)),((157 167 -7,38 48 -7,37 49 -6,158 170 -6,157 167 -7)),((158 170 -6,37 49 -6,36 49 -4,159 172 -4,158 170 -6)),((159 172 -4,36 49 -4,36 50 -2,160 174 -2,159 172 -4)),((160 174 -2,36 50 -2,36 50 -1e-15,160 174 -1e-15,160 174 -2)),((160 174 -1e-15,36 50 -1e-15,36 50 2,160 174 2,160 174 -1e-15)),((160 174 2,36 50 2,36 49 4,159 172 4,160 174 2)),((159 172 4,36 49 4,37 49 6,158 170 6,159 172 4)),((158 170 6,37 49 6,38 48 7,157 167 7,158 170 6)),((157 167 7,38 48 7,39 47 8,156 163 8,157 167 7)),((156 163 8,39 47 8,40 46 9,154 159 9,156 163 8)),((154 159 9,40 46 9,42 44 10,152 155 10,154 159 9)),((152 155 10,42 44 10,43 43 10,150 150 10,152 155 10)),((150 150 10,43 43 10,44 42 10,148 145 10,150 150 10)),((148 145 10,44 42 10,46 40 9,146 141 9,148 145 10)),((146 141 9,46 40 9,47 39 8,144 137 8,146 141 9)),((144 137 8,47 39 8,48 38 7,143 133 7,144 137 8)),((143 133 7,48 38 7,49 37 6,142 130 6,143 133 7)),((142 130 6,49 37 6,49 36 4,141 128 4,142 130 6)),((141 128 4,49 36 4,50 36 2,140 126 2,141 128 4)),((50 36 0,140 126 0,140 126 2,50 36 2,50 36 0)),((140 126 0,140 126 -2,140 40 -2,140 40 0,140 126 0)),((140 40 -2,140 126 -2,141 128 -4,141 40 -4,140 40 -2)),((141 40 -4,141 128 -4,142 130 -6,142 40 -6,141 40 -4)),((142 40 -6,142 130 -6,143 133 -7,143 40 -7,142 40 -6)),((143 40 -7,143 133 -7,144 137 -8,144 40 -8,143 40 -7)),((144 40 -8,144 137 -8,146 141 -9,146 40 -9,144 40 -8)),((146 40 -9,146 141 -9,148 145 -10,148 40 -10,146 40 -9)),((148 40 -10,148 145 -10,150 150 -10,150 40 -10,148 40 -10)),((150 40 -10,150 150 -10,152 155 -10,152 40 -10,150 40 -10)),((152 40 -10,152 155 -10,154 159 -9,154 40 -9,152 40 -10)),((154 40 -9,154 159 -9,156 163 -8,156 40 -8,154 40 -9)),((156 40 -8,156 163 -8,157 167 -7,157 40 -7,156 40 -8)),((157 40 -7,157 167 -7,158 170 -6,158 40 -6,157 40 -7)),((158 40 -6,158 170 -6,159 172 -4,159 40 -4,158 40 -6)),((159 40 -4,159 172 -4,160 174 -2,160 40 -2,159 40 -4)),((160 40 -2,160 174 -2,160 174 -1e-15,160 40 -1e-15,160 40 -2)),((160 40 -1e-15,160 174 -1e-15,160 174 2,160 40 2,160 40 -1e-15)),((160 40 2,160 174 2,159 172 4,159 40 4,160 40 2)),((159 40 4,159 172 4,158 170 6,158 40 6,159 40 4)),((158 40 6,158 170 6,157 167 7,157 40 7,158 40 6)),((157 40 7,157 167 7,156 163 8,156 40 8,157 40 7)),((156 40 8,156 163 8,154 159 9,154 40 9,156 40 8)),((154 40 9,154 159 9,152 155 10,152 40 10,154 40 9)),((152 40 10,152 155 10,150 150 10,150 40 10,152 40 10)),((150 40 10,150 150 10,148 145 10,148 40 10,150 40 10)),((148 40 10,148 145 10,146 141 9,146 40 9,148 40 10)),((146 40 9,146 141 9,144 137 8,144 40 8,146 40 9)),((144 40 8,144 137 8,143 133 7,143 40 7,144 40 8)),((143 40 7,143 133 7,142 130 6,142 40 6,143 40 7)),((142 40 6,142 130 6,141 128 4,141 40 4,142 40 6)),((141 40 4,141 128 4,140 126 2,140 40 2,141 40 4)),((140 126 0,140 40 0,140 40 2,140 126 2,140 126 0)),((50 36 -2,50 36 0,50 36 2,49 36 4,49 37 6,48 38 7,47 39 8,46 40 9,44 42 10,43 43 10,42 44 10,40 46 9,39 47 8,38 48 7,37 49 6,36 49 4,36 50 2,36 50 -1e-15,36 50 -2,36 49 -4,37 49 -6,38 48 -7,39 47 -8,40 46 -9,42 44 -10,43 43 -10,44 42 -10,46 40 -9,47 39 -8,48 38 -7,49 37 -6,49 36 -4,50 36 -2)),((140 40 0,140 40 -2,141 40 -4,142 40 -6,143 40 -7,144 40 -8,146 40 -9,148 40 -10,150 40 -10,152 40 -10,154 40 -9,156 40 -8,157 40 -7,158 40 -6,159 40 -4,160 40 -2,160 40 -1e-15,160 40 2,159 40 4,158 40 6,157 40 7,156 40 8,154 40 9,152 40 10,150 40 10,148 40 10,146 40 9,144 40 8,143 40 7,142 40 6,141 40 4,140 40 2,140 40 0)))
Figure
Geometry figure for visual-cg-3dbuffer-05

Див. також

ST_Buffer, CG_3DConvexHull, ST_AsX3D


Назва

CG_Rotate — Повертає геометрію на заданий кут навколо початку координат (0,0).

Короткий огляд

geometry CG_Rotate(geometry geom, float8 angle);

Опис

Повертає вхідну геометрію geom на angle радіан навколо точки початку координат (0,0). Поворот виконується у 2D-просторі; координати Z не змінюються. Позитивні кути повертають геометрію проти годинникової стрілки.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

Приклади

Code
SELECT CG_Rotate('LINESTRING(1 0,0 1)', pi()/2);
Вивід растрових зображень
LINESTRING(6.123233995736766e-17 1,-1 6.123233995736766e-17)
Figure
Geometry figure for visual-cg-rotate-01

Див. також

CG_2DRotate, ST_Rotate


Назва

CG_2DRotate — Повертає геометрію на заданий кут навколо вказаної точки в 2D.

Короткий огляд

geometry CG_2DRotate(geometry geom, float8 angle, float8 cx, float8 cy);

Опис

Повертає вхідну геометрію geom на angle радіан навколо точки (cx, cy). Поворот виконується у 2D-просторі; координати Z ігноруються. Позитивні кути повертають геометрію проти годинникової стрілки.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

Приклади

Code
SELECT CG_2DRotate('POINT(1 0)', pi()/2, 1, 1);
Вивід растрових зображень
POINT(2 1)
Figure
Geometry figure for visual-cg-2drotate-01

Див. також

CG_Rotate, CG_3DRotate


Назва

CG_3DRotate — Обертає геометрію в 3D-просторі навколо вектора осі.

Короткий огляд

geometry CG_3DRotate(geometry geom, float8 angle, float8 ax, float8 ay, float8 az);

Опис

Повертає вхідну геометрію geom на angle радіан навколо осі, визначеної вектором (ax, ay, az), що проходить через початок координат (0,0,0).

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_3DRotate('POINT(1 0 0)', pi()/2, 0, 0, 1);
Вивід растрових зображень
POINT Z (6.123233995736766e-17 1 0)
Figure
Geometry figure for visual-cg-3drotate-01

Див. також

CG_RotateX, CG_RotateY, CG_RotateZ


Назва

CG_RotateX — Повертає геометрію навколо осі X на заданий кут.

Короткий огляд

geometry CG_RotateX(geometry geom, float8 angle);

Опис

Повертає вхідну геометрію geom на angle радіан навколо осі X.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_RotateX('POINT(0 1 0)', pi()/2);
Вивід растрових зображень
POINT Z (0 6.123233995736766e-17 1)
Figure
Geometry figure for visual-cg-rotatex-01

Див. також

CG_RotateY, CG_RotateZ, CG_3DRotate


Назва

CG_RotateY — Повертає геометрію навколо осі Y на заданий кут.

Короткий огляд

geometry CG_RotateY(geometry geom, float8 angle);

Опис

Повертає вхідну геометрію geom на angle радіан навколо осі Y.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_RotateY('POINT(1 0 0)', pi()/2);
Вивід растрових зображень
POINT Z (6.123233995736766e-17 0 -1)
Figure
Geometry figure for visual-cg-rotatey-01

Див. також

CG_RotateX, CG_RotateZ, CG_3DRotate


Назва

CG_RotateZ — Повертає геометрію навколо осі Z на заданий кут.

Короткий огляд

geometry CG_RotateZ(geometry geom, float8 angle);

Опис

Повертає вхідну геометрію geom на angle радіан навколо осі Z.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_RotateZ('POINT(1 0 0)', pi()/2);
Вивід растрових зображень
POINT Z (6.123233995736766e-17 1 0)
Figure
Geometry figure for visual-cg-rotatez-01

Див. також

CG_RotateX, CG_RotateY, CG_3DRotate


Назва

CG_Scale — Масштабує геометрію рівномірно у всіх вимірах за заданим коефіцієнтом.

Короткий огляд

geometry CG_Scale(geometry geom, float8 factor);

Опис

Масштабує вхідну геометрію geom за допомогою єдиного коефіцієнта масштабування factor у всіх вимірах (X, Y та Z). Масштабування виконується відносно точки початку координат (0,0,0).

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

Приклади

Code
SELECT CG_Scale('LINESTRING(1 1,2 2)', 2);
Вивід растрових зображень
LINESTRING(2 2,4 4)
Figure
Geometry figure for visual-cg-scale-01

Назва

CG_3DScale — Масштабує геометрію за окремими коефіцієнтами вздовж осей X, Y та Z.

Короткий огляд

geometry CG_3DScale(geometry geom, float8 factorX, float8 factorY, float8 factorZ);

Опис

Масштабує вхідну геометрію geom за допомогою різних коефіцієнтів вздовж осей X, Y та Z. Масштабування виконується відносно точки початку координат (0,0,0).

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_3DScale('POINT(1 1 1)', 2, 3, 4);
Вивід растрових зображень
POINT Z (2 3 4)
Figure
Geometry figure for visual-cg-3dscale-01

Див. також

CG_Scale, CG_3DScaleAroundCenter


Назва

CG_3DScaleAroundCenter — Масштабує геометрію в 3D-просторі навколо вказаної центральної точки.

Короткий огляд

geometry CG_3DScaleAroundCenter(geometry geom, float8 factorX, float8 factorY, float8 factorZ, float8 centerX, float8 centerY, float8 centerZ);

Опис

Масштабує вхідну геометрію geom за допомогою різних коефіцієнтів вздовж осей X, Y і Z відносно вказаної центральної точки (centerX, centerY, centerZ).

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_3DScaleAroundCenter('POINT(2 2 2)', 0.5, 0.5, 0.5, 1, 1, 1);
Вивід растрових зображень
POINT Z (1.5 1.5 1.5)
Figure
Geometry figure for visual-cg-3dscalearoundcenter-01

Див. також

CG_Scale, CG_3DScale


Назва

CG_Translate — Перекладає (переміщує) геометрію на задані відступи в 2D-просторі.

Короткий огляд

geometry CG_Translate(geometry geom, float8 deltaX, float8 deltaY);

Опис

Перетворює вхідну геометрію geom, додаючи deltaX до координат X і deltaY до координат Y. Координати Z ігноруються.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

Приклади

Code
SELECT CG_Translate('LINESTRING(1 1,2 2)', 1, -1);
Вивід растрових зображень
LINESTRING(2 0,3 1)
Figure
Geometry figure for visual-cg-translate-01

Див. також

CG_3DTranslate, ST_Translate


Назва

CG_3DTranslate — Перекладає (переміщує) геометрію на задані відступи в 3D-просторі.

Короткий огляд

geometry CG_3DTranslate(geometry geom, float8 deltaX, float8 deltaY, float8 deltaZ);

Опис

Перетворює вхідну геометрію geom, додаючи deltaX до координат X, deltaY до координат Y і deltaZ до координат Z.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Code
SELECT CG_3DTranslate('POINT(1 1 1)', 1, -1, 2);
Вивід растрових зображень
POINT Z (2 0 3)
Figure
Geometry figure for visual-cg-3dtranslate-01

Див. також

CG_Translate, ST_Translate


Назва

CG_Simplify — Зменшує складність геометрії, зберігаючи при цьому основні характеристики та значення Z/M.

Короткий огляд

geometry CG_Simplify(geometry geom, double precision threshold, boolean preserveTopology = false);

Опис

Спрощує геометрію за допомогою алгоритму спрощення SFCGAL, який зменшує кількість точок або вершин, зберігаючи при цьому основні характеристики геометрії. Ця функція зберігає значення Z і M під час спрощення.

Алгоритм базується на обмеженій триангуляції та використовує бібліотеку CGAL Polyline Simplification 2 з додатковою обробкою для збереження координат Z та M. Коли топологія зберігається, а геометрії перетинаються, значення Z та M інтерполюються в точках перетину.

Ця функція добре працює з геометрією, схожою на 3D-рельєф (2,5D), але не призначена для вертикальних поверхонь, таких як стіни.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Параметри

geom

Вхідна геометрія

threshold

Максимальний поріг відстані (в одиницях геометрії) для спрощення. Чим вище це значення, тим більш спрощеною буде отримана геометрія.

preserveTopology

Якщо встановлено значення true, функція гарантує збереження топології геометрії. Коли геометрії перетинаються в цьому режимі, значення Z і M у точках перетину інтерполюються. Значення за замовчуванням — false.

Return Value

Повертає спрощену геометрію із збереженими значеннями Z та M.

Приклади

This example simplifies a polygon with a threshold of 0.5.

Code
SELECT CG_Simplify(
    'POLYGON((0 0,0 1,0.1 1,0.2 1,0.3 1,0.4 1,0.5 1,1 1,1 0,0 0))',
    0.5
  );
Вивід растрових зображень
POLYGON((0 0,0 1,1 1,1 0,0 0))
Figure
Geometry figure for visual-cg-simplify-01

Preserving topology can keep additional support points in a mixed ZM collection.

Code
SELECT CG_Simplify(
    'GEOMETRYCOLLECTION ZM(
      LINESTRING ZM(-1 -1 3 4,0 0 10 100,1 1 20 200,0 2 15 150,0 5 30 300,2 19 25 250,-4 20 15 150),
      POLYGON ZM((0 0 10 100,1 1 20 200,0 2 15 150,0 5 30 300,2 19 25 250,-4 20 15 150,0 0 10 100))
    )',
    2,
    false
  );
Вивід растрових зображень
GEOMETRYCOLLECTION ZM (LINESTRING ZM (-1 -1 3 4,2 19 25 250,-4 20 15 150),POLYGON ZM ((0 0 10 100,2 19 25 250,-4 20 15 150,0 0 10 100)))
Figure
Geometry figure for visual-cg-simplify-02

The topology-preserving variant keeps the shared anchor point at the collection intersection.

Code
SELECT CG_Simplify(
    'GEOMETRYCOLLECTION ZM(
      LINESTRING ZM(-1 -1 3 4,0 0 10 100,1 1 20 200,0 2 15 150,0 5 30 300,2 19 25 250,-4 20 15 150),
      POLYGON ZM((0 0 10 100,1 1 20 200,0 2 15 150,0 5 30 300,2 19 25 250,-4 20 15 150,0 0 10 100))
    )',
    2,
    true
  );
Вивід растрових зображень
GEOMETRYCOLLECTION ZM (LINESTRING ZM (-1 -1 3 4,0 0 10 100,2 19 25 250,-4 20 15 150),POLYGON ZM ((0 0 10 100,2 19 25 250,-4 20 15 150,0 0 10 100)))
Figure
Geometry figure for visual-cg-simplify-03

Compare simplification with and without topology preservation, using a threshold of 50.

Code
WITH data AS (
  SELECT ST_GeomFromText('GEOMETRYCOLLECTION(
    POLYGON((88.46 158.85,90.77 171.54,147.31 173.85,146.15 145,173.85 119.62,146.15 103.46,112.69 118.46,91.92 93.08,65.38 101.15,34.23 121.92,41.15 142.69,49.23 143.85,88.46 158.85)),
    POLYGON((112.69 118.46,146.15 103.46,190 60.77,185.38 43.46,126.54 26.15,83.85 28.46,67.69 64.23,43.46 58.46,10 83.85,34.23 121.92,65.38 101.15,91.92 93.08,112.69 118.46)))
  ') AS geom
)
SELECT geom AS input_geometry,
       CG_Simplify(geom, 50, true) AS topology_preserved,
       CG_Simplify(geom, 50, false) AS topology_not_preserved
FROM data;
Вивід растрових зображень
GEOMETRYCOLLECTION(POLYGON((88.46 158.85,90.77 171.54,147.31 173.85,146.15 145,173.85 119.62,146.15 103.46,112.69 118.46,91.92 93.08,65.38 101.15,34.23 121.92,41.15 142.69,49.23 143.85,88.46 158.85)), POLYGON((112.69 118.46,146.15 103.46,190 60.77,185.38 43.46,126.54 26.15,83.85 28.46,67.69 64.23,43.46 58.46,10 83.85,34.23 121.92,65.38 101.15,91.92 93.08,112.69 118.46))) | GEOMETRYCOLLECTION(POLYGON((88.46 158.85,147.31 173.85,146.15 103.46,112.69 118.46,34.23 121.92,88.46 158.85)), POLYGON((112.69 118.46,146.15 103.46,185.38 43.46,10 83.85,34.23 121.92,112.69 118.46))) | GEOMETRYCOLLECTION(POLYGON((88.46 158.85,173.85 119.62,34.23 121.92,88.46 158.85)), POLYGON((112.69 118.46,190 60.77,10 83.85,112.69 118.46)))
Figure
Geometry figure for visual-cg-simplify-04

Назва

CG_3DAlphaWrapping — Обчислює 3D-обгортку альфа, яка суворо охоплює геометрію.

Короткий огляд

geometry CG_3DAlphaWrapping(geometry geom, integer relative_alpha, integer relative_offset);

Опис

Обчислює 3D Alpha Wrapping точок у геометрії. Альфа-обгортання — це водонепроникна та орієнтована поверхнева сітка, яка суворо охоплює вхідні дані. Його можна розглядати як розширення або вдосконалення альфа-форми.

The relative_alpha parameter controls which features will appear in the output. It can have values from 0 to infinity. Higher relative_alpha values produce coarser wraps; lower values retain more detail.

The relative_offset parameter controls the tightness of the result. It can have values from 0 to infinity. If this parameter is set to 0, its value is automatically determined based on the relative_alpha parameter.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Wrap a tetrahedral surface and show the native 3D input beside the actual enclosing mesh.

Code
WITH data AS (
  SELECT 'POLYHEDRALSURFACE Z (
    ((0 0 0,4 0 0,0 4 0,0 0 0)),
    ((0 0 0,0 0 4,4 0 0,0 0 0)),
    ((0 0 0,0 4 0,0 0 4,0 0 0)),
    ((4 0 0,0 0 4,0 4 0,4 0 0))
  )'::geometry AS input_geometry
)
SELECT input_geometry AS input_geometry,
       CG_3DAlphaWrapping(input_geometry, 1)
         AS wrapped_geometry
FROM data;
Вивід растрових зображень
POLYHEDRALSURFACE Z (((0 0 0,4 0 0,0 4 0,0 0 0)),((0 0 0,0 0 4,4 0 0,0 0 0)),((0 0 0,0 4 0,0 0 4,0 0 0)),((4 0 0,0 0 4,0 4 0,4 0 0))) | POLYHEDRALSURFACE Z (((-0.193 0.127 4,-0.035 -0.228 4.004,0.087 0.087 4.195,-0.193 0.127 4)),((0.083 0.082 3.801,0.087 0.087 4.195,-0.035 -0.228 4.004,0.083 0.082 3.801)),((0.087 0.087 4.195,0.083 0.082 3.801,-0.193 0.127 4,0.087 0.087 4.195)),((0.048 3.84 0.16,3.867 0.133 0.133,0.091 3.926 -0.199,0.048 3.84 0.16)),((3.92 0.08 -0.201,0.037 -0.007 -0.228,0.091 3.926 -0.199,3.92 0.08 -0.201)),((3.867 0.133 0.133,3.92 0.08 -0.201,0.091 3.926 -0.199,3.867 0.133 0.133)),((3.867 0.133 0.133,3.877 -0.195 0.012,4.228 -0.006 0.037,3.867 0.133 0.133)),((3.867 0.133 0.133,4.228 -0.006 0.037,3.92 0.08 -0.201,3.867 0.133 0.133)),((3.877 -0.195 0.012,3.92 0.08 -0.201,4.228 -0.006 0.037,3.877 -0.195 0.012)),((0.012 -0.196 0.121,-0.035 -0.228 4.004,-0.202 0.079 0.078,0.012 -0.196 0.121)),((-0.202 0.079 0.078,0.037 -0.007 -0.228,0.012 -0.196 0.121,-0.202 0.079 0.078)),((3.867 0.133 0.133,0.083 0.082 3.801,3.877 -0.195 0.012,3.867 0.133 0.133)),((0.091 3.926 -0.199,0.101 4.199 0.06,0.048 3.84 0.16,0.091 3.926 -0.199)),((0.101 4.199 0.06,-0.228 4.028 -0.021,0.048 3.84 0.16,0.101 4.199 0.06)),((0.091 3.926 -0.199,-0.228 4.028 -0.021,0.101 4.199 0.06,0.091 3.926 -0.199)),((3.867 0.133 0.133,0.048 3.84 0.16,0.083 0.082 3.801,3.867 0.133 0.133)),((3.877 -0.195 0.012,0.037 -0.007 -0.228,3.92 0.08 -0.201,3.877 -0.195 0.012)),((0.012 -0.196 0.121,0.037 -0.007 -0.228,3.877 -0.195 0.012,0.012 -0.196 0.121)),((0.083 0.082 3.801,0.048 3.84 0.16,-0.193 0.127 4,0.083 0.082 3.801)),((-0.228 4.028 -0.021,-0.193 0.127 4,0.048 3.84 0.16,-0.228 4.028 -0.021)),((-0.228 4.028 -0.021,-0.202 0.079 0.078,-0.193 0.127 4,-0.228 4.028 -0.021)),((-0.202 0.079 0.078,-0.035 -0.228 4.004,-0.193 0.127 4,-0.202 0.079 0.078)),((3.877 -0.195 0.012,0.083 0.082 3.801,-0.035 -0.228 4.004,3.877 -0.195 0.012)),((0.012 -0.196 0.121,3.877 -0.195 0.012,-0.035 -0.228 4.004,0.012 -0.196 0.121)),((0.091 3.926 -0.199,0.037 -0.007 -0.228,-0.228 4.028 -0.021,0.091 3.926 -0.199)),((-0.228 4.028 -0.021,0.037 -0.007 -0.228,-0.202 0.079 0.078,-0.228 4.028 -0.021)))
Figure
Geometry figure for visual-cg-3dalphawrapping-01

Див. також

CG_AlphaShape


Назва

CG_NurbsCurveInterpolate — Creates an interpolating NURBS curve passing through all given data points

Короткий огляд

geometry CG_NurbsCurveInterpolate(geometry data_points, integer degree);

Опис

Creates a NURBS curve that interpolates through all provided data points. The resulting curve passes exactly through each point in the input geometry.

Parameters:

  • data_points - A LINESTRING geometry containing the points to interpolate through.

  • degree - Polynomial degree of the NURBS curve (typically 2 or 3).

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Interpolate a degree-3 NURBS curve through four 2D points.

Code
WITH data AS (
  SELECT 'LINESTRING(0 0,2 5,5 3,8 1)'::geometry AS input_points
)
SELECT input_points AS input_points,
       CG_NurbsCurveInterpolate(input_points, 3) AS interpolated_curve
FROM data;
Вивід растрових зображень
LINESTRING(0 0,2 5,5 3,8 1) | NURBSCURVE(DEGREE 3, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(-0.43 10.29),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(4.95 1.9),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(8 1),WEIGHT 1)),KNOTS (KNOT(0,4), KNOT(1,4)))
Figure
Geometry figure for visual-cg-nurbscurveinterpolate-01

Interpolate a 3D degree-3 NURBS curve through the documented control points.

Code
WITH data AS (
  SELECT 'LINESTRING Z (0 0 0,2 5 2,5 3 1,8 1 0)'::geometry AS input_points
)
SELECT input_points AS input_points,
       CG_NurbsCurveInterpolate(input_points, 3) AS interpolated_curve
FROM data;
Вивід растрових зображень
LINESTRING Z (0 0 0,2 5 2,5 3 1,8 1 0) | NURBSCURVE Z (DEGREE 3,CONTROLPOINTS Z (NURBSPOINT(WEIGHTEDPOINT Z (0 0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (-0.43 10.29 4.36),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (4.95 1.9 0.54),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (8 1 0),WEIGHT 1)),KNOTS (KNOT(0,4), KNOT(1,4)))
Figure
Geometry figure for visual-cg-nurbscurveinterpolate-02

Назва

CG_NurbsCurveApproximate — Creates an approximating NURBS curve fitting data points within a tolerance

Короткий огляд

geometry CG_NurbsCurveApproximate(geometry data_points, integer degree, float8 tolerance, integer max_control_points=100);

Опис

Creates a NURBS curve that approximates the given data points within the specified tolerance. Unlike interpolation, the curve does not necessarily pass through all points but provides a smooth fit with fewer control points.

Parameters:

  • data_points - A LINESTRING geometry containing the points to approximate.

  • degree - Polynomial degree of the NURBS curve.

  • tolerance - Maximum allowed distance between the curve and data points.

  • max_control_points - Optional maximum number of control points (default: 100). Limits curve complexity.

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

Approximate noisy 2D data with a degree-2 curve and a tolerance of 0.5.

Code
WITH data AS (
  SELECT 'LINESTRING(0 0,1 2.1,2 1.9,3 3.2,4 2.8,5 1)'::geometry AS input_points
)
SELECT input_points AS input_points,
       CG_NurbsCurveApproximate(input_points, 2, 0.5) AS approximated_curve
FROM data;
Вивід растрових зображень
LINESTRING(0 0,1 2.1,2 1.9,3 3.2,4 2.8,5 1) | NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(-0.05 2.64),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(2.24 1.65),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(2.79 3.48),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(4.84 2.43),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 1),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(0.35,1), KNOT(0.51,1), KNOT(0.68,1), KNOT(1,3)))
Figure
Geometry figure for visual-cg-nurbscurveapproximate-01

Approximate a 3D point set while preserving the Z dimension in the fitted curve.

Code
WITH data AS (
  SELECT 'LINESTRING Z (0 0 0,1 2 1,2 3 2,3 2 1,4 1 0,5 0 0)'::geometry AS input_points
)
SELECT input_points AS input_points,
       CG_NurbsCurveApproximate(input_points, 3, 0.1) AS approximated_curve
FROM data;
Вивід растрових зображень
LINESTRING Z (0 0 0,1 2 1,2 3 2,3 2 1,4 1 0,5 0 0) | NURBSCURVE Z (DEGREE 3,CONTROLPOINTS Z (NURBSPOINT(WEIGHTEDPOINT Z (0 0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (0.18 -0.15 -1.29),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (1.49 4.36 3.35),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (3.33 1.33 0.38),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (4.34 0.83 -0.44),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (5 0 0),WEIGHT 1)),KNOTS (KNOT(0,4), KNOT(0.46,1), KNOT(0.64,1), KNOT(1,4)))
Figure
Geometry figure for visual-cg-nurbscurveapproximate-02

Назва

CG_NurbsCurveDerivative — Computes the derivative (tangent, curvature) of a NURBS curve at a given parameter

Короткий огляд

geometry CG_NurbsCurveDerivative(geometry nurbscurve, float8 parameter, integer derivative_order);

Опис

Computes the derivative of a NURBS curve at a specific parameter value. The derivative represents the rate of change at that point:

  • Order 1: Tangent vector (direction and speed)

  • Order 2: Curvature vector (how the tangent changes)

  • Order 3: Third-order derivative (supported maximum)

Parameters:

  • nurbscurve - A NURBS curve geometry.

  • parameter - Parameter value for evaluation (typically 0.0 to 1.0).

  • derivative_order - Order of derivative to compute (1, 2, or 3).

Returns a POINT geometry representing the derivative vector at the specified parameter.

Availability: 3.7.0 - requires SFCGAL >= 2.3.0.

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

The first derivative gives the tangent vector at the evaluation parameter.

Code
WITH data AS (
  SELECT 'NURBSCURVE (2, (0.00 0.00, 5.00 10.00, 10.00 0.00))'::geometry AS input_curve
)
SELECT input_curve AS input_curve,
       CG_NurbsCurveDerivative(input_curve, 0.5, 1) AS tangent
FROM data;
Вивід растрових зображень
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3))) | POINT Z (10 0 0)
Figure
Geometry figure for visual-cg-nurbscurvederivative-01

The second derivative exposes curvature change for a higher-degree curve.

Code
WITH data AS (
  SELECT 'NURBSCURVE (3, (0.00 0.00, 2.00 8.00, 5.00 5.00, 8.00 2.00, 10.00 0.00))'::geometry AS input_curve
)
SELECT input_curve AS input_curve,
       CG_NurbsCurveDerivative(input_curve, 0.5, 2) AS curvature
FROM data;
Вивід растрових зображень
NURBSCURVE(DEGREE 3, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(2 8),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 5),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(8 2),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,4), KNOT(0.5,1), KNOT(1,4))) | POINT Z (9 -9 0)
Figure
Geometry figure for visual-cg-nurbscurvederivative-02

The same derivative call also works for 3D NURBS curves.

Code
WITH data AS (
  SELECT 'NURBSCURVE Z (2, (0.00 0.00 0.00, 5.00 10.00 5.00, 10.00 0.00 0.00))'::geometry AS input_curve
)
SELECT input_curve AS input_curve,
       CG_NurbsCurveDerivative(input_curve, 0.5, 1) AS tangent
FROM data;
Вивід растрових зображень
NURBSCURVE Z (DEGREE 2,CONTROLPOINTS Z (NURBSPOINT(WEIGHTEDPOINT Z (0 0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (5 10 5),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (10 0 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3))) | POINT Z (10 0 0)
Figure
Geometry figure for visual-cg-nurbscurvederivative-03

Див. також

ST_Evaluate, ST_MakeNurbsCurve

8.4. Deprecated SFCGAL Function Aliases

These ST_ names remain available for compatibility and emit deprecation notices. Their entries contain only the legacy signature and migration link. Use the corresponding CG_ pages for behavior, examples, and geometry support details.

Назва

ST_3DIntersection — Deprecated alias for CG_3DIntersection.

Короткий огляд

geometry ST_3DIntersection(geometry geom1, geometry geom2);

Description

[Застереження]

ST_3DIntersection is deprecated as of 3.5.0. Use CG_3DIntersection instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_3DDifference — Deprecated alias for CG_3DDifference.

Короткий огляд

geometry ST_3DDifference(geometry geom1, geometry geom2);

Description

[Застереження]

ST_3DDifference is deprecated as of 3.5.0. Use CG_3DDifference instead.

Availability: 2.2.0

This method needs SFCGAL backend.


Назва

ST_3DUnion — Deprecated alias for CG_3DUnion.

Короткий огляд

geometry ST_3DUnion(geometry geom1, geometry geom2);

geometry ST_3DUnion(geometry set g1field);

Description

[Застереження]

ST_3DUnion is deprecated as of 3.5.0. Use CG_3DUnion instead.

Availability: 2.2.0

This method needs SFCGAL backend.


Назва

ST_Tesselate — Deprecated alias for CG_Tesselate.

Короткий огляд

geometry ST_Tesselate(geometry geom);

Description

[Застереження]

ST_Tesselate is deprecated as of 3.5.0. Use CG_Tesselate instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_3DArea — Deprecated alias for CG_3DArea.

Короткий огляд

floatST_3DArea(geometry geom1);

Description

[Застереження]

ST_3DArea is deprecated as of 3.5.0. Use CG_3DArea instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_Extrude — Deprecated alias for CG_Extrude.

Короткий огляд

geometry ST_Extrude(geometry geom, float x, float y, float z);

Description

[Застереження]

ST_Extrude is deprecated as of 3.5.0. Use CG_Extrude instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_ForceLHR — Deprecated alias for CG_ForceLHR.

Короткий огляд

geometry ST_ForceLHR(geometry geom);

Description

[Застереження]

ST_ForceLHR is deprecated as of 3.5.0. Use CG_ForceLHR instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_Orientation — Deprecated alias for CG_Orientation.

Короткий огляд

integer ST_Orientation(geometry geom);

Description

[Застереження]

ST_Orientation is deprecated as of 3.5.0. Use CG_Orientation instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_MinkowskiSum — Deprecated alias for CG_MinkowskiSum.

Короткий огляд

geometry ST_MinkowskiSum(geometry geom1, geometry geom2);

Description

[Застереження]

ST_MinkowskiSum is deprecated as of 3.5.0. Use CG_MinkowskiSum instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_StraightSkeleton — Deprecated alias for CG_StraightSkeleton.

Короткий огляд

geometry ST_StraightSkeleton(geometry geom);

Description

[Застереження]

ST_StraightSkeleton is deprecated as of 3.1.0. Use CG_StraightSkeleton instead.

Availability: 2.1.0

This method needs SFCGAL backend.


Назва

ST_ApproximateMedialAxis — Deprecated alias for CG_ApproximateMedialAxis.

Короткий огляд

geometry ST_ApproximateMedialAxis(geometry geom);

Description

[Застереження]

ST_ApproximateMedialAxis is deprecated as of 3.5.0. Use CG_ApproximateMedialAxis instead.

Availability: 2.2.0

This method needs SFCGAL backend.


Назва

ST_IsPlanar — Deprecated alias for CG_IsPlanar.

Короткий огляд

boolean ST_IsPlanar(geometry geom);

Description

[Застереження]

ST_IsPlanar is deprecated as of 3.5.0. Use CG_IsPlanar instead.

Availability: 2.2.0: This was documented in 2.1.0 but got accidentally left out in 2.1 release.

This method needs SFCGAL backend.


Назва

ST_Volume — Deprecated alias for CG_Volume.

Короткий огляд

float ST_Volume(geometry geom1);

Description

[Застереження]

ST_Volume is deprecated as of 3.5.0. Use CG_Volume instead.

Availability: 2.2.0

This method needs SFCGAL backend.


Назва

ST_MakeSolid — Deprecated alias for CG_MakeSolid.

Короткий огляд

geometry ST_MakeSolid(geometry geom1);

Description

[Застереження]

ST_MakeSolid is deprecated as of 3.5.0. Use CG_MakeSolid instead.

Availability: 2.2.0

This method needs SFCGAL backend.


Назва

ST_IsSolid — Deprecated alias for CG_IsSolid.

Короткий огляд

boolean ST_IsSolid(geometry geom1);

Description

[Застереження]

ST_IsSolid is deprecated as of 3.5.0. Use CG_IsSolid instead.

Availability: 2.2.0

This method needs SFCGAL backend.


Назва

ST_ConstrainedDelaunayTriangles — Deprecated alias for CG_ConstrainedDelaunayTriangles.

Короткий огляд

geometry ST_ConstrainedDelaunayTriangles(geometry g1);

Description

[Застереження]

ST_ConstrainedDelaunayTriangles is deprecated as of 3.5.0. Use CG_ConstrainedDelaunayTriangles instead.

Availability: 3.0.0

This method needs SFCGAL backend.


Назва

ST_3DConvexHull — Deprecated alias for CG_3DConvexHull.

Короткий огляд

geometry ST_3DConvexHull(geometry geom1);

Description

[Застереження]

ST_3DConvexHull is deprecated as of 3.5.0. Use CG_3DConvexHull instead.

Availability: 3.3.0

This method needs SFCGAL backend.


Назва

ST_AlphaShape — Deprecated alias for CG_AlphaShape.

Короткий огляд

geometry ST_AlphaShape(geometry geom, float alpha , boolean allow_holes = false );

Description

[Застереження]

ST_AlphaShape is deprecated as of 3.5.0. Use CG_AlphaShape instead.

This method needs SFCGAL backend.


Назва

ST_OptimalAlphaShape — Deprecated alias for CG_OptimalAlphaShape.

Короткий огляд

geometry ST_OptimalAlphaShape(geometry geom, boolean allow_holes = false , integer nb_components = 1 );

Description

[Застереження]

ST_OptimalAlphaShape is deprecated as of 3.5.0. Use CG_OptimalAlphaShape instead.

Availability: 3.3.0 - requires SFCGAL >= 1.4.1.

This method needs SFCGAL backend.

Розділ 9. Топологія

Типи та функції топології PostGIS використовуються для управління топологічними об'єктами, такими як грані, ребра та вузли.

Презентація Сандро Сантіллі на конференції PostGIS Day Paris 2011 містить хороший огляд топології PostGIS та її перспектив Топологія з PostGIS 2.0, презентація.

Вінсент Пікавет надає хороший огляд та узагальнення того, що таке топологія, як вона використовується, а також різних інструментів FOSS4G, які її підтримують, у PostGIS Topology PGConf EU 2012.

An example of a topologically based GIS database is the US Census Topologically Integrated Geographic Encoding and Referencing System (TIGER) database. If you want to experiment with PostGIS topology and need some data.

Модуль топології PostGIS існує вже давно, але не завжди був частиною офіційної документації. В результаті масштабного очищення були видалені застарілі функції, виправлені відомі проблеми з користувацькою зручністю, задокументовані можливості та функції, додані нові функції та покращено відповідність SQL-MM.

This chapter is the maintained reference for the topology module, including its primitive tables, TopoGeometry type, topology management functions, editing functions, validation functions, and conversion helpers.

Усі функції та таблиці, пов'язані з цим модулем, встановлюються у схемі під назвою topology.

Функції, які визначені в стандарті SQL/MM, мають префікс ST_, а функції, специфічні для PostGIS, не мають префікса.

Підтримка топології вбудована за замовчуванням і може бути вимкнена шляхом вказання опції конфігурації --without-topology під час компіляції, як описано в Розділ 2, Встановлення PostGIS

9.1. Таблиці топологічних примітивів

Основні примітиви будь-якої топології зберігаються в таблицях edge_data, node та face, які знаходяться в схемі, створеній за допомогою CreateTopology. Кожен рядок таблиці edge_data представляє орієнтовану грань: він записує спрямовану криву від start_node до end_node разом з ідентифікатором грані, що зустрічається зліва від цього напрямку (left_face), та грані, що зустрічається справа (right_face). Таким чином, один і той самий геометричний сегмент може з'являтися двічі — по одному разу для кожного напрямку — якщо він належить до двох граней.

Стовпці next_left_edge та next_right_edge доповнюють цю інформацію про орієнтацію, кодуючи спосіб продовження руху навколо грані. Вони зберігають цілочисельні значення зі знаком, абсолютна величина яких є ідентифікатором наступної орієнтованої грані, а знак визначає, чи слід дотримуватися збереженої орієнтації без змін, чи слід її змінити на протилежну під час проходження. Формально для кожної ребра e діють такі правила:

  • abs(next_left_edge) — це ідентифікатор ребра, до якого можна дістатися, продовжуючи рух навколо грані, що лежить ліворуч від e. Якщо значення є додатним, проходження продовжується від кінцевого вузла e вздовж збереженої орієнтації посилального ребра; якщо воно є від'ємним, посилальне ребро необхідно пройти назад, щоб спільна грань залишалася ліворуч від об'єкта проходження.

  • abs(next_right_edge) аналогічно слідує за межею грані, розташованої праворуч від e. Позитивне значення означає, що наступна грань береться з її записаною орієнтацією, починаючи з кінцевого вузла e, тоді як негативне значення вказує на необхідність проходження по вказаній грані у зворотному напрямку, починаючи з її кінцевого вузла, щоб зберегти праву грань.

  • Значення нуль вказує на те, що ребро звисає з відповідного боку (наприклад, ізольоване ребро, дотична грань якого є універсальною гранью 0). Стовпці abs_next_left_edge та abs_next_right_edge, що відображаються у вигляді edge, є зручними проекціями цих абсолютних значень.

Ця репрезентація є варіантом подвійно зв'язаного списку ребер і використовується багатьма топологічними процедурами. Такі функції, як GetRingEdges та ValidateTopology, покладаються на неї для відновлення меж граней та діагностики невідповідностей — звідси і діагностичні повідомлення «invalid next_left_edge» та «invalid next_right_edge», що з'являються під час перевірки. Конструктори, такі як AddEdge, ініціалізують атрибути next_* з тривіальними самопосиланнями, тоді як процедури редагування, включаючи ST_AddEdgeModFace та ST_RemEdgeModFace, оновлюють посилання під час вставлення або видалення ребер. Інші масові операції (наприклад, Polygonize) можуть навмисно залишати поля невизначеними, тому в документації їхня поведінка чітко позначена.

9.2. Типи топології

Анотація

У цьому розділі перелічено типи даних PostgreSQL, встановлені PostGIS Topology. Зверніть увагу, що ми описуємо поведінку цих типів при перетворенні, що є дуже важливим, особливо при розробці власних функцій.

  • getfaceedges_returntype — Комбінований тип, що складається з порядкового номера та номера ребра.
  • TopoGeometry — Композитний тип, що представляє топологічно визначену геометрію.
  • validatetopology_returntype — Комбінований тип, що складається з повідомлення про помилку та ідентифікаторів id1 та id2 для позначення місця помилки. Це тип повернення для ValidateTopology.

Назва

getfaceedges_returntype — Комбінований тип, що складається з порядкового номера та номера ребра.

Description

Композитний тип, що складається з порядкового номера та номера ребра. Це тип повернення для функцій ST_GetFaceEdges та GetNodeEdges.

  1. sequence integer: Посилається на топологію, визначену в таблиці topology.topology, яка визначає схему топології та srid.

  2. edge integer: ідентифікатор ребра.


Назва

TopoGeometry — Композитний тип, що представляє топологічно визначену геометрію.

Description

Композитний тип, що посилається на геометрію топології в конкретному шарі топології, має конкретний тип і конкретний ідентифікатор. Елементами TopoGeometry є властивості: topology_id, layer_id, id integer, type integer.

  1. topology_id integer: Посилається на топологію, визначену в таблиці topology.topology, яка визначає схему топології та srid.

  2. layer_id integer: layer_id у таблиці шарів, до якої належить TopoGeometry. Поєднання topology_id та layer_id забезпечує унікальне посилання в таблиці topology.layers.

  3. id integer: id — це автоматично згенерований порядковий номер, який однозначно визначає топогеометрію у відповідному шарі топології.

  4. type integer від 1 до 4, що визначає тип геометрії: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection

Поведінка при приведення типів

У цьому розділі перелічено автоматичні та явні приведення типів, дозволені для цього типу даних

Приведення типів вПоведінка
geometryавтоматичне

Див. також

CreateTopoGeom


Назва

validatetopology_returntype — Комбінований тип, що складається з повідомлення про помилку та ідентифікаторів id1 та id2 для позначення місця помилки. Це тип повернення для ValidateTopology.

Description

Композитний тип, що складається з повідомлення про помилку та двох цілих чисел. Функція ValidateTopology повертає набір таких елементів для позначення помилок перевірки, а також ідентифікатори id1 та id2 для позначення ідентифікаторів об'єктів топології, пов'язаних із помилкою.

FieldTypeDescription
errorvarchar

Denotes the type of error.

Current error descriptors are: coincident nodes, edge crosses node, edge not simple, edge end node geometry mismatch, edge start node geometry mismatch, face overlaps face, face within face.

id1integerDenotes the identifier of the edge, face, or node in error.
id2integerFor errors that involve two objects, denotes the secondary edge or node.

Див. також

ValidateTopology

9.3. Топологічні домени

Анотація

У цьому розділі перелічено домени PostgreSQL, встановлені PostGIS Topology. Домени можна використовувати як типи об'єктів, наприклад, як об'єкти, що повертаються функціями, або стовпці таблиць. Відмінність домену від типу полягає в тому, що домен — це існуючий тип, до якого прив'язано обмеження перевірки.

  • TopoElement — Масив із 2 цілих чисел, що зазвичай використовується для ідентифікації компонента TopoGeometry.
  • TopoElementArray — Масив об'єктів TopoElement.

Назва

TopoElement — Масив із 2 цілих чисел, що зазвичай використовується для ідентифікації компонента TopoGeometry.

Description

Масив із 2 цілих чисел, що використовується для представлення одного компонента простого або ієрархічного TopoGeometry.

У випадку простої TopoGeometry перший елемент масиву представляє ідентифікатор топологічного примітиву, а другий елемент представляє його тип (1:вузол, 2:ребро, 3:грань). У випадку ієрархічної TopoGeometry перший елемент масиву представляє ідентифікатор дочірньої TopoGeometry, а другий елемент представляє ідентифікатор її шару.

[Примітка]

Для будь-якої ієрархічної TopoGeometry всі дочірні елементи TopoGeometry будуть походити з того самого дочірнього шару, як зазначено в записі topology.layer для шару TopoGeometry, що визначається.

Приклади

Code
SELECT te[1] AS id, te[2] AS type FROM
( SELECT ARRAY[1, 2]::topology.topoelement AS te ) f;
Вивід растрових зображень
id | type
----+------
  1 |    2
                 
Code
SELECT ARRAY[1, 2]::topology.topoelement;
Вивід растрових зображень
te
-------
 {1,2}
                 

This example shows what happens when casting a three-element array to topology.topoelement. The domain requires a two-element array, so the dimension check fails.

Code
SELECT ARRAY[1, 2, 3]::topology.topoelement;
Вивід растрових зображень
ERROR:  value for domain topology.topoelement violates check constraint "dimensions"

Назва

TopoElementArray — Масив об'єктів TopoElement.

Description

Масив з 1 або більше об'єктів TopoElement, який зазвичай використовується для передачі компонентів об'єктів TopoGeometry.

Приклади

Code
SELECT '{{1,2},{4,3}}'::topology.topoelementarray AS tea;
Вивід растрових зображень
{{1,2},{4,3}}

This is the more verbose equivalent.

Code
SELECT ARRAY[ARRAY[1, 2], ARRAY[4, 3]]::topology.topoelementarray AS tea;
Вивід растрових зображень
{{1,2},{4,3}}

This example uses the array aggregate function packaged with topology.

Code
SELECT topology.TopoElementArray_Agg(ARRAY[e, t] ORDER BY e, t) As tea
FROM generate_series(1, 4) As e CROSS JOIN generate_series(1, 3) As t;
                 
Вивід растрових зображень
{{1,1},{1,2},{1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3},{4,1},{4,2},{4,3}}
Code
SELECT '{{1,2,4},{3,4,5}}'::topology.topoelementarray AS tea;
Вивід растрових зображень
ERROR:  value for domain topology.topoelementarray violates check constraint "dimensions"

9.4. Управління топологією та топогеометрією

Анотація

У цьому розділі перелічено функції топології для створення нових схем топології, перевірки топологій та управління стовпцями TopoGeometry

  • AddTopoGeometryColumn — Додає стовпець топогеометрії до існуючої таблиці, реєструє цей новий стовпець як шар у topology.layer і повертає новий layer_id.
  • RenameTopoGeometryColumn — Перейменовує стовпець топогеометрії
  • DropTopology — Використовуйте з обережністю: видаляє схему топології та її посилання з таблиці topology.topology, а також посилання на таблиці в цій схемі з таблиці geometry_columns.
  • RenameTopology — Перейменовує топологію
  • DropTopoGeometryColumn — Видаляє стовпець топогеометрії з таблиці з назвою table_name у схемі schema_name та скасовує реєстрацію стовпців у таблиці topology.layer.
  • FixCorruptTopoGeometryColumn — Виправлено пошкодження топогеометрії, спричинене оновленням до postgis_topology 3.6.0 та вище
  • Populate_Topology_Layer — Додає відсутні записи до таблиці topology.layer, зчитуючи метадані з таблиць topo.
  • TopologySummary — Бере ім'я топології та надає підсумкові суми типів об'єктів у топології.
  • ValidateTopology — Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.
  • ValidateTopologyRelation — Повертає інформацію про недійсні записи топологічних відносин
  • ValidateTopologyPrecision — Повертає неточні вершини в топології.
  • MakeTopologyPrecise — Прив'язати вершини топології до сітки з високою точністю.
  • FindTopology — Повертає запис топології різними способами.
  • FindLayer — Повертає запис topology.layer різними способами.
  • TotalTopologySize — Загальний обсяг дискового простору, використовуваний зазначеною топологією, включаючи всі індекси та дані TOAST.
  • UpgradeTopology — Оновлює вказану топологію для підтримки великих ідентифікаторів (int8) для топології та примітивних ідентифікаторів.

Назва

AddTopoGeometryColumn — Додає стовпець топогеометрії до існуючої таблиці, реєструє цей новий стовпець як шар у topology.layer і повертає новий layer_id.

Короткий огляд

integer AddTopoGeometryColumn(name topology_name, name schema_name, name table_name, name column_name, varchar feature_type, integer child_layer);

integer AddTopoGeometryColumn(name topology_name, regclass tab, name column_name, integer layer_id, varchar feature_type, integer child_layer);

Description

Кожен об'єкт TopoGeometry належить до певного шару певної топології. Перед створенням об'єкта TopoGeometry потрібно створити його TopologyLayer. Топологічний шар — це зв'язок таблиці об'єктів з топологією. Він також містить інформацію про тип та ієрархію. Ми створюємо шар за допомогою функції AddTopoGeometryColumn():

Ця функція додасть запитуваний стовпець до таблиці та додасть запис до таблиці topology.layer з усією наданою інформацією.

Якщо ви не вкажете [child_layer] (або встановите його значення NULL), цей шар буде містити базові топогеометрії (складені з примітивних топологічних елементів). В іншому випадку цей шар буде містити ієрархічні топогеометрії (складені з топогеометрій з child_layer).

Після створення шару (його ідентифікатор повертається функцією AddTopoGeometryColumn) ви готові до побудови об'єктів TopoGeometry в ньому

Дійсні feature_types: POINT, MULTIPOINT, LINE, MULTILINE, POLYGON, MULTIPOLYGON, COLLECTION

Доступність: 1.1

Приклади

This example creates the new table in the ma_topo schema. The table could be created in a different schema, in which case topology_name and schema_name would be different.

Code
CREATE SCHEMA ma;
CREATE TABLE ma.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text);
SELECT topology.AddTopoGeometryColumn('ma_topo', 'ma', 'parcels', 'topo', 'POLYGON');
Code
CREATE SCHEMA ri;
CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);
SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');

Назва

RenameTopoGeometryColumn — Перейменовує стовпець топогеометрії

Короткий огляд

topology.layer RenameTopoGeometryColumn(regclass layer_table, name feature_column, name new_name);

Description

Ця функція змінює назву існуючого стовпця TopoGeometry, забезпечуючи відповідне оновлення метаданих про нього.

Доступність: 3.4.0

Приклади

Code
SELECT topology.RenameTopoGeometryColumn('public.parcels', 'topogeom', 'tgeom');

Назва

DropTopology — Використовуйте з обережністю: видаляє схему топології та її посилання з таблиці topology.topology, а також посилання на таблиці в цій схемі з таблиці geometry_columns.

Короткий огляд

integer DropTopology(varchar topology_schema_name);

Description

Видаляє схему топології та її посилання з таблиці topology.topology, а також посилання на таблиці в цій схемі з таблиці geometry_columns. Цю функцію слід ВИКОРИСТОВУВАТИ З ОБЕРЕЖНІСТЮ, оскільки вона може знищити важливі для вас дані. Якщо схема не існує, вона просто видаляє записи посилань на вказану схему.

Доступність: 1.1

Приклади

Cascade видаляє схему ma_topo та всі посилання на неї в topology.topology та geometry_columns.

Code
SELECT topology.DropTopology('ma_topo');

Див. також

DropTopoGeometryColumn


Назва

RenameTopology — Перейменовує топологію

Короткий огляд

varchar RenameTopology(varchar old_name, varchar new_name);

Description

Перейменовує схему топології, оновлюючи запис метаданих у таблиці topology.topology.

Доступність: 3.4.0

Приклади

Перейменуйте топологію з topo_stage на topo_prod.

Code
SELECT topology.RenameTopology('topo_stage', 'topo_prod');

Назва

DropTopoGeometryColumn — Видаляє стовпець топогеометрії з таблиці з назвою table_name у схемі schema_name та скасовує реєстрацію стовпців у таблиці topology.layer.

Короткий огляд

text DropTopoGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);

Description

Видаляє стовпець топогеометрії з таблиці з назвою table_name у схемі schema_name та скасовує реєстрацію стовпців у таблиці topology.layer. Повертає підсумок стану видалення. ПРИМІТКА: перед видаленням спочатку встановлює всі значення на NULL, щоб обійти перевірки цілісності посилань.

Доступність: 1.1

Приклади

Code
SELECT topology.DropTopoGeometryColumn('ma_topo', 'parcel_topo', 'topo');

Див. також

AddTopoGeometryColumn


Назва

FixCorruptTopoGeometryColumn — Виправлено пошкодження топогеометрії, спричинене оновленням до postgis_topology 3.6.0 та вище

Короткий огляд

text FixCorruptTopoGeometryColumn(name layerSchema, name layerTable, name layerColumn );

Description

При оновленні топології PostGIS <3.6.0 до версії >3.6.0+ було змінено визначення стовпця topogeometry. Це спричинило пошкодження топогеометрій, створених до оновлення. Ця функція виправляє це пошкодження в уражених таблицях.

The function refuses to process tables with expression or partial indexes; drop or rebuild those indexes manually around the repair.

Доступність: 3.6.1

Приклади

Виправити всі стовпці топології

Code
SELECT topology.FixCorruptTopoGeometryColumn(schema_name, table_name, feature_column)
    FROM topology.layer;
                

Див. також

UpgradeTopology


Назва

Populate_Topology_Layer — Додає відсутні записи до таблиці topology.layer, зчитуючи метадані з таблиць topo.

Короткий огляд

setof record Populate_Topology_Layer();

Description

Додає відсутні записи до таблиці topology.layer, перевіряючи обмеження топології в таблицях. Ця функція корисна для виправлення записів у каталозі топології після відновлення схем із даними топології.

Повертає список створених записів. Повертаються стовпці schema_name, table_name, feature_column.

Доступність: 2.3.0

Приклади

Code
SELECT CreateTopology('strk_topo');
CREATE SCHEMA strk;
CREATE TABLE strk.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text);
SELECT topology.AddTopoGeometryColumn('strk_topo', 'strk', 'parcels', 'topo', 'POLYGON');
Вивід растрових зображень
createtopology
----------------
              1
(1 row)

CREATE SCHEMA
CREATE TABLE
 addtopogeometrycolumn
-----------------------
                     1
(1 row)

This query returns no records because the feature is already registered.

Code
SELECT *
FROM topology.Populate_Topology_Layer();
Вивід растрових зображень
(0 rows)

Rebuild the topology layer catalog.

Code
TRUNCATE TABLE topology.layer;
Вивід растрових зображень
TRUNCATE TABLE
Code
SELECT *
FROM topology.Populate_Topology_Layer();
Вивід растрових зображень
schema_name | table_name | feature_column
-------------+------------+----------------
 strk        | parcels    | topo
(1 row)
Code
SELECT topology_id, layer_id,
       schema_name AS sn, table_name AS tn, feature_column AS fc
FROM topology.layer;
Вивід растрових зображень
topology_id | layer_id |  sn  |   tn    |  fc
-------------+----------+------+---------+------
           1 |        1 | strk | parcels | topo
(1 row)

Див. також

AddTopoGeometryColumn


Назва

TopologySummary — Бере ім'я топології та надає підсумкові суми типів об'єктів у топології.

Короткий огляд

text TopologySummary(varchar topology_schema_name);

Description

Бере ім'я топології та надає підсумкові суми типів об'єктів у топології.

Доступність: 2.0.0

Приклади

Code
SELECT topology.TopologySummary('city_data');
Вивід растрових зображень
Topology city_data (329), SRID 4326, precision: 0
22 nodes, 24 edges, 10 faces, 29 topogeoms in 5 layers
Layer 1, type Polygonal (3), 9 topogeoms
 Deploy: features.land_parcels.feature
Layer 2, type Puntal (1), 8 topogeoms
 Deploy: features.traffic_signs.feature
Layer 3, type Lineal (2), 8 topogeoms
 Deploy: features.city_streets.feature
Layer 4, type Polygonal (3), 3 topogeoms
 Hierarchy level 1, child layer 1
 Deploy: features.big_parcels.feature
Layer 5, type Puntal (1), 1 topogeoms
 Hierarchy level 1, child layer 2
 Deploy: features.big_signs.feature

Назва

ValidateTopology — Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.

Короткий огляд

setof validatetopology_returntype ValidateTopology(varchar toponame, geometry bbox);

Description

Повертає набір об'єктів validatetopology_returntype, що детально описують проблеми з топологією, за бажанням обмежуючи перевірку областю, вказаною параметром bbox.

Нижче наведено перелік можливих помилок, їх значення та значення повернених ідентифікаторів:

Errorid1id2Meaning
coincident nodesІдентифікатор першого вузла.Ідентифікатор другого вузла.Два вузли мають однакову геометрію.
edge crosses nodeІдентифікатор ребра.Ідентифікатор вузла.Ребро має вузол у своїй внутрішній частині. Див. ST_Relate.
invalid edgeІдентифікатор ребра. Геометрія ребра недійсна. Див. ST_IsValid.
edge not simpleІдентифікатор ребра. Геометрія ребра має самоперетини. Див. ST_IsSimple.
edge crosses edgeІдентифікатор першого ребра.Ідентифікатор другого ребра.Дві ребра мають внутрішнє перетин. Див. ST_Relate.
edge start node geometry mismatchІдентифікатор ребра.Ідентифікатор вказаного початкового вузла. Геометрія вузла, вказаного як початковий вузол для ребра, не відповідає першій точці геометрії ребра. Див. ST_StartPoint.
edge end node geometry mismatchІдентифікатор ребра.Ідентифікатор вказаного кінцевого вузла. Геометрія вузла, вказаного як кінцевий вузол для ребра, не відповідає останній точці геометрії ребра. Див. ST_EndPoint.
face without edgesІдентифікатор "осиротілої" грані.  Жодне ребро не повідомляє про наявність грані з будь-якого боку (left_face, right_face).
face has no ringsІдентифікатор частково визначеної грані.  Ребра, що утворюють грань на своїх боках, не утворюють кільця.
face has wrong mbrІдентифікатор грані з неправильним кешем mbr.  Мінімальна обмежувальна рамка грані не збігається з мінімальною обмежувальною рамкою сукупності ребер, що утворюють грань по своїх сторонах.
hole not in advertised faceПідписаний ідентифікатор ребра, що ідентифікує кільце. Див. GetRingEdges.  Кільце ребер, що утворюють грань на зовнішній поверхні, міститься в іншій грані.
not-isolated node has not- containing_faceІдентифікатор неправильно визначеного вузла.  Вузол, який повідомляється як такий, що знаходиться на межі одного або декількох ребер, вказує на вмістну грань.
isolated node has containing_faceІдентифікатор неправильно визначеного вузла.  Вузол, який не вказаний як такий, що знаходиться на межі будь-яких ребер, не має позначення грані, що його містить.
isolated node has wrong containing_faceІдентифікатор неправильно представленого вузла.  Вузол, який не вказаний як такий, що знаходиться на межі будь-яких ребер, вказує на грань, що його містить, яка не є фактичною гранью, що його містить. Див. GetFaceContainingPoint.
invalid next_right_edgeІдентифікатор неправильно представленого ребра. Підписаний ідентифікатор ребра, яке слід вказати як наступне праве ребро. Ребро, позначене як наступне ребро, на яке натрапляєш, рухаючись праворуч від ребра, є неправильним.
invalid next_left_edgeІдентифікатор неправильно представленого ребра. Підписаний ідентифікатор ребра, яке слід вказати як наступне ліве ребро. Ребро, вказане як наступне ребро, на яке натрапляєш, рухаючись лівою стороною ребра, є неправильним.
mixed face labeling in ringПідписаний ідентифікатор ребра, що ідентифікує кільце. Див. GetRingEdges.  Ребра в кільці позначають конфліктуючі грані на стороні ходіння. Це також називається "конфліктом розташування сторін".
non-closed ringПідписаний ідентифікатор ребра, що ідентифікує кільце. Див. GetRingEdges.  Кільце ребер, утворене атрибутами next_left_edge/next_right_edge, починається і закінчується на різних вузлах.
face has multiple shellsІдентифікатор грані, що є предметом суперечки. Підписаний ідентифікатор ребра, що ідентифікує кільце. Див. GetRingEdges. Більше ніж одне кільце ребер вказує на ту саму грань всередині.

Доступність: 1.0.0

Покращено: 2.0.0 більш ефективне виявлення перетину ребер та виправлення помилок, що були присутні в попередніх версіях.

Змінено: 2.2.0 значення id1 та id2 були поміняні місцями для "перетину ребер вузлом" з метою узгодження з описом помилки.

Змінено: 3.2.0 додано опційний параметр bbox, виконується перевірка маркування ребер та з'єднання ребер.

Приклади

Code
SELECT * FROM topology.ValidateTopology('ma_topo');
Вивід растрових зображень
error        | id1 | id2
-------------------+-----+-----
face without edges |   1 |

Див. також

validatetopology_returntype


Назва

ValidateTopologyRelation — Повертає інформацію про недійсні записи топологічних відносин

Короткий огляд

setof record ValidateTopologyRelation(varchar toponame);

Description

Повертає набір записів, що містять інформацію про недійсні елементи в таблиці відносин топології.

Доступність: 3.2.0

Див. також

ValidateTopology


Назва

ValidateTopologyPrecision — Повертає неточні вершини в топології.

Короткий огляд

geometry ValidateTopologyPrecision(name toponame, geometry bbox, float8 gridSize);

Description

Повертає всі вершини, які не округлені до топології або задані gridSize як точкова геометрія, опціонально обмежуючи перевірку областю, заданою параметром bbox.

Доступність: 3.6.0

Приклади

Code
SELECT g
FROM topology.ValidateTopologyPrecision(
    'city_data',
    gridSize =
> 2,
    bbox =
> ST_MakeEnvelope(0, 0, 20, 20)
) g;
Вивід растрових зображень
MULTIPOINT(9 6,9 14)
Figure
Geometry figure for visual-validatetopologyprecision-01

Див. також

MakeTopologyPrecise


Назва

MakeTopologyPrecise — Прив'язати вершини топології до сітки з високою точністю.

Короткий огляд

void MakeTopologyPrecise(name toponame, geometry bbox, float8 gridSize);

Description

Прив'язує всі вершини топології до сітки точності топології або до сітки, розмір якої вказано параметром gridSize, за бажанням обмежуючи операцію об'єктами, що перетинають область, вказану параметром bbox.

Using a gridSize larger than the smallest edge extent raises an exception rather than collapsing the edge into an empty geometry. This safeguards adjacent topological relationships by preventing precision snapping from removing primitives altogether.

[Примітка]

При використанні функції "Прив'язати" топологія може стати недійсною, тому рекомендується перевірити результат операції за допомогою ValidateTopology.

Доступність: 3.6.0

Приклади

Code
SELECT topology.MakeTopologyPrecise(
    'city_data',
    gridSize =
> 2
);

Назва

FindTopology — Повертає запис топології різними способами.

Короткий огляд

topology FindTopology(topogeometry topogeom);

topology FindTopology(regclass layerTable, name layerColumn);

topology FindTopology(name layerSchema, name layerTable, name layerColumn);

topology FindTopology(text topoName);

topology FindTopology(int id);

Description

Приймає ідентифікатор топології або ідентифікатор об'єкта, пов'язаного з топологією, і повертає запис топології.

Доступність: 3.2.0

Приклади

Code
SELECT name(FindTopology('features.land_parcels', 'feature'));
Вивід растрових зображень
city_data

Див. також

FindLayer


Назва

FindLayer — Повертає запис topology.layer різними способами.

Короткий огляд

topology.layer FindLayer(topogeometry tg);

topology.layer FindLayer(regclass layer_table, name feature_column);

topology.layer FindLayer(name schema_name, name table_name, name feature_column);

topology.layer FindLayer(integer topology_id, integer layer_id);

Description

Приймає ідентифікатор шару або ідентифікатор об'єкта, пов'язаного з топологією, і повертає запис topology.layer.

Доступність: 3.2.0

Приклади

Code
SELECT layer_id(FindLayer('features.land_parcels', 'feature'));
Вивід растрових зображень
1

Див. також

FindTopology


Назва

TotalTopologySize — Загальний обсяг дискового простору, використовуваний зазначеною топологією, включаючи всі індекси та дані TOAST.

Короткий огляд

int8 TotalTopologySize(name toponame);

Description

Приймає ім'я топології та надає загальний обсяг дискового простору, зайнятого всіма її таблицями, включаючи індекси та дані TOAST.

Доступність: 3.6.0

Приклади

Code
SELECT topology.TopologySummary('city_data');
Вивід растрових зображень
Topology city_data (329), SRID 4326, precision: 0
22 nodes, 24 edges, 10 faces, 29 topogeoms in 5 layers
Layer 1, type Polygonal (3), 9 topogeoms
 Deploy: features.land_parcels.feature
Layer 2, type Puntal (1), 8 topogeoms
 Deploy: features.traffic_signs.feature
Layer 3, type Lineal (2), 8 topogeoms
 Deploy: features.city_streets.feature
Layer 4, type Polygonal (3), 3 topogeoms
 Hierarchy level 1, child layer 1
 Deploy: features.big_parcels.feature
Layer 5, type Puntal (1), 1 topogeoms
 Hierarchy level 1, child layer 2
 Deploy: features.big_signs.feature

Назва

UpgradeTopology — Оновлює вказану топологію для підтримки великих ідентифікаторів (int8) для топології та примітивних ідентифікаторів.

Короткий огляд

void UpgradeTopology(name toponame);

Description

Бере ім'я топології та оновлює його для підтримки великих ідентифікаторів (int8) для топології та примітивних ідентифікаторів. Функція оновлює наступне: - face (стовпець face_id з int4 до int8, face_id_seq з int4 до int8) - node (стовпець node_id з int4 до int8, столпець containing_face з int4 до int8, node_id_seq з int4 до int8) - edge_data (стовпець edge_id з int4 до int8, edge_data_edge_id_seq з int4 до int8, стовпці left_face та right_face з int4 до int8, стовпці start_node та end_node з int4 до int8, стовпці next_left_edge та next_right_edge з int4 до int8) - relation (стовпець topogeo_id з int4 до int8, element_id з int4 до int8) - topology (стовпець useslargeids встановлено на true)

Доступність: 3.6.0

Приклади

Code
SELECT topology.UpgradeTopology('city_data');

9.5. Управління статистикою топології

Анотація

У цьому розділі розглядається управління статистикою бази даних під час побудови топології.

Додавання елементів до топології викликає багато запитів до бази даних для пошуку існуючих ребер, які будуть розділені, додавання вузлів та оновлення ребер, які будуть з'єднані з новою лінією. З цієї причини корисно, щоб статистичні дані про дані в таблицях топології були актуальними.

Функції заповнення та редагування топології PostGIS не оновлюють статистику автоматично, оскільки оновлення статистики після кожної зміни в топології було б надмірним, тому це обов'язок того, хто викликає функцію.

[Примітка]

Статистика, оновлена за допомогою autovacuum, НЕ буде видима для транзакцій, які були запущені до завершення процесу autovacuum, тому для використання оновленої статистики довготривалі транзакції повинні самостійно виконати ANALYZE.

9.6. Конструктори топології

Анотація

У цьому розділі описано функції топології для створення нових топологій.

  • CreateTopology — Створює нову схему топології та реєструє її в таблиці topology.topology.
  • CopyTopology — Створює копію топології (вузлів, ребер, граней, шарів і TopoGeometries) у новій схемі
  • ST_InitTopoGeo — Створює нову схему топології та реєструє її в таблиці topology.topology.
  • ST_CreateTopoGeo — Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність операції.
  • TopoGeo_AddPoint — Додає точку до існуючої топології, використовуючи допуск і, можливо, розділяючи існуюче ребро.
  • TopoGeo_AddLineString — Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.
  • TopoGeo_AddPolygon — Додає полігон до існуючої топології, використовуючи допуск і, можливо, розділяючи існуючі ребра/грані. Повертає ідентифікатори граней.
  • TopoGeo_LoadGeometry — Завантажте геометрію в існуючу топологію, при необхідності вирівнюючи та розділяючи.

Назва

CreateTopology — Створює нову схему топології та реєструє її в таблиці topology.topology.

Короткий огляд

integer CreateTopology(name topology_schema_name, integer srid, double precision prec=0, boolean hasz=false, integer topoid=0, boolean useslargeids=false);

Description

Створює нову схему топології з іменем topology_name і реєструє її в таблиці topology.topology. Топології повинні мати унікальні імена. Таблиці топологій (edge_data, face, node та relation створюються в схемі. Повертає ідентифікатор топології.

srid — це SRID просторової системи координат для топології. Якщо SRID не вказано, за замовчуванням використовується значення -1 (невідомо).

Допуск prec вимірюється в одиницях просторової системи відліку. За замовчуванням допуск дорівнює 0.

hasz за замовчуванням має значення false, якщо не вказано інше.

topoid необов'язковий явний ідентифікатор (дозволяє детерміновано присвоювати ідентифікатори топології, повинен бути унікальним)

useslargeids необов'язковий, за замовчуванням false. Якщо true, то топологія буде створена для підтримки великих ідентифікаторів (int8) для топології та примітивних ідентифікаторів.

Це схоже на SQL/MM ST_InitTopoGeo, але має більше функціональних можливостей.

Доступність: 1.1

Покращено: у версії 2.0 додано підтримку hasZ.

Покращено: у версії 3.6.0 додано параметри topoid та usesLargeIDs.

Приклади

Створіть схему топології під назвою ma_topo, яка зберігає ребра та вузли в системі координат Massachusetts State Plane-meters (SRID = 26986). Допуск становить 0,5 метра, оскільки система просторових координат базується на метрах.

Code
SELECT topology.CreateTopology('ma_topo', 26986, 0.5);

Створіть топологію для Род-Айленду під назвою ri_topo у системі просторових координат State Plane-feet (SRID = 3438)

Code
SELECT topology.CreateTopology('ri_topo', 3438) AS topoid;
Вивід растрових зображень
2

Назва

CopyTopology — Створює копію топології (вузлів, ребер, граней, шарів і TopoGeometries) у новій схемі

Короткий огляд

integer CopyTopology(varchar existing_topology_name, varchar new_name);

Description

Створює нову топологію з назвою new_name, з SRID і точністю, скопійованими з existing_topology_name. Вузли, ребра та грані в existing_topology_name копіюються в нову топологію, а також шари та пов'язані з ними TopoGeometries.

[Примітка]

Нові рядки в таблиці topology.layer містять синтетичні значення для schema_name, table_name та feature_column. Це пов'язано з тим, що об'єкти TopoGeometry існують лише як визначення і ще не доступні в таблиці, визначеній користувачем.

Доступність: 2.0.0

Приклади

Створіть резервну копію топології під назвою ma_topo.

Code
SELECT topology.CopyTopology('ma_topo', 'ma_topo_backup');

Назва

ST_InitTopoGeo — Створює нову схему топології та реєструє її в таблиці topology.topology.

Короткий огляд

text ST_InitTopoGeo(varchar topology_schema_name);

Description

Це еквівалент SQL-MM для CreateTopology. У ньому відсутні параметри для просторової системи координат і допуску. Він повертає текстовий опис створення топології замість ідентифікатора топології.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.17

Приклади

Code
SELECT topology.ST_InitTopoGeo('topo_schema_to_create') AS topocreation;
Вивід растрових зображень
Topology-Geometry 'topo_schema_to_create' (id:7) created.

Див. також

CreateTopology


Назва

ST_CreateTopoGeo — Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність операції.

Короткий огляд

text ST_CreateTopoGeo(varchar atopology, geometry acollection);

Description

Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність виконання.

Корисно для заповнення порожньої топології.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo and Topo-Net 3: Routine Details -- X.3.18

Приклади

Populate the topology.

Code
SELECT topology.ST_CreateTopoGeo(
'ri_topo',
ST_GeomFromText(
 'MULTILINESTRING((384744 236928,384750 236923,384769 236911,384799 236895,384811 236890,384833 236884,
 384844 236882,384866 236881,384879 236883,384954 236898,385087 236932,385117 236938,
 385167 236938,385203 236941,385224 236946,385233 236950,385241 236956,385254 236971,
 385260 236979,385268 236999,385273 237018,385273 237037,385271 237047,385267 237057,
 385225 237125,385210 237144,385192 237161,385167 237192,385162 237202,385159 237214,
 385159 237227,385162 237241,385166 237256,385196 237324,385209 237345,385234 237375,
 385237 237383,385238 237399,385236 237407,385227 237419,385213 237430,385193 237439,
 385174 237451,385170 237455,385169 237460,385171 237475,385181 237503,385190 237521,
 385200 237533,385206 237538,385213 237541,385221 237542,385235 237540,385242 237541,
 385249 237544,385260 237555,385270 237570,385289 237584,385292 237589,385291 237596,385284 237630))',
 3438)
 );
Вивід растрових зображень
Topology ri_topo populated

Create the tables and topogeometries.

Code
CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);

SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');

Назва

TopoGeo_AddPoint — Додає точку до існуючої топології, використовуючи допуск і, можливо, розділяючи існуюче ребро.

Короткий огляд

bigint TopoGeo_AddPoint(varchar atopology, geometry apoint, float8 tolerance);

Description

Додає точку до існуючої топології та повертає її ідентифікатор. Задана точка буде прив'язана до існуючих вузлів або ребер в межах заданого допуску. Існуюче ребро може бути розділене прив'язаною точкою.

Доступність: 2.0.0


Назва

TopoGeo_AddLineString — Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.

Короткий огляд

SETOF bigint TopoGeo_AddLineString(varchar atopology, geometry aline, float8 tolerance, int max_edges);

Description

Додає лінію до існуючої топології та повертає набір ідентифікаторів ребер із знаком, що її утворюють (негативні ідентифікатори означають, що ребро йде в протилежному напрямку від вхідної лінії).

Дана лінія прив'яжеться до існуючих вузлів або ребер в межах заданої похибки. Існуючі ребра і грані можуть бути розділені лінією. Крім нових ребер, можуть бути додані нові вузли і грані.

Повернені ідентифікатори ребер можуть бути як існуючими ребрами, так і новоствореними ребрами, залежно від необхідності, щоб якомога точніше відобразити введену лінію.

Кількість новостворених ребер (які покривають раніше непокритий простір або є результатом розділення існуючих ребер) може бути обмежена параметром max_edges.

[Примітка]

When adding many lines, the load order can have a large impact on performance because each call checks the line against topology elements already loaded. In bulk workflows, adding large closed or enclosing lines before smaller contained lines can avoid expensive later splits. For loading a collection in one call, see TopoGeo_LoadGeometry.

[Примітка]

Оновлення статистики про топології, що завантажуються за допомогою цієї функції, залежить від виклику, див. maintaining statistics during topology editing and population.

Доступність: 2.0.0

Покращено: у версії 3.2.0 додано підтримку повернення підписаного ідентифікатора.

Покращено: у версії 3.7.0 додано підтримку обмеження кількості нових ребер, що створюються в топології.


Назва

TopoGeo_AddPolygon — Додає полігон до існуючої топології, використовуючи допуск і, можливо, розділяючи існуючі ребра/грані. Повертає ідентифікатори граней.

Короткий огляд

SETOF bigint TopoGeo_AddPolygon(varchar atopology, geometry apoly, float8 tolerance);

Description

Додає полігон до існуючої топології та повертає набір ідентифікаторів граней, що його утворюють. Межа заданого полігону буде прив'язана до існуючих вузлів або ребер з урахуванням заданого допуску. Існуючі ребра та грані можуть бути розділені межею нового полігону.

[Примітка]

Оновлення статистики про топології, що завантажуються за допомогою цієї функції, залежить від виклику, див. maintaining statistics during topology editing and population.

Доступність: 2.0.0


Назва

TopoGeo_LoadGeometry — Завантажте геометрію в існуючу топологію, при необхідності вирівнюючи та розділяючи.

Короткий огляд

void TopoGeo_LoadGeometry(varchar atopology, geometry ageom, float8 tolerance);

Description

Завантажує геометрію в існуючу топологію. Задана геометрія буде прив'язана до існуючих вузлів або ребер в межах заданого допуску. Існуючі ребра та грані можуть бути розділені в результаті завантаження.

[Примітка]

Оновлення статистики про топології, що завантажуються за допомогою цієї функції, залежить від виклику, див. maintaining statistics during topology editing and population.

Доступність: 3.5.0

9.7. Редактори топології

Анотація

Цей розділ охоплює функції топології для додавання, переміщення, видалення та розділення ребер, граней та вузлів. Усі ці функції визначені стандартом ISO SQL/MM.

  • ST_AddIsoNode — Додає ізольований вузол до грані в топології та повертає ідентифікатор нового вузла. Якщо грань має нульове значення, вузол все одно створюється.
  • ST_AddIsoEdge — Додає ізольоване ребро, визначене геометрією alinestring, до топології, що з'єднує два існуючі ізольовані вузли anode та anothernode, і повертає ідентифікатор нового ребра.
  • ST_AddEdgeNewFaces — Додайте нову ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими.
  • ST_AddEdgeModFace — Додайте нову кромку і, якщо при цьому розділяється грань, змініть вихідну грань і додайте нову.
  • ST_RemEdgeNewFace — Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.
  • ST_RemEdgeModFace — Видаляє ребро, і якщо ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох.
  • ST_ChangeEdgeGeom — Змінює форму ребра, не впливаючи на топологічну структуру.
  • ST_ModEdgeSplit — Розділіть ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове.
  • ST_ModEdgeHeal — Виправляє двa ребра, видаляючи вузол, що їх з'єднує, змінюючи перше ребро та видаляючи друге ребро. Повертає ідентифікатор видаленого вузла.
  • ST_NewEdgeHeal — Відновлює два ребра, видаляючи вузол, що їх з'єднує, видаляючи обидва ребра та замінюючи їх ребром, напрямок якого збігається з напрямком першого наданого ребра.
  • ST_MoveIsoNode — Переміщує ізольований вузол у топології з однієї точки в іншу. Якщо нова геометрія apoint існує як вузол, виникає помилка. Повертає опис переміщення.
  • ST_NewEdgesSplit — Розділіть ребро, створивши новий вузол уздовж існуючого ребра, видаливши оригінальне ребро і замінивши його двома новими ребрами. Повертає ідентифікатор нового вузла, створеного для з'єднання нових ребер.
  • ST_RemoveIsoNode — Видаляє ізольований вузол і повертає опис дії. Якщо вузол не ізольований (є початком або кінцем ребра), то генерується виняток.
  • ST_RemoveIsoEdge — Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.

Назва

ST_AddIsoNode — Додає ізольований вузол до грані в топології та повертає ідентифікатор нового вузла. Якщо грань має нульове значення, вузол все одно створюється.

Короткий огляд

bigint ST_AddIsoNode(varchar atopology, bigint aface, geometry apoint);

Description

Додає ізольований вузол із точкою розташування apoint до існуючої грані з ідентифікатором грані aface до топології atopology і повертає ідентифікатор нового вузла.

Якщо система просторових координат (srid) геометрії точки не збігається з топологією, apoint не є геометрією точки, точка є нульовою або точка перетинає існуючу ребро (навіть на межі), то виникає виняток. Якщо точка вже існує як вузол, виникає виняток.

Якщо aface не дорівнює нулю, а apoint не знаходиться в межах грані, то генерується виняток.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM: Топо-мережеві процедури: X+1.3.1

Приклади


Назва

ST_AddIsoEdge — Додає ізольоване ребро, визначене геометрією alinestring, до топології, що з'єднує два існуючі ізольовані вузли anode та anothernode, і повертає ідентифікатор нового ребра.

Короткий огляд

bigint ST_AddIsoEdge(varchar atopology, bigint anode, bigint anothernode, geometry alinestring);

Description

Додає ізольоване ребро, визначене геометрією alinestring, до топології, що з'єднує два існуючі ізольовані вузли anode та anothernode, і повертає ідентифікатор нового ребра.

Якщо система просторових посилань (srid) геометрії alinestring не збігається з топологією, будь-який з вхідних аргументів має значення null, або вузли містяться в більш ніж одній грані, або вузли є початковими або кінцевими вузлами існуючої ребра, то генерується виняток.

Якщо alinestring не знаходиться в межах грані, до якої належать anode та anothernode, то генерується виняток.

Якщо anode та anothernode не є початковою та кінцевою точками alinestring, то генерується виняток.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3

Приклади

Див. також

ST_AddIsoNode, ST_IsSimple, ST_Within


Назва

ST_AddEdgeNewFaces — Додайте нову ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими.

Короткий огляд

bigint ST_AddEdgeNewFaces(varchar atopology, bigint anode, bigint anothernode, geometry acurve);

Description

Додайте нове ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими гранями. Повертає ідентифікатор новододаного ребра.

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Якщо будь-які аргументи мають нульове значення, вказані вузли невідомі (повинні вже існувати в таблиці node схеми топології) , acurve не є LINESTRING, anode та anothernode не є початковою та кінцевою точками acurve, тоді генерується помилка.

Якщо система просторових посилань (srid) геометрії acurve не збігається з топологією, виникає виняток.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.12

Приклади


Назва

ST_AddEdgeModFace — Додайте нову кромку і, якщо при цьому розділяється грань, змініть вихідну грань і додайте нову.

Короткий огляд

bigint ST_AddEdgeModFace(varchar atopology, bigint anode, bigint anothernode, geometry acurve);

Description

Додайте нове ребро і, якщо це призведе до розділення грані, змініть оригінальну грань і додайте нову.

[Примітка]

Якщо можливо, нова грань буде створена зліва від нового ребра. Це буде неможливо, якщо грань зліва повинна бути необмеженою.

Повертає ідентифікатор новододаного ребра.

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Якщо будь-які аргументи мають нульове значення, вказані вузли невідомі (повинні вже існувати в таблиці node схеми топології) , acurve не є LINESTRING, anode та anothernode не є початковою та кінцевою точками acurve, тоді генерується помилка.

Якщо система просторових посилань (srid) геометрії acurve не збігається з топологією, виникає виняток.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.13

Приклади


Назва

ST_RemEdgeNewFace — Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.

Короткий огляд

bigint ST_RemEdgeNewFace(varchar atopology, bigint anedge);

Description

Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.

Повертає ідентифікатор новоствореної грані або NULL, якщо нова грань не створена. Нова грань не створюється, якщо видалена ребро є висячою, ізольованою або обмеженою гранею всесвіту (що може призвести до затоплення всесвіту гранею з іншого боку).

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Відмовляється видаляти край, що бере участь у визначенні існуючої TopoGeometry. Відмовляється виправляти дві грані, якщо будь-яка TopoGeometry визначена тільки однією з них (а не іншою).

Якщо будь-які аргументи мають нульове значення, задана ребро невідома (повинна вже існувати в таблиці edge схеми топології), ім'я топології недійсне, то генерується помилка.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.14

Приклади


Назва

ST_RemEdgeModFace — Видаляє ребро, і якщо ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох.

Короткий огляд

bigint ST_RemEdgeModFace(varchar atopology, bigint anedge);

Description

Видаляє ребро, і якщо видалене ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох. Переважно зберігає грань праворуч, щоб забезпечити узгодженість з ST_AddEdgeModFace. Повертає ідентифікатор грані, яка зберігається.

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Відмовляється видаляти край, що бере участь у визначенні існуючої TopoGeometry. Відмовляється виправляти дві грані, якщо будь-яка TopoGeometry визначена тільки однією з них (а не іншою).

Якщо будь-які аргументи мають нульове значення, задана ребро невідома (повинна вже існувати в таблиці edge схеми топології), ім'я топології недійсне, то генерується помилка.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.15

Приклади


Назва

ST_ChangeEdgeGeom — Змінює форму ребра, не впливаючи на топологічну структуру.

Короткий огляд

text ST_ChangeEdgeGeom(varchar atopology, bigint anedge, geometry acurve);

Description

Змінює форму ребра, не впливаючи на топологічну структуру.

Якщо будь-які аргументи мають значення null, задана ребро не існує в таблиці edge схеми топології, acurve не є LINESTRING, або модифікація змінить базову топологію, то буде видано помилку.

Якщо система просторових посилань (srid) геометрії acurve не збігається з топологією, виникає виняток.

Якщо новий acurve не є простим, то виникає помилка.

Якщо переміщення ребра зі старого положення в нове призведе до зіткнення з перешкодою, буде видано помилку.

Доступність: 1.1.0

Покращено: у версії 2.0.0 додано забезпечення топологічної узгодженості

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі рутинних операцій X.3.6

Приклади

Code
SELECT topology.ST_ChangeEdgeGeom(
    'ma_topo',
    1,
        ST_GeomFromText(
            'LINESTRING(227591.9 893900.4,227622.6 893844.3,227641.6 893816.6,227704.5 893778.5)',
            26986)
);
Вивід растрових зображень
Edge 1 changed

Назва

ST_ModEdgeSplit — Розділіть ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове.

Короткий огляд

bigint ST_ModEdgeSplit(varchar atopology, bigint anedge, geometry apoint);

Description

Розділити ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове ребро. Відповідно оновлює всі існуючі з'єднані ребра та відносини. Повертає ідентифікатор новододаного вузла.

Доступність: 1.1

Змінено: 2.0 — у попередніх версіях це було неправильно названо ST_ModEdgesSplit

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.9

Приклади

Add an edge to split.

Code
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227592 893910,227600 893910)', 26986)) AS edgeid;
Вивід растрових зображень
3

Split the edge with a new node.

Code
SELECT topology.ST_ModEdgeSplit('ma_topo', 3, ST_SetSRID(ST_Point(227594, 893910), 26986)) AS node_id;
Вивід растрових зображень
7

Назва

ST_ModEdgeHeal — Виправляє двa ребра, видаляючи вузол, що їх з'єднує, змінюючи перше ребро та видаляючи друге ребро. Повертає ідентифікатор видаленого вузла.

Короткий огляд

bigint ST_ModEdgeHeal(varchar atopology, bigint anedge, bigint anotheredge);

Description

Виправляє два ребра, видаляючи вузол, що їх з'єднує, змінюючи перше ребро та видаляючи друге ребро. Повертає ідентифікатор видаленого вузла. Відповідно оновлює всі існуючі з'єднані ребра та відносини.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.9

Див. також

ST_ModEdgeSplit ST_NewEdgesSplit


Назва

ST_NewEdgeHeal — Відновлює два ребра, видаляючи вузол, що їх з'єднує, видаляючи обидва ребра та замінюючи їх ребром, напрямок якого збігається з напрямком першого наданого ребра.

Короткий огляд

bigint ST_NewEdgeHeal(varchar atopology, bigint anedge, bigint anotheredge);

Description

Виправляє дві ребра, видаляючи вузол, що їх з'єднує, видаляючи обидві ребра та замінюючи їх ребром, напрямок якого збігається з напрямком першого наданого ребра. Повертає ідентифікатор нового ребра, що замінює виправлені ребра. Відповідно оновлює всі існуючі з'єднані ребра та відносини.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.9


Назва

ST_MoveIsoNode — Переміщує ізольований вузол у топології з однієї точки в іншу. Якщо нова геометрія apoint існує як вузол, виникає помилка. Повертає опис переміщення.

Короткий огляд

text ST_MoveIsoNode(varchar atopology, bigint anode, geometry apoint);

Description

Переміщує ізольований вузол у топології з однієї точки в іншу. Якщо нова геометрія apoint існує як вузол, виникає помилка.

Якщо будь-які аргументи мають нульове значення, apoint не є точкою, існуючий вузол не є ізольованим (є початковою або кінцевою точкою існуючої ребра), нове розташування вузла перетинає існуючу ребро (навіть у кінцевих точках) або нове розташування знаходиться в іншій грані (починаючи з версії 3.2.0), то генерується виняток.

Якщо система просторових координат (srid) геометрії точки не збігається з топологією, генерується виняток.

Доступність: 2.0.0

Покращено: версія 3.2.0 гарантує, що вузол не можна перемістити на іншу грань

This method implements the SQL/MM specification. SQL-MM: Процедури Topo-Net: X.3.2

Приклади

Add an isolated node with no face.

Code
SELECT topology.ST_AddIsoNode('ma_topo', NULL, ST_GeomFromText('POINT(227579 893916)', 26986)) AS nodeid;
Вивід растрових зображень
7

Move the new node.

Code
SELECT topology.ST_MoveIsoNode('ma_topo', 7, ST_GeomFromText('POINT(227579.5 893916.5)', 26986)) AS descrip;
Вивід растрових зображень
Isolated Node 7 moved to location 227579.5,893916.5

Див. також

ST_AddIsoNode


Назва

ST_NewEdgesSplit — Розділіть ребро, створивши новий вузол уздовж існуючого ребра, видаливши оригінальне ребро і замінивши його двома новими ребрами. Повертає ідентифікатор нового вузла, створеного для з'єднання нових ребер.

Короткий огляд

bigint ST_NewEdgesSplit(varchar atopology, bigint anedge, geometry apoint);

Description

Розділити ребро з ідентифікатором anedge шляхом створення нового вузла з точкою розташування apoint вздовж поточного ребра, видалення оригінального ребра та заміни його двома новими ребрами. Повертає ідентифікатор нового вузла, створеного для з'єднання нових ребер. Відповідно оновлює всі існуючі з'єднані ребра та відносини.

Якщо система просторових посилань (srid) геометрії точки не збігається з топологією, apoint не є геометрією точки, точка є нульовою, точка вже існує як вузол, край не відповідає існуючому краю або точка не знаходиться в межах краю, то генерується виняток.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM: Процедури Topo-Net: X.3.8

Приклади

Add an edge to split.

Code
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575 893917,227592 893900)', 26986)) AS edgeid;
Вивід растрових зображень
2

Split the new edge.

Code
SELECT topology.ST_NewEdgesSplit('ma_topo', 2, ST_GeomFromText('POINT(227578.5 893913.5)', 26986)) AS newnodeid;
Вивід растрових зображень
6

Назва

ST_RemoveIsoNode — Видаляє ізольований вузол і повертає опис дії. Якщо вузол не ізольований (є початком або кінцем ребра), то генерується виняток.

Короткий огляд

text ST_RemoveIsoNode(varchar atopology, bigint anode);

Description

Видаляє ізольований вузол і повертає опис дії. Якщо вузол не ізольований (є початком або кінцем ребра), то генерується виняток.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X+1.3.3

Приклади

Remove an isolated node with no face.

Code
SELECT topology.ST_RemoveIsoNode('ma_topo', 7) AS result;
Вивід растрових зображень
Isolated node 7 removed

Див. також

ST_AddIsoNode


Назва

ST_RemoveIsoEdge — Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.

Короткий огляд

text ST_RemoveIsoEdge(varchar atopology, bigint anedge);

Description

Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X+1.3.3

Приклади

Remove an isolated edge with no face.

Code
SELECT topology.ST_RemoveIsoEdge('ma_topo', 7) AS result;
Вивід растрових зображень
Isolated edge 7 removed

Див. також

ST_AddIsoNode

9.8. Топологічні методи доступу

  • GetEdgeByPoint — Знаходить ідентифікатор ребра, яке перетинає задану точку.
  • GetFaceByPoint — Знаходить грань, що перетинає задану точку.
  • GetFaceContainingPoint — Знаходить обличчя, що містить точку.
  • GetNodeByPoint — Знаходить ідентифікатор вузла в точці.
  • GetTopologyID — Повертає ідентифікатор топології в таблиці topology.topology за назвою топології.
  • GetTopologySRID — Повертає SRID топології в таблиці topology.topology, задавши ім'я топології.
  • GetTopologyName — Повертає назву топології (схеми) за ідентифікатором топології.
  • ST_GetFaceEdges — Повертає набір впорядкованих ребер, що обмежують aface.
  • ST_GetFaceGeometry — Повертає багатокутник у заданій топології із зазначеним ідентифікатором грані.
  • GetRingEdges — Повертає впорядкований набір ідентифікаторів підписаних ребер, зустрітих при проходженні по заданій стороні ребра.
  • GetNodeEdges — Повертає впорядкований набір ребер, що прилягають до заданого вузла.
  • FindVertexSegmentPairsBelowDistance — Find pairs of topology vertex/segment that are closer than tolerated distance

Назва

GetEdgeByPoint — Знаходить ідентифікатор ребра, яке перетинає задану точку.

Короткий огляд

bigint GetEdgeByPoint(varchar atopology, geometry apoint, float8 tol1);

Description

Отримує ідентифікатор ребра, яке перетинає точку.

Функція повертає ціле число (id-edge) за заданою топологією, точкою POINT і допуском tolerance. Якщо tolerance = 0, то точка повинна перетинати край.

Якщо apoint не перетинає ребро, повертає 0 (нуль).

Якщо використання tolerance > 0 і поблизу точки є більше ніж одна грань, то виникає виняток.

[Примітка]

Якщо tolerance = 0, функція використовує ST_Intersects, в іншому випадку використовує ST_DWithin.

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

У цих прикладах використовуються ребра, які ми створили в AddEdge

Code
SELECT topology.GetEdgeByPoint('ma_topo', geom, 1) As with1mtol, topology.GetEdgeByPoint('ma_topo', geom, 0) As withnotol
FROM ST_GeomFromEWKT('SRID=26986;POINT(227622.6 893843)') As geom;
Вивід растрових зображень
with1mtol | withnotol
-----------+-----------
         2 |         0

This query errors because two or more edges are found.

Code
SELECT topology.GetEdgeByPoint('ma_topo', geom, 1) As nearnode
FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;
Вивід растрових зображень
ERROR:  Two or more edges found

Назва

GetFaceByPoint — Знаходить грань, що перетинає задану точку.

Короткий огляд

bigint GetFaceByPoint(varchar atopology, geometry apoint, float8 tol1);

Description

Знаходить грань, на яку вказує точка, з заданим допуском.

Функція ефективно шукатиме грань, що перетинає коло з центром у точці та радіусом, що відповідає допуску.

Якщо жодна поверхня не перетинає задане місце пошуку, повертається 0 (універсальна поверхня).

Якщо більше ніж одна грань перетинає місце запиту, генерується виняток.

Доступність: 2.0.0

Покращено: 3.2.0 більш ефективна реалізація та чіткіший контракт, припиняє роботу з недійсними топологіями.

Приклади

Code
SELECT topology.GetFaceByPoint('ma_topo', geom, 10) As with1mtol, topology.GetFaceByPoint('ma_topo', geom, 0) As withnotol
FROM ST_GeomFromEWKT('POINT(234604.6 899382.0)') As geom;
Вивід растрових зображень
with1mtol | withnotol
-----------+-----------
         1 |         0

This query errors because two or more faces are found.

Code
SELECT topology.GetFaceByPoint('ma_topo', geom, 1) As nearnode
FROM ST_GeomFromEWKT('POINT(227591.9 893900.4)') As geom;
Вивід растрових зображень
ERROR:  Two or more faces found

Назва

GetFaceContainingPoint — Знаходить обличчя, що містить точку.

Короткий огляд

bigint GetFaceContainingPoint(text atopology, geometry apoint);

Description

Повертає ідентифікатор грані, що містить точку.

Якщо точка потрапляє на межу грані, генерується виняток.

[Примітка]

Функція базується на дійсній топології, використовуючи зв'язки між ребрами та маркування граней.

Доступність: 3.2.0

Див. також

ST_GetFaceGeometry


Назва

GetNodeByPoint — Знаходить ідентифікатор вузла в точці.

Короткий огляд

bigint GetNodeByPoint(varchar atopology, geometry apoint, float8 tol1);

Description

Отримує ідентифікатор вузла в точці розташування.

Функція повертає ціле число (id-node) за заданою топологією, POINT і допуском. Якщо допуск = 0, це означає точне перетин, в іншому випадку витягує вузол з інтервалу.

Якщо apoint не перетинає вузол, повертає 0 (нуль).

Якщо використання tolerance > 0 і поблизу точки знаходиться більше одного вузла, то виникає виняток.

[Примітка]

Якщо tolerance = 0, функція використовує ST_Intersects, в іншому випадку використовує ST_DWithin.

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

У цих прикладах використовуються ребра, які ми створили в AddEdge

Code
SELECT topology.GetNodeByPoint('ma_topo', geom, 1) As nearnode
FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;
Вивід растрових зображень
2

This query errors because the tolerance matches two or more nodes.

Code
SELECT topology.GetNodeByPoint('ma_topo', geom, 1000) As too_much_tolerance
FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;
Вивід растрових зображень
ERROR:  Two or more nodes found

Назва

GetTopologyID — Повертає ідентифікатор топології в таблиці topology.topology за назвою топології.

Короткий огляд

integer GetTopologyID(varchar toponame);

Description

Повертає ідентифікатор топології в таблиці topology.topology за назвою топології.

Доступність: 1.1

Приклади

Code
SELECT topology.GetTopologyID('ma_topo') AS topo_id;
Вивід растрових зображень
1

Назва

GetTopologySRID — Повертає SRID топології в таблиці topology.topology, задавши ім'я топології.

Короткий огляд

integer GetTopologyID(varchar toponame);

Description

Повертає ідентифікатор просторового посилання топології в таблиці topology.topology за назвою топології.

Доступність: 2.0.0

Приклади

Code
SELECT topology.GetTopologySRID('ma_topo') AS srid;
Вивід растрових зображень
4326

Назва

GetTopologyName — Повертає назву топології (схеми) за ідентифікатором топології.

Короткий огляд

varchar GetTopologyName(integer topology_id);

Description

Повертає ім'я топології (схему) з таблиці topology.topology, задавши ідентифікатор топології.

Доступність: 1.1

Приклади

Code
SELECT topology.GetTopologyName(1) AS topo_name;
Вивід растрових зображень
ma_topo

Назва

ST_GetFaceEdges — Повертає набір впорядкованих ребер, що обмежують aface.

Короткий огляд

getfaceedges_returntype ST_GetFaceEdges(varchar atopology, bigint aface);

Description

Повертає набір впорядкованих ребер, що обмежують aface. Кожен вихідний елемент складається з послідовності та edgeid. Номери послідовності починаються з значення 1.

Перелік кожного краю кільця починається з краю з найменшим ідентифікатором. Порядок країв відповідає правилу лівої руки (межа знаходиться ліворуч від кожного спрямованого краю).

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo та Topo-Net 3: Деталі процедури: X.3.5

Приклади

This query returns the edges that bound face 1.

Code
SELECT (topology.ST_GetFaceEdges('tt', 1)).*;
Вивід растрових зображень
sequence | edge
----------+------
        1 |   -4
        2 |    5
        3 |    7
        4 |   -6
        5 |    1
        6 |    2
        7 |    3

This query returns the sequence, edge identifier, and geometry of the edges that bound face 1. Use ST_GetFaceGeometry if only the geometry and sequence are needed.

Code
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt', 1) As t(seq, edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

Назва

ST_GetFaceGeometry — Повертає багатокутник у заданій топології із зазначеним ідентифікатором грані.

Короткий огляд

geometry ST_GetFaceGeometry(varchar atopology, bigint aface);

Description

Повертає багатокутник у заданій топології із зазначеним ідентифікатором грані. Будує багатокутник із ребер, що утворюють грань.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo та Topo-Net 3: Деталі процедури: X.3.16

Приклади

This query returns the WKT of the polygon added with AddFace.

Code
SELECT topology.ST_GetFaceGeometry('ma_topo', 1) AS facegeomwkt;
Вивід растрових зображень
POLYGON((234776.9 899563.7,234896.5 899456.7,234914 899436.4,234946.6 899356.9,
234872.5 899328.7,234891 899285.4,234992.5 899145,234890.6 899069,
234755.2 899255.4,234612.7 899379.4,234776.9 899563.7))
Figure
Geometry figure for visual-st-getfacegeometry-01

Див. також

AddFace


Назва

GetRingEdges — Повертає впорядкований набір ідентифікаторів підписаних ребер, зустрітих при проходженні по заданій стороні ребра.

Короткий огляд

getfaceedges_returntype GetRingEdges(varchar atopology, bigint aring, integer max_edges=null);

Description

Повертає впорядкований набір ідентифікаторів підписаних ребер, зустрінутих під час проходження по заданій стороні ребра. Кожен вихідний елемент складається з послідовності та ідентифікатора підписаного ребра. Номери послідовності починаються з значення 1.

Якщо ви передаєте позитивний ідентифікатор ребра, проходження починається з лівого боку відповідного ребра і слідує за напрямком ребра. Якщо ви передаєте негативний ідентифікатор ребра, проходження починається з правого боку ребра і йде назад.

Якщо max_edges не дорівнює нулю, функція повертає не більше цих записів. Це є параметром безпеки при роботі з потенційно недійсними топологіями.

[Примітка]

Ця функція використовує метадані зв'язку крайових кілець.

Доступність: 2.0.0

Див. також

ST_GetFaceEdges, GetNodeEdges


Назва

GetNodeEdges — Повертає впорядкований набір ребер, що прилягають до заданого вузла.

Короткий огляд

getfaceedges_returntype GetNodeEdges(varchar atopology, bigint anode);

Description

Повертає впорядкований набір ребер, що прилягають до заданого вузла. Кожен вихідний елемент складається з послідовності та ідентифікатора ребра зі знаком. Номери послідовності починаються з 1. Позитивне ребро починається в заданому вузлі. Негативне ребро закінчується в заданому вузлі. Замкнуті ребра з'являються двічі (з обома знаками). Порядок визначається за годинниковою стрілкою, починаючи з півночі.

[Примітка]

Ця функція обчислює порядок, а не виводить його з метаданих, і тому може використовуватися для побудови зв'язків між кільцями ребер.

Доступність: 2.0


Назва

FindVertexSegmentPairsBelowDistance — Find pairs of topology vertex/segment that are closer than tolerated distance

Короткий огляд

setof record FindVertexSegmentPairsBelowDistance(varchar atopology, float8 tolerance);

Description

Returns a relation in which each tuple is a pair of vertex/segment where the vertex is NOT an endpoint of the segment but the distance between them is below the given tolerance.

Availability: 3.7

Див. також

ValidateTopologyPrecision

9.9. Обробка топології

Анотація

Цей розділ описує функції для обробки топологій нестандартними способами.

  • Polygonize — Знаходить і реєструє всі грані, визначені краями топології.
  • AddNode — Додає точковий вузол до таблиці вузлів у вказаній схемі топології та повертає ідентифікатор нового вузла. Якщо точка вже існує як вузол, повертається існуючий ідентифікатор вузла.
  • AddEdge — Додає лінійний край до таблиці країв ребер та пов'язані початкові та кінцеві точки до таблиці вузлів точок заданої топологічної схеми, використовуючи задану геометрію лінійного ребра, та повертає ідентифікатор нового (або існуючого) ребра.
  • AddFace — Реєструє примітив грані в топології та отримує його ідентифікатор.
  • ST_Simplify — Повертає "спрощену" версію геометрії заданої TopoGeometry за допомогою алгоритму Дугласа-Пеукера.
  • RemoveUnusedPrimitives — Видаляє примітивні елементи топології, які не потрібні для визначення існуючих об'єктів TopoGeometry.

Назва

Polygonize — Знаходить і реєструє всі грані, визначені краями топології.

Короткий огляд

text Polygonize(varchar toponame);

Description

Реєструє всі грані, які можна побудувати з примітивів ребер.

Припускається, що цільова топологія не містить самоперетинаючих ребер.

[Примітка]

Вже відомі грані розпізнаються, тому можна безпечно викликати Polygonize кілька разів для однієї топології.

[Примітка]

Ця функція не використовує і не встановлює поля next_left_edge та next_right_edge таблиці ребер.

Доступність: 2.0.0

Див. також

AddFace, ST_Polygonize


Назва

AddNode — Додає точковий вузол до таблиці вузлів у вказаній схемі топології та повертає ідентифікатор нового вузла. Якщо точка вже існує як вузол, повертається існуючий ідентифікатор вузла.

Короткий огляд

bigint AddNode(varchar toponame, geometry apoint, boolean allowEdgeSplitting=false, boolean computeContainingFace=false);

Description

Додає точковий вузол до таблиці вузлів у вказаній схемі топології. Функція AddEdge автоматично додає початкову та кінцеву точки ребра при виклику, тому немає необхідності явно додавати вузли ребра.

Якщо виявлено будь-яке ребро, що перетинає вузол, то, залежно від значення параметра allowEdgeSplitting, або генерується виняток, або ребро розділяється.

Якщо computeContainingFace має значення true, для новододаного вузла буде обчислено правильну грань, що його містить.

[Примітка]

Якщо геометрія apoint вже існує як вузол, вузол не додається, а повертається існуючий nodeid.

Доступність: 2.0.0

Приклади

Code
SELECT topology.AddNode('ma_topo', ST_GeomFromText('POINT(227641.6 893816.5)', 26986)) AS nodeid;
Вивід растрових зображень
4

Див. також

AddEdge, CreateTopology


Назва

AddEdge — Додає лінійний край до таблиці країв ребер та пов'язані початкові та кінцеві точки до таблиці вузлів точок заданої топологічної схеми, використовуючи задану геометрію лінійного ребра, та повертає ідентифікатор нового (або існуючого) ребра.

Короткий огляд

bigint AddEdge(varchar toponame, geometry aline);

Description

Додає ребро до таблиці ребер і пов'язані вузли до таблиці вузлів заданої схеми toponame з використанням заданої геометрії лінійного рядка та повертає edgeid нового або існуючого запису. Новододане ребро має обох боків "універсум" і пов'язане саме з собою.

[Примітка]

Якщо геометрія aline перетинає, перекриває, містить або міститься в існуючій лінії, то виникає помилка і ребро не додається.

[Примітка]

Геометрія aline повинна мати той самий srid, що визначений для топології, інакше буде видано помилку недійсного просторового посилання sys.

Виконується модулем GEOS.

[Застереження]

AddEdge застаріло з версії 3.5.0. Замість цього використовуйте TopoGeo_AddLineString.

Доступність: 2.0.0

Приклади

Code
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575.8 893917.2,227591.9 893900.4)', 26986)) AS edgeid;
Вивід растрових зображень
1
Code
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.9 893900.4,227622.6 893844.2,227641.6 893816.5,227704.5 893778.5)', 26986)) AS edgeid;
Вивід растрових зображень
2

This query errors because the edge intersects an existing edge away from the endpoints.

Code
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.2 893900,227591.9 893900.4,227704.5 893778.5)', 26986)) AS edgeid;
Вивід растрових зображень
ERROR:  Edge intersects (not on endpoints) with existing edge 1

Назва

AddFace — Реєструє примітив грані в топології та отримує його ідентифікатор.

Короткий огляд

bigint AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

Description

Реєструє примітив грані в топології та отримує його ідентифікатор.

Для новододаної грані краї, що утворюють її межі, та краї, що містяться в грані, будуть оновлені, щоб мати правильні значення в полях left_face та right_face. Ізольовані вузли, що містяться в грані, також будуть оновлені, щоб мати правильне значення поля containing_face.

[Примітка]

Ця функція не використовує і не встановлює поля next_left_edge та next_right_edge таблиці ребер.

Припускається, що топологія цілі є правильною (не містить самоперетинаючих ребер). Виникає виняток, якщо: Межа багатокутника не повністю визначена існуючими ребрами або багатокутник перетинає існуючу грань.

Якщо геометрія apolygon вже існує як грань, то: якщо force_new має значення false (за замовчуванням), повертається ідентифікатор існуючої грані; якщо force_new має значення true, новому зареєстрованому грані присвоюється новий ідентифікатор.

[Примітка]

Коли виконується нова реєстрація існуючої грані (force_new=true), не буде виконано жодних дій для вирішення висячих посилань на існуючу грань у таблицях ребер, вузлів та відносин, а також не буде оновлено поле MBR існуючого запису грані. Це має зробити викликаючий.

[Примітка]

Геометрія apolygon повинна мати той самий srid, що визначено для топології, інакше буде видано помилку недійсного просторового посилання sys.

Доступність: 2.0.0

Приклади

First add the edges using generate_series as an iterator. This query only works for polygons with fewer than 10000 points because of the maximum value in generate_series.

Code
SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid
FROM (
  SELECT ST_NPoints(geom) AS npt, geom
  FROM (
    SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
                234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
                234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) )  As geom
  ) AS geoms
) AS facen
CROSS JOIN generate_series(1,10000) AS i
WHERE i < npt;
Вивід растрових зображень
3
4
5
6
7
8
9
10
11
12

Then add the face.

Code
SELECT topology.AddFace(
    'ma_topo',
    ST_GeomFromText(
    'POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
    234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
    234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))',
    26986) ) As faceid;
Вивід растрових зображень
1

Назва

ST_Simplify — Повертає "спрощену" версію геометрії заданої TopoGeometry за допомогою алгоритму Дугласа-Пеукера.

Короткий огляд

geometry ST_Simplify(topogeometry tg, float8 tolerance);

Description

Повертає "спрощену" геометрію заданої TopoGeometry, використовуючи алгоритм Дугласа-Пеукера для кожного компонента ребра.

[Примітка]

Повернена геометрія може бути неспрощеною або недійсна.

Розділення граней компонентів може допомогти зберегти простоту/дійсність.

Виконується модулем GEOS.

Доступність: 2.1.0

Див. також

Геометрія ST_Simplify, ST_IsSimple, ST_IsValid, ST_ModEdgeSplit


Назва

RemoveUnusedPrimitives — Видаляє примітивні елементи топології, які не потрібні для визначення існуючих об'єктів TopoGeometry.

Короткий огляд

bigint RemoveUnusedPrimitives(text topology_name, geometry bbox);

Description

Знаходить всі примітиви (вузли, ребра, грані), які не є строго необхідними для представлення існуючих об'єктів TopoGeometry, і видаляє їх, зберігаючи топологічну валідність (зв'язки ребер, маркування граней) і зайнятість простору TopoGeometry.

Нові примітивні ідентифікатори не створюються, а існуючі примітиви розширюються, щоб включити об'єднані грані (після видалення ребер) або відновлені ребра (після видалення вузлів).

Доступність: 3.3.0

Див. також

ST_ModEdgeHeal, ST_RemEdgeModFace

9.10. Конструктори топогеометрії

Анотація

Цей розділ присвячений функціям топології для створення нових топогеометрій.

  • CreateTopoGeom — Створює новий об'єкт топографічної геометрії з масиву топографічних елементів - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection
  • toTopoGeom — Перетворює просту геометрію в топологічну геометрію.
  • TopoElementArray_Agg — Повертає topoelementarray для набору масивів element_id, type (topoelements).
  • TopoElement — Перетворює топогеометрію в топоелемент.

Назва

CreateTopoGeom — Створює новий об'єкт топографічної геометрії з масиву топографічних елементів - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection

Короткий огляд

topogeometry CreateTopoGeom(varchar toponame, integer tg_type, integer layer_id, topoelementarray tg_objs, bigint tg_id);

topogeometry CreateTopoGeom(varchar toponame, integer tg_type, integer layer_id);

Description

Створює об'єкт топогеометрії для шару, позначеного layer_id, і реєструє його в таблиці відносин у схемі toponame.

tg_type є цілим числом: 1:[multi]point (точкова), 2:[multi]line (лінійна), 3:[multi]poly (площа), 4:колекція. layer_id є ідентифікатором шару в таблиці topology.layer.

пунктуальні шари утворюються з набору вузлів, лінійні шари утворюються з набору ребер, площинні шари утворюються з набору граней, а колекції можуть утворюватися з суміші вузлів, ребер і граней.

Пропуск масиву компонентів призводить до створення порожнього об'єкта TopoGeometry.

Доступність: 1.1

Приклади

Form from existing edges.

Створіть топогеометрію в схемі ri_topo для шару 2 (наш ri_roads) типу (2) LINE для першого ребра (ми завантажили в ST_CreateTopoGeo).

Code
INSERT INTO ri.ri_roads(road_name, topo)
VALUES (
    'Unknown',
    topology.CreateTopoGeom(
        'ri_topo',
        2,
        2,
        '{{1,2}}'::topology.topoelementarray
    )
);

Convert an areal geometry to best guess topogeometry.

Припустимо, ми маємо геометрії, які повинні бути сформовані з набору граней. Наприклад, ми маємо таблицю груп блоків і хочемо знати топологічну геометрію кожної групи блоків. Якщо наші дані були б ідеально вирівняні, ми могли б зробити так:

Create the topogeometry column.

Code
SELECT topology.AddTopoGeometryColumn(
'topo_boston',
'boston', 'blockgroups', 'topo', 'POLYGON');

Вивід растрових зображень
1

Update the column assuming everything is perfectly aligned with the edges.

Code
UPDATE boston.blockgroups AS bg
SET topo = topology.CreateTopoGeom(
    'topo_boston',
    3,
    1,
    foo.bfaces
)
FROM (
    SELECT
        b.gid,
        topology.TopoElementArray_Agg(ARRAY[f.face_id, 3]) AS bfaces
    FROM boston.blockgroups AS b
    INNER JOIN topo_boston.face AS f
        ON b.geom && f.mbr
    WHERE ST_Covers(
        b.geom,
        topology.ST_GetFaceGeometry('topo_boston', f.face_id)
    )
    GROUP BY b.gid
) AS foo
WHERE foo.gid = bg.gid;

The world is rarely perfect, so this version allows some error. It counts a face if 50 percent of it falls within the expected block group boundary.

Code
WITH candidate_faces AS (
    SELECT
        b.gid,
        b.geom AS block_geom,
        f.face_id,
        topology.ST_GetFaceGeometry('topo_boston', f.face_id) AS face_geom
    FROM boston.blockgroups AS b
    INNER JOIN topo_boston.face AS f
        ON b.geom && f.mbr
),
block_faces AS (
    SELECT
        gid,
        topology.TopoElementArray_Agg(ARRAY[face_id, 3]) AS bfaces
    FROM candidate_faces
    WHERE ST_Covers(block_geom, face_geom)
        OR (
            ST_Intersects(block_geom, face_geom)
            AND ST_Area(ST_Intersection(block_geom, face_geom))
                
> ST_Area(face_geom) * 0.5
        )
    GROUP BY gid
)
UPDATE boston.blockgroups AS bg
SET topo = topology.CreateTopoGeom(
    'topo_boston',
    3,
    1,
    block_faces.bfaces
)
FROM block_faces
WHERE block_faces.gid = bg.gid;

To convert the topogeometry back to a denormalized geometry aligned with faces and edges, cast the topogeometry to a geometry. The resulting geometries are aligned with the TIGER street centerlines.

Code
UPDATE boston.blockgroups SET new_geom = topo::geometry;

Назва

toTopoGeom — Перетворює просту геометрію в топологічну геометрію.

Короткий огляд

topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance=-1);

topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance=-1);

Description

Перетворює просту геометрію в TopoGeometry.

Топологічні примітиви, необхідні для представлення вхідної геометрії, будуть додані до базової топології, можливо з розділенням існуючих, і будуть пов'язані з вихідною TopoGeometry в таблиці relation.

Існуючі об'єкти TopoGeometry (за можливим винятком topogeom, якщо вказано) збережуть свої форми.

Коли вказано tolerance, воно буде використовуватися для прив'язки вхідної геометрії до існуючих примітивів. Спеціальне значення -1 (за замовчуванням) означає використання точності топології як допуску.

У першій формі буде створено нову топогеометрію для заданого шару (layer_id) заданої топології (toponame).

У другій формі примітиви, отримані в результаті перетворення, будуть додані до існуючої TopoGeometry (topogeom), можливо, додаючи простір до її остаточної форми. Щоб нова форма повністю замінила стару, див. clearTopoGeom.

Доступність: 2.0

Покращено: у версії 2.1.0 додано версію, що використовує існуючу TopoGeometry.

Змінено: у версії 3.7.0 змінено значення толерантності 0, яке тепер означає 0 і -1 (нове значення за замовчуванням), щоб вимагати використання точності топології.

Приклади

Це повністю автономний робочий процес

Create the topology without allowing any tolerance.

Code
SELECT topology.CreateTopology('topo_boston_test', 2249);

Create a new table.

Code
CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));

Add a topogeometry column to the new table.

Code
SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') AS new_layer_id;
Вивід растрових зображень
1

Use the new layer identifier to populate the topogeometry column.

Code
INSERT INTO nei_topo(nei, topo)
SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1)
FROM neighborhoods
WHERE gid BETWEEN 1 and 15;

Verify what happened.

Code
SELECT * FROM
    topology.TopologySummary('topo_boston_test');
Вивід растрових зображень
Topology topo_boston_test (5), SRID 2249, precision 0
61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers
Layer 1, type Polygonal (3), 15 topogeoms
 Deploy: public.nei_topo.topo

Shrink all TopoGeometry polygons by 10 meters.

Code
UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);
        

Find faces that are left without any TopoGeometry reference after the shrink operation.

Code
SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id)
  FROM topo_boston_test.face f
  WHERE f.face_id 
> 0
  AND NOT EXISTS (
    SELECT * FROM topo_boston_test.relation
    WHERE layer_id = 1 AND element_id = f.face_id
  );
        

Назва

TopoElementArray_Agg — Повертає topoelementarray для набору масивів element_id, type (topoelements).

Короткий огляд

topoelementarray TopoElementArray_Agg(topoelement set tefield);

Description

Використовується для створення TopoElementArray з набору TopoElement.

Доступність: 2.0.0

Приклади

Code
SELECT topology.TopoElementArray_Agg(ARRAY[e, t] ORDER BY e, t) As tea
FROM generate_series(1, 3) As e CROSS JOIN generate_series(1, 4) As t;
Вивід растрових зображень
{{1,1},{1,2},{1,3},{1,4},{2,1},{2,2},{2,3},{2,4},{3,1},{3,2},{3,3},{3,4}}

Див. також

TopoElement, TopoElementArray


Назва

TopoElement — Перетворює топогеометрію в топоелемент.

Короткий огляд

topoelement TopoElement(topogeometry topo);

Description

Перетворює TopoGeometry на TopoElement.

Доступність: 3.4.0

Приклади

Це повністю автономний робочий процес

Return the TopoElement representation of each topogeometry.

Code
SELECT TopoElement(topo)
FROM neighborhoods;

Use a cast to aggregate topogeometries into a TopoElementArray.

Code
SELECT topology.TopoElementArray_Agg(topo::topoelement)
FROM neighborhoods
GROUP BY city;

9.11. Редактори топогеометрії

Анотація

Цей розділ охоплює функції топології для редагування існуючих топогеометрій.

  • clearTopoGeom — Очищає вміст геометрії топографії.
  • TopoGeom_addElement — Додає елемент до визначення TopoGeometry.
  • TopoGeom_remElement — Видаляє елемент з визначення TopoGeometry.
  • TopoGeom_addTopoGeom — Додає елемент TopoGeometry до визначення іншого TopoGeometry.
  • toTopoGeom — Додає геометричну фігуру до існуючої топографічної геометрії.

Назва

clearTopoGeom — Очищає вміст геометрії топографії.

Короткий огляд

topogeometry clearTopoGeom(topogeometry topogeom);

Description

Очищає вміст TopoGeometry, перетворюючи його на порожній. Найчастіше використовується разом з toTopoGeom для заміни форми існуючих об'єктів та будь-яких залежних об'єктів на вищих ієрархічних рівнях.

Доступність: 2.1

Приклади

Shrink all TopoGeometry polygons by 10 meters.

Code
UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);

Див. також

toTopoGeom


Назва

TopoGeom_addElement — Додає елемент до визначення TopoGeometry.

Короткий огляд

topogeometry TopoGeom_addElement(topogeometry tg, topoelement el);

Description

Додає TopoElement до визначення об'єкта TopoGeometry. Не видає помилку, якщо елемент вже є частиною визначення.

Доступність: 2.3

Приклади

Add edge 5 to TopoGeometry tg.

Code
UPDATE mylayer SET tg = TopoGeom_addElement(tg, '{5,2}');

Назва

TopoGeom_remElement — Видаляє елемент з визначення TopoGeometry.

Короткий огляд

topogeometry TopoGeom_remElement(topogeometry tg, topoelement el);

Description

Видаляє TopoElement з визначення об'єкта TopoGeometry.

Доступність: 2.3

Приклади

Remove face 43 from TopoGeometry tg.

Code
UPDATE mylayer SET tg = TopoGeom_remElement(tg, '{43,3}');

Назва

TopoGeom_addTopoGeom — Додає елемент TopoGeometry до визначення іншого TopoGeometry.

Короткий огляд

topogeometry TopoGeom_addTopoGeom(topogeometry tgt, topogeometry src);

Description

Додає елементи TopoGeometry до визначення іншого TopoGeometry, можливо змінюючи його кешований тип (атрибут type) на колекцію, якщо це необхідно для збереження всіх елементів в об'єкті-джерелі.

Два об'єкти TopoGeometry повинні бути визначені відповідно до *однієї і тієї ж* топології, а якщо вони визначені ієрархічно, то повинні складатися з елементів одного і того ж дочірнього шару.

Доступність: 3.2

Приклади

Set an overall TopoGeometry value to be composed of all elements from specific TopoGeometry values.

Code
UPDATE mylayer SET tg_overall = TopoGeom_addTopoGeom(
    TopoGeom_addTopoGeom(
        clearTopoGeom(tg_overall),
        tg_specific1
    ),
    tg_specific2
);
                

Назва

toTopoGeom — Додає геометричну фігуру до існуючої топографічної геометрії.

Description

Див. toTopoGeom.

9.12. Доступ до топогеометрії

  • GetTopoGeomElementArray — Повертає topoelementarray (масив топоелементів), що містить топологічні елементи та тип заданої TopoGeometry (примітивні елементи).
  • GetTopoGeomElements — Повертає набір об'єктів topoelement, що містять топологічні element_id,element_type заданої TopoGeometry (примітивні елементи).
  • ST_SRID — Повертає ідентифікатор просторової прив'язки для топогеометрії.

Назва

GetTopoGeomElementArray — Повертає topoelementarray (масив топоелементів), що містить топологічні елементи та тип заданої TopoGeometry (примітивні елементи).

Короткий огляд

topoelementarray GetTopoGeomElementArray(varchar toponame, integer layer_id, bigint tg_id);

topoelementarray GetTopoGeomElementArray(topogeometry tg);

Description

Повертає TopoElementArray, що містить топологічні елементи та тип заданої TopoGeometry (примітивні елементи). Це схоже на GetTopoGeomElements, за винятком того, що повертає елементи у вигляді масиву, а не набору даних.

tg_id — ідентифікатор топогеометрії об'єкта топогеометрії в топології в шарі, позначеному layer_id в таблиці topology.layer.

Доступність: 1.1

Приклади


Назва

GetTopoGeomElements — Повертає набір об'єктів topoelement, що містять топологічні element_id,element_type заданої TopoGeometry (примітивні елементи).

Короткий огляд

setof topoelement GetTopoGeomElements(varchar toponame, integer layer_id, bigint tg_id);

setof topoelement GetTopoGeomElements(topogeometry tg);

Description

Повертає набір element_id,element_type (topoelements), що відповідає елементам примітивної топології TopoElement (1: вузли, 2: ребра, 3: грані), з яких складається заданий об'єкт топогеометрії в схемі toponame.

tg_id — ідентифікатор топогеометрії об'єкта топогеометрії в топології в шарі, позначеному layer_id в таблиці topology.layer.

Доступність: 2.0.0

Приклади


Назва

ST_SRID — Повертає ідентифікатор просторової прив'язки для топогеометрії.

Короткий огляд

integer ST_SRID(topogeometry tg);

Description

Returns the spatial reference identifier of the topology containing the TopoGeometry.

The identifier is recorded for the topology when it is created and refers to an entry in Розділ 4.5, «Spatial Reference Systems».

Доступність: 3.2.0

Приклади

Return the SRID of a TopoGeometry stored in the ri_topo topology.

Code
SELECT topology.ST_SRID(topo) AS srid
FROM ri.roads
WHERE road_name = 'Unknown';
Вивід растрових зображень
srid
------
 3438

9.13. Вихідні дані TopoGeometry

  • AsGML — Повертає GML-представлення топогеометрії.
  • AsTopoJSON — Повертає представлення топогеометрії у форматі TopoJSON.

Назва

AsGML — Повертає GML-представлення топогеометрії.

Короткий огляд

text AsGML(topogeometry tg);

text AsGML(topogeometry tg, text nsprefix_in);

text AsGML(topogeometry tg, regclass visitedTable);

text AsGML(topogeometry tg, regclass visitedTable, text nsprefix);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options, regclass visitedTable);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options, regclass visitedTable, text idprefix);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options, regclass visitedTable, text idprefix, int gmlversion);

Description

Повертає GML-представлення топогеометрії у форматі GML3. Якщо не вказано nsprefix_in, використовується gml. Передайте порожній рядок для nsprefix, щоб отримати некваліфікований простір імен. Параметри точності (за замовчуванням: 15) та опції (за замовчуванням 1), якщо вони вказані, передаються без змін до базового виклику ST_AsGML.

Параметр visitedTable, якщо він вказаний, використовується для відстеження відвіданих елементів Node та Edge, щоб використовувати перехресні посилання (xlink:xref) замість дублювання визначень. Таблиця повинна мати (принаймні) два цілочисельні поля: 'element_type' та 'element_id'. Користувач, який викликає функцію, повинен мати права на читання та запис у вказаній таблиці. Для найкращої продуктивності слід визначити індекс для element_type та element_id у такому порядку. Такий індекс буде створено автоматично шляхом додавання унікального обмеження до полів. Приклад:

Code
CREATE TABLE visited (
  element_type integer, element_id integer,
  unique(element_type, element_id)
);

Параметр idprefix, якщо вказано, буде додано перед ідентифікаторами тегів Edge та Node.

Параметр gmlver, якщо вказано, буде передано до базового ST_AsGML. За замовчуванням встановлено значення 3.

Доступність: 2.0.0

Приклади

Тут використовується геометрія топографії, яку ми створили в CreateTopoGeom

Code
SELECT topology.AsGML(topo) As rdgml
  FROM ri.roads
  WHERE road_name = 'Unknown';
Вивід растрових зображень
<gml:TopoCurve>
    <gml:directedEdge>
        <gml:Edge gml:id="E1">
            <gml:directedNode orientation="-">
                <gml:Node gml:id="N1"/>
            </gml:directedNode>
            <gml:directedNode
></gml:directedNode>
            <gml:curveProperty>
                <gml:Curve srsName="urn:ogc:def:crs:EPSG::3438">
                    <gml:segments>
                        <gml:LineStringSegment>
                            <gml:posList srsDimension="2"
>384744 236928 384750 236923 384769 236911 384799 236895 384811 236890
                            384833 236884 384844 236882 384866 236881 384879 236883 384954 236898 385087 236932 385117 236938
                            385167 236938 385203 236941 385224 236946 385233 236950 385241 236956 385254 236971
                            385260 236979 385268 236999 385273 237018 385273 237037 385271 237047 385267 237057 385225 237125
                            385210 237144 385192 237161 385167 237192 385162 237202 385159 237214 385159 237227 385162 237241
                            385166 237256 385196 237324 385209 237345 385234 237375 385237 237383 385238 237399 385236 237407
                            385227 237419 385213 237430 385193 237439 385174 237451 385170 237455 385169 237460 385171 237475
                            385181 237503 385190 237521 385200 237533 385206 237538 385213 237541 385221 237542 385235 237540 385242 237541
                            385249 237544 385260 237555 385270 237570 385289 237584 385292 237589 385291 237596 385284 237630</gml:posList>
                        </gml:LineStringSegment>
                    </gml:segments>
                </gml:Curve>
            </gml:curveProperty>
        </gml:Edge>
    </gml:directedEdge>
</gml:TopoCurve>

Те саме завдання, що й попереднє, але без простору імен

Code
SELECT topology.AsGML(topo,'') As rdgml
  FROM ri.roads
  WHERE road_name = 'Unknown';
Вивід растрових зображень
<TopoCurve>
    <directedEdge>
        <Edge id="E1">
            <directedNode orientation="-">
                <Node id="N1"/>
            </directedNode>
            <directedNode
></directedNode>
            <curveProperty>
                <Curve srsName="urn:ogc:def:crs:EPSG::3438">
                    <segments>
                        <LineStringSegment>
                            <posList srsDimension="2"
>384744 236928 384750 236923 384769 236911 384799 236895 384811 236890
                            384833 236884 384844 236882 384866 236881 384879 236883 384954 236898 385087 236932 385117 236938
                            385167 236938 385203 236941 385224 236946 385233 236950 385241 236956 385254 236971
                            385260 236979 385268 236999 385273 237018 385273 237037 385271 237047 385267 237057 385225 237125
                            385210 237144 385192 237161 385167 237192 385162 237202 385159 237214 385159 237227 385162 237241
                            385166 237256 385196 237324 385209 237345 385234 237375 385237 237383 385238 237399 385236 237407
                            385227 237419 385213 237430 385193 237439 385174 237451 385170 237455 385169 237460 385171 237475
                            385181 237503 385190 237521 385200 237533 385206 237538 385213 237541 385221 237542 385235 237540 385242 237541
                            385249 237544 385260 237555 385270 237570 385289 237584 385292 237589 385291 237596 385284 237630</posList>
                         </LineStringSegment>
                    </segments>
                </Curve>
            </curveProperty>
        </Edge>
    </directedEdge>
</TopoCurve>

Див. також

CreateTopoGeom, ST_CreateTopoGeo


Назва

AsTopoJSON — Повертає представлення топогеометрії у форматі TopoJSON.

Короткий огляд

text AsTopoJSON(topogeometry tg, regclass edgeMapTable);

Description

Повертає представлення топогеометрії у форматі TopoJSON. Якщо edgeMapTable не є нульовим, воно буде використовуватися як відображення ідентифікаторів ребер на індекси дуг для пошуку/зберігання. Це необхідно для того, щоб у кінцевому документі можна було отримати компактний масив "дуг".

У таблиці, якщо вона надана, має бути поле "arc_id" типу "serial" та "edge_id" типу integer; код буде запитувати таблицю щодо "edge_id", тому рекомендується додати індекс до цього поля.

[Примітка]

Індекси дуг у вихідних даних TopoJSON починаються з 0, але в таблиці "edgeMapTable" вони починаються з 1.

Повний документ TopoJSON повинен містити, крім фрагментів, повернутих цією функцією, фактичні дуги та деякі заголовки. Див. специфікацію TopoJSON.

Доступність: 2.1.0

Покращено: у версії 2.2.1 додано підтримку вхідних сигналів puntal

Див. також

ST_AsGeoJSON

Приклади

Create a temporary edge map for the TopoJSON output.

Code
CREATE TEMP TABLE edgemap(arc_id serial, edge_id int unique);

Build the TopoJSON header, objects, arcs, and footer.

Code
SELECT '{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {'

UNION ALL SELECT '"' || feature_name || '": ' || AsTopoJSON(feature, 'edgemap')
FROM features.big_parcels WHERE feature_name = 'P3P4';

WITH edges AS (
  SELECT m.arc_id, e.geom FROM edgemap m, city_data.edge e
  WHERE e.edge_id = m.edge_id
), points AS (
  SELECT arc_id, (ST_DumpPoints(geom)).* FROM edges
), compare AS (
  SELECT p2.arc_id,
         CASE WHEN p1.path IS NULL THEN p2.geom
              ELSE ST_Translate(p2.geom, -ST_X(p1.geom), -ST_Y(p1.geom))
         END AS geom
  FROM points p2 LEFT OUTER JOIN points p1
  ON ( p1.arc_id = p2.arc_id AND p2.path[1] = p1.path[1]+1 )
  ORDER BY arc_id, p2.path
), arcsdump AS (
  SELECT arc_id, (regexp_matches(ST_AsGeoJSON(geom), '\[.*\]'))[1] as t
  FROM compare
), arcs AS (
  SELECT arc_id, '[' || array_to_string(array_agg(t), ',') || ']' as a FROM arcsdump
  GROUP BY arc_id
  ORDER BY arc_id
)
SELECT '}, "arcs": [' UNION ALL
SELECT array_to_string(array_agg(a), E',\n') from arcs

UNION ALL SELECT ']}'::text as t;
Вивід растрових зображень
{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {
"P3P4": { "type": "MultiPolygon", "arcs": [[[-1]],[[6,5,-5,-4,-3,1]]]}
}, "arcs": [
 [[25,30],[6,0],[0,10],[-14,0],[0,-10],[8,0]],
 [[35,6],[0,8]],
 [[35,6],[12,0]],
 [[47,6],[0,8]],
 [[47,14],[0,8]],
 [[35,22],[12,0]],
 [[35,14],[0,8]]
 ]}

9.14. Топологія Просторові відносини

Анотація

У цьому розділі перелічено функції топології, що використовуються для перевірки взаємозв'язків між топогеометріями та топологічними примітивами

  • Equals — Повертає true, якщо дві топогеометрії складаються з однакових топологічних примітивів.
  • Intersects — Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.

Назва

Equals — Повертає true, якщо дві топогеометрії складаються з однакових топологічних примітивів.

Короткий огляд

boolean Equals(topogeometry tg1, topogeometry tg2);

Description

Повертає true, якщо дві топогеометрії складаються з однакових топологічних примітивів: граней, ребер, вузлів.

[Примітка]

Ця функція не підтримується для топогеометрій, які є колекціями геометрій. Вона також не може порівнювати топогеометрії з різних топологій.

Доступність: 1.1.0

This function supports 3d and will not drop the z-index.

Приклади

The following example uses the nei_topo table created in the toTopoGeom examples.

Code
SELECT topology.Equals(a.topo, b.topo)
FROM nei_topo AS a
JOIN nei_topo AS b ON b.gid = a.gid
WHERE a.gid = 1;
Вивід растрових зображень
t

Див. також

GetTopoGeomElements, ST_Equals


Назва

Intersects — Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.

Короткий огляд

boolean Intersects(topogeometry tg1, topogeometry tg2);

Description

Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.

[Примітка]

Ця функція не підтримується для топогеометрій, які є колекціями геометрій. Вона також не може порівнювати топогеометрії з різних топологій. Також наразі не підтримується для ієрархічних топогеометрій (топогеометрій, що складаються з інших топогеометрій).

Доступність: 1.1.0

This function supports 3d and will not drop the z-index.

Приклади

The following example uses the nei_topo table created in the toTopoGeom examples.

Code
SELECT topology.Intersects(a.topo, b.topo)
FROM nei_topo AS a
JOIN nei_topo AS b ON b.gid = a.gid
WHERE a.gid = 1;
Вивід растрових зображень
t

Див. також

ST_Intersects

9.15. Імпорт та експорт топологій

Після створення топологій і, можливо, пов'язаних топологічних шарів, ви можете експортувати їх у файловий формат для резервного копіювання або перенесення в іншу базу даних.

Використання стандартних інструментів PostgreSQL для вивантаження/відновлення є проблематичним, оскільки топології складаються з набору таблиць (4 для примітивних типів, довільна кількість для шарів) та записів у таблицях метаданих (topology.topology та topology.layer). Крім того, ідентифікатори топології не є однозначними в різних базах даних, тому параметри топології потрібно буде змінити після її відновлення.

Для спрощення експорту/відновлення топологій надається пара виконуваних файлів: pgtopo_export та pgtopo_import. Приклад використання:

Code
pgtopo_export dev_db topo1 | pgtopo_import topo1 | psql staging_db

9.15.1. Використання експорту топології

Скрипт pgtopo_export бере ім'я бази даних і топологію та виводить файл дампа, який можна використовувати для імпорту топології (та пов'язаних шарів) до нової бази даних.

За замовчуванням pgtopo_export записує файл дампа у стандартний вивід, щоб його можна було передати до pgtopo_import або перенаправити до файлу (відмовляючись записувати в термінал). За бажанням можна вказати ім'я файлу виводу за допомогою параметра командного рядка -f.

За замовчуванням pgtopo_export включає вивантаження всіх шарів, визначених для заданої топології. Це може бути більше даних, ніж вам потрібно, або вони можуть не працювати (у випадку, якщо таблиці шарів мають складні залежності). У такому випадку ви можете попросити пропустити шари за допомогою перемикача --skip-layers і обробити їх окремо.

Виклик pgtopo_export з параметром --help (або -h для скорочення) завжди виведе короткий текст про використання.

Формат файлу дампа — це стиснений архів tar каталогу pgtopo_export, що містить принаймні файл pgtopo_dump_version з інформацією про версію формату. Починаючи з версії 1, каталог містить CSV-файли, розділені табуляцією, з даними таблиць примітивних елементів топології (node, edge_data, face, relation), пов'язаними з ними записами топології та шарів, а також (якщо не вказано --skip-layers) дамп таблиць у форматі PostgreSQL, що повідомляються як шари заданої топології.

9.15.2. Використання імпортера топології

Скрипт pgtopo_import приймає дамп топології у форматі pgtopo_export та ім'я, яке буде надано створюваній топології, і виводить SQL-скрипт, що відтворює топологію та пов'язані з нею шари.

Створений файл SQL міститиме оператори, які створюють топологію з заданою назвою, завантажують в неї примітивні дані, відновлюють і реєструють усі шари топології, правильно пов'язуючи всі значення TopoGeometry з відповідною топологією.

За замовчуванням pgtopo_import зчитує дамп із стандартного вводу, щоб його можна було використовувати разом із pgtopo_export у конвеєрі. За бажанням можна вказати ім'я вхідного файлу за допомогою параметра командного рядка -f.

За замовчуванням pgtopo_import включає у вихідний файл SQL код для відновлення всіх шарів, знайдених у дампі.

Це може бути небажаним або непрацюючим у випадку, якщо ваша цільова база даних вже містить таблиці з такими самими іменами, як і в дампі. У такому випадку ви можете попросити пропустити рівні за допомогою перемикача --skip-layers і обробити їх окремо (або пізніше).

SQL для завантаження та зв'язування шарів тільки з топологією з іменем можна створити за допомогою перемикача --only-layers. Це може бути корисно для завантаження шарів ПІСЛЯ вирішення конфліктів імен або для зв'язування шарів з іншою топологією (наприклад, простою версією вихідної топології).

Якщо цільова топологія вже існує і ви хочете її видалити заздалегідь, ви можете передати параметр --drop-topology (починаючи з PostGIS-3.6.0).

Розділ 10. Raster Data Management, Queries, and Applications

10.1. Loading and Creating Rasters

For most use cases, you will create PostGIS rasters by loading existing raster files using the packaged raster2pgsql raster loader.

10.1.1. Using raster2pgsql to load rasters

The raster2pgsql is a raster loader executable that loads GDAL supported raster formats into SQL suitable for loading into a PostGIS raster table. It is capable of loading folders of raster files as well as creating overviews of rasters.

Since the raster2pgsql is compiled as part of PostGIS most often (unless you compile your own GDAL library), the raster types supported by the executable will be the same as those compiled in the GDAL dependency library. To get a list of raster types your particular raster2pgsql supports use the -G switch.

[Примітка]

When creating overviews of a specific factor from a set of rasters that are aligned, it is possible for the overviews to not align. Visit http://trac.osgeo.org/postgis/ticket/1764 for an example where the overviews do not align.

10.1.1.1. Example Usage

An example session using the loader to create an input file and uploading it chunked in 100x100 tiles might look like this:

The loader assigns SRID 4326, creates an index and standard constraints, analyzes the loaded table, records source filenames, and stores the input rasters in 100 by 100 pixel tiles.

Code
raster2pgsql -s 4326 -I -C -M -F -t 100x100 *.tif public.demelevation 
> elev.sql
psql -d gisdb -f elev.sql
[Примітка]

If you do not specify the schema as part of the target table name, the table will be created in the default schema of the database or user you are connecting with.

A conversion and upload can be done all in one step using UNIX pipes:

Code
raster2pgsql -s 4326 -I -C -M -F -t 100x100 \
  *.tif public.demelevation |
  psql -d gisdb

Load rasters Massachusetts state plane meters aerial tiles into a schema called aerial and create a full view, 2 and 4 level overview tables, use copy mode for inserting (no intermediary file just straight to db), and -e don't force everything in a transaction (good if you want to see data in tables right away without waiting). Break up the rasters into 128x128 pixel tiles and apply raster constraints. Use copy mode instead of table insert. (-F) Include a field called filename to hold the name of the file the tiles were cut from.

Code
raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 \
  bostonaerials2008/*.jpg aerials.boston |
  psql -U postgres -d gisdb -h localhost -p 5432

List the raster formats supported by this build:

Code
raster2pgsql -G

The -G command outputs a list something like:

Вивід растрових зображень
Available GDAL raster formats:
  Virtual Raster
  GeoTIFF
  National Imagery Transmission Format
  Raster Product Format TOC format
  ECRG TOC format
  Erdas Imagine Images (.img)
  CEOS SAR Image
  CEOS Image
  ...
  Arc/Info Export E00 GRID
  ZMap Plus Grid
  NOAA NGS Geoid Height Grids

10.1.1.2. raster2pgsql options

Long options that take values also accept the --option=value spelling.

-?, --help

Display help screen. Help will also display if you don't pass in any arguments.

-G, --gdal-formats

Print the supported raster formats.

(c|a|d|p) These are mutually exclusive options:

-c

Create new table and populate it with raster(s), this is the default mode

-a

Append raster(s) to an existing table.

-d

Drop table, create new one and populate it with raster(s)

-p

Prepare mode, only create the table.

--if-not-exists

Use IF NOT EXISTS for table creation in -c and -p modes. When -I or --create-index is also specified, use IF NOT EXISTS for index creation too. This option cannot be used with -d. Append mode requires an explicit creation action.

Atomic loader actions

The short modes are presets over explicit actions. The equivalent long options are --drop-table, --create-table, --load-data, --create-index, --add-constraints, --vacuum, --analyze, and --no-transaction. Add --if-not-exists to make active creation actions use IF NOT EXISTS. --drop-table emits DROP TABLE IF EXISTS before the selected actions. With no mode specified, the default create/load actions still apply.

Raster processing: Applying constraints for proper registering in raster catalogs

-C, --add-constraints

Apply raster constraints -- srid, pixelsize etc. to ensure raster is properly registered in raster_columns view.

-x, --no-extent

Disable setting the max extent constraint. Only applied if -C or --add-constraints is also used.

-r, --regular-blocking

Set the constraints (spatially unique and coverage tile) for regular blocking. Only applied if -C or --add-constraints is also used.

Raster processing: Optional parameters used to manipulate input raster dataset

-s, --srid [<FROM_SRID>:]<SRID>

Assign the output raster to the specified SRID. When FROM_SRID is also provided, raster2pgsql marks the input raster with FROM_SRID and emits SQL that reprojects the raster to the target SRID. If the source SRID is omitted or is zero, the raster metadata will be checked to determine an appropriate source SRID. Reprojection cannot be used with copy mode.

-b, --band BAND

Index (1-based) of band to extract from raster. For more than one band index, separate with comma (,). If unspecified, all bands of raster will be extracted.

-t, --tile-size TILE_SIZE

Cut raster into tiles to be inserted one per table row. TILE_SIZE is expressed as WIDTHxHEIGHT or set to the value "auto" to allow the loader to compute an appropriate tile size using the first raster and applied to all rasters.

-P, --pad

Pad right-most and bottom-most tiles to guarantee that all tiles have the same width and height.

-R, --register

Register the raster as a filesystem (out-db) raster.

Only the metadata of the raster and path location to the raster is stored in the database (not the pixels).

-l, --overview-factor OVERVIEW_FACTOR

Create overview of the raster. For more than one factor, separate with comma(,). Overview table name follows the pattern o_overview factor_table, where overview factor is a placeholder for numerical overview factor and table is replaced with the base table name. If a source raster already has an overview with matching dimensions, that overview is reused. Created overview is stored in the database and is not affected by -R. Note that your generated sql file will contain both the main table and overview tables.

-N, --nodata NODATA

NODATA value to use on bands without a NODATA value.

Optional parameters used to manipulate database objects

-f, --raster-column COLUMN

Specify name of destination raster column, default is 'rast'

-F, --filename

Add a column with the name of the file

-n, --filename-column COLUMN

Specify the name of the filename column. Implies -F.

-q, --quote

Wrap PostgreSQL identifiers in quotes.

-I

Alias for --create-index.

--create-index

Create a GiST index on the raster column at the end of this raster2pgsql run. With repeated -a append runs, create the index on the final run or after loading; add --if-not-exists to make reruns tolerate an existing index.

-M

Vacuum analyze the raster table.

-k, --skip-nodata-check

Keeps empty tiles and skips NODATA value checks for each raster band. Note you save time in checking, but could end up with far more junk rows in your database and those junk rows are not marked as empty tiles.

-T, --tablespace tablespace

Specify the tablespace for the new table. Note that indices (including the primary key) will still use the default tablespace unless the -X flag is also used.

-X, --index-tablespace tablespace

Specify the tablespace for the table's new index. This applies to the primary key and the spatial index if the -I flag is used.

-Y, --copy [MAX_ROWS_PER_COPY]

Use copy statements instead of insert statements. Optionally specify max_rows_per_copy; default 50 when not specified.

-e, --no-transaction

Execute each statement individually, do not use a transaction.

-E, --endian ENDIAN

Control endianness of generated binary output of raster; specify 0 for XDR and 1 for NDR (default); only NDR output is supported now

-V, --wkb-version version

Specify version of output format. Default is 0. Only 0 is supported at this time.

10.1.2. Creating rasters using PostGIS raster functions

On many occasions, you'll want to create rasters and raster tables right in the database. There are a plethora of functions to do that. The general steps to follow.

  1. Create a table with a raster column to hold the new raster records which can be accomplished with:

    Code
    CREATE TABLE myrasters(rid serial primary key, rast raster);
  2. There are many functions to help with that goal. If you are creating rasters not as a derivative of other rasters, you will want to start with: ST_MakeEmptyRaster, followed by ST_AddBand

    You can also create rasters from geometries. To achieve that you'll want to use ST_AsRaster perhaps accompanied with other functions such as ST_Union or ST_MapAlgebraFct or any of the family of other map algebra functions.

    There are even many more options for creating new raster tables from existing tables. For example you can create a raster table in a different projection from an existing one using ST_Transform

  3. Once you are done populating your table initially, you'll want to create a spatial index on the raster column with something like:

    Code
    CREATE INDEX myrasters_rast_st_convexhull_idx ON myrasters USING gist(ST_ConvexHull(rast));

    Note the use of ST_ConvexHull since most raster operators are based on the convex hull of the rasters.

    [Примітка]

    Pre-2.0 versions of PostGIS raster were based on the envelop rather than the convex hull. For the spatial indexes to work properly you'll need to drop those and replace with convex hull based index.

  4. Apply raster constraints using AddRasterConstraints

10.1.3. Using "out db" cloud rasters

The raster2pgsql tool uses GDAL to access raster data, and can take advantage of a key GDAL feature: the ability to read from rasters that are stored remotely in cloud "object stores" (e.g. AWS S3, Google Cloud Storage).

Efficient use of cloud stored rasters requires the use of a "cloud optimized" format. The most well-known and widely used is the "cloud optimized GeoTIFF" format. Using a non-cloud format, like a JPEG, or an un-tiled TIFF will result in very poor performance, as the system will have to download the entire raster each time it needs to access a subset.

First, load your raster into the cloud storage of your choice. Once it is loaded, you will have a URI to access it with, either an "http" URI, or sometimes a URI specific to the service. (e.g., "s3://bucket/object"). To access non-public buckets, you will need to supply GDAL config options to authenticate your connection. Note that this command is reading from the cloud raster and writing to the database.

Code
AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx \
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
raster2pgsql \
  -s 990000 \
  -t 256x256 \
  -I \
  -R \
  /vsis3/your.bucket.com/your_file.tif \
  your_table \
  | psql your_db

Once the table is loaded, you need to give the database permission to read from remote rasters, by setting two permissions, postgis.enable_outdb_rasters and postgis.gdal_enabled_drivers.

Code
SET postgis.enable_outdb_rasters = true;
SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';
    

To make the changes sticky, set them directly on your database. You will need to re-connect to experience the new settings.

Code
ALTER DATABASE your_db SET postgis.enable_outdb_rasters = true;
ALTER DATABASE your_db SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';
    

For non-public rasters, you may have to provide access keys to read from the cloud rasters. The same keys you used to write the raster2pgsql call can be set for use inside the database, with the postgis.gdal_vsi_options configuration. Note that multiple options can be set by space-separating the key=value pairs.

Code
SET postgis.gdal_vsi_options = 'AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

Once you have the data loaded and permissions set you can interact with the raster table like any other raster table, using the same functions. The database will handle all the mechanics of connecting to the cloud data when it needs to read pixel data.

10.2. Raster Catalogs

There are two raster catalog views that come packaged with PostGIS. Both views utilize information embedded in the constraints of the raster tables. As a result the catalog views are always consistent with the raster data in the tables since the constraints are enforced.

  1. raster_columns this view catalogs all the raster table columns in your database.

  2. raster_overviews this view catalogs all the raster table columns in your database that serve as overviews for a finer grained table. Tables of this type are generated when you use the -l switch during load.

10.2.1. Raster Columns Catalog

The raster_columns is a catalog of all raster table columns in your database that are of type raster. It is a view utilizing the constraints on the tables so the information is always consistent even if you restore one raster table from a backup of another database. The following columns exist in the raster_columns catalog.

If you created your tables not with the loader or forgot to specify the -C flag during load, you can enforce the constraints after the fact using AddRasterConstraints so that the raster_columns catalog registers the common information about your raster tiles.

  • r_table_catalog The database the table is in. This will always read the current database.

  • r_table_schema The database schema the raster table belongs to.

  • r_table_name raster table

  • r_raster_column the column in the r_table_name table that is of type raster. There is nothing in PostGIS preventing you from having multiple raster columns per table so its possible to have a raster table listed multiple times with a different raster column for each.

  • srid The spatial reference identifier of the raster. Should be an entry in the Розділ 4.5, «Spatial Reference Systems».

  • scale_x The scaling between geometric spatial coordinates and pixel. This is only available if all tiles in the raster column have the same scale_x and this constraint is applied. Refer to ST_ScaleX for more details.

  • scale_y The scaling between geometric spatial coordinates and pixel. This is only available if all tiles in the raster column have the same scale_y and the scale_y constraint is applied. Refer to ST_ScaleY for more details.

  • blocksize_x The width (number of pixels across) of each raster tile . Refer to ST_Width for more details.

  • blocksize_y The width (number of pixels down) of each raster tile . Refer to ST_Height for more details.

  • same_alignment A boolean that is true if all the raster tiles have the same alignment . Refer to ST_SameAlignment for more details.

  • regular_blocking If the raster column has the spatially unique and coverage tile constraints, the value with be TRUE. Otherwise, it will be FALSE.

  • num_bands The number of bands in each tile of your raster set. This is the same information as what is provided by ST_NumBands

  • pixel_types An array defining the pixel type for each band. You will have the same number of elements in this array as you have number of bands. The pixel_types are one of the following defined in ST_BandPixelType.

  • nodata_values An array of double precision numbers denoting the nodata_value for each band. You will have the same number of elements in this array as you have number of bands. These numbers define the pixel value for each band that should be ignored for most operations. This is similar information provided by ST_BandNoDataValue.

  • out_db An array of boolean flags indicating if the raster bands data is maintained outside the database. You will have the same number of elements in this array as you have number of bands.

  • extent This is the extent of all the raster rows in your raster set. If you plan to load more data that will change the extent of the set, you'll want to run the DropRasterConstraints function before load and then reapply constraints with AddRasterConstraints after load.

  • spatial_index A boolean that is true if raster column has a spatial index.

10.2.2. Raster Overviews

raster_overviews catalogs information about raster table columns used for overviews and additional information about them that is useful to know when utilizing overviews. Overview tables are cataloged in both raster_columns and raster_overviews because they are rasters in their own right but also serve an additional special purpose of being a lower resolution caricature of a higher resolution table. These are generated along-side the main raster table when you use the -l switch in raster loading or can be generated manually using AddOverviewConstraints.

Overview tables contain the same constraints as other raster tables as well as additional informational only constraints specific to overviews.

[Примітка]

The information in raster_overviews does not duplicate the information in raster_columns. If you need the information about an overview table present in raster_columns you can join the raster_overviews and raster_columns together to get the full set of information you need.

Two main reasons for overviews are:

  1. Low resolution representation of the core tables commonly used for fast mapping zoom-out.

  2. Computations are generally faster to do on them than their higher resolution parents because there are fewer records and each pixel covers more territory. Though the computations are not as accurate as the high-res tables they support, they can be sufficient in many rule-of-thumb computations.

The raster_overviews catalog contains the following columns of information.

  • o_table_catalog The database the overview table is in. This will always read the current database.

  • o_table_schema The database schema the overview raster table belongs to.

  • o_table_name raster overview table name

  • o_raster_column the raster column in the overview table.

  • r_table_catalog The database the raster table that this overview services is in. This will always read the current database.

  • r_table_schema The database schema the raster table that this overview services belongs to.

  • r_table_name raster table that this overview services.

  • r_raster_column the raster column that this overview column services.

  • overview_factor - this is the pyramid level of the overview table. The higher the number the lower the resolution of the table. raster2pgsql if given a folder of images, will compute overview of each image file and load separately. Level 1 is assumed and always the original file. Level 2 is will have each tile represent 4 of the original. So for example if you have a folder of 5000x5000 pixel image files that you chose to chunk 125x125, for each image file your base table will have (5000*5000)/(125*125) records = 1600, your (l=2) o_2 table will have ceiling(1600/Power(2,2)) = 400 rows, your (l=3) o_3 will have ceiling(1600/Power(2,3) ) = 200 rows. If your pixels aren't divisible by the size of your tiles, you'll get some scrap tiles (tiles not completely filled). Note that each overview tile generated by raster2pgsql has the same number of pixels as its parent, but is of a lower resolution where each pixel of it represents (Power(2,overview_factor) pixels of the original).

10.3. Building Custom Applications with PostGIS Raster

The fact that PostGIS raster provides you with SQL functions to render rasters in known image formats gives you a lot of options for rendering them. For example you can use OpenOffice / LibreOffice for rendering as demonstrated in Rendering PostGIS Raster graphics with LibreOffice Base Reports. In addition you can use a wide variety of languages as demonstrated in this section.

10.3.1. PHP Example Outputting using ST_AsPNG in concert with other raster functions

In this section, we'll demonstrate how to use the PHP PostgreSQL driver and the ST_AsGDALRaster family of functions to output band 1,2,3 of a raster to a PHP request stream that can then be embedded in an img src html tag.

The sample query demonstrates how to combine a whole bunch of raster functions together to grab all tiles that intersect a particular wgs 84 bounding box and then unions with ST_Union the intersecting tiles together returning all bands, transforms to user specified projection using ST_Transform, and then outputs the results as a png using ST_AsPNG.

You would call the script with http://mywebserver/test_raster.php?srid=2249 to get the raster image in Massachusetts state plane feet.

Code
<?php
$conn_str = 'dbname=mydb host=localhost port=5432 user=myuser password=mypwd';
$dbconn = pg_connect($conn_str);
header('Content-Type: image/png');

if (!empty($_REQUEST['srid']) &amp;&amp; is_numeric($_REQUEST['srid'])) {
    $input_srid = intval($_REQUEST['srid']);
} else {
    $input_srid = 26986;
}

$sql = "SET bytea_output = 'escape';
SELECT ST_AsPNG(
    ST_Transform(
        ST_AddBand(
            ST_Union(rast, 1),
            ARRAY[ST_Union(rast, 2), ST_Union(rast, 3)]
        ),
        $input_srid
    )
) AS new_rast
FROM aerials.boston
WHERE ST_Intersects(
    rast,
    ST_Transform(
        ST_MakeEnvelope(-71.1217, 42.227, -71.1210, 42.218, 4326),
        26986
    )
)";

$result = pg_query($sql);
$row = pg_fetch_row($result);
pg_free_result($result);
if ($row === false) return;
echo pg_unescape_bytea($row[0]);
?>

10.3.2. ASP.NET C# Example Outputting using ST_AsPNG in concert with other raster functions

In this section, we'll demonstrate how to use Npgsql PostgreSQL .NET driver and the ST_AsGDALRaster family of functions to output band 1,2,3 of a raster to the HTTP response stream so it can be embedded in an img tag.

You will need the npgsql .NET PostgreSQL driver for this exercise which you can get the latest of from http://npgsql.projects.postgresql.org/. Just download the latest and drop into your ASP.NET bin folder and you'll be good to go.

The sample query demonstrates how to combine a whole bunch of raster functions together to grab all tiles that intersect a particular wgs 84 bounding box and then unions with ST_Union the intersecting tiles together returning all bands, transforms to user specified projection using ST_Transform, and then outputs the results as a png using ST_AsPNG.

This is same example as Розділ 10.3.1, «PHP Example Outputting using ST_AsPNG in concert with other raster functions» except implemented in C#.

You would call the handler with http://mywebserver/TestRaster.ashx?srid=2249 to get the raster image in Massachusetts state plane feet.

web.config connection string section:

Code
<connectionStrings>
    <add name="DSN"
        connectionString="server=localhost;database=mydb;Port=5432;User Id=myuser;password=mypwd"/>
</connectionStrings>

Code for TestRaster.ashx:

Code
<%@ WebHandler Language="C#" Class="TestRaster" %>
using System;
using System.Data;
using System.Web;
using Npgsql;

public class TestRaster : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";
        context.Response.BinaryWrite(GetResults(context));
    }

    public bool IsReusable {
        get { return false; }
    }

    public byte[] GetResults(HttpContext context)
    {
        byte[] result = null;
        NpgsqlCommand command;
        string sql = null;
        int input_srid = 26986;
        try {
            string connectionString = System.Configuration.ConfigurationManager
                .ConnectionStrings["DSN"].ConnectionString;
            using (NpgsqlConnection conn = new NpgsqlConnection(connectionString)) {
                conn.Open();

                if (context.Request["srid"] != null)
                {
                    input_srid = Convert.ToInt32(context.Request["srid"]);
                }
                sql = @"SELECT ST_AsPNG(
                            ST_Transform(
                                ST_AddBand(
                                    ST_Union(rast, 1),
                                    ARRAY[ST_Union(rast, 2), ST_Union(rast, 3)]
                                ),
                                :input_srid
                            )
                        ) As new_rast
                        FROM aerials.boston
                        WHERE ST_Intersects(
                            rast,
                            ST_Transform(
                                ST_MakeEnvelope(
                                    -71.1217, 42.227,
                                    -71.1210, 42.218,
                                    4326
                                ),
                                26986
                            )
                        )";
                command = new NpgsqlCommand(sql, conn);
                command.Parameters.Add(new NpgsqlParameter("input_srid", input_srid));


                result = (byte[]) command.ExecuteScalar();
                conn.Close();
            }

        }
        catch (Exception ex)
        {
            result = null;
            context.Response.Write(ex.Message.Trim());
        }
        return result;
    }
}

10.3.3. Java console app that outputs raster query as Image file

This is a simple java console app that takes a query that returns one image and outputs to specified file.

You can download the latest PostgreSQL JDBC drivers from http://jdbc.postgresql.org/download.html

You can compile the following code with commands like:

Code
CLASSPATH=".:../postgresql.jar" javac SaveQueryImage.java
jar cfm SaveQueryImage.jar Manifest.txt *.class

And call it from the command line with something like:

Code
java -jar SaveQueryImage.jar \
  "SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1, 5), 10, 'quad_segs=2'), 150, 150, '8BUI', 100));" \
  "test.png"

Manifest.txt:

Code
Class-Path: postgresql-9.0-801.jdbc4.jar
Main-Class: SaveQueryImage

Code for SaveQueryImage.java:

Code
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.io.*;

public class SaveQueryImage {
  public static void main(String[] argv) {
      System.out.println("Checking if Driver is registered with DriverManager.");

      try {
        //java.sql.DriverManager.registerDriver (new org.postgresql.Driver());
        Class.forName("org.postgresql.Driver");
      }
      catch (ClassNotFoundException cnfe) {
        System.out.println("Couldn't find the driver!");
        cnfe.printStackTrace();
        System.exit(1);
      }

      Connection conn = null;

      try {
        conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydb", "myuser", "mypwd");
        conn.setAutoCommit(false);

        PreparedStatement sGetImg = conn.prepareStatement(argv[0]);

        ResultSet rs = sGetImg.executeQuery();

        FileOutputStream fout;
        try
        {
            rs.next();
            /** Output to file name requested by user **/
            fout = new FileOutputStream(new File(argv[1]) );
            fout.write(rs.getBytes(1));
            fout.close();
        }
        catch(Exception e)
        {
            System.out.println("Can't create file");
            e.printStackTrace();
        }

        rs.close();
        sGetImg.close();
        conn.close();
      }
      catch (SQLException se) {
        System.out.println("Couldn't connect: print out a stack trace and exit.");
        se.printStackTrace();
        System.exit(1);
      }
  }
}

10.3.4. Use PLPython to dump out images via SQL

This is a plpython stored function that creates a file in the server directory for each record. Requires you have plpython installed. Should work fine with both plpythonu and plpython3u.

Code
CREATE OR REPLACE FUNCTION write_file (param_bytes bytea, param_filepath text)
RETURNS text
AS $$
f = open(param_filepath, 'wb+')
f.write(param_bytes)
return param_filepath
$$ LANGUAGE plpythonu;

Write out 5 images to the PostgreSQL server in varying sizes. The PostgreSQL daemon account needs write access to the folder; this echoes back the file names created.

Code
SELECT write_file(
    ST_AsPNG(
        ST_AsRaster(
            ST_Buffer(ST_Point(1, 5), j * 5, 'quad_segs=2'),
            150 * j,
            150 * j,
            '8BUI',
            100
        )
    ),
    'C:/temp/slices' || j || '.png'
)
FROM generate_series(1, 5) AS j;
Вивід растрових зображень
write_file
---------------------
 C:/temp/slices1.png
 C:/temp/slices2.png
 C:/temp/slices3.png
 C:/temp/slices4.png
 C:/temp/slices5.png

10.3.5. Outputting Rasters with PSQL

Sadly PSQL doesn't have easy to use built-in functionality for outputting binaries. This is a bit of a hack that piggy backs on PostgreSQL somewhat legacy large object support. To use it, first launch your psql command line connected to your database.

Unlike the python approach, this approach creates the file on your local computer.

Code
SELECT
    oid,
    lowrite(lo_open(oid, 131072), png) AS num_bytes
FROM (VALUES (
    lo_create(0),
    ST_AsPNG((SELECT rast FROM aerials.boston WHERE rid = 1))
)) AS v(oid, png);
Вивід растрових зображень
oid   | num_bytes
---------+-----------
 2630819 |     74860

Note the large object OID and export it to a file on your local computer, replacing the example path with the desired file path.

Code
\lo_export 2630819 'C:/temp/aerial_samp.png'

This deletes the file from large object storage in the database.

Code
SELECT lo_unlink(2630819);

Розділ 11. Растрова довідка

raster — це тип PostGIS для зберігання та аналізу растрових даних.

Для завантаження растрів з растрових файлів див. Розділ 10.1, «Loading and Creating Rasters»

Деякі приклади в цьому довіднику використовують растрову таблицю фіктивних даних, створену за допомогою наступного коду:

Code
CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

Нижче наведено функції, які можуть знадобитися користувачеві PostGIS Raster. Існують також інші функції підтримки растрових даних, які не представляють інтересу для звичайного користувача.

11.1. Типи даних растрової підтримки

Анотація

У цьому розділі перелічено типи даних PostgreSQL, спеціально створені для підтримки растрової функціональності.

  • geomval — Просторовий тип даних із двома полями — geom (містить об’єкт геометрії) та val (містить значення пікселя з растрового каналу у форматі double precision).
  • addbandarg — Складений тип, що використовується як вхідний параметр у функції ST_AddBand для визначення атрибутів та початкового значення нового каналу.
  • rastbandarg — Композитний тип, який використовується, коли потрібно виразити растр і індекс каналу цього растра.
  • raster — растровий тип просторових даних.
  • reclassarg — Композитний тип, що використовується як вхідні дані для функції ST_Reclass, яка визначає поведінку перекласифікації.
  • summarystats — Композитний тип, що повертається функціями ST_SummaryStats та ST_SummaryStatsAgg.
  • unionarg — Композитний тип, що використовується як вхідні дані для функції ST_Union, яка визначає смуги, що підлягають обробці, та поведінку операції UNION.

Назва

geomval — Просторовий тип даних із двома полями — geom (містить об’єкт геометрії) та val (містить значення пікселя з растрового каналу у форматі double precision).

Description

geomval — це складений тип даних, що складається з геометричного об’єкта, на який посилається поле .geom, та val — числа з подвійною точністю, яке представляє значення пікселя в певній геометричній точці в растровому каналі. Він використовується функціями ST_DumpAsPolygon та сімейством функцій перетину растрових даних як вихідний тип для розбиття растрового шару на геометричні полігони.


Назва

addbandarg — Складений тип, що використовується як вхідний параметр у функції ST_AddBand для визначення атрибутів та початкового значення нового каналу.

Description

Складений тип, що використовується як вхідний параметр у функції ST_AddBand для визначення атрибутів та початкового значення нового каналу

FieldTypeDescription
indexintegerЗначення з відліком від 1, яке вказує позицію, куди буде додано новий шар серед каналів растра. Якщо вказано NULL, новий канал буде додано в кінець списку шарів растра.
pixeltypetextPixel type of the new band. One of the pixel types described in ST_BandPixelType.
initialvaluedouble precisionInitial value that all pixels of the new band will be set to.
nodatavaldouble precisionЗначення NODATA для нового каналу. Якщо встановлено NULL, новий канал не матиме призначеного значення NODATA.

Див. також

ST_AddBand


Назва

rastbandarg — Композитний тип, який використовується, коли потрібно виразити растр і індекс каналу цього растра.

Description

Комбінований тип, який використовується, коли потрібно виразити растр і індекс каналу цього растру.

FieldTypeDescription
rastrasterThe raster in question.
nbandinteger1-based value indicating the raster band.

Назва

raster — растровий тип просторових даних.

Description

Растр — це тип просторових даних, що використовується для представлення растрових даних, таких як дані, імпортовані з файлів JPEG, TIFF, PNG, цифрових моделей рельєфу. Кожен растр має 1 або більше каналів, кожен з яких має набір значень пікселів. Растри можуть бути геореферентними.

[Примітка]

Вимагає компіляції PostGIS з підтримкою GDAL. Наразі растри можуть бути неявним чином перетворені на геометричний тип, але перетворення повертає ST_ConvexHullрастра. Це автоматичне перетворення може бути видалене в найближчому майбутньому, тому не покладайтеся на нього.

Поведінка при приведення типів

У цьому розділі перелічено автоматичні та явні приведення типів, дозволені для цього типу даних

Приведення типів вПоведінка
geometryавтоматичне

Назва

reclassarg — Композитний тип, що використовується як вхідні дані для функції ST_Reclass, яка визначає поведінку перекласифікації.

Description

Композитний тип, що використовується як вхідні дані для функції ST_Reclass, яка визначає поведінку перекласифікації.

FieldTypeDescription
nbandintegerНомер каналу, який потрібно перекласифікувати.
reclassexprtextComma-delimited range:map_range mappings that define how old band values map to new band values.
pixeltypetextOne of defined pixel types as described in ST_BandPixelType.
nodatavaldouble precisionЗначення, яке слід розглядати як відсутність даних. Для зображень, що підтримують прозорість, ці поля будуть порожніми.

The reclassexpr range delimiters mean: ( greater than, ) less than, ] less than or equal, and [ greater than or equal.

  • [a-b] means a <= x <= b.

  • (a-b] means a < x <= b.

  • [a-b) means a <= x < b.

  • (a-b) means a < x < b.

Opening-parenthesis notation is optional, so a-b means the same as (a-b).

Приклади

Reclassify band 2 as an 8BUI where 255 is nodata value.

Code
SELECT ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255)::reclassarg;

Reclassify band 1 as an 1BB and no nodata value defined.

Code
SELECT ROW(1, '0-100]:0, (100-255:1', '1BB', NULL)::reclassarg;

Див. також

ST_Reclass


Назва

summarystats — Композитний тип, що повертається функціями ST_SummaryStats та ST_SummaryStatsAgg.

Description

Композитний тип, що повертається функціями ST_SummaryStats та ST_SummaryStatsAgg.

лічильник цілого числа

Кількість пікселів, що враховуються для зведеної статистики.

сума подвійної точності

Сума всіх підрахованих значень пікселів.

середня подвійна точність

Арифметичне середнє всіх підрахованих значень пікселів.

stddev подвійна точність

Стандартне відхилення всіх підрахованих значень пікселів.

мінімальна подвійна точність

Мінімальне значення підрахованих значень пікселів.

максимальна подвійна точність

Максимальне значення підрахованих значень пікселів.


Назва

unionarg — Композитний тип, що використовується як вхідні дані для функції ST_Union, яка визначає смуги, що підлягають обробці, та поведінку операції UNION.

Description

Композитний тип, що використовується як вхідні дані для функції ST_Union, яка визначає смуги, що підлягають обробці, та поведінку операції UNION.

FieldTypeDescription
nbandintegerЗначення на основі 1, що вказує діапазон кожного вхідного растра, який підлягає обробці.
uniontypetextType of union operation. One of the types described in ST_Union.

Див. також

ST_Union

11.2. Управління растром

  • AddRasterConstraints — Додає обмеження растру до завантаженої таблиці растру для певного стовпця, що обмежує просторове посилання, масштабування, розмір блоку, вирівнювання, смуги, тип смуги та прапорець, що позначає, чи стовпець растру регулярно блокується. Таблиця повинна бути завантажена даними, щоб обмеження могли бути виведені. Повертає значення true, якщо налаштування обмеження було виконано, і видає повідомлення в іншому випадку.
  • DropRasterConstraints — Видаляє обмеження PostGIS растра, які посилаються на стовпець таблиці растра. Корисно, якщо потрібно перезавантажити дані або оновити дані стовпця растра.
  • AddOverviewConstraints — Позначте стовпець растрових даних як огляд іншого стовпця.
  • DropOverviewConstraints — Зніміть позначку стовпця растрового зображення, щоб він не був представленням іншого.
  • PostGIS_GDAL_Version — Повідомляє про версію бібліотеки GDAL, яка використовується PostGIS.
  • PostGIS_Raster_Lib_Build_Date — Повідомляє дату створення повної растрової бібліотеки.
  • PostGIS_Raster_Lib_Version — Повідомляє про повну растрову версію та інформацію про конфігурацію збірки.
  • ST_GDALDrivers — Повертає список растрових форматів, що підтримуються PostGIS через GDAL. Тільки формати з can_write=True можуть використовуватися ST_AsGDALRaster.
  • UpdateRasterSRID — Змінити SRID всіх растрів у вказаній користувачем колонці та таблиці.
  • ST_CreateOverview — Створити версію заданого растрового покриття зі зниженою роздільною здатністю.

Назва

AddRasterConstraints — Додає обмеження растру до завантаженої таблиці растру для певного стовпця, що обмежує просторове посилання, масштабування, розмір блоку, вирівнювання, смуги, тип смуги та прапорець, що позначає, чи стовпець растру регулярно блокується. Таблиця повинна бути завантажена даними, щоб обмеження могли бути виведені. Повертає значення true, якщо налаштування обмеження було виконано, і видає повідомлення в іншому випадку.

Короткий огляд

boolean AddRasterConstraints(name rasttable, name rastcolumn, boolean srid=true, boolean scale_x=true, boolean scale_y=true, boolean blocksize_x=true, boolean blocksize_y=true, boolean same_alignment=true, boolean regular_blocking=false, boolean num_bands=true , boolean pixel_types=true , boolean nodata_values=true , boolean out_db=true , boolean extent=true );

boolean AddRasterConstraints(name rasttable, name rastcolumn, text[] VARIADIC constraints);

boolean AddRasterConstraints(name rastschema, name rasttable, name rastcolumn, text[] VARIADIC constraints);

boolean AddRasterConstraints(name rastschema, name rasttable, name rastcolumn, boolean srid=true, boolean scale_x=true, boolean scale_y=true, boolean blocksize_x=true, boolean blocksize_y=true, boolean same_alignment=true, boolean regular_blocking=false, boolean num_bands=true, boolean pixel_types=true, boolean nodata_values=true , boolean out_db=true , boolean extent=true );

Description

Створює обмеження для стовпця растра, які використовуються для відображення інформації в каталозі растра raster_columns. rastschema — це назва схеми таблиці, в якій знаходиться таблиця. srid має бути цілим числом, що посилається на запис у таблиці SPATIAL_REF_SYS.

Завантажувач raster2pgsql використовує цю функцію для реєстрації растрових таблиць

Дійсні імена обмежень для передачі: детальнішу інформацію див. у Розділ 10.2.1, «Raster Columns Catalog».

  • blocksize встановлює розмір блоку як по осі X, так і по осі Y

  • blocksize_x встановлює розмір плитки X (ширина кожної плитки в пікселях)

  • blocksize_y встановлює Y-плитку (висоту кожної плитки в пікселях)

  • extent обчислює розмір всієї таблиці та застосовує обмеження, згідно з яким усі растри повинні знаходитися в межах цього розміру

  • num_bands кількість смуг

  • pixel_types зчитує масив типів пікселів для кожного діапазону, щоб переконатися, що всі діапазони n мають однаковий тип пікселів

  • regular_blocking встановлює обмеження просторової унікальності (жодні два растри не можуть бути просторово однаковими) та покриття плитки (растр вирівнюється до покриття)

  • same_alignment гарантує, що всі вони мають однакове вирівнювання, тобто будь-які дві плитки, які ви порівнюєте, будуть повертати значення true. Див. ST_SameAlignment.

  • srid гарантує, що всі мають однаковий srid

  • Більше — все, що вказано як вхідні дані для вищезазначених функцій

[Примітка]

Ця функція виводить обмеження на основі даних, що вже містяться в таблиці. Щоб вона працювала, спочатку потрібно створити стовпець растрових даних, а потім завантажити в нього дані.

[Примітка]

Якщо вам потрібно завантажити більше даних у таблиці після того, як ви вже застосували обмеження, ви можете запустити DropRasterConstraints, якщо обсяг ваших даних змінився.

Доступність: 2.0.0

Приклади

Apply all possible constraints on column based on data.

Verify the raster table is registered correctly in the raster_columns view.

Code
CREATE TABLE myrasters(rid SERIAL primary key, rast raster);
INSERT INTO myrasters(rast)
SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0, 4326), 1, '8BSI'::text, -129, NULL);

SELECT AddRasterConstraints('myrasters'::name, 'rast'::name);
SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values
    FROM raster_columns
    WHERE r_table_name = 'myrasters';
Вивід растрових зображень
srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values
------+---------+---------+-------------+-------------+-----------+-------------+---------------
 4326 |       2 |       2 |        1000 |        1000 |         1 | {8BSI}      | {0}

Apply single constraint.

Code
CREATE TABLE public.myrasters2(rid SERIAL primary key, rast raster);
INSERT INTO myrasters2(rast)
SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0, 4326), 1, '8BSI'::text, -129, NULL);

SELECT AddRasterConstraints('public'::name, 'myrasters2'::name, 'rast'::name, 'regular_blocking', 'blocksize');
Вивід растрових зображень
NOTICE:  Adding regular blocking constraint
NOTICE:  Adding blocksize-X constraint
NOTICE:  Adding blocksize-Y constraint

Назва

DropRasterConstraints — Видаляє обмеження PostGIS растра, які посилаються на стовпець таблиці растра. Корисно, якщо потрібно перезавантажити дані або оновити дані стовпця растра.

Короткий огляд

boolean DropRasterConstraints(name rasttable, name rastcolumn, boolean srid, boolean scale_x, boolean scale_y, boolean blocksize_x, boolean blocksize_y, boolean same_alignment, boolean regular_blocking, boolean num_bands=true, boolean pixel_types=true, boolean nodata_values=true, boolean out_db=true , boolean extent=true);

boolean DropRasterConstraints(name rastschema, name rasttable, name rastcolumn, boolean srid=true, boolean scale_x=true, boolean scale_y=true, boolean blocksize_x=true, boolean blocksize_y=true, boolean same_alignment=true, boolean regular_blocking=false, boolean num_bands=true, boolean pixel_types=true, boolean nodata_values=true, boolean out_db=true , boolean extent=true);

boolean DropRasterConstraints(name rastschema, name rasttable, name rastcolumn, text[] constraints);

Description

Видаляє обмеження растра PostGIS, що посилаються на стовпець таблиці растра, які були додані за допомогою AddRasterConstraints. Корисно, якщо вам потрібно завантажити більше даних або оновити дані стовпця растра. Вам не потрібно це робити, якщо ви хочете позбутися таблиці растра або стовпця растра.

To drop a raster table use standard SQL: DROP TABLE mytable.

To drop just a raster column and leave the rest of the table, use standard SQL: ALTER TABLE mytable DROP COLUMN rast.

таблиця зникне з каталогу raster_columns, якщо стовпець або таблиця будуть видалені. Однак, якщо будуть видалені тільки обмеження, стовпець растра все одно буде вказаний у каталозі raster_columns, але крім імені стовпця та таблиці про нього не буде жодної іншої інформації.

Доступність: 2.0.0

Приклади

Code
SELECT DropRasterConstraints ('myrasters', 'rast');
Вивід растрових зображень
droprasterconstraints
-----------------------
 t
(1 row)

Verify change in raster_columns.

Code
SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values
    FROM raster_columns
    WHERE r_table_name = 'myrasters';
Вивід растрових зображень
srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values
------+---------+---------+-------------+-------------+-----------+-------------+---------------
    0 |         |         |             |             |           |             |

Див. також

AddRasterConstraints


Назва

AddOverviewConstraints — Позначте стовпець растрових даних як огляд іншого стовпця.

Короткий огляд

boolean AddOverviewConstraints(name ovschema, name ovtable, name ovcolumn, name refschema, name reftable, name refcolumn, int ovfactor);

boolean AddOverviewConstraints(name ovtable, name ovcolumn, name reftable, name refcolumn, int ovfactor);

Description

Додає обмеження до стовпця растра, які використовуються для відображення інформації в каталозі растрів raster_overviews.

Параметр ovfactor представляє коефіцієнт масштабування в стовпці огляду: вищі коефіцієнти огляду мають нижчу роздільну здатність.

Якщо параметри ovschema та refschema пропущені, буде використана перша таблиця, знайдена під час сканування search_path.

Доступність: 2.0.0

Приклади

Verify the raster table is registered correctly in the raster_overviews view.

Code
CREATE TABLE res1 AS SELECT
ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0, 0, 2),
  1, '8BSI'::text, -129, NULL
) r1;

CREATE TABLE res2 AS SELECT
ST_AddBand(ST_MakeEmptyRaster(500, 500, 0, 0, 4),
  1, '8BSI'::text, -129, NULL
) r2;

SELECT AddOverviewConstraints('res2', 'r2', 'res1', 'r1', 2);
SELECT o_table_name ot, o_raster_column oc,
       r_table_name rt, r_raster_column rc,
       overview_factor f
FROM raster_overviews WHERE o_table_name = 'res2';
Вивід растрових зображень
ot  | oc |  rt  | rc | f
------+----+------+----+---
 res2 | r2 | res1 | r1 | 2
(1 row)

Назва

DropOverviewConstraints — Зніміть позначку стовпця растрового зображення, щоб він не був представленням іншого.

Короткий огляд

boolean DropOverviewConstraints(name ovschema, name ovtable, name ovcolumn);

boolean DropOverviewConstraints(name ovtable, name ovcolumn);

Description

Видалити з колонки растра обмеження, що використовуються для відображення її як представлення іншого растра в каталозі растрів raster_overviews.

Якщо параметр ovschema пропущено, буде використано першу таблицю, знайдено під час сканування search_path.

Доступність: 2.0.0


Назва

PostGIS_GDAL_Version — Повідомляє про версію бібліотеки GDAL, яка використовується PostGIS.

Короткий огляд

text PostGIS_GDAL_Version();

Description

Повідомляє про версію бібліотеки GDAL, яка використовується PostGIS. Також перевіряє і повідомляє, чи може GDAL знайти свої файли даних.

Приклади

Code
SELECT PostGIS_GDAL_Version();
Вивід растрових зображень
GDAL 1.11dev, released 2013/04/13

Див. також

postgis.gdal_datapath


Назва

PostGIS_Raster_Lib_Build_Date — Повідомляє дату створення повної растрової бібліотеки.

Короткий огляд

text PostGIS_Raster_Lib_Build_Date();

Description

Звіти про дату створення растру

Приклади

Code
SELECT PostGIS_Raster_Lib_Build_Date();
Вивід растрових зображень
2010-04-28 21:15:10

Див. також

PostGIS_Raster_Lib_Version


Назва

PostGIS_Raster_Lib_Version — Повідомляє про повну растрову версію та інформацію про конфігурацію збірки.

Короткий огляд

text PostGIS_Raster_Lib_Version();

Description

Повідомляє про повну растрову версію та інформацію про конфігурацію збірки.

Приклади

Code
SELECT PostGIS_Raster_Lib_Version();
Вивід растрових зображень
2.0.0

Див. також

PostGIS_Lib_Version


Назва

ST_GDALDrivers — Повертає список растрових форматів, що підтримуються PostGIS через GDAL. Тільки формати з can_write=True можуть використовуватися ST_AsGDALRaster.

Короткий огляд

setof record ST_GDALDrivers(integer OUT idx, text OUT short_name, text OUT long_name, text OUT can_read, text OUT can_write, text OUT create_options);

Description

Повертає список растрових форматів short_name, long_name та опцій creator для кожного формату, що підтримується GDAL. Використовуйте short_name як вхідні дані в параметрі format ST_AsGDALRaster. Опції залежать від драйверів, з якими було скомпільовано libgdal. create_options повертає набір CreationOptionList/Option у форматі xml, що складається з імені та опціональних type, description та набору VALUE для кожної опції creator для конкретного драйвера.

Змінено: 2.5.0 — додано стовпці can_read та can_write.

Змінено: 2.0.6, 2.1.3 — за замовчуванням драйвери не ввімкнені, якщо не встановлено GUC або змінну середовища gdal_enabled_drivers.

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Приклади

List of Drivers.

Code
SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SELECT short_name, long_name, can_write
FROM ST_GDALDrivers()
ORDER BY short_name;
Вивід растрових зображень
short_name    |                          long_name                          | can_write
-----------------+-------------------------------------------------------------+-----------
 AAIGrid         | Arc/Info ASCII Grid                                         | t
 ACE2            | ACE2                                                        | f
 ADRG            | ARC Digitized Raster Graphics                               | f
 AIG             | Arc/Info Binary Grid                                        | f
 AirSAR          | AirSAR Polarimetric Image                                   | f
 ARG             | Azavea Raster Grid format                                   | t
 BAG             | Bathymetry Attributed Grid                                  | f
 BIGGIF          | Graphics Interchange Format (.gif)                          | f
 BLX             | Magellan topo (.blx)                                        | t
 BMP             | MS Windows Device Independent Bitmap                        | f
 BSB             | Maptech BSB Nautical Charts                                 | f
 PAux            | PCI .aux Labelled                                           | f
 PCIDSK          | PCIDSK Database File                                        | f
 PCRaster        | PCRaster Raster File                                        | f
 PDF             | Geospatial PDF                                              | f
 PDS             | NASA Planetary Data System                                  | f
 PDS4            | NASA Planetary Data System 4                                | t
 PLMOSAIC        | Planet Labs Mosaics API                                     | f
 PLSCENES        | Planet Labs Scenes API                                      | f
 PNG             | Portable Network Graphics                                   | t
 PNM             | Portable Pixmap Format (netpbm)                             | f
 PRF             | Racurs PHOTOMOD PRF                                         | f
 R               | R Object Data Store                                         | t
 Rasterlite      | Rasterlite                                                  | t
 RDA             | DigitalGlobe Raster Data Access driver                      | f
 RIK             | Swedish Grid RIK (.rik)                                     | f
 RMF             | Raster Matrix Format                                        | f
 ROI_PAC         | ROI_PAC raster                                              | f
 RPFTOC          | Raster Product Format TOC format                            | f
 RRASTER         | R Raster                                                    | f
 RS2             | RadarSat 2 XML Product                                      | f
 RST             | Idrisi Raster A.1                                           | t
 SAFE            | Sentinel-1 SAR SAFE Product                                 | f
 SAGA            | SAGA GIS Binary Grid (.sdat, .sg-grd-z)                     | t
 SAR_CEOS        | CEOS SAR Image                                              | f
 SDTS            | SDTS Raster                                                 | f
 SENTINEL2       | Sentinel 2                                                  | f
 SGI             | SGI Image File Format 1.0                                   | f
 SNODAS          | Snow Data Assimilation System                               | f
 SRP             | Standard Raster Product (ASRP/USRP)                         | f
 SRTMHGT         | SRTMHGT File Format                                         | t
 Terragen        | Terragen heightfield                                        | f
 TIL             | EarthWatch .TIL                                             | f
 TSX             | TerraSAR-X Product                                          | f
 USGSDEM         | USGS Optional ASCII DEM (and CDED)                          | t
 VICAR           | MIPL VICAR file                                             | f
 VRT             | Virtual Raster                                              | t
 WCS             | OGC Web Coverage Service                                    | f
 WMS             | OGC Web Map Service                                         | t
 WMTS            | OGC Web Map Tile Service                                    | t
 XPM             | X11 PixMap Format                                           | t
 XYZ             | ASCII Gridded XYZ                                           | t
 ZMap            | ZMap Plus Grid                                              | t

List of options for each driver.

Output the create options XML column of JPEG as a table. These creator options can be used in the ST_AsGDALRaster options argument.

Code
SELECT (xpath('@name', g.opt))[1]::text As oname,
       (xpath('@type', g.opt))[1]::text As otype,
       (xpath('@description', g.opt))[1]::text As descrip
FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::xml)) As opt
FROM  ST_GDALDrivers()
WHERE short_name = 'JPEG') As g;
Вивід растрових зображень
oname        |  otype  |      descrip
--------------------+---------+-------------------------------------------------
 PROGRESSIVE        | boolean | whether to generate a progressive JPEG
 QUALITY            | int     | good=100, bad=0, default=75
 WORLDFILE          | boolean | whether to generate a worldfile
 INTERNAL_MASK      | boolean | whether to generate a validity mask
 COMMENT            | string  | Comment
 SOURCE_ICC_PROFILE | string  | ICC profile encoded in Base64
 EXIF_THUMBNAIL     | boolean | whether to generate an EXIF thumbnail(overview).
                                By default its max dimension will be 128
 THUMBNAIL_WIDTH    | int     | Forced thumbnail width
 THUMBNAIL_HEIGHT   | int     | Forced thumbnail height
(9 rows)

This example turns a few common GeoTIFF creator options into a compact table.

Code
WITH gtiff_options AS (
    SELECT
        option_name,
        option_type,
        default_value
    FROM ST_GDALDrivers() AS driver
    CROSS JOIN LATERAL XMLTABLE(
        '/CreationOptionList/Option'
        PASSING (driver.create_options::xml)
        COLUMNS
            option_name text PATH '@name',
            option_type text PATH '@type',
            default_value text PATH '@default'
    ) AS options
    WHERE driver.short_name = 'GTiff'
)
SELECT option_name AS name, option_type AS type, coalesce(default_value, '') AS default_value
FROM gtiff_options
WHERE option_name = ANY (ARRAY[
    'COMPRESS',
    'INTERLEAVE',
    'TILED',
    'BLOCKXSIZE',
    'BLOCKYSIZE',
    'JPEG_QUALITY'
])
ORDER BY 1;
Вивід растрових зображень
name      |     type      | default_value
---------------+---------------+---------------
 BLOCKXSIZE    | int           |
 BLOCKYSIZE    | int           |
 COMPRESS      | string-select |
 INTERLEAVE    | string-select | PIXEL
 JPEG_QUALITY  | int           | 75
 TILED         | boolean       |
(6 rows)

Use XMLTABLE to expose selected GTiff creation options as rows. The same pattern can be used without the name filter to inspect the full XML document.

Code
SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';

SELECT option_name, option_type
FROM ST_GDALDrivers() AS driver
CROSS JOIN LATERAL XMLTABLE(
    '/CreationOptionList/Option'
    PASSING (driver.create_options::xml)
    COLUMNS
        option_name text PATH '@name',
        option_type text PATH '@type'
) AS options
WHERE driver.short_name = 'GTiff'
  AND option_name IN ('COMPRESS', 'TILED', 'BIGTIFF')
ORDER BY option_name;
Вивід растрових зображень
option_name |  option_type
-------------+---------------
 BIGTIFF     | string-select
 COMPRESS    | string-select
 TILED       | boolean
(3 rows)

Назва

UpdateRasterSRID — Змінити SRID всіх растрів у вказаній користувачем колонці та таблиці.

Короткий огляд

raster UpdateRasterSRID(name schema_name, name table_name, name column_name, integer new_srid);

raster UpdateRasterSRID(name table_name, name column_name, integer new_srid);

Description

Змінити SRID всіх растрів у вказаній користувачем колонці та таблиці. Перед зміною SRID растрів у вказаній колонці функція видалить усі відповідні обмеження колонки (розмір, вирівнювання та SRID).

[Примітка]

Ця функція не впливає на дані (значення пікселів смуги) растрів. Змінюються лише метадані растра.

Доступність: 2.1.0

Див. також

UpdateGeometrySRID


Назва

ST_CreateOverview — Створити версію заданого растрового покриття зі зниженою роздільною здатністю.

Короткий огляд

regclass ST_CreateOverview(regclass tab, name col, int factor, text algo='NearestNeighbor');

Description

Створіть оглядову таблицю з передискретизованими плитками з вихідної таблиці. Вихідні плитки матимуть той самий розмір, що й вхідні, і покриватимуть ту саму просторову площу з меншою роздільною здатністю (розмір пікселя буде 1/factor від оригіналу в обох напрямках).

Таблиця огляду буде доступна в каталозі raster_overviews і матиме обмеження растрового формату.

Варіанти алгоритму: 'NearestNeighbor', 'Bilinear', 'Cubic', 'CubicSpline' та 'Lanczos'. Докладнішу інформацію див. у розділі: Методи передискретизації GDAL Warp.

Доступність: 2.2.0

Приклад

Вихідна якість загалом краща, але формат продукту створюється повільніше

Code
SELECT ST_CreateOverview('mydata.mytable'::regclass, 'rast', 2, 'Lanczos');

Вивід для швидшої обробки найближчого сусіда за замовчуванням

Code
SELECT ST_CreateOverview('mydata.mytable'::regclass, 'rast', 2);

11.3. Растрові конструктори

  • ST_AddBand — Повертає растр з новим каналом (каналами) заданого типу, доданим із заданим початковим значенням у заданому місці індексу. Якщо індекс не вказано, діапазон додається в кінець.
  • ST_AsRaster — Перетворює геометрію PostGIS у растр PostGIS.
  • ST_AsRasterAgg — Агрегація. Перетворює геометрії PostGIS у новий растр.
  • ST_Band — Повертає один або декілька каналів існуючого растру як новий растр. Корисно для створення нових растрів на основі існуючих.
  • ST_MakeEmptyCoverage — Покрийте геореференційну область сіткою порожніх растрових плиток.
  • ST_MakeEmptyRaster — Повертає порожній растр (без каналів) заданих розмірів (ширина і висота), верхнього лівого кута X і Y, розміру пікселя і повороту (scalex, scaley, skewx і skewy) та системи координат (srid). Якщо передано растр, повертає новий растр з тим самим розміром, вирівнюванням та SRID. Якщо srid не вказано, просторова система координат встановлюється на невідому (0).
  • ST_Tile — Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.
  • ST_Retile — Повернути набір налаштованих плиток з довільно розбитого на плитки растрового покриття.
  • ST_FromGDALRaster — Повертає растр із підтримуваного файлу растра GDAL.

Назва

ST_AddBand — Повертає растр з новим каналом (каналами) заданого типу, доданим із заданим початковим значенням у заданому місці індексу. Якщо індекс не вказано, діапазон додається в кінець.

Короткий огляд

(1) raster ST_AddBand(raster rast, addbandarg[] addbandargset);

(2) raster ST_AddBand(raster rast, integer index, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

(3) raster ST_AddBand(raster rast, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

(4) raster ST_AddBand(raster torast, raster fromrast, integer fromband=1, integer torastindex=at_end);

(5) raster ST_AddBand(raster torast, raster[] fromrasts, integer fromband=1, integer torastindex=at_end);

(6) raster ST_AddBand(raster rast, integer index, text outdbfile, integer[] outdbindex, double precision nodataval=NULL);

(7) raster ST_AddBand(raster rast, text outdbfile, integer[] outdbindex, integer index=at_end, double precision nodataval=NULL);

Description

Повертає растр з новим каналом, доданим у заданому положенні (індексі), заданого типу, заданого початкового значення та заданого значення nodata. Якщо індекс не вказано, діапазон додається в кінець. Якщо fromband не вказано, вважається, що це діапазон 1. Тип пікселя — це рядкове представлення одного з типів пікселів, зазначених у ST_BandPixelType. Якщо вказано існуючий індекс, усі наступні смуги >= цей індекс збільшуються на 1. Якщо вказано початкове значення, яке перевищує максимальне значення типу пікселя, то початкове значення встановлюється на найвище значення, дозволене типом пікселя.

Для варіанту, що приймає масив addbandarg(Варіант 1), конкретне значення індексу addbandarg є відносним до растру на момент додавання до растру каналу, описаної цим addbandarg. Дивіться приклад "Кілька нових каналів" нижче.

Для варіанту, який приймає масив растрів (Варіант 5), якщо torast дорівнює NULL, то канал fromband кожного растра в масиві накопичується в новому растрі.

Для варіантів, які приймають outdbfile (варіанти 6 і 7), значення повинно містити повний шлях до растрового файлу. Файл також повинен бути доступним для процесу сервера postgres.

Покращено: додано підтримку addbandarg 2.1.0.

Покращено: додано підтримку 2.1.0 для нових діапазонів out-db.

Приклади

Single New Band.

This example adds another 8-bit unsigned integer band with pixels initialized to 200.

Code
UPDATE dummy_rast
    SET rast = ST_AddBand(rast, '8BUI'::text, 200)
WHERE rid = 1;
                

Create an empty raster 100x100 units, with upper left right at 0, add 2 bands (band 1 is 0/1 boolean bit switch, band2 allows values 0-15) Uses addbandargs.

Output metadata for the raster bands to verify they are correct.

Code
INSERT INTO dummy_rast(rid, rast)
    VALUES(10, ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 1, -1, 0, 0, 0),
    ARRAY[
        ROW(1, '1BB'::text, 0, NULL),
        ROW(2, '4BUI'::text, 0, NULL)
            ]::addbandarg[]
     )
    );

SELECT  (bmd).*
FROM (SELECT ST_BandMetaData(rast, generate_series(1, 2)) As bmd
    FROM dummy_rast WHERE rid = 10) AS foo;
Вивід растрових зображень
pixeltype | nodatavalue | isoutdb | path
-----------+----------------+-------------+---------+------
 1BB       |             | f       |
 4BUI      |             | f       |

This example outputs metadata for the raster.

Code
SELECT  (rmd).width, (rmd).height, (rmd).numbands
FROM (SELECT ST_MetaData(rast) As rmd
    FROM dummy_rast WHERE rid = 10) AS foo;
Вивід растрових зображень
width | height | numbands
-------+--------+----------
   100 |    100 |        2

Multiple New Bands.

Code
SELECT
    *
FROM ST_BandMetaData(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
        ARRAY[
            ROW(NULL, '8BUI', 255, 0),
            ROW(NULL, '16BUI', 1, 2),
            ROW(2, '32BUI', 100, 12),
            ROW(2, '32BF', 3.14, -1)
        ]::addbandarg[]
    ),
    ARRAY[]::integer[]
);
Вивід растрових зображень
bandnum | pixeltype | nodatavalue | isoutdb | path | outdbbandnum | filesize | filetimestamp
---------+-----------+-------------+---------+------+--------------+----------+---------------
       1 | 8BUI      |           0 | f       | null |         null |     null |          null
       2 | 32BF      |          -1 | f       | null |         null |     null |          null
       3 | 32BUI     |          12 | f       | null |         null |     null |          null
       4 | 16BUI     |           2 | f       | null |         null |     null |          null

Aggregate the 1st band of a table of like rasters into a single raster. With as many bands as there are test_types and as many rows (new rasters) as there are mice. Note that The ORDER BY test_type clause relies on aggregate ORDER BY support. The resulting raster will have a band for each test_type alphabetical by test_type. For mouse lovers: No mice were harmed in this exercise.

Code
SELECT
    mouse,
    ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1) As rast
FROM mice_studies
GROUP BY mouse;
                

New Out-db band.

Code
SELECT
    *
FROM ST_BandMetaData(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
        '/home/raster/mytestraster.tif'::text, NULL::int[]
    ),
    ARRAY[]::integer[]
);
Вивід растрових зображень
bandnum | pixeltype | nodatavalue | isoutdb | path
---------+-----------+-------------+---------+------
       1 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       2 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       3 | 8BUI      |             | t       | /home/raster/mytestraster.tif

Назва

ST_AsRaster — Перетворює геометрію PostGIS у растр PostGIS.

Короткий огляд

raster ST_AsRaster(geometry geom, raster ref, text pixeltype, double precision value=1, double precision nodataval=0, boolean touched=false);

raster ST_AsRaster(geometry geom, raster ref, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx=NULL, double precision gridy=NULL, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, text[] pixeltype, double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, double precision gridx=NULL, double precision gridy=NULL, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, text[] pixeltype, double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

Description

Перетворює геометрію PostGIS у растр PostGIS. Багато варіантів пропонують три групи можливостей для налаштування вирівнювання та розміру пікселів отриманого растру.

Перша група, що складається з двох перших варіантів, створює растр, який має таке саме вирівнювання (scalex, scaley, gridx та gridy), тип пікселів та значення nodata, як і наданий еталонний растр. Зазвичай цей еталонний растр передається шляхом об'єднання таблиці, що містить геометрію, з таблицею, що містить еталонний растр.

Друга група, що складається з чотирьох варіантів, дозволяє встановити розміри растру, задавши параметри розміру пікселя (scalex &scaley та skewx &skewy). Ширина width та висота height отриманого растра будуть скориговані відповідно до розмірів геометрії. У більшості випадків необхідно перетворити цілі аргументи scalex та scaley у подвійну точність, щоб PostgreSQL вибрав правильний варіант.

Третя група, що складається з чотирьох варіантів, дозволяє зафіксувати розміри растра, вказавши розміри растра (width &height). Параметри розміру пікселя (scalex &scaley та skewx &skewy) отриманого растра будуть скориговані відповідно до розмірів геометрії.

Два перших варіанти кожної з цих двох останніх груп дозволяють вказати вирівнювання за допомогою довільного кута сітки вирівнювання (gridx &gridy), а два останніх варіанти використовують верхній лівий кут (upperleftx &upperlefty).

Кожна група варіантів дозволяє створити односмуговий або багатосмуговий растр. Щоб створити багатосмуговий растр, необхідно вказати масив типів пікселів (pixeltype[]), масив початкових значень (value) та масив значень nodata (nodataval). Якщо не вказано, pixeltyped за замовчуванням дорівнює 8BUI, values дорівнює 1, а nodataval дорівнює 0.

Вихідний растр буде мати ту саму просторову систему координат, що й вихідна геометрія. Єдиним винятком є варіанти з еталонним растром. У цьому випадку вихідний растр отримає той самий SRID, що й еталонний растр.

Опціональний параметр touched за замовчуванням має значення false і відповідає опції растрування GDAL ALL_TOUCHED, яка визначає, чи будуть спалені пікселі, до яких торкаються лінії або полігони. Не тільки ті, що знаходяться на шляху рендерингу лінії, або ті, центральна точка яких знаходиться всередині полігону.

Це особливо корисно для візуалізації jpeg- та png-файлів геометрій безпосередньо з бази даних при використанні в поєднанні з ST_AsPNGта іншими функціями сімейства ST_AsGDALRaster.

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Curved geometry inputs are linearized before rasterization, including NURBSCurve inputs handled by PostGIS. TIN and PolyhedralSurface inputs are not supported.

Приклади: Вихідні геометрії у вигляді файлів PNG

This example outputs a black circle on a white background, occupying 150 by 150 pixels.

Code
SELECT ST_AsPNG(
    ST_AsRaster(
        ST_Buffer(ST_Point(1, 5), 10),
        150, 150,
        ARRAY['8BUI', '8BUI', '8BUI'],
        ARRAY[0, 0, 0],
        ARRAY[255, 255, 255]
    )
) AS image;
Вивід растрових зображень
image
-------------------------------
 PNG image, 150 x 150 pixels
                
Figure
Geometry figure for visual-rt-st-asraster-01

This example maps bands to RGB channels, producing the teal value (118,154,118).

Code
SELECT ST_AsPNG(
    ST_AsRaster(
        ST_Buffer('LINESTRING(50 50,150 150,150 50)'::geometry, 10, 'join=bevel'),
        200, 200,
        ARRAY['8BUI', '8BUI', '8BUI'],
        ARRAY[118, 154, 118],
        ARRAY[255, 255, 255]
    )
) AS image;
Вивід растрових зображень
image
-------------------------------
 PNG image, 200 x 200 pixels
                
Figure
Geometry figure for visual-rt-st-asraster-02

Назва

ST_AsRasterAgg — Агрегація. Перетворює геометрії PostGIS у новий растр.

Короткий огляд

raster ST_AsRasterAgg(geometry geom, double precision val, raster ref, text pixeltype, double precision nodataval, text uniontype, boolean touched);

Description

Повертає одноканальний растр, що містить відтворену версію всіх вхідних геометрій, кожна з яких має відповідне значення.

Доступність: 3.6.0

Приклади

Code
WITH inp(g, v) AS (
    VALUES
        ( ST_Buffer(ST_MakePoint(10, 0), 10), 1 ),
        ( ST_Buffer(ST_MakePoint(20, 0), 10), 2 )
),
agg AS (
    SELECT ST_AsRasterAgg(
        g,
        v,
        ST_MakeEmptyRaster(0, 0, 0, 0, 1.0),
        '8BUI',
        99,
        'SUM',
        true
    ) r
    FROM inp
)
SELECT
    ST_Width(r) w,
    ST_Height(r) h,
    ST_Value(r, 'POINT(5 0)') v5_0,
    ST_Value(r, 'POINT(15 0)') v15_0,
    ST_Value(r, 'POINT(25 0)') v25_0
FROM agg;
Вивід растрових зображень
w  | h  | v5_0 | v15_0 | v25_0
----+----+------+-------+-------
 30 | 20 |    1 |     3 |     2
(1 row)

Назва

ST_Band — Повертає один або декілька каналів існуючого растру як новий растр. Корисно для створення нових растрів на основі існуючих.

Короткий огляд

raster ST_Band(raster rast, integer[] nbands = ARRAY[1]);

raster ST_Band(raster rast, integer nband);

raster ST_Band(raster rast, text nbands, character delimiter=,);

Description

Повертає один або декілька каналів існуючого растра як новий растр. Корисно для створення нових растрів з існуючих растрів або експорту лише вибраних каналів растра, або для зміни порядку каналів у растрі. Якщо канал не вказано або будь-який із вказаних каналів не існує в растрі, то повертаються всі канали. Використовується як допоміжна функція в різних функціях, наприклад для видалення каналів.

[Застереження]

Для nbands як текстового варіанту функції, роздільником за замовчуванням є ,, що означає, що ви можете запитувати '1,2,3', а якщо ви хочете використовувати інший роздільник, ви повинні ввести ST_Band(rast, '1@2@3', '@'). Для запиту декількох каналів ми настійно рекомендуємо використовувати масивну форму цієї функції, наприклад ST_Band(rast, '{1,2,3}'::int[]);, оскільки форма text списку смуг може бути видалена в майбутніх версіях PostGIS.

Доступність: 2.0.0

Приклади

This example creates two rasters: one containing band 1 of dummy_rast, and one containing band 2 reclassified as 2BUI.

Code
SELECT ST_NumBands(rast1) As numb1, ST_BandPixelType(rast1) As pix1,
 ST_NumBands(rast2) As numb2, ST_BandPixelType(rast2) As pix2
FROM (
    SELECT ST_Band(rast) As rast1, ST_Reclass(ST_Band(rast, 3), '100-200):1, [200-254:2', '2BUI') As rast2
        FROM dummy_rast
        WHERE rid = 2) As foo;
Вивід растрових зображень
numb1 | pix1 | numb2 | pix2
-------+------+-------+------
     1 | 8BUI |     1 | 2BUI

Return bands 2 and 3 using array cast syntax.

Code
SELECT ST_NumBands(ST_Band(rast, '{2,3}'::int[])) As num_bands
FROM dummy_rast WHERE rid=2;
Вивід растрових зображень
2

Return bands 2 and 3 using array syntax.

Code
SELECT ST_NumBands(ST_Band(rast, ARRAY[2, 3])) As num_bands
    FROM dummy_rast
WHERE rid=2;
                    
Вивід растрових зображень
2

This example uses three distinct shapes as the red, green, and blue bands of a synthetic raster. It compares the original RGB raster with band 2 followed by band 1 twice, and with band 3 alone.

Code
WITH canvas AS (
    SELECT ST_AddBand(
        ST_AddBand(
            ST_AddBand(
                ST_MakeEmptyRaster(128, 128, 0, 128, 1, -1, 0, 0, 0),
                '8BUI'::text, 0::double precision, 0::double precision
            ),
            '8BUI'::text, 0::double precision, 0::double precision
        ),
        '8BUI'::text, 0::double precision, 0::double precision
    ) AS rast
), bands AS (
    SELECT ST_SetValue(
        ST_SetValue(
            ST_SetValue(rast, 1, ST_Buffer('POINT(32 96)'::geometry, 22), 220),
            2, ST_Buffer('LINESTRING(18 20,110 110)'::geometry, 6,
                         'endcap=flat join=bevel'), 210
        ),
        3, ST_Buffer('LINESTRING(10 48,118 48)'::geometry, 7,
                     'endcap=flat'), 180
    ) AS rast
    FROM canvas
)
SELECT ST_AsPNG(rast) AS "original RGB",
    ST_AsPNG(ST_Band(rast, ARRAY[2, 1, 1])) AS "bands 2,1,1",
    ST_AsPNG(ST_Band(rast, 3)) AS "band 3"
FROM bands;
                    
Вивід растрових зображень
original RGB                | bands 2,1,1                | band 3
-----------------------------+----------------------------+----------------------------
 PNG image, 128 x 128 pixels | PNG image, 128 x 128 pixels | PNG image, 128 x 128 pixels
Figure
Geometry figure for visual-rt-st-band-04

Band selection from a multi-band raster.

оригінал (стовпчик rast)

dupe_band

sing_band


Назва

ST_MakeEmptyCoverage — Покрийте геореференційну область сіткою порожніх растрових плиток.

Короткий огляд

raster ST_MakeEmptyCoverage(integer tilewidth, integer tileheight, integer width, integer height, double precision upperleftx, double precision upperlefty, double precision scalex, double precision scaley, double precision skewx, double precision skewy, integer srid=unknown);

Description

Створіть набір растрових плиток за допомогою ST_MakeEmptyRaster. Розмір сітки становить width та height. Розмір плитки становить tilewidth та tileheight. Область, що охоплюється геореференцією, простягається від верхнього лівого кута (upperleftx, upperlefty) до нижнього правого кута (upperleftx + width * scalex, upperlefty + height * scaley).

[Примітка]

Зверніть увагу, що scaley зазвичай є від'ємним для растрів, а scalex — додатним. Отже, нижній правий кут матиме нижче значення y і вище значення x, ніж верхній лівий кут.

Доступність: 2.4.0

Базові приклади

Створіть 16 плиток у сітці 4x4, щоб покрити область WGS84 від верхнього лівого кута (22, 77) до нижнього правого кута (55, 33).

Code
SELECT (ST_MetaData(tile)).* FROM ST_MakeEmptyCoverage(1, 1, 4, 4, 22, 33, (55 - 22)/(4)::float, (33 - 77)/(4)::float, 0., 0., 4326) tile;
Вивід растрових зображень
upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
-------------------------------------------------------------------------------------
         22 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
         22 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
         22 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
         22 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0

Див. також

ST_MakeEmptyRaster


Назва

ST_MakeEmptyRaster — Повертає порожній растр (без каналів) заданих розмірів (ширина і висота), верхнього лівого кута X і Y, розміру пікселя і повороту (scalex, scaley, skewx і skewy) та системи координат (srid). Якщо передано растр, повертає новий растр з тим самим розміром, вирівнюванням та SRID. Якщо srid не вказано, просторова система координат встановлюється на невідому (0).

Короткий огляд

raster ST_MakeEmptyRaster(raster rast);

raster ST_MakeEmptyRaster(integer width, integer height, float8 upperleftx, float8 upperlefty, float8 scalex, float8 scaley, float8 skewx, float8 skewy, integer srid=unknown);

raster ST_MakeEmptyRaster(integer width, integer height, float8 upperleftx, float8 upperlefty, float8 pixelsize);

Description

Повертає порожній растр (без каналу) заданих розмірів (ширина та висота) з геореференцією в просторових (або світових) координатах з верхнім лівим X (upperleftx), верхнім лівим Y (upperlefty), розміром пікселя та обертанням (scalex, scaley, skewx та skewy) і системи координат (srid).

В останній версії для визначення розміру пікселя (pixelsize) використовується єдиний параметр. scalex встановлюється на значення цього аргументу, а scaley — на від'ємне значення цього аргументу. skewx і skewy встановлюються на 0.

Якщо передається існуючий растр, він повертає новий растр з тими ж налаштуваннями метаданих (без каналів).

Якщо srid не вказано, за замовчуванням використовується значення 0. Після створення порожнього растру ви, ймовірно, захочете додати до нього канали і, можливо, відредагувати його. Дивіться ST_AddBandдля визначення каналів і ST_SetValueдля встановлення початкових значень пікселів.

Приклади

Use an existing raster as a template and output metadata of the rasters we added.

Code
INSERT INTO dummy_rast(rid, rast)
VALUES(3, ST_MakeEmptyRaster(100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) );
INSERT INTO dummy_rast(rid, rast)
SELECT 4, ST_MakeEmptyRaster(rast)
FROM dummy_rast WHERE rid = 3;
SELECT
    rid,
    (md).width,
    (md).height,
    (md).scalex,
    (md).scaley,
    (md).srid
FROM (
    SELECT rid, ST_MetaData(rast) AS md
    FROM dummy_rast
    WHERE rid IN (3, 4)
) AS foo
ORDER BY rid;
Вивід растрових зображень
rid | width | height | scalex | scaley | srid
-----+-------+--------+--------+--------+------
   3 |   100 |    100 |      1 |      1 | 4326
   4 |   100 |    100 |      1 |      1 | 4326

Назва

ST_Tile — Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.

Короткий огляд

setof raster ST_Tile(raster rast, int[] nband, integer width, integer height, boolean padwithnodata=FALSE, double precision nodataval=NULL);

setof raster ST_Tile(raster rast, integer nband, integer width, integer height, boolean padwithnodata=FALSE, double precision nodataval=NULL);

setof raster ST_Tile(raster rast, integer width, integer height, boolean padwithnodata=FALSE, double precision nodataval=NULL);

Description

Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.

Якщо padwithnodata = FALSE, крайні плитки з правого та нижнього боків растра можуть мати інші розміри, ніж решта плиток. Якщо padwithnodata = TRUE, всі плитки матимуть однакові розміри, при цьому крайні плитки можуть бути заповнені значеннями NODATA. Якщо для растрових смуг не вказано значення NODATA, його можна вказати, встановивши nodataval.

[Примітка]

Якщо вказаний діапазон вхідного растра знаходиться поза межами бази даних, відповідний діапазон у вихідних растрах також буде поза межами бази даних.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast
), bar AS (
    SELECT ST_Union(rast) AS rast FROM foo
), baz AS (
    SELECT
        row_number() OVER (
            ORDER BY ST_UpperLeftY(rast) DESC, ST_UpperLeftX(rast)
        ) AS tile_id,
        rast
    FROM (
        SELECT ST_Tile(rast, 3, 3, TRUE) AS rast
        FROM bar
    ) AS tiled
)
SELECT
    tile_id,
    ST_UpperLeftX(rast) AS ulx,
    ST_UpperLeftY(rast) AS uly,
    ST_Value(rast, 1, 1, 1) AS band1,
    ST_Value(rast, 2, 1, 1) AS band2
FROM baz;
Вивід растрових зображень
tile_id | ulx | uly | band1 | band2
---------+-----+-----+-------+-------
       1 |   0 |   0 |     1 |    10
       2 |   3 |   0 |     2 |    20
       3 |   6 |   0 |     3 |    30
       4 |   0 |  -3 |     4 |    40
       5 |   3 |  -3 |     5 |    50
       6 |   6 |  -3 |     6 |    60
       7 |   0 |  -6 |     7 |    70
       8 |   3 |  -6 |     8 |    80
       9 |   6 |  -6 |     9 |    90
(9 rows)
Code
WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast
), bar AS (
    SELECT ST_Union(rast) AS rast FROM foo
), baz AS (
    SELECT
        row_number() OVER (
            ORDER BY ST_UpperLeftY(rast) DESC, ST_UpperLeftX(rast)
        ) AS tile_id,
        rast
    FROM (
        SELECT ST_Tile(rast, ARRAY[2], 3, 3) AS rast
        FROM bar
    ) AS tiled
)
SELECT
    tile_id,
    ST_UpperLeftX(rast) AS ulx,
    ST_UpperLeftY(rast) AS uly,
    ST_Value(rast, 1, 1, 1) AS band_value
FROM baz;
Вивід растрових зображень
tile_id | ulx | uly | band_value
---------+-----+-----+------------
       1 |   0 |   0 |         10
       2 |   3 |   0 |         20
       3 |   6 |   0 |         30
       4 |   0 |  -3 |         40
       5 |   3 |  -3 |         50
       6 |   6 |  -3 |         60
       7 |   0 |  -6 |         70
       8 |   3 |  -6 |         80
       9 |   6 |  -6 |         90
(9 rows)

Див. також

ST_Union, ST_Retile


Назва

ST_Retile — Повернути набір налаштованих плиток з довільно розбитого на плитки растрового покриття.

Короткий огляд

SETOF raster ST_Retile(regclass tab, name col, geometry ext, float8 sfx, float8 sfy, int tw, int th, text algo='NearestNeighbor');

Description

Повернути набір плиток із заданим масштабом (sfx, sfy) і максимальний розмір (tw, th), що покривають вказану площу (ext) з даними, що надходять із вказаного растрового покриття (tab, col).

Варіанти алгоритму: 'NearestNeighbor', 'Bilinear', 'Cubic', 'CubicSpline' та 'Lanczos'. Докладнішу інформацію див. у розділі: Методи передискретизації GDAL Warp.

Доступність: 2.2.0

Див. також

ST_CreateOverview


Назва

ST_FromGDALRaster — Повертає растр із підтримуваного файлу растра GDAL.

Короткий огляд

raster ST_FromGDALRaster(bytea gdaldata, integer srid=NULL);

Description

Повертає растр із підтримуваного файлу растра GDAL. gdaldata має тип bytea і повинен містити вміст файлу растра GDAL.

Якщо srid має значення NULL, функція спробує автоматично призначити SRID з растру GDAL. Якщо srid вказано, надане значення замінить будь-який автоматично призначений SRID.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_AsPNG(ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.1, -0.1, 0, 0, 4326), 1, '8BUI', 1, 0), 2, '8BUI', 2, 0), 3, '8BUI', 3, 0)) AS png
),
bar AS (
    SELECT 1 AS rid, ST_FromGDALRaster(png) AS rast FROM foo
    UNION ALL
    SELECT 2 AS rid, ST_FromGDALRaster(png, 3310) AS rast FROM foo
)
SELECT
    rid,
    ST_MetaData(rast) AS metadata,
    ST_SummaryStats(rast, 1) AS stats1,
    ST_SummaryStats(rast, 2) AS stats2,
    ST_SummaryStats(rast, 3) AS stats3
FROM bar
ORDER BY rid;
Вивід растрових зображень
rid |         metadata          |    stats1     |    stats2     |     stats3
-----+---------------------------+---------------+---------------+----------------
   1 | (0,0,2,2,1,-1,0,0,0,3)    | (4,4,1,0,1,1) | (4,8,2,0,2,2) | (4,12,3,0,3,3)
   2 | (0,0,2,2,1,-1,0,0,3310,3) | (4,4,1,0,1,1) | (4,8,2,0,2,2) | (4,12,3,0,3,3)
(2 rows)

Див. також

ST_AsGDALRaster

11.4. Растрові аксесори

  • ST_GeoReference — Повертає метадані геореференції у форматі GDAL або ESRI, як це зазвичай зустрічається у світовому файлі. За замовчуванням використовується GDAL.
  • ST_Height — Повертає висоту растра в пікселях.
  • ST_IsEmpty — Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.
  • ST_MemSize — Повертає обсяг простору (у байтах), який займає растр.
  • ST_MetaData — Повертає основні метадані про растровий об'єкт, такі як розмір пікселя, поворот (перекос), верхній, нижній лівий кут тощо.
  • ST_NumBands — Повертає кількість каналів у растровому об'єкті.
  • ST_PixelHeight — Повертає висоту пікселя в геометричних одиницях просторової системи координат.
  • ST_PixelWidth — Повертає ширину пікселя в геометричних одиницях просторової системи координат.
  • ST_ScaleX — Повертає X-компоненту ширини пікселя в одиницях системи координат.
  • ST_ScaleY — Повертає компонент Y висоти пікселя в одиницях системи координат.
  • ST_RasterToWorldCoord — Повертає верхній лівий кут растра у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Стовпець та рядок починаються з 1.
  • ST_RasterToWorldCoordX — Повертає геометричну координату X у верхньому лівому куті растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.
  • ST_RasterToWorldCoordY — Повертає геометричну координату Y верхнього лівого кута растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.
  • ST_Rotation — Повертає величину повороту растра в радіанах.
  • ST_SkewX — Повертає геоприв'язку X skew (або параметр обертання).
  • ST_SkewY — Повертає геоприв'язку Y skew (або параметр обертання).
  • ST_SRID — Повертає ідентифікатор просторової системи координат растра, як визначено в таблиці spatial_ref_sys.
  • ST_Summary — Повертає текстовий підсумок вмісту растру.
  • ST_UpperLeftX — Повертає верхню ліву координату X растру в проекційній просторовій системі координат.
  • ST_UpperLeftY — Повертає верхню ліву координату Y растру в проекційній просторовій системі координат.
  • ST_Width — Повертає ширину растру в пікселях.
  • ST_WorldToRasterCoord — Повертає верхній лівий кут як стовпець і рядок, задані геометричними координатами X і Y (довгота і широта) або геометрією точки, вираженою в системі координат просторової прив'язки растру.
  • ST_WorldToRasterCoordX — Повертає стовпець у растрі геометрії точки (pt) або світові координати X та Y (xw, yw), представлені у світовій просторовій системі відліку растру.
  • ST_WorldToRasterCoordY — Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw), представлені у світовій просторовій системі координат растра.

Назва

ST_GeoReference — Повертає метадані геореференції у форматі GDAL або ESRI, як це зазвичай зустрічається у світовому файлі. За замовчуванням використовується GDAL.

Короткий огляд

text ST_GeoReference(raster rast, text format=GDAL);

Description

Повертає метадані геореференції, включаючи повернення каретки, у форматі GDAL або ESRI, як це зазвичай бачимо у файлі world. За замовчуванням використовується GDAL, якщо тип не вказано. Тип — це рядок "GDAL" або "ESRI".

Різниця між форматами представлення полягає в наступному:

GDAL:

Вивід растрових зображень
scalex
skewy
skewx
scaley
upperleftx
upperlefty

ESRI:

Вивід растрових зображень
scalex
skewy
skewx
scaley
upperleftx + scalex*0.5
upperlefty + scaley*0.5

Приклади

Code
SELECT
    format,
    replace(ST_GeoReference(rast, format), E'\n', ' | ') AS georef
FROM dummy_rast
CROSS JOIN (VALUES ('ESRI'), ('GDAL')) AS formats(format)
WHERE rid = 1;
Вивід растрових зображень
format | georef
--------+---------------------------------------------------------------------------
 ESRI   | 2.0000000000 | 0.0000000000 | 0.0000000000 | 3.0000000000 | 1.5000000000 | 2.0000000000
 GDAL   | 2.0000000000 | 0.0000000000 | 0.0000000000 | 3.0000000000 | 0.5000000000 | 0.5000000000
(2 rows)

Назва

ST_Height — Повертає висоту растра в пікселях.

Короткий огляд

integer ST_Height(raster rast);

Description

Повертає висоту растру.

Приклади

Code
SELECT rid, ST_Height(rast) As rastheight
FROM dummy_rast;
Вивід растрових зображень
rid | rastheight
-----+------------
   1 |         20
   2 |          5

Див. також

ST_Width


Назва

ST_IsEmpty — Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.

Короткий огляд

boolean ST_IsEmpty(raster rast);

Description

Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.

Доступність: 2.0.0

Приклади

Code
SELECT ST_IsEmpty(ST_MakeEmptyRaster(100, 100, 0, 0, 0, 0, 0, 0))
Вивід растрових зображень
f
Code
SELECT ST_IsEmpty(ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0))
Вивід растрових зображень
t

Див. також

ST_HasNoBand


Назва

ST_MemSize — Повертає обсяг простору (у байтах), який займає растр.

Короткий огляд

integer ST_MemSize(raster rast);

Description

Повертає обсяг простору (у байтах), який займає растр.

Це гарне доповнення до вбудованих функцій PostgreSQL pg_column_size, pg_size_pretty, pg_relation_size, pg_total_relation_size.

[Примітка]

pg_relation_size, що визначає розмір таблиці в байтах, може повертати розмір, менший за ST_MemSize. Це пов'язано з тим, що pg_relation_size не додає розмір тостованих таблиць, а великі геометрії зберігаються в таблицях TOAST. pg_column_size може повертати менший розмір, оскільки він повертає стислий розмір.

pg_total_relation_size - включає таблицю, тостовані таблиці та індекси.

Доступність: 2.2.0

Приклади

Code
SELECT ST_MemSize(ST_AsRaster(ST_Buffer(ST_Point(1, 5), 10, 1000), 150, 150, '8BUI')) AS rast_mem;
Вивід растрових зображень
22568

Див. також


Назва

ST_MetaData — Повертає основні метадані про растровий об'єкт, такі як розмір пікселя, поворот (перекос), верхній, нижній лівий кут тощо.

Короткий огляд

record ST_MetaData(raster rast);

Description

Повертає основні метадані про растровий об'єкт, такі як розмір пікселя, поворот (перекос), верхній, нижній лівий кут тощо. Повертаються стовпці: upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands

Приклади

Code
SELECT
    rid,
    format('(%s, %s)', (md).upperleftx, (md).upperlefty) AS upper_left,
    format('%sx%s', (md).width, (md).height) AS size,
    format('(%s, %s)', (md).scalex, (md).scaley) AS scale,
    format('(%s, %s)', (md).skewx, (md).skewy) AS skew,
    (md).srid AS srid,
    (md).numbands AS numbands
FROM (
    SELECT rid, ST_MetaData(rast) AS md
    FROM dummy_rast
) AS foo
ORDER BY rid;
Вивід растрових зображень
rid |        upper_left        | size  |      scale      |  skew  | srid | numbands
-----+--------------------------+-------+-----------------+--------+------+----------
   1 | (0.5, 0.5)               | 10x20 | (2, 3)          | (0, 0) |    0 |        0
   2 | (3427927.75, 5793244)    | 5x5   | (0.05, -0.05)   | (0, 0) |    0 |        3
(2 rows)

Див. також

ST_BandMetaData, ST_NumBands


Назва

ST_NumBands — Повертає кількість каналів у растровому об'єкті.

Короткий огляд

integer ST_NumBands(raster rast);

Description

Повертає кількість каналів у растровому об'єкті.

Приклади

Code
SELECT rid, ST_NumBands(rast) As numbands
FROM dummy_rast;
Вивід растрових зображень
rid | numbands
----+----------
  1 |        0
  2 |        3

Див. також

ST_Value


Назва

ST_PixelHeight — Повертає висоту пікселя в геометричних одиницях просторової системи координат.

Короткий огляд

double precision ST_PixelHeight(raster rast);

Description

Повертає висоту пікселя в геометричних одиницях просторової системи координат. У звичайному випадку, коли немає нахилу, висота пікселя дорівнює співвідношенню масштабу між геометричними координатами та растровими пікселями.

Дивіться ST_PixelWidthдля схематичного зображення цього взаємозв'язку.

Приклади

Rasters with no skew.

Code
SELECT ST_Height(rast) As rastheight, ST_PixelHeight(rast) As pixheight,
 ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
        ST_SkewY(rast) As skewy
FROM dummy_rast;
Вивід растрових зображень
rastheight | pixheight | scalex | scaley | skewx | skewy
------------+-----------+--------+--------+-------+----------
         20 |         3 |      2 |      3 |     0 |        0
          5 |      0.05 |   0.05 |  -0.05 |     0 |        0

Rasters with skew different than 0.

Code
SELECT ST_Height(rast) As rastheight, ST_PixelHeight(rast) As pixheight,
 ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
        ST_SkewY(rast) As skewy
FROM (SELECT ST_SetSkew(rast, 0.5, 0.5) As rast
        FROM dummy_rast) As skewed;
Вивід растрових зображень
rastheight |     pixheight     | scalex | scaley | skewx | skewy
-----------+-------------------+--------+--------+-------+----------
        20 |  3.04138126514911 |      2 |      3 |   0.5 |      0.5
         5 | 0.502493781056044 |   0.05 |  -0.05 |   0.5 |      0.5

Назва

ST_PixelWidth — Повертає ширину пікселя в геометричних одиницях просторової системи координат.

Короткий огляд

double precision ST_PixelWidth(raster rast);

Description

Повертає ширину пікселя в геометричних одиницях просторової системи координат. У звичайному випадку, коли немає нахилу, ширина пікселя дорівнює співвідношенню масштабу між геометричними координатами та растровими пікселями.

The following executable example draws the two pixel basis vectors on the same coordinate frame as a skewed raster footprint. The i direction vector is (scaleX, skewY); the j direction vector is (skewX, scaleY).

Приклади

Pixel basis vectors and footprint for a raster with non-zero skew.

Code
WITH raster AS (
    SELECT ST_MakeEmptyRaster(
        3, 3, 0, 0,
        2, -3, 1, 0.5,
        0
    ) AS rast
)
SELECT
    ST_ConvexHull(rast) AS footprint,
    ST_MakeLine(
        ST_Point(0, 0),
        ST_Point(ST_ScaleX(rast), ST_SkewY(rast))
    ) AS "i direction (scaleX, skewY)",
    ST_MakeLine(
        ST_Point(0, 0),
        ST_Point(ST_SkewX(rast), ST_ScaleY(rast))
    ) AS "j direction (skewX, scaleY)"
FROM raster;
Вивід растрових зображень
POLYGON((0 0,6 1.5,9 -7.5,3 -9,0 0)) | LINESTRING(0 0,2 0.5) | LINESTRING(0 0,1 -3)
Figure
Geometry figure for visual-rt-st-pixelwidth-01

Rasters with no skew.

Code
SELECT ST_Width(rast) As rastwidth, ST_PixelWidth(rast) As pixwidth,
ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
ST_SkewY(rast) As skewy
FROM dummy_rast;
Вивід растрових зображень
rastwidth | pixwidth | scalex | scaley | skewx | skewy
-----------+----------+--------+--------+-------+----------
10 |        2 |      2 |      3 |     0 |        0
 5 |     0.05 |   0.05 |  -0.05 |     0 |        0

Rasters with skew different than 0.

Code
SELECT ST_Width(rast) As rastwidth, ST_PixelWidth(rast) As pixwidth,
ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
ST_SkewY(rast) As skewy
FROM (SELECT ST_SetSkew(rast, 0.5, 0.5) As rast
FROM dummy_rast) As skewed;
Вивід растрових зображень
rastwidth |     pixwidth      | scalex | scaley | skewx | skewy
-----------+-------------------+--------+--------+-------+----------
10 |  2.06155281280883 |      2 |      3 |   0.5 |      0.5
 5 | 0.502493781056044 |   0.05 |  -0.05 |   0.5 |      0.5

Назва

ST_ScaleX — Повертає X-компоненту ширини пікселя в одиницях системи координат.

Короткий огляд

float8 ST_ScaleX(raster rast);

Description

Повертає компонент X ширини пікселя в одиницях системи координат. Докладнішу інформацію див. у World File.

Змінено: 2.0.0. У версіях WKTRaster це називалося ST_PixelSizeX.

Приклади

Code
SELECT rid, ST_ScaleX(rast) As rastpixwidth
FROM dummy_rast;
Вивід растрових зображень
rid | rastpixwidth
-----+--------------
   1 |            2
   2 |         0.05

Див. також

ST_Width


Назва

ST_ScaleY — Повертає компонент Y висоти пікселя в одиницях системи координат.

Короткий огляд

float8 ST_ScaleY(raster rast);

Description

Повертає компонент Y висоти пікселя в одиницях системи координат. Може бути від'ємним. Докладнішу інформацію див. у World File.

Змінено: 2.0.0. У версіях WKTRaster це називалося ST_PixelSizeY.

Приклади

Code
SELECT rid, ST_ScaleY(rast) As rastpixheight
FROM dummy_rast;
Вивід растрових зображень
rid | rastpixheight
-----+---------------
   1 |             3
   2 |         -0.05

Див. також

ST_Height


Назва

ST_RasterToWorldCoord — Повертає верхній лівий кут растра у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Стовпець та рядок починаються з 1.

Короткий огляд

record ST_RasterToWorldCoord(raster rast, integer xcolumn, integer yrow);

Description

Повертає верхній лівий кут у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Повернені координати X та Y виражені в геометричних одиницях растру з геореференцією. Нумерація стовпців і рядків починається з 1, але якщо будь-який параметр передається як нуль, від'ємне число або число, більше за відповідний розмір растра, то будуть повернуті координати за межами растра, припускаючи, що сітка растра застосовується за межами растра.

Доступність: 2.1.0

Приклади

This example uses a non-skewed raster.

Code
SELECT
    rid,
    (ST_RasterToWorldCoord(rast, 1, 1)).*,
    (ST_RasterToWorldCoord(rast, 2, 2)).*
FROM dummy_rast
Вивід растрових зображень
rid | longitude  | latitude | longitude |  latitude
-----+------------+----------+-----------+------------
   1 |        0.5 |      0.5 |       2.5 |        3.5
   2 | 3427927.75 |  5793244 | 3427927.8 | 5793243.95

This example uses a skewed raster.

Code
SELECT
    rid,
    (ST_RasterToWorldCoord(rast, 1, 1)).*,
    (ST_RasterToWorldCoord(rast, 2, 3)).*
FROM (
    SELECT
        rid,
        ST_SetSkew(rast, 100.5, 0) As rast
    FROM dummy_rast
) As foo
Вивід растрових зображень
rid | longitude  | latitude | longitude | latitude
-----+------------+----------+-----------+-----------
   1 |        0.5 |      0.5 |     203.5 |       6.5
   2 | 3427927.75 |  5793244 | 3428128.8 | 5793243.9

Назва

ST_RasterToWorldCoordX — Повертає геометричну координату X у верхньому лівому куті растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.

Короткий огляд

float8 ST_RasterToWorldCoordX(raster rast, integer xcolumn);

float8 ST_RasterToWorldCoordX(raster rast, integer xcolumn, integer yrow);

Description

Повертає верхню ліву координату X рядка стовпця растра в геометричних одиницях геореферентного растра. Нумерація стовпців і рядків починається з 1, але якщо ви передасте від'ємне число або число, яке перевищує кількість стовпців у растрі, ви отримаєте координати поза межами файлу растра ліворуч або праворуч, припускаючи, що нахил і розміри пікселів такі самі, як у вибраному растрі.

[Примітка]

Для невикривлених растрів достатньо вказати стовпець X. Для викривлених растрів геореферентна координата є функцією ST_ScaleX і ST_SkewX, а також рядка і стовпця. Якщо для викривленого растру вказати тільки стовпець X, буде видано помилку.

Змінено: 2.1.0 У попередніх версіях це називалося ST_Raster2WorldCoordX.

Приклади

This example shows that providing a column is sufficient for a non-skewed raster.

Code
SELECT rid, ST_RasterToWorldCoordX(rast, 1) As x1coord,
    ST_RasterToWorldCoordX(rast, 2) As x2coord,
    ST_ScaleX(rast) As pixelx
FROM dummy_rast;
Вивід растрових зображень
rid |  x1coord   |  x2coord  | pixelx
-----+------------+-----------+--------
   1 |        0.5 |       2.5 |      2
   2 | 3427927.75 | 3427927.8 |   0.05

For fun let's skew it.

Code
SELECT rid, ST_RasterToWorldCoordX(rast, 1, 1) As x1coord,
    ST_RasterToWorldCoordX(rast, 2, 3) As x2coord,
    ST_ScaleX(rast) As pixelx
FROM (SELECT rid, ST_SetSkew(rast, 100.5, 0) As rast FROM dummy_rast) As foo;
Вивід растрових зображень
rid |  x1coord   |  x2coord  | pixelx
-----+------------+-----------+--------
   1 |        0.5 |     203.5 |      2
   2 | 3427927.75 | 3428128.8 |   0.05

Назва

ST_RasterToWorldCoordY — Повертає геометричну координату Y верхнього лівого кута растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.

Короткий огляд

float8 ST_RasterToWorldCoordY(raster rast, integer yrow);

float8 ST_RasterToWorldCoordY(raster rast, integer xcolumn, integer yrow);

Description

Повертає верхню ліву координату Y рядка стовпця растра в геометричних одиницях геореферентного растра. Нумерація стовпців і рядків починається з 1, але якщо ви введете від'ємне число або число, яке перевищує кількість стовпців/рядків у растрі, ви отримаєте координати поза межами файлу растра ліворуч або праворуч, припускаючи, що нахил і розміри пікселів такі самі, як у вибраній растровій плитці.

[Примітка]

Для невикривлених растрів достатньо вказати стовпець Y. Для викривлених растрів геореферентна координата є функцією ST_ScaleY і ST_SkewY, а також рядка і стовпця. Якщо для викривленого растра вказати тільки рядок Y, буде видано повідомлення про помилку.

Змінено: 2.1.0 У попередніх версіях це називалося ST_Raster2WorldCoordY

Приклади

Non-skewed raster providing row is sufficient.

Code
SELECT rid, ST_RasterToWorldCoordY(rast, 1) As y1coord,
    ST_RasterToWorldCoordY(rast, 3) As y2coord,
    ST_ScaleY(rast) As pixely
FROM dummy_rast;
Вивід растрових зображень
rid | y1coord |  y2coord  | pixely
-----+---------+-----------+--------
   1 |     0.5 |       6.5 |      3
   2 | 5793244 | 5793243.9 |  -0.05

For fun let's skew it.

Code
SELECT rid, ST_RasterToWorldCoordY(rast, 1, 1) As y1coord,
    ST_RasterToWorldCoordY(rast, 2, 3) As y2coord,
    ST_ScaleY(rast) As pixely
FROM (SELECT rid, ST_SetSkew(rast, 0, 100.5) As rast FROM dummy_rast) As foo;
Вивід растрових зображень
rid | y1coord |  y2coord  | pixely
-----+---------+-----------+--------
   1 |     0.5 |       107 |      3
   2 | 5793244 | 5793344.4 |  -0.05

Назва

ST_Rotation — Повертає величину повороту растра в радіанах.

Короткий огляд

float8 ST_Rotation(raster rast);

Description

Повертає рівномірне обертання растру в радіанах. Якщо растр не має рівномірного обертання, повертається NaN. Докладнішу інформацію див. у розділі World File.

Приклади

Code
SELECT rid, ST_Rotation(ST_SetScale(ST_SetSkew(rast, sqrt(2)), sqrt(2))) AS rot FROM dummy_rast;
Вивід растрових зображень
rid |        rot
-----+-------------------
   1 | 0.785398163397448
   2 | 0.785398163397448

Назва

ST_SkewX — Повертає геоприв'язку X skew (або параметр обертання).

Короткий огляд

float8 ST_SkewX(raster rast);

Description

Повертає геоприв'язку X skew (або параметр обертання). Докладнішу інформацію див. у World File.

Приклади

Code
WITH refs AS (
    SELECT
        rid,
        format('(%s, %s)', ST_SkewX(rast), ST_SkewY(rast)) AS skew,
        string_to_array(ST_GeoReference(rast), E'\n') AS georef
    FROM dummy_rast
)
SELECT
    rid,
    skew,
    term,
    georef[idx] AS value
FROM refs
CROSS JOIN (VALUES
    (1, 'scaleX'),
    (2, 'skewY'),
    (3, 'skewX'),
    (4, 'scaleY'),
    (5, 'originX'),
    (6, 'originY')
) AS parts(idx, term)
ORDER BY rid, idx;
Вивід растрових зображень
rid |  skew  |  term   |       value
-----+--------+---------+--------------------
   1 | (0, 0) | scaleX  | 2.0000000000
   1 | (0, 0) | skewY   | 0.0000000000
   1 | (0, 0) | skewX   | 0.0000000000
   1 | (0, 0) | scaleY  | 3.0000000000
   1 | (0, 0) | originX | 0.5000000000
   1 | (0, 0) | originY | 0.5000000000
   2 | (0, 0) | scaleX  | 0.0500000000
   2 | (0, 0) | skewY   | 0.0000000000
   2 | (0, 0) | skewX   | 0.0000000000
   2 | (0, 0) | scaleY  | -0.0500000000
   2 | (0, 0) | originX | 3427927.7500000000
   2 | (0, 0) | originY | 5793244.0000000000
(12 rows)

Див. також

ST_GeoReference, ST_SkewY, ST_SetSkew


Назва

ST_SkewY — Повертає геоприв'язку Y skew (або параметр обертання).

Короткий огляд

float8 ST_SkewY(raster rast);

Description

Повертає геоприв'язку Y skew (або параметр обертання). Докладнішу інформацію див. у World File.

Приклади

Code
WITH refs AS (
    SELECT
        rid,
        format('(%s, %s)', ST_SkewX(rast), ST_SkewY(rast)) AS skew,
        string_to_array(ST_GeoReference(rast), E'\n') AS georef
    FROM dummy_rast
)
SELECT
    rid,
    skew,
    term,
    georef[idx] AS value
FROM refs
CROSS JOIN (VALUES
    (1, 'scaleX'),
    (2, 'skewY'),
    (3, 'skewX'),
    (4, 'scaleY'),
    (5, 'originX'),
    (6, 'originY')
) AS parts(idx, term)
ORDER BY rid, idx;
Вивід растрових зображень
rid |  skew  |  term   |       value
-----+--------+---------+--------------------
   1 | (0, 0) | scaleX  | 2.0000000000
   1 | (0, 0) | skewY   | 0.0000000000
   1 | (0, 0) | skewX   | 0.0000000000
   1 | (0, 0) | scaleY  | 3.0000000000
   1 | (0, 0) | originX | 0.5000000000
   1 | (0, 0) | originY | 0.5000000000
   2 | (0, 0) | scaleX  | 0.0500000000
   2 | (0, 0) | skewY   | 0.0000000000
   2 | (0, 0) | skewX   | 0.0000000000
   2 | (0, 0) | scaleY  | -0.0500000000
   2 | (0, 0) | originX | 3427927.7500000000
   2 | (0, 0) | originY | 5793244.0000000000
(12 rows)

Див. також

ST_GeoReference, ST_SkewX, ST_SetSkew


Назва

ST_SRID — Повертає ідентифікатор просторової системи координат растра, як визначено в таблиці spatial_ref_sys.

Короткий огляд

integer ST_SRID(raster rast);

Description

Повертає ідентифікатор просторової системи координат растрового об'єкта, як визначено в таблиці spatial_ref_sys.

[Примітка]

Растери та геометрії без геореференції використовують SRID 0.

Приклади

Code
SELECT ST_SRID(rast) As srid
FROM dummy_rast WHERE rid=1;
Вивід растрових зображень
0

Назва

ST_Summary — Повертає текстовий підсумок вмісту растру.

Короткий огляд

text ST_Summary(raster rast);

Description

Повертає текстовий підсумок вмісту растру.

Доступність: 2.1.0

Приклади

Code
SELECT ST_Summary(ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            2, '32BF', 0, -9999
        ),
        3, '16BSI', 0, NULL
    )
);
Вивід растрових зображень
Raster of 10x10 pixels has 3 bands and extent of BOX(0 -10,10 0)+
     band 1 of pixtype 8BUI is in-db with NODATA value of 0      +
     band 2 of pixtype 32BF is in-db with NODATA value of -9999  +
     band 3 of pixtype 16BSI is in-db with no NODATA value
(1 row)

Назва

ST_UpperLeftX — Повертає верхню ліву координату X растру в проекційній просторовій системі координат.

Короткий огляд

float8 ST_UpperLeftX(raster rast);

Description

Повертає верхню ліву координату X растра в проекційній просторовій системі відліку.

Приклади

Code
SELECt rid, ST_UpperLeftX(rast) As ulx
FROM dummy_rast;
Вивід растрових зображень
rid |    ulx
-----+------------
   1 |        0.5
   2 | 3427927.75

Див. також

ST_UpperLeftY, ST_GeoReference, Box3D


Назва

ST_UpperLeftY — Повертає верхню ліву координату Y растру в проекційній просторовій системі координат.

Короткий огляд

float8 ST_UpperLeftY(raster rast);

Description

Повертає верхню ліву координату Y растру в проекційній просторовій системі координат.

Приклади

Code
SELECT rid, ST_UpperLeftY(rast) As uly
FROM dummy_rast;
Вивід растрових зображень
rid |   uly
-----+---------
   1 |     0.5
   2 | 5793244

Див. також

ST_UpperLeftX, ST_GeoReference, Box3D


Назва

ST_Width — Повертає ширину растру в пікселях.

Короткий огляд

integer ST_Width(raster rast);

Description

Повертає ширину растра в пікселях.

Приклади

Code
SELECT ST_Width(rast) As rastwidth
FROM dummy_rast WHERE rid=1;
Вивід растрових зображень
10

Див. також

ST_Height


Назва

ST_WorldToRasterCoord — Повертає верхній лівий кут як стовпець і рядок, задані геометричними координатами X і Y (довгота і широта) або геометрією точки, вираженою в системі координат просторової прив'язки растру.

Короткий огляд

record ST_WorldToRasterCoord(raster rast, geometry pt);

record ST_WorldToRasterCoord(raster rast, double precision longitude, double precision latitude);

Description

Повертає верхній лівий кут як стовпець і рядок, задані геометричними X і Y (довгота і широта) або геометрією точки. Ця функція працює незалежно від того, чи знаходяться геометричні X і Y або геометрія точки за межами растра. Геометричні X і Y повинні бути виражені в системі координат просторової прив'язки растра.

Доступність: 2.1.0

Приклади

Code
SELECT
    rid,
    (ST_WorldToRasterCoord(rast, 3427927.8, 20.5)).*,
    (ST_WorldToRasterCoord(rast, ST_GeomFromText('POINT(3427927.8 20.5)', ST_SRID(rast)))).*
FROM dummy_rast;
Вивід растрових зображень
rid | columnx |   rowy    | columnx |   rowy
-----+---------+-----------+---------+-----------
   1 | 1713964 |         7 | 1713964 |         7
   2 |       2 | 115864471 |       2 | 115864471

Назва

ST_WorldToRasterCoordX — Повертає стовпець у растрі геометрії точки (pt) або світові координати X та Y (xw, yw), представлені у світовій просторовій системі відліку растру.

Короткий огляд

integer ST_WorldToRasterCoordX(raster rast, geometry pt);

integer ST_WorldToRasterCoordX(raster rast, double precision xw);

integer ST_WorldToRasterCoordX(raster rast, double precision xw, double precision yw);

Description

Повертає стовпець у растрі геометрії точки (pt) або світові координати X і Y (xw, yw). Точка або (якщо растр перекошений, потрібні обидві світові координати xw і yw). Якщо растр не перекошений, достатньо xw. Світові координати знаходяться в просторовій системі координат растра.

Змінено: 2.1.0 У попередніх версіях це називалося ST_World2RasterCoordX

Приклади

Code
SELECT rid, ST_WorldToRasterCoordX(rast, 3427927.8) As xcoord,
        ST_WorldToRasterCoordX(rast, 3427927.8, 20.5) As xcoord_xwyw,
        ST_WorldToRasterCoordX(rast, ST_GeomFromText('POINT(3427927.8 20.5)', ST_SRID(rast))) As ptxcoord
FROM dummy_rast;
Вивід растрових зображень
rid | xcoord  |  xcoord_xwyw   | ptxcoord
-----+---------+---------+----------
   1 | 1713964 | 1713964 |  1713964
   2 |       1 |       1 |        1

Назва

ST_WorldToRasterCoordY — Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw), представлені у світовій просторовій системі координат растра.

Короткий огляд

integer ST_WorldToRasterCoordY(raster rast, geometry pt);

integer ST_WorldToRasterCoordY(raster rast, double precision xw);

integer ST_WorldToRasterCoordY(raster rast, double precision xw, double precision yw);

Description

Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw). Точка або (якщо растр перекошений, потрібні обидві світові координати xw і yw). Якщо растр не перекошений, достатньо xw. Світові координати знаходяться в просторовій системі координат растра.

Змінено: 2.1.0 У попередніх версіях це називалося ST_World2RasterCoordY

Приклади

Code
SELECT rid, ST_WorldToRasterCoordY(rast, 20.5) As ycoord,
        ST_WorldToRasterCoordY(rast, 3427927.8, 20.5) As ycoord_xwyw,
        ST_WorldToRasterCoordY(rast, ST_GeomFromText('POINT(3427927.8 20.5)', ST_SRID(rast))) As ptycoord
FROM dummy_rast;
Вивід растрових зображень
rid |  ycoord   | ycoord_xwyw | ptycoord
-----+-----------+-------------+-----------
   1 |         7 |           7 |         7
   2 | 115864471 |   115864471 | 115864471

11.5. Аксесуари для растрових каналів

  • ST_BandMetaData — Повертає основні метадані для конкретного растрового каналу. Якщо не вказано, припускається канал № 1.
  • ST_BandNoDataValue — Повертає значення в заданому каналі, яке не представляє даних. Якщо карал № 1 не задано.
  • ST_BandIsNoData — Повертає значення true, якщо канал заповнений тільки значеннями nodata.
  • ST_BandPath — Повертає шлях до системного файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, приймається значення 1.
  • ST_BandFileSize — Повертає розмір файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, вважається, що він дорівнює 1.
  • ST_BandFileTimestamp — Повертає мітку часу файлу смуги, що зберігається у файловій системі. Якщо номер смуги не вказано, вважається, що він дорівнює 1.
  • ST_BandPixelType — Повертає тип пікселя для заданого діапазону. Якщо діапазон не вказано, приймається значення 1.
  • ST_MinPossibleValue — Повертає мінімальне значення, яке може зберігати цей тип пікселів.
  • ST_HasNoBand — Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.

Назва

ST_BandMetaData — Повертає основні метадані для конкретного растрового каналу. Якщо не вказано, припускається канал № 1.

Короткий огляд

(1) record ST_BandMetaData(raster rast, integer band=1);

(2) record ST_BandMetaData(raster rast, integer[] band);

Description

Повертає основні метадані про растровий канал. Повертаються стовпці: pixeltype, nodatavalue, isoutdb, path, outdbbandnum, filesize, filetimestamp.

[Примітка]

Якщо растр не містить каналів, то видається помилка.

[Примітка]

Якщо канал не має значення NODATA, nodatavalue дорівнює NULL.

[Примітка]

Якщо isoutdb має значення False, path, outdbbandnum, filesize та filetimestamp мають значення NULL. Якщо доступ до outdb вимкнено, filesize та filetimestamp також матимуть значення NULL.

Покращено: 2.5.0, додано outdbbandnum, filesize та filetimestamp для растрів outdb.

Приклади

Variant 1.

Code
SELECT
    rid,
    (foo.md).*
FROM (
    SELECT
        rid,
        ST_BandMetaData(rast, 1) AS md
    FROM dummy_rast
    WHERE rid=2
) As foo;
Вивід растрових зображень
rid | pixeltype | nodatavalue | isoutdb | path | outdbbandnum
-----+-----------+-------------+---------+------+--------------
   2 | 8BUI      |           0 | f       |      |
(1 row)
                

Variant 2.

Code
WITH foo AS (
    SELECT
        ST_AddBand(NULL::raster, '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif', NULL::int[]) AS rast
)
SELECT
    bandnum,
    pixeltype,
    isoutdb,
    regexp_replace(path, '^.*/', '') AS file,
    outdbbandnum
FROM ST_BandMetaData((SELECT rast FROM foo),
    ARRAY[1, 3, 2]::int[]
);
Вивід растрових зображень
bandnum | pixeltype | isoutdb |     file      | outdbbandnum
---------+-----------+---------+---------------+--------------
       1 | 8BUI      | t       | Projected.tif |            1
       3 | 8BUI      | t       | Projected.tif |            3
       2 | 8BUI      | t       | Projected.tif |            2

Див. також

ST_MetaData, ST_BandPixelType


Назва

ST_BandNoDataValue — Повертає значення в заданому каналі, яке не представляє даних. Якщо карал № 1 не задано.

Короткий огляд

double precision ST_BandNoDataValue(raster rast, integer bandnum=1);

Description

Повертає значення, яке не представляє даних для каналу

Приклади

Code
SELECT ST_BandNoDataValue(rast, 1) As bnval1,
    ST_BandNoDataValue(rast, 2) As bnval2, ST_BandNoDataValue(rast, 3) As bnval3
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
bnval1 | bnval2 | bnval3
--------+--------+--------
      0 |      0 |      0

Див. також

ST_NumBands


Назва

ST_BandIsNoData — Повертає значення true, якщо канал заповнений тільки значеннями nodata.

Короткий огляд

boolean ST_BandIsNoData(raster rast, integer band, boolean forceChecking=false);

boolean ST_BandIsNoData(raster rast, boolean forceChecking=false);

Description

Повертає значення true, якщо канал заповнений тільки значеннями nodata. Якщо не вказано, припускається канал 1. Якщо останній аргумент дорівнює TRUE, весь канал перевіряється піксель за пікселем. В іншому випадку функція просто повертає значення прапорця isnodata для каналу. Якщо не вказано, значенням за замовчуванням для цього параметра є FALSE.

Доступність: 2.0.0

[Примітка]

If the flag is dirty (this is, the result is different using TRUE as last parameter and not using it) you should update the raster to set this flag to true, by using ST_SetBandIsNoData(), or ST_SetBandNoDataValue() with TRUE as last argument. See ST_SetBandIsNoData.

Приклади

This example creates a dummy table with one raster column. The raster has two bands and one pixel per band. In the first band, the NODATA value and pixel value are both 3. In the second band, the NODATA value is 13 and the pixel value is 4.

Code
create table dummy_rast (rid integer, rast raster);

insert into dummy_rast values(
1,
(
'01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0200' -- nBands (uint16 0)
||
'17263529ED684A3F' -- scaleX (float64 0.000805965234044584)
||
'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458)
||
'1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098)
||
'718F0E9A27A44840' -- ipY (float64 49.2824585505576)
||
'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707)
||
'7550EB853EC32B3F' -- skewY (float64 0.000211812383858704)
||
'E6100000' -- SRID (int32 4326)
||
'0100' -- width (uint16 1)
||
'0100' -- height (uint16 1)
||
'6' -- hasnodatavalue and isnodata value set to true.
||
'2' -- first band type (4BUI)
||
'03' -- novalue==3
||
'03' -- pixel(0,0)==3 (same that nodata)
||
'0' -- hasnodatavalue set to false
||
'5' -- second band type (16BSI)
||
'0D00' -- novalue==13
||
'0400' -- pixel(0,0)==4
)::raster
);

select ST_BandIsNoData(rast, 1) from dummy_rast where rid = 1; -- Expected true
select ST_BandIsNoData(rast, 2) from dummy_rast where rid = 1; -- Expected false
            

Назва

ST_BandPath — Повертає шлях до системного файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, приймається значення 1.

Короткий огляд

text ST_BandPath(raster rast, integer bandnum=1);

Description

Повертає шлях до системного файлу каналу растра. Видає помилку, якщо викликається з каналом в db.

Приклади

Code
WITH foo AS (
    SELECT ST_AddBand(
        NULL::raster,
        '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif',
        NULL::int[]
    ) AS rast
)
SELECT bandnum, ST_BandPath(rast, bandnum) AS path
FROM foo
CROSS JOIN generate_series(1, 3) AS bandnum;
Вивід растрових зображень
bandnum |                                    path
---------+----------------------------------------------------------------------------
       1 | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif
       2 | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif
       3 | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif

Назва

ST_BandFileSize — Повертає розмір файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, вважається, що він дорівнює 1.

Короткий огляд

bigint ST_BandFileSize(raster rast, integer bandnum=1);

Description

Повертає розмір файлу каналу, що зберігається у файловій системі. Видає помилку, якщо викликається зі каналу в db або якщо доступ outdb не ввімкнено.

Ця функція зазвичай використовується разом із ST_BandPath() та ST_BandFileTimestamp(), щоб клієнт міг визначити, чи ім'я файлу растрового зображення outdb, яке він бачить, збігається з ім'ям файлу, яке бачить сервер.

Доступність: 2.5.0

Приклади

Code
SELECT ST_BandFileSize(rast, 1) FROM dummy_rast WHERE rid = 1;
Вивід растрових зображень
240574

Назва

ST_BandFileTimestamp — Повертає мітку часу файлу смуги, що зберігається у файловій системі. Якщо номер смуги не вказано, вважається, що він дорівнює 1.

Короткий огляд

bigint ST_BandFileTimestamp(raster rast, integer bandnum=1);

Description

Повертає мітку часу файлу (кількість секунд з 1 січня 1970 року 00:00:00 UTC) смуги, що зберігається у файловій системі. Видає помилку, якщо викликається зі смугою в базі даних або якщо доступ outdb не ввімкнено.

Ця функція зазвичай використовується разом з ST_BandPath() та ST_BandFileSize(), щоб клієнт міг визначити, чи ім'я файлу растрового зображення outdb, яке він бачить, збігається з ім'ям файлу, яке бачить сервер.

Доступність: 2.5.0

Приклади

Code
SELECT ST_BandFileTimestamp(rast, 1) FROM dummy_rast WHERE rid = 1;
Вивід растрових зображень
1521807257

Назва

ST_BandPixelType — Повертає тип пікселя для заданого діапазону. Якщо діапазон не вказано, приймається значення 1.

Короткий огляд

text ST_BandPixelType(raster rast, integer bandnum=1);

Description

Повертає ім'я, що описує тип даних і розмір значень, що зберігаються в кожній комірці заданого діапазону.

Існує 11 типів пікселів. Підтримуються такі типи пікселів:

  • 1BB - 1-бітний логічний

  • 2BUI - 2-бітне ціле число без знака

  • 4BUI - 4-бітне ціле число без знака

  • 8BSI – 8-бітне ціле число зі знаком

  • 8BUI – 8-бітне ціле число без знака

  • 16BSI – 16-бітне ціле число зі знаком

  • 16BUI – 16-бітне ціле число без знака

  • 32BSI – 32-бітне ціле число без знака

  • 32BUI – 32-бітне ціле число без знака

  • 32BF - 32-бітний з плаваючою комою

  • 64BF - 64-бітний з плаваючою комою

Приклади

Code
SELECT ST_BandPixelType(rast, 1) As btype1,
    ST_BandPixelType(rast, 2) As btype2, ST_BandPixelType(rast, 3) As btype3
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
btype1 | btype2 | btype3
--------+--------+--------
 8BUI   | 8BUI   | 8BUI

Див. також

ST_NumBands


Назва

ST_MinPossibleValue — Повертає мінімальне значення, яке може зберігати цей тип пікселів.

Короткий огляд

integer ST_MinPossibleValue(text pixeltype);

Description

Повертає мінімальне значення, яке може зберігати цей тип пікселів.

Приклади

Code
SELECT ST_MinPossibleValue('16BSI');
Вивід растрових зображень
-32768
Code
SELECT ST_MinPossibleValue('8BUI');
Вивід растрових зображень
0

Див. також

ST_BandPixelType


Назва

ST_HasNoBand — Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.

Короткий огляд

boolean ST_HasNoBand(raster rast, integer bandnum=1);

Description

Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.

Доступність: 2.0.0

Приклади

Code
SELECT rid, ST_HasNoBand(rast) As hb1, ST_HasNoBand(rast, 2) as hb2,
ST_HasNoBand(rast, 4) as hb4, ST_NumBands(rast) As numbands
FROM dummy_rast;
Вивід растрових зображень
rid | hb1 | hb2 | hb4 | numbands
-----+-----+-----+-----+----------
1 | t   | t   | t   |        0
2 | f   | f   | t   |        3

Див. також

ST_NumBands

11.6. Доступ до растрових пікселів та їх налаштування

  • ST_PixelAsPolygon — Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.
  • ST_PixelAsPolygons — Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.
  • ST_PixelAsPoint — Повертає геометрію точки верхнього лівого кута пікселя.
  • ST_PixelAsPoints — Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.
  • ST_PixelAsCentroid — Повертає центроїд (точкову геометрію) області, представленої пікселем.
  • ST_PixelAsCentroids — Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.
  • ST_Value — Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.
  • ST_NearestValue — Повертає найближче значення, яке не є NODATA, пікселя заданого діапазону, визначеного стовпцем x і рядком y, або геометричної точки, вираженої в тій самій системі координат просторової прив'язки, що й растр.
  • ST_SetZ — Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.
  • ST_SetM — Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растра, скопійованими в розмірність M за допомогою заданого алгоритму ресемплювання.
  • ST_Neighborhood — Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр.
  • ST_SetValue — Повертає модифікований растр, отриманий в результаті встановлення значення заданого каналу в заданому стовпці x, рядку y пікселя або пікселів, що перетинають певну геометрію. Номери каналів починаються з 1 і, якщо не вказано інше, приймаються за 1.
  • ST_SetValues — Повертає змінений растр, отриманий в результаті встановлення значень заданого каналу.
  • ST_DumpValues — Отримати значення вказаного каналу у вигляді двовимірного масиву.
  • ST_PixelOfValue — Отримати координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку.

Назва

ST_PixelAsPolygon — Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.

Короткий огляд

geometry ST_PixelAsPolygon(raster rast, integer columnx, integer rowy);

Description

Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.

Доступність: 2.0.0

Приклади

This example returns a raster pixel polygon.

Code
SELECT i, j, ST_PixelAsPolygon(foo.rast, i, j) As b1pgeom
FROM dummy_rast As foo
    CROSS JOIN generate_series(1, 2) As i
    CROSS JOIN generate_series(1, 1) As j
WHERE rid=2;
Вивід растрових зображень
i | j |                                                    b1pgeom
---+---+-----------------------------------------------------------------------------
 1 | 1 | POLYGON((3427927.75 5793244,3427927.8 5793244,3427927.8 5793243.95,...
 2 | 1 | POLYGON((3427927.8 5793244,3427927.85 5793244,3427927.85 5793243.95, ..

Назва

ST_PixelAsPolygons — Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.

Короткий огляд

setof record ST_PixelAsPolygons(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

Description

Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням (подвійна точність), X- та Y-координатами растру (цілими числами) кожного пікселя.

Формат запису повернення: geom geometry, val подвійна точність, x ціле число, y цілі числа.

[Примітка]

When exclude_nodata_value is TRUE, only pixels whose values are not NODATA are returned. Unlike ST_DumpAsPolygons, this function returns one polygon per pixel rather than merging adjacent pixels with the same value.

Доступність: 2.0.0

Покращено: 2.1.0 додано опціональний аргумент exclude_nodata_value.

Змінено: 2.1.1 Змінено поведінку exclude_nodata_value.

Приклади

This example returns a raster pixel polygon.

Code
WITH raster AS (
    SELECT ST_SetValue(
        ST_SetValue(
            ST_AddBand(
                ST_MakeEmptyRaster(
                    2, 2, 0, 0, 0.001, -0.001, 0.001, 0.001, 4269
                ),
                1, '8BUI', 1, 0
            ),
            2, 2, 10
        ),
        1, 1, NULL
    ) AS rast
), pixels AS (
    SELECT (ST_PixelAsPolygons(rast)).*
    FROM raster
)
SELECT x, y, val, geom AS geom
FROM pixels
ORDER BY x, y;
Вивід растрових зображень
x | y | val |                geom
---+---+-----------------------------------------------------------------------------
 1 | 2 |   1 | POLYGON((0.001 -0.001,0.002 0,0.003 -0.001,0.002 -0.002,0.001 -0.001))
 2 | 1 |   1 | POLYGON((0.001 0.001,0.002 0.002,0.003 0.001,0.002 0,0.001 0.001))
 2 | 2 |  10 | POLYGON((0.002 0,0.003 0.001,0.004 0,0.003 -0.001,0.002 0))
Figure
Geometry figure for visual-rt-st-pixelaspolygons-01

Назва

ST_PixelAsPoint — Повертає геометрію точки верхнього лівого кута пікселя.

Короткий огляд

geometry ST_PixelAsPoint(raster rast, integer columnx, integer rowy);

Description

Повертає точкову геометрію верхнього лівого кута пікселя.

Доступність: 2.1.0

Приклади

Code
SELECT ST_PixelAsPoint(rast, 1, 1) FROM dummy_rast WHERE rid = 1;
Вивід растрових зображень
POINT(0.5 0.5)
Figure
Geometry figure for visual-rt-st-pixelaspoint-01

Назва

ST_PixelAsPoints — Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.

Короткий огляд

setof record ST_PixelAsPoints(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

Description

Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.

Формат запису повернення: geom geometry, val подвійна точність, x ціле число, y цілі числа.

[Примітка]

Коли exclude_nodata_value = TRUE, як точки повертаються тільки ті пікселі, значення яких не є NODATA.

Доступність: 2.1.0

Змінено: 2.1.1 Змінено поведінку exclude_nodata_value.

Приклади

This example returns point features together with a derived marker size that a client can use for value-scaled point rendering.

Code
SELECT
    x,
    y,
    val,
    round((val / 32.0)::numeric, 2) AS marker_scale,geom AS geom
FROM (
    SELECT (ST_PixelAsPoints(rast, 1)).*
    FROM dummy_rast
    WHERE rid = 2
) AS foo
ORDER BY y, x;
Вивід растрових зображень
x | y | val | marker_scale |          geom
---+---+-----+--------------+------------------------------
 1 | 1 | 253 |         7.91 | POINT(3427927.75 5793244)
 2 | 1 | 254 |         7.94 | POINT(3427927.8 5793244)
 3 | 1 | 253 |         7.91 | POINT(3427927.85 5793244)
 4 | 1 | 254 |         7.94 | POINT(3427927.9 5793244)
 5 | 1 | 254 |         7.94 | POINT(3427927.95 5793244)
 1 | 2 | 253 |         7.91 | POINT(3427927.75 5793243.95)
 2 | 2 | 254 |         7.94 | POINT(3427927.8 5793243.95)
 3 | 2 | 254 |         7.94 | POINT(3427927.85 5793243.95)
 4 | 2 | 253 |         7.91 | POINT(3427927.9 5793243.95)
 5 | 2 | 249 |         7.78 | POINT(3427927.95 5793243.95)
 1 | 3 | 250 |         7.81 | POINT(3427927.75 5793243.9)
 2 | 3 | 254 |         7.94 | POINT(3427927.8 5793243.9)
 3 | 3 | 254 |         7.94 | POINT(3427927.85 5793243.9)
 4 | 3 | 252 |         7.88 | POINT(3427927.9 5793243.9)
 5 | 3 | 249 |         7.78 | POINT(3427927.95 5793243.9)
 1 | 4 | 251 |         7.84 | POINT(3427927.75 5793243.85)
 2 | 4 | 253 |         7.91 | POINT(3427927.8 5793243.85)
 3 | 4 | 254 |         7.94 | POINT(3427927.85 5793243.85)
 4 | 4 | 254 |         7.94 | POINT(3427927.9 5793243.85)
 5 | 4 | 253 |         7.91 | POINT(3427927.95 5793243.85)
 1 | 5 | 252 |         7.88 | POINT(3427927.75 5793243.8)
 2 | 5 | 250 |         7.81 | POINT(3427927.8 5793243.8)
 3 | 5 | 254 |         7.94 | POINT(3427927.85 5793243.8)
 4 | 5 | 254 |         7.94 | POINT(3427927.9 5793243.8)
 5 | 5 | 254 |         7.94 | POINT(3427927.95 5793243.8)
Figure
Geometry figure for visual-rt-st-pixelaspoints-01

Назва

ST_PixelAsCentroid — Повертає центроїд (точкову геометрію) області, представленої пікселем.

Короткий огляд

geometry ST_PixelAsCentroid(raster rast, integer x, integer y);

Description

Повертає центроїд (точкову геометрію) області, представленої пікселем.

Покращено: 3.2.0 Тепер швидше реалізовано в C.

Доступність: 2.1.0

Приклади

Code
SELECT ST_PixelAsCentroid(rast, 1, 1) FROM dummy_rast WHERE rid = 1;
Вивід растрових зображень
POINT(1.5 2)
Figure
Geometry figure for visual-rt-st-pixelascentroid-01

Назва

ST_PixelAsCentroids — Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.

Короткий огляд

setof record ST_PixelAsCentroids(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

Description

Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія є центроїдом області, представленої пікселем..

Формат запису повернення: geom geometry, val подвійна точність, x ціле число, y цілі числа.

[Примітка]

Коли exclude_nodata_value = TRUE, як точки повертаються тільки ті пікселі, значення яких не є NODATA.

Покращено: 3.2.0 Тепер швидше реалізовано в C.

Змінено: 2.1.1 Змінено поведінку exclude_nodata_value.

Доступність: 2.1.0

Приклади

This example uses LATERAL syntax.

Code
SELECT x, y, val,geom
    FROM (SELECT dp.* FROM dummy_rast, LATERAL ST_PixelAsCentroids(rast, 1) AS dp WHERE rid = 2) foo;
Вивід растрових зображень
x | y | val |           st_astext
---+---+-----+--------------------------------
 1 | 1 | 253 | POINT(3427927.775 5793243.975)
 2 | 1 | 254 | POINT(3427927.825 5793243.975)
 3 | 1 | 253 | POINT(3427927.875 5793243.975)
 4 | 1 | 254 | POINT(3427927.925 5793243.975)
 5 | 1 | 254 | POINT(3427927.975 5793243.975)
 1 | 2 | 253 | POINT(3427927.775 5793243.925)
 2 | 2 | 254 | POINT(3427927.825 5793243.925)
 3 | 2 | 254 | POINT(3427927.875 5793243.925)
 4 | 2 | 253 | POINT(3427927.925 5793243.925)
 5 | 2 | 249 | POINT(3427927.975 5793243.925)
 1 | 3 | 250 | POINT(3427927.775 5793243.875)
 2 | 3 | 254 | POINT(3427927.825 5793243.875)
 3 | 3 | 254 | POINT(3427927.875 5793243.875)
 4 | 3 | 252 | POINT(3427927.925 5793243.875)
 5 | 3 | 249 | POINT(3427927.975 5793243.875)
 1 | 4 | 251 | POINT(3427927.775 5793243.825)
 2 | 4 | 253 | POINT(3427927.825 5793243.825)
 3 | 4 | 254 | POINT(3427927.875 5793243.825)
 4 | 4 | 254 | POINT(3427927.925 5793243.825)
 5 | 4 | 253 | POINT(3427927.975 5793243.825)
 1 | 5 | 252 | POINT(3427927.775 5793243.775)
 2 | 5 | 250 | POINT(3427927.825 5793243.775)
 3 | 5 | 254 | POINT(3427927.875 5793243.775)
 4 | 5 | 254 | POINT(3427927.925 5793243.775)
 5 | 5 | 254 | POINT(3427927.975 5793243.775)
Figure
Geometry figure for visual-rt-st-pixelascentroids-01

Назва

ST_Value — Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.

Короткий огляд

double precision ST_Value(raster rast, geometry pt, boolean exclude_nodata_value=true);

double precision ST_Value(raster rast, integer band, geometry pt, boolean exclude_nodata_value=true, text resample='nearest');

double precision ST_Value(raster rast, integer x, integer y, boolean exclude_nodata_value=true);

double precision ST_Value(raster rast, integer band, integer x, integer y, boolean exclude_nodata_value=true);

Description

Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в заданій геометричній точці. Номери діапазонів починаються з 1, і якщо діапазон не вказано, то вважається, що він дорівнює 1.

Якщо exclude_nodata_value встановлено на true, то враховуються тільки пікселі, що не є nodata. Якщо exclude_nodata_value встановлено на false, то враховуються всі пікселі.

The allowed values of the resample parameter are "nearest" which performs the default nearest-neighbor resampling, "bilinear" which performs a bilinear interpolation to estimate the value between pixel centers, and the nearest-neighbor boundary options "nearest-UL", "nearest-UR", "nearest-LL", and "nearest-LR". Boundary options choose which pixel is returned when the point lies on a horizontal or vertical pixel boundary, including corner intersections.

Enhanced: 3.7.0 resample accepts nearest-neighbor boundary options "nearest-UL", "nearest-UR", "nearest-LL", and "nearest-LR".

Покращено: 3.2.0 додано опціональний аргумент resample.

Покращено: 2.0.0 додано опціональний аргумент exclude_nodata_value.

Приклади

Get raster values at particular postgis geometry points. The srid of your geometry should be same as for your raster.

Code
SELECT rid, ST_Value(rast, foo.pt_geom) As b1pval, ST_Value(rast, 2, foo.pt_geom) As b2pval
FROM dummy_rast CROSS JOIN (SELECT ST_SetSRID(ST_Point(3427927.77, 5793243.76), 0) As pt_geom) As foo
WHERE rid=2;
Вивід растрових зображень
rid | b1pval | b2pval
-----+--------+--------
   2 |    252 |     79

General fictitious example using a real table.

Code
SELECT rid, ST_Value(rast, 3, sometable.geom) As b3pval
FROM sometable
WHERE ST_Intersects(rast, sometable.geom);
Code
SELECT rid, ST_Value(rast, 1, 1, 1) As b1pval,
    ST_Value(rast, 2, 1, 1) As b2pval, ST_Value(rast, 3, 1, 1) As b3pval
FROM dummy_rast
WHERE rid=2;
Вивід растрових зображень
rid | b1pval | b2pval | b3pval
-----+--------+--------+--------
   2 |    253 |     78 |     70

Get all values in bands 1,2,3 of each pixel.

Code

SELECT x, y, ST_Value(rast, 1, x, y) As b1val,
    ST_Value(rast, 2, x, y) As b2val, ST_Value(rast, 3, x, y) As b3val
FROM dummy_rast CROSS JOIN
generate_series(1, 1000) As x CROSS JOIN generate_series(1, 1000) As y
WHERE rid =  2 AND x <= ST_Width(rast) AND y <= ST_Height(rast);
Вивід растрових зображень
 x | y | b1val | b2val | b3val
---+---+-------+-------+-------
 1 | 1 |   253 |    78 |    70
 1 | 2 |   253 |    96 |    80
 1 | 3 |   250 |    99 |    90
 1 | 4 |   251 |    89 |    77
 1 | 5 |   252 |    79 |    62
 2 | 1 |   254 |    98 |    86
 2 | 2 |   254 |   118 |   108
 :
 :

Get all values in bands 1,2,3 of each pixel same as above but returning the upper left point point of each pixel.

Code

SELECT ST_SetSRID(ST_Point(ST_UpperLeftX(rast) + ST_ScaleX(rast)*x,
        ST_UpperLeftY(rast) + ST_ScaleY(rast)*y),
        ST_SRID(rast)) As uplpt,
    ST_Value(rast, 1, x, y) As b1val,
    ST_Value(rast, 2, x, y) As b2val, ST_Value(rast, 3, x, y) As b3val
FROM dummy_rast CROSS JOIN
generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y
WHERE rid =  2 AND x <= ST_Width(rast) AND y <= ST_Height(rast);
Вивід растрових зображень
            uplpt            | b1val | b2val | b3val
-----------------------------+-------+-------+-------
 POINT(3427929.25 5793245.5) |   253 |    78 |    70
 POINT(3427929.25 5793247)   |   253 |    96 |    80
 POINT(3427929.25 5793248.5) |   250 |    99 |    90
:

Get a polygon formed by union of all pixels that fall in a particular value range and intersect a particular polygon.

Code

SELECT ST_Union(pixpolyg) As shadow
FROM (SELECT ST_Translate(ST_MakeEnvelope(ST_UpperLeftX(rast), ST_UpperLeftY(rast),
            ST_UpperLeftX(rast) + ST_ScaleX(rast),
            ST_UpperLeftY(rast) + ST_ScaleY(rast), 0
            ), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y
        ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val
    FROM dummy_rast CROSS JOIN
generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y
WHERE rid =  2
    AND x <= ST_Width(rast) AND y <= ST_Height(rast)) As foo
WHERE
    ST_Intersects(
        pixpolyg,
        ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0)
        ) AND b2val != 254;
Вивід растрових зображень
        shadow
------------------------------------------------------------------------------------
 MULTIPOLYGON(((3427928 5793243.9,3427928 5793243.85,3427927.95 5793243.85,3427927.95 5793243.9,
 3427927.95 5793243.95,3427928 5793243.95,3427928.05 5793243.95,3427928.05 5793243.9,3427928 5793243.9)),((3427927.95 5793243.9,3427927.95 579324
3.85,3427927.9 5793243.85,3427927.85 5793243.85,3427927.85 5793243.9,3427927.9 5793243.9,3427927.9 5793243.95,
3427927.95 5793243.95,3427927.95 5793243.9)),((3427927.85 5793243.75,3427927.85 5793243.7,3427927.8 5793243.7,3427927.8 5793243.75,
3427927.8 5793243.8,3427927.8 5793243.85,3427927.85 5793243.85,3427927.85 5793243.8,3427927.85 5793243.75)),
((3427928.05 5793243.75,3427928.05 5793243.7,3427928 5793243.7,3427927.95 5793243.7,3427927.95 5793243.75,3427927.95 5793243.8,3427
927.95 5793243.85,3427928 5793243.85,3427928 5793243.8,3427928.05 5793243.8,
3427928.05 5793243.75)),((3427927.95 5793243.75,3427927.95 5793243.7,3427927.9 5793243.7,3427927.85 5793243.7,
3427927.85 5793243.75,3427927.85 5793243.8,3427927.85 5793243.85,3427927.9 5793243.85,
3427927.95 5793243.85,3427927.95 5793243.8,3427927.95 5793243.75)))

Checking all the pixels of a large raster tile can take a long time. You can dramatically improve speed at some lose of precision by orders of magnitude. By sampling pixels using the step optional parameter of generate_series. This next example does the same as previous but by checking 1 for every 4 (2x2) pixels and putting in the last checked. Putting in the checked pixel as the value for subsequent 4.

Code


SELECT ST_Union(pixpolyg) As shadow
FROM (SELECT ST_Translate(ST_MakeEnvelope(ST_UpperLeftX(rast), ST_UpperLeftY(rast),
            ST_UpperLeftX(rast) + ST_ScaleX(rast)*2,
            ST_UpperLeftY(rast) + ST_ScaleY(rast)*2, 0
            ), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y
        ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val
    FROM dummy_rast CROSS JOIN
generate_series(1,1000,2) As x CROSS JOIN generate_series(1,1000,2) As y
WHERE rid =  2
    AND x <= ST_Width(rast)  AND y <= ST_Height(rast)  ) As foo
WHERE
    ST_Intersects(
        pixpolyg,
        ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0)
        ) AND b2val != 254;
Вивід растрових зображень
        shadow
------------------------------------------------------------------------------------
 MULTIPOLYGON(((3427927.9 5793243.85,3427927.8 5793243.85,3427927.8 5793243.95,
 3427927.9 5793243.95,3427928 5793243.95,3427928.1 5793243.95,3427928.1 5793243.85,3427928 5793243.85,3427927.9 5793243.85)),
 ((3427927.9 5793243.65,3427927.8 5793243.65,3427927.8 5793243.75,3427927.8 5793243.85,3427927.9 5793243.85,
 3427928 5793243.85,3427928 5793243.75,3427928.1 5793243.75,3427928.1 5793243.65,3427928 5793243.65,3427927.9 5793243.65)))


Назва

ST_NearestValue — Повертає найближче значення, яке не є NODATA, пікселя заданого діапазону, визначеного стовпцем x і рядком y, або геометричної точки, вираженої в тій самій системі координат просторової прив'язки, що й растр.

Короткий огляд

double precision ST_NearestValue(raster rast, integer bandnum, geometry pt, boolean exclude_nodata_value=true);

double precision ST_NearestValue(raster rast, geometry pt, boolean exclude_nodata_value=true);

double precision ST_NearestValue(raster rast, integer bandnum, integer columnx, integer rowy, boolean exclude_nodata_value=true);

double precision ST_NearestValue(raster rast, integer columnx, integer rowy, boolean exclude_nodata_value=true);

Description

Повертає найближче значення, яке не є NODATA, заданого діапазону в заданому стовпці x, рядку y пікселя або в конкретній геометричній точці. Якщо стовпець x, рядок y пікселя або піксель у заданій геометричній точці є NODATA, функція знайде найближчий піксель до стовпця x, рядка y пікселя або геометричної точки, значення якого не є NODATA.

Номери смуг починаються з 1, і якщо не вказано інше, то bandnum вважається рівним 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передається, то воно зчитується з метаданих растра.

Доступність: 2.1.0

[Примітка]

ST_NearestValue є повноцінною заміною для ST_Value.

Приклади

This example reads a value from pixel 2x2.

Code
WITH source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
            1, '8BUI', 1, 0
        ),
        1, 1, 1,
        ARRAY[
            [0, 1, 1, 1, 1],
            [1, 1, 1, 0, 1],
            [1, 0, 1, 1, 1],
            [1, 1, 1, 1, 0],
            [1, 1, 0, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_Value(rast, 2, 2) AS value,
    ST_NearestValue(rast, 2, 2) AS nearestvalue
FROM source
Вивід растрових зображень
value | nearestvalue
-------+--------------
     1 |            1

This example reads a NODATA value from pixel 2x3.

Code
WITH source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
            1, '8BUI', 1, 0
        ),
        1, 1, 1,
        ARRAY[
            [0, 1, 1, 1, 1],
            [1, 1, 1, 0, 1],
            [1, 0, 1, 1, 1],
            [1, 1, 1, 1, 0],
            [1, 1, 0, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_Value(rast, 2, 3) AS value,
    ST_NearestValue(rast, 2, 3) AS nearestvalue
FROM source
Вивід растрових зображень
value | nearestvalue
-------+--------------
       |            1

Див. також

ST_Neighborhood, ST_Value


Назва

ST_SetZ — Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.

Короткий огляд

geometry ST_SetZ(raster rast, geometry geom, text resample=nearest, integer band=1);

Description

Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.

Параметр resample можна встановити на значення "nearest", щоб скопіювати значення з комірки, в яку потрапляє кожна вершина, або "bilinear", щоб використовувати білінійну інтерполяцію для обчислення значення, яке також враховує сусідні комірки.

Доступність: 3.2.0

Приклади

2x2 test raster with values. 10 50. 40 20.

Code
WITH test_raster AS (
SELECT
ST_SetValues(
ST_AddBand(
ST_MakeEmptyRaster(
      width => 2,
      height => 2,
      upperleftx => 0,
      upperlefty => 2,
      scalex => 1.0,
      scaley => -1.0,
      skewx => 0,
      skewy => 0,
      srid => 4326),
    index => 1,
    pixeltype => '16BSI',
    initialvalue => 0,
    nodataval => -999
),
  1,
  1,
  1,
  newvalueset => ARRAY[ARRAY[10.0::float8, 50.0::float8], ARRAY[40.0::float8, 20.0::float8]]) AS rast
)
SELECT
ST_SetZ(
    rast,
    band => 1,
    geom => 'SRID=4326;LINESTRING(1.0 1.9,1.0 0.2)'::geometry,
    resample => 'bilinear'
)
FROM test_raster
Вивід растрових зображень
LINESTRING Z (1 1.9 38,1 0.2 27)
Figure
Geometry figure for visual-rt-st-setz-01

Див. також

ST_Value, ST_SetM


Назва

ST_SetM — Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растра, скопійованими в розмірність M за допомогою заданого алгоритму ресемплювання.

Короткий огляд

geometry ST_SetM(raster rast, geometry geom, text resample=nearest, integer band=1);

Description

Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими в M виміри за допомогою запитуваного алгоритму ресемплювання.

Параметр resample можна встановити на значення "nearest", щоб скопіювати значення з комірки, в яку потрапляє кожна вершина, або "bilinear", щоб використовувати білінійну інтерполяцію для обчислення значення, яке також враховує сусідні комірки.

Доступність: 3.2.0

Приклади

2x2 test raster with values. 10 50. 40 20.

Code
WITH test_raster AS (
SELECT
ST_SetValues(
ST_AddBand(
ST_MakeEmptyRaster(
      width => 2,
      height => 2,
      upperleftx => 0,
      upperlefty => 2,
      scalex => 1.0,
      scaley => -1.0,
      skewx => 0,
      skewy => 0,
      srid => 4326),
    index => 1,
    pixeltype => '16BSI',
    initialvalue => 0,
    nodataval => -999
),
  1,
  1,
  1,
  newvalueset => ARRAY[ARRAY[10.0::float8, 50.0::float8], ARRAY[40.0::float8, 20.0::float8]]) AS rast
)
SELECT
ST_SetM(
    rast,
    band => 1,
    geom => 'SRID=4326;LINESTRING(1.0 1.9,1.0 0.2)'::geometry,
    resample => 'bilinear'
)
FROM test_raster
Вивід растрових зображень
LINESTRING M (1 1.9 38,1 0.2 27)
Figure
Geometry figure for visual-rt-st-setm-01

Див. також

ST_Value, ST_SetZ


Назва

ST_Neighborhood — Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр.

Короткий огляд

double precision[][] ST_Neighborhood(raster rast, integer bandnum, integer columnX, integer rowY, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, integer columnX, integer rowY, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, integer bandnum, geometry pt, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, geometry pt, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

Description

Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр. Параметри distanceX та distanceY визначають кількість пікселів навколо заданого пікселя по осях X та Y, наприклад, я хочу отримати всі значення в межах 3 пікселів по осі X та 2 пікселів по осі Y навколо пікселя, що мене цікавить. Центральним значенням двовимірного масиву буде значення в пікселі, вказаному стовпцем X і рядком Y, або геометричною точкою.

Номери смуг починаються з 1, і якщо не вказано інше, то bandnum вважається рівним 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передається, то воно зчитується з метаданих растра.

[Примітка]

Кількість елементів уздовж кожної осі двовимірного масиву, що повертається, дорівнює 2 * (distanceX|distanceY) + 1. Отже, для distanceX і distanceY рівних 1 масив, що повертається, буде 3x3.

[Примітка]

Вихідні дані двовимірного масиву можна передати до будь-якої з вбудованих функцій обробки растрових даних, наприклад ST_Min4ma, ST_Sum4ma, ST_Mean4ma.

Доступність: 2.1.0

Приклади

This example reads a value from pixel 2x2.

Code
SELECT
    ST_Neighborhood(rast, 2, 2, 1, 1)
FROM (
    SELECT
        ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
) AS foo
Вивід растрових зображень
{{NULL,1,1},{1,1,1},{1,NULL,1}}

This example reads a NODATA value from pixel 2x3.

Code
SELECT
    ST_Neighborhood(rast, 2, 3, 1, 1)
FROM (
    SELECT
        ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
) AS foo
Вивід растрових зображень
{{1,1,1},{1,NULL,1},{1,1,1}}

Pixel 3x3 has value. Exclude_nodata_value = FALSE.

Code
SELECT
    ST_Neighborhood(rast, 3, 3, 1, 1, false)
FROM ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
Вивід растрових зображень
{{1,1,0},{0,1,1},{1,1,1}}

Назва

ST_SetValue — Повертає модифікований растр, отриманий в результаті встановлення значення заданого каналу в заданому стовпці x, рядку y пікселя або пікселів, що перетинають певну геометрію. Номери каналів починаються з 1 і, якщо не вказано інше, приймаються за 1.

Короткий огляд

raster ST_SetValue(raster rast, integer bandnum, geometry geom, double precision newvalue);

raster ST_SetValue(raster rast, geometry geom, double precision newvalue);

raster ST_SetValue(raster rast, integer bandnum, integer columnx, integer rowy, double precision newvalue);

raster ST_SetValue(raster rast, integer columnx, integer rowy, double precision newvalue);

Description

Повертає модифікований растр, отриманий в результаті встановлення значень вказаних пікселів на нове значення для призначеного каналу, враховуючи рядок і стовпець растра або геометрію. Якщо канал не вказано, то вважається, що це діапазон 1.

Покращено: 2.1.0 Варіант геометрії ST_SetValue() тепер підтримує будь-який тип геометрії, а не тільки точку. Варіант геометрії є обгорткою навколо варіанту geomval[] функції ST_SetValues()

Приклади

This example uses geometry input.

Code

                SELECT (foo.geomval).val, ST_Union((foo.geomval).geom)
FROM (SELECT ST_DumpAsPolygons(ST_SetValue(
            rast,
            1,
            ST_Point(3427927.75, 5793243.95),
            50)
            ) As geomval
FROM dummy_rast
where rid = 2) As foo
WHERE (foo.geomval).val < 250
GROUP BY (foo.geomval).val;
Вивід растрових зображень
 val |                                                     st_astext
-----+-------------------------------------------------------------------
  50 | POLYGON((3427927.75 5793244,3427927.75 5793243.95,3427927.8 579324 ...
 249 | POLYGON((3427927.95 5793243.95,3427927.95 5793243.85,3427928 57932 ...

This example stores the changed raster.

Code
UPDATE dummy_rast SET rast = ST_SetValue(rast, 1, ST_Point(3427927.75, 5793243.95), 100)
    WHERE rid = 2   ;

                

Див. також

ST_Value, ST_DumpAsPolygons


Назва

ST_SetValues — Повертає змінений растр, отриманий в результаті встановлення значень заданого каналу.

Короткий огляд

raster ST_SetValues(raster rast, integer nband, integer columnx, integer rowy, double precision[][] newvalueset, boolean[][] noset=NULL, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer nband, integer columnx, integer rowy, double precision[][] newvalueset, double precision nosetvalue, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer nband, integer columnx, integer rowy, integer width, integer height, double precision newvalue, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer columnx, integer rowy, integer width, integer height, double precision newvalue, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer nband, geomval[] geomvalset, boolean keepnodata=FALSE);

Description

Повертає змінений растр, отриманий в результаті встановлення зазначених пікселів на нові значення для вказаного каналу. columnx та rowy індексуються з 1.

Якщо keepnodata має значення TRUE, пікселі, значення яких є NODATA, не будуть встановлені з відповідним значенням у newvalueset.

Для варіанту 1 конкретні пікселі, які потрібно встановити, визначаються координатами пікселів columnx, rowy та розмірами масиву newvalueset. noset можна використовувати, щоб запобігти встановленню пікселів із значеннями, присутніми в newvalueset (оскільки PostgreSQL не дозволяє використовувати нерівномірні/нерівні масиви). Див. приклад варіанту 1.

Варіант 2 схожий на варіант 1, але замість масиву булевих значень noset використовується проста подвійна точність nosetvalue. Елементи в newvalueset із значенням nosetvalue будуть пропущені. Див. приклад варіанту 2.

Для варіанту 3 конкретні пікселі, які потрібно встановити, визначаються координатами пікселів columnx, rowy, width та height. Див. приклад варіанту 3.

Варіант 4 аналогічний варіанту 3, за винятком того, що він передбачає, що пікселі першого каналу rast будуть встановлені.

Для варіанту 5 масив geomval використовується для визначення конкретних пікселів, які потрібно встановити. Якщо всі геометрії в масиві мають тип POINT або MULTIPOINT, функція використовує скорочення, де довгота і широта кожної точки використовуються для безпосереднього встановлення пікселя. В іншому випадку геометрії перетворюються на растри, а потім проходять ітерацію за один прохід. Див. приклад варіанту 5.

Доступність: 2.1.0

Приклади

Variant 1.

These examples pass FALSE for exclude_nodata_value so that every raster cell remains visible. NODATA cells display the band's NODATA value, which is 0 here.

Set the lower-right 2 by 2 block of a 3 by 3 raster to 9.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 2, 2, ARRAY[[9, 9], [9, 9]]::double precision[][]
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
 x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9

Replace the complete raster from an array; the central NULL becomes NODATA.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1, ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][]
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
 x | y | val
---+---+-----
 1 | 1 |   9
 1 | 2 |   9
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |   0
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9

Use the noset mask to retain the left-middle source pixel while replacing the other cells.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1,
                ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][],
                ARRAY[[false], [true]]::boolean[][]
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
x | y | val
---+---+-----
 1 | 1 |   9
 1 | 2 |   1
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |   0
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9

With keepnodata enabled, an existing NODATA pixel is not overwritten.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                    1, '8BUI', 1, 0
                ),
                1, 1, 1, NULL
            ),
            1, 1, 1,
                ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][],
                ARRAY[[false], [true]]::boolean[][],
                TRUE
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
x | y | val
---+---+-----
 1 | 1 |   0
 1 | 2 |   1
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |   0
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9

Variant 2.

Use -1 as the value that should not be written; only the lower-right 2 by 2 block changes.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1, ARRAY[[-1, -1, -1], [-1, 9, 9], [-1, 9, 9]]::double precision[][], -1
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9

The same update can use NULL as the value that should not be written.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1, ARRAY[[NULL, NULL, NULL], [NULL, 9, 9], [NULL, 9, 9]]::double precision[][], NULL::double precision
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9

Variant 3.

Set a 2 by 2 rectangle starting at column 2, row 2.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 2, 2, 2, 2, 9
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9

When keepnodata is true, the NODATA cell inside the rectangle remains unchanged.

Code
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(ST_SetValues(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                    1, '8BUI', 1, 0
                ),
                1, 2, 2, NULL
            ),
            1, 2, 2, 2, 2, 9, TRUE
        ),
        1, FALSE
    ) AS poly
) foo
ORDER BY 1, 2;
Вивід растрових зображень
x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   0
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9

Variant 5.

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast
), bar AS (
    SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL
    SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1,4 -1,4 -4,1 -4,1 -1))'::geometry geom UNION ALL
    SELECT 3 AS gid, 'SRID=0;POLYGON((0 0,5 0,5 -1,1 -1,1 -4,0 -4,0 0))'::geometry geom UNION ALL
    SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0,4 4,4 -4)'::geometry
), changed AS (
    SELECT rid, gid, ST_SetValue(rast, 1, geom, gid) AS rast
    FROM foo
    CROSS JOIN bar
)
SELECT
    rid,
    gid,
    y,
    array_agg(ST_Value(rast, 1, x, y) ORDER BY x) AS values
FROM changed
CROSS JOIN generate_series(1, 5) AS x
CROSS JOIN generate_series(1, 5) AS y
GROUP BY rid, gid, y
ORDER BY rid, gid, y;
Вивід растрових зображень
rid | gid | y |           values
-----+-----+---+----------------------------
   1 |   1 | 1 | {NULL,NULL,NULL,NULL,NULL}
   1 |   1 | 2 | {NULL,NULL,NULL,NULL,NULL}
   1 |   1 | 3 | {NULL,NULL,1,NULL,NULL}
   1 |   1 | 4 | {NULL,NULL,NULL,NULL,NULL}
   1 |   1 | 5 | {NULL,NULL,NULL,NULL,NULL}
   1 |   2 | 1 | {NULL,NULL,NULL,NULL,NULL}
   1 |   2 | 2 | {NULL,2,2,2,NULL}
   1 |   2 | 3 | {NULL,2,2,2,NULL}
   1 |   2 | 4 | {NULL,2,2,2,NULL}
   1 |   2 | 5 | {NULL,NULL,NULL,NULL,NULL}
   1 |   3 | 1 | {3,3,3,3,3}
   1 |   3 | 2 | {3,NULL,NULL,NULL,NULL}
   1 |   3 | 3 | {3,NULL,NULL,NULL,NULL}
   1 |   3 | 4 | {3,NULL,NULL,NULL,NULL}
   1 |   3 | 5 | {NULL,NULL,NULL,NULL,NULL}
   1 |   4 | 1 | {4,NULL,NULL,NULL,NULL}
   1 |   4 | 2 | {NULL,NULL,NULL,NULL,NULL}
   1 |   4 | 3 | {NULL,NULL,NULL,NULL,NULL}
   1 |   4 | 4 | {NULL,NULL,NULL,NULL,NULL}
   1 |   4 | 5 | {NULL,NULL,NULL,NULL,4}
(20 rows)

Нижче показано, що geomvals, розташовані далі в масиві, можуть перезаписати попередні geomvals

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast
), bar AS (
    SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL
    SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1,4 -1,4 -4,1 -4,1 -1))'::geometry geom UNION ALL
    SELECT 3 AS gid, 'SRID=0;POLYGON((0 0,5 0,5 -1,1 -1,1 -4,0 -4,0 0))'::geometry geom UNION ALL
    SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0,4 4,4 -4)'::geometry
), changed AS (
    SELECT ST_SetValues(
        rast,
        1,
        ARRAY[
            ROW((SELECT geom FROM bar WHERE gid = 1), 1),
            ROW((SELECT geom FROM bar WHERE gid = 2), 2)
        ]::geomval[]
    ) AS rast
    FROM foo
)
SELECT
    y,
    array_agg(ST_Value(rast, 1, x, y) ORDER BY x) AS values
FROM changed
CROSS JOIN generate_series(1, 5) AS x
CROSS JOIN generate_series(1, 5) AS y
GROUP BY y
ORDER BY y;
Вивід растрових зображень
y |           values
---+----------------------------
 1 | {NULL,NULL,NULL,NULL,NULL}
 2 | {NULL,2,2,2,NULL}
 3 | {NULL,2,2,2,NULL}
 4 | {NULL,2,2,2,NULL}
 5 | {NULL,NULL,NULL,NULL,NULL}
(5 rows)

Цей приклад є протилежним до попереднього прикладу

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast
), bar AS (
    SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL
    SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1,4 -1,4 -4,1 -4,1 -1))'::geometry geom UNION ALL
    SELECT 3 AS gid, 'SRID=0;POLYGON((0 0,5 0,5 -1,1 -1,1 -4,0 -4,0 0))'::geometry geom UNION ALL
    SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0,4 4,4 -4)'::geometry
), changed AS (
    SELECT ST_SetValues(
        rast,
        1,
        ARRAY[
            ROW((SELECT geom FROM bar WHERE gid = 2), 2),
            ROW((SELECT geom FROM bar WHERE gid = 1), 1)
        ]::geomval[]
    ) AS rast
    FROM foo
)
SELECT
    y,
    array_agg(ST_Value(rast, 1, x, y) ORDER BY x) AS values
FROM changed
CROSS JOIN generate_series(1, 5) AS x
CROSS JOIN generate_series(1, 5) AS y
GROUP BY y
ORDER BY y;
Вивід растрових зображень
y |           values
---+----------------------------
 1 | {NULL,NULL,NULL,NULL,NULL}
 2 | {NULL,2,2,2,NULL}
 3 | {NULL,2,1,2,NULL}
 4 | {NULL,2,2,2,NULL}
 5 | {NULL,NULL,NULL,NULL,NULL}
(5 rows)

Назва

ST_DumpValues — Отримати значення вказаного каналу у вигляді двовимірного масиву.

Короткий огляд

setof record ST_DumpValues( raster rast , integer[] nband=NULL , boolean exclude_nodata_value=true );

double precision[][] ST_DumpValues( raster rast , integer nband , boolean exclude_nodata_value=true );

Description

Отримати значення вказаного каналу у вигляді двовимірного масиву (перший індекс — рядок, другий — стовпець). Якщо nband дорівнює NULL або не вказано, обробляються всі растрові канали.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI'::text, 1, 0), 2, '32BF'::text, 3, -9999), 3, '16BSI', 0, 0) AS rast
)
SELECT
    (ST_DumpValues(rast)).*
FROM foo;
Вивід растрових зображень
nband |                       valarray
-------+------------------------------------------------------
     1 | {{1,1,1},{1,1,1},{1,1,1}}
     2 | {{3,3,3},{3,3,3},{3,3,3}}
     3 | {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
(3 rows)
Code
WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI'::text, 1, 0), 2, '32BF'::text, 3, -9999), 3, '16BSI', 0, 0) AS rast
)
SELECT
    (ST_DumpValues(rast, ARRAY[3, 1])).*
FROM foo;
Вивід растрових зображень
nband |                       valarray
-------+------------------------------------------------------
     3 | {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
     1 | {{1,1,1},{1,1,1},{1,1,1}}
(2 rows)
Code
WITH foo AS (
    SELECT ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 1, 2, 5) AS rast
)
SELECT
    (ST_DumpValues(rast, 1))[2][1]
FROM foo;
Вивід растрових зображень
5

Див. також

ST_Value, ST_SetValue, ST_SetValues


Назва

ST_PixelOfValue — Отримати координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку.

Короткий огляд

setof record ST_PixelOfValue( raster rast , integer nband , double precision[] search , boolean exclude_nodata_value=true );

setof record ST_PixelOfValue( raster rast , double precision[] search , boolean exclude_nodata_value=true );

setof record ST_PixelOfValue( raster rast , integer nband , double precision search , boolean exclude_nodata_value=true );

setof record ST_PixelOfValue( raster rast , double precision search , boolean exclude_nodata_value=true );

Description

Отримайте координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку. Якщо канал не вказаний, то вважається, що це канал 1.

Доступність: 2.1.0

Приклади

Code
WITH source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
            1, '8BUI', 1, 0
        ),
        1, 1, 1,
        ARRAY[
            [0, 1, 1, 1, 1],
            [1, 1, 1, 0, 1],
            [1, 0, 1, 1, 1],
            [1, 1, 1, 1, 255],
            [1, 1, 0, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT (ST_PixelOfValue(rast, 1, ARRAY[1, 255])).*
FROM source
Вивід растрових зображень
val | x | y
-----+---+---
   1 | 1 | 2
   1 | 1 | 3
   1 | 1 | 4
   1 | 1 | 5
   1 | 2 | 1
   1 | 2 | 2
   1 | 2 | 4
   1 | 2 | 5
   1 | 3 | 1
   1 | 3 | 2
   1 | 3 | 3
   1 | 3 | 4
   1 | 4 | 1
   1 | 4 | 3
   1 | 4 | 4
   1 | 4 | 5
   1 | 5 | 1
   1 | 5 | 2
   1 | 5 | 3
 255 | 5 | 4
   1 | 5 | 5

11.7. Редактори растрових зображень

  • ST_SetGeoReference — Встановити геореференцію 6 параметрів геореференції в одному виклику. Числа слід розділяти пробілами. Приймає вхідні дані у форматі GDAL або ESRI. За замовчуванням використовується GDAL.
  • ST_SetRotation — Встановіть поворот растра в радіанах.
  • ST_SetScale — Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина пікселя/висота.
  • ST_SetSkew — Встановлює геореференцію X і Y (або параметр обертання). Якщо передається тільки один параметр, X і Y встановлюються на одне і те ж значення.
  • ST_SetSRID — Встановлює SRID растра на певне ціле число srid, визначене в таблиці spatial_ref_sys.
  • ST_SetUpperLeft — Встановлює значення верхнього лівого кута пікселя растру на проектовані координати X і Y.
  • ST_Resample — Передискретизуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри, довільний кут сітки та набір атрибутів геореференціювання растра, визначених або запозичених з іншого растра.
  • ST_Rescale — Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.
  • ST_Reskew — Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_SnapToGrid — Виконує ресемплінг растра, прив'язавши його до сітки. Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Resize — Змінити розмір растру до нової ширини/висоти
  • ST_Transform — Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм передискретизації. Доступні опції: NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos. За замовчуванням використовується NearestNeighbor.

Назва

ST_SetGeoReference — Встановити геореференцію 6 параметрів геореференції в одному виклику. Числа слід розділяти пробілами. Приймає вхідні дані у форматі GDAL або ESRI. За замовчуванням використовується GDAL.

Короткий огляд

raster ST_SetGeoReference(raster rast, text georefcoords, text format=GDAL);

raster ST_SetGeoReference(raster rast, double precision upperleftx, double precision upperlefty, double precision scalex, double precision scaley, double precision skewx, double precision skewy);

Description

Встановити геореференцію 6 параметрів геореференції за один виклик. Приймає вхідні дані у форматі "GDAL" або "ESRI". За замовчуванням використовується GDAL. Якщо 6 координат не вказано, повертається нульове значення.

Різниця між форматами представлення полягає в наступному:

GDAL uses the value order shown below.

Code
scalex skewy skewx scaley upperleftx upperlefty

ESRI uses the value order shown below.

Code
scalex skewy skewx scaley upperleftx + scalex*0.5 upperlefty + scaley*0.5
[Примітка]

Якщо растр має канали, що виходять за межі бази даних, зміна геореференції може призвести до неправильного доступу до даних каналу, що зберігаються зовні.

Покращено: 2.1.0 Додано варіант ST_SetGeoReference(raster, double precision, ...)

Приклади

Code
WITH source AS (
    SELECT ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0) AS rast
), variants AS (
    SELECT 0 AS rid, rast FROM source
    UNION ALL
    SELECT 1, ST_SetGeoReference(rast, '10 0 0 -10 0.1 0.1', 'GDAL')
    FROM source
    UNION ALL
    SELECT 2, ST_SetGeoReference(rast, '10 0 0 -10 5.1 -4.9', 'ESRI')
    FROM source
    UNION ALL
    SELECT 3, ST_SetGeoReference(rast, 1, 1, 10, -10, 0.001, 0.001)
    FROM source
)
SELECT
    rid,
    round(ST_UpperLeftX(rast)::numeric, 3) AS upperleftx,
    round(ST_UpperLeftY(rast)::numeric, 3) AS upperlefty,
    ST_ScaleX(rast) AS scalex,
    ST_ScaleY(rast) AS scaley,
    ST_SkewX(rast) AS skewx,
    ST_SkewY(rast) AS skewy
FROM variants
ORDER BY rid;
Вивід растрових зображень
rid | upperleftx | upperlefty | scalex | scaley | skewx | skewy
-----+------------+------------+--------+--------+-------+-------
   0 |      0.000 |      0.000 |      1 |     -1 |     0 |     0
   1 |      0.100 |      0.100 |     10 |    -10 |     0 |     0
   2 |      0.100 |      0.100 |     10 |    -10 |     0 |     0
   3 |      1.000 |      1.000 |     10 |    -10 | 0.001 | 0.001
(4 rows)

Назва

ST_SetRotation — Встановіть поворот растра в радіанах.

Короткий огляд

raster ST_SetRotation(raster rast, float8 rotation);

Description

Рівномірно повертає растр. Поворот вимірюється в радіанах. Докладнішу інформацію див. у World File.

Приклади

Code
WITH variants AS (
    SELECT rid, 'rotated' AS kind, ST_SetRotation(rast, 15) AS rast
    FROM dummy_rast
    UNION ALL
    SELECT rid, 'original', rast
    FROM dummy_rast
)
SELECT
    rid,
    kind,
    round(ST_ScaleX(rast)::numeric, 4) AS scale_x,
    round(ST_ScaleY(rast)::numeric, 4) AS scale_y,
    round(ST_SkewX(rast)::numeric, 4) AS skew_x,
    round(ST_SkewY(rast)::numeric, 4) AS skew_y
FROM variants
ORDER BY rid, kind;
Вивід растрових зображень
rid |   kind   | scale_x | scale_y | skew_x | skew_y
-----+----------+---------+---------+--------+--------
   1 | original |  2.0000 |  3.0000 | 0.0000 | 0.0000
   1 | rotated  | -1.5194 | -2.2791 | 1.9509 | 1.3006
   2 | original |  0.0500 | -0.0500 | 0.0000 | 0.0000
   2 | rotated  | -0.0380 | -0.0380 | 0.0325 | 0.0325
(4 rows)

Назва

ST_SetScale — Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина пікселя/висота.

Короткий огляд

raster ST_SetScale(raster rast, float8 xy);

raster ST_SetScale(raster rast, float8 x, float8 y);

Description

Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина/висота пікселя. Якщо передано лише одну одиницю, вважається, що X та Y мають однакове значення.

[Примітка]

ST_SetScale відрізняється від ST_Rescale тим, що ST_SetScale не передискретизує растр для відповідності розмірам растра. Він лише змінює метадані (або геореференцію) растра, щоб виправити спочатку неправильно вказане масштабування. ST_Rescale призводить до того, що растр має різну ширину і висоту, обчислені для відповідності географічному розміру вхідного растра. ST_SetScale не змінює ні ширину, ні висоту растра.

Змінено: 2.0.0 У версіях WKTRaster це називалося ST_SetPixelSize. Це було змінено у версії 2.0.0.

Приклади

Code
UPDATE dummy_rast
    SET rast = ST_SetScale(rast, 1.5)
WHERE rid = 2;

SELECT ST_ScaleX(rast) As pixx, ST_ScaleY(rast) As pixy, Box3D(rast) As newbox
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
pixx | pixy |                    newbox
------+------+----------------------------------------------
  1.5 |  1.5 | BOX(3427927.75 5793244 0, 3427935.25 5793251.5 0)
Code
UPDATE dummy_rast
    SET rast = ST_SetScale(rast, 1.5, 0.55)
WHERE rid = 2;

SELECT ST_ScaleX(rast) As pixx, ST_ScaleY(rast) As pixy, Box3D(rast) As newbox
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
pixx | pixy |                   newbox
------+------+--------------------------------------------
  1.5 | 0.55 | BOX(3427927.75 5793244 0,3427935.25 5793247 0)

Див. також

ST_ScaleX, ST_ScaleY, Box3D


Назва

ST_SetSkew — Встановлює геореференцію X і Y (або параметр обертання). Якщо передається тільки один параметр, X і Y встановлюються на одне і те ж значення.

Короткий огляд

raster ST_SetSkew(raster rast, float8 skewxy);

raster ST_SetSkew(raster rast, float8 skewx, float8 skewy);

Description

Встановлює геореференцію X і Y (або параметр обертання). Якщо передається тільки один параметр, X і Y встановлюються на одне і те ж значення. Докладнішу інформацію див. у World File.

Приклади

This is the first example.

Code
UPDATE dummy_rast SET rast = ST_SetSkew(rast, 1, 2) WHERE rid = 1;
SELECT
    rid,
    format('(%s, %s)', skewx, skewy) AS skew,
    term,
    georef[idx] AS value
FROM (
    SELECT
        rid,
        ST_SkewX(rast) AS skewx,
        ST_SkewY(rast) AS skewy,
        string_to_array(ST_GeoReference(rast), E'\n') AS georef
    FROM dummy_rast
    WHERE rid = 1
) AS refs
CROSS JOIN (VALUES
    (1, 'scaleX'),
    (2, 'skewY'),
    (3, 'skewX'),
    (4, 'scaleY'),
    (5, 'originX'),
    (6, 'originY')
) AS parts(idx, term)
ORDER BY idx;
Вивід растрових зображень
rid |  skew  |  term   |    value
-----+--------+---------+--------------
   1 | (1, 2) | scaleX  | 2.0000000000
   1 | (1, 2) | skewY   | 2.0000000000
   1 | (1, 2) | skewX   | 1.0000000000
   1 | (1, 2) | scaleY  | 3.0000000000
   1 | (1, 2) | originX | 0.5000000000
   1 | (1, 2) | originY | 0.5000000000
(6 rows)

This second example sets both values to the same number.

Code
UPDATE dummy_rast SET rast = ST_SetSkew(rast, 0) WHERE rid = 1;
SELECT
    rid,
    format('(%s, %s)', skewx, skewy) AS skew,
    term,
    georef[idx] AS value
FROM (
    SELECT
        rid,
        ST_SkewX(rast) AS skewx,
        ST_SkewY(rast) AS skewy,
        string_to_array(ST_GeoReference(rast), E'\n') AS georef
    FROM dummy_rast
    WHERE rid = 1
) AS refs
CROSS JOIN (VALUES
    (1, 'scaleX'),
    (2, 'skewY'),
    (3, 'skewX'),
    (4, 'scaleY'),
    (5, 'originX'),
    (6, 'originY')
) AS parts(idx, term)
ORDER BY idx;
Вивід растрових зображень
rid |  skew  |  term   |    value
-----+--------+---------+--------------
   1 | (0, 0) | scaleX  | 2.0000000000
   1 | (0, 0) | skewY   | 0.0000000000
   1 | (0, 0) | skewX   | 0.0000000000
   1 | (0, 0) | scaleY  | 3.0000000000
   1 | (0, 0) | originX | 0.5000000000
   1 | (0, 0) | originY | 0.5000000000
(6 rows)

Назва

ST_SetSRID — Встановлює SRID растра на певне ціле число srid, визначене в таблиці spatial_ref_sys.

Короткий огляд

raster ST_SetSRID(raster rast, integer srid);

Description

Встановлює SRID на растрі на певне ціле значення.

[Примітка]

Ця функція жодним чином не трансформує растр — вона просто встановлює метадані, що визначають просторову референцію системи координат, в якій він зараз знаходиться. Корисно для подальших трансформацій.


Назва

ST_SetUpperLeft — Встановлює значення верхнього лівого кута пікселя растру на проектовані координати X і Y.

Короткий огляд

raster ST_SetUpperLeft(raster rast, double precision x, double precision y);

Description

Встановіть значення верхнього лівого кута растра на проектовані координати X і Y

Приклади

Code
SELECT ST_SetUpperLeft(rast, -71.01, 42.37)
FROM dummy_rast
WHERE rid = 2;
                    

Див. також

ST_UpperLeftX, ST_UpperLeftY


Назва

ST_Resample — Передискретизуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри, довільний кут сітки та набір атрибутів геореференціювання растра, визначених або запозичених з іншого растра.

Короткий огляд

raster ST_Resample(raster rast, integer width, integer height, double precision gridx=NULL, double precision gridy=NULL, double precision skewx=0, double precision skewy=0, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resample(raster rast, double precision scalex=0, double precision scaley=0, double precision gridx=NULL, double precision gridy=NULL, double precision skewx=0, double precision skewy=0, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resample(raster rast, raster ref, text algorithm=NearestNeighbor, double precision maxerr=0.125, boolean usescale=true);

raster ST_Resample(raster rast, raster ref, boolean usescale, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Ресемплуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри (ширина та висота), кут сітки (gridx та gridy) та набір атрибутів геореференціювання растра (scalex, scaley, skewx та skewy), визначених або запозичених з іншого растра. Якщо використовується еталонний растр, обидва растри повинні мати однаковий SRID.

Нові значення пікселів обчислюються за допомогою одного з наступних алгоритмів ресемплінгу:

  • NearestNeighbor (англійська або американська орфографія)

  • Bilinear

  • Cubic

  • CubicSpline

  • Lanczos

  • Max

  • Min

За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгірші результати інтерполяції.

Якщо не вказано maxerr, використовується максимальна похибка 0,125%.

[Примітка]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Покращено: додано опції максимального та мінімального значення ресемплювання 3.4.0

Приклади

Code
SELECT
    ST_Width(orig) AS orig_width,
    ST_Width(reduce_100) AS new_width
FROM (
    SELECT
        rast AS orig,
        ST_Resample(rast, 100, 100) AS reduce_100
    FROM aerials.boston
    WHERE ST_Intersects(
        rast,
        ST_Transform(ST_MakeEnvelope(-71.128, 42.2392, -71.1277, 42.2397, 4326),
            26986)
    )
    LIMIT 1
) AS foo;
Вивід растрових зображень
orig_width | new_width
------------+-------------
        200 |         100

Див. також

ST_Rescale, ST_Resize, ST_Transform


Назва

ST_Rescale — Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.

Короткий огляд

raster ST_Rescale(raster rast, double precision scalexy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Rescale(raster rast, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою одного з наступних алгоритмів ресемплінгу:

  • NearestNeighbor (англійська або американська орфографія)

  • Bilinear

  • Cubic

  • CubicSpline

  • Lanczos

  • Max

  • Min

За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгірші результати інтерполяції.

scalex та scaley визначають новий розмір пікселя. scaley часто повинен бути від'ємним, щоб отримати добре орієнтований растр.

Коли новий scalex або scaley не є дільником ширини або висоти растра, розмір отриманого растра розширюється, щоб охопити розмір наданого растра. Якщо ви хочете бути впевнені, що точний розмір вхідних даних буде збережено, див. ST_Resize

maxerr — це поріг для наближення перетворення за допомогою алгоритму ресемплінгу (в пікселях). Якщо maxerr не вказано, використовується значення за замовчуванням 0,125, яке є таким самим, як і в утиліті GDAL gdalwarp. Якщо встановлено нульове значення, наближення не відбувається.

[Примітка]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

[Примітка]

ST_Rescale відрізняється від ST_SetScale тим, що ST_SetScale не виконує ресемплінг растру для відповідності розмірам растру. ST_SetScale лише змінює метадані (або геореференцію) растра, щоб виправити спочатку неправильно вказане масштабування. ST_Rescale призводить до того, що растр має різну ширину і висоту, обчислені для відповідності географічному розміру вхідного растра. ST_SetScale не змінює ні ширину, ні висоту растра.

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Покращено: додано опції максимального та мінімального значення ресемплювання 3.4.0

Змінено: 2.1.0 Працює з растрами без SRID

Приклади

Простий приклад перемасштабування растру з розміру пікселя 0,001 градуса до розміру пікселя 0,0015 градуса.

This example returns the original raster pixel size.

Code
SELECT ST_PixelWidth(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0)) width
Вивід растрових зображень
0.001

This example returns the pixel size of the rescaled raster.

Code
SELECT ST_PixelWidth(ST_Rescale(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0015)) width
Вивід растрових зображень
0.0015

Назва

ST_Reskew — Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.

Короткий огляд

raster ST_Reskew(raster rast, double precision skewxy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Reskew(raster rast, double precision skewx, double precision skewy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгіршу інтерполяцію.

skewx та skewy визначають новий кут нахилу.

Розмір нового растра буде відповідати розміру наданого растра.

Відсоток максимальної похибки 0,125, якщо не вказано maxerr.

[Примітка]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

[Примітка]

ST_Reskew відрізняється від ST_SetSkew тим, що ST_SetSkew не виконує ресемплінгу растра для відповідності розмірам растра. ST_SetSkew лише змінює метадані (або геореференцію) растра, щоб виправити спочатку неправильно вказаний нахил. ST_Reskew призводить до того, що растр має різну ширину і висоту, обчислені для відповідності географічному розміру вхідного растра. ST_SetSkew не змінює ні ширину, ні висоту растра.

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Змінено: 2.1.0 Працює з растрами без SRID

Приклади

Простий приклад вирівнювання растру з нахилом від 0,0 до 0,0015.

This example uses the original non-rotated raster.

Code
SELECT ST_Rotation(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0));
Вивід растрових зображень
st_rotation
-------------
           0
(1 row)

The reskewed raster rotation.

Code
SELECT ST_Rotation(ST_Reskew(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0015));
Вивід растрових зображень
st_rotation
------------------
 -0.982793723247329
(1 row)

Назва

ST_SnapToGrid — Виконує ресемплінг растра, прив'язавши його до сітки. Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.

Короткий огляд

raster ST_SnapToGrid(raster rast, double precision gridx, double precision gridy, text algorithm=NearestNeighbor, double precision maxerr=0.125, double precision scalex=DEFAULT 0, double precision scaley=DEFAULT 0);

raster ST_SnapToGrid(raster rast, double precision gridx, double precision gridy, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_SnapToGrid(raster rast, double precision gridx, double precision gridy, double precision scalexy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Виконує ресемплінг растра, прив'язуючи його до сітки, визначеної довільним кутом пікселя (gridx & gridy) і, за бажанням, розміром пікселя (scalex & scaley). Нові значення пікселів обчислюються за допомогою алгоритму передискретизації NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгіршу інтерполяцію.

gridx та gridy визначають будь-який довільний піксельний кут нової сітки. Це не обов'язково верхній лівий кут нового растра, і він не обов'язково повинен знаходитися всередині або на краю нового растрового простору.

Ви можете додатково визначити розмір пікселів нової сітки за допомогою scalex та scaley.

Розмір нового растра буде відповідати розміру наданого растра.

Відсоток максимальної похибки 0,125, якщо не вказано maxerr.

[Примітка]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

[Примітка]

Використовуйте ST_Resample, якщо вам потрібно більше контролю над параметрами сітки.

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Змінено: 2.1.0 Працює з растрами без SRID

Приклади

Простий приклад прив'язки растру до дещо іншої сітки.

This example returns the upper-left X coordinate of the original raster.

Code
SELECT ST_UpperLeftX(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0));
Вивід растрових зображень
st_upperleftx
---------------
             0
(1 row)

The upper left of raster after snapping.

Code
SELECT ST_UpperLeftX(ST_SnapToGrid(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0002, 0.0002));
Вивід растрових зображень
st_upperleftx
---------------
       -0.0008
(1 row)

Назва

ST_Resize — Змінити розмір растру до нової ширини/висоти

Короткий огляд

raster ST_Resize(raster rast, integer width, integer height, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resize(raster rast, double precision percentwidth, double precision percentheight, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resize(raster rast, text width, text height, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Змінити розмір растру до нової ширини/висоти. Нову ширину/висоту можна вказати у вигляді точної кількості пікселів або відсотка від ширини/висоти растру. Розмір нового растру буде таким самим, як розмір наданого растру.

Нові значення пікселів обчислюються за допомогою алгоритму передискретизації NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгіршу інтерполяцію.

Варіант 1 очікує фактичну ширину/висоту вихідного растру.

Варіант 2 очікує десяткові значення від нуля (0) до одиниці (1), що вказують відсоток ширини/висоти вхідного растра.

Варіант 3 приймає або фактичну ширину/висоту вихідного растра, або текстовий відсоток ("20%"), що вказує відсоток ширини/висоти вхідного растра.

Доступність: 2.1.0 Вимагає GDAL 1.6.1+

Приклади

Code
WITH foo AS(
SELECT
    1 AS rid,
    ST_Resize(ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0),
            1, '8BUI', 255, 0
        ),
    '50%', '500') AS rast
UNION ALL
SELECT
    2 AS rid,
    ST_Resize(ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0),
            1, '8BUI', 255, 0
        ),
    500, 100) AS rast
UNION ALL
SELECT
    3 AS rid,
    ST_Resize(ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0),
            1, '8BUI', 255, 0
        ),
    0.25, 0.9) AS rast
)
SELECT
    rid,
    ST_Width(rast) AS width,
    ST_Height(rast) AS height,
    ST_ScaleX(rast) AS scale_x,
    round(ST_ScaleY(rast)::numeric, 4) AS scale_y
FROM foo
ORDER BY rid
Вивід растрових зображень
rid | width | height | scale_x | scale_y
-----+-------+--------+---------+---------
   1 |   500 |    500 |       2 | -2.0000
   2 |   500 |    100 |       2 | -10.0000
   3 |   250 |    900 |       4 | -1.1111
(3 rows)

Назва

ST_Transform — Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм передискретизації. Доступні опції: NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos. За замовчуванням використовується NearestNeighbor.

Короткий огляд

raster ST_Transform(raster rast, integer srid, text algorithm=NearestNeighbor, double precision maxerr=0.125, double precision scalex, double precision scaley);

raster ST_Transform(raster rast, integer srid, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Transform(raster rast, raster alignto, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм деформації пікселів. Використовує 'NearestNeighbor', якщо алгоритм не вказано, і maxerror у відсотках 0,125, якщо maxerr не вказано.

Варіанти алгоритму: 'NearestNeighbor', 'Bilinear', 'Cubic', 'CubicSpline' та 'Lanczos'. Докладнішу інформацію див. у розділі: Методи передискретизації GDAL Warp.

ST_Transform часто плутають з ST_SetSRID(). ST_Transform фактично змінює координати растра (і перераховує значення пікселів) з однієї системи просторових координат в іншу, тоді як ST_SetSRID() просто змінює ідентифікатор SRID растра.

На відміну від інших варіантів, варіант 3 вимагає використання опорного растра як alignto. Перетворений растр буде перетворений у просторову систему координат (SRID) опорного растра і вирівняний (ST_SameAlignment = TRUE) з опорним растром.

[Примітка]

Якщо ви виявили, що підтримка перетворення не працює належним чином, можливо, вам доведеться встановити змінну середовища PROJSO на бібліотеку проекцій, яку використовує ваша збірка PostGIS. Для цього потрібно лише вказати ім'я файлу. Наприклад, у Windows у Панелі керування -> Система -> Змінні середовища додайте системну змінну з назвою PROJSO і встановіть для неї значення libproj.dll. Після цієї зміни вам доведеться перезапустити службу/демон PostgreSQL.

[Застереження]

При трансформації покриття плиток майже завжди потрібно використовувати опорний растр, щоб забезпечити однакове вирівнювання і відсутність проміжків у плитках, як показано в прикладі: Варіант 3.

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Покращено: 2.1.0 Додано варіант ST_Transform(rast, alignto)

Приклади

Compare a source raster with nearest-neighbor and bilinear reprojections. The diagonal bands make the resampling behavior visible: nearest-neighbor keeps hard pixel steps, while bilinear smooths values between pixels. All three figures are generated from this query at manual build time.

Code
WITH rows AS (
    SELECT
        y,
        array_agg(
            ((
                    x * 3 + y * 5
                    + CASE WHEN (x + y) % 8 < 4 THEN 80 ELSE 0 END
                ) % 255)::double precision
            ORDER BY x
        ) AS row_values
    FROM generate_series(1, 80) AS y
    CROSS JOIN generate_series(1, 80) AS x
    GROUP BY y
), source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(
                80, 80,
                -500000, 600000,
                2500, -2500,
                0, 0,
                2163
            ),
            1, '8BUI', 0, NULL
        ),
        1, 1, 1,
        array_agg(row_values ORDER BY y)::double precision[][]
    ) AS rast
    FROM rows
), transformed AS (
    SELECT
        rast,
        ST_Transform(rast, 4326, 'NearestNeighbor') AS nearest,
        ST_Transform(rast, 4326, 'Bilinear') AS bilinear
    FROM source
)
SELECT
    ST_AsPNG(rast) AS "source (EPSG:2163)",
    ST_AsPNG(nearest) AS "nearest (EPSG:4326)",
    ST_AsPNG(bilinear) AS "bilinear (EPSG:4326)"
FROM transformed;
Вивід растрових зображень
PNG image, 80 x 80 pixels | PNG image, 98 x 64 pixels | PNG image, 98 x 64 pixels
Figure
Geometry figure for visual-rt-st-transform-01

Raster reprojection and resampling.

Massachusetts State Plane source

WGS 84 nearest-neighbor

WGS 84 bilinear

Variant 3.

Нижче показано різницю між використанням ST_Transform(raster, srid) та ST_Transform(raster, alignto)

Code
WITH foo AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 300, 0) AS rast
), bar AS (
    SELECT
        ST_Transform(rast, 4269) AS alignto
    FROM foo
    LIMIT 1
), baz AS (
    SELECT
        rid,
        rast,
        ST_Transform(rast, 4269) AS not_aligned,
        ST_Transform(rast, alignto) AS aligned
    FROM foo
    CROSS JOIN bar
)
SELECT
    ST_Collect(ST_ConvexHull(not_aligned) ORDER BY rid) AS not_aligned,
    ST_Collect(ST_ConvexHull(aligned) ORDER BY rid) AS aligned
FROM baz
Вивід растрових зображень
MULTIPOLYGON(((-107.007 50.2,-107.005 50.2,-107.005 50.198,-107.007 50.198,-107.007 50.2)),((-107.004 50.201,-107.002 50.201,-107.002 50.198,-107.004 50.198,-107.004 50.201)),((-107.001 50.201,-106.999 50.201,-106.999 50.198,-107.001 50.198,-107.001 50.201)),((-107.007 50.199,-107.004 50.199,-107.004 50.196,-107.007 50.196,-107.007 50.199)),((-107.004 50.199,-107.001 50.199,-107.001 50.196,-107.004 50.196,-107.004 50.199)),((-107.001 50.199,-106.999 50.199,-106.999 50.196,-107.001 50.196,-107.001 50.199)),((-107.006 50.197,-107.004 50.197,-107.004 50.194,-107.006 50.194,-107.006 50.197)),((-107.004 50.197,-107.001 50.197,-107.001 50.194,-107.004 50.194,-107.004 50.197)),((-107.001 50.197,-106.998 50.197,-106.998 50.195,-107.001 50.195,-107.001 50.197))) | MULTIPOLYGON(((-107.007 50.2,-107.005 50.2,-107.005 50.198,-107.007 50.198,-107.007 50.2)),((-107.005 50.202,-107.001 50.202,-107.001 50.198,-107.005 50.198,-107.005 50.202)),((-107.002 50.202,-106.998 50.202,-106.998 50.198,-107.002 50.198,-107.002 50.202)),((-107.007 50.199,-107.003 50.199,-107.003 50.195,-107.007 50.195,-107.007 50.199)),((-107.005 50.199,-107.001 50.199,-107.001 50.195,-107.005 50.195,-107.005 50.199)),((-107.002 50.199,-106.998 50.199,-106.998 50.195,-107.002 50.195,-107.002 50.199)),((-107.007 50.198,-107.003 50.198,-107.003 50.194,-107.007 50.194,-107.007 50.198)),((-107.005 50.198,-107.001 50.198,-107.001 50.194,-107.005 50.194,-107.005 50.198)),((-107.002 50.198,-106.998 50.198,-106.998 50.194,-107.002 50.194,-107.002 50.198)))
Figure
Geometry figure for visual-rt-st-transform-02

Див. також

ST_Transform, ST_SetSRID

11.8. Редактори растрових каналів

  • ST_SetBandNoDataValue — Встановлює значення для заданого каналу, яке не представляє даних. Якщо канал не вказано, вважається, що це канао 1. Щоб позначити канал як такий, що не має значення nodata, встановіть значення nodata = NULL.
  • ST_SetBandIsNoData — Встановлює прапор isnodata каналу на TRUE.
  • ST_SetBandPath — Оновлює шля та номер зовнішнього каналу out-db
  • ST_SetBandIndex — Оновити номер зовнішнього каналу out-db

Назва

ST_SetBandNoDataValue — Встановлює значення для заданого каналу, яке не представляє даних. Якщо канал не вказано, вважається, що це канао 1. Щоб позначити канал як такий, що не має значення nodata, встановіть значення nodata = NULL.

Короткий огляд

raster ST_SetBandNoDataValue(raster rast, double precision nodatavalue);

raster ST_SetBandNoDataValue(raster rast, integer band, double precision nodatavalue, boolean forcechecking=false);

Description

Встановлює значення, яке не представляє даних для каналу. Якщо не вказано, припускається канал 1. Це вплине на результати функцій ST_Polygon, ST_DumpAsPolygons та ST_PixelAs...().

Приклади

This example changes only the first band NODATA value.

Code
UPDATE dummy_rast
    SET rast = ST_SetBandNoDataValue(rast, 1, 254)
WHERE rid = 2;

This example changes the NODATA value for bands 1, 2, and 3.

Code
UPDATE dummy_rast
    SET rast =
        ST_SetBandNoDataValue(ST_SetBandNoDataValue(ST_SetBandNoDataValue(rast, 1, 254),
                2, 99),
                3, 108)
        WHERE rid = 2;

This example removes the NODATA value so that all pixels are considered by processing functions.

Code
UPDATE dummy_rast
    SET rast = ST_SetBandNoDataValue(rast, 1, NULL)
WHERE rid = 2;
                    

Див. також

ST_BandNoDataValue, ST_NumBands


Назва

ST_SetBandIsNoData — Встановлює прапор isnodata каналу на TRUE.

Короткий огляд

raster ST_SetBandIsNoData(raster rast, integer band=1);

Description

Встановлює прапор isnodata для каналу на true. Якщо не вказано, припускається канал 1. Цю функцію слід викликати тільки тоді, коли прапор вважається брудним. Тобто, коли результат виклику ST_BandIsNoData відрізняється при використанні TRUE як останнього аргументу і без його використання

Доступність: 2.0.0

Приклади

This example creates a dummy table with one raster column. The raster has two bands and one pixel per band. In the first band, the NODATA value and pixel value are both 3. In the second band, the NODATA value is 13 and the pixel value is 4.

Code
create table dummy_rast (rid integer, rast raster);

insert into dummy_rast values(
1,
(
'01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0200' -- nBands (uint16 0)
||
'17263529ED684A3F' -- scaleX (float64 0.000805965234044584)
||
'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458)
||
'1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098)
||
'718F0E9A27A44840' -- ipY (float64 49.2824585505576)
||
'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707)
||
'7550EB853EC32B3F' -- skewY (float64 0.000211812383858704)
||
'E6100000' -- SRID (int32 4326)
||
'0100' -- width (uint16 1)
||
'0100' -- height (uint16 1)
||
'4' -- hasnodatavalue set to true, isnodata value set to false (when it should be true)
||
'2' -- first band type (4BUI)
||
'03' -- novalue==3
||
'03' -- pixel(0,0)==3 (same that nodata)
||
'0' -- hasnodatavalue set to false
||
'5' -- second band type (16BSI)
||
'0D00' -- novalue==13
||
'0400' -- pixel(0,0)==4
)::raster
);

select ST_BandIsNoData(rast, 1) from dummy_rast where rid = 1; -- Expected false
select ST_BandIsNoData(rast, 1, TRUE) from dummy_rast where rid = 1; -- Expected true
                    

The isnodata flag is dirty, so set it to true.

Code
update dummy_rast set rast = ST_SetBandIsNoData(rast, 1) where rid = 1;


select ST_BandIsNoData(rast, 1) from dummy_rast where rid = 1; -- Expected true

                    

Назва

ST_SetBandPath — Оновлює шля та номер зовнішнього каналу out-db

Короткий огляд

raster ST_SetBandPath(raster rast, integer band, text outdbpath, integer outdbindex, boolean force=false);

Description

Оновлює шлях до зовнішнього растрового файлу та номер зовнішнього каналу out-db.

[Примітка]

Якщо force встановлено на true, не виконуються жодні тести для забезпечення сумісності (наприклад, вирівнювання, підтримка пікселів) між зовнішнім растровим файлом та растром PostGIS. Цей режим призначений для змін файлової системи, в якій знаходиться зовнішній растр.

Доступність: 2.5.0

Приклади

Code
WITH foo AS (
    SELECT ST_AddBand(
        NULL::raster,
        '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif',
        NULL::int[]
    ) AS rast
)
SELECT
    1 AS query,
    bandnum,
    regexp_replace(path, '^.*/', '') AS path,
    outdbbandnum
FROM ST_BandMetaData(
    (SELECT rast FROM foo),
    ARRAY[1, 3, 2]::int[]
) AS metadata
UNION ALL
SELECT
    2, bandnum,
    regexp_replace(path, '^.*/', ''),
    outdbbandnum
FROM ST_BandMetaData((
        SELECT
            ST_SetBandPath(rast,
                2,
                '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected2.tif',
                1
            ) AS rast
        FROM foo
    ),
    ARRAY[1, 3, 2]::int[]
) AS metadata
ORDER BY 1, 2;

In the second result set, band 2 now points at Projected2.tif and uses out-db band 1.

Вивід растрових зображень
query | bandnum | path           | outdbbandnum
-------+---------+----------------+--------------
     1 |       1 | Projected.tif  |            1
     1 |       2 | Projected.tif  |            2
     1 |       3 | Projected.tif  |            3
     2 |       1 | Projected.tif  |            1
     2 |       2 | Projected2.tif |            1
     2 |       3 | Projected.tif  |            3

Див. також

ST_BandMetaData, ST_SetBandIndex


Назва

ST_SetBandIndex — Оновити номер зовнішнього каналу out-db

Короткий огляд

raster ST_SetBandIndex(raster rast, integer band, integer outdbindex, boolean force=false);

Description

Оновлює зовнішній номер каналу out-db. Це не впливає на зовнішній растровий файл, пов'язаний з каналом out-db

[Примітка]

Якщо force встановлено на true, тести на сумісність (наприклад, вирівнювання, підтримка пікселів) між зовнішнім растровим файлом і растром PostGIS не виконуються. Цей режим призначений для випадків, коли канали переміщуються в зовнішньому растровому файлі.

[Примітка]

Внутрішньо цей метод замінює канал растра PostGIS за індексом band новим каналом замість оновлення існуючої інформації про шлях.

Доступність: 2.5.0

Приклади

Code
WITH foo AS (
    SELECT ST_AddBand(
        NULL::raster,
        '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif',
        NULL::int[]
    ) AS rast
)
SELECT
    1 AS query,
    bandnum,
    regexp_replace(path, '^.*/', '') AS path,
    outdbbandnum
FROM ST_BandMetaData(
    (SELECT rast FROM foo),
    ARRAY[1, 3, 2]::int[]
) AS metadata
UNION ALL
SELECT
    2, bandnum,
    regexp_replace(path, '^.*/', ''),
    outdbbandnum
FROM ST_BandMetaData((
        SELECT
            ST_SetBandIndex(rast,
                2,
                1
            ) AS rast
        FROM foo
    ),
    ARRAY[1, 3, 2]::int[]
) AS metadata
ORDER BY 1, 2;

In the second result set, band 2 still points at the same file but now reads external band 1.

Вивід растрових зображень
query | bandnum | path          | outdbbandnum
-------+---------+---------------+--------------
     1 |       1 | Projected.tif |            1
     1 |       2 | Projected.tif |            2
     1 |       3 | Projected.tif |            3
     2 |       1 | Projected.tif |            1
     2 |       2 | Projected.tif |            1
     2 |       3 | Projected.tif |            3

Див. також

ST_BandMetaData, ST_SetBandPath

11.9. Статистика та аналітика растрових каналів

  • ST_Count — Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню nodata.
  • ST_CountAgg — Агрегат. Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню NODATA.
  • ST_Histogram — Повертає набір записів, що підсумовують розподіл даних растрового або растрового покриття за окремими діапазонами бінів. Кількість бінів обчислюється автоматично, якщо не вказано інше.
  • ST_Quantile — Обчислюйте квантилі для покриття растрового зображення або растрової таблиці в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растрового зображення.
  • ST_SummaryStats — Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, то вважається, що це канал 1.
  • ST_SummaryStatsAgg — Агрегат. Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу набору растрів. Якщо діапазон не вказано, передбачається канал 1.
  • ST_ValueCount — Повертає набір записів, що містять значення піксельної смуги та кількість пікселів у заданому каналі растра (або растрового покриття), які мають заданий набір значень. Якщо канал не вказана, за замовчуванням використовується смуга 1. За замовчуванням пікселі з значенням nodata не враховуються. Виводяться всі інші значення пікселя, а значення пікселя каналу округлюються до найближчого цілого числа.

Назва

ST_Count — Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню nodata.

Короткий огляд

bigint ST_Count(raster rast, integer nband=1, boolean exclude_nodata_value=true);

bigint ST_Count(raster rast, boolean exclude_nodata_value);

Description

Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, nband за замовчуванням дорівнює 1.

[Примітка]

Якщо exclude_nodata_value встановлено на true, будуть підраховуватися тільки пікселі, значення яких не дорівнює значенню nodata растра. Встановіть exclude_nodata_value на false, щоб підрахувати всі пікселі

Змінено: 3.1.0 - Вилучено варіанти ST_Count(rastertable, rastercolumn, ...). Замість цього використовуйте ST_CountAgg.

Доступність: 2.0.0

Приклади

Example will count all pixels not 249 and one will count all pixels.

Code
SELECT rid, ST_Count(ST_SetBandNoDataValue(rast, 249)) As exclude_nodata,
        ST_Count(ST_SetBandNoDataValue(rast, 249), false) As include_nodata
    FROM dummy_rast WHERE rid=2;
Вивід растрових зображень
rid | exclude_nodata | include_nodata
-----+----------------+----------------
   2 |             23 |             25

Назва

ST_CountAgg — Агрегат. Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню NODATA.

Короткий огляд

bigint ST_CountAgg(raster rast, integer nband, boolean exclude_nodata_value, double precision sample_percent);

bigint ST_CountAgg(raster rast, integer nband, boolean exclude_nodata_value);

bigint ST_CountAgg(raster rast, boolean exclude_nodata_value);

Description

Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, nband за замовчуванням дорівнює 1.

Якщо exclude_nodata_value встановлено на true, будуть підраховуватися тільки пікселі, значення яких не дорівнює значенню NODATA растра. Встановіть exclude_nodata_value на false, щоб підрахувати всі пікселі

За замовчуванням буде зразковано всі пікселі. Щоб отримати швидшу відповідь, встановіть sample_percent на значення від нуля (0) до одиниці (1)

Доступність: 2.2.0

Приклади

Code
WITH foo AS (
    SELECT
        rast.rast
    FROM (
        SELECT ST_SetValue(ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0),
                        1, '64BF', 0, 0
                    ),
                    1, 1, 1, -10
                ),
                1, 5, 4, 0
            ),
            1, 5, 5, 3.14159
        ) AS rast
    ) AS rast
    FULL JOIN (
        SELECT generate_series(1, 10) AS id
    ) AS id
        ON 1 = 1
)
SELECT
    ST_CountAgg(rast, 1, TRUE) AS non_nodata_pixels
FROM foo;
Вивід растрових зображень
non_nodata_pixels
-------------------
                20
(1 row)

Назва

ST_Histogram — Повертає набір записів, що підсумовують розподіл даних растрового або растрового покриття за окремими діапазонами бінів. Кількість бінів обчислюється автоматично, якщо не вказано інше.

Короткий огляд

SETOF record ST_Histogram(raster rast, integer nband=1, boolean exclude_nodata_value=true, integer bins=autocomputed, double precision[] width=NULL, boolean right=false);

SETOF record ST_Histogram(raster rast, integer nband, integer bins, double precision[] width=NULL, boolean right=false);

SETOF record ST_Histogram(raster rast, integer nband, boolean exclude_nodata_value, integer bins, boolean right);

SETOF record ST_Histogram(raster rast, integer nband, integer bins, boolean right);

Description

Повертає набір записів, що складається з мінімального, максимального значення, кількості та відсотка для заданого растрового діапазону для кожного біна. Якщо діапазон не вказано, nband за замовчуванням дорівнює 1.

[Примітка]

За замовчуванням враховуються тільки значення пікселів, які не дорівнюють значенню nodata. Встановіть exclude_nodata_value на false, щоб підрахувати всі пікселі.

width

width: масив, що вказує ширину кожної категорії/біну. Якщо кількість бінів перевищує кількість ширин, ширини повторюються.

Приклад: 9 контейнерів, ширина яких становить [a, b, c], дадуть результат [a, b, c, a, b, c, a, b, c]

bins

Кількість розривів — це кількість записів, які ви отримаєте від функції, якщо вони вказані. Якщо вони не вказані, кількість розривів обчислюється автоматично.

right

обчислювати гістограму справа, а не зліва (за замовчуванням). Це змінює критерії оцінки значення x з [a, b) на (a, b]

Змінено: 3.1.0 Вилучено варіант ST_Histogram(table_name, column_name).

Доступність: 2.0.0

Приклади

Single raster tile - compute histograms for bands 1, 2, 3 and autocompute bins.

Code
SELECT band, (stats).*
FROM (SELECT rid, band, ST_Histogram(rast, band) As stats
    FROM dummy_rast CROSS JOIN generate_series(1, 3) As band
     WHERE rid=2) As foo;
Вивід растрових зображень
band |  min  |  max  | count | percent
------+-------+-------+-------+---------
    1 |   249 |   250 |     2 |    0.08
    1 |   250 |   251 |     2 |    0.08
    1 |   251 |   252 |     1 |    0.04
    1 |   252 |   253 |     2 |    0.08
    1 |   253 |   254 |    18 |    0.72
    2 |    78 | 113.2 |    11 |    0.44
    2 | 113.2 | 148.4 |     4 |    0.16
    2 | 148.4 | 183.6 |     4 |    0.16
    2 | 183.6 | 218.8 |     1 |    0.04
    2 | 218.8 |   254 |     5 |     0.2
    3 |    62 | 100.4 |    11 |    0.44
    3 | 100.4 | 138.8 |     5 |     0.2
    3 | 138.8 | 177.2 |     4 |    0.16
    3 | 177.2 | 215.6 |     1 |    0.04
    3 | 215.6 |   254 |     4 |    0.16

Just band 2 but for 6 bins.

Code
SELECT (stats).*
FROM (SELECT rid, ST_Histogram(rast, 2, 6) As stats
    FROM dummy_rast
     WHERE rid=2) As foo;
Вивід растрових зображень
min     |    max     | count | percent
------------+------------+-------+---------
         78 | 107.333333 |     9 |    0.36
 107.333333 | 136.666667 |     6 |    0.24
 136.666667 |        166 |     0 |       0
        166 | 195.333333 |     4 |    0.16
 195.333333 | 224.666667 |     1 |    0.04
 224.666667 |        254 |     5 |     0.2
(6 rows)

Same as previous but we explicitly control the pixel value range of each bin.

Code
SELECT (stats).*
FROM (SELECT rid, ST_Histogram(rast, 2, 6, ARRAY[0.5, 1, 4, 100, 5]) As stats
    FROM dummy_rast
     WHERE rid=2) As foo;
Вивід растрових зображень
min  |  max  | count | percent
-------+-------+-------+----------
    78 |  78.5 |     1 |     0.08
  78.5 |  79.5 |     1 |     0.04
  79.5 |  83.5 |     0 |        0
  83.5 | 183.5 |    17 |   0.0068
 183.5 | 188.5 |     0 |        0
 188.5 |   254 |     6 | 0.003664
(6 rows)

Назва

ST_Quantile — Обчислюйте квантилі для покриття растрового зображення або растрової таблиці в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растрового зображення.

Короткий огляд

SETOF record ST_Quantile(raster rast, integer nband=1, boolean exclude_nodata_value=true, double precision[] quantiles=NULL);

SETOF record ST_Quantile(raster rast, double precision[] quantiles);

SETOF record ST_Quantile(raster rast, integer nband, double precision[] quantiles);

double precision ST_Quantile(raster rast, double precision quantile);

double precision ST_Quantile(raster rast, boolean exclude_nodata_value, double precision quantile=NULL);

double precision ST_Quantile(raster rast, integer nband, double precision quantile);

double precision ST_Quantile(raster rast, integer nband, boolean exclude_nodata_value, double precision quantile);

double precision ST_Quantile(raster rast, integer nband, double precision quantile);

Description

Обчисліть квантилі для покриття растра або таблиці растра в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растра.

[Примітка]

Якщо exclude_nodata_value встановлено на false, також будуть підраховуватися пікселі без даних.

Змінено: 3.1.0 Вилучено варіант ST_Quantile(table_name, column_name).

Доступність: 2.0.0

Приклади

Example will consider only pixels of band 1 that are not 249 and in named quantiles.

Code
UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast, 249) WHERE rid=2;

SELECT (pvq).*
FROM (SELECT ST_Quantile(rast, ARRAY[0.25, 0.75]) As pvq
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvq).quantile;
Вивід растрових зображень
quantile | value
----------+-------
     0.25 |   253
     0.75 |   254
Code
SELECT ST_Quantile(rast, 0.75) As value
FROM dummy_rast WHERE rid=2;
Вивід растрових зображень
254

Real live example. Quantile of all pixels in band 2 intersecting a geometry.

Code
SELECT rid, (ST_Quantile(rast, 2)).* As pvc
    FROM o_4_boston
        WHERE ST_Intersects(
            rast,
            ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))', 26986)
            )
ORDER BY value, quantile, rid
;
Вивід растрових зображень
rid | quantile | value
-----+----------+-------
   1 |        0 |     0
   2 |        0 |     0
  14 |        0 |     1
  15 |        0 |     2
  14 |     0.25 |    37
   1 |     0.25 |    42
  15 |     0.25 |    47
   2 |     0.25 |    50
  14 |      0.5 |    56
   1 |      0.5 |    64
  15 |      0.5 |    66
   2 |      0.5 |    77
  14 |     0.75 |    81
  15 |     0.75 |    87
   1 |     0.75 |    94
   2 |     0.75 |   106
  14 |        1 |   199
   1 |        1 |   244
   2 |        1 |   255
  15 |        1 |   255

Назва

ST_SummaryStats — Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, то вважається, що це канал 1.

Короткий огляд

summarystats ST_SummaryStats(raster rast, boolean exclude_nodata_value);

summarystats ST_SummaryStats(raster rast, integer nband, boolean exclude_nodata_value);

Description

Повертає summarystats, що складається з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, nband за замовчуванням дорівнює 1.

[Примітка]

За замовчуванням враховуються тільки значення пікселів, які не дорівнюють значенню nodata. Встановіть exclude_nodata_value на false, щоб отримати кількість всіх пікселів.

[Примітка]

За замовчуванням буде зразковано всі пікселі. Щоб отримати швидшу відповідь, встановіть sample_percent нижче 1

Змінено: 3.1.0 Варіанти ST_SummaryStats(rastertable, rastercolumn, ...) видалено. Замість них використовуйте ST_SummaryStatsAgg.

Доступність: 2.0.0

Приклади

Single raster tile.

Code
SELECT rid, band, (stats).*
FROM (SELECT rid, band, ST_SummaryStats(rast, band) As stats
    FROM dummy_rast CROSS JOIN generate_series(1, 3) As band
     WHERE rid=2) As foo;
Вивід растрових зображень
rid | band | count | sum  |    mean    |  stddev   | min | max
-----+------+-------+------+------------+-----------+-----+-----
   2 |    1 |    23 | 5821 | 253.086957 |  1.248061 | 250 | 254
   2 |    2 |    25 | 3682 |     147.28 | 59.862188 |  78 | 254
   2 |    3 |    25 | 3290 |      131.6 | 61.647384 |  62 | 254

Summarize pixels that intersect buildings of interest.

This example selects the target buildings, clips band 2 of the raster tiles to each building boundary, computes statistics for each clipped region, and then summarizes those statistics by building. It took 574ms on PostGIS Windows 64-bit with all of Boston Buildings and aerial Tiles (tiles each 150x150 pixels ~ 134,000 tiles), ~102,000 building records.

Code
WITH
-- our features of interest
feat AS (
    SELECT gid AS building_id, geom_26986 AS geom
    FROM buildings AS b
    WHERE gid IN (100, 103, 150)
),
-- clip band 2 of raster tiles to boundaries of builds
-- then get stats for these clipped regions
b_stats AS (
    SELECT building_id, (stats).*
    FROM (
        SELECT
            building_id,
            ST_SummaryStats(ST_Clip(rast, 2, geom)) AS stats
        FROM aerials.boston
        INNER JOIN feat
            ON ST_Intersects(feat.geom, rast)
    ) AS foo
)
-- finally summarize stats
SELECT
    building_id,
    SUM(count) AS num_pixels,
    MIN(min) AS min_pval,
    MAX(max) AS max_pval,
    SUM(mean * count) / SUM(count) AS avg_pval
FROM b_stats
WHERE count 
> 0
GROUP BY building_id
ORDER BY building_id;
Вивід растрових зображень
building_id | num_pixels | min_pval | max_pval |     avg_pval
-------------+------------+----------+----------+------------------
        100 |       1090 |        1 |      255 | 61.0697247706422
        103 |        655 |        7 |      182 | 70.5038167938931
        150 |        895 |        2 |      252 | 185.642458100559

Raster coverage.

This example returns statistics for each band.

Code
SELECT band, (stats).*
FROM (SELECT band, ST_SummaryStats('o_4_boston', 'rast', band) As stats
    FROM generate_series(1, 3) As band) As foo;
Вивід растрових зображень
band |  count  |  sum   |       mean       |      stddev      | min | max
------+---------+--------+------------------+------------------+-----+-----
    1 | 8450000 | 725799 | 82.7064349112426 | 45.6800222638537 |   0 | 255
    2 | 8450000 | 700487 | 81.4197705325444 | 44.2161184161765 |   0 | 255
    3 | 8450000 | 575943 |  74.682739408284 | 44.2143885481407 |   0 | 255

For a table, sampling less than 100% can improve speed. Here the sampling is set to 25%.

Code
SELECT band, (stats).*
FROM (SELECT band, ST_SummaryStats('o_4_boston', 'rast', band, true, 0.25) As stats
    FROM generate_series(1, 3) As band) As foo;
Вивід растрових зображень
band |  count  |  sum   |       mean       |      stddev      | min | max
------+---------+--------+------------------+------------------+-----+-----
    1 | 2112500 | 180686 | 82.6890480473373 | 45.6961043857248 |   0 | 255
    2 | 2112500 | 174571 |  81.448503668639 | 44.2252623171821 |   0 | 255
    3 | 2112500 | 144364 | 74.6765884023669 | 44.2014869384578 |   0 | 255
                

Назва

ST_SummaryStatsAgg — Агрегат. Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу набору растрів. Якщо діапазон не вказано, передбачається канал 1.

Короткий огляд

summarystats ST_SummaryStatsAgg(raster rast, integer nband, boolean exclude_nodata_value, double precision sample_percent);

summarystats ST_SummaryStatsAgg(raster rast, boolean exclude_nodata_value, double precision sample_percent);

summarystats ST_SummaryStatsAgg(raster rast, integer nband, boolean exclude_nodata_value);

Description

Повертає summarystats, що складається з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, nband за замовчуванням дорівнює 1.

[Примітка]

За замовчуванням враховуються тільки значення пікселів, які не дорівнюють значенню NODATA. Встановіть exclude_nodata_value на False, щоб отримати кількість всіх пікселів.

[Примітка]

За замовчуванням буде зразковано всі пікселі. Щоб отримати швидшу відповідь, встановіть sample_percent на значення від 0 до 1

Доступність: 2.2.0

Приклади

Code
WITH foo AS (
    SELECT
        rast.rast
    FROM (
        SELECT ST_SetValue(ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0),
                        1, '64BF', 0, 0
                    ),
                    1, 1, 1, -10
                ),
                1, 5, 4, 0
            ),
            1, 5, 5, 3.14159
        ) AS rast
    ) AS rast
    FULL JOIN (
        SELECT generate_series(1, 10) AS id
    ) AS id
        ON 1 = 1
)
SELECT
    (stats).count AS count,
    round((stats).sum::numeric, 3) AS sum,
    round((stats).mean::numeric, 3) AS mean,
    round((stats).stddev::numeric, 3) AS stddev,
    round((stats).min::numeric, 3) AS min,
    round((stats).max::numeric, 3) AS max
FROM (
    SELECT
        ST_SummaryStatsAgg(rast, 1, TRUE, 1) AS stats
    FROM foo
) bar;
Вивід растрових зображень
count |   sum   |  mean  | stddev |   min   |  max
-------+---------+--------+--------+---------+-------
    20 | -68.584 | -3.429 |  6.571 | -10.000 | 3.142
(1 row)

Назва

ST_ValueCount — Повертає набір записів, що містять значення піксельної смуги та кількість пікселів у заданому каналі растра (або растрового покриття), які мають заданий набір значень. Якщо канал не вказана, за замовчуванням використовується смуга 1. За замовчуванням пікселі з значенням nodata не враховуються. Виводяться всі інші значення пікселя, а значення пікселя каналу округлюються до найближчого цілого числа.

Короткий огляд

SETOF record ST_ValueCount(raster rast, integer nband=1, boolean exclude_nodata_value=true, double precision[] searchvalues=NULL, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(raster rast, integer nband, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(raster rast, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

bigint ST_ValueCount(raster rast, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(raster rast, integer nband, boolean exclude_nodata_value, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(raster rast, integer nband, double precision searchvalue, double precision roundto=0);

SETOF record ST_ValueCount(text rastertable, text rastercolumn, integer nband=1, boolean exclude_nodata_value=true, double precision[] searchvalues=NULL, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(text rastertable, text rastercolumn, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(text rastertable, text rastercolumn, integer nband, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

bigintST_ValueCount(text rastertable, text rastercolumn, integer nband, boolean exclude_nodata_value, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(text rastertable, text rastercolumn, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(text rastertable, text rastercolumn, integer nband, double precision searchvalue, double precision roundto=0);

Description

Повертає набір записів із стовпцями value count, які містять значення пікселя каналу та кількість пікселів у растровій плитці або растровому покритті вибраного каналу.

Якщо канал не вказано, nband за замовчуванням дорівнює 1. Якщо searchvalues не вказано, повертаються всі значення пікселів, знайдені в растрі або растровому покритті. Якщо вказано одне значення пошуку, повертається ціле число замість записів, що позначають кількість пікселів, які мають це значення пікселів каналу

[Примітка]

Якщо exclude_nodata_value встановлено на false, також будуть підраховуватися пікселі без даних.

Доступність: 2.0.0

Приклади

Example will count only pixels of band 1 that are not 249.

Code
UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast, 249) WHERE rid=2;

SELECT (pvc).*
FROM (SELECT ST_ValueCount(rast) As pvc
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvc).value;
Вивід растрових зображень
value | count
-------+-------
   250 |     2
   251 |     1
   252 |     2
   253 |     6
   254 |    12

Example will coount all pixels of band 1 including 249.

Code
SELECT (pvc).*
FROM (SELECT ST_ValueCount(rast, 1, false) As pvc
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvc).value;
Вивід растрових зображень
value | count
-------+-------
   249 |     2
   250 |     2
   251 |     1
   252 |     2
   253 |     6
   254 |    12

Example will count only non-nodata value pixels of band 2.

Code
SELECT (pvc).*
FROM (SELECT ST_ValueCount(rast, 2) As pvc
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvc).value;
Вивід растрових зображень
value | count
-------+-------
    78 |     1
    79 |     1
    88 |     1
    89 |     1
    96 |     1
    97 |     1
    98 |     1
    99 |     2
   112 |     2
:

                

Real live example. Count all the pixels in an aerial raster tile band 2 intersecting a geometry. And return only the pixel band values that have a count > 500.

Code
SELECT (pvc).value, SUM((pvc).count) As total
FROM (SELECT ST_ValueCount(rast, 2) As pvc
    FROM o_4_boston
        WHERE ST_Intersects(
            rast,
            ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))', 26986)
             )
        ) As foo
    GROUP BY (pvc).value
    HAVING SUM((pvc).count) > 500
    ORDER BY (pvc).value;
Вивід растрових зображень
value | total
-------+-----
    51 | 502
    54 | 521

Just return count of pixels in each raster tile that have value of 100 of tiles that intersect a specific geometry.

Code
SELECT rid, ST_ValueCount(rast, 2, 100) As count
    FROM o_4_boston
        WHERE ST_Intersects(
            rast,
            ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))', 26986)
             ) ;
Вивід растрових зображень
rid | count
-----+-------
   1 |    56
   2 |    95
  14 |    37
  15 |    64

Див. також

ST_Count, ST_SetBandNoDataValue

11.10. Введення растрових даних

  • ST_RastFromWKB — Повернути растрове значення з растрового файлу Well-Known Binary (WKB).
  • ST_RastFromHexWKB — Повернути растрове значення з шестнадцяткового представлення растру Well-Known Binary (WKB).

Назва

ST_RastFromWKB — Повернути растрове значення з растрового файлу Well-Known Binary (WKB).

Короткий огляд

raster ST_RastFromWKB(bytea wkb);

Description

За заданим растром Well-Known Binary (WKB) повернути растр.

Доступність: 2.5.0

Приклади

Code
SELECT (ST_MetaData(ST_RastFromWKB('\001\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\010@\000\000\000\000\000\000\340?\000\000\000\000\000\000\340?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\024\000'::bytea
    )
)).* AS metadata;
Вивід растрових зображень
upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+--------+--------+-------+-------+------+----------
        0.5 |        0.5 |    10 |     20 |      2 |      3 |     0 |     0 |   10 |        0

Назва

ST_RastFromHexWKB — Повернути растрове значення з шестнадцяткового представлення растру Well-Known Binary (WKB).

Короткий огляд

raster ST_RastFromHexWKB(text wkb);

Description

За заданим растром Well-Known Binary (WKB) у шістнадцятковому представленні повернути растр.

Доступність: 2.5.0

Приклади

Code
SELECT (ST_MetaData(ST_RastFromHexWKB('010000000000000000000000400000000000000840000000000000E03F000000000000E03F000000000000000000000000000000000A0000000A001400'
    )
)).* AS metadata;
Вивід растрових зображень
upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+--------+--------+-------+-------+------+----------
        0.5 |        0.5 |    10 |     20 |      2 |      3 |     0 |     0 |   10 |        0

11.11. Вивід растрових зображень

  • ST_AsBinary/ST_AsWKB — Повернути представлення растру у вигляді добре відомого бінарного коду (WKB).
  • ST_AsHexWKB — Повернути добре відомий бінарний файл (WKB) у шістнадцятковому представленні растру.
  • ST_AsGDALRaster — Повертає растрову плитку у визначеному форматі GDAL Raster. Растрові формати є одними з тих, що підтримуються вашою скомпільованою бібліотекою. Використовуйте ST_GDALDrivers(), щоб отримати список форматів, що підтримуються вашою бібліотекою.
  • ST_AsJPEG — Повертає вибрані канали растрової плитки як одне зображення у форматі Joint Photographic Exports Group (JPEG) (масив байтів). Якщо канал не вказаний і є 1 або більше 3 каналів, то використовується тільки перший канал. Якщо є тільки 3 канали, то використовуються всі 3 канали і відображаються у форматі RGB.
  • ST_AsPNG — уПовертає вибрані канали растрової плитки як одне зображення у форматі PNG (масив байтів). Якщо в растрі вказано 1, 3 або 4 канали і не вказано жодного каналу, то використовуються всі канали. Якщо вказано більше 2 або більше 4 каналів і не вказано жодного каналу, то використовується тільки канал 1. Канали відображаються в просторі RGB або RGBA.
  • ST_AsTIFF — Повертає вибрані канали растра як одне зображення TIFF (масив байтів). Якщо канал не вказана або будь-яка із вказаних смуг не існує в растрі, то буде зроблена спроба використати всі канали.

Назва

ST_AsBinary/ST_AsWKB — Повернути представлення растру у вигляді добре відомого бінарного коду (WKB).

Короткий огляд

bytea ST_AsBinary(raster rast, boolean outasin=FALSE);

bytea ST_AsWKB(raster rast, boolean outasin=FALSE);

Description

Повертає двійкове представлення растру. Якщо outasin має значення TRUE, смуги out-db обробляються як in-db. Детальні відомості про представлення див. у файлі raster/doc/RFC2-WellKnownBinaryFormat, що міститься в папці джерел PostGIS.

Це корисно в бінарних курсорах для вилучення даних з бази даних без перетворення їх у рядкове представлення.

[Примітка]

За замовчуванням, вихідні дані WKB містять зовнішній шлях до файлу для смуг out-db. Якщо клієнт не має доступу до растрового файлу, що лежить в основі смуги out-db, встановіть outasin на TRUE.

Покращено: 2.1.0 Додано outasin

Покращено: 2.5.0 Додано ST_AsWKB

Приклади

Code
SELECT ST_AsBinary(rast) AS rastbin FROM dummy_rast WHERE rid=1;
Вивід растрових зображень
\001\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\010@\000\000\000\000\000\000\340?\000\000\000\000\000\000\340?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\024\000

Див. також

ST_RastFromWKB, ST_AsHexWKB


Назва

ST_AsHexWKB — Повернути добре відомий бінарний файл (WKB) у шістнадцятковому представленні растру.

Короткий огляд

bytea ST_AsHexWKB(raster rast, boolean outasin=FALSE);

Description

Повертає двійкове представлення у шістнадцятковому форматі растра. Якщо outasin дорівнює TRUE, смуги out-db обробляються як in-db. Детальніше про представлення див. raster/doc/RFC2-WellKnownBinaryFormat у папці джерел PostGIS.

[Примітка]

За замовчуванням вихідні дані Hex WKB містять зовнішній шлях до файлу для смуг out-db. Якщо клієнт не має доступу до растрового файлу, що лежить в основі смуги out-db, встановіть outasin на TRUE.

Доступність: 2.5.0

Приклади

Code
SELECT ST_AsHexWKB(rast) AS rastbin FROM dummy_rast WHERE rid=1;
Вивід растрових зображень
010000000000000000000000400000000000000840000000000000E03F000000000000E03F000000000000000000000000000000000A0000000A001400

Назва

ST_AsGDALRaster — Повертає растрову плитку у визначеному форматі GDAL Raster. Растрові формати є одними з тих, що підтримуються вашою скомпільованою бібліотекою. Використовуйте ST_GDALDrivers(), щоб отримати список форматів, що підтримуються вашою бібліотекою.

Короткий огляд

bytea ST_AsGDALRaster(raster rast, text format, text[] options=NULL, integer srid=sameassource);

Description

Повертає растрову плитку у вказаному форматі. Аргументи наведені нижче:

  • Формат format для виводу. Це залежить від драйверів, скомпільованих у вашій бібліотеці libgdal. Зазвичай доступні формати "JPEG", "GTIff", "PNG". Використовуйте ST_GDALDrivers, щоб отримати список форматів, які підтримує ваша бібліотека.

  • options текстовий масив опцій GDAL. Допустимі опції залежать від формату. Докладнішу інформацію див. у розділі Опції формату GDAL Raster.

  • srid the spatial reference identifier to embed in the output raster

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Приклади

Export multiple raster tiles as a single JPEG image with 50 percent quality.

Code
SELECT ST_AsGDALRaster(ST_Union(rast), 'JPEG', ARRAY['QUALITY=50']) As rastjpg
FROM dummy_rast
WHERE rast && ST_MakeEnvelope(10, 10, 11, 11);

One way to export raster into another format is using PostgreSQL large object export functions. The following repeats the JPEG example and exports the result. Note that this requires superuser access because it uses server-side large object functions. It will also export to path on server network. If you need export locally, use the psql equivalent lo_ functions which export to the local file system instead of the server file system.

Code
DROP TABLE IF EXISTS tmp_out ;

CREATE TABLE tmp_out AS
SELECT lo_from_bytea(
       0,
       ST_AsGDALRaster(ST_Union(rast), 'JPEG', ARRAY['QUALITY=50'])
        ) AS loid
  FROM dummy_rast
WHERE rast && ST_MakeEnvelope(10, 10, 11, 11);

SELECT lo_export(loid, '/tmp/dummy.jpg')
   FROM tmp_out;

SELECT lo_unlink(loid)
  FROM tmp_out;

Export a raster as a GeoTIFF using the default creation options.

Code
SELECT ST_AsGDALRaster(rast, 'GTiff') AS rasttiff
FROM dummy_rast WHERE rid = 2;

Export a GeoTIFF using JPEG compression at 90 percent quality and embed SRID 4269.

Code
SELECT ST_AsGDALRaster(
  rast,
  'GTiff',
  ARRAY['COMPRESS=JPEG', 'JPEG_QUALITY=90'],
  4269) AS rasttiff
FROM dummy_rast WHERE rid = 2;
                

Назва

ST_AsJPEG — Повертає вибрані канали растрової плитки як одне зображення у форматі Joint Photographic Exports Group (JPEG) (масив байтів). Якщо канал не вказаний і є 1 або більше 3 каналів, то використовується тільки перший канал. Якщо є тільки 3 канали, то використовуються всі 3 канали і відображаються у форматі RGB.

Короткий огляд

bytea ST_AsJPEG(raster rast, text[] options=NULL);

bytea ST_AsJPEG(raster rast, integer nband, integer quality);

bytea ST_AsJPEG(raster rast, integer nband, text[] options=NULL);

bytea ST_AsJPEG(raster rast, integer[] nbands, text[] options=NULL);

bytea ST_AsJPEG(raster rast, integer[] nbands, integer quality);

Description

Повертає вибрані канали растра як єдине зображення Joint Photographic Exports Group Image (JPEG). Використовуйте ST_AsGDALRaster, якщо вам потрібно експортувати менш поширені типи растрів. Якщо смуга не вказана і 1 або більше 3 каналів, то використовується тільки перший канал. Якщо 3 канали, то використовуються всі 3 канали. Існує багато варіантів функції з багатьма опціями. Вони перераховані нижче:

  • nband призначений для експорту одного каналу.

  • nbands — це масив каналів, які потрібно експортувати (зверніть увагу, що для JPEG максимальне значення становить 3), а порядок каналів — RGB. Наприклад, ARRAY[3,2,1] означає, що канал 3 відповідає червоному кольору, канал 2 — зеленому, а канал 1 — синьому

  • quality число від 0 до 100. Чим вище число, тим чіткіше зображення.

  • options текст Масив опцій GDAL, як визначено для JPEG (див. create_options для JPEG ST_GDALDrivers). Для JPEG дійсними є PROGRESSIVE ON або OFF і QUALITY в діапазоні від 0 до 100, а за замовчуванням — 75. Докладнішу інформацію див. у Параметри формату GDAL Raster.

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Приклади: Вихідні дані

Output the first three bands at 75 percent quality.

Code
SELECT ST_AsJPEG(rast) As rastjpg
FROM dummy_rast WHERE rid=2;

Output only the first band at 90 percent quality.

Code
SELECT ST_AsJPEG(rast, 1, 90) As rastjpg
FROM dummy_rast WHERE rid=2;

Output the first three bands, mapping band 2 to red, band 1 to green, and band 3 to blue, using progressive encoding at 90 percent quality.

Code
SELECT ST_AsJPEG(rast, ARRAY[2, 1, 3], ARRAY['QUALITY=90', 'PROGRESSIVE=ON']) As rastjpg
FROM dummy_rast WHERE rid=2;

Назва

ST_AsPNG — уПовертає вибрані канали растрової плитки як одне зображення у форматі PNG (масив байтів). Якщо в растрі вказано 1, 3 або 4 канали і не вказано жодного каналу, то використовуються всі канали. Якщо вказано більше 2 або більше 4 каналів і не вказано жодного каналу, то використовується тільки канал 1. Канали відображаються в просторі RGB або RGBA.

Короткий огляд

bytea ST_AsPNG(raster rast, text[] options=NULL);

bytea ST_AsPNG(raster rast, integer nband, integer compression);

bytea ST_AsPNG(raster rast, integer nband, text[] options=NULL);

bytea ST_AsPNG(raster rast, integer[] nbands, integer compression);

bytea ST_AsPNG(raster rast, integer[] nbands, text[] options=NULL);

Description

Повертає вибрані канали растра як єдине зображення Portable Network Graphics Image (PNG). Використовуйте ST_AsGDALRaster, якщо вам потрібно експортувати менш поширені типи растрів. Якщо канал не вказаний, експортуються перші 3 канали. Існує багато варіантів функції з багатьма опціями. Якщо не вказано srid, то використовується srid растру. Вони перераховані нижче:

  • nband призначений для експорту одного каналу.

  • nbands — це масив каналів, які потрібно експортувати (зверніть увагу, що для PNG максимальне значення становить 4), а порядок каналів — RGBA. Наприклад, ARRAY[3,2,1] означає, що канал 3 відповідає червоному кольору, канал 2 — зеленому, а канал 1 — синьому

  • compression число від 1 до 9. Чим вище число, тим сильніше стиснення.

  • options текст Масив опцій GDAL, як визначено для PNG (дивіться create_options для PNG у ST_GDALDrivers). Для PNG дійсним є тільки ZLEVEL (кількість часу, що витрачається на стиснення — за замовчуванням 6), наприклад ARRAY["ZLEVEL=9"]. WORLDFILE не допускається, оскільки функція повинна видавати два результати. Докладнішу інформацію див. у Параметри формату GDAL Raster.

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Приклади

Export the first 3 bands and map band 3 to red, band 1 to green, and band 2 to blue.

Code
SELECT ST_AsPNG(rast) As rastpng
FROM dummy_rast WHERE rid=2;
SELECT ST_AsPNG(rast, ARRAY[3, 1, 2]) As rastpng
FROM dummy_rast WHERE rid=2;
                

Назва

ST_AsTIFF — Повертає вибрані канали растра як одне зображення TIFF (масив байтів). Якщо канал не вказана або будь-яка із вказаних смуг не існує в растрі, то буде зроблена спроба використати всі канали.

Короткий огляд

bytea ST_AsTIFF(raster rast, text[] options='', integer srid=sameassource);

bytea ST_AsTIFF(raster rast, text compression='', integer srid=sameassource);

bytea ST_AsTIFF(raster rast, integer[] nbands, text compression='', integer srid=sameassource);

bytea ST_AsTIFF(raster rast, integer[] nbands, text[] options, integer srid=sameassource);

Description

Повертає вибрані канали растра у вигляді єдиного файлу формату TIFF (Tagged Image File Format). Якщо канал не вказано, буде зроблена спроба використати всі канали. Це обгортка навколо ST_AsGDALRaster. Використовуйте ST_AsGDALRaster, якщо вам потрібно експортувати менш поширені типи растрів. Існує багато варіантів функції з багатьма опціями. Якщо текст просторової системи координат (SRS) відсутній, використовується просторова система координат растра. Вони перелічені нижче:

  • nbands — це масив каналів, які потрібно експортувати (зверніть увагу, що для PNG максимальне значення становить 3), а порядок каналів — RGB. Наприклад, ARRAY[3,2,1] означає, що канал 3 відповідає червоному кольору, канал 2 — зеленому, а канал 1 — синьому

  • compression Вираз стиснення — JPEG90 (або інший відсоток), LZW, JPEG, DEFLATE9.

  • options текст Масив опцій створення GDAL, як визначено для GTiff (дивіться create_options для GTiff у ST_GDALDrivers). або дивіться Опції формату GDAL Raster для більш детальної інформації.

  • srid srid просторової системи координат растра. Використовується для заповнення геореференційної інформації

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Приклади: Використовуйте стиснення jpeg 90%

Code
SELECT ST_AsTIFF(rast, 'JPEG90') As rasttiff
FROM dummy_rast WHERE rid=2;
                

11.12. Растрова обробка: алгебра карт

  • ST_Clip — Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.
  • ST_ColorMap — Створює новий растр з максимум чотирма смугами 8BUI (відтінки сірого, RGB, RGBA) на основі вихідного растра та вказаної смуги. Якщо смуга не вказана, за замовчуванням використовується смуга 1.
  • ST_Grayscale — Створює новий растр з одним каналом 8BUI на основі вихідного растра та вказаних каналів, що представляють червоний, зелений та синій кольори
  • ST_Intersection — Повертає растр або набір пар геометрія-піксельне значення, що представляють спільну частину двох растрів або геометричне перетин векторизації растра і геометрії.
  • ST_MapAlgebra (callback function version) — Версія функції зворотного виклику - Повертає односмуговий растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.
  • ST_MapAlgebra (expression version) — Версія виразу — повертає одноканальний растр, заданий одним або двома вхідними растрами, індексами каналів і одним або декількома визначеними користувачем виразами SQL.
  • ST_MapAlgebraExpr — Версія з 1 растровим каналом: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до вхідного растрового каналу та наданого типу пікселів. Якщо діапазон не вказано, передбачається діапазон 1.
  • ST_MapAlgebraExpr — 2-канальна версія растра: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох вхідних растрових каналів та наданого типу пікселів. Якщо номери каналів не вказані, то за замовчуванням використовується канал 1 кожного растру. Результуючий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром, а його розмір буде визначений параметром "extenttype". Значення для "extenttype" можуть бути: INTERSECTION, UNION, FIRST, SECOND.
  • ST_MapAlgebraFct — Версія з 1 каналом - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до вхідного каналу растра та наданого типу пікселів. Якщо канал не вказаний, передбачається канал 1.
  • ST_MapAlgebraFct — 2-канальна версія - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до 2 вхідних каналів растра та наданого типу пікселів. Якщо канал не вказано, то за замовчуванням використовується канал 1. Тип розширення за замовчуванням - INTERSECTION, якщо не вказано інше.
  • ST_MapAlgebraFctNgb — 1-канальна версія: Map Algebra Nearest Neighbor з використанням визначеної користувачем функції PostgreSQL. Повертає растр, значення якого є результатом функції користувача PLPGSQL, що включає сусідство значень із вхідної каналу растра.
  • ST_Reclass — Створює новий растр, складений з типів каналів, перекласифікованих з оригінальних. nband — це канал, який буде змінена. Якщо nband не вказано, вважається, що він дорівнює 1. Всі інші канали повертаються без змін. Приклад використання: перетворення каналу 16BUI на 8BUI і так далі для спрощення візуалізації у вигляді форматів, придатних для перегляду.
  • ST_ReclassExact — Створює новий растр, що складається з каналів, перекласифікованих з оригінальних, використовуючи співвідношення 1:1 між значеннями в оригінальному каналі та новими значеннями в каналі призначення.
  • ST_Union — Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.

Назва

ST_Clip — Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.

Короткий огляд

raster ST_Clip(raster rast, integer[] nband, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, integer nband, geometry geom, double precision nodataval, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, integer nband, geometry geom, boolean crop, boolean touched=FALSE);

raster ST_Clip(raster rast, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, geometry geom, double precision nodataval, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, geometry geom, boolean crop, boolean touched=FALSE);

Description

Повертає растр, обрізаний вхідною геометрією geom. Якщо індекс канал не вказано, обробляються всі канали.

Растери, отримані в результаті ST_Clip, повинні мати значення nodata, призначене для обрізаних областей, по одному для кожного каналу. Якщо такі значення не вказані, а вхідний растр не має визначеного значення nodata, значення nodata результуючого растра встановлюються на ST_MinPossibleValue(ST_BandPixelType(rast, band)). Якщо кількість значень nodata в масиві менша за кількість каналів, для решти каналів використовується останнє значення в масиві. Якщо кількість значень nodata більша за кількість каналів, зайві значення nodata ігноруються. Усі варіанти, що приймають масив значень nodata, також приймають одне значення, яке буде присвоєно кожному каналі.

Якщо crop не вказано, вважається, що значення true, тобто вихідний растр обрізається до перетину меж geom та rast. Якщо crop встановлено на false, новий растр отримує ті ж межі, що і rast. Якщо touched встановлено на true, то вибираються всі пікселі в rast, які перетинають геометрію.

[Примітка]

За замовчуванням використовується значення touched=false, яке вибирає тільки ті пікселі, центр яких покритий геометрією.

Покращено: 3.5.0 - додано аргумент touched.

Доступність: 2.0.0

Покращено: 2.1.0 Переписано на C

У наведених прикладах використовуються аерофотознімки штату Массачусетс, доступні на сайті MassGIS MassGIS Aerial Orthos.

Приклади

Comparing selecting all touched vs. not all touched.

Code
WITH source AS (
    SELECT rast, geom
    FROM ST_AsRaster(ST_Letters('R'), scalex =
> 1.0, scaley =
> -1.0) AS r(rast)
    INNER JOIN ST_GeomFromText('LINESTRING(0 1,5 6,10 10)') AS g(geom)
        ON ST_Intersects(r.rast, g.geom)
), clipped AS (
    SELECT rast,
        ST_Clip(rast, geom, touched =
> true) AS rast_touched,
        ST_Clip(rast, geom, touched =
> false) AS rast_not_touched
    FROM source
), variants AS (
    SELECT 'original' AS title, ST_Count(rast) AS pixel_count, rast AS rendered
    FROM clipped
    UNION ALL
    SELECT 'all touched', ST_Count(rast_touched), rast_touched
    FROM clipped
    UNION ALL
    SELECT 'default clip', ST_Count(rast_not_touched), rast_not_touched
    FROM clipped
)
SELECT title, pixel_count, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY CASE title
    WHEN 'original' THEN 1
    WHEN 'all touched' THEN 2
    ELSE 3
END;
Вивід растрових зображень
title        | pixel_count | image
--------------+-------------+----------------------------
 original     |        2605 | PNG image, 48 x 74 pixels
 all touched  |          16 | PNG image, 11 x 11 pixels
 default clip |          10 | PNG image, 11 x 11 pixels
(3 rows)
Figure
Geometry figure for visual-rt-st-clip-01

The following self-contained example uses three simple shapes as RGB bands. It compares cropping band 1, clipping band 1 without cropping and then restoring bands 2 and 3, and clipping every band without cropping.

Code
WITH canvas AS (
    SELECT ST_AddBand(
        ST_AddBand(
            ST_AddBand(
                ST_MakeEmptyRaster(128, 128, 0, 128, 1, -1, 0, 0, 0),
                '8BUI'::text, 0::double precision, 0::double precision
            ),
            '8BUI'::text, 0::double precision, 0::double precision
        ),
        '8BUI'::text, 0::double precision, 0::double precision
    ) AS rast
), source AS (
    SELECT ST_SetValue(
        ST_SetValue(
            ST_SetValue(rast, 1, ST_Buffer('POINT(32 96)'::geometry, 22), 220),
            2, ST_Buffer('LINESTRING(18 20,110 110)'::geometry, 6,
                         'endcap=flat join=bevel'), 210
        ),
        3, ST_Buffer('LINESTRING(10 48,118 48)'::geometry, 7,
                     'endcap=flat'), 180
    ) AS rast,
    ST_Buffer('POINT(64 64)'::geometry, 34) AS clipper
    FROM canvas
), variants AS (
    SELECT 'original RGB' AS title, rast AS rendered FROM source
    UNION ALL
    SELECT 'band 1 cropped', ST_Clip(rast, 1, clipper, true) FROM source
    UNION ALL
    SELECT
        'band 1 only',
        ST_AddBand(
            ST_Clip(rast, 1, clipper, false),
            ARRAY[ST_Band(rast, 2), ST_Band(rast, 3)]
        )
    FROM source
    UNION ALL
    SELECT 'all bands clipped', ST_Clip(rast, clipper, false) FROM source
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY CASE title
    WHEN 'original RGB' THEN 1
    WHEN 'band 1 cropped' THEN 2
    WHEN 'band 1 only' THEN 3
    ELSE 4
END;
Вивід растрових зображень
title             | image
-------------------+-----------------------------
 original RGB      | PNG image, 128 x 128 pixels
 band 1 cropped    | PNG image, 68 x 68 pixels
 band 1 only       | PNG image, 128 x 128 pixels
 all bands clipped | PNG image, 128 x 128 pixels
(4 rows)
Figure
Geometry figure for visual-rt-st-clip-02

Crop, single-band clipping, and all-band clipping.

Source tile

Cropped

One-band source

One-band clip

All-band source

All-band clip


Назва

ST_ColorMap — Створює новий растр з максимум чотирма смугами 8BUI (відтінки сірого, RGB, RGBA) на основі вихідного растра та вказаної смуги. Якщо смуга не вказана, за замовчуванням використовується смуга 1.

Короткий огляд

raster ST_ColorMap(raster rast, integer nband=1, text colormap=grayscale, text method=INTERPOLATE);

raster ST_ColorMap(raster rast, text colormap, text method=INTERPOLATE);

Description

Застосуйте colormap до каналу на nband з rast, в результаті чого буде створено новий растр, що складатиметься з чотирьох 8BUI каналів. Кількість каналів 8BUI у новому растрі визначається кількістю компонентів кольору, визначених у colormap.

Якщо nband не вказано, то вважається, що використовується канал 1.

colormap може бути ключовим словом заздалегідь визначеної колірної карти або набором рядків, що визначають значення та колірні компоненти.

Дійсне заздалегідь визначене ключове слово colormap:

  • grayscale або greyscale для одного 8BUI-діапазону растру відтінків сірого.

  • pseudocolor для чотирьох 8BUI (RGBA) канального растру з кольорами від синього до зеленого до червоного.

  • fire для чотирьох 8BUI (RGBA) канального растру з кольорами від чорного до червоного та блідо-жовтого.

  • bluered для чотирьох 8BUI (RGBA) канального растру з кольорами від синього до блідо-білого та червоного.

Користувачі можуть передати набір записів (по одному на рядок) до colormap, щоб вказати власні колірні карти. Кожен запис зазвичай складається з п'яти значень: значення пікселя та відповідні компоненти червоного, зеленого, синього та альфа (компоненти кольору від 0 до 255). Замість значень пікселів можна використовувати процентні значення, де 0% і 100% є мінімальним і максимальним значеннями, що зустрічаються в растровому каналі. Значення можна розділяти комами (","), табуляцією, двокрапкою (":") та/або пробілами. Значення пікселя можна встановити як nv, null або nodata для значення NODATA. Приклад наведено нижче.

Code
5 0 0 0 255
4 100:50 55 255
1 150, 100 150 255
0% 255 255 255 255
nv 0 0 0 0
                    

Синтаксис colormap схожий на синтаксис режиму кольорового рельєфу GDAL gdaldem.

Дійсні ключові слова для method:

  • INTERPOLATE для використання лінійної інтерполяції для плавного змішування кольорів між заданими значеннями пікселів

  • EXACT для точного збігу тільки тих значень пікселів, які знаходяться в колірній карті. Пікселі, значення яких не збігаються із записом у колірній карті, будуть встановлені на 0 0 0 0 (RGBA)

  • NEAREST для використання запису колірної карти, значення якого найближче до значення пікселя

[Примітка]

Чудовим джерелом інформації про колірні карти є ColorBrewer.

[Застереження]

У отриманих каналах нового растра не буде встановлено значення NODATA. Використовуйте ST_SetBandNoDataValue, щоб встановити значення NODATA, якщо це необхідно.

Доступність: 2.1.0

Приклади

This example builds a raster from rotated buffered lines and compares the original values with predefined and custom color maps.

Code
WITH ref AS (
    SELECT ST_MakeEmptyRaster(200, 200, 0, 200, 1, -1, 0, 0) AS rast
), source AS (
    SELECT ST_Union(rast) AS rast
    FROM (
    SELECT
        ST_AsRaster(ST_Rotate(ST_Buffer('LINESTRING(0 2,50 50,150 150,125 50)'::geometry,
                    i*2
                ),
                pi() * i * 0.125, ST_Point(50, 50)
            ),
            ref.rast, '8BUI'::text, i * 5
        ) AS rast
    FROM ref
    CROSS JOIN generate_series(1, 10, 3) AS i
) AS shapes
)
SELECT title, ST_AsPNG(rendered) AS image
FROM source
CROSS JOIN LATERAL (VALUES
    ('original', rast),
    ('grayscale', ST_ColorMap(rast, 1, 'greyscale')),
    ('pseudocolor', ST_ColorMap(rast, 1, 'pseudocolor')),
    ('fire', ST_ColorMap(rast, 1, 'fire')),
    ('blue-red', ST_ColorMap(rast, 1, 'bluered')),
    ('custom red', ST_ColorMap(
        rast,
        1,
        E'100% 255 0 0 255\n80% 160 0 0 255\n50% 130 0 0 255\n' ||
        E'30% 30 0 0 255\n20% 60 0 0 255\n0% 0 0 0 255\n' ||
        E'nv 255 255 255 0'
    ))
) AS variants(title, rendered);
Вивід растрових зображень
title      | image
------------+--------------------------------
 original   | PNG image, 224 x 295 pixels
 grayscale | PNG image, 224 x 295 pixels
 pseudocolor| PNG image, 224 x 295 pixels
 fire       | PNG image, 224 x 295 pixels
 blue-red   | PNG image, 224 x 295 pixels
 custom red | PNG image, 224 x 295 pixels
                    
Figure
Geometry figure for visual-rt-st-colormap-01

Назва

ST_Grayscale — Створює новий растр з одним каналом 8BUI на основі вихідного растра та вказаних каналів, що представляють червоний, зелений та синій кольори

Короткий огляд

(1) raster ST_Grayscale(raster rast, integer redband=1, integer greenband=2, integer blueband=3, text extenttype=INTERSECTION);

(2) raster ST_Grayscale(rastbandarg[] rastbandargset, text extenttype=INTERSECTION);

Description

Створіть растр з одним каналом 8BUI, маючи три вхідні канали (з одного або декількох растрів). Будь-який вхідний канал, тип пікселів якого не є 8BUI, буде перекласифіковано за допомогою ST_Reclass.

[Примітка]

Ця функція не схожа на ST_ColorMap з ключовим словом grayscale, оскільки ST_ColorMap працює тільки з одним каналом, а ця функція очікує три канали для RGB. Ця функція застосовує наступне рівняння для перетворення RGB у сірий: 0,2989 * RED + 0,5870 * GREEN + 0,1140 * BLUE

Доступність: 2.5.0

Приклади

This self-contained example paints an apple with gradients and highlights into three raster bands. It compares the original RGB raster with the equivalent grayscale results produced by both function variants.

Code
WITH pixels AS (
    SELECT
        col,
        row,
        x,
        y,
        (((x - 48.0)^2 / (25.0^2) + (y - 54.0)^2 / (29.0^2) < 1)
         OR ((x - 72.0)^2 / (25.0^2) + (y - 54.0)^2 / (29.0^2) < 1))
         AND NOT ((x - 60.0)^2 / (8.0^2) + (y - 26.0)^2 / (5.0^2) < 1) AS fruit,
        ((x - 82.0) * 0.84 + (y - 28.0) * 0.54)^2 / (22.0^2)
          + (-(x - 82.0) * 0.54 + (y - 28.0) * 0.84)^2 / (8.0^2) < 1 AS leaf,
        abs((x - 62.0) * 0.96 - (y - 29.0) * 0.28) < 3
          AND x BETWEEN 60 AND 69 AND y BETWEEN 21 AND 45 AS stem
    FROM (
        SELECT
            col,
            row,
            col / 2.0 AS x,
            row / 2.0 AS y
        FROM generate_series(1, 180) AS row
        CROSS JOIN generate_series(1, 240) AS col
    ) AS source_pixels
), shaded AS (
    SELECT
        col,
        row,
        x,
        y,
        CASE
            WHEN stem THEN 95 + y * 0.7 + (x % 3) * 8
            WHEN leaf THEN 28 + (90 - x) * 0.5
            WHEN fruit THEN LEAST(255, GREATEST(0,
                150
                + (85 - sqrt((x - 39.0)^2 + (y - 37.0)^2)) * 1.1
                + CASE
                    WHEN (x - 43.0)^2 / (10.0^2) + (y - 43.0)^2 / (7.0^2) < 1
                    THEN 35
                    ELSE 0
                END
                - CASE
                    WHEN (x - 77.0)^2 / (20.0^2) + (y - 67.0)^2 / (13.0^2) < 1
                    THEN 35
                    ELSE 0
                END
                + ((x * 13 + y * 7) % 19 - 9)
            ))
            ELSE 245
        END AS red,
        CASE
            WHEN stem THEN 50 + y * 0.35
            WHEN leaf THEN LEAST(190, GREATEST(40,
                105 + (95 - x) * 1.2 + (y - 20) * 1.5
                + CASE
                    WHEN (x - 76.0)^2 / (12.0^2) + (y - 24.0)^2 / (4.0^2) < 1
                    THEN 45
                    ELSE 0
                END
            ))
            WHEN fruit THEN LEAST(95, GREATEST(15,
                24 + (68 - y) * 0.35
                + CASE
                    WHEN (x - 43.0)^2 / (10.0^2) + (y - 43.0)^2 / (7.0^2) < 1
                    THEN 30
                    ELSE 0
                END
                + ((x * 5 + y * 11) % 13 - 6)
            ))
            ELSE 245
        END AS green,
        CASE
            WHEN stem THEN 22 + (x % 4) * 3
            WHEN leaf THEN 42 + (100 - x) * 0.4
            WHEN fruit THEN LEAST(75, GREATEST(10,
                18
                + CASE
                    WHEN (x - 43.0)^2 / (10.0^2) + (y - 43.0)^2 / (7.0^2) < 1
                    THEN 25
                    ELSE 0
                END
                + ((x * 3 + y * 5) % 11 - 5)
            ))
            ELSE 245
        END AS blue
    FROM pixels
), rows AS (
    SELECT
        row,
        array_agg(red::double precision ORDER BY col) AS red_values,
        array_agg(green::double precision ORDER BY col) AS green_values,
        array_agg(blue::double precision ORDER BY col) AS blue_values
    FROM shaded
    GROUP BY row
), source AS (
    SELECT ST_SetValues(ST_SetValues(ST_SetValues(
        ST_AddBand(ST_AddBand(ST_AddBand(
            ST_MakeEmptyRaster(240, 180, 0, 180, 1, -1, 0, 0, 0),
            '8BUI'::text, 245::double precision, 0::double precision),
            '8BUI'::text, 245::double precision, 0::double precision),
            '8BUI'::text, 245::double precision, 0::double precision),
        1, 1, 1, array_agg(red_values ORDER BY row)::double precision[][]),
        2, 1, 1, array_agg(green_values ORDER BY row)::double precision[][]),
        3, 1, 1, array_agg(blue_values ORDER BY row)::double precision[][]) AS rast
    FROM rows
)
SELECT ST_AsPNG(rast) AS "original RGB",
    ST_AsPNG(ST_Grayscale(rast)) AS "grayscale (variant 1)",
    ST_AsPNG(ST_Grayscale(ARRAY[
        ROW(rast, 1)::rastbandarg,
        ROW(rast, 2)::rastbandarg,
        ROW(rast, 3)::rastbandarg
    ]::rastbandarg[])) AS "grayscale (variant 2)"
FROM source;
Вивід растрових зображень
original RGB                | grayscale (variant 1)      | grayscale (variant 2)
-----------------------------+----------------------------+----------------------------
 PNG image, 240 x 180 pixels | PNG image, 240 x 180 pixels | PNG image, 240 x 180 pixels
(1 row)
Figure
Geometry figure for visual-rt-st-grayscale-01

Original photographic illustration:

original apple

grayscale apple

Див. також

ST_AsPNG, ST_Reclass, ST_ColorMap


Назва

ST_Intersection — Повертає растр або набір пар геометрія-піксельне значення, що представляють спільну частину двох растрів або геометричне перетин векторизації растра і геометрії.

Короткий огляд

setof geomval ST_Intersection(geometry geom, raster rast, integer band_num=1);

setof geomval ST_Intersection(raster rast, geometry geom);

setof geomval ST_Intersection(raster rast, integer band, geometry geomin);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, text returnband, double precision[] nodataval);

Description

Повертає растр або набір пар геометрія-піксель, що представляють спільну частину двох растрів або геометричне перетин векторизації растру і геометрії.

Перші три варіанти, що повертають набір geomval, працюють у векторному просторі. Растр спочатку векторизується (за допомогою ST_DumpAsPolygons) у набір рядків geomval, а потім ці рядки перетинаються з геометрією за допомогою функції PostGIS ST_Intersection(geometry, geometry). Геометрії, що перетинаються тільки з областю растра зі значенням nodata, повертають порожню геометрію. Зазвичай вони виключаються з результатів за допомогою правильного використання ST_Intersects в розділі WHERE.

Ви можете отримати доступ до геометрії та значень результативного набору geomval, обернувши їх у дужки та додавши ".geom" або ".val" в кінці виразу. Наприклад, (ST_Intersection(rast, geom)).geom

Інші варіанти, що повертають растр, працюють у растровому просторі. Вони використовують версію ST_MapAlgebraExpr з двома растрами для виконання перетину.

Межі отриманого растра відповідають геометричному перетину двох меж растра. Отриманий растр включає канали "BAND1", "BAND2" або "BOTH", відповідно до того, що передається як параметр returnband. Області з значенням nodata, присутні в будь-якій смузі, призводять до появи областей з значенням nodata в усіх смугах результату. Іншими словами, будь-який піксель, що перетинається з пікселем із значенням nodata, стає пікселем із значенням nodata в результаті.

Растри, отримані в результаті ST_Intersection, повинні мати значення nodata, призначене для областей, що не перетинаються. Ви можете визначити або замінити значення nodata для будь-якого отриманого каналу, надавши масив nodataval[] з одним або двома значеннями nodata, залежно від того, чи ви запитуєте канали "BAND1", "BAND2" або "BOTH". Перше значення в масиві замінює значення nodata в першому каналі, а друге значення замінює значення nodata в другому каналі. Якщо один вхідний канал не має визначеного значення nodata і жодне значення не вказано в масиві, воно вибирається за допомогою функції ST_MinPossibleValue. Усі варіанти, що приймають масив значень nodata, також можуть приймати одне значення, яке буде присвоєно кожному запитуваному каналу.

У всіх варіантах, якщо номер каналу не вказано, вважається, що це каналу 1. Якщо вам потрібна перетин між растром і геометрією, який повертає растр, зверніться до ST_Clip.

[Примітка]

For more control over the result extent or NODATA handling, use the two-raster variant of ST_MapAlgebraExpr. To compute a raster-space intersection with a geometry, use ST_Clip.

Use this function together with ST_Intersects and an index on the raster or geometry column when filtering table data.

Покращено: 2.0.0 — додано перетин у растровому просторі. У попередніх версіях до 2.0.0 підтримувався лише перетин у векторному просторі.

Приклади: Геометрія, Растр — результатом є значення геометрії

Code
SELECT
    foo.rid,
    foo.gid,
    GeometryType((foo.geomval).geom) AS geom_type,
    (foo.geomval).val AS value
FROM (
    SELECT
        A.rid,
        g.gid,
        ST_Intersection(A.rast, g.geom) As geomval
    FROM dummy_rast AS A
    CROSS JOIN (
        VALUES
            (1, ST_Point(3427928, 5793243.85) ),
            (2, 'LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)'::geometry),
            (3, 'LINESTRING(1 2,3 4)'::geometry)
    ) As g(gid, geom)
    WHERE A.rid = 2
) AS foo;
Вивід растрових зображень
rid | gid |      geom_type       | value
-----+-----+----------------------+-------
   2 |   1 | POINT                |   249
   2 |   1 | POINT                |   253
   2 |   2 | POINT                |   254
   2 |   2 | POINT                |   251
   2 |   2 | POINT                |   253
   2 |   2 | LINESTRING           |   252
   2 |   2 | MULTILINESTRING      |   250
   2 |   3 | GEOMETRYCOLLECTION   |

The same line example rendered in a common coordinate frame. The raster footprint and complete input line remain visible behind the returned intersection pieces.

Code
WITH source AS (
    SELECT
        rast,
        ST_GeomFromText(
            'LINESTRING(3427927.85 5793243.75,'
            '3427927.8 5793243.75,3427927.8 5793243.8)'
        ) AS input_geometry
    FROM dummy_rast
    WHERE rid = 2
), intersection AS (
SELECT
    rast,
    input_geometry,
    ST_Collect(gv.geom) AS result_geometry
FROM source
CROSS JOIN LATERAL ST_Intersection(rast, input_geometry) AS gv
GROUP BY rast, input_geometry
), layers AS (
    SELECT
        'raster' AS title,
        ST_Translate(ST_Envelope(rast), -3427927.75, -5793243.75) AS geom
    FROM intersection
    UNION ALL
    SELECT
        'input',
        ST_Translate(input_geometry, -3427927.75, -5793243.75)
    FROM intersection
    UNION ALL
    SELECT
        'intersection',
        ST_Translate(result_geometry, -3427927.75, -5793243.75)
    FROM intersection
)
SELECT title, geom AS geom
FROM layers
ORDER BY CASE title
    WHEN 'raster' THEN 1
    WHEN 'input' THEN 2
    ELSE 3
END;
Вивід растрових зображень
title        | geom
--------------+-------------------------------------------------------------
 raster       | POLYGON((0 0,0 0.25,0.25 0.25,0.25 0,0 0))
 input        | LINESTRING(0.1 0,0.05 0,0.05 0.05)
 intersection | GEOMETRYCOLLECTION
Figure
Geometry figure for visual-rt-st-intersection-02

Назва

ST_MapAlgebra (callback function version) — Версія функції зворотного виклику - Повертає односмуговий растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.

Короткий огляд

raster ST_MapAlgebra(rastbandarg[] rastbandargset, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=INTERSECTION, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast, integer[] nband, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=FIRST, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast, integer nband, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=FIRST, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=INTERSECTION, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast, integer nband, regprocedure callbackfunc, float8[] mask, boolean weighted, text pixeltype=NULL, text extenttype=INTERSECTION, raster customextent=NULL, text[] VARIADIC userargs=NULL);

Description

Повертає одноканальний растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.

rast,rast1,rast2, rastbandargset

Растри, на яких оцінюється процес алгебри карт.

rastbandargset дозволяє використовувати операцію алгебри карт на багатьох растрах та/або багатьох каналах. Див. приклад Варіант 1.

nband, nband1, nband2

Номери каналів растра, що підлягають оцінці. nband може бути цілим числом або цілим числом [], що позначає каналу. nband1 — це канал на rast1, а nband2 — канал на rast2 для випадку 2 raster/2band.

callbackfunc

Параметр callbackfunc повинен бути ім'ям і сигнатурою функції SQL або PL/pgSQL, перетвореною в regprocedure. Приклад функції PL/pgSQL:

Code
CREATE OR REPLACE FUNCTION sample_callbackfunc(value double precision[][][], pos integer[][], VARIADIC userargs text[])
    RETURNS double precision
    AS $$
    BEGIN
        RETURN 0;
    END;
    $$ LANGUAGE 'plpgsql' IMMUTABLE;
                                    

The callbackfunc must have two or three arguments: a 3-dimension double precision array, a 2-dimension integer array and, optionally, a variadic 1-dimension text array. The first argument value is the set of values (as double precision) from all input rasters. The three dimensions (where indexes are 1-based) are: raster #, row y, column x. The second argument position is the set of pixel positions from the output raster and input rasters. The outer dimension (where indexes are 0-based) is the raster #. The position at outer dimension index 0 is the output raster's pixel position. For each outer dimension, there are two elements in the inner dimension for X and Y. The optional third argument userargs is for passing through any user-specified arguments.

The callback return value is used as the value of the output pixel. If the callback returns NULL, the output pixel is set to NODATA when the output band has a NODATA value. If the output band has no NODATA value, a NULL callback result raises an error.

Для передачі аргументу regprocedure до функції SQL необхідно передати повну сигнатуру функції, а потім перетворити її до типу regprocedure. Щоб передати вищезазначену функцію PL/pgSQL як аргумент, SQL для аргументу буде таким:

Code
'sample_callbackfunc(double precision[], integer[], text[])'::regprocedure

Note that PostgreSQL array types do not encode dimensions in function signatures, so multidimensional callback arguments are written as double precision[] and integer[] in the regprocedure signature.

mask

N-вимірний масив (матриця) чисел, що використовується для фільтрації комірок, які передаються до функції зворотного виклику алгебри мап. 0 означає, що значення сусідньої комірки слід розглядати як відсутність даних, а 1 означає, що значення слід розглядати як дані. Якщо вага встановлена як true, то значення використовуються як множники для множення значення пікселя цього значення в сусідній позиції.

weighted

булеве значення (true/false) для позначення того, чи слід зважувати значення маски (помножити на вихідне значення), чи ні (застосовується тільки до прототипу, який приймає маску).

pixeltype

Якщо передано pixeltype, одон канал нового растру буде мати цей тип пікселів. Якщо pixeltype передається як NULL або пропускається, новий растровий канал матиме той самий тип пікселів, що й вказаний канал першого растру (для типів розширення: INTERSECTION, UNION, FIRST, CUSTOM) або вказаний канал відповідного растру (для типів розширення: SECOND, LAST). У разі сумнівів завжди вказуйте pixeltype.

Тип пікселів вихідного растру повинен бути одним із типів, перелічених у ST_BandPixelType, або пропущений, або встановлений як NULL.

extenttype

Можливі значення: INTERSECTION (за замовчуванням), UNION, FIRST (за замовчуванням для одного растрового варіанту), SECOND, LAST, CUSTOM.

customextent

Якщо extentype дорівнює CUSTOM, для customextent необхідно вказати растр. Див. приклад 4 варіанту 1.

distancex

Відстань у пікселях від опорної комірки в напрямку x. Отже, ширина результуючої матриці буде дорівнювати 2*distancex + 1. Якщо не вказано, враховується лише опорна комірка (околиця 0).

distancey

Відстань у пікселях від опорної комірки у напрямку y. Висота отриманої матриці буде дорівнювати 2*distancey + 1. Якщо не вказано, враховується тільки опорна комірка (околиця 0).

userargs

If the callbackfunc declares a third argument, that argument is a variadic text array. All trailing text arguments are passed through to the specified callbackfunc, and are contained in the userargs argument.

[Примітка]

Для отримання додаткової інформації про ключове слово VARIADIC зверніться до документації PostgreSQL та розділу "Функції SQL із змінною кількістю аргументів" у Функції мови запитів (SQL).

Варіант 1 приймає масив rastbandarg, що дозволяє використовувати операцію алгебри карт на багатьох растрах та/або багатьох каналах. Див. приклад Варіант 1.

Варіанти 2 і 3 працюють з одним або декількома каналами одного растра. Див. приклад варіантів 2 і 3.

Варіант 4 працює з двома растрами з одним каналом на растр. Див. приклад Варіант 4.

Доступність: 2.2.0: Можливість додавання маски

Доступність: 2.1.0

Приклади

Compare an unmasked mean with neighbor-only and weighted-neighbor masks. The weighted mask multiplies neighboring values by 2 before computing the result.

Code
WITH foo AS (
    SELECT ST_SetBandNoDataValue(
        ST_SetValue(
            ST_SetValue(
                ST_AsRaster(
                    ST_Buffer('LINESTRING(50 50,100 90,100 50)'::geometry, 5, 'join=bevel'),
                    200, 200, ARRAY['8BUI'], ARRAY[100], ARRAY[0]
                ),
                ST_Buffer('POINT(70 70)'::geometry, 10, 'quad_segs=1'),
                50
            ),
            'LINESTRING(20 20,100 100,150 98)'::geometry,
            1
        ),
        0
    ) AS rast
), variants AS (
    SELECT 'original' AS title, rast
    FROM foo
    UNION ALL
    SELECT 'unmasked mean' AS title,
        ST_MapAlgebra(rast, 1, 'ST_Mean4ma(double precision[], int[], text[])'::regprocedure) AS rast
    FROM foo
    UNION ALL
    SELECT 'neighbor-only mean' AS title,
        ST_MapAlgebra(
            rast,
            1,
            'ST_Mean4ma(double precision[], int[], text[])'::regprocedure,
            '{{1,1,1}, {1,0,1}, {1,1,1}}'::double precision[],
            false
        ) AS rast
    FROM foo
    UNION ALL
    SELECT 'weighted neighbor mean' AS title,
        ST_MapAlgebra(
            rast,
            1,
            'ST_Mean4ma(double precision[], int[], text[])'::regprocedure,
            '{{2,2,2}, {2,0,2}, {2,2,2}}'::double precision[],
            true
        ) AS rast
    FROM foo
)
SELECT title, ST_AsPNG(rast) AS image
FROM variants;
Вивід растрових зображень
title                  | image
------------------------+--------------------------------
 original               | PNG image, 200 x 200 pixels
 unmasked mean          | PNG image, 200 x 200 pixels
 neighbor-only mean     | PNG image, 200 x 200 pixels
 weighted neighbor mean | PNG image, 200 x 200 pixels
                    
Figure
Geometry figure for visual-rt-st-mapalgebra-01

Variant 1.

Один растр, один канал

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast
)
SELECT
    ST_MapAlgebra(ARRAY[ROW(rast, 1)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

Один растр, кілька каналів

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast
)
SELECT
    ST_MapAlgebra(ARRAY[ROW(rast, 3), ROW(rast, 1), ROW(rast, 3), ROW(rast, 2)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

Кілька растрів, кілька каналів

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(ARRAY[ROW(t1.rast, 3), ROW(t2.rast, 1), ROW(t2.rast, 3), ROW(t1.rast, 2)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2
                    

Повний приклад плиток покриття з сусідством.

Code
WITH foo AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast
)
SELECT
    t1.rid,
    ST_MapAlgebra(ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure,
        '32BUI',
        'CUSTOM', t1.rast,
        1, 1
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 4
    AND t2.rid BETWEEN 0 AND 8
    AND ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rid, t1.rast
                    

Приклад, подібний до попереднього, для плиток покриття з сусідством, але з використанням лише основних функцій SQL.

Code
WITH src AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast
), foo AS (
    SELECT
        t1.rid,
        ST_Union(t2.rast) AS rast
    FROM src t1
    JOIN src t2
        ON ST_Intersects(t1.rast, t2.rast)
        AND t2.rid BETWEEN 0 AND 8
    WHERE t1.rid = 4
    GROUP BY t1.rid
), bar AS (
    SELECT
        t1.rid,
        ST_MapAlgebra(
            ARRAY[ROW(t2.rast, 1)]::rastbandarg[],
            'sample_callbackfunc(double precision[], int[], text[])'::regprocedure,
            '32BUI',
            'CUSTOM', t1.rast,
            1, 1
        ) AS rast
    FROM src t1
    JOIN foo t2
        ON t1.rid = t2.rid
)
SELECT
    rid,
    (ST_MetaData(rast)),
    (ST_BandMetaData(rast, 1)),
    ST_Value(rast, 1, 1, 1)
FROM bar;
                    

Variants 2 and 3.

Один растр, кілька каналів

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        rast,
        ARRAY[3, 1, 3, 2]::integer[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

Один растр, один канал

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        rast,
        2,
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

Variant 4.

Два растри, два канали

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        t1.rast,
        2,
        t2.rast,
        1,
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2
                    

Назва

ST_MapAlgebra (expression version) — Версія виразу — повертає одноканальний растр, заданий одним або двома вхідними растрами, індексами каналів і одним або декількома визначеними користувачем виразами SQL.

Короткий огляд

raster ST_MapAlgebra(raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

raster ST_MapAlgebra(raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

Description

Версія виразу — повертає одноканальний растр на основі одного або двох вхідних растрів, індексів каналів та одного або декількох визначених користувачем виразів SQL.

Доступність: 2.1.0

Опис: Варіанти 1 і 2 (один растр)

Створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL, визначеної виразом expression на вхідному растрі (rast). Якщо nband не вказано, припускається, що це канал 1. Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальний растр, але матиме лише один канал.

Якщо передано pixeltype, то новий растр матиме канал цього типу пікселів. Якщо передано NULL, то новий канал растра матиме той самий тип пікселів, що й вхідний канал rast.

  • Ключові слова, дозволені для expression

    1. [rast] - Значення пікселя, що цікавить

    2. [rast.val] - Значення пікселя, що цікавить

    3. [rast.x] - стовпець пікселів з індексом 1, що представляє піксель, який нас цікавить

    4. [rast.y] - ряд пікселів, що починається з 1, який представляє піксель, що нас цікавить

Опис: Варіанти 3 і 4 (два растри)

Створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох каналів, визначених виразом expression на двох вхідних растрових каналах rast1, (rast2). Якщо не вказано band1, band2, то вважається, що це канал 1. Отриманий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром. Отриманий растр матиме розмір, визначений параметром extenttype.

expression

Алгебраїчний вираз PostgreSQL, що включає два растри та визначені функції/оператори PostgreSQL, які визначатимуть значення пікселя при перетині пікселів. Наприклад, (([rast1] + [rast2])/2.0)::integer

pixeltype

Тип пікселів вихідного растру. Повинен бути одним із типів, перелічених у ST_BandPixelType, пропущений або встановлений як NULL. Якщо не переданий або встановлений як NULL, за замовчуванням буде використовуватися тип пікселів першого растру.

extenttype

Контролює розмір отриманого растру

  1. INTERSECTION — розмір нового растра дорівнює перетину двох растрів. Це значення є типовим.

  2. UNION - Розмір нового растра є об'єднанням двох растрів.

  3. FIRST - Розмір нового растра такий самий, як і розмір першого растра.

  4. SECOND - Розмір нового растра такий самий, як і розмір другого растра.

nodata1expr

Алгебраїчний вираз, що містить тільки rast2 або константу, яка визначає, що повертати, коли пікселі rast1 є значеннями nodata, а просторово відповідні пікселі rast2 мають значення.

nodata2expr

Алгебраїчний вираз, що містить тільки rast1 або константу, яка визначає, що повертати, коли пікселі rast2 є значеннями nodata, а просторово відповідні пікселі rast1 мають значення.

nodatanodataval

Числова константа, яка повертається, коли просторово відповідні пікселі rast1 і rast2 мають значення nodata.

  • Ключові слова, дозволені в expression, nodata1expr та nodata2expr

    1. [rast1] - Значення пікселя, що цікавить, з rast1

    2. [rast1.val] - Значення пікселя, що цікавить, з rast1

    3. [rast1.x] - стовпець пікселів з індексом 1, що представляє піксель, який цікавить, з rast1

    4. [rast1.y] - ряд пікселів, що починається з 1, пікселів, що цікавлять, з rast1

    5. [rast2] - Значення пікселя, що цікавить, з rast2

    6. [rast2.val] - Значення пікселя, що цікавить, з rast2

    7. [rast2.x] - стовпець пікселів з індексом 1, що представляє піксель, який нас цікавить, з rast2

    8. [rast2.y] - ряд пікселів, що починається з 1, пікселя, що цікавить, з rast2

Приклади

Variants 1 and 2.

Code
WITH foo AS (
    SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast
)
SELECT
    ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])')
FROM foo;
                    

Variant 3 and 4.

Code
WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        t1.rast,
        2,
        t2.rast,
        1,
        '([rast2] + [rast1.val]) / 2'
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2;
                    

Назва

ST_MapAlgebraExpr — Версія з 1 растровим каналом: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до вхідного растрового каналу та наданого типу пікселів. Якщо діапазон не вказано, передбачається діапазон 1.

Короткий огляд

raster ST_MapAlgebraExpr(raster rast, integer band, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebraExpr(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

Description

[Застереження]

ST_MapAlgebraExpr є застарілим починаючи з версії 2.1.0. Замість нього використовуйте ST_MapAlgebra (expression version).

Створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL, визначеної виразом expression на вхідному растрі (rast). Якщо не вказано band, то вважається, що це канал 1. Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальний растр, але матиме лише один канал.

Якщо передано pixeltype, то новий растр матиме канал цього типу пікселів. Якщо передано NULL, то новий канал растра матиме той самий тип пікселів, що й вхідний канал rast.

У виразі можна використовувати термін [rast] для посилання на значення пікселя оригінального каналу, [rast.x] для посилання на індекс стовпця пікселя з базою 1, [rast.y] для посилання на індекс рядка пікселя з базою 1.

Доступність: 2.0.0

Приклади

Створіть новий одноканальний растр на основі нашого оригіналу, який є функцією модуля 2 від каналу оригінального растра.

Code
ALTER TABLE dummy_rast ADD COLUMN map_rast raster;
UPDATE dummy_rast SET map_rast = ST_MapAlgebraExpr(rast, NULL, 'mod([rast]::numeric,2)') WHERE rid = 2;

SELECT
    ST_Value(rast, 1, i, j) As origval,
    ST_Value(map_rast, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 3) AS i
CROSS JOIN generate_series(1, 3) AS j
WHERE rid = 2;
Вивід растрових зображень
origval | mapval
---------+--------
     253 |      1
     254 |      0
     253 |      1
     253 |      1
     254 |      0
     254 |      0
     250 |      0
     254 |      0
     254 |      0

Створіть новий одноканальний растр піксельного типу 2BUI з нашого оригіналу, який перекласифіковано, і встановіть значення nodata на 0.

Code
ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster;
UPDATE dummy_rast SET
    map_rast2 = ST_MapAlgebraExpr(rast, '2BUI'::text, 'CASE WHEN [rast] BETWEEN 100 and 250 THEN 1 WHEN [rast] = 252 THEN 2 WHEN [rast] BETWEEN 253 and 254 THEN 3 ELSE 0 END'::text, '0')
WHERE rid = 2;

SELECT DISTINCT
    ST_Value(rast, 1, i, j) As origval,
    ST_Value(map_rast2, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 5) AS i
CROSS JOIN generate_series(1, 5) AS j
WHERE rid = 2;
Вивід растрових зображень
origval | mapval
---------+--------
     249 |      1
     250 |      1
     251 |
     252 |      2
     253 |      3
     254 |      3
Code
SELECT
    ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
2BUI

A self-contained source raster and the raster produced by classifying its values into four display levels.

Code
WITH source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(8, 8, 0, 8, 1, -1, 0, 0, 0),
            1, '8BUI', 0, 0
        ),
        1, 1, 1,
        ARRAY[
            [0, 1, 2, 3, 4, 5, 6, 7],
            [8, 9, 10, 11, 12, 13, 14, 15],
            [16, 17, 18, 19, 20, 21, 22, 23],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47],
            [48, 49, 50, 51, 52, 53, 54, 55],
            [56, 57, 58, 59, 60, 61, 62, 63]
        ]::double precision[][]
    ) AS rast
), variants AS (
    SELECT 'source' AS title, rast AS rendered
    FROM source
    UNION ALL
    SELECT
        'classified',
        ST_MapAlgebraExpr(rast, '8BUI', 'floor([rast] / 16) * 85')
    FROM source
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY title DESC;
Вивід растрових зображень
title      | image
------------+-------------------------
 source     | PNG image, 8 x 8 pixels
 classified | PNG image, 8 x 8 pixels
Figure
Geometry figure for visual-rt-st-mapalgebraexpr-04

Map algebra altering the first band of a three-band raster.

оригінал (стовпець rast_view)

rast_view_ma

Створіть новий 3-канальний растр того ж типу пікселів, що і наш оригінальний 3-канальний растр, з першим каналом, зміненим за допомогою алгебри карт, і двома іншими каналами, що залишилися без змін.

Code
SELECT
    ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(rast_view),
                ST_MapAlgebraExpr(rast_view, 1, NULL, 'tan([rast])*[rast]')
            ),
            ST_Band(rast_view, 2)
        ),
        ST_Band(rast_view, 3)
    )  As rast_view_ma
FROM wind
WHERE rid=167;
                    

Назва

ST_MapAlgebraExpr — 2-канальна версія растра: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох вхідних растрових каналів та наданого типу пікселів. Якщо номери каналів не вказані, то за замовчуванням використовується канал 1 кожного растру. Результуючий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром, а його розмір буде визначений параметром "extenttype". Значення для "extenttype" можуть бути: INTERSECTION, UNION, FIRST, SECOND.

Короткий огляд

raster ST_MapAlgebraExpr(raster rast1, raster rast2, text expression, text pixeltype=same_as_rast1_band, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

raster ST_MapAlgebraExpr(raster rast1, integer band1, raster rast2, integer band2, text expression, text pixeltype=same_as_rast1_band, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

Description

[Застереження]

ST_MapAlgebraExpr є застарілим починаючи з версії 2.1.0. Замість нього використовуйте ST_MapAlgebra (expression version).

Створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох каналів, визначених виразом expression на двох вхідних растрових каналах rast1, (rast2). Якщо не вказано band1, band2, то вважається, що це канал 1. Отриманий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром. Отриманий растр матиме розмір, визначений параметром extenttype.

expression

Алгебраїчний вираз PostgreSQL, що включає два растри та визначені функції/оператори PostgreSQL, які визначатимуть значення пікселя при перетині пікселів. Наприклад, (([rast1] + [rast2])/2.0)::integer

pixeltype

Тип пікселів вихідного растру. Повинен бути одним із типів, перелічених у ST_BandPixelType, пропущений або встановлений як NULL. Якщо не переданий або встановлений як NULL, за замовчуванням буде використовуватися тип пікселів першого растру.

extenttype

Контролює розмір отриманого растру

  1. INTERSECTION — розмір нового растра дорівнює перетину двох растрів. Це значення є типовим.

  2. UNION - Розмір нового растра є об'єднанням двох растрів.

  3. FIRST - Розмір нового растра такий самий, як і розмір першого растра.

  4. SECOND - Розмір нового растра такий самий, як і розмір другого растра.

nodata1expr

Алгебраїчний вираз, що містить тільки rast2 або константу, яка визначає, що повертати, коли пікселі rast1 є значеннями nodata, а просторово відповідні пікселі rast2 мають значення.

nodata2expr

Алгебраїчний вираз, що містить тільки rast1 або константу, яка визначає, що повертати, коли пікселі rast2 є значеннями nodata, а просторово відповідні пікселі rast1 мають значення.

nodatanodataval

Числова константа, яка повертається, коли просторово відповідні пікселі rast1 і rast2 мають значення nodata.

Якщо передано pixeltype, то новий растр матиме канал цього типу пікселів. Якщо pixeltype передано NULL або тип пікселів не вказано, то новий канал растра матиме той самий тип пікселів, що й вхіднатй канал rast1.

Використовуйте термін [rast1.val] [rast2.val] для посилання на значення пікселів оригінальних растрових каналів і [rast1.x], [rast1.y] тощо для посилання на позиції стовпців/рядків пікселів.

Доступність: 2.0.0

Приклади

2 Band Intersection and Union.

Створіть новий одноканальний растр на основі нашого оригіналу, який є функцією модуля 2 від каналу оригінального растра.

Create a cool set of rasters.

Insert some cool shapes around Boston in Massachusetts state plane meters, then map their intersection and union.

Code
DROP TABLE IF EXISTS fun_shapes;
CREATE TABLE fun_shapes(rid serial PRIMARY KEY, fun_name text, rast raster);

INSERT INTO fun_shapes(fun_name, rast)
VALUES ('ref', ST_AsRaster(ST_MakeEnvelope(235229, 899970, 237229, 901930, 26986), 200, 200, '8BUI', 0, 0));

INSERT INTO fun_shapes(fun_name, rast)
WITH ref(rast) AS (SELECT rast FROM fun_shapes WHERE fun_name = 'ref' )
SELECT 'area' AS fun_name, ST_AsRaster(ST_Buffer(ST_SetSRID(ST_Point(236229, 900930), 26986), 1000),
            ref.rast, '8BUI', 10, 0) As rast
FROM ref
UNION ALL
SELECT 'rand bubbles',
       ST_AsRaster(
           (
               SELECT ST_Collect(geom)
               FROM (
                   SELECT ST_Buffer(
                       ST_SetSRID(ST_Point(236229 + i*random()*100, 900930 + j*random()*100), 26986),
                       random()*20
                   ) AS geom
                   FROM generate_series(1, 10) AS i,
                        generate_series(1, 10) AS j
               ) AS foo
           ),
           ref.rast, '8BUI', 200, 0
       )
FROM ref;

SELECT  ST_MapAlgebraExpr(area.rast, bub.rast, '[rast2.val]', '8BUI', 'INTERSECTION', '[rast2.val]', '[rast1.val]') As interrast,
        ST_MapAlgebraExpr(area.rast, bub.rast, '[rast2.val]', '8BUI', 'UNION', '[rast2.val]', '[rast1.val]') As unionrast
FROM
  (SELECT rast FROM fun_shapes WHERE fun_name = 'area') As area
CROSS JOIN
  (SELECT rast FROM fun_shapes WHERE fun_name = 'rand bubbles') As bub
                    

The same intersection and union operations using two deterministic, self-contained rasters.

Code
WITH canvas AS (
    SELECT ST_AddBand(
        ST_MakeEmptyRaster(80, 80, 0, 80, 1, -1, 0, 0, 0),
        1, '8BUI', 40, 0
    ) AS rast
), inputs AS (
    SELECT
        rast AS raster_1,
        ST_AsRaster(
            ST_Buffer(ST_Point(40, 40), 28),
            rast,
            '8BUI', 220, 0
        ) AS raster_2
    FROM canvas
), variants AS (
    SELECT 'raster 1' AS title, raster_1 AS rendered FROM inputs
    UNION ALL
    SELECT 'raster 2', raster_2 FROM inputs
    UNION ALL
    SELECT 'intersection', ST_MapAlgebraExpr(
        raster_1, raster_2,
        '[rast2.val]', '8BUI', 'INTERSECTION',
        '[rast2.val]', '[rast1.val]'
    ) FROM inputs
    UNION ALL
    SELECT 'union', ST_MapAlgebraExpr(
        raster_1, raster_2,
        '[rast2.val]', '8BUI', 'UNION',
        '[rast2.val]', '[rast1.val]'
    ) FROM inputs
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY CASE title
    WHEN 'raster 1' THEN 1
    WHEN 'raster 2' THEN 2
    WHEN 'intersection' THEN 3
    ELSE 4
END;
Вивід растрових зображень
title        | image
--------------+---------------------------
 raster 1     | PNG image, 80 x 80 pixels
 raster 2     | PNG image, 56 x 56 pixels
 intersection | PNG image, 56 x 56 pixels
 union        | PNG image, 80 x 80 pixels
Figure
Geometry figure for visual-rt-st-mapalgebraexpr2-01

Overlaying rasters on a one-unit-per-pixel canvas as separate bands. We use ST_AsPNG to render the image so all single band ones look grey.

Code
WITH mygeoms AS (
    SELECT 2 AS bnum, ST_Buffer(ST_Point(1, 5), 10) AS geom
    UNION ALL
    SELECT 3,
        ST_Buffer(
            ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
            10,
            'join=bevel'
        )
    UNION ALL
    SELECT 1,
        ST_Buffer(
            ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'),
            5,
            'join=bevel'
        )
), canvas AS (
    SELECT ST_AddBand(
        ST_MakeEmptyRaster(
            200,
            200,
            ST_XMin(e)::integer,
            ST_YMax(e)::integer,
            1, -1, 0, 0),
        '8BUI'::text,
        0
    ) AS rast
    FROM (
      SELECT ST_Extent(geom) AS e
      FROM mygeoms
    ) AS bounds
), rbands AS (
    SELECT ARRAY(
        SELECT ST_MapAlgebraExpr(
            canvas.rast,
            ST_AsRaster(m.geom, canvas.rast, '8BUI', 100),
            '[rast2.val]', '8BUI', 'FIRST',
            '[rast2.val]', '[rast1.val]'
        )
        FROM mygeoms AS m
        CROSS JOIN canvas
        ORDER BY m.bnum
    ) AS rasts
)
SELECT title, ST_AsPNG(rendered) AS image
FROM rbands
CROSS JOIN LATERAL (VALUES
    ('band 1', rasts[1]),
    ('band 2', rasts[2]),
    ('band 3', rasts[3]),
    ('RGB', ST_AddBand(ST_AddBand(rasts[1], rasts[2]), rasts[3]))
) AS variants(title, rendered);
Вивід растрових зображень
title  | image
--------+-----------------------------
 band 1 | PNG image, 200 x 200 pixels
 band 2 | PNG image, 200 x 200 pixels
 band 3 | PNG image, 200 x 200 pixels
 RGB    | PNG image, 200 x 200 pixels
Figure
Geometry figure for visual-rt-st-mapalgebraexpr2-02

Overlay a two-meter boundary of selected parcels over aerial imagery. The query first unions the parcel geometries, clips the source raster shards to the region, unions those smaller shards, and finally adds the first two bands plus a third-band map algebra overlay.

Create a new three-band raster composed of the first two clipped bands and the third band overlaid with the geometry. This query took 3.6 seconds on a 64-bit PostGIS Windows installation.

Code
WITH pr AS (
    SELECT ST_Clip(rast, ST_Expand(geom, 50)) AS rast, g.geom
    FROM aerials.o_2_boston AS r
    INNER JOIN (
        SELECT ST_Union(ST_Transform(geom, 26986)) AS geom
        FROM landparcels
        WHERE pid IN ('0303890000', '0303900000')
    ) AS g
        ON ST_Intersects(rast::geometry, ST_Expand(g.geom, 50))
), prunion AS (
    SELECT ST_AddBand(
        NULL,
        ARRAY[
            ST_Union(rast, 1),
            ST_Union(rast, 2),
            ST_Union(rast, 3)
        ]
    ) AS clipped,
    geom
    FROM pr
    GROUP BY geom
)
SELECT ST_AddBand(
    ST_Band(clipped, ARRAY[1, 2]),
    ST_MapAlgebraExpr(
     ST_Band(clipped, 3),
     ST_AsRaster(ST_Buffer(ST_Boundary(geom), 2), clipped, '8BUI', 250),
     '[rast2.val]',
     '8BUI',
     'FIRST',
     '[rast2.val]',
     '[rast1.val]') ) As rast
FROM prunion;
                    

Parcel-boundary overlay.

The blue lines are the boundaries of selected parcels

The generated four-panel canvas example above shows the same band-overlay technique without requiring an external aerial-imagery or parcel table.


Назва

ST_MapAlgebraFct — Версія з 1 каналом - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до вхідного каналу растра та наданого типу пікселів. Якщо канал не вказаний, передбачається канал 1.

Короткий огляд

raster ST_MapAlgebraFct(raster rast, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, regprocedure onerasteruserfunc, text[] VARIADIC args);

raster ST_MapAlgebraFct(raster rast, text pixeltype, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, text pixeltype, regprocedure onerasteruserfunc, text[] VARIADIC args);

raster ST_MapAlgebraFct(raster rast, integer band, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, integer band, regprocedure onerasteruserfunc, text[] VARIADIC args);

raster ST_MapAlgebraFct(raster rast, integer band, text pixeltype, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, integer band, text pixeltype, regprocedure onerasteruserfunc, text[] VARIADIC args);

Description

[Застереження]

ST_MapAlgebraFct є застарілим з версії 2.1.0. Замість нього використовуйте ST_MapAlgebra (callback function version).

Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL, вказаної в onerasteruserfunc, до вхідного растра (rast). Якщо band не вказано, вважається, що це канал 1. Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальний растр, але матиме лише один канал.

Якщо передано pixeltype, то новий растр матиме канал цього типу пікселів. Якщо передано NULL, то новий канал растра матиме той самий тип пікселів, що й вхідний канал rast.

Параметр onerasteruserfunc повинен бути ім'ям і сигнатурою функції SQL або PL/pgSQL, перетвореної в regprocedure. Дуже простий і досить марний приклад функції PL/pgSQL:

Code
CREATE OR REPLACE FUNCTION simple_function(pixel FLOAT, pos INTEGER[], VARIADIC args TEXT[])
RETURNS FLOAT
AS $$ BEGIN
    RETURN 0.0;
END; $$
LANGUAGE 'plpgsql' IMMUTABLE;

Функція userfunction може приймати два або три аргументи: значення типу float, опціональний масив цілих чисел та масив тексту з змінною кількістю елементів. Перший аргумент — це значення окремої комірки растра (незалежно від типу даних растра). Другий аргумент — це позиція поточної оброблюваної комірки у вигляді "{x,y}". Третій аргумент вказує, що всі інші параметри для ST_MapAlgebraFct мають бути передані до userfunction.

Для передачі аргументу regprodedure до функції SQL необхідно передати повну сигнатуру функції, а потім перетворити її на тип regprocedure. Щоб передати вищезазначену функцію PL/pgSQL як аргумент, SQL для аргументу буде таким:

Code
'simple_function(float,integer[],text[])'::regprocedure

Зверніть увагу, що аргумент містить ім'я функції, типи аргументів функції, лапки навколо імені та типів аргументів, а також приведення до типу regprocedure.

Третім аргументом для userfunction є масив variadic text. Усі кінцеві текстові аргументи для будь-якого виклику ST_MapAlgebraFct передаються до вказаної userfunction і містяться в аргументі args.

[Примітка]

Для отримання додаткової інформації про ключове слово VARIADIC зверніться до документації PostgreSQL та розділу "Функції SQL із змінною кількістю аргументів" у Функції мови запитів (SQL).

[Примітка]

Аргумент text[] для userfunction є обов'язковим, незалежно від того, чи ви вирішили передати аргументи до вашої функції користувача для обробки, чи ні.

Доступність: 2.0.0

Приклади

Створіть новий одноканальний растр на основі нашого оригіналу, який є функцією модуля 2 від каналу оригінального растра.

Code
ALTER TABLE dummy_rast ADD COLUMN map_rast raster;
CREATE FUNCTION mod_fct(pixel float, pos integer[], variadic args text[])
RETURNS float
AS $$
BEGIN
    RETURN pixel::integer % 2;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE;

UPDATE dummy_rast SET map_rast = ST_MapAlgebraFct(rast, NULL, 'mod_fct(float,integer[],text[])'::regprocedure) WHERE rid = 2;

SELECT ST_Value(rast, 1, i, j) As origval, ST_Value(map_rast, 1, i, j) As mapval
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1, 3) AS j
WHERE rid = 2;
Вивід растрових зображень
origval | mapval
---------+--------
     253 |      1
     254 |      0
     253 |      1
     253 |      1
     254 |      0
     254 |      0
     250 |      0
     254 |      0
     254 |      0

Створіть новий 1-канальний растр піксельного типу 2BUI з нашого оригіналу, який перекласифіковано, і встановіть значення nodata як параметр, переданий до функції користувача (0).

Code
ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster;
CREATE FUNCTION classify_fct(pixel float, pos integer[], variadic args text[])
RETURNS float
AS
$$
DECLARE
    nodata float := 0;
BEGIN
    IF NOT args[1] IS NULL THEN
        nodata := args[1];
    END IF;
    IF pixel < 251 THEN
        RETURN 1;
    ELSIF pixel = 252 THEN
        RETURN 2;
    ELSIF pixel 
> 252 THEN
        RETURN 3;
    ELSE
        RETURN nodata;
    END IF;
END;
$$
LANGUAGE 'plpgsql';
UPDATE dummy_rast SET map_rast2 = ST_MapAlgebraFct(rast,'2BUI','classify_fct(float,integer[],text[])'::regprocedure, '0') WHERE rid = 2;

SELECT DISTINCT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast2, 1, i, j) As mapval
FROM dummy_rast CROSS JOIN generate_series(1, 5) AS i CROSS JOIN generate_series(1,5) AS j
WHERE rid = 2;
Вивід растрових зображень
 origval | mapval
---------+--------
     249 |      1
     250 |      1
     251 |
     252 |      2
     253 |      3
     254 |      3
Code
SELECT ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast WHERE rid = 2;
Вивід растрових зображень
 b1pixtyp
----------
 2BUI

Створіть новий 3-канальний растр того ж типу пікселів, що і наш оригінальний 3-канальний растр, з першим каналом, зміненим за допомогою алгебри карт, і двома іншими каналами, що залишилися без змін.

Code
CREATE FUNCTION rast_plus_tan(pixel float, pos integer[], variadic args text[])
RETURNS float
AS
$$
BEGIN
    RETURN tan(pixel) * pixel;
END;
$$
LANGUAGE 'plpgsql';

SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(rast_view),
            ST_MapAlgebraFct(rast_view, 1, NULL, 'rast_plus_tan(float,integer[],text[])'::regprocedure)
        ),
        ST_Band(rast_view, 2)
    ),
    ST_Band(rast_view, 3) As rast_view_ma
)
FROM wind
WHERE rid=167;
                    

The deprecated callback form above is equivalent to a modern ST_MapAlgebra (callback function version) expression for simple per-pixel transforms. This build-time example renders the original raster and a modulo-2 classification.

Code
WITH pixels AS (
    SELECT x, y, (x + y * 2)::double precision AS value
    FROM generate_series(1, 48) AS x
    CROSS JOIN generate_series(1, 48) AS y
), rows AS (
    SELECT y, array_agg(value ORDER BY x) AS values
    FROM pixels
    GROUP BY y
), source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(48, 48, 0, 48, 1, -1, 0, 0, 0),
            1, '8BUI', 0, 0
        ),
        1, 1, 1, array_agg(values ORDER BY y)::double precision[][]
    ) AS rast
    FROM rows
), variants AS (
    SELECT 'source' AS title, rast AS rendered FROM source
    UNION ALL
    SELECT 'modulo 2', ST_MapAlgebra(
        rast, 1,
        '8BUI',
        'mod([rast]::integer,2) * 255'
    )
    FROM source
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY title DESC;
Вивід растрових зображень
title   | image
----------+-------------------------
 source   | PNG image, 48 x 48 pixels
 modulo 2 | PNG image, 48 x 48 pixels
Figure
Geometry figure for visual-rt-st-mapalgebrafct-04

Назва

ST_MapAlgebraFct — 2-канальна версія - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до 2 вхідних каналів растра та наданого типу пікселів. Якщо канал не вказано, то за замовчуванням використовується канал 1. Тип розширення за замовчуванням - INTERSECTION, якщо не вказано інше.

Короткий огляд

raster ST_MapAlgebraFct(raster rast1, raster rast2, regprocedure tworastuserfunc, text pixeltype=same_as_rast1, text extenttype=INTERSECTION, text[] VARIADIC userargs);

raster ST_MapAlgebraFct(raster rast1, integer band1, raster rast2, integer band2, regprocedure tworastuserfunc, text pixeltype=same_as_rast1, text extenttype=INTERSECTION, text[] VARIADIC userargs);

Description

[Застереження]

ST_MapAlgebraFct є застарілим з версії 2.1.0. Замість нього використовуйте ST_MapAlgebra (callback function version).

Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL, вказаної в tworastuserfunc, до вхідного растру rast1, rast2. Якщо не вказано band1 або band2, то вважається, що це канал 1. Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальні растри, але матиме лише однин канал.

Якщо передано pixeltype, то новий растр матиме канал цього типу пікселів. Якщо pixeltype передано NULL або пропущено, то новий канал растра матиме той самий тип пікселів, що і вхідний канал rast1.

Параметр tworastuserfunc повинен бути ім'ям і сигнатурою функції SQL або PL/pgSQL, перетвореною в regprocedure. Приклад функції PL/pgSQL:

Code
CREATE OR REPLACE FUNCTION simple_function_for_two_rasters(pixel1 FLOAT, pixel2 FLOAT, pos INTEGER[], VARIADIC args TEXT[])
RETURNS FLOAT
AS $$ BEGIN
    RETURN 0.0;
END; $$
LANGUAGE 'plpgsql' IMMUTABLE;

tworastuserfunc може приймати три або чотири аргументи: значення подвійної точності, значення подвійної точності, опціональний масив цілих чисел та масив тексту змінної довжини. Перший аргумент — це значення окремої комірки растра в rast1 (незалежно від типу даних растра). Другий аргумент — це значення окремої комірки растра в rast2. Третій аргумент — це позиція поточної комірки обробки у формі "{x,y}". Четвертий аргумент вказує, що всі інші параметри ST_MapAlgebraFctмають бути передані до tworastuserfunc.

Для передачі аргументу regprodedure до функції SQL необхідно передати повну сигнатуру функції, а потім перетворити її на тип regprocedure. Щоб передати вищезазначену функцію PL/pgSQL як аргумент, SQL для аргументу буде таким:

Code
'simple_function(double precision, double precision, integer[], text[])'::regprocedure

Зверніть увагу, що аргумент містить ім'я функції, типи аргументів функції, лапки навколо імені та типів аргументів, а також приведення до типу regprocedure.

Четвертий аргумент для tworastuserfunc є масивом variadic text. Усі кінцеві текстові аргументи до будь-якого виклику ST_MapAlgebraFct передаються до вказаного tworastuserfunc і містяться в аргументі userargs.

[Примітка]

Для отримання додаткової інформації про ключове слово VARIADIC зверніться до документації PostgreSQL та розділу "Функції SQL із змінною кількістю аргументів" у Функції мови запитів (SQL).

[Примітка]

Аргумент text[] для tworastuserfunc є обов'язковим, незалежно від того, чи ви вирішили передати аргументи до вашої користувацької функції для обробки, чи ні.

Доступність: 2.0.0

Приклад: Накладання растрів на полотно у вигляді окремих каналів

The deprecated two-raster callback form can often be expressed with the modern two-raster ST_MapAlgebra (callback function version) expression variant. This build-time example renders two input rasters and their averaged overlap.

Code
WITH canvas AS (
    SELECT ST_AddBand(
        ST_MakeEmptyRaster(80, 80, 0, 80, 1, -1, 0, 0, 0),
        1, '8BUI', 0, 0
    ) AS rast
), inputs AS (
    SELECT
        ST_AsRaster(ST_Buffer(ST_Point(30, 40), 25), rast, '8BUI', 80, 0)
            AS raster_1,
        ST_AsRaster(ST_Buffer(ST_Point(50, 40), 25), rast, '8BUI', 220, 0)
            AS raster_2
    FROM canvas
), variants AS (
    SELECT 'raster 1' AS title, raster_1 AS rendered FROM inputs
    UNION ALL
    SELECT 'raster 2', raster_2 FROM inputs
    UNION ALL
    SELECT 'averaged', ST_MapAlgebra(
        raster_1, 1,
        raster_2, 1,
        '([rast1] + [rast2]) / 2',
        '8BUI',
        'UNION'
    ) FROM inputs
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY title DESC;
Вивід растрових зображень
title   | image
----------+-------------------------
 raster 2 | PNG image, 50 x 50 pixels
 raster 1 | PNG image, 50 x 50 pixels
 averaged | PNG image, 70 x 50 pixels
Figure
Geometry figure for visual-rt-st-mapalgebrafct2-01

Define our user defined function.

Code

CREATE OR REPLACE FUNCTION raster_mapalgebra_union(
    rast1 double precision,
    rast2 double precision,
    pos integer[],
    VARIADIC userargs text[]
)
    RETURNS double precision
    AS $$
    DECLARE
    BEGIN
        CASE
            WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN
                RETURN ((rast1 + rast2)/2.);
            WHEN rast1 IS NULL AND rast2 IS NULL THEN
                RETURN NULL;
            WHEN rast1 IS NULL THEN
                RETURN rast2;
            ELSE
                RETURN rast1;
        END CASE;

        RETURN NULL;
    END;
    $$ LANGUAGE 'plpgsql' IMMUTABLE COST 1000;

Prepare a test table of rasters.

Code
DROP TABLE IF EXISTS map_shapes;
CREATE TABLE map_shapes(rid serial PRIMARY KEY, rast raster, bnum integer, descrip text);
INSERT INTO map_shapes(rast,bnum, descrip)
WITH mygeoms
    AS ( SELECT 2 As bnum, ST_Buffer(ST_Point(90,90),30) As geom, 'circle' As descrip
            UNION ALL
            SELECT 3 AS bnum,
                ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 15) As geom, 'big road' As descrip
            UNION ALL
            SELECT 1 As bnum,
                ST_Translate(ST_Buffer(ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'), 8,'join=bevel'), 10,-6) As geom, 'small road' As descrip
            ),
   -- define our canvas to be 1 to 1 pixel to geometry
   canvas
    AS ( SELECT ST_AddBand(
        ST_MakeEmptyRaster(
            250,
            250,
            ST_XMin(e)::integer,
            ST_YMax(e)::integer,
            1, -1, 0, 0),
        '8BUI'::text,
        0) As rast
        FROM (SELECT ST_Extent(geom) As e,
                    Max(ST_SRID(geom)) As srid
                    from mygeoms
                    ) As foo
            )
-- return our rasters aligned with our canvas
SELECT ST_AsRaster(m.geom, canvas.rast, '8BUI', 240) As rast, bnum, descrip
                FROM mygeoms AS m CROSS JOIN canvas
UNION ALL
SELECT canvas.rast, 4, 'canvas'
FROM canvas;

Map algebra on single-band rasters and then collect the result with ST_AddBand.

Code
INSERT INTO map_shapes(rast,bnum,descrip)
SELECT ST_AddBand(ST_AddBand(rasts[1], rasts[2]),rasts[3]), 4, 'map bands overlay fct union (canvas)'
    FROM (SELECT ARRAY(SELECT ST_MapAlgebraFct(
            m1.rast,
            m2.rast,
            'raster_mapalgebra_union(double precision, double precision, integer[], text[])'::regprocedure,
            '8BUI',
            'FIRST')
                FROM map_shapes As m1 CROSS JOIN map_shapes As m2
    WHERE m1.descrip = 'canvas' AND m2.descrip <
> 'canvas' ORDER BY m2.bnum) As rasts) As foo;

A compact, executable callback example. The source rasters and their averaged overlap are rendered at build time.

Code
CREATE OR REPLACE FUNCTION pg_temp.raster_average(
    value_1 double precision,
    value_2 double precision,
    position integer[],
    VARIADIC userargs text[]
) RETURNS double precision
LANGUAGE SQL IMMUTABLE
AS 'SELECT COALESCE(($1 + $2) / 2.0, $1, $2)';

WITH canvas AS (
    SELECT ST_AddBand(
        ST_MakeEmptyRaster(80, 80, 0, 80, 1, -1, 0, 0, 0),
        1, '8BUI', 0, 0
    ) AS rast
), inputs AS (
    SELECT
        ST_AsRaster(ST_Buffer(ST_Point(30, 40), 25), rast, '8BUI', 80, 0)
            AS raster_1,
        ST_AsRaster(ST_Buffer(ST_Point(50, 40), 25), rast, '8BUI', 220, 0)
            AS raster_2
    FROM canvas
), variants AS (
    SELECT 'raster 1' AS title, raster_1 AS rendered FROM inputs
    UNION ALL
    SELECT 'raster 2', raster_2 FROM inputs
    UNION ALL
    SELECT 'averaged', ST_MapAlgebraFct(
        raster_1,
        raster_2,
        'pg_temp.raster_average(double precision,double precision,integer[],text[])'::regprocedure,
        '8BUI',
        'UNION'
    ) FROM inputs
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY title DESC;
Вивід растрових зображень
title    | image
----------+---------------------------
 raster 2 | PNG image, 50 x 50 pixels
 raster 1 | PNG image, 50 x 50 pixels
 averaged | PNG image, 70 x 50 pixels

Визначена користувачем функція, яка приймає додаткові аргументи

Code
CREATE OR REPLACE FUNCTION raster_mapalgebra_userargs(
    rast1 double precision,
    rast2 double precision,
    pos integer[],
    VARIADIC userargs text[]
)
    RETURNS double precision
    AS $$
    DECLARE
    BEGIN
        CASE
            WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN
                RETURN least(userargs[1]::integer,(rast1 + rast2)/2.);
            WHEN rast1 IS NULL AND rast2 IS NULL THEN
                RETURN userargs[2]::integer;
            WHEN rast1 IS NULL THEN
                RETURN greatest(rast2, random()*userargs[3]::integer)::integer;
            ELSE
                RETURN greatest(rast1, random()*userargs[4]::integer)::integer;
        END CASE;

        RETURN NULL;
    END;
    $$ LANGUAGE 'plpgsql' VOLATILE COST 1000;

SELECT ST_MapAlgebraFct(
    m1.rast,
    1,
    m1.rast,
    3,
    'raster_mapalgebra_userargs(double precision, double precision, integer[], text[])'::regprocedure,
    '8BUI',
    'INTERSECT',
    '100', '200', '200', '0')
                FROM map_shapes As m1
    WHERE m1.descrip = 'map bands overlay fct union (canvas)';
                    

The generated callback figure above demonstrates the raster alignment and overlap used by this variant; the exact callback result remains available as text.


Назва

ST_MapAlgebraFctNgb — 1-канальна версія: Map Algebra Nearest Neighbor з використанням визначеної користувачем функції PostgreSQL. Повертає растр, значення якого є результатом функції користувача PLPGSQL, що включає сусідство значень із вхідної каналу растра.

Короткий огляд

raster ST_MapAlgebraFctNgb(raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args);

Description

[Застереження]

ST_MapAlgebraFctNgb є застарілим з версії 2.1.0. Замість нього використовуйте ST_MapAlgebra (callback function version).

(одно растрова версія) Повертає растр, значення якого є результатом функції користувача PLPGSQL, що включає сусідство значень з вхідного растрового каналу. Функція користувача приймає сусідство значень пікселів як масив чисел, для кожного пікселя повертає результат функції користувача, замінюючи значення пікселя, що перевіряється в даний момент, результатом функції.

rast

Растр, на якому оцінюється функція користувача.

band

Номер каналу растра, що оцінюється. За замовчуванням — 1.

pixeltype

Тип пікселів вихідного растру. Повинен бути вказаний у ST_BandPixelTypeабо пропущений, або встановлений як NULL. Якщо не вказаний або встановлений як NULL, за замовчуванням буде використовуватися тип пікселів rast. Результати обрізаються, якщо вони перевищують дозволений для типу пікселів розмір.

ngbwidth

Ширина оточення, в клітинках.

ngbheight

Висота оточення, в клітинках.

onerastngbuserfunc

Користувацька функція PLPGSQL/psql для застосування до сусідніх пікселів одного каналу растру. Перший елемент — це двовимірний масив чисел, що представляють прямокутне оточення пікселя

nodatamode

Визначає, яке значення передавати функції для сусідніх пікселів, які не містять даних або мають значення NULL

"ignore": будь-які значення NODATA, що зустрічаються в оточенні, ігноруються під час обчислення — цей прапор повинен бути надісланий до функції зворотного виклику користувача, і функція користувача вирішує, як його ігнорувати.

"NULL": будь-які значення NODATA, що зустрічаються в оточенні, призведуть до того, що результуючий піксель буде NULL — у цьому випадку функція зворотного виклику користувача пропускається.

"value": будь-які значення NODATA, що зустрічаються в оточенні, замінюються пікселем-посиланням (тим, що знаходиться в центрі оточення). Зверніть увагу, що якщо це значення є NODATA, поведінка буде такою ж, як і для "NULL" (для відповідного оточення)

args

Аргументи, які передаються в користувацьку функцію.

Доступність: 2.0.0

Приклади

Приклади використовують растр "katrina", завантажений як окремий фрагмент, описаний у https://gdal.org/user/drivers/raster/postgisraster.html, а потім підготовлений у прикладах ST_Rescale

A simple 'callback' user function that averages up all the values in a neighborhood.

Code
CREATE OR REPLACE FUNCTION rast_avg(matrix float[][], nodatamode text, variadic args text[])
    RETURNS float AS
    $$
    DECLARE
        _matrix float[][];
        x1 integer;
        x2 integer;
        y1 integer;
        y2 integer;
        sum float;
    BEGIN
        _matrix := matrix;
        sum := 0;
        FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP
            FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP
                sum := sum + _matrix[x][y];
            END LOOP;
        END LOOP;
        RETURN (sum*1.0/(array_upper(matrix,1)*array_upper(matrix,2) ))::integer ;
    END;
    $$
LANGUAGE 'plpgsql' IMMUTABLE COST 1000;
                    

Apply the raster averaging callback within two pixels of each input pixel in the X and Y directions.

Code
SELECT ST_MapAlgebraFctNgb(
        rast,
        1,
        '8BUI',
        4,
        4,
        'rast_avg(float[][], text, text[])'::regprocedure,
        'NULL',
        NULL) As nn_with_border
    FROM katrinas_rescaled
    limit 1;
                    

A self-contained neighborhood average. The source raster has a sharp central square, while the result spreads those values across neighboring pixels. The source uses a non-NODATA background so nodatamode ignore averages background values with the square values, instead of treating the background as absent.

Code
WITH source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(16, 16, 0, 16, 1, -1, 0, 0, 0),
            1, '8BUI', 25, NULL
        ),
        1, 6, 6,
        ARRAY[
            [240, 240, 240, 240, 240, 240],
            [240, 240, 240, 240, 240, 240],
            [240, 240, 240, 240, 240, 240],
            [240, 240, 240, 240, 240, 240],
            [240, 240, 240, 240, 240, 240],
            [240, 240, 240, 240, 240, 240]
        ]::double precision[][]
    ) AS rast
), variants AS (
    SELECT 'source' AS title, rast AS rendered FROM source
    UNION ALL
    SELECT 'averaged', ST_SetBandNoDataValue(ST_MapAlgebraFctNgb(
        rast,
        1,
        '8BUI',
        2,
        2,
        'ST_Mean4ma(float[][],text,text[])'::regprocedure,
        'ignore',
        NULL
    ), NULL) FROM source
)
SELECT title, ST_AsPNG(rendered) AS image
FROM variants
ORDER BY title DESC;
Вивід растрових зображень
title    | image
----------+-------------------------
 source   | PNG image, 16 x 16 pixels
 averaged | PNG image, 16 x 16 pixels
Figure
Geometry figure for visual-rt-st-mapalgebrafctngb-01

Neighborhood averaging.

Перший канал нашого растра

Averaged result


Назва

ST_Reclass — Створює новий растр, складений з типів каналів, перекласифікованих з оригінальних. nband — це канал, який буде змінена. Якщо nband не вказано, вважається, що він дорівнює 1. Всі інші канали повертаються без змін. Приклад використання: перетворення каналу 16BUI на 8BUI і так далі для спрощення візуалізації у вигляді форматів, придатних для перегляду.

Короткий огляд

raster ST_Reclass(raster rast, integer nband, text reclassexpr, text pixeltype, double precision nodataval=NULL);

raster ST_Reclass(raster rast, reclassarg[] VARIADIC reclassargset);

raster ST_Reclass(raster rast, text reclassexpr, text pixeltype);

Description

Створює новий растр, сформований шляхом застосування операції перекласифікації, визначеної reclassexpr на вхідному растрі (rast). Опис виразів перекласифікації див. у reclassarg. Якщо band не вказано, вважається, що це смуга 1.

Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальний растр. Канали нового растра мають тип пікселів pixeltype. Якщо вказано reclassargset, то кожен reclassarg визначає тип цільового каналу. Незазначені канали повертаються без змін.

Доступність: 2.0.0

Приклади

Basic.

Створіть новий растр з оригіналу, де канал 2 перетворюється з 8BUI на 4BUI, а всі значення від 101 до 254 встановлюються на значення nodata.

Code
ALTER TABLE dummy_rast ADD COLUMN reclass_rast raster;
UPDATE dummy_rast SET reclass_rast = ST_Reclass(rast, 2, '0-87:1-10, 88-100:11-15, 101-254:0-0', '4BUI', 0) WHERE rid = 2;

SELECT i as col, j as row, ST_Value(rast, 2, i, j) As origval,
    ST_Value(reclass_rast, 2, i, j) As reclassval,
    ST_Value(reclass_rast, 2, i, j, false) As reclassval_include_nodata
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1, 3) AS j
WHERE rid = 2;
Вивід растрових зображень
col | row | origval | reclassval | reclassval_include_nodata
-----+-----+---------+------------+---------------------------
   1 |   1 |      78 |          9 |                         9
   2 |   1 |      98 |         14 |                        14
   3 |   1 |     122 |            |                         0
   1 |   2 |      96 |         14 |                        14
   2 |   2 |     118 |            |                         0
   3 |   2 |     180 |            |                         0
   1 |   3 |      99 |         15 |                        15
   2 |   3 |     112 |            |                         0
   3 |   3 |     169 |            |                         0

Advanced using multiple reclassargs.

Створіть новий растр з оригіналу, де канали 1,2,3 перетворюються відповідно на 1BB,4BUI, 4BUI і перекласифікуються. Зверніть увагу, що тут використовується аргумент reclassarg з змінною кількістю параметрів, який може приймати як вхідні дані необмежену кількість reclassargs (теоретично стільки смуг, скільки у вас є)

Code
UPDATE dummy_rast SET reclass_rast =
    ST_Reclass(
        rast,
        ROW(2, '0-87]:1-10, (87-100]:11-15, (101-254]:0-0', '4BUI', NULL)::reclassarg,
        ROW(1, '0-253]:1, 254:0', '1BB', NULL)::reclassarg,
        ROW(3, '0-70]:1, (70-86:2, [86-150):3, [150-255:4', '4BUI', NULL)::reclassarg
        ) WHERE rid = 2;

SELECT i as col, j as row, ST_Value(rast, 1, i, j) As ov1, ST_Value(reclass_rast, 1, i, j) As rv1,
    ST_Value(rast, 2, i, j) As ov2, ST_Value(reclass_rast, 2, i, j) As rv2,
    ST_Value(rast, 3, i, j) As ov3, ST_Value(reclass_rast, 3, i, j) As rv3
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1, 3) AS j
WHERE rid = 2;
Вивід растрових зображень
col | row | ov1 | rv1 | ov2 | rv2 | ov3 | rv3
----+-----+-----+-----+-----+-----+-----+-----
  1 |   1 | 253 |   1 |  78 |   9 |  70 |   1
  2 |   1 | 254 |   0 |  98 |  14 |  86 |   3
  3 |   1 | 253 |   1 | 122 |   0 | 100 |   3
  1 |   2 | 253 |   1 |  96 |  14 |  80 |   2
  2 |   2 | 254 |   0 | 118 |   0 | 108 |   3
  3 |   2 | 254 |   0 | 180 |   0 | 162 |   4
  1 |   3 | 250 |   1 |  99 |  15 |  90 |   3
  2 |   3 | 254 |   0 | 112 |   0 | 108 |   3
  3 |   3 | 254 |   0 | 169 |   0 | 175 |   4

Advanced Map a single band 32BF raster to multiple viewable bands.

Створити новий 3-канальний (8BUI, 8BUI, 8BUI видимий растр) з растра, який має тільки один канал 32bf

Code
ALTER TABLE wind ADD COLUMN rast_view raster;
UPDATE wind
    set rast_view = ST_AddBand(
        NULL,
        ARRAY[
    ST_Reclass(rast, 1, '0.1-10]:1-10,9-10]:11,(11-33:0'::text, '8BUI'::text, 0),
    ST_Reclass(rast, 1, '11-33):0-255,[0-32:0,(34-1000:0'::text, '8BUI'::text, 0),
    ST_Reclass(rast, 1, '0-32]:0,(32-100:100-255'::text, '8BUI'::text, 0)
    ]
    );
                    

Назва

ST_ReclassExact — Створює новий растр, що складається з каналів, перекласифікованих з оригінальних, використовуючи співвідношення 1:1 між значеннями в оригінальному каналі та новими значеннями в каналі призначення.

Короткий огляд

raster ST_ReclassExact(raster rast, double precision[] inputvalues, double precision[] outputvalues, integer bandnumber=1, text pixeltype=32BF, double precision nodatavalue=NULL);

Description

Створює новий растр, сформований шляхом застосування операції перекласифікації, визначеної масивами inputvalues та outputvalues. Значення пікселів, знайдені у вхідному масиві, відображаються на відповідні значення у вихідному масиві. Усі інші значення пікселів відображаються на nodatavalue.

Тип вихідного пікселя за замовчуванням є float, але його можна вказати за допомогою параметра pixeltype. Якщо не вказано bandnumber, то вважається, що це канал 1.

Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальний растр. Невизначені канали повертаються без змін.

Доступність: 3.6.0

Приклад: Основний

Створіть невеликий растр і зіставте його пікселі з новими значеннями.

Create a raster with four pixels: first row 1 2, second row 3 4.

Code
CREATE TABLE reclassexact (
    id integer,
    rast raster
);
INSERT INTO reclassexact (id, rast)
SELECT 1, ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(2, -- width in pixels
        2, -- height in pixels
        0, -- upper-left x-coordinate
        0, -- upper-left y-coordinate
        1, -- pixel size in x-direction
        -1, -- pixel size in y-direction (negative for north-up)
        0, -- skew in x-direction
        0, -- skew in y-direction
        4326  -- SRID (e.g., WGS 84)
      ),
      '32BUI'::text, -- pixel type (e.g., '32BF' for float, '8BUI' for unsigned 8-bit int)
      0.0, -- initial value for the band (e.g., 0.0 or a no-data value)
      -99            -- nodatavalue
    ),
    1, -- band number (usually 1 for single-band rasters)
    1, -- x origin for setting values (usually 1)
    1, -- y origin for setting values (usually 1)
    ARRAY[
      ARRAY[1, 2],
      ARRAY[3, 4]
    ]::double precision[][] -- 2D array of values
  );
                    

Reclass the values to new values and dump the values of the new raster for display.

Code
WITH rc AS (
  SELECT ST_ReclassExact(rast, -- input raster
    ARRAY[4, 3, 2, 1], -- input map
    ARRAY[14, 13, 12, 11], -- output map
    1, -- band number to remap
    '32BUI'              -- output raster pixel type
    ) AS rast
  FROM reclassexact
  WHERE id = 1
  )
SELECT 'rce-1', (ST_DumpValues(rc.rast)).*
FROM rc;
                    

Назва

ST_Union — Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.

Короткий огляд

raster ST_Union(setof raster rast);

raster ST_Union(setof raster rast, unionarg[] unionargset);

raster ST_Union(setof raster rast, integer nband);

raster ST_Union(setof raster rast, text uniontype);

raster ST_Union(setof raster rast, integer nband, text uniontype);

Description

Повертає об'єднання набору растрових плиток в один растр, що складається з принаймні одного каналу. Розмір отриманого растру дорівнює розміру всього набору. У разі перетину отримане значення визначається uniontype, яке може бути одним із таких: LAST (за замовчуванням), FIRST, MIN, MAX, COUNT, SUM, MEAN, RANGE.

[Примітка]

Щоб растри могли бути об'єднані, вони повинні мати однакове вирівнювання. Для отримання додаткової інформації та допомоги використовуйте ST_SameAlignment та ST_NotSameAlignmentReason. Одним із способів виправлення проблем з вирівнюванням є використання ST_Resample та використання одного і того ж еталонного растру для вирівнювання.

Доступність: 2.0.0

Покращено: 2.1.0 Покращена швидкість (повністю на базі C).

Доступність: 2.1.0 Введено варіант ST_Union(rast, unionarg).

Покращено: 2.1.0 ST_Union(rast) (варіант 1) об'єднує всі канали всіх вхідних растрів. Попередні версії PostGIS використовували першу канал.

Покращено: 2.1.0 ST_Union(rast, uniontype) (варіант 4) об'єднує всі канали всіх вхідних растрів.

Приклади

Reconstitute a single band chunked raster tile.

This creates a single band from first band of raster tiles. That form the original file system tile.

Code
SELECT filename, ST_Union(rast, 1) As file_rast
FROM sometable WHERE filename IN('dem01', 'dem02') GROUP BY filename;
                    

Return a multi-band raster that is the union of tiles intersecting geometry.

This creates a multi band raster collecting all the tiles that intersect a line. Note that In 2.0, this would have just returned a single band raster. , new union works on all bands by default. This is equivalent to unionarg: ARRAY[ROW(1, 'LAST'), ROW(2, 'LAST'), ROW(3, 'LAST')]::unionarg[].

Code
SELECT ST_Union(rast)
FROM aerials.boston
WHERE ST_Intersects(rast, ST_GeomFromText('LINESTRING(230486 887771,230500 88772)', 26986) );
                    

Select and reorder bands while unioning tiles that intersect a geometry.

Тут ми використовуємо довший синтаксис, якщо нам потрібна лише частина каналів або ми хочемо змінити порядок каналів

This creates a multi band raster collecting all the tiles that intersect a line.

Code
SELECT ST_Union(rast, ARRAY[ROW(2, 'LAST'), ROW(1, 'LAST'), ROW(3, 'LAST')]::unionarg[])
FROM aerials.boston
WHERE ST_Intersects(rast, ST_GeomFromText('LINESTRING(230486 887771,230500 88772)', 26986) );
                    

11.13. Вбудовані функції зворотного виклику алгебри карт

  • ST_Distinct4ma — Функція обробки растру, яка обчислює кількість унікальних значень у сусідніх пікселях.
  • ST_InvDistWeight4ma — Функція растрової обробки, яка інтерполює значення пікселя з сусідніх пікселів.
  • ST_Max4ma — Функція обробки растру, яка обчислює максимальне значення пікселя в околиці.
  • ST_Mean4ma — Функція обробки растру, яка обчислює середнє значення пікселя в оточенні.
  • ST_Min4ma — Функція обробки растру, яка обчислює мінімальне значення пікселя в оточенні.
  • ST_MinDist4ma — Функція обробки растру, яка повертає мінімальну відстань (у пікселях) між пікселем, що цікавить, та сусіднім пікселем із значенням.
  • ST_Range4ma — Функція обробки растру, яка обчислює діапазон значень у сусідніх пікселях.
  • ST_StdDev4ma — Функція обробки растра, яка обчислює стандартне відхилення значень сусідніх пікселів.
  • ST_Sum4ma — Функція обробки растру, яка обчислює суму всіх значень сусідніх пікселів.

Назва

ST_Distinct4ma — Функція обробки растру, яка обчислює кількість унікальних значень у сусідніх пікселях.

Короткий огляд

float8 ST_Distinct4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Distinct4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть кількість унікальних значень пікселів у сусідніх пікселях.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Distinct4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid | st_value
-----+----------
   2 |        3
(1 row)

Назва

ST_InvDistWeight4ma — Функція растрової обробки, яка інтерполює значення пікселя з сусідніх пікселів.

Короткий огляд

double precision ST_InvDistWeight4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть інтерпольоване значення для пікселя за допомогою методу зваженого оберненого відстані.

Існує два опціональних параметри, які можна передати через userargs. Перший параметр — це коефіцієнт потужності (змінна k у наведеному нижче рівнянні) від 0 до 1, який використовується в рівнянні зваженої оберненої відстані. Якщо не вказано, значення за замовчуванням дорівнює 1. Другий параметр — це відсоток ваги, який застосовується тільки тоді, коли значення пікселя, що цікавить, включено до інтерпольованого значення з сусідства. Якщо не вказано, а піксель, що цікавить, має значення, то це значення повертається.

The basic inverse-distance weighted estimate is:

z = (Σᵢ zᵢ / dᵢᵏ) / (Σᵢ 1 / dᵢᵏ)

Here zᵢ is a neighboring pixel value, dᵢ is its distance from the pixel being estimated, and k is a real-valued power factor between 0 and 1.

[Примітка]

Ця функція є спеціалізованою функцією зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', NULL::double precision, -9999),
        1, 1, 1, ARRAY[
            [10, 10, 10],
            [10, NULL, 20],
            [20, 20, 20]
        ]::double precision[][]
    ) AS rast
)
SELECT ST_Value(
    ST_MapAlgebra(
        rast,
        1,
        'ST_InvDistWeight4ma(double precision[][][],integer[][],text[])'::regprocedure,
        '32BF',
        'FIRST',
        NULL,
        1,
        1
    ),
    2, 2
) AS interpolated_value
FROM foo;
Вивід растрових зображень
15

Назва

ST_Max4ma — Функція обробки растру, яка обчислює максимальне значення пікселя в околиці.

Короткий огляд

float8 ST_Max4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Max4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть максимальне значення пікселя в околі пікселів.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Max4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid | st_value
-----+----------
   2 |      254
(1 row)

Назва

ST_Mean4ma — Функція обробки растру, яка обчислює середнє значення пікселя в оточенні.

Короткий огляд

float8 ST_Mean4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Mean4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчислити середнє значення пікселя в оточенні пікселів.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Variant 1.

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, '32BF', 1, 1, 'ST_Mean4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid |     st_value
-----+------------------
   2 | 253.222229003906
(1 row)

Variant 2.

Code
SELECT
  rid,
  ST_Value(
      ST_MapAlgebra(rast, 1, 'ST_Mean4ma(double precision[][][], integer[][], text[])'::regprocedure, '32BF', 'FIRST', NULL, 1, 1),
      2,
      2)
FROM dummy_rast
 WHERE rid = 2;
Вивід растрових зображень
rid |     st_value
-----+------------------
   2 | 253.222229003906
(1 row)

Назва

ST_Min4ma — Функція обробки растру, яка обчислює мінімальне значення пікселя в оточенні.

Короткий огляд

float8 ST_Min4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Min4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть мінімальне значення пікселя в оточенні пікселів.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Min4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid | st_value
-----+----------
   2 |      250
(1 row)

Назва

ST_MinDist4ma — Функція обробки растру, яка повертає мінімальну відстань (у пікселях) між пікселем, що цікавить, та сусіднім пікселем із значенням.

Короткий огляд

double precision ST_MinDist4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

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

[Примітка]

Мета цієї функції — надати інформативний пункт даних, який допомагає зробити висновок про корисність інтерпольованого значення пікселя, що цікавить, з ST_InvDistWeight4ma. Ця функція особливо корисна, коли оточення є малонаселеним.

[Примітка]

Ця функція є спеціалізованою функцією зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', NULL::double precision, -9999),
        1, 1, 1, ARRAY[
            [10, 10, 10],
            [10, NULL, 20],
            [20, 20, 20]
        ]::double precision[][]
    ) AS rast
)
SELECT ST_Value(
    ST_MapAlgebra(
        rast,
        1,
        'ST_MinDist4ma(double precision[][][],integer[][],text[])'::regprocedure,
        '32BF',
        'FIRST',
        NULL,
        1,
        1
    ),
    2, 2
) AS min_distance
FROM foo;
Вивід растрових зображень
1

Назва

ST_Range4ma — Функція обробки растру, яка обчислює діапазон значень у сусідніх пікселях.

Короткий огляд

float8 ST_Range4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Range4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть діапазон значень пікселів у сусідніх пікселях.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Range4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid | st_value
-----+----------
   2 |        4
(1 row)

Назва

ST_StdDev4ma — Функція обробки растра, яка обчислює стандартне відхилення значень сусідніх пікселів.

Короткий огляд

float8 ST_StdDev4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_StdDev4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть стандартне відхилення значень пікселів у сусідніх пікселях.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, '32BF', 1, 1, 'ST_StdDev4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid |     st_value
-----+------------------
   2 | 1.30170822143555
(1 row)

Назва

ST_Sum4ma — Функція обробки растру, яка обчислює суму всіх значень сусідніх пікселів.

Короткий огляд

float8 ST_Sum4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Sum4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Description

Обчисліть суму всіх значень пікселів у сусідніх пікселях.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Примітка]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Примітка]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Застереження]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

Code
SELECT
    rid,
    ST_Value(ST_MapAlgebraFctNgb(rast, 1, '32BF', 1, 1, 'ST_Sum4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
Вивід растрових зображень
rid | st_value
-----+----------
   2 |     2279
(1 row)

11.14. Растрова обробка: DEM (висота над рівнем моря)

  • ST_Aspect — Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.
  • ST_HillShade — Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.
  • ST_Roughness — Повертає растр з обчисленою "шорсткістю" цифрової моделі рельєфу (DEM).
  • ST_Slope — Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.
  • ST_TPI — Повертає растр з обчисленим індексом топографічного положення.
  • ST_TRI — Повертає растр з обчисленим індексом нерівності рельєфу.
  • ST_InterpolateRaster — Інтерполює поверхню сітки на основі вхідного набору 3-D точок, використовуючи значення X і Y для позиціонування точок на сітці, а значення Z точок — як висоту поверхні.
  • ST_Contour — Генерує набір векторних контурів із наданого растрового каналу, використовуючи алгоритм контурного відображення GDAL.

Назва

ST_Aspect — Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.

Короткий огляд

raster ST_Aspect(raster rast, integer band=1, text pixeltype=32BF, text units=DEGREES, boolean interpolate_nodata=FALSE);

raster ST_Aspect(raster rast, integer band, raster customextent, text pixeltype=32BF, text units=DEGREES, boolean interpolate_nodata=FALSE);

Description

Повертає аспект (за замовчуванням у градусах) каналу растрового зображення висоти. Використовує алгебру карт і застосовує рівняння аспекту до сусідніх пікселів.

units вказує одиниці виміру аспекту. Можливі значення: RADIANS, DEGREES (за замовчуванням).

Коли units = RADIANS, значення знаходяться в діапазоні від 0 до 2 * pi радіан, виміряних за годинниковою стрілкою від півночі.

Коли units = DEGREES, значення знаходяться в діапазоні від 0 до 360 градусів, виміряних за годинниковою стрілкою від півночі.

Якщо поворот пікселя дорівнює нулю, аспект пікселя дорівнює -1.

[Примітка]

Для отримання додаткової інформації про поворот, експозицію та тіньове затінення див. ESRI - Як працює тіньове затінення та Польовий посібник ERDAS - Зображення аспектів.

Доступність: 2.0.0

Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональний параметр функції interpolate_nodata

Змінено: 2.1.0 У попередніх версіях значення повороту були в радіанах. Тепер значення повороту за замовчуванням в градусах

Приклади

Variant 1.

This symmetric peak highlights the expected compass directions at the corners and the -1 aspect at the summit. The generated PNG shows the full aspect surface without relying on a manual illustration. The generated source raster is large enough for the PNG to show the directional field around the summit.

Code
WITH pixels AS (
    SELECT
        x,
        y,
        (20 - greatest(abs(x - 9), abs(y - 9)))::double precision AS value
    FROM generate_series(1, 17) AS y
    CROSS JOIN generate_series(1, 17) AS x
), rows AS (
    SELECT
        y,
        array_agg(value ORDER BY x) AS row_values
    FROM pixels
    GROUP BY y
), source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(17, 17, 0, 0, 1, -1, 0, 0, 0),
            1, '32BF', 0, -9999
        ),
        1, 1, 1,
        array_agg(row_values ORDER BY y)::double precision[][]
    ) AS rast
    FROM rows
), aspect AS (
    SELECT ST_Aspect(rast, 1, '32BF') AS rast
    FROM source
)
SELECT
    round(ST_Value(rast, 1, 1, 1)::numeric, 3) AS northwest_degrees,
    round(ST_Value(rast, 1, 9, 9)::numeric, 3) AS summit_degrees,
    round(ST_Value(rast, 1, 17, 17)::numeric, 3) AS southeast_degrees,
    ST_AsPNG(ST_ColorMap(rast, 1, 'bluered')) AS image
FROM aspect;
Вивід растрових зображень
northwest_degrees | summit_degrees | southeast_degrees | image
-------------------+----------------+-------------------+------------------------
           315.000 |         -1.000 |           135.000 | PNG image, 17 x 17 pixels
Figure
Geometry figure for visual-rt-st-aspect-01

Variant 2.

Повний приклад плиток покриття.

Code
WITH foo AS (
    SELECT ST_Tile(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
                1, '32BF', 0, -9999
            ),
            1, 1, 1, ARRAY[
                [1, 1, 1, 1, 1, 1],
                [1, 1, 1, 1, 2, 1],
                [1, 2, 2, 3, 3, 1],
                [1, 1, 3, 2, 1, 1],
                [1, 2, 2, 1, 2, 1],
                [1, 1, 1, 1, 1, 1]
            ]::double precision[]
        ),
        2, 2
    ) AS rast
)
SELECT
    t1.rast,
    ST_Aspect(ST_Union(t2.rast), 1, t1.rast)
FROM foo t1
CROSS JOIN foo t2
WHERE ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rast;
                    

Назва

ST_HillShade — Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.

Короткий огляд

raster ST_HillShade(raster rast, integer band=1, text pixeltype=32BF, double precision azimuth=315, double precision altitude=45, double precision max_bright=255, double precision scale=1.0, boolean interpolate_nodata=FALSE);

raster ST_HillShade(raster rast, integer band, raster customextent, text pixeltype=32BF, double precision azimuth=315, double precision altitude=45, double precision max_bright=255, double precision scale=1.0, boolean interpolate_nodata=FALSE);

Description

Повертає гіпотетичне освітлення растрового каналу висоти за допомогою вхідних даних азимута, висоти, яскравості та масштабу. Використовує алгебру карт і застосовує рівняння затінення пагорбів до сусідніх пікселів. Значення пікселів, що повертаються, знаходяться в діапазоні від 0 до 255.

azimuth — це значення від 0 до 360 градусів, виміряне за годинниковою стрілкою від півночі.

altitude — це значення від 0 до 90 градусів, де 0 градусів відповідає горизонту, а 90 градусів — прямо над головою.

max_bright — це значення від 0 до 255, де 0 означає відсутність яскравості, а 255 — максимальну яскравість.

scale — це співвідношення вертикальних одиниць до горизонтальних. Для Feet:LatLon використовуйте scale=370400, для Meters:LatLon використовуйте scale=111120.

Якщо interpolate_nodata має значення TRUE, значення пікселів NODATA з вхідного растру будуть інтерпольовані за допомогою ST_InvDistWeight4maперед обчисленням освітлення тіньового рельєфу.

[Примітка]

Для отримання додаткової інформації про Hillshade, будь ласка, зверніться до Як працює hillshade.

Доступність: 2.0.0

Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональний параметр функції interpolate_nodata

Змінено: 2.1.0 У попередніх версіях азимут і висота виражалися в радіанах. Тепер азимут і висота виражаються в градусах

Приклади

Variant 1.

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 1, 1, 1],
            [1, 2, 2, 2, 1],
            [1, 2, 3, 2, 1],
            [1, 2, 2, 2, 1],
            [1, 1, 1, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_DumpValues(ST_HillShade(rast, 1, '32BF'))
FROM foo

                                                                                                                       st_dumpvalues
Вивід растрових зображень
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------
 (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,251.32763671875,220.749786376953,147.224319458008,NULL},{NULL,220.749786376953,180.312225341797,67.7497863769531,NULL},{NULL,147.224319458008,
67.7497863769531,43.1210060119629,NULL},{NULL,NULL,NULL,NULL,NULL}}")
(1 row)

Variant 2.

Повний приклад плиток покриття.

Code
WITH foo AS (
    SELECT ST_Tile(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
                1, '32BF', 0, -9999
            ),
            1, 1, 1, ARRAY[
                [1, 1, 1, 1, 1, 1],
                [1, 1, 1, 1, 2, 1],
                [1, 2, 2, 3, 3, 1],
                [1, 1, 3, 2, 1, 1],
                [1, 2, 2, 1, 2, 1],
                [1, 1, 1, 1, 1, 1]
            ]::double precision[]
        ),
        2, 2
    ) AS rast
)
SELECT
    t1.rast,
    ST_HillShade(ST_Union(t2.rast), 1, t1.rast)
FROM foo t1
CROSS JOIN foo t2
WHERE ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rast;
                    

Назва

ST_Roughness — Повертає растр з обчисленою "шорсткістю" цифрової моделі рельєфу (DEM).

Короткий огляд

raster ST_Roughness(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

Description

Обчислює "шорсткість" цифрової моделі рельєфу (DEM), віднімаючи максимальне значення від мінімального для заданої області.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 2, 3, 3],
            [1, 2, 4, 15, 3],
            [2, 4, 10, 7, 5],
            [3, 5, 7, 6, 4],
            [3, 3, 5, 4, 4]
        ]::double precision[][]
    ) AS rast
)
SELECT ST_Value(ST_Roughness(rast, 1, '32BF'), 3, 3) AS roughness
FROM foo;
Вивід растрових зображень
13

Назва

ST_Slope — Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.

Короткий огляд

raster ST_Slope(raster rast, integer nband=1, text pixeltype=32BF, text units=DEGREES, double precision scale=1.0, boolean interpolate_nodata=FALSE);

raster ST_Slope(raster rast, integer nband, raster customextent, text pixeltype=32BF, text units=DEGREES, double precision scale=1.0, boolean interpolate_nodata=FALSE);

Description

Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Використовує алгебру карт і застосовує рівняння нахилу до сусідніх пікселів.

units вказує одиниці виміру нахилу. Можливі значення: RADIANS, DEGREES (за замовчуванням), PERCENT.

scale — це співвідношення вертикальних одиниць до горизонтальних. Для Feet:LatLon використовуйте scale=370400, для Meters:LatLon використовуйте scale=111120.

Якщо interpolate_nodata має значення TRUE, значення пікселів NODATA з вхідного растру будуть інтерпольовані за допомогою ST_InvDistWeight4maперед обчисленням нахилу поверхні.

[Примітка]

Для отримання додаткової інформації про нахил, експозицію та тіньове затінення див. ESRI - Як працює тіньове затінення та Польовий посібник ERDAS - Зображення схилів.

Доступність: 2.0.0

Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональні параметри функції units, scale, interpolate_nodata

Змінено: 2.1.0 У попередніх версіях значення повороту були в радіанах. Тепер значення повороту за замовчуванням в градусах

Приклади

Variant 1.

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 1, 1, 1],
            [1, 2, 2, 2, 1],
            [1, 2, 3, 2, 1],
            [1, 2, 2, 2, 1],
            [1, 1, 1, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_DumpValues(ST_Slope(rast, 1, '32BF'))
FROM foo

                            st_dumpvalues
Вивід растрових зображень
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------
 (1,"{{10.0249881744385,21.5681285858154,26.5650520324707,21.5681285858154,10.0249881744385},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154},
{26.5650520324707,36.8698959350586,0,36.8698959350586,26.5650520324707},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154},{10.0249881744385,21.
5681285858154,26.5650520324707,21.5681285858154,10.0249881744385}}")
(1 row)

Variant 2.

Повний приклад плиток покриття.

Code
WITH foo AS (
    SELECT ST_Tile(ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
                1, '32BF', 0, -9999
            ),
            1, 1, 1, ARRAY[
                [1, 1, 1, 1, 1, 1],
                [1, 1, 1, 1, 2, 1],
                [1, 2, 2, 3, 3, 1],
                [1, 1, 3, 2, 1, 1],
                [1, 2, 2, 1, 2, 1],
                [1, 1, 1, 1, 1, 1]
            ]::double precision[]
        ),
        2, 2
    ) AS rast
)
SELECT
    t1.rast,
    ST_Slope(ST_Union(t2.rast), 1, t1.rast)
FROM foo t1
CROSS JOIN foo t2
WHERE ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rast;
                    

Назва

ST_TPI — Повертає растр з обчисленим індексом топографічного положення.

Короткий огляд

raster ST_TPI(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

Description

Обчислює індекс топографічного положення, який визначається як фокальне середнє значення з радіусом, що дорівнює одиниці мінус центральна комірка.

[Примітка]

Ця функція підтримує тільки фокальний середній радіус, рівний одиниці.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 2, 3, 3],
            [1, 2, 4, 15, 3],
            [2, 4, 10, 7, 5],
            [3, 5, 7, 6, 4],
            [3, 3, 5, 4, 4]
        ]::double precision[][]
    ) AS rast
)
SELECT ST_Value(ST_TPI(rast, 1, '32BF'), 3, 3) AS tpi
FROM foo;
Вивід растрових зображень
3.75

Назва

ST_TRI — Повертає растр з обчисленим індексом нерівності рельєфу.

Короткий огляд

raster ST_TRI(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

Description

Індекс нерівності рельєфу розраховується шляхом порівняння центрального пікселя з сусідніми, вирахування абсолютних значень різниць і усереднення результату.

[Примітка]

Ця функція підтримує тільки фокальний середній радіус, рівний одиниці.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT ST_SetValues(ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 2, 3, 3],
            [1, 2, 4, 15, 3],
            [2, 4, 10, 7, 5],
            [3, 5, 7, 6, 4],
            [3, 3, 5, 4, 4]
        ]::double precision[][]
    ) AS rast
)
SELECT ST_Value(ST_TRI(rast, 1, '32BF'), 3, 3) AS tri
FROM foo;
Вивід растрових зображень
5

Назва

ST_InterpolateRaster — Інтерполює поверхню сітки на основі вхідного набору 3-D точок, використовуючи значення X і Y для позиціонування точок на сітці, а значення Z точок — як висоту поверхні.

Короткий огляд

raster ST_InterpolateRaster(geometry input_points, text algorithm_options, raster template, integer template_band_num=1);

Description

Інтерполює поверхню сітки на основі вхідного набору 3-вимірних точок, використовуючи значення X і Y для позиціонування точок на сітці, а значення Z точок — як висоту поверхні. Доступно п'ять алгоритмів інтерполяції: обернена відстань, обернена відстань найближчого сусіда, ковзна середня, найближчий сусід і лінійна інтерполяція. Більш детальну інформацію про алгоритми та їхні параметри див. у документації gdal_grid. Більше інформації про те, як обчислюються інтерполяції, див. посібник з роботи з сіткою GDAL.

Вхідні параметри:

input_points

Точки для інтерполяції. Прийнятна будь-яка геометрія із значеннями Z, будуть використані всі точки у вхідних даних.

algorithm_options

Рядок, що визначає алгоритм та параметри алгоритму, у форматі, який використовується gdal_grid. Наприклад, для інтерполяції з оберненою відстанню та згладжуванням 2 слід використовувати "invdist:smoothing=2.0"

template

Растровий шаблон для управління геометрією вихідного растра. Ширина, висота, розмір пікселя, просторова протяжність і тип пікселя будуть зчитуватися з цього шаблону.

template_band_num

За замовчуванням для керування вихідним растром використовується перший канал у шаблоні растра, але це можна налаштувати за допомогою цього параметра.

Доступність: 3.2.0

Приклад

Code
SELECT ST_InterpolateRaster('MULTIPOINT(10.5 9.5 1000,11.5 8.5 1000,10.5 8.5 500,11.5 9.5 500)'::geometry,
    'invdist:smoothing:2.0',
    ST_AddBand(ST_MakeEmptyRaster(200, 400, 10, 10, 0.01, -0.005, 0, 0), '16BSI')
)

Див. також

ST_Contour


Назва

ST_Contour — Генерує набір векторних контурів із наданого растрового каналу, використовуючи алгоритм контурного відображення GDAL.

Короткий огляд

setof record ST_Contour(raster rast, integer bandnumber=1, double precision level_interval=100.0, double precision level_base=0.0, double precision[] fixed_levels=ARRAY[], boolean polygonize=false);

Description

Генерує набір векторних контурів із наданого растрового rfyfke, використовуючи алгоритму контурного відображення GDAL.

Коли параметр fixed_levels є не порожнім масивом, параметри level_interval та level_base ігноруються.

Вхідні параметри:

rast

Растр для створення контуру

bandnumber

Смуга для формування контуру

level_interval

Інтервал висоти між створеними контурами

level_base

"База", відносно якої застосовуються інтервали контурів, зазвичай дорівнює нулю, але може бути іншою. Щоб створити 10-метрові контури на 5, 15, 25, ... LEVEL_BASE дорівнюватиме 5.

fixed_levels

Інтервал висоти між створеними контурами

polygonize

Якщо true, будуть створені контурні полігони, а не полігональні лінії.

Значення, що повертаються, — це набір записів із такими атрибутами:

geom

Геометрія контурної лінії.

id

Унікальний ідентифікатор, присвоєний контурній лінії GDAL.

value

Растрове значення, яке представляє лінія. Для вхідних даних DEM висоти це буде висота вихідного контуру.

Доступність: 3.2.0

Приклад

Code
WITH c AS (
SELECT (ST_Contour(rast, 1, fixed_levels => ARRAY[100.0, 200.0, 300.0])).*
FROM dem_grid WHERE rid = 1
)
SELECT geom, id, value
FROM c;

Див. також

ST_InterpolateRaster

11.15. Обробка растрових даних: перетворення растрових даних у геометричні

  • Box3D — Повертає 3D-представлення обмежувальної рамки растра.
  • ST_ConvexHull — Повертає геометрію опуклої оболонки растра, включаючи значення пікселів, рівні BandNoDataValue. Для растрів правильної форми та без нахилу це дає той самий результат, що й ST_Envelope, тому корисно лише для растрів неправильної форми або з нахилом.
  • ST_DumpAsPolygons — Повертає набір рядків geomval (geom,val) із заданого растрового каналу. Якщо номер каналу не вказано, за замовчуванням використовується канал 1.
  • ST_Envelope — Повертає полігон, що відображає межі растру.
  • ST_MinConvexHull — Повернути геометрію опуклої оболонки растра, виключаючи пікселі NODATA.
  • ST_Polygon — Повертає багатокутну геометрію, утворену об'єднанням пікселів, значення яких не дорівнює нулю. Якщо номер каналу не вказано, за замовчуванням використовується 1.
  • ST_IntersectionFractions — Обчислює частку кожної растрової комірки, яка покрита заданою геометрією.

Назва

Box3D — Повертає 3D-представлення обмежувальної рамки растра.

Короткий огляд

box3d Box3D(raster rast);

Description

Повертає поле, що представляє розмір растру.

Багатокутник визначається кутовими точками обмежувального прямокутника ((MINX, MINY), (MAXX, MAXY))

Змінено: 2.0.0 У версіях до 2.0 замість box3d використовувався box2d. Оскільки box2d є застарілим типом, його було змінено на box3d.

Приклади

Code
SELECT
    rid,
    Box3D(rast) AS rastbox
FROM dummy_rast;
Вивід растрових зображень
rid |        rastbox
----+-------------------------------------------------
1   | BOX3D(0.5 0.5 0,20.5 60.5 0)
2   | BOX3D(3427927.75 5793243.5 0,3427928 5793244 0)

Див. також

ST_Envelope


Назва

ST_ConvexHull — Повертає геометрію опуклої оболонки растра, включаючи значення пікселів, рівні BandNoDataValue. Для растрів правильної форми та без нахилу це дає той самий результат, що й ST_Envelope, тому корисно лише для растрів неправильної форми або з нахилом.

Короткий огляд

geometry ST_ConvexHull(raster rast);

Description

Повертає геометрію опуклої оболонки растра, включаючи пікселі каналу NoDataBandValue. Для растрів правильної форми та без нахилу це дає приблизно той самий результат, що й ST_Envelope, тому корисно лише для растрів неправильної форми або з нахилом.

[Примітка]

ST_Envelope округлює координати і, отже, додає невеликий буфер навколо растра, тому результат дещо відрізняється від ST_ConvexHull, який не округлює.

Приклади

See doc/development/internals/raster-affine.md for the scale, skew, and rotation terms that make the convex hull and envelope differ for skewed rasters.

For regular non-skewed rasters, the envelope and convex hull are more or less the same.

Code
SELECT ST_ConvexHull(rast) As convhull, ST_Envelope(rast) As env
FROM dummy_rast WHERE rid=1;
Вивід растрових зображень
convhull                        |                env
--------------------------------------------------------+------------------------------------
 POLYGON((0.5 0.5,20.5 0.5,20.5 60.5,0.5 60.5,0.5 0.5)) | POLYGON((0 0,20 0,20 60,0 60,0 0))

Now we skew the raster. Note how the convex hull and envelope are now different.

Code
SELECT ST_ConvexHull(rast) As convhull, ST_Envelope(rast) As env
FROM (SELECT ST_SetRotation(rast, 0.1, 0.1) As rast
    FROM dummy_rast WHERE rid=1) As foo;
Вивід растрових зображень
convhull                        |                env
--------------------------------------------------------+------------------------------------
 POLYGON((0.5 0.5,20.5 1.5,22.5 61.5,2.5 60.5,0.5 0.5)) | POLYGON((0 0,22 0,22 61,0 61,0 0))

Назва

ST_DumpAsPolygons — Повертає набір рядків geomval (geom,val) із заданого растрового каналу. Якщо номер каналу не вказано, за замовчуванням використовується канал 1.

Короткий огляд

setof geomval ST_DumpAsPolygons(raster rast, integer band_num=1, boolean exclude_nodata_value=TRUE);

Description

Це функція, що повертає набір (SRF). Вона повертає набір рядків geomval, сформованих геометрією (geom) та значенням піксельів каналу (val). Кожен багатокутник є об'єднанням усіх пікселів для ціього каналу, які мають однакове значення пікселя, позначене val.

ST_DumpAsPolygon корисний для полігонізації растрів. Він є зворотним до GROUP BY, оскільки створює нові рядки. Наприклад, його можна використовувати для розширення одного растра на кілька POLYGONS/MULTIPOLYGONS.

Змінено 3.3.0, перевірка та виправлення вимкнені для покращення продуктивності. Може призвести до недійсних геометрій.

Змінено 3.7.0, полігонізація враховує переривання PostgreSQL, тому скасування та тайм-аути операторів негайно зупиняють обробку.

Доступність: Потрібна версія GDAL 1.7 або вище.

[Примітка]

Якщо для діапазону не встановлено значення даних, пікселі з цим значенням не будуть повертатися, за винятком випадків, коли exclude_nodata_value=false.

[Примітка]

Якщо вас цікавить лише кількість пікселів із заданим значенням у растрі, швидше буде використати ST_ValueCount.

[Примітка]

Це відрізняється від ST_PixelAsPolygons, де для кожного пікселя повертається одна геометрія, незалежно від значення пікселя.

Приклади

This syntax uses a LATERAL join.

Code
SELECT val,geom As geomwkt
FROM (
SELECT dp.*
FROM dummy_rast, LATERAL ST_DumpAsPolygons(rast) AS dp
WHERE rid = 2
) As foo
WHERE val BETWEEN 249 and 251
ORDER BY val;
Вивід растрових зображень
val |                                                       geomwkt
-----+--------------------------------------------------------------------------
 249 | POLYGON((3427927.95 5793243.95,3427927.95 5793243.85,3427928 5793243.85,
        3427928 5793243.95,3427927.95 5793243.95))
 250 | POLYGON((3427927.75 5793243.9,3427927.75 5793243.85,3427927.8 5793243.85,
        3427927.8 5793243.9,3427927.75 5793243.9))
 250 | POLYGON((3427927.8 5793243.8,3427927.8 5793243.75,3427927.85 5793243.75,
        3427927.85 5793243.8, 3427927.8 5793243.8))
 251 | POLYGON((3427927.75 5793243.85,3427927.75 5793243.8,3427927.8 5793243.8,
        3427927.8 5793243.85,3427927.75 5793243.85))

Назва

ST_Envelope — Повертає полігон, що відображає межі растру.

Короткий огляд

geometry ST_Envelope(raster rast);

Description

Повертає полігональне представлення меж растра в одиницях просторових координат, визначених srid. Це мінімальна обмежувальна рамка float8, представлена у вигляді полігону.

Полігон визначається кутовими точками обмежувальної рамки ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY))

Приклади

Code
SELECT rid, ST_Envelope(rast) As envgeomwkt
FROM dummy_rast;
Вивід растрових зображень
rid |                                         envgeomwkt
-----+--------------------------------------------------------------------
   1 | POLYGON((0 0,20 0,20 60,0 60,0 0))
   2 | POLYGON((3427927 5793243,3427928 5793243,
        3427928 5793244,3427927 5793244, 3427927 5793243))

Див. також

ST_Envelope, ST_AsText, ST_SRID


Назва

ST_MinConvexHull — Повернути геометрію опуклої оболонки растра, виключаючи пікселі NODATA.

Короткий огляд

geometry ST_MinConvexHull(raster rast, integer nband=NULL);

Description

Повертає геометрію опуклої оболонки растра, виключаючи пікселі NODATA. Якщо nband дорівнює NULL, враховуються всі канали растра.

Доступність: 2.1.0

Приклади

Code
WITH foo AS (
    SELECT
        ST_SetValues(ST_SetValues(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0), 2, '8BUI', 1, 0),
                1, 1, 1,
                ARRAY[
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 1, 0, 0, 0, 0, 1],
                    [0, 0, 0, 1, 1, 0, 0, 0, 0],
                    [0, 0, 0, 1, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0]
                ]::double precision[][]
            ),
            2, 1, 1,
            ARRAY[
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [1, 0, 0, 0, 0, 1, 0, 0, 0],
                [0, 0, 0, 0, 1, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 1, 0, 0, 0, 0, 0, 0]
            ]::double precision[][]
        ) AS rast
)
SELECT title, geom AS geom
FROM foo
CROSS JOIN LATERAL (VALUES
    ('raster hull', ST_ConvexHull(rast)),
    ('all bands', ST_MinConvexHull(rast)),
    ('band 1', ST_MinConvexHull(rast, 1)),
    ('band 2', ST_MinConvexHull(rast, 2))
) AS variants(title, geom);
Вивід растрових зображень
title    |                 geom
-------------+---------------------------------------
 raster hull | POLYGON((0 0,9 0,9 -9,0 -9,0 0))
 all bands   | POLYGON((0 -3,9 -3,9 -9,0 -9,0 -3))
 band 1      | POLYGON((3 -3,9 -3,9 -6,3 -6,3 -3))
 band 2      | POLYGON((0 -3,6 -3,6 -9,0 -9,0 -3))
Figure
Geometry figure for visual-rt-st-minconvexhull-01

Назва

ST_Polygon — Повертає багатокутну геометрію, утворену об'єднанням пікселів, значення яких не дорівнює нулю. Якщо номер каналу не вказано, за замовчуванням використовується 1.

Короткий огляд

geometry ST_Polygon(raster rast, integer band_num=1);

Description

Змінено 3.3.0, перевірка та виправлення вимкнені для покращення продуктивності. Може призвести до недійсних геометрій.

Доступність: 0.1.6 Вимагає GDAL 1.7 або вище.

Покращено: 2.1.0 Покращена швидкість (повністю на основі C) та гарантована валідність поверненого багатокутника.

Змінено: 2.1.0 У попередніх версіях іноді повертався полігон, змінено на завжди повертати мультиполігон.

Приклади

Compare polygonization of every pixel with polygonization after zero is assigned as the NODATA value. The latter preserves the gap formed by zero-valued cells.

Code
WITH source AS (
    SELECT ST_SetValues(
        ST_AddBand(
            ST_MakeEmptyRaster(4, 4, 0, 4, 1, -1, 0, 0, 0),
            1, '8BUI', 1, NULL
        ),
        1, 1, 1,
        ARRAY[
            [1, 1, 1, 1],
            [1, 0, 0, 1],
            [1, 1, 0, 1],
            [1, 1, 1, 1]
        ]::double precision[][]
    ) AS rast
), variants AS (
    SELECT 'all pixels' AS title, ST_Polygon(rast) AS geom
    FROM source
    UNION ALL
    SELECT
        'zero excluded',
        ST_Polygon(ST_SetBandNoDataValue(rast, 1, 0))
    FROM source
)
SELECT title, geom AS geom
FROM variants
ORDER BY CASE title
    WHEN 'all pixels' THEN 1
    ELSE 2
END;
Вивід растрових зображень
title         | geom
---------------+----------------------------------------------------------------------
 all pixels    | MULTIPOLYGON(((0 4,4 4,4 0,0 0,0 4)))
 zero excluded | MULTIPOLYGON(((0 4,0 0,4 0,4 4,0 4),(1 3,3 3,3 1,2 1,2 2,1 2,1 3)))
(2 rows)
Figure
Geometry figure for visual-rt-st-polygon-01

Див. також

ST_Value, ST_DumpAsPolygons


Назва

ST_IntersectionFractions — Обчислює частку кожної растрової комірки, яка покрита заданою геометрією.

Короткий огляд

raster ST_IntersectionFractions(raster rast, geometry geom);

Description

Обчислює частку кожної растрової комірки, яка покрита заданою геометрією. Перший аргумент — це растр, який визначає геометрію сітки, що використовується для обчислення. Розмір і розмір комірки зчитуються з параметра растра. Другий аргумент — це геометрія, яка накладається на сітку, і кожна комірка заповнюється на основі накладення геометрії на сітку. Для полігонів значення, що повертається для кожної комірки, є часткою її площі, яка покрита геометрією. Для лінійних об'єктів значення, що повертається для кожної комірки, є довжиною, що міститься в комірці.

Доступність: 3.6.0 Вимагає GEOS 3.14 або вище.

Приклади

This rotated square polygon covers half of each cell in the raster.

Code
CREATE TABLE raster_proportions_rast (
    name text,
    rast raster
);

INSERT INTO raster_proportions_rast (name, rast) VALUES (
  '2x2 raster covering 0,0 to 10,10',
  ST_MakeEmptyRaster(2, 2, -- raster width/height in pixels
    0, 10, -- upper-left corner x/y coordinates
    5, -5, -- pixel width/height in ground units
    0, 0, -- skew x/y
    0        -- SRID
  ));

SELECT name, ST_DumpValues(
    ST_IntersectionFractions(
        rast,
        'POLYGON((5 0,0 5,5 10,10 5,5 0))'::geometry),
    1)
FROM raster_proportions_rast;
Вивід растрових зображень
2x2 raster covering 0,0 to 10,10
---------------------------------
 {{0.5,0.5},{0.5,0.5}}

Див. також

ST_MakeEmptyRaster

11.16. Растрові оператори

  • && — Повертає TRUE, якщо обмежувальна рамка A перетинається з обмежувальною рамкою B.
  • &< — Повертає TRUE, якщо обмежувальна рамка A знаходиться ліворуч від B.
  • &> — Повертає TRUE, якщо обмежувальна рамка A знаходиться праворуч від обмежувальної рамки B.
  • = — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B. Використовує обмежувальну рамку подвійної точності.
  • @ — Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B. Використовує обмежувальну рамку подвійної точності.
  • ~= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.
  • ~ — Повертає TRUE, якщо обмежувальна рамка A містить B. Використовує обмежувальну рамку подвійної точності.

Назва

&& — Повертає TRUE, якщо обмежувальна рамка A перетинається з обмежувальною рамкою B.

Короткий огляд

boolean &&( raster A , raster B );

boolean &&( raster A , geometry B );

boolean &&( geometry B , raster A );

Description

Оператор && повертає TRUE, якщо обмежувальна рамка растра/геометрії A перетинає обмежувальну рамку растра/геометрії B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Доступність: 2.0.0

Приклади

Code
SELECT A.rid As a_rid, B.rid As b_rid, A.rast && B.rast As intersect
FROM dummy_rast AS A CROSS JOIN dummy_rast AS B LIMIT 3;
Вивід растрових зображень
a_rid | b_rid | intersect
-------+-------+---------
     2 |     2 | t
     2 |     3 | f
     2 |     1 | f

Назва

&< — Повертає TRUE, якщо обмежувальна рамка A знаходиться ліворуч від B.

Короткий огляд

boolean &<( raster A , raster B );

Description

Оператор &< повертає TRUE, якщо обмежувальна рамка растру A перекриває або знаходиться ліворуч від обмежувальної рамки растру B, або, точніше, перекриває або НЕ знаходиться праворуч від обмежувальної рамки растру B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Приклади

Code
SELECT A.rid As a_rid, B.rid As b_rid, A.rast &< B.rast As overleft
 FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;
Вивід растрових зображень
a_rid | b_rid | overleft
------+-------+----------
    2 |     2 | t
    2 |     3 | f
    2 |     1 | f
    3 |     2 | t
    3 |     3 | t
    3 |     1 | f
    1 |     2 | t
    1 |     3 | t
    1 |     1 | t

Назва

&> — Повертає TRUE, якщо обмежувальна рамка A знаходиться праворуч від обмежувальної рамки B.

Короткий огляд

boolean &>( raster A , raster B );

Description

Оператор &> повертає TRUE, якщо обмежувальна рамка растра A перекриває або знаходиться праворуч від обмежувальної рамки растра B, або, точніше, перекриває або НЕ знаходиться ліворуч від обмежувальної рамки растра B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

Code
SELECT A.rid As a_rid, B.rid As b_rid, A.rast &
> B.rast As overright
 FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;
Вивід растрових зображень
 a_rid | b_rid | overright
-------+-------+----------
     2 |     2 | t
     2 |     3 | t
     2 |     1 | t
     3 |     2 | f
     3 |     3 | t
     3 |     1 | f
     1 |     2 | f
     1 |     3 | t
     1 |     1 | t

Назва

= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B. Використовує обмежувальну рамку подвійної точності.

Короткий огляд

boolean =( raster A , raster B );

Description

Оператор = повертає TRUE, якщо обмежувальна рамка растра A збігається з обмежувальною рамкою растра B. PostgreSQL використовує оператори =, < та >, визначені для растрів, для виконання внутрішнього впорядкування та порівняння растрів (тобто в операторі GROUP BY або ORDER BY). .

[Застереження]

Цей операнд НЕ використовуватиме жодних індексів, які можуть бути доступні на растрах. Замість цього використовуйте ~=. Цей оператор існує переважно для того, щоб можна було групувати за стовпцем растра.

Доступність: 2.1.0

Див. також

~=


Назва

@ — Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B. Використовує обмежувальну рамку подвійної точності.

Короткий огляд

boolean @( raster A , raster B );

boolean @( geometry A , raster B );

boolean @( raster B , geometry A );

Description

Оператор @ повертає TRUE, якщо обмежувальна рамка растру/геометрії A міститься в обмежувальній рамці растру/геометрії B.

[Примітка]

Цей операнд буде використовувати просторові індекси на растрах.

Доступність: 2.0.0 растр @ растр, растр @ геометрія введено

Доступність: 2.0.5 геометрія @ растр введена

Див. також

~


Назва

~= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

Короткий огляд

boolean ~=( raster A , raster B );

Description

Оператор ~= повертає TRUE, якщо обмежувальна рамка растра A збігається з обмежувальною рамкою растра B.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Доступність: 2.0.0

Приклади

Дуже корисним випадком використання є взяття двох наборів односмугових растрів, які є частиною одного і того ж фрагмента, але представляють різні теми, і створення багатоканального растра

Code
SELECT ST_AddBand(prec.rast, alt.rast) As new_rast
FROM prec INNER JOIN alt ON (prec.rast ~= alt.rast);
        

Див. також

ST_AddBand, =


Назва

~ — Повертає TRUE, якщо обмежувальна рамка A містить B. Використовує обмежувальну рамку подвійної точності.

Короткий огляд

boolean ~( raster A , raster B );

boolean ~( geometry A , raster B );

boolean ~( raster B , geometry A );

Description

Оператор ~ повертає TRUE, якщо обмежувальна рамка растра/геометрії A містить обмежувальну рамку растра/геометрії B.

[Примітка]

Цей операнд буде використовувати просторові індекси на растрах.

Доступність: 2.0.0

Див. також

@

11.17. Просторові відносини між растром і растровоим каналом

  • ST_Contains — Повертає true, якщо жодна точка растра rastB не лежить зовні растра rastA і принаймні одна точка всередині rastB лежить всередині rastA.
  • ST_ContainsProperly — Повертає true, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA.
  • ST_Covers — Повертає true, якщо жодна точка растра rastB не лежить за межами растра rastA.
  • ST_CoveredBy — Повертає true, якщо жодна точка растра rastA не лежить за межами растра rastB.
  • ST_Disjoint — Повертає true, якщо растр rastA не перетинається в просторі з rastB.
  • ST_Intersects — Повертає true, якщо растр rastA просторово перетинається з растром rastB.
  • ST_Overlaps — Повертає true, якщо растри rastA і rastB перетинаються, але один не повністю містить інший.
  • ST_Touches — Повертає true, якщо растрові зображення rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються.
  • ST_SameAlignment — Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.
  • ST_NotSameAlignmentReason — Повертає текст, що вказує, чи вирівняні растри, а якщо ні, то причину цього.
  • ST_Within — Повертає true, якщо жодна точка растра rastA не лежить зовні растра rastB і принаймні одна точка всередині rastA лежить всередині rastB.
  • ST_DWithin — Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного.
  • ST_DFullyWithin — Повертає значення true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного.

Назва

ST_Contains — Повертає true, якщо жодна точка растра rastB не лежить зовні растра rastA і принаймні одна точка всередині rastB лежить всередині rastA.

Короткий огляд

boolean ST_Contains( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Contains( raster rastA , raster rastB );

Description

Растр rastA містить rastB тоді і тільки тоді, коли жодна точка rastB не лежить зовні rastA і принаймні одна точка всередині rastB лежить всередині rastA. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Contains(ST_Polygon(raster), geometry) або ST_Contains(geometry, ST_Polygon(raster)).

[Примітка]

ST_Contains() є оберненою функцією до ST_Within(). Отже, ST_Contains(rastA, rastB) означає ST_Within(rastB, rastA).

Доступність: 2.1.0

Приклади

Specified band numbers.

Code
SELECT r1.rid, r2.rid, ST_Contains(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1;
Вивід растрових зображень
NOTICE:  The first raster provided has no bands
 rid | rid | st_contains
-----+-----+-------------
   1 |   1 |
   1 |   2 | f

No band numbers specified.

Code
SELECT r1.rid, r2.rid, ST_Contains(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1;
Вивід растрових зображень
rid | rid | st_contains
-----+-----+-------------
   1 |   1 | t
   1 |   2 | f

Див. також

ST_Intersects, ST_Within


Назва

ST_ContainsProperly — Повертає true, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA.

Короткий огляд

boolean ST_ContainsProperly( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_ContainsProperly( raster rastA , raster rastB );

Description

Растр rastA містить rastB, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

Растр rastA не містить сам себе належним чином, але містить сам себе.

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_ContainsProperly(ST_Polygon(raster), geometry) або ST_ContainsProperly(geometry, ST_Polygon(raster)).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_ContainsProperly(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_containsproperly
-----+-----+---------------------
   2 |   1 | f
   2 |   2 | f

Див. також

ST_Intersects, ST_Contains


Назва

ST_Covers — Повертає true, якщо жодна точка растра rastB не лежить за межами растра rastA.

Короткий огляд

boolean ST_Covers( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Covers( raster rastA , raster rastB );

Description

Растр rastA покриває rastB тоді і тільки тоді, коли жодна точка rastB не лежить за межами rastA. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Covers(ST_Polygon(raster), geometry) або ST_Covers(geometry, ST_Polygon(raster)).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_Covers(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_covers
-----+-----+-----------
   2 |   1 | f
   2 |   2 | t

Див. також

ST_Intersects, ST_CoveredBy


Назва

ST_CoveredBy — Повертає true, якщо жодна точка растра rastA не лежить за межами растра rastB.

Короткий огляд

boolean ST_CoveredBy( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_CoveredBy( raster rastA , raster rastB );

Description

Растр rastA покривається rastB тоді і тільки тоді, коли жодна точка rastA не лежить за межами rastB. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_CoveredBy(ST_Polygon(raster), geometry) або ST_CoveredBy(geometry, ST_Polygon(raster)).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_CoveredBy(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_coveredby
-----+-----+--------------
   2 |   1 | f
   2 |   2 | t

Див. також

ST_Intersects, ST_Covers


Назва

ST_Disjoint — Повертає true, якщо растр rastA не перетинається в просторі з rastB.

Короткий огляд

boolean ST_Disjoint( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Disjoint( raster rastA , raster rastB );

Description

Растери rastA і rastB є роз'єднаними, якщо вони не мають спільного простору. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується лише опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються лише ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція НЕ використовує жодних індексів.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Disjoint(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

Rid = 1 has no bands, hence the NOTICE and the NULL value for st_disjoint.

Code
SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
NOTICE:  The second raster provided has no bands
 rid | rid | st_disjoint
-----+-----+-------------
   2 |   1 |
   2 |   2 | f

This time, without specifying band numbers.

Code
SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_disjoint
-----+-----+-------------
   2 |   1 | t
   2 |   2 | f

Див. також

ST_Intersects


Назва

ST_Intersects — Повертає true, якщо растр rastA просторово перетинається з растром rastB.

Короткий огляд

boolean ST_Intersects( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Intersects( raster rastA , raster rastB );

boolean ST_Intersects( raster rast , integer nband , geometry geommin );

boolean ST_Intersects( raster rast , geometry geommin , integer nband=NULL );

boolean ST_Intersects( geometry geommin , raster rast , integer nband=NULL );

Description

Повертає true, якщо растр rastA просторово перетинає растр rastB. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується лише опукла оболонка растра. Якщо номер канал вказано, у тесті враховуються лише ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Покращено: 2.0.0 додано підтримку растрових/растрових перетинів.

[Застереження]

Змінено: 2.1.0 Поведінка варіантів ST_Intersects(raster, geometry) змінена, щоб відповідати поведінці ST_Intersects(geometry, raster).

Приклади

Different bands of same raster.

Code
SELECT ST_Intersects(rast, 2, rast, 3) FROM dummy_rast WHERE rid = 2;
Вивід растрових зображень
t

Див. також

ST_Intersection, ST_Disjoint


Назва

ST_Overlaps — Повертає true, якщо растри rastA і rastB перетинаються, але один не повністю містить інший.

Короткий огляд

boolean ST_Overlaps( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Overlaps( raster rastA , raster rastB );

Description

Повертає true, якщо растр rastA просторово перекриває растр rastB. Це означає, що rastA і rastB перетинаються, але один не містить повністю інший. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Overlaps(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

Comparing different bands of same raster.

Code
SELECT ST_Overlaps(rast, 1, rast, 2) FROM dummy_rast WHERE rid = 2;
Вивід растрових зображень
f

Див. також

ST_Intersects


Назва

ST_Touches — Повертає true, якщо растрові зображення rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються.

Короткий огляд

boolean ST_Touches( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Touches( raster rastA , raster rastB );

Description

Повертає true, якщо растр rastA просторово торкається растра rastB. Це означає, що rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується лише опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються лише ті пікселі, які мають значення (не NODATA).

[Примітка]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Touches(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_Touches(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_touches
-----+-----+------------
   2 |   1 | f
   2 |   2 | f

Див. також

ST_Intersects


Назва

ST_SameAlignment — Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.

Короткий огляд

boolean ST_SameAlignment( raster rastA , raster rastB );

boolean ST_SameAlignment( double precision ulx1 , double precision uly1 , double precision scalex1 , double precision scaley1 , double precision skewx1 , double precision skewy1 , double precision ulx2 , double precision uly2 , double precision scalex2 , double precision scaley2 , double precision skewx2 , double precision skewy2 );

boolean ST_SameAlignment( raster set rastfield );

Description

Неагрегована версія (варіанти 1 і 2): Повертає значення true, якщо два растри (надані безпосередньо або створені з використанням значень upperleft, scale, skew і srid) мають однаковий масштаб, нахил, srid і принаймні один з чотирьох кутів будь-якого пікселя одного растра припадає на будь-який кут сітки іншого растра. Повертає false, якщо вони не мають, і ПОВІДОМЛЕННЯ з детальною інформацією про проблему вирівнювання.

Агрегатна версія (Варіант 3): З набору растрів повертає значення true, якщо всі растри в наборі вирівняні. Функція ST_SameAlignment() є "агрегатною" функцією в термінології PostgreSQL. Це означає, що вона оперує рядками даних так само, як функції SUM() і AVG().

Доступність: 2.0.0

Покращено: 2.1.0 додавання варіанту Aggregate

Приклади: Растри

Code
SELECT ST_SameAlignment(ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
    ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0)
) as sm;
Вивід растрових зображень
t
Code
SELECT ST_SameAlignment(A.rast, b.rast)
FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;
Вивід растрових зображень
NOTICE:  The two rasters provided have different SRIDs
NOTICE:  The two rasters provided have different SRIDs
 t
 f
 f
 f

Назва

ST_NotSameAlignmentReason — Повертає текст, що вказує, чи вирівняні растри, а якщо ні, то причину цього.

Короткий огляд

text ST_NotSameAlignmentReason(raster rastA, raster rastB);

Description

Повертає текст, що вказує, чи растри вирівняні, а якщо ні, то причину цього.

[Примітка]

Якщо існує кілька причин, через які растри не вирівняні, буде повернуто лише одну причину (перший тест, який не пройшов).

Доступність: 2.1.0

Приклади

Code
SELECT
    ST_SameAlignment(ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
        ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0)
    ),
    ST_NotSameAlignmentReason(ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
        ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0)
    )
;
Вивід растрових зображень
st_samealignment |            st_notsamealignmentreason
------------------+-------------------------------------------------
 f                | The rasters have different scales on the X axis
(1 row)

Назва

ST_Within — Повертає true, якщо жодна точка растра rastA не лежить зовні растра rastB і принаймні одна точка всередині rastA лежить всередині rastB.

Короткий огляд

boolean ST_Within( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Within( raster rastA , raster rastB );

Description

Растр rastA знаходиться в межах rastB тоді і тільки тоді, коли жодна точка rastA не лежить за межами rastB і принаймні одна точка внутрішньої області rastA лежить у внутрішній області rastB. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Within(ST_Polygon(raster), geometry) або ST_Within(geometry, ST_Polygon(raster)).

[Примітка]

ST_Within() є оберненою функцією до ST_Contains(). Отже, ST_Within(rastA, rastB) означає ST_Contains(rastB, rastA).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_Within(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_within
-----+-----+-----------
   2 |   1 | f
   2 |   2 | t

Назва

ST_DWithin — Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного.

Короткий огляд

boolean ST_DWithin( raster rastA , integer nbandA , raster rastB , integer nbandB , double precision distance_of_srid );

boolean ST_DWithin( raster rastA , raster rastB , double precision distance_of_srid );

Description

Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

Відстань вказується в одиницях, визначених системою просторових координат растрів. Щоб ця функція мала сенс, вихідні растри повинні мати однакову проекцію координат і однаковий SRID.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_DWithin(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_DWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_dwithin
-----+-----+------------
   2 |   1 | f
   2 |   2 | t

Див. також

ST_Within, ST_DFullyWithin


Назва

ST_DFullyWithin — Повертає значення true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного.

Короткий огляд

boolean ST_DFullyWithin( raster rastA , integer nbandA , raster rastB , integer nbandB , double precision distance_of_srid );

boolean ST_DFullyWithin( raster rastA , raster rastB , double precision distance_of_srid );

Description

Повертає true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

Відстань вказується в одиницях, визначених системою просторових координат растрів. Щоб ця функція мала сенс, вихідні растри повинні мати однакову проекцію координат і однаковий SRID.

[Примітка]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Примітка]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_DFullyWithin(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

Code
SELECT r1.rid, r2.rid, ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
Вивід растрових зображень
rid | rid | st_dfullywithin
-----+-----+-----------------
   2 |   1 | f
   2 |   2 | t

Див. також

ST_Within, ST_DWithin

11.18. Поради щодо растру

Анотація

У цьому розділі описано різні підводні камені та поради, пов'язані з PostGIS Raster.

11.18.1. Растри Out-DB

11.18.1.1. Каталог, що містить багато файлів

Коли GDAL відкриває файл, GDAL ретельно сканує каталог цього файлу, щоб створити каталог інших файлів. Якщо цей каталог містить багато файлів (наприклад, тисячі, мільйони), відкриття цього файлу стає надзвичайно повільним (особливо якщо цей файл знаходиться на мережевому диску, такому як NFS).

Для контролю цієї поведінки GDAL надає наступну змінну середовища: GDAL_DISABLE_READDIR_ON_OPEN. Встановіть GDAL_DISABLE_READDIR_ON_OPEN на TRUE, щоб вимкнути сканування каталогів.

В Ubuntu (і якщо ви використовуєте пакети PostgreSQL для Ubuntu), GDAL_DISABLE_READDIR_ON_OPEN можна встановити в /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment (де POSTGRESQL_VERSION — це версія PostgreSQL, наприклад 9.6, а CLUSTER_NAME — це назва кластера, наприклад maindb). Тут також можна встановити змінні середовища PostGIS.

Code
# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                    

11.18.1.2. Максимальна кількість відкритих файлів

Максимальна кількість відкритих файлів, дозволена Linux і PostgreSQL, зазвичай є консервативною (зазвичай 1024 відкритих файлів на процес), виходячи з припущення, що система використовується людьми. Для растрів Out-DB один дійсний запит може легко перевищити цей ліміт (наприклад, набір даних за 10 років з одним растром для кожного дня, що містить мінімальні та максимальні температури, і ми хочемо знати абсолютне мінімальне та максимальне значення для пікселя в цьому наборі даних).

Найпростішою зміною є наступне налаштування PostgreSQL: max_files_per_process. За замовчуванням встановлено значення 1000, що є занадто низьким для Out-DB Rasters. Безпечним початковим значенням може бути 65536, але це насправді залежить від ваших наборів даних і запитів, що виконуються для цих наборів даних. Це налаштування можна виконати тільки під час запуску сервера і, ймовірно, тільки в файлі конфігурації PostgreSQL (наприклад, /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf в середовищах Ubuntu).

Code
...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

Основна зміна, яку потрібно внести, стосується обмежень відкритих файлів ядра Linux. Вона складається з двох частин:

  • Максимальна кількість відкритих файлів для всієї системи

  • Максимальна кількість відкритих файлів на процес

11.18.1.2.1. Максимальна кількість відкритих файлів для всієї системи

Ви можете перевірити поточну максимальну кількість відкритих файлів для всієї системи за допомогою наступного прикладу:

Code
$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

Якщо повернуте значення недостатньо велике, додайте файл до /etc/sysctl.d/ відповідно до наступного прикладу:

Code
$ echo "fs.file-max = 6145324" >> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                    
11.18.1.2.2. Максимальна кількість відкритих файлів на процес

Нам потрібно збільшити максимальну кількість відкритих файлів на процес для процесів сервера PostgreSQL.

Щоб побачити, яку кількість відкритих файлів використовують поточні процеси служби PostgreSQL, виконайте наступні дії (переконайтеся, що PostgreSQL працює):

Code
$ ps aux | grep postgres
Вивід растрових зображень
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher
Code
$ cat /proc/31718/limits
Вивід растрових зображень
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                    

У наведеному вище прикладі ми перевірили обмеження відкритих файлів для процесу 31718. Не має значення, який саме процес PostgreSQL, будь-який з них підійде. Відповідь, яка нас цікавить, — це Максимальна кількість відкритих файлів.

Ми хочемо збільшити М'яке обмеження та Жорстке обмеження для Максимальної кількості відкритих файлів, щоб вони були більшими за значення, яке ми вказали для налаштування PostgreSQL max_files_per_process. У нашому прикладі ми встановили max_files_per_process на 65536.

В Ubuntu (і припускаючи, що ви використовуєте пакети PostgreSQL для Ubuntu), найпростіший спосіб змінити Soft Limit та Hard Limit — це відредагувати /etc/init.d/postgresql (SysV) або /lib/systemd/system/postgresql*.service (systemd).

Спочатку розглянемо випадок SysV Ubuntu, де ми додаємо ulimit -H -n 262144 та ulimit -n 131072 до /etc/init.d/postgresql.

Code
...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
    if [ -z "`pg_lsclusters -h`" ]; then
        log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
        exit 0
    fi

    ulimit -H -n 262144
    ulimit -n 131072

    for v in $versions; do
        $1 $v || EXIT=$?
    done
    exit ${EXIT:-0}
        ;;
    status)
...

Тепер розглянемо випадок systemd Ubuntu. Ми додамо LimitNOFILE=131072 до кожного файлу /lib/systemd/system/postgresql*.service у розділі [Service].

Code
...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

Після внесення необхідних змін до systemd перезавантажте демон

Code
systemctl daemon-reload

Розділ 12. Додаткові функції PostGIS

У цьому розділі описано функції, що містяться в папці extras архівів вихідного коду PostGIS та репозиторії вихідного коду. Вони не завжди входять до складу бінарних випусків PostGIS, але зазвичай є скриптами на основі PL/pgSQL або стандартними скриптами оболонки, які можна запускати без змін.

Розділ 13. Спеціальні функції PostGIS Вказівник

13.1. Агрегатні функції PostGIS

Нижче наведено просторові агрегатні функції, які використовуються так само, як і агрегатні функції SQL, такі як sum та average.

  • CG_3DUnion - Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_AsFlatGeobuf - Повернути представлення FlatGeobuf набору рядків.
  • ST_AsGeobuf - Повернути представлення Geobuf набору рядків.
  • ST_AsMVT - Агрегатна функція, що повертає MVT-представлення набору рядків.
  • ST_ClusterDBSCAN - Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.
  • ST_ClusterIntersecting - Агрегуюча функція, яка групує вхідні геометрії у зв'язані набори.
  • ST_ClusterIntersectingWin - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, групуючи вхідні геометрії у пов'язані набори.
  • ST_ClusterKMeans - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.
  • ST_ClusterRelateWin - Window function that returns a cluster id for each input geometry, clustering input geometries into connected sets using the relate pattern to determine whether the geometries are connected.
  • ST_ClusterWithin - Агрегатна функція, яка групує геометрії за відстанню розділення.
  • ST_ClusterWithinWin - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.
  • ST_Collect - Створює GeometryCollection або Multi* геометрію з набору геометрій.
  • ST_CoverageClean - Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.
  • ST_CoverageInvalidEdges - Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.
  • ST_CoverageSimplify - Віконна функція, яка спрощує краї полігонального покриття.
  • ST_CoverageUnion - Обчислює об'єднання набору полігонів, що утворюють покриття, видаляючи спільні ребра.
  • ST_Extent - Агрегатна функція, яка повертає обмежувальну рамку геометрій.
  • ST_MakeLine - Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MemUnion - Агрегатна функція, яка об'єднує геометрії в пам'яті ефективним, але повільнішим способом.
  • ST_MinimumSpanningTree - Window function that returns a tree id for each input geometry, clustering input geometries into connected trees using the Minimum Spanning Tree algorithm.
  • ST_Polygonize - Обчислює сукупність полігонів, утворених з ліній набору геометрій.
  • ST_SameAlignment - Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.
  • ST_Union - Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.
  • ST_Union - Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • TopoElementArray_Agg - Повертає topoelementarray для набору масивів element_id, type (topoelements).

13.2. Віконні функції PostGIS

Наведені нижче функції є віконними просторовими функціями, які використовуються так само, як і віконні функції SQL, такі як row_number(), lead() та lag(). За ними має слідувати оператор OVER().

  • ST_ClusterDBSCAN - Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.
  • ST_ClusterIntersectingWin - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, групуючи вхідні геометрії у пов'язані набори.
  • ST_ClusterKMeans - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.
  • ST_ClusterRelateWin - Window function that returns a cluster id for each input geometry, clustering input geometries into connected sets using the relate pattern to determine whether the geometries are connected.
  • ST_ClusterWithinWin - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.
  • ST_CoverageClean - Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.
  • ST_CoverageInvalidEdges - Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.
  • ST_CoverageSimplify - Віконна функція, яка спрощує краї полігонального покриття.
  • ST_MinimumSpanningTree - Window function that returns a tree id for each input geometry, clustering input geometries into connected trees using the Minimum Spanning Tree algorithm.

13.3. Функції, сумісні з PostGIS SQL-MM

Наведені нижче функції є функціями PostGIS, які відповідають стандарту SQL/MM 3

  • CG_3DArea - Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • CG_3DDifference - Виконати 3D-різницю
  • CG_3DIntersection - Виконати 3D перетин
  • CG_3DUnion - Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • CG_Volume - Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • ST_3DDWithin - Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDistance - Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DIntersects - Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLength - Повертає 3D довжину лінійної геометрії.
  • ST_3DPerimeter - Повертає 3D периметр полігональної геометрії.
  • ST_AddEdgeModFace - Додайте нову кромку і, якщо при цьому розділяється грань, змініть вихідну грань і додайте нову.
  • ST_AddEdgeNewFaces - Додайте нову ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими.
  • ST_AddIsoEdge - Додає ізольоване ребро, визначене геометрією alinestring, до топології, що з'єднує два існуючі ізольовані вузли anode та anothernode, і повертає ідентифікатор нового ребра.
  • ST_AddIsoNode - Додає ізольований вузол до грані в топології та повертає ідентифікатор нового вузла. Якщо грань має нульове значення, вузол все одно створюється.
  • ST_Area - Повертає площу полігональної геометрії.
  • ST_AsBinary - Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsGML - Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsText - Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.
  • ST_Boundary - Повертає межі геометрії.
  • ST_Buffer - Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.
  • ST_Centroid - Повертає геометричний центр геометрії.
  • ST_ChangeEdgeGeom - Змінює форму ребра, не впливаючи на топологічну структуру.
  • ST_Contains - Перевіряє, чи кожна точка B лежить в A, і чи мають їхні внутрішні частини спільну точку
  • ST_ConvexHull - Обчислює опуклу оболонку геометрії.
  • ST_CoordDim - Повертає розмірність координат геометрії.
  • ST_CreateTopoGeo - Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність операції.
  • ST_Crosses - Перевіряє, чи дві геометрії мають деякі, але не всі внутрішні точки спільні
  • ST_CurveN - Повертає геометрію N-го компонента кривої CompoundCurve.
  • ST_CurveToLine - Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_Difference - Обчислює геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B.
  • ST_Dimension - Повертає топологічну розмірність геометрії.
  • ST_Disjoint - Перевіряє, чи дві геометрії не мають спільних точок
  • ST_Distance - Повертає відстань між двома геометричними або географічними значеннями.
  • ST_EndPoint - Returns the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_Envelope - Повертає геометрію, що представляє обмежувальну рамку геометрії.
  • ST_Equals - Перевіряє, чи дві геометрії містять однаковий набір точок
  • ST_ExteriorRing - Повертає LineString, що представляє зовнішнє кільце полігону
  • ST_GMLToSQL - Returns a geometry from GML. Alias for ST_GeomFromGML.
  • ST_GeomCollFromText - Створює колекцію Geometry з колекції WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_GeomFromText - Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).
  • ST_GeomFromWKB - Створює екземпляр геометрії з добре відомого двійкового представлення геометрії (WKB) та опціонального SRID.
  • ST_GeometryFromText - Returns a geometry from Well-Known Text (WKT). Alias for ST_GeomFromText.
  • ST_GeometryN - Повернути елемент колекції геометрії.
  • ST_GeometryType - Повертає тип SQL-MM геометрії у вигляді тексту.
  • ST_GetFaceEdges - Повертає набір впорядкованих ребер, що обмежують aface.
  • ST_GetFaceGeometry - Повертає багатокутник у заданій топології із зазначеним ідентифікатором грані.
  • ST_InitTopoGeo - Створює нову схему топології та реєструє її в таблиці topology.topology.
  • ST_InteriorRingN - Повертає N-те внутрішнє кільце (отвір) полігону.
  • ST_Intersection - Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_Intersects - Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_IsClosed - Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).
  • ST_IsEmpty - Перевіряє, чи геометрія порожня.
  • ST_IsRing - Перевіряє, чи лінія LineString є замкнутою та простою.
  • ST_IsSimple - Перевіряє, чи геометрія не має точок самоперетину або самодотику.
  • ST_IsValid - Перевіряє, чи геометрія має правильну форму в 2D.
  • ST_Length - Повертає 2D довжину лінійної геометрії.
  • ST_LineFromText - Створює геометрію з представлення WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_LineFromWKB - Creates a LINESTRING from a WKB representation, optionally using a given SRID.
  • ST_LinestringFromWKB - Creates a LINESTRING from a WKB representation, optionally using a given SRID.
  • ST_LocateAlong - Повертає точку (точки) на геометрії, яка відповідає значенню міри.
  • ST_LocateBetween - Повертає частини геометрії, які відповідають діапазону вимірювання.
  • ST_M - Повертає координату M точки.
  • ST_MLineFromText - Повернути вказане значення ST_MultiLineString з представлення WKT.
  • ST_MPointFromText - Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.
  • ST_MPolyFromText - Створює геометрію MultiPolygon з WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_ModEdgeHeal - Виправляє двa ребра, видаляючи вузол, що їх з'єднує, змінюючи перше ребро та видаляючи друге ребро. Повертає ідентифікатор видаленого вузла.
  • ST_ModEdgeSplit - Розділіть ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове.
  • ST_MoveIsoNode - Переміщує ізольований вузол у топології з однієї точки в іншу. Якщо нова геометрія apoint існує як вузол, виникає помилка. Повертає опис переміщення.
  • ST_NewEdgeHeal - Відновлює два ребра, видаляючи вузол, що їх з'єднує, видаляючи обидва ребра та замінюючи їх ребром, напрямок якого збігається з напрямком першого наданого ребра.
  • ST_NewEdgesSplit - Розділіть ребро, створивши новий вузол уздовж існуючого ребра, видаливши оригінальне ребро і замінивши його двома новими ребрами. Повертає ідентифікатор нового вузла, створеного для з'єднання нових ребер.
  • ST_NumCurves - Повернути кількість кривих компонентів у CompoundCurve.
  • ST_NumGeometries - Повертає кількість елементів у колекції геометрії.
  • ST_NumInteriorRings - Повертає кількість внутрішніх кілець (отворів) полігону.
  • ST_NumPatches - Returns the number of faces in a PolyhedralSurface or TIN.
  • ST_NumPoints - Повертає кількість точок у LineString або CircularString.
  • ST_OrderingEquals - Перевіряє, чи дві геометрії представляють одну і ту ж геометрію і мають точки в одному і тому ж порядку напрямків
  • ST_Overlaps - Перевіряє, чи дві геометрії мають однакові розміри і перетинаються, але кожна з них має принаймні одну точку, яка не належить до іншої
  • ST_PatchN - Returns the Nth face of a PolyhedralSurface or TIN.
  • ST_Perimeter - Повертає довжину межі полігональної геометрії або географії.
  • ST_Point - Створює точку із значеннями X, Y та SRID.
  • ST_PointFromText - Створює точку Геометрія з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується невідомий.
  • ST_PointFromWKB - Створює геометрію з WKB із заданим SRID
  • ST_PointN - Повертає N-ту точку в першому LineString або круговому LineString в геометрії.
  • ST_PointOnSurface - Обчислює точку, яка гарантовано лежить у полігоні або на геометрії.
  • ST_Polygon - Створює полігон з LineString із заданим SRID.
  • ST_PolygonFromText - Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.
  • ST_Relate - Перевіряє, чи дві геометрії мають топологічний зв'язок, що відповідає шаблону матриці перетину, або обчислює їх матрицю перетину
  • ST_RemEdgeModFace - Видаляє ребро, і якщо ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох.
  • ST_RemEdgeNewFace - Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.
  • ST_RemoveIsoEdge - Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.
  • ST_RemoveIsoNode - Видаляє ізольований вузол і повертає опис дії. Якщо вузол не ізольований (є початком або кінцем ребра), то генерується виняток.
  • ST_SRID - Повертає ідентифікатор просторової прив'язки для геометрії.
  • ST_StartPoint - Returns the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_SymDifference - Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.
  • ST_Touches - Перевіряє, чи мають дві геометрії хоча б одну спільну точку, але їхні внутрішні частини не перетинаються
  • ST_Transform - Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ST_Union - Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.
  • ST_WKBToSQL - Returns a geometry from Well-Known Binary (WKB). SQL/MM alias for ST_GeomFromWKB without an SRID argument.
  • ST_WKTToSQL - Returns a geometry from Well-Known Text (WKT). SQL/MM alias for ST_GeomFromText.
  • ST_Within - Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку
  • ST_X - Повертає координату X точки.
  • ST_Y - Повертає координату Y точки.
  • ST_Z - Повертає координату Z точки.

13.4. Функції підтримки географії PostGIS

Наведені нижче функції та оператори є функціями/операторами PostGIS, які приймають як вхідні дані або повертають як вихідні дані об'єкт типу даних geography.

[Примітка]

Функції з (T) не є вбудованими геодезичними функціями і використовують виклик ST_Transform до та з геометрії для виконання операції. Як результат, вони можуть поводитися не так, як очікується, при перетині лінії зміни дати, полюсів, а також для великих геометрій або пар геометрій, що охоплюють більше однієї зони UTM. Базове перетворення - (віддаючи перевагу UTM, азимутальному проектуванню Ламберта (північ/південь) і, в гіршому випадку, проектуванню Меркатора)

  • ST_Area - Повертає площу полігональної геометрії.
  • ST_AsBinary - Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsEWKT - Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsGML - Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsGeoJSON - Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsKML - Повернути геометрію як елемент KML.
  • ST_AsSVG - Повертає дані SVG-шляху для геометрії.
  • ST_AsText - Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.
  • ST_Azimuth - Повертає азимут на північ від лінії між двома точками.
  • ST_Buffer - Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.
  • ST_Centroid - Повертає геометричний центр геометрії.
  • ST_ClosestPoint - Повертає 2D точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії від однієї геометрії до іншої.
  • ST_CoveredBy - Перевіряє, чи кожна точка A лежить в B
  • ST_Covers - Перевіряє, чи кожна точка B лежить в A
  • ST_DWithin - Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної
  • ST_Distance - Повертає відстань між двома геометричними або географічними значеннями.
  • ST_GeogFromText - Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).
  • ST_GeogFromWKB - Створює географічний екземпляр на основі добре відомого двійкового геометричного представлення (WKB) або розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeographyFromText - Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).
  • = - Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.
  • ST_Intersection - Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_Intersects - Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_Length - Повертає 2D довжину лінійної геометрії.
  • ST_LineInterpolatePoint - Повертає точку, інтерпольовану вздовж лінії в дробовому місці.
  • ST_LineInterpolatePoints - Повертає точки, інтерпольовані вздовж лінії з дробовим інтервалом.
  • ST_LineLocatePoint - Повертає дробове значення відстані найближчої точки на лінії до заданої точки.
  • ST_LineSubstring - Повертає частину лінії між двома дробовими позиціями.
  • ST_Perimeter - Повертає довжину межі полігональної геометрії або географії.
  • ST_Project - Повертає точку, спроектовану від початкової точки на відстань і азимут.
  • ST_Segmentize - Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.
  • ST_ShortestLine - Повертає найкоротшу 2D лінію між двома геометріями
  • ST_Summary - Повертає текстовий підсумок вмісту геометрії.
  • <-> - Повертає 2D відстань між A і B.
  • && - Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.

13.5. Функції підтримки растрових даних PostGIS

Наведені нижче функції та оператори є функціями/операторами PostGIS, які приймають як вхідні дані або повертають як вихідні дані об'єкт типу даних raster. Перелічені в алфавітному порядку.

  • Box3D - Повертає 3D-представлення обмежувальної рамки растра.
  • @ - Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B. Використовує обмежувальну рамку подвійної точності.
  • ~ - Повертає TRUE, якщо обмежувальна рамка A містить B. Використовує обмежувальну рамку подвійної точності.
  • = - Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B. Використовує обмежувальну рамку подвійної точності.
  • && - Повертає TRUE, якщо обмежувальна рамка A перетинається з обмежувальною рамкою B.
  • &< - Повертає TRUE, якщо обмежувальна рамка A знаходиться ліворуч від B.
  • &> - Повертає TRUE, якщо обмежувальна рамка A знаходиться праворуч від обмежувальної рамки B.
  • ~= - Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.
  • ST_Retile - Повернути набір налаштованих плиток з довільно розбитого на плитки растрового покриття.
  • ST_AddBand - Повертає растр з новим каналом (каналами) заданого типу, доданим із заданим початковим значенням у заданому місці індексу. Якщо індекс не вказано, діапазон додається в кінець.
  • ST_AsBinary/ST_AsWKB - Повернути представлення растру у вигляді добре відомого бінарного коду (WKB).
  • ST_AsGDALRaster - Повертає растрову плитку у визначеному форматі GDAL Raster. Растрові формати є одними з тих, що підтримуються вашою скомпільованою бібліотекою. Використовуйте ST_GDALDrivers(), щоб отримати список форматів, що підтримуються вашою бібліотекою.
  • ST_AsHexWKB - Повернути добре відомий бінарний файл (WKB) у шістнадцятковому представленні растру.
  • ST_AsJPEG - Повертає вибрані канали растрової плитки як одне зображення у форматі Joint Photographic Exports Group (JPEG) (масив байтів). Якщо канал не вказаний і є 1 або більше 3 каналів, то використовується тільки перший канал. Якщо є тільки 3 канали, то використовуються всі 3 канали і відображаються у форматі RGB.
  • ST_AsPNG - уПовертає вибрані канали растрової плитки як одне зображення у форматі PNG (масив байтів). Якщо в растрі вказано 1, 3 або 4 канали і не вказано жодного каналу, то використовуються всі канали. Якщо вказано більше 2 або більше 4 каналів і не вказано жодного каналу, то використовується тільки канал 1. Канали відображаються в просторі RGB або RGBA.
  • ST_AsRaster - Перетворює геометрію PostGIS у растр PostGIS.
  • ST_AsRasterAgg - Агрегація. Перетворює геометрії PostGIS у новий растр.
  • ST_AsTIFF - Повертає вибрані канали растра як одне зображення TIFF (масив байтів). Якщо канал не вказана або будь-яка із вказаних смуг не існує в растрі, то буде зроблена спроба використати всі канали.
  • ST_Aspect - Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.
  • ST_Band - Повертає один або декілька каналів існуючого растру як новий растр. Корисно для створення нових растрів на основі існуючих.
  • ST_BandFileSize - Повертає розмір файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, вважається, що він дорівнює 1.
  • ST_BandFileTimestamp - Повертає мітку часу файлу смуги, що зберігається у файловій системі. Якщо номер смуги не вказано, вважається, що він дорівнює 1.
  • ST_BandIsNoData - Повертає значення true, якщо канал заповнений тільки значеннями nodata.
  • ST_BandMetaData - Повертає основні метадані для конкретного растрового каналу. Якщо не вказано, припускається канал № 1.
  • ST_BandNoDataValue - Повертає значення в заданому каналі, яке не представляє даних. Якщо карал № 1 не задано.
  • ST_BandPath - Повертає шлях до системного файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, приймається значення 1.
  • ST_BandPixelType - Повертає тип пікселя для заданого діапазону. Якщо діапазон не вказано, приймається значення 1.
  • ST_Clip - Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.
  • ST_ColorMap - Створює новий растр з максимум чотирма смугами 8BUI (відтінки сірого, RGB, RGBA) на основі вихідного растра та вказаної смуги. Якщо смуга не вказана, за замовчуванням використовується смуга 1.
  • ST_Contains - Повертає true, якщо жодна точка растра rastB не лежить зовні растра rastA і принаймні одна точка всередині rastB лежить всередині rastA.
  • ST_ContainsProperly - Повертає true, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA.
  • ST_Contour - Генерує набір векторних контурів із наданого растрового каналу, використовуючи алгоритм контурного відображення GDAL.
  • ST_ConvexHull - Повертає геометрію опуклої оболонки растра, включаючи значення пікселів, рівні BandNoDataValue. Для растрів правильної форми та без нахилу це дає той самий результат, що й ST_Envelope, тому корисно лише для растрів неправильної форми або з нахилом.
  • ST_Count - Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню nodata.
  • ST_CountAgg - Агрегат. Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню NODATA.
  • ST_CoveredBy - Повертає true, якщо жодна точка растра rastA не лежить за межами растра rastB.
  • ST_Covers - Повертає true, якщо жодна точка растра rastB не лежить за межами растра rastA.
  • ST_DFullyWithin - Повертає значення true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного.
  • ST_DWithin - Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного.
  • ST_Disjoint - Повертає true, якщо растр rastA не перетинається в просторі з rastB.
  • ST_DumpAsPolygons - Повертає набір рядків geomval (geom,val) із заданого растрового каналу. Якщо номер каналу не вказано, за замовчуванням використовується канал 1.
  • ST_DumpValues - Отримати значення вказаного каналу у вигляді двовимірного масиву.
  • ST_Envelope - Повертає полігон, що відображає межі растру.
  • ST_FromGDALRaster - Повертає растр із підтримуваного файлу растра GDAL.
  • ST_GeoReference - Повертає метадані геореференції у форматі GDAL або ESRI, як це зазвичай зустрічається у світовому файлі. За замовчуванням використовується GDAL.
  • ST_Grayscale - Створює новий растр з одним каналом 8BUI на основі вихідного растра та вказаних каналів, що представляють червоний, зелений та синій кольори
  • ST_HasNoBand - Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.
  • ST_Height - Повертає висоту растра в пікселях.
  • ST_HillShade - Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.
  • ST_Histogram - Повертає набір записів, що підсумовують розподіл даних растрового або растрового покриття за окремими діапазонами бінів. Кількість бінів обчислюється автоматично, якщо не вказано інше.
  • ST_InterpolateRaster - Інтерполює поверхню сітки на основі вхідного набору 3-D точок, використовуючи значення X і Y для позиціонування точок на сітці, а значення Z точок — як висоту поверхні.
  • ST_Intersection - Повертає растр або набір пар геометрія-піксельне значення, що представляють спільну частину двох растрів або геометричне перетин векторизації растра і геометрії.
  • ST_IntersectionFractions - Обчислює частку кожної растрової комірки, яка покрита заданою геометрією.
  • ST_Intersects - Повертає true, якщо растр rastA просторово перетинається з растром rastB.
  • ST_IsEmpty - Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.
  • ST_MakeEmptyCoverage - Покрийте геореференційну область сіткою порожніх растрових плиток.
  • ST_MakeEmptyRaster - Повертає порожній растр (без каналів) заданих розмірів (ширина і висота), верхнього лівого кута X і Y, розміру пікселя і повороту (scalex, scaley, skewx і skewy) та системи координат (srid). Якщо передано растр, повертає новий растр з тим самим розміром, вирівнюванням та SRID. Якщо srid не вказано, просторова система координат встановлюється на невідому (0).
  • ST_MapAlgebra (callback function version) - Версія функції зворотного виклику - Повертає односмуговий растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.
  • ST_MapAlgebraExpr - Версія з 1 растровим каналом: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до вхідного растрового каналу та наданого типу пікселів. Якщо діапазон не вказано, передбачається діапазон 1.
  • ST_MapAlgebraExpr - 2-канальна версія растра: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох вхідних растрових каналів та наданого типу пікселів. Якщо номери каналів не вказані, то за замовчуванням використовується канал 1 кожного растру. Результуючий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром, а його розмір буде визначений параметром "extenttype". Значення для "extenttype" можуть бути: INTERSECTION, UNION, FIRST, SECOND.
  • ST_MapAlgebraFct - Версія з 1 каналом - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до вхідного каналу растра та наданого типу пікселів. Якщо канал не вказаний, передбачається канал 1.
  • ST_MapAlgebraFct - 2-канальна версія - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до 2 вхідних каналів растра та наданого типу пікселів. Якщо канал не вказано, то за замовчуванням використовується канал 1. Тип розширення за замовчуванням - INTERSECTION, якщо не вказано інше.
  • ST_MapAlgebraFctNgb - 1-канальна версія: Map Algebra Nearest Neighbor з використанням визначеної користувачем функції PostgreSQL. Повертає растр, значення якого є результатом функції користувача PLPGSQL, що включає сусідство значень із вхідної каналу растра.
  • ST_MapAlgebra (expression version) - Версія виразу — повертає одноканальний растр, заданий одним або двома вхідними растрами, індексами каналів і одним або декількома визначеними користувачем виразами SQL.
  • ST_MemSize - Повертає обсяг простору (у байтах), який займає растр.
  • ST_MetaData - Повертає основні метадані про растровий об'єкт, такі як розмір пікселя, поворот (перекос), верхній, нижній лівий кут тощо.
  • ST_MinConvexHull - Повернути геометрію опуклої оболонки растра, виключаючи пікселі NODATA.
  • ST_NearestValue - Повертає найближче значення, яке не є NODATA, пікселя заданого діапазону, визначеного стовпцем x і рядком y, або геометричної точки, вираженої в тій самій системі координат просторової прив'язки, що й растр.
  • ST_Neighborhood - Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр.
  • ST_NotSameAlignmentReason - Повертає текст, що вказує, чи вирівняні растри, а якщо ні, то причину цього.
  • ST_NumBands - Повертає кількість каналів у растровому об'єкті.
  • ST_Overlaps - Повертає true, якщо растри rastA і rastB перетинаються, але один не повністю містить інший.
  • ST_PixelAsCentroid - Повертає центроїд (точкову геометрію) області, представленої пікселем.
  • ST_PixelAsCentroids - Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.
  • ST_PixelAsPoint - Повертає геометрію точки верхнього лівого кута пікселя.
  • ST_PixelAsPoints - Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.
  • ST_PixelAsPolygon - Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.
  • ST_PixelAsPolygons - Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.
  • ST_PixelHeight - Повертає висоту пікселя в геометричних одиницях просторової системи координат.
  • ST_PixelOfValue - Отримати координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку.
  • ST_PixelWidth - Повертає ширину пікселя в геометричних одиницях просторової системи координат.
  • ST_Polygon - Повертає багатокутну геометрію, утворену об'єднанням пікселів, значення яких не дорівнює нулю. Якщо номер каналу не вказано, за замовчуванням використовується 1.
  • ST_Quantile - Обчислюйте квантилі для покриття растрового зображення або растрової таблиці в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растрового зображення.
  • ST_RastFromHexWKB - Повернути растрове значення з шестнадцяткового представлення растру Well-Known Binary (WKB).
  • ST_RastFromWKB - Повернути растрове значення з растрового файлу Well-Known Binary (WKB).
  • ST_RasterToWorldCoord - Повертає верхній лівий кут растра у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Стовпець та рядок починаються з 1.
  • ST_RasterToWorldCoordX - Повертає геометричну координату X у верхньому лівому куті растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.
  • ST_RasterToWorldCoordY - Повертає геометричну координату Y верхнього лівого кута растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.
  • ST_Reclass - Створює новий растр, складений з типів каналів, перекласифікованих з оригінальних. nband — це канал, який буде змінена. Якщо nband не вказано, вважається, що він дорівнює 1. Всі інші канали повертаються без змін. Приклад використання: перетворення каналу 16BUI на 8BUI і так далі для спрощення візуалізації у вигляді форматів, придатних для перегляду.
  • ST_ReclassExact - Створює новий растр, що складається з каналів, перекласифікованих з оригінальних, використовуючи співвідношення 1:1 між значеннями в оригінальному каналі та новими значеннями в каналі призначення.
  • ST_Resample - Передискретизуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри, довільний кут сітки та набір атрибутів геореференціювання растра, визначених або запозичених з іншого растра.
  • ST_Rescale - Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.
  • ST_Resize - Змінити розмір растру до нової ширини/висоти
  • ST_Reskew - Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Rotation - Повертає величину повороту растра в радіанах.
  • ST_Roughness - Повертає растр з обчисленою "шорсткістю" цифрової моделі рельєфу (DEM).
  • ST_SRID - Повертає ідентифікатор просторової системи координат растра, як визначено в таблиці spatial_ref_sys.
  • ST_SameAlignment - Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.
  • ST_ScaleX - Повертає X-компоненту ширини пікселя в одиницях системи координат.
  • ST_ScaleY - Повертає компонент Y висоти пікселя в одиницях системи координат.
  • ST_SetBandIndex - Оновити номер зовнішнього каналу out-db
  • ST_SetBandIsNoData - Встановлює прапор isnodata каналу на TRUE.
  • ST_SetBandNoDataValue - Встановлює значення для заданого каналу, яке не представляє даних. Якщо канал не вказано, вважається, що це канао 1. Щоб позначити канал як такий, що не має значення nodata, встановіть значення nodata = NULL.
  • ST_SetBandPath - Оновлює шля та номер зовнішнього каналу out-db
  • ST_SetGeoReference - Встановити геореференцію 6 параметрів геореференції в одному виклику. Числа слід розділяти пробілами. Приймає вхідні дані у форматі GDAL або ESRI. За замовчуванням використовується GDAL.
  • ST_SetM - Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растра, скопійованими в розмірність M за допомогою заданого алгоритму ресемплювання.
  • ST_SetRotation - Встановіть поворот растра в радіанах.
  • ST_SetSRID - Встановлює SRID растра на певне ціле число srid, визначене в таблиці spatial_ref_sys.
  • ST_SetScale - Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина пікселя/висота.
  • ST_SetSkew - Встановлює геореференцію X і Y (або параметр обертання). Якщо передається тільки один параметр, X і Y встановлюються на одне і те ж значення.
  • ST_SetUpperLeft - Встановлює значення верхнього лівого кута пікселя растру на проектовані координати X і Y.
  • ST_SetValue - Повертає модифікований растр, отриманий в результаті встановлення значення заданого каналу в заданому стовпці x, рядку y пікселя або пікселів, що перетинають певну геометрію. Номери каналів починаються з 1 і, якщо не вказано інше, приймаються за 1.
  • ST_SetValues - Повертає змінений растр, отриманий в результаті встановлення значень заданого каналу.
  • ST_SetZ - Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.
  • ST_SkewX - Повертає геоприв'язку X skew (або параметр обертання).
  • ST_SkewY - Повертає геоприв'язку Y skew (або параметр обертання).
  • ST_Slope - Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.
  • ST_SnapToGrid - Виконує ресемплінг растра, прив'язавши його до сітки. Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Summary - Повертає текстовий підсумок вмісту растру.
  • ST_SummaryStats - Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, то вважається, що це канал 1.
  • ST_SummaryStatsAgg - Агрегат. Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу набору растрів. Якщо діапазон не вказано, передбачається канал 1.
  • ST_TPI - Повертає растр з обчисленим індексом топографічного положення.
  • ST_TRI - Повертає растр з обчисленим індексом нерівності рельєфу.
  • ST_Tile - Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.
  • ST_Touches - Повертає true, якщо растрові зображення rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються.
  • ST_Transform - Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм передискретизації. Доступні опції: NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Union - Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • ST_UpperLeftX - Повертає верхню ліву координату X растру в проекційній просторовій системі координат.
  • ST_UpperLeftY - Повертає верхню ліву координату Y растру в проекційній просторовій системі координат.
  • ST_Value - Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.
  • ST_ValueCount - Повертає набір записів, що містять значення піксельної смуги та кількість пікселів у заданому каналі растра (або растрового покриття), які мають заданий набір значень. Якщо канал не вказана, за замовчуванням використовується смуга 1. За замовчуванням пікселі з значенням nodata не враховуються. Виводяться всі інші значення пікселя, а значення пікселя каналу округлюються до найближчого цілого числа.
  • ST_Width - Повертає ширину растру в пікселях.
  • ST_Within - Повертає true, якщо жодна точка растра rastA не лежить зовні растра rastB і принаймні одна точка всередині rastA лежить всередині rastB.
  • ST_WorldToRasterCoord - Повертає верхній лівий кут як стовпець і рядок, задані геометричними координатами X і Y (довгота і широта) або геометрією точки, вираженою в системі координат просторової прив'язки растру.
  • ST_WorldToRasterCoordX - Повертає стовпець у растрі геометрії точки (pt) або світові координати X та Y (xw, yw), представлені у світовій просторовій системі відліку растру.
  • ST_WorldToRasterCoordY - Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw), представлені у світовій просторовій системі координат растра.
  • UpdateRasterSRID - Змінити SRID всіх растрів у вказаній користувачем колонці та таблиці.

13.6. Функції PostGIS для геометрії / географії / растрового дампа

Наведені нижче функції є функціями PostGIS, які приймають як вхідні дані або повертають як вихідні дані набір або окремий об'єкт типу даних geometry_dump або geomval.

  • ST_DumpAsPolygons - Повертає набір рядків geomval (geom,val) із заданого растрового каналу. Якщо номер каналу не вказано, за замовчуванням використовується канал 1.
  • ST_Intersection - Повертає растр або набір пар геометрія-піксельне значення, що представляють спільну частину двох растрів або геометричне перетин векторизації растра і геометрії.
  • ST_Dump - Повертає набір рядків geometry_dump для компонентів геометрії.
  • ST_DumpPoints - Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_DumpRings - Повертає набір рядків geometry_dump для зовнішнього та внутрішнього кілець полігону.
  • ST_DumpSegments - Повертає набір рядків geometry_dump для сегментів у геометрії.

13.7. Функції PostGIS Box

Наведені нижче функції є функціями PostGIS, які приймають як вхідні дані або повертають як вихідні дані сімейство просторових типів PostGIS box*. Сімейство типів box складається з box2d та box3d

  • Box2D - Повертає BOX2D, що представляє 2D розмір геометрії.
  • Box3D - Повертає BOX3D, що представляє 3D-розмір геометрії.
  • MakeTopologyPrecise - Прив'язати вершини топології до сітки з високою точністю.
  • Box3D - Повертає 3D-представлення обмежувальної рамки растра.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DMakeBox - Створює BOX3D, визначений двома геометріями 3D-точок.
  • ST_AsMVTGeom - Перетворює геометрію в координатну систему плитки MVT.
  • ST_AsTWKB - Повертає геометрію у вигляді TWKB, також відомого як "Tiny Well-Known Binary" (маленький добре відомий двійковий файл)
  • ST_Box2dFromGeoHash - Повернути BOX2D із рядка GeoHash.
  • ST_ClipByBox2D - Обчислює частину геометрії, що потрапляє в прямокутник.
  • ST_EstimatedExtent - Повертає приблизний діапазон просторової таблиці.
  • ST_Expand - Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.
  • ST_Extent - Агрегатна функція, яка повертає обмежувальну рамку геометрій.
  • ST_MakeBox2D - Створює BOX2D, визначений двома 2D точковими геометріями.
  • ST_RemoveIrrelevantPointsForView - Видаляє точки, які не мають значення для візуалізації певного прямокутного виду геометрії.
  • ST_XMax - Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.
  • ST_XMin - Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.
  • ST_XSize - Returns the X size of a 2D or 3D bounding box or a geometry.
  • ST_YMax - Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.
  • ST_YMin - Повертає мінімальне значення Y для 2D або 3D обмежувальної рамки або геометрії.
  • ST_YSize - Returns the Y size of a 2D or 3D bounding box or a geometry.
  • ST_ZMax - Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZMin - Повертає мінімальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZSize - Returns the Z size of a 2D or 3D bounding box or a geometry.
  • RemoveUnusedPrimitives - Видаляє примітивні елементи топології, які не потрібні для визначення існуючих об'єктів TopoGeometry.
  • ValidateTopology - Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.
  • ValidateTopologyPrecision - Повертає неточні вершини в топології.
  • ~(box2df,box2df) - Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).
  • ~(box2df,geometry) - Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.
  • ~(geometry,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).
  • @(box2df,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.
  • @(box2df,geometry) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.
  • @(geometry,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).
  • &&(box2df,box2df) - Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.
  • &&(box2df,geometry) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.
  • &&(geometry,box2df) - Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).

13.8. Функції PostGIS, що підтримують 3D

Наведені нижче функції є функціями PostGIS, які не відкидають Z-індекс.

  • AddGeometryColumn - Додає стовпець геометрії до існуючої таблиці.
  • Box3D - Повертає BOX3D, що представляє 3D-розмір геометрії.
  • CG_3DAlphaWrapping - Обчислює 3D-обгортку альфа, яка суворо охоплює геометрію.
  • CG_3DArea - Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • CG_3DConvexHull - Обчислює 3D опуклу оболонку геометрії.
  • CG_3DDifference - Виконати 3D-різницю
  • CG_3DIntersection - Виконати 3D перетин
  • CG_3DRotate - Обертає геометрію в 3D-просторі навколо вектора осі.
  • CG_3DScale - Масштабує геометрію за окремими коефіцієнтами вздовж осей X, Y та Z.
  • CG_3DScaleAroundCenter - Масштабує геометрію в 3D-просторі навколо вказаної центральної точки.
  • CG_3DTranslate - Перекладає (переміщує) геометрію на задані відступи в 3D-просторі.
  • CG_3DUnion - Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • CG_ConstrainedDelaunayTriangles - Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • CG_Extrude - Видавити поверхню до відповідного об'єму
  • CG_ForceLHR - Примусова орієнтація LHR
  • CG_IsPlanar - Перевірте, чи є поверхня плоскою
  • CG_IsSolid - Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • CG_MakeSolid - Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • CG_NurbsCurveApproximate - Creates an approximating NURBS curve fitting data points within a tolerance
  • CG_NurbsCurveDerivative - Computes the derivative (tangent, curvature) of a NURBS curve at a given parameter
  • CG_NurbsCurveInterpolate - Creates an interpolating NURBS curve passing through all given data points
  • CG_Orientation - Визначте орієнтацію поверхні
  • CG_RotateX - Повертає геометрію навколо осі X на заданий кут.
  • CG_RotateY - Повертає геометрію навколо осі Y на заданий кут.
  • CG_RotateZ - Повертає геометрію навколо осі Z на заданий кут.
  • CG_Simplify - Зменшує складність геометрії, зберігаючи при цьому основні характеристики та значення Z/M.
  • CG_StraightSkeleton - Обчислити прямий скелет з геомeтрії
  • CG_Tesselate - Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • CG_Visibility - Обчислити полігон видимості з точки або сегмента в геометрії полігона
  • CG_Volume - Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • DropGeometryColumn - Видаляє стовпець геометрії з просторової таблиці.
  • GeometryType - Повертає тип геометрії у вигляді тексту.
  • ST_3DClosestPoint - Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_3DDFullyWithin - Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_3DDWithin - Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDistance - Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DInterpolatePoint - Returns the interpolated measure of a geometry closest to a point in 3D.
  • ST_3DIntersects - Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLength - Повертає 3D довжину лінійної геометрії.
  • ST_3DLineInterpolatePoint - Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці.
  • ST_3DLongestLine - Повертає найдовшу 3D лінію між двома геометріями
  • ST_3DMaxDistance - Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DPerimeter - Повертає 3D периметр полігональної геометрії.
  • ST_3DShortestLine - Повертає найкоротшу 3D лінію між двома геометріями
  • ST_AddMeasure - Інтерполює виміри вздовж лінійної геометрії.
  • ST_AddPoint - Додати точку до LineString.
  • ST_Affine - Застосувати афінне перетворення 3D до геометрії.
  • ST_AsBinary - Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsEWKB - Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.
  • ST_AsEWKT - Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsGML - Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsGeoJSON - Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsHEXEWKB - Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR).
  • ST_AsKML - Повернути геометрію як елемент KML.
  • ST_AsX3D - Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_Boundary - Повертає межі геометрії.
  • ST_BoundingDiagonal - Повертає діагональ обмежувального прямокутника геометрії.
  • ST_CPAWithin - Перевіряє, чи найближча точка зближення двох траєкторій знаходиться в межах заданої відстані.
  • ST_CatmullRomSmoothing - Returns a smoothed version of a geometry, using the Catmull-Rom spline algorithm
  • ST_ChaikinSmoothing - Повертає згладжену версію геометрії, використовуючи алгоритм Чайкіна.
  • ST_ClosestPointOfApproach - Повертає міру в найближчій точці зближення двох траєкторій.
  • ST_Collect - Створює GeometryCollection або Multi* геометрію з набору геометрій.
  • ST_ConvexHull - Обчислює опуклу оболонку геометрії.
  • ST_CoordDim - Повертає розмірність координат геометрії.
  • ST_CurveN - Повертає геометрію N-го компонента кривої CompoundCurve.
  • ST_CurveToLine - Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_DelaunayTriangles - Повертає триангуляцію Делауея вершин геометрії.
  • ST_Difference - Обчислює геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B.
  • ST_DistanceCPA - Повертає відстань між найближчою точкою зближення двох траєкторій.
  • ST_Dump - Повертає набір рядків geometry_dump для компонентів геометрії.
  • ST_DumpPoints - Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_DumpRings - Повертає набір рядків geometry_dump для зовнішнього та внутрішнього кілець полігону.
  • ST_DumpSegments - Повертає набір рядків geometry_dump для сегментів у геометрії.
  • ST_EndPoint - Returns the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_ExteriorRing - Повертає LineString, що представляє зовнішнє кільце полігону
  • ST_FlipCoordinates - Повертає версію геометрії з перевернутими осями X та Y.
  • ST_Force2D - Примусово переведіть геометрії в "2-вимірний режим".
  • ST_ForceCurve - Перетворити геометрію в її вигнутий тип, якщо це можливо.
  • ST_ForcePolygonCCW - Всі зовнішні кільця орієнтуйте проти годинникової стрілки, а всі внутрішні кільця — за годинниковою стрілкою.
  • ST_ForcePolygonCW - Всі зовнішні кільця орієнтуйте за годинниковою стрілкою, а всі внутрішні кільця — проти годинникової стрілки.
  • ST_ForceRHR - Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.
  • ST_ForceSFS - Force geometries to use SFS 1.1 or 1.2 geometry types.
  • ST_Force3D - Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DZ - Примусово перевести геометрії в режим XYZ.
  • ST_Force4D - Примусово перевести геометрії в режим XYZM.
  • ST_ForceCollection - Перетворити геометрію в GEOMETRYCOLLECTION.
  • ST_GeomFromEWKB - Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromEWKT - Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).
  • ST_GeomFromGML - Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeomFromGeoJSON - Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS
  • ST_GeomFromKML - Приймає в якості вхідних даних KML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeometricMedian - Повертає геометричну медіану MultiPoint.
  • ST_GeometryN - Повернути елемент колекції геометрії.
  • ST_GeometryType - Повертає тип SQL-MM геометрії у вигляді тексту.
  • ST_HasArc - Тестує, чи містить геометрія кругову дугу
  • ST_HasM - Перевіряє, чи має геометрія розмір M (вимір).
  • ST_HasZ - Перевіряє, чи має геометрія розмір Z.
  • ST_InteriorRingN - Повертає N-те внутрішнє кільце (отвір) полігону.
  • ST_InterpolatePoint - Повертає інтерпольоване значення геометрії, найближчої до точки.
  • ST_Intersection - Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_IsClosed - Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).
  • ST_IsCollection - Перевіряє, чи є геометрія типом колекції геометрії.
  • ST_IsPolygonCCW - Перевіряє, чи мають полігони зовнішні кільця, орієнтовані проти годинникової стрілки, і внутрішні кільця, орієнтовані за годинниковою стрілкою.
  • ST_IsPolygonCW - Перевіряє, чи полігони мають зовнішні кільця, орієнтовані за годинниковою стрілкою, а внутрішні кільця — проти годинникової стрілки.
  • ST_IsSimple - Перевіряє, чи геометрія не має точок самоперетину або самодотику.
  • ST_IsValidTrajectory - Перевіряє, чи є геометрія дійсною траєкторією.
  • ST_LengthSpheroid - Повертає 2D або 3D довжину/периметр геометрії lon/lat на сфероїді.
  • ST_LineFromMultiPoint - Створює LineString з геометрії MultiPoint.
  • ST_LineInterpolatePoint - Повертає точку, інтерпольовану вздовж лінії в дробовому місці.
  • ST_LineInterpolatePoints - Повертає точки, інтерпольовані вздовж лінії з дробовим інтервалом.
  • ST_LineSubstring - Повертає частину лінії між двома дробовими позиціями.
  • ST_LineToCurve - Перетворює лінійну геометрію на криву геометрію.
  • ST_LocateBetweenElevations - Повертає частини геометрії, що лежать у діапазоні висоти (Z).
  • ST_M - Повертає координату M точки.
  • ST_MMax - Returns the M maxima of a geometry.
  • ST_MMin - Повертає M-мінімум геометрії.
  • ST_MSize - Returns the M size of a geometry.
  • ST_MakeLine - Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MakePoint - Створює 2D, 3DZ або 4D точку.
  • ST_MakePolygon - Creates a Polygon or CurvePolygon from a shell and optional list of holes.
  • ST_MakeValid - Attempts to make an invalid geometry valid without losing vertices.
  • ST_MemSize - Повертає обсяг пам'яті, який займає геометрія.
  • ST_MemUnion - Агрегатна функція, яка об'єднує геометрії в пам'яті ефективним, але повільнішим способом.
  • ST_NDims - Повертає розмір координат геометрії.
  • ST_NPoints - Повертає кількість точок (вершин) у геометрії.
  • ST_NRings - Повертає кількість кілець у полігональній геометрії.
  • ST_Node - Вузли — сукупність ліній.
  • ST_NumCurves - Повернути кількість кривих компонентів у CompoundCurve.
  • ST_NumGeometries - Повертає кількість елементів у колекції геометрії.
  • ST_NumPatches - Returns the number of faces in a PolyhedralSurface or TIN.
  • ST_PatchN - Returns the Nth face of a PolyhedralSurface or TIN.
  • ST_PointFromWKB - Створює геометрію з WKB із заданим SRID
  • ST_PointN - Повертає N-ту точку в першому LineString або круговому LineString в геометрії.
  • ST_PointOnSurface - Обчислює точку, яка гарантовано лежить у полігоні або на геометрії.
  • ST_Points - Повертає об'єкт MultiPoint, що містить координати геометрії.
  • ST_Polygon - Створює полігон з LineString із заданим SRID.
  • ST_RemovePoint - Видалити точку з лінії.
  • ST_RemoveRepeatedPoints - Повертає версію геометрії з видаленими дублікатами точок.
  • ST_Reverse - Повернути геометрію з оберненим порядком вершин.
  • ST_Rotate - Обертає геометрію навколо точки початку координат.
  • ST_RotateX - Обертає геометрію навколо осі X.
  • ST_RotateY - Обертає геометрію навколо осі Y.
  • ST_RotateZ - Обертає геометрію навколо осі Z.
  • ST_Scale - Масштабує геометрію за заданими коефіцієнтами.
  • ST_Scroll - Змінити початкову точку замкнутої лінії LineString.
  • ST_SetPoint - Замінити точку лінійного об'єкта на задану точку.
  • ST_ShiftLongitude - Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.
  • ST_SnapToGrid - Прив'яжіть всі точки вхідної геометрії до регулярної сітки.
  • ST_StartPoint - Returns the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_SwapOrdinates - Повертає версію заданої геометрії із заміненими значеннями ординат.
  • ST_SymDifference - Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.
  • ST_TransScale - Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.
  • ST_Translate - Перетворює геометрію за заданими зміщеннями.
  • ST_UnaryUnion - Обчислює об'єднання компонентів однієї геометрії.
  • ST_Union - Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.
  • ST_WrapX - Оберніть геометрію навколо значення X.
  • ST_X - Повертає координату X точки.
  • ST_XMax - Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.
  • ST_XMin - Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.
  • ST_XSize - Returns the X size of a 2D or 3D bounding box or a geometry.
  • ST_Y - Повертає координату Y точки.
  • ST_YMax - Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.
  • ST_YMin - Повертає мінімальне значення Y для 2D або 3D обмежувальної рамки або геометрії.
  • ST_YSize - Returns the Y size of a 2D or 3D bounding box or a geometry.
  • ST_Z - Повертає координату Z точки.
  • ST_ZMFlag - Повертає код, що вказує на розмірність координат ZM геометрії.
  • ST_ZMax - Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZMin - Повертає мінімальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZSize - Returns the Z size of a 2D or 3D bounding box or a geometry.
  • Equals - Повертає true, якщо дві топогеометрії складаються з однакових топологічних примітивів.
  • Intersects - Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.
  • UpdateGeometrySRID - Оновлює SRID всіх об'єктів у стовпці геометрії та метадані таблиці.
  • &&& - Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.
  • &&&(geometry,gidx) - Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).
  • &&&(gidx,geometry) - Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.
  • &&&(gidx,gidx) - Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.

13.9. Функції підтримки вигнутої геометрії PostGIS

Наведені нижче функції є функціями PostGIS, які можуть використовувати CIRCULARSTRING, CURVEPOLYGON та інші типи кривої геометрії

  • AddGeometryColumn - Додає стовпець геометрії до існуючої таблиці.
  • Box2D - Повертає BOX2D, що представляє 2D розмір геометрії.
  • Box3D - Повертає BOX3D, що представляє 3D-розмір геометрії.
  • DropGeometryColumn - Видаляє стовпець геометрії з просторової таблиці.
  • GeometryType - Повертає тип геометрії у вигляді тексту.
  • PostGIS_AddBBox - Додати обмежувальну рамку до геометрії.
  • PostGIS_DropBBox - Видалити кеш обмежувальної рамки з геометрії.
  • PostGIS_HasBBox - Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_Affine - Застосувати афінне перетворення 3D до геометрії.
  • ST_AsBinary - Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsEWKB - Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.
  • ST_AsEWKT - Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsHEXEWKB - Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR).
  • ST_AsSVG - Повертає дані SVG-шляху для геометрії.
  • ST_AsText - Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.
  • ST_ClusterDBSCAN - Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.
  • ST_ClusterWithin - Агрегатна функція, яка групує геометрії за відстанню розділення.
  • ST_ClusterWithinWin - Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.
  • ST_Collect - Створює GeometryCollection або Multi* геометрію з набору геометрій.
  • ST_CoordDim - Повертає розмірність координат геометрії.
  • ST_CurveToLine - Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_Distance - Повертає відстань між двома геометричними або географічними значеннями.
  • ST_Dump - Повертає набір рядків geometry_dump для компонентів геометрії.
  • ST_DumpPoints - Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_EndM - Returns the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_EndPoint - Returns the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_EstimatedExtent - Повертає приблизний діапазон просторової таблиці.
  • ST_FlipCoordinates - Повертає версію геометрії з перевернутими осями X та Y.
  • ST_Force2D - Примусово переведіть геометрії в "2-вимірний режим".
  • ST_ForceCurve - Перетворити геометрію в її вигнутий тип, якщо це можливо.
  • ST_ForceSFS - Force geometries to use SFS 1.1 or 1.2 geometry types.
  • ST_Force3D - Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DM - Примусово перевести геометрії в режим XYM.
  • ST_Force3DZ - Примусово перевести геометрії в режим XYZ.
  • ST_Force4D - Примусово перевести геометрії в режим XYZM.
  • ST_ForceCollection - Перетворити геометрію в GEOMETRYCOLLECTION.
  • ST_GeoHash - Повернути представлення геометрії у форматі GeoHash.
  • ST_GeogFromWKB - Створює географічний екземпляр на основі добре відомого двійкового геометричного представлення (WKB) або розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromEWKB - Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromEWKT - Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).
  • ST_GeomFromText - Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).
  • ST_GeomFromWKB - Створює екземпляр геометрії з добре відомого двійкового представлення геометрії (WKB) та опціонального SRID.
  • ST_GeometryN - Повернути елемент колекції геометрії.
  • = - Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.
  • &<| - Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться нижче обмежувальної рамки B.
  • ST_HasArc - Тестує, чи містить геометрія кругову дугу
  • ST_Intersects - Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_IsClosed - Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).
  • ST_IsCollection - Перевіряє, чи є геометрія типом колекції геометрії.
  • ST_IsEmpty - Перевіряє, чи геометрія порожня.
  • ST_LineToCurve - Перетворює лінійну геометрію на криву геометрію.
  • ST_MMax - Returns the M maxima of a geometry.
  • ST_MMin - Повертає M-мінімум геометрії.
  • ST_MSize - Returns the M size of a geometry.
  • ST_MemSize - Повертає обсяг пам'яті, який займає геометрія.
  • ST_NPoints - Повертає кількість точок (вершин) у геометрії.
  • ST_NRings - Повертає кількість кілець у полігональній геометрії.
  • ST_PointFromWKB - Створює геометрію з WKB із заданим SRID
  • ST_PointN - Повертає N-ту точку в першому LineString або круговому LineString в геометрії.
  • ST_Points - Повертає об'єкт MultiPoint, що містить координати геометрії.
  • ST_Rotate - Обертає геометрію навколо точки початку координат.
  • ST_RotateZ - Обертає геометрію навколо осі Z.
  • ST_SRID - Повертає ідентифікатор просторової прив'язки для геометрії.
  • ST_Scale - Масштабує геометрію за заданими коефіцієнтами.
  • ST_SetEndM - Sets the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_SetSRID - Встановити SRID для геометрії.
  • ST_SetStartM - Sets the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_StartM - Returns the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_StartPoint - Returns the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_Summary - Повертає текстовий підсумок вмісту геометрії.
  • ST_SwapOrdinates - Повертає версію заданої геометрії із заміненими значеннями ординат.
  • ST_TransScale - Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.
  • ST_Transform - Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ST_Translate - Перетворює геометрію за заданими зміщеннями.
  • ST_XMax - Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.
  • ST_XMin - Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.
  • ST_XSize - Returns the X size of a 2D or 3D bounding box or a geometry.
  • ST_YMax - Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.
  • ST_YMin - Повертає мінімальне значення Y для 2D або 3D обмежувальної рамки або геометрії.
  • ST_YSize - Returns the Y size of a 2D or 3D bounding box or a geometry.
  • ST_ZMFlag - Повертає код, що вказує на розмірність координат ZM геометрії.
  • ST_ZMax - Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZMin - Повертає мінімальне значення Z для 2D або 3D обмежувальної рамки або геометрії.
  • ST_ZSize - Returns the Z size of a 2D or 3D bounding box or a geometry.
  • UpdateGeometrySRID - Оновлює SRID всіх об'єктів у стовпці геометрії та метадані таблиці.
  • ~(box2df,box2df) - Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).
  • ~(box2df,geometry) - Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.
  • ~(geometry,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).
  • && - Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.
  • &&& - Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.
  • @(box2df,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.
  • @(box2df,geometry) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.
  • @(geometry,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).
  • &&(box2df,box2df) - Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.
  • &&(box2df,geometry) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.
  • &&(geometry,box2df) - Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).
  • &&&(geometry,gidx) - Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).
  • &&&(gidx,geometry) - Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.
  • &&&(gidx,gidx) - Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.

13.10. Функції підтримки багатогранних поверхонь PostGIS

Наведені нижче функції є функціями PostGIS, які можуть використовувати геометрії POLYHEDRALSURFACE, POLYHEDRALSURFACEM

  • Box2D - Повертає BOX2D, що представляє 2D розмір геометрії.
  • Box3D - Повертає BOX3D, що представляє 3D-розмір геометрії.
  • CG_3DArea - Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • CG_3DConvexHull - Обчислює 3D опуклу оболонку геометрії.
  • CG_3DDifference - Виконати 3D-різницю
  • CG_3DIntersection - Виконати 3D перетин
  • CG_3DUnion - Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • CG_ApproximateMedialAxis - Обчисліть приблизну медіальну вісь плоскої геометрії.
  • CG_Extrude - Видавити поверхню до відповідного об'єму
  • CG_ForceLHR - Примусова орієнтація LHR
  • CG_GenerateFlatRoof - Generate a flat (box) roof from a footprint polygon.
  • CG_GenerateGableRoof - Generate a gable roof from a footprint polygon.
  • CG_GenerateHippedRoof - Generate a hipped roof from a footprint polygon.
  • CG_GenerateRoof - Generate a roof of the requested type from a footprint polygon.
  • CG_GenerateSkillionRoof - Generate a skillion (single-slope) roof from a footprint polygon.
  • CG_IsPlanar - Перевірте, чи є поверхня плоскою
  • CG_IsSolid - Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • CG_MakeSolid - Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • CG_PolygonRepair - Repair an invalid polygon or multipolygon.
  • CG_StraightSkeleton - Обчислити прямий скелет з геомeтрії
  • CG_Tesselate - Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • CG_Visibility - Обчислити полігон видимості з точки або сегмента в геометрії полігона
  • CG_Volume - Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • GeometryType - Повертає тип геометрії у вигляді тексту.
  • ST_3DClosestPoint - Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_3DDFullyWithin - Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_3DDWithin - Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDistance - Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DIntersects - Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLongestLine - Повертає найдовшу 3D лінію між двома геометріями
  • ST_3DMaxDistance - Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DShortestLine - Повертає найкоротшу 3D лінію між двома геометріями
  • ST_Affine - Застосувати афінне перетворення 3D до геометрії.
  • ST_Area - Повертає площу полігональної геометрії.
  • ST_AsBinary - Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsEWKB - Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.
  • ST_AsEWKT - Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsGML - Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsX3D - Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_CoordDim - Повертає розмірність координат геометрії.
  • ST_Dimension - Повертає топологічну розмірність геометрії.
  • ST_Dump - Повертає набір рядків geometry_dump для компонентів геометрії.
  • ST_DumpPoints - Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_Expand - Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.
  • ST_Extent - Агрегатна функція, яка повертає обмежувальну рамку геометрій.
  • ST_FlipCoordinates - Повертає версію геометрії з перевернутими осями X та Y.
  • ST_Force2D - Примусово переведіть геометрії в "2-вимірний режим".
  • ST_ForceRHR - Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.
  • ST_ForceSFS - Force geometries to use SFS 1.1 or 1.2 geometry types.
  • ST_Force3D - Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DZ - Примусово перевести геометрії в режим XYZ.
  • ST_ForceCollection - Перетворити геометрію в GEOMETRYCOLLECTION.
  • ST_GeomFromEWKB - Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromEWKT - Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).
  • ST_GeomFromGML - Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeometryN - Повернути елемент колекції геометрії.
  • ST_GeometryType - Повертає тип SQL-MM геометрії у вигляді тексту.
  • = - Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.
  • &<| - Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться нижче обмежувальної рамки B.
  • ~= - Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.
  • ST_IsClosed - Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).
  • ST_MemSize - Повертає обсяг пам'яті, який займає геометрія.
  • ST_NPoints - Повертає кількість точок (вершин) у геометрії.
  • ST_NumGeometries - Повертає кількість елементів у колекції геометрії.
  • ST_NumPatches - Returns the number of faces in a PolyhedralSurface or TIN.
  • ST_PatchN - Returns the Nth face of a PolyhedralSurface or TIN.
  • ST_RemoveRepeatedPoints - Повертає версію геометрії з видаленими дублікатами точок.
  • ST_Reverse - Повернути геометрію з оберненим порядком вершин.
  • ST_Rotate - Обертає геометрію навколо точки початку координат.
  • ST_RotateX - Обертає геометрію навколо осі X.
  • ST_RotateY - Обертає геометрію навколо осі Y.
  • ST_RotateZ - Обертає геометрію навколо осі Z.
  • ST_Scale - Масштабує геометрію за заданими коефіцієнтами.
  • ST_ShiftLongitude - Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.
  • ST_Summary - Повертає текстовий підсумок вмісту геометрії.
  • ST_SwapOrdinates - Повертає версію заданої геометрії із заміненими значеннями ординат.
  • ST_Transform - Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ~(box2df,box2df) - Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).
  • ~(box2df,geometry) - Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.
  • ~(geometry,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).
  • && - Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.
  • &&& - Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.
  • @(box2df,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.
  • @(box2df,geometry) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.
  • @(geometry,box2df) - Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).
  • &&(box2df,box2df) - Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.
  • &&(box2df,geometry) - Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.
  • &&(geometry,box2df) - Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).
  • &&&(geometry,gidx) - Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).
  • &&&(gidx,geometry) - Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.
  • &&&(gidx,gidx) - Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.

13.11. Матриця підтримки функцій PostGIS

Нижче наведено алфавітний перелік просторових функцій у PostGIS та типи просторових даних, з якими вони працюють, або відповідність стандартам OGC/SQL, яких вони намагаються дотримуватися.

  • A означає, що функція працює з типом або підтипом вбудовано.
  • A означає, що це працює, але з вбудованим перетворенням за допомогою cast to geometry, перетворенням у просторове посилання "best srid", а потім зворотним перетворенням. Результати можуть не відповідати очікуваним для великих областей або областей на полюсах і можуть накопичувати сміття з плаваючою комою.
  • A означає, що функція працює з типом завдяки автоматичному перетворенню в інший тип, наприклад box3d, а не завдяки прямій підтримці типу.
  • A означає, що функція доступна тільки якщо PostGIS скомпільовано з підтримкою SFCGAL.
  • geom - Базова підтримка 2D-геометрії (x, y).
  • geog - Базова підтримка 2D географії (x, y).
  • 2.5D — базові 2D-геометрії в 3D/4D-просторі (має координати Z або M).
  • PS - Поліедральні поверхні
  • T - Трикутники та трикутні нерегулярні мережеві поверхні (TIN)

Функціяgeomgeog2.5DКривіSQL MMPST
ST_Collect      
ST_LineFromMultiPoint       
ST_MakeEnvelope       
ST_MakeLine       
ST_MakePoint       
ST_MakePointM       
ST_MakePolygon       
ST_Point       
ST_PointZ       
ST_PointM       
ST_PointZM       
ST_Polygon       
ST_TileEnvelope       
ST_HexagonGrid       
ST_Hexagon       
ST_SquareGrid       
ST_Square       
ST_Letters       
ST_MakeNurbsCurve       
GeometryType    
ST_Boundary       
ST_BoundingDiagonal       
ST_CoordDim  
ST_Dimension    
ST_Dump    
ST_DumpPoints    
ST_DumpSegments      
ST_DumpRings       
ST_EndPoint     
ST_Envelope       
ST_ExteriorRing       
ST_GeometryN  
ST_GeometryType      
ST_HasArc      
ST_InteriorRingN       
ST_NumCurves       
ST_CurveN       
ST_IsClosed    
ST_IsCollection      
ST_IsEmpty      
ST_IsPolygonCCW       
ST_IsPolygonCW       
ST_IsRing       
ST_IsSimple       
ST_M       
ST_MemSize    
ST_NDims       
ST_NPoints      
ST_NRings      
ST_NumGeometries    
ST_NumInteriorRings       
ST_NumInteriorRing       
ST_NumPatches      
ST_NumPoints       
ST_PatchN    
ST_PointN     
ST_Points      
ST_StartPoint     
ST_StartM       
ST_EndM       
ST_SetStartM       
ST_SetEndM       
ST_Summary    
ST_X       
ST_Y       
ST_Z       
ST_ZMFlag      
ST_HasZ       
ST_HasM       
ST_ControlPoints       
ST_Degree       
ST_Weights       
ST_Knots       
ST_NumControlPoints       
ST_NurbsCurveIsRational       
ST_IsNurbsCurve       
ST_Evaluate       
ST_NurbsToLineString       
ST_AddPoint       
ST_CollectionExtract       
ST_CollectionHomogenize       
ST_CurveToLine     
ST_Scroll       
ST_FlipCoordinates    
ST_Force2D      
ST_Force3D      
ST_Force3DZ      
ST_Force3DM       
ST_Force4D      
ST_ForceCollection      
ST_ForceCurve      
ST_ForcePolygonCCW       
ST_ForcePolygonCW       
ST_ForceSFS    
ST_ForceRHR       
ST_LineExtend       
ST_LineToCurve      
ST_Multi       
ST_Normalize       
ST_Project      
ST_QuantizeCoordinates       
ST_RemovePoint       
ST_RemoveRepeatedPoints       
ST_RemoveIrrelevantPointsForView       
ST_RemoveSmallParts       
ST_Reverse       
ST_Segmentize      
ST_SetPoint       
ST_ShiftLongitude     
ST_WrapX       
ST_SnapToGrid       
ST_Snap       
ST_SwapOrdinates    
ST_IsValid       
ST_IsValidDetail       
ST_IsValidReason       
ST_MakeValid       
ST_InverseTransformPipeline       
ST_SetSRID       
ST_SRID      
ST_Transform     
ST_TransformPipeline       
postgis_srs_codes        
postgis_srs        
postgis_srs_all        
postgis_srs_search       
ST_BdPolyFromText       
ST_BdMPolyFromText       
ST_GeogFromText        
ST_GeographyFromText        
ST_GeomCollFromText       
ST_GeomFromEWKT    
ST_GeomFromMARC21       
ST_GeometryFromText       
ST_GeomFromText      
ST_LineFromText       
ST_MLineFromText       
ST_MPointFromText       
ST_MPolyFromText       
ST_PointFromText       
ST_PolygonFromText       
ST_WKTToSQL       
ST_GeogFromWKB        
ST_GeomFromEWKB    
ST_GeomFromWKB      
ST_LineFromWKB       
ST_LinestringFromWKB       
ST_PointFromWKB     
ST_WKBToSQL       
ST_Box2dFromGeoHash       
ST_GeomFromGeoHash       
ST_GeomFromGML     
ST_GeomFromGeoJSON       
ST_GeomFromKML       
ST_GeomFromTWKB       
ST_GMLToSQL       
ST_LineFromEncodedPolyline       
ST_PointFromGeoHash        
ST_FromFlatGeobufToTable        
ST_FromFlatGeobuf        
ST_AsEWKT  
ST_AsText     
ST_AsBinary
ST_AsEWKB    
ST_AsHEXEWKB      
ST_AsEncodedPolyline       
ST_AsFlatGeobuf       
ST_AsGeobuf       
ST_AsGeoJSON     
ST_AsGML  
ST_AsKML     
ST_AsLatLonText       
ST_AsMARC21       
ST_AsMVTGeom       
ST_AsMVT       
ST_AsSVG      
ST_AsTWKB       
ST_AsX3D     
ST_GeoHash       
&&      
&&(geometry,box2df)       
&&(box2df,geometry)       
&&(box2df,box2df)       
&&&    
&&&(geometry,gidx)    
&&&(gidx,geometry)    
&&&(gidx,gidx)     
&<       
&<|       
&>       
<<       
<<|       
=      
>>       
@       
@(geometry,box2df)       
@(box2df,geometry)       
@(box2df,box2df)       
|&>       
|>>       
~       
~(geometry,box2df)       
~(box2df,geometry)       
~(box2df,box2df)       
~=       
<->      
|=|       
<#>       
<<->>       
ST_3DIntersects    
ST_Contains       
ST_ContainsProperly       
ST_CoveredBy      
ST_Covers      
ST_Crosses       
ST_Disjoint       
ST_Equals       
ST_Intersects    
ST_LineCrossingDirection       
ST_OrderingEquals       
ST_Overlaps       
ST_Relate       
ST_RelateMatch        
ST_Touches       
ST_Within       
ST_3DDWithin      
ST_3DDFullyWithin       
ST_DFullyWithin       
ST_DWithin      
ST_PointInsideCircle       
ST_Area     
ST_Azimuth      
ST_Angle       
ST_ClosestPoint      
ST_3DClosestPoint       
ST_Distance     
ST_3DDistance      
ST_DistanceSphere       
ST_DistanceSpheroid       
ST_FrechetDistance       
ST_HausdorffDistance       
ST_Length      
ST_Length2D       
ST_3DLength       
ST_LengthSpheroid       
ST_LongestLine       
ST_3DLongestLine       
ST_MaxDistance       
ST_3DMaxDistance       
ST_MinimumClearance       
ST_MinimumClearanceLine       
ST_Perimeter      
ST_Perimeter2D       
ST_3DPerimeter       
ST_ShortestLine      
ST_3DShortestLine       
ST_ClipByBox2D       
ST_Difference       
ST_Intersection     
ST_MemUnion       
ST_Node       
ST_Split       
ST_Subdivide       
ST_SymDifference       
ST_UnaryUnion       
ST_Union       
ST_Buffer      
ST_BuildArea       
ST_Centroid      
ST_ChaikinSmoothing       
ST_CatmullRomSmoothing       
ST_ConcaveHull       
ST_ConvexHull       
ST_DelaunayTriangles      
ST_FilterByM       
ST_GeneratePoints       
ST_GeometricMedian       
ST_LineMerge       
ST_MaximumInscribedCircle       
ST_LargestEmptyCircle       
ST_MinimumBoundingCircle       
ST_MinimumBoundingRadius       
ST_OrientedEnvelope       
ST_OffsetCurve       
ST_PointOnSurface       
ST_Polygonize       
ST_ReducePrecision       
ST_SharedPaths       
ST_Simplify       
ST_SimplifyPreserveTopology       
ST_SimplifyPolygonHull       
ST_SimplifyVW       
ST_SetEffectiveArea       
ST_TriangulatePolygon       
ST_VoronoiLines       
ST_VoronoiPolygons       
ST_CoverageInvalidEdges       
ST_CoverageClean       
ST_CoverageSimplify       
ST_CoverageEdges       
ST_CoverageUnion       
ST_Affine    
ST_Rotate    
ST_RotateX     
ST_RotateY     
ST_RotateZ    
ST_Scale    
ST_Translate      
ST_TransScale      
ST_ClusterDBSCAN       
ST_ClusterIntersecting       
ST_ClusterIntersectingWin       
ST_ClusterRelateWin       
ST_MinimumSpanningTree       
ST_ClusterKMeans       
ST_ClusterWithin       
ST_ClusterWithinWin       
Box2D     
Box3D    
ST_EstimatedExtent       
ST_Expand     
ST_Extent     
ST_3DExtent    
ST_MakeBox2D       
ST_3DMakeBox       
ST_XMax      
ST_XMin      
ST_YMax      
ST_YMin      
ST_ZMax      
ST_ZMin      
ST_XSize      
ST_YSize      
ST_ZSize      
ST_MMin      
ST_MMax      
ST_MSize      
ST_LineInterpolatePoint     
ST_3DLineInterpolatePoint       
ST_LineInterpolatePoints     
ST_LineLocatePoint      
ST_LineSubstring     
ST_LocateAlong       
ST_LocateBetween       
ST_LocateBetweenElevations       
ST_InterpolatePoint       
ST_3DInterpolatePoint       
ST_AddMeasure       
ST_IsValidTrajectory       
ST_ClosestPointOfApproach       
ST_DistanceCPA       
ST_CPAWithin       
postgis.gdal_datapath        
postgis.gdal_enabled_drivers        
postgis.enable_outdb_rasters        
postgis.gdal_vsi_options        
postgis.gdal_cpl_debug        
PostGIS_AddBBox       
PostGIS_DropBBox       
PostGIS_HasBBox       
postgis_sfcgal_version        
postgis_sfcgal_full_version        
CG_ForceLHR     
CG_IsPlanar     
CG_IsSolid     
CG_MakeSolid     
CG_Orientation       
CG_Area       
CG_3DArea    
CG_Volume    
CG_Intersection       
CG_Intersects      
CG_3DIntersects      
CG_Difference      
CG_3DDifference    
CG_Distance      
CG_3DDistance      
CG_3DConvexHull     
CG_3DIntersection    
CG_Union       
CG_3DUnion    
CG_AlphaShape       
CG_ApproxConvexPartition       
CG_ApproximateMedialAxis     
CG_GenerateFlatRoof       
CG_GenerateHippedRoof       
CG_GenerateGableRoof       
CG_GenerateSkillionRoof       
CG_GenerateRoof       
CG_PolygonRepair       
CG_ConstrainedDelaunayTriangles       
CG_Extrude     
CG_ExtrudeStraightSkeleton       
CG_GreeneApproxConvexPartition       
CG_MinkowskiSum       
CG_OptimalAlphaShape       
CG_OptimalConvexPartition       
CG_StraightSkeleton     
CG_Tesselate     
CG_Triangulate       
CG_Visibility     
CG_YMonotonePartition       
CG_StraightSkeletonPartition       
CG_3DBuffer       
CG_Rotate       
CG_2DRotate       
CG_3DRotate       
CG_RotateX       
CG_RotateY       
CG_RotateZ       
CG_Scale       
CG_3DScale       
CG_3DScaleAroundCenter       
CG_Translate       
CG_3DTranslate       
CG_Simplify       
CG_3DAlphaWrapping       
CG_NurbsCurveInterpolate       
CG_NurbsCurveApproximate       
CG_NurbsCurveDerivative       
getfaceedges_returntype        
TopoGeometry        
validatetopology_returntype        
TopoElement        
TopoElementArray        
AddTopoGeometryColumn        
RenameTopoGeometryColumn        
DropTopology        
RenameTopology        
DropTopoGeometryColumn        
FixCorruptTopoGeometryColumn        
Populate_Topology_Layer        
TopologySummary        
ValidateTopology       
ValidateTopologyRelation        
ValidateTopologyPrecision       
MakeTopologyPrecise       
FindTopology       
FindLayer       
TotalTopologySize        
UpgradeTopology        
CreateTopology        
CopyTopology        
ST_InitTopoGeo        
ST_CreateTopoGeo       
TopoGeo_AddPoint       
TopoGeo_AddLineString       
TopoGeo_AddPolygon       
TopoGeo_LoadGeometry       
ST_AddIsoNode       
ST_AddIsoEdge       
ST_AddEdgeNewFaces       
ST_AddEdgeModFace       
ST_RemEdgeNewFace        
ST_RemEdgeModFace        
ST_ChangeEdgeGeom       
ST_ModEdgeSplit       
ST_ModEdgeHeal        
ST_NewEdgeHeal        
ST_MoveIsoNode       
ST_NewEdgesSplit       
ST_RemoveIsoNode        
ST_RemoveIsoEdge        
GetEdgeByPoint       
GetFaceByPoint       
GetFaceContainingPoint       
GetNodeByPoint       
GetTopologyID        
GetTopologySRID        
GetTopologyName        
ST_GetFaceEdges        
ST_GetFaceGeometry       
GetRingEdges        
GetNodeEdges        
FindVertexSegmentPairsBelowDistance        
Polygonize        
AddNode       
AddEdge       
AddFace       
ST_Simplify       
RemoveUnusedPrimitives       
CreateTopoGeom       
toTopoGeom       
TopoElementArray_Agg        
TopoElement       
clearTopoGeom       
TopoGeom_addElement       
TopoGeom_remElement       
TopoGeom_addTopoGeom       
toTopoGeom        
GetTopoGeomElementArray        
GetTopoGeomElements        
ST_SRID       
AsGML       
AsTopoJSON       
Equals       
Intersects       
geomval        
addbandarg        
rastbandarg        
raster        
reclassarg        
summarystats        
unionarg        
AddRasterConstraints        
DropRasterConstraints        
AddOverviewConstraints        
DropOverviewConstraints        
PostGIS_GDAL_Version        
PostGIS_Raster_Lib_Build_Date        
PostGIS_Raster_Lib_Version        
ST_GDALDrivers        
UpdateRasterSRID        
ST_CreateOverview        
ST_AddBand        
ST_AsRaster       
ST_AsRasterAgg       
ST_Band        
ST_MakeEmptyCoverage        
ST_MakeEmptyRaster        
ST_Tile        
ST_Retile       
ST_FromGDALRaster        
ST_GeoReference        
ST_Height        
ST_IsEmpty        
ST_MemSize        
ST_MetaData        
ST_NumBands        
ST_PixelHeight        
ST_PixelWidth        
ST_ScaleX        
ST_ScaleY        
ST_RasterToWorldCoord        
ST_RasterToWorldCoordX        
ST_RasterToWorldCoordY        
ST_Rotation        
ST_SkewX        
ST_SkewY        
ST_SRID        
ST_Summary        
ST_UpperLeftX        
ST_UpperLeftY        
ST_Width        
ST_WorldToRasterCoord       
ST_WorldToRasterCoordX       
ST_WorldToRasterCoordY       
ST_BandMetaData        
ST_BandNoDataValue        
ST_BandIsNoData        
ST_BandPath        
ST_BandFileSize        
ST_BandFileTimestamp        
ST_BandPixelType        
ST_MinPossibleValue        
ST_HasNoBand        
ST_PixelAsPolygon       
ST_PixelAsPolygons        
ST_PixelAsPoint       
ST_PixelAsPoints        
ST_PixelAsCentroid       
ST_PixelAsCentroids        
ST_Value       
ST_NearestValue       
ST_SetZ       
ST_SetM       
ST_Neighborhood       
ST_SetValue       
ST_SetValues        
ST_DumpValues        
ST_PixelOfValue        
ST_SetGeoReference        
ST_SetRotation        
ST_SetScale        
ST_SetSkew        
ST_SetSRID        
ST_SetUpperLeft        
ST_Resample        
ST_Rescale        
ST_Reskew        
ST_SnapToGrid        
ST_Resize        
ST_Transform        
ST_SetBandNoDataValue        
ST_SetBandIsNoData        
ST_SetBandPath        
ST_SetBandIndex        
ST_Count        
ST_CountAgg        
ST_Histogram        
ST_Quantile        
ST_SummaryStats        
ST_SummaryStatsAgg        
ST_ValueCount        
ST_RastFromWKB        
ST_RastFromHexWKB        
ST_AsBinary/ST_AsWKB        
ST_AsHexWKB        
ST_AsGDALRaster        
ST_AsJPEG        
ST_AsPNG        
ST_AsTIFF        
ST_Clip       
ST_ColorMap        
ST_Grayscale        
ST_Intersection       
ST_MapAlgebra (callback function version)        
ST_MapAlgebra (expression version)        
ST_MapAlgebraExpr        
ST_MapAlgebraExpr        
ST_MapAlgebraFct        
ST_MapAlgebraFct        
ST_MapAlgebraFctNgb        
ST_Reclass        
ST_ReclassExact        
ST_Union        
ST_Distinct4ma        
ST_InvDistWeight4ma        
ST_Max4ma        
ST_Mean4ma        
ST_Min4ma        
ST_MinDist4ma        
ST_Range4ma        
ST_StdDev4ma        
ST_Sum4ma        
ST_Aspect        
ST_HillShade        
ST_Roughness        
ST_Slope        
ST_TPI        
ST_TRI        
ST_InterpolateRaster       
ST_Contour        
Box3D       
ST_ConvexHull       
ST_DumpAsPolygons        
ST_Envelope       
ST_MinConvexHull       
ST_Polygon       
ST_IntersectionFractions       
&&       
&<        
&>        
=        
@       
~=        
~       
ST_Contains        
ST_ContainsProperly        
ST_Covers        
ST_CoveredBy        
ST_Disjoint        
ST_Intersects       
ST_Overlaps        
ST_Touches        
ST_SameAlignment        
ST_NotSameAlignmentReason        
ST_Within        
ST_DWithin        
ST_DFullyWithin        

13.12. Нові, вдосконалені або змінені функції PostGIS

13.12.1. PostGIS Functions new or enhanced in 3.7

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.7

  • CG_ApproximateMedialAxis - Availability: 3.7.0 - projected parameter. Requires SFCGAL >= 2.3.0 for projected result; falls back to non-projected with a notice on older versions. Обчисліть приблизну медіальну вісь плоскої геометрії.
  • CG_GenerateFlatRoof - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Generate a flat (box) roof from a footprint polygon.
  • CG_GenerateGableRoof - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Generate a gable roof from a footprint polygon.
  • CG_GenerateHippedRoof - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Generate a hipped roof from a footprint polygon.
  • CG_GenerateRoof - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Generate a roof of the requested type from a footprint polygon.
  • CG_GenerateSkillionRoof - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Generate a skillion (single-slope) roof from a footprint polygon.
  • CG_NurbsCurveApproximate - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Creates an approximating NURBS curve fitting data points within a tolerance
  • CG_NurbsCurveDerivative - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Computes the derivative (tangent, curvature) of a NURBS curve at a given parameter
  • CG_NurbsCurveInterpolate - Availability: 3.7.0 - requires SFCGAL >= 2.3.0. Creates an interpolating NURBS curve passing through all given data points
  • CG_PolygonRepair - Availability: 3.7.0 - requires SFCGAL >= 2.3.0 and CGAL >= 6.0. Repair an invalid polygon or multipolygon.
  • FindVertexSegmentPairsBelowDistance - Availability: 3.7 Find pairs of topology vertex/segment that are closer than tolerated distance
  • ST_3DInterpolatePoint - Availability: 3.7.0 Returns the interpolated measure of a geometry closest to a point in 3D.
  • ST_ClusterRelateWin - Availability: 3.7.0 Window function that returns a cluster id for each input geometry, clustering input geometries into connected sets using the relate pattern to determine whether the geometries are connected.
  • ST_ControlPoints - Availability: 3.7.0 Returns the control points of a NURBS curve as a MULTIPOINT geometry.
  • ST_CoverageEdges - Availability: 3.7.0 Computes the unique edges of a polygonal coverage.
  • ST_Degree - Availability: 3.7.0 Returns the polynomial degree of a NURBS curve.
  • ST_Evaluate - Availability: 3.7.0 Evaluates a NURBS curve at a specific parameter value and returns the resulting point.
  • ST_IsNurbsCurve - Availability: 3.7.0 Checks if a geometry is a NURBS curve.
  • ST_Knots - Availability: 3.7.0 Returns the knot vector of a NURBS curve.
  • ST_MSize - Availability: 3.7.0 Returns the M size of a geometry.
  • ST_MakeLine - Доступність: 3.7.0 — додано підтримку елементів введення MultiLineString Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MakeNurbsCurve - Availability: 3.7.0 Creates a NURBS (Non-Uniform Rational B-Spline) curve from control points, optional weights, and optional knot vector.
  • ST_MinimumSpanningTree - Availability: 3.7.0 Window function that returns a tree id for each input geometry, clustering input geometries into connected trees using the Minimum Spanning Tree algorithm.
  • ST_NumControlPoints - Availability: 3.7.0 Returns the number of control points in a NURBS curve.
  • ST_NurbsCurveIsRational - Availability: 3.7.0 Checks if a NURBS curve is rational (has weights).
  • ST_NurbsToLineString - Availability: 3.7.0 Converts a NURBS curve to a LINESTRING by uniform sampling.
  • ST_Weights - Availability: 3.7.0 Returns the weight array of a rational NURBS curve.
  • ST_XSize - Availability: 3.7.0 Returns the X size of a 2D or 3D bounding box or a geometry.
  • ST_YSize - Availability: 3.7.0 Returns the Y size of a 2D or 3D bounding box or a geometry.
  • ST_ZSize - Availability: 3.7.0 Returns the Z size of a 2D or 3D bounding box or a geometry.

Functions enhanced in PostGIS 3.7

  • ST_GMLToSQL - Enhanced: 3.7.0 support for GML ArcString, curved Ring, and CurvePolygon geometries was introduced. Returns a geometry from GML. Alias for ST_GeomFromGML.
  • ST_GeomFromGML - Enhanced: 3.7.0 support for GML ArcString, curved Ring, and CurvePolygon geometries was introduced. Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_LongestLine - Enhanced: 3.7.0 - support for a single geometry input. Повертає найдовшу 2D лінію між двома геометріями.
  • ST_MakePolygon - Enhanced: 3.7.0 - Support for curved input rings was introduced. Creates a Polygon or CurvePolygon from a shell and optional list of holes.
  • ST_MaxDistance - Enhanced: 3.7.0 - support for a single geometry input. Повертає найбільшу відстань між двома геометріями в проекційних одиницях.
  • ST_Value - Enhanced: 3.7.0 resample accepts nearest-neighbor boundary options "nearest-UL", "nearest-UR", "nearest-LL", and "nearest-LR". Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.
  • TopoGeo_AddLineString - Покращено: у версії 3.7.0 додано підтримку обмеження кількості нових ребер, що створюються в топології. Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.

Functions changed in PostGIS 3.7

  • ST_AsGeoJSON - Змінено: 3.7.0 додано попередження про дублювання ключів Повернути геометрію або об'єкт у форматі GeoJSON.
  • toTopoGeom - Змінено: у версії 3.7.0 змінено значення толерантності 0, яке тепер означає 0 і -1 (нове значення за замовчуванням), щоб вимагати використання точності топології. Перетворює просту геометрію в топологічну геометрію.

13.12.2. PostGIS Functions new or enhanced in 3.6

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.6

  • CG_2DRotate - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Повертає геометрію на заданий кут навколо вказаної точки в 2D.
  • CG_3DAlphaWrapping - Доступність: 3.6.0 — вимагає SFCGAL >= 2.1.0 Обчислює 3D-обгортку альфа, яка суворо охоплює геометрію.
  • CG_3DBuffer - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Обчислює 3D-буфер навколо геометрії.
  • CG_3DRotate - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Обертає геометрію в 3D-просторі навколо вектора осі.
  • CG_3DScale - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Масштабує геометрію за окремими коефіцієнтами вздовж осей X, Y та Z.
  • CG_3DScaleAroundCenter - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Масштабує геометрію в 3D-просторі навколо вказаної центральної точки.
  • CG_3DTranslate - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Перекладає (переміщує) геометрію на задані відступи в 3D-просторі.
  • CG_Rotate - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Повертає геометрію на заданий кут навколо початку координат (0,0).
  • CG_RotateX - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Повертає геометрію навколо осі X на заданий кут.
  • CG_RotateY - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Повертає геометрію навколо осі Y на заданий кут.
  • CG_RotateZ - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Повертає геометрію навколо осі Z на заданий кут.
  • CG_Scale - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Масштабує геометрію рівномірно у всіх вимірах за заданим коефіцієнтом.
  • CG_Simplify - Доступність: 3.6.0 — вимагає SFCGAL >= 2.1.0 Зменшує складність геометрії, зберігаючи при цьому основні характеристики та значення Z/M.
  • CG_StraightSkeletonPartition - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0. Обчислює прямий скелетний поділ багатокутника.
  • CG_Translate - Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0 Перекладає (переміщує) геометрію на задані відступи в 2D-просторі.
  • FixCorruptTopoGeometryColumn - Доступність: 3.6.1 Виправлено пошкодження топогеометрії, спричинене оновленням до postgis_topology 3.6.0 та вище
  • MakeTopologyPrecise - Доступність: 3.6.0 Прив'язати вершини топології до сітки з високою точністю.
  • ST_AsRasterAgg - Доступність: 3.6.0 Агрегація. Перетворює геометрії PostGIS у новий растр.
  • ST_CatmullRomSmoothing - Доступність: 3.6.0 Returns a smoothed version of a geometry, using the Catmull-Rom spline algorithm
  • ST_CoverageClean - Доступність: 3.6.0 - вимагає GEOS >= 3.14.0 Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.
  • ST_IntersectionFractions - Доступність: 3.6.0 Вимагає GEOS 3.14 або вище. Обчислює частку кожної растрової комірки, яка покрита заданою геометрією.
  • ST_ReclassExact - Доступність: 3.6.0 Створює новий растр, що складається з каналів, перекласифікованих з оригінальних, використовуючи співвідношення 1:1 між значеннями в оригінальному каналі та новими значеннями в каналі призначення.
  • TotalTopologySize - Доступність: 3.6.0 Загальний обсяг дискового простору, використовуваний зазначеною топологією, включаючи всі індекси та дані TOAST.
  • UpgradeTopology - Доступність: 3.6.0 Оновлює вказану топологію для підтримки великих ідентифікаторів (int8) для топології та примітивних ідентифікаторів.
  • ValidateTopologyPrecision - Доступність: 3.6.0 Повертає неточні вершини в топології.
  • postgis.gdal_cpl_debug - Доступність: 3.6.0 Булева конфігурація для ввімкнення та вимкнення реєстрації повідомлень про налагодження GDAL.

Functions enhanced in PostGIS 3.6

  • CreateTopology - Покращено: у версії 3.6.0 додано параметри topoid та usesLargeIDs. Створює нову схему топології та реєструє її в таблиці topology.topology.

Functions changed in PostGIS 3.6

  • ST_GeometryN - Changed: 3.6.0 TIN and PolyhedralSurface are treated as unitary geometries and are not decomposed into patches; use ST_PatchN to access faces. Повернути елемент колекції геометрії.
  • ST_NumGeometries - Changed: 3.6.0 TIN and PolyhedralSurface are treated as unitary geometries and return 1; use ST_NumPatches to count faces. Повертає кількість елементів у колекції геометрії.

13.12.3. PostGIS Functions new or enhanced in 3.5

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.5

  • CG_3DArea - Доступність: 3.5.0 Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • CG_3DConvexHull - Доступність: 3.5.0 Обчислює 3D опуклу оболонку геометрії.
  • CG_3DDifference - Доступність: 3.5.0 Виконати 3D-різницю
  • CG_3DDistance - Доступність: 3.5.0 Обчислює мінімальну 3D відстань між двома геометріями
  • CG_3DIntersection - Доступність: 3.5.0 Виконати 3D перетин
  • CG_3DIntersects - Доступність: 3.5.0 Перевіряє, чи перетинаються дві 3D-геометрії
  • CG_3DUnion - Доступність: 3.5.0 Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • CG_AlphaShape - Доступність: 3.5.0 — вимагає SFCGAL >= 1.4.1. Обчислює альфа-форму, що охоплює геометрію
  • CG_ApproxConvexPartition - Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0. Обчислює наближене опукле розбиття геометрії багатокутника
  • CG_ApproximateMedialAxis - Доступність: 3.5.0 Обчисліть приблизну медіальну вісь плоскої геометрії.
  • CG_Area - Доступність: 3.5.0 Обчислює площу геометрії
  • CG_Difference - Доступність: 3.5.0 Обчислює геометричну різницю між двома геометріями
  • CG_Distance - Доступність: 3.5.0 Обчислює мінімальну відстань між двома геометріями
  • CG_Extrude - Доступність: 3.5.0 Видавити поверхню до відповідного об'єму
  • CG_ExtrudeStraightSkeleton - Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0. Пряма екструзія скелета
  • CG_ForceLHR - Доступність: 3.5.0 Примусова орієнтація LHR
  • CG_GreeneApproxConvexPartition - Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0. Обчислює наближене опукле розбиття геометрії багатокутника
  • CG_Intersection - Доступність: 3.5.0 Обчислює перетин двох геометрій
  • CG_Intersects - Доступність: 3.5.0 Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • CG_IsPlanar - Доступність: 3.5.0 Перевірте, чи є поверхня плоскою
  • CG_IsSolid - Доступність: 3.5.0 Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • CG_MakeSolid - Доступність: 3.5.0 Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • CG_MinkowskiSum - Доступність: 3.5.0 Обчислює суму Мінковського
  • CG_OptimalAlphaShape - Доступність: 3.5.0 — вимагає SFCGAL >= 1.4.1. Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.
  • CG_OptimalConvexPartition - Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0. Обчислює оптимальний опуклий поділ геометрії багатокутника
  • CG_Orientation - Доступність: 3.5.0 Визначте орієнтацію поверхні
  • CG_StraightSkeleton - Доступність: 3.5.0 Обчислити прямий скелет з геомeтрії
  • CG_Tesselate - Доступність: 3.5.0 Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • CG_Triangulate - Доступність: 3.5.0 Тріангулює полігональну геометрію
  • CG_Union - Доступність: 3.5.0 Обчислює об'єднання двох геометрій
  • CG_Visibility - Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0. Обчислити полігон видимості з точки або сегмента в геометрії полігона
  • CG_Volume - Доступність: 3.5.0 Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • CG_YMonotonePartition - Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0. Обчислює y-монотонний поділ геометрії багатокутника
  • ST_HasM - Доступність: 3.5.0 Перевіряє, чи має геометрія розмір M (вимір).
  • ST_HasZ - Доступність: 3.5.0 Перевіряє, чи має геометрія розмір Z.
  • ST_RemoveIrrelevantPointsForView - Доступність: 3.5.0 Видаляє точки, які не мають значення для візуалізації певного прямокутного виду геометрії.
  • ST_RemoveSmallParts - Доступність: 3.5.0 Видаляє невеликі частини (кільця полігону або лінії) геометрії.
  • TopoGeo_LoadGeometry - Доступність: 3.5.0 Завантажте геометрію в існуючу топологію, при необхідності вирівнюючи та розділяючи.

Functions enhanced in PostGIS 3.5

  • ST_Clip - Покращено: 3.5.0 - додано аргумент touched. Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.

Functions changed in PostGIS 3.5

  • ST_AsGeoJSON - Змінено: 3.5.0 Дозволено вказувати стовпець, що містить feature id Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_DFullyWithin - Змінено: 3.5.0: логіка функції тепер використовує перевірку вмісту в буфері, а не алгоритм ST_MaxDistance. Результати будуть відрізнятися від попередніх версій, але повинні бути ближчими до очікувань користувачів. Перевіряє, чи геометрія повністю знаходиться в межах відстані від іншої

13.12.4. PostGIS Functions new or enhanced in 3.4

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.4

  • PostGIS_GEOS_Compiled_Version - Доступність: 3.4.0 Returns the version number of the GEOS library against which PostGIS was built.
  • PostGIS_PROJ_Compiled_Version - Доступність: 3.5.0 Returns the version number of the PROJ library against which PostGIS was built.
  • RenameTopoGeometryColumn - Доступність: 3.4.0 Перейменовує стовпець топогеометрії
  • RenameTopology - Доступність: 3.4.0 Перейменовує топологію
  • ST_ClusterIntersectingWin - Доступність: 3.4.0 Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, групуючи вхідні геометрії у пов'язані набори.
  • ST_ClusterWithinWin - Доступність: 3.4.0 Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.
  • ST_CoverageInvalidEdges - Доступність: 3.4.0 Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.
  • ST_CoverageSimplify - Доступність: 3.4.0 Віконна функція, яка спрощує краї полігонального покриття.
  • ST_CoverageUnion - Доступність: 3.4.0 - вимагає GEOS >= 3.8.0 Обчислює об'єднання набору полігонів, що утворюють покриття, видаляючи спільні ребра.
  • ST_InverseTransformPipeline - Доступність: 3.4.0 Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат, використовуючи обернену функцію визначеного конвеєра перетворення координат.
  • ST_LargestEmptyCircle - Доступність: 3.4.0. Обчислює найбільше коло, яке не перетинається з геометрією.
  • ST_LineExtend - Доступність: 3.4.0 Повертає лінію, розширений вперед і назад на вказані відстані.
  • ST_TransformPipeline - Доступність: 3.4.0 Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат за допомогою визначеного конвеєра перетворення координат.
  • TopoElement - Доступність: 3.4.0 Перетворює топогеометрію в топоелемент.
  • postgis_srs - Доступність: 3.4.0 Повернути запис метаданих для запитуваного органу та srid.
  • postgis_srs_all - Доступність: 3.4.0 Повернути записи метаданих для кожної системи просторових координат у базовій базі даних Proj.
  • postgis_srs_codes - Доступність: 3.4.0 Повернути список кодів SRS, пов'язаних із зазначеним органом.
  • postgis_srs_search - Доступність: 3.4.0 Повернути записи метаданих для проектованих систем координат, області використання яких повністю містять параметр меж.

Functions enhanced in PostGIS 3.4

  • PostGIS_Full_Version - Enhanced: 3.4.0 now includes extra PROJ configurations NETWORK_ENABLED, URL_ENDPOINT and DATABASE_PATH of proj.db location Reports full PostGIS version and build configuration infos.
  • PostGIS_PROJ_Version - Enhanced: 3.4.0 now includes NETWORK_ENABLED, URL_ENDPOINT and DATABASE_PATH of proj.db location Returns the version number of the PROJ4 library.
  • ST_AsSVG - Покращено: 3.4.0 для підтримки всіх типів кривих Повертає дані SVG-шляху для геометрії.
  • ST_ClosestPoint - Покращено: 3.4.0 - Підтримка географії. Повертає 2D точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії від однієї геометрії до іншої.
  • ST_LineSubstring - Покращено: 3.4.0 - Додано підтримку географії. Повертає частину лінії між двома дробовими позиціями.
  • ST_Project - Покращено: 3.4.0 Дозволено аргументи геометрії та двоточкову форму з пропуском азимута. Повертає точку, спроектовану від початкової точки на відстань і азимут.
  • ST_Resample - Покращено: додано опції максимального та мінімального значення ресемплювання 3.4.0 Передискретизуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри, довільний кут сітки та набір атрибутів геореференціювання растра, визначених або запозичених з іншого растра.
  • ST_Rescale - Покращено: додано опції максимального та мінімального значення ресемплювання 3.4.0 Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.
  • ST_ShortestLine - Покращено: 3.4.0 - підтримка географії. Повертає найкоротшу 2D лінію між двома геометріями

Functions changed in PostGIS 3.4

  • PostGIS_Extensions_Upgrade - Changed: 3.4.0 to add target_version argument. Packages and upgrades PostGIS extensions (e.g. postgis_raster, postgis_topology, postgis_sfcgal) to given or latest version.

13.12.5. PostGIS Functions new or enhanced in 3.3

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.3

  • RemoveUnusedPrimitives - Доступність: 3.3.0 Видаляє примітивні елементи топології, які не потрібні для визначення існуючих об'єктів TopoGeometry.
  • ST_AsMARC21 - Доступність: 3.3.0 Повертає геометрію у вигляді запису MARC21/XML із полем географічних даних (034).
  • ST_GeomFromMARC21 - Доступність: 3.3.0, вимагає libxml2 2.6+ Приймає географічні дані MARC21/XML як вхідні дані та повертає геометричний об'єкт PostGIS.
  • ST_Letters - Доступність: 3.3.0 Повертає введені літери, відтворені як геометрія, з початковою позицією за замовчуванням в початку координат і висотою тексту за замовчуванням 100.
  • ST_SimplifyPolygonHull - Доступність: 3.3.0. Обчислює спрощену зовнішню або внутрішню оболонку полігональної геометрії із збереженням топології.
  • ST_TriangulatePolygon - Доступність: 3.3.0. Обчислює обмежену триангуляцію Делоне полігонів
  • postgis_sfcgal_full_version - Доступність: 3.3.0 Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL та Boost

Functions enhanced in PostGIS 3.3

  • ST_ConcaveHull - Покращено: 3.3.0, увімкнено вбудовану реалізацію GEOS для GEOS 3.11+ Обчислює можливу увігнуту геометрію, яка містить усі вершини вхідної геометрії
  • ST_LineMerge - Покращено: 3.3.0 приймає спрямований параметр. Повернути лінії, утворені зшиванням MultiLineString.

Functions changed in PostGIS 3.3

  • PostGIS_Extensions_Upgrade - Changed: 3.3.0 support for upgrades from any PostGIS version. Does not work on all systems. Packages and upgrades PostGIS extensions (e.g. postgis_raster, postgis_topology, postgis_sfcgal) to given or latest version.

13.12.6. PostGIS Functions new or enhanced in 3.2

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.2

  • FindLayer - Доступність: 3.2.0 Повертає запис topology.layer різними способами.
  • FindTopology - Доступність: 3.2.0 Повертає запис топології різними способами.
  • GetFaceContainingPoint - Доступність: 3.2.0 Знаходить обличчя, що містить точку.
  • ST_AsFlatGeobuf - Доступність: 3.2.0 Повернути представлення FlatGeobuf набору рядків.
  • ST_Contour - Доступність: 3.2.0 Генерує набір векторних контурів із наданого растрового каналу, використовуючи алгоритм контурного відображення GDAL.
  • ST_DumpSegments - Доступність: 3.2.0 Повертає набір рядків geometry_dump для сегментів у геометрії.
  • ST_FromFlatGeobuf - Доступність: 3.2.0 Зчитує дані FlatGeobuf.
  • ST_FromFlatGeobufToTable - Доступність: 3.2.0 Створює таблицю на основі структури даних FlatGeobuf.
  • ST_InterpolateRaster - Доступність: 3.2.0 Інтерполює поверхню сітки на основі вхідного набору 3-D точок, використовуючи значення X і Y для позиціонування точок на сітці, а значення Z точок — як висоту поверхні.
  • ST_SRID - Доступність: 3.2.0 Повертає ідентифікатор просторової прив'язки для топогеометрії.
  • ST_Scroll - Доступність: 3.2.0 Змінити початкову точку замкнутої лінії LineString.
  • ST_SetM - Доступність: 3.2.0 Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растра, скопійованими в розмірність M за допомогою заданого алгоритму ресемплювання.
  • ST_SetZ - Доступність: 3.2.0 Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.
  • TopoGeom_addTopoGeom - Доступність: 3.2 Додає елемент TopoGeometry до визначення іншого TopoGeometry.
  • ValidateTopologyRelation - Доступність: 3.2.0 Повертає інформацію про недійсні записи топологічних відносин
  • postgis.gdal_vsi_options - Доступність: 3.2.0 Конфігурація рядка для встановлення параметрів, що використовуються під час роботи з растровим файлом out-db.

Functions enhanced in PostGIS 3.2

  • GetFaceByPoint - Покращено: 3.2.0 більш ефективна реалізація та чіткіший контракт, припиняє роботу з недійсними топологіями. Знаходить грань, що перетинає задану точку.
  • ST_ClusterKMeans - Покращено: 3.2.0 Підтримка max_radius Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.
  • ST_MakeValid - Enhanced: 3.2.0, added algorithm options, 'linework' and 'structure' which requires GEOS >= 3.10.0. Attempts to make an invalid geometry valid without losing vertices.
  • ST_PixelAsCentroid - Покращено: 3.2.0 Тепер швидше реалізовано в C. Повертає центроїд (точкову геометрію) області, представленої пікселем.
  • ST_PixelAsCentroids - Покращено: 3.2.0 Тепер швидше реалізовано в C. Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.
  • ST_Point - Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії. Створює точку із значеннями X, Y та SRID.
  • ST_PointM - Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії. Створює точку з значеннями X, Y, M та SRID.
  • ST_PointZ - Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії. Створює точку з координатами X, Y, Z та значенням SRID.
  • ST_PointZM - Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії. Створює точку з значеннями X, Y, Z, M та SRID.
  • ST_RemovePoint - Покращено: 3.2.0 Видалити точку з лінії.
  • ST_RemoveRepeatedPoints - Покращено: 3.2.0 Повертає версію геометрії з видаленими дублікатами точок.
  • ST_StartPoint - Покращено: 3.2.0 повертає точку для всіх геометрій. Попередня поведінка повертала NULL, якщо вхідні дані не були LineString. Returns the first point of a LineString, CircularLineString, or NURBSCurve.
  • ST_Value - Покращено: 3.2.0 додано опціональний аргумент resample. Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.
  • TopoGeo_AddLineString - Покращено: у версії 3.2.0 додано підтримку повернення підписаного ідентифікатора. Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.

Functions changed in PostGIS 3.2

  • ST_Boundary - Змінено: 3.2.0 підтримка TIN, не використовує geos, не лінеаризує криві Повертає межі геометрії.
  • ValidateTopology - Змінено: 3.2.0 додано опційний параметр bbox, виконується перевірка маркування ребер та з'єднання ребер. Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.

13.12.7. PostGIS Functions new or enhanced in 3.1

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.1

  • ST_Hexagon - Доступність: 3.1.0 Повертає один шестикутник, використовуючи заданий розмір ребра та координати комірки в просторі шестикутної сітки.
  • ST_HexagonGrid - Доступність: 3.1.0 Повертає набір шестикутників та індексів комірок, які повністю покривають межі аргументу геометрії.
  • ST_MaximumInscribedCircle - Доступність: 3.1.0. Обчислює найбільше коло, що міститься в геометрії.
  • ST_ReducePrecision - Доступність: 3.1.0. Повертає дійсну геометрію з точками, округленими до допуску сітки.
  • ST_Square - Доступність: 3.1.0 Повертає один квадрат, використовуючи заданий розмір сторони та координати комірки в просторі квадратної сітки.
  • ST_SquareGrid - Доступність: 3.1.0 Повертає набір квадратів сітки та індексів комірок, які повністю покривають межі аргументу геометрії.

Functions enhanced in PostGIS 3.1

  • ST_AsEWKT - Покращено: 3.1.0 підтримка опціонального параметра точності. Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_ClusterKMeans - Покращено: 3.1.0 Підтримка 3D-геометрії та ваги Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.
  • ST_Difference - Покращено: 3.1.0 приймає параметр gridSize. Обчислює геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B.
  • ST_Intersection - Покращено: 3.1.0 приймає параметр gridSize Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_MakeValid - Enhanced: 3.1.0, added removal of Coordinates with NaN values. Attempts to make an invalid geometry valid without losing vertices.
  • ST_Subdivide - Покращено: 3.1.0 приймає параметр gridSize. Обчислює прямолінійний поділ геометрії.
  • ST_SymDifference - Покращено: 3.1.0 приймає параметр gridSize. Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.
  • ST_TileEnvelope - Покращено: 3.1.0 Додано параметр поля. Створює прямокутний полігон у Web Mercator (SRID:3857) за допомогою системи тайлів XYZ.
  • ST_UnaryUnion - Покращено: 3.1.0 приймає параметр gridSize. Обчислює об'єднання компонентів однієї геометрії.
  • ST_Union - Покращено: 3.1.0 приймає параметр gridSize. Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

Functions changed in PostGIS 3.1

  • ST_Count - Змінено: 3.1.0 - Вилучено варіанти ST_Count(rastertable, rastercolumn, ...). Замість цього використовуйте . Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню nodata.
  • ST_Force3D - Змінено: 3.1.0. Додано підтримку для надання значення Z, відмінного від нуля. Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DM - Змінено: 3.1.0. Додано підтримку для надання значення M, відмінного від нуля. Примусово перевести геометрії в режим XYM.
  • ST_Force3DZ - Змінено: 3.1.0. Додано підтримку для надання значення Z, відмінного від нуля. Примусово перевести геометрії в режим XYZ.
  • ST_Force4D - Змінено: 3.1.0. Додано підтримку для надання ненульових значень Z та M. Примусово перевести геометрії в режим XYZM.
  • ST_Histogram - Змінено: 3.1.0 Вилучено варіант ST_Histogram(table_name, column_name). Повертає набір записів, що підсумовують розподіл даних растрового або растрового покриття за окремими діапазонами бінів. Кількість бінів обчислюється автоматично, якщо не вказано інше.
  • ST_Quantile - Змінено: 3.1.0 Вилучено варіант ST_Quantile(table_name, column_name). Обчислюйте квантилі для покриття растрового зображення або растрової таблиці в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растрового зображення.
  • ST_SummaryStats - Змінено: 3.1.0 Варіанти ST_SummaryStats(rastertable, rastercolumn, ...) видалено. Замість них використовуйте . Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, то вважається, що це канал 1.

13.12.8. PostGIS Functions new or enhanced in 3.0

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 3.0

  • CG_ConstrainedDelaunayTriangles - Доступність: 3.0.0 Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • ST_3DLineInterpolatePoint - Доступність: 3.0.0 Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці.
  • ST_TileEnvelope - Доступність: 3.0.0 Створює прямокутний полігон у Web Mercator (SRID:3857) за допомогою системи тайлів XYZ.

Functions enhanced in PostGIS 3.0

  • ST_AsMVT - Покращено: 3.0 — додано підтримку ідентифікатора функції. Агрегатна функція, що повертає MVT-представлення набору рядків.
  • ST_Contains - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи кожна точка B лежить в A, і чи мають їхні внутрішні частини спільну точку
  • ST_ContainsProperly - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи кожна точка B лежить у внутрішній частині A
  • ST_CoveredBy - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи кожна точка A лежить в B
  • ST_Covers - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи кожна точка B лежить в A
  • ST_Crosses - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи дві геометрії мають деякі, але не всі внутрішні точки спільні
  • ST_CurveToLine - Покращено: у версії 3.0.0 впроваджено мінімальну кількість сегментів на лінійну дугу, щоб запобігти топологічному колапсу. Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_Disjoint - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи дві геометрії не мають спільних точок
  • ST_Equals - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи дві геометрії містять однаковий набір точок
  • ST_GeneratePoints - Покращено: 3.0.0, додано параметр seed Генерує множину випадкових точок, що містяться в полігоні або полігоні.
  • ST_GeomFromGeoJSON - Покращено: 3.0.0, якщо не вказано інше, геометрія за замовчуванням аналізується як SRID=4326. Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS
  • ST_LocateBetween - Покращено: 3.0.0 - додано підтримку POLYGON, TIN, TRIANGLE. Повертає частини геометрії, які відповідають діапазону вимірювання.
  • ST_LocateBetweenElevations - Покращено: 3.0.0 - додано підтримку POLYGON, TIN, TRIANGLE. Повертає частини геометрії, що лежать у діапазоні висоти (Z).
  • ST_Overlaps - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи дві геометрії мають однакові розміри і перетинаються, але кожна з них має принаймні одну точку, яка не належить до іншої
  • ST_Relate - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи дві геометрії мають топологічний зв'язок, що відповідає шаблону матриці перетину, або обчислює їх матрицю перетину
  • ST_Segmentize - Покращено: 3.0.0 Сегментація геометрії тепер створює підсегменти однакової довжини Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.
  • ST_Touches - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи мають дві геометрії хоча б одну спільну точку, але їхні внутрішні частини не перетинаються
  • ST_Within - Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку

Functions changed in PostGIS 3.0

  • PostGIS_Extensions_Upgrade - Changed: 3.0.0 to repackage loose extensions and support postgis_raster. Packages and upgrades PostGIS extensions (e.g. postgis_raster, postgis_topology, postgis_sfcgal) to given or latest version.
  • ST_3DDistance - Змінено: 3.0.0 - Вилучено версію SFCGAL Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DIntersects - Змінено: 3.0.0 Вилучено бекенд SFCGAL, бекенд GEOS підтримує TIN. Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_Area - Змінено: 3.0.0 - більше не залежить від SFCGAL. Повертає площу полігональної геометрії.
  • ST_AsGeoJSON - Змінено: 3.0.0 підтримка записів як вхідних даних Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsGeoJSON - Змінено: 3.0.0 виведення SRID, якщо не EPSG:4326. Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsKML - Змінено: 3.0.0 - Вилучено підпис варіанту "versioned" Повернути геометрію як елемент KML.
  • ST_Distance - Змінено: 3.0.0 - більше не залежить від SFCGAL. Повертає відстань між двома геометричними або географічними значеннями.
  • ST_Intersection - Змінено: 3.0.0 не залежить від SFCGAL. Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_Intersects - Змінено: 3.0.0 Вилучено версію SFCGAL та додано вбудовану підтримку 2D TINS. Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_Union - Змінено: 3.0.0 не залежить від SFCGAL. Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

13.12.9. PostGIS Functions new or enhanced in 2.5

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 2.5

  • PostGIS_Extensions_Upgrade - Доступність: 2.5.0 Packages and upgrades PostGIS extensions (e.g. postgis_raster, postgis_topology, postgis_sfcgal) to given or latest version.
  • ST_Angle - Доступність: 2.5.0 Повертає кут між двома векторами, визначеними 3 або 4 точками, або 2 лініями.
  • ST_AsHexWKB - Доступність: 2.5.0 Повернути добре відомий бінарний файл (WKB) у шістнадцятковому представленні растру.
  • ST_BandFileSize - Доступність: 2.5.0 Повертає розмір файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, вважається, що він дорівнює 1.
  • ST_BandFileTimestamp - Доступність: 2.5.0 Повертає мітку часу файлу смуги, що зберігається у файловій системі. Якщо номер смуги не вказано, вважається, що він дорівнює 1.
  • ST_ChaikinSmoothing - Доступність: 2.5.0 Повертає згладжену версію геометрії, використовуючи алгоритм Чайкіна.
  • ST_FilterByM - Доступність: 2.5.0 Видаляє вершини на основі їхнього значення M
  • ST_Grayscale - Доступність: 2.5.0 Створює новий растр з одним каналом 8BUI на основі вихідного растра та вказаних каналів, що представляють червоний, зелений та синій кольори
  • ST_LineInterpolatePoints - Доступність: 2.5.0 Повертає точки, інтерпольовані вздовж лінії з дробовим інтервалом.
  • ST_OrientedEnvelope - Доступність: 2.5.0. Повертає прямокутник з мінімальною площею, що містить геометрію.
  • ST_QuantizeCoordinates - Доступність: 2.5.0 Встановлює найменш значущі біти координат у нуль
  • ST_RastFromHexWKB - Доступність: 2.5.0 Повернути растрове значення з шестнадцяткового представлення растру Well-Known Binary (WKB).
  • ST_RastFromWKB - Доступність: 2.5.0 Повернути растрове значення з растрового файлу Well-Known Binary (WKB).
  • ST_SetBandIndex - Доступність: 2.5.0 Оновити номер зовнішнього каналу out-db
  • ST_SetBandPath - Доступність: 2.5.0 Оновлює шля та номер зовнішнього каналу out-db

Functions enhanced in PostGIS 2.5

  • ST_AsBinary/ST_AsWKB - Покращено: 2.5.0 Додано ST_AsWKB Повернути представлення растру у вигляді добре відомого бінарного коду (WKB).
  • ST_AsMVT - Покращено: 2.5.0 — додано підтримку паралельних запитів. Агрегатна функція, що повертає MVT-представлення набору рядків.
  • ST_AsText - Покращено: 2.5 — додано опційний параметр точності. Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.
  • ST_BandMetaData - Покращено: 2.5.0, додано outdbbandnum, filesize та filetimestamp для растрів outdb. Повертає основні метадані для конкретного растрового каналу. Якщо не вказано, припускається канал № 1.
  • ST_Buffer - Покращено: 2.5.0 - Підтримка геометрії ST_Buffer була покращена, щоб дозволити вказати бічне буферизування side=both|left|right. Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.
  • ST_GeomFromGeoJSON - Покращено: версія 2.5.0 тепер підтримує json та jsonb як вхідні дані. Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS
  • ST_GeometricMedian - Покращено: 2.5.0 Додано підтримку M як ваги точок. Повертає геометричну медіану MultiPoint.
  • ST_Intersects - Покращено: 2.5.0 Підтримує GEOMETRYCOLLECTION. Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_OffsetCurve - Покращено: 2.5 — додано підтримку GEOMETRYCOLLECTION та MULTILINESTRING Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії.
  • ST_Scale - Покращено: 2.5.0 додано підтримку масштабування відносно локального початку координат (параметр origin). Масштабує геометрію за заданими коефіцієнтами.
  • ST_Split - Покращено: 2.5.0 додано підтримку розділення полігону мультилінією. Повертає колекцію геометрій, створених шляхом розділення однієї геометрії іншою геометрією.
  • ST_Subdivide - Покращено: 2.5.0 повторно використовує існуючі точки при розділенні полігону, кількість вершин зменшено з 8 до 5. Обчислює прямолінійний поділ геометрії.

Functions changed in PostGIS 2.5

  • ST_GDALDrivers - Змінено: 2.5.0 — додано стовпці can_read та can_write. Повертає список растрових форматів, що підтримуються PostGIS через GDAL. Тільки формати з can_write=True можуть використовуватися ST_AsGDALRaster.

13.12.10. PostGIS Functions new or enhanced in 2.4

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 2.4

  • ST_AsGeobuf - Доступність: 2.4.0 Повернути представлення Geobuf набору рядків.
  • ST_AsMVT - Доступність: 2.4.0 Агрегатна функція, що повертає MVT-представлення набору рядків.
  • ST_AsMVTGeom - Доступність: 2.4.0 Перетворює геометрію в координатну систему плитки MVT.
  • ST_Centroid - Доступність: 2.4.0 додано підтримку географії. Повертає геометричний центр геометрії.
  • ST_ForcePolygonCCW - Доступність: 2.4.0 Всі зовнішні кільця орієнтуйте проти годинникової стрілки, а всі внутрішні кільця — за годинниковою стрілкою.
  • ST_ForcePolygonCW - Доступність: 2.4.0 Всі зовнішні кільця орієнтуйте за годинниковою стрілкою, а всі внутрішні кільця — проти годинникової стрілки.
  • ST_FrechetDistance - Availability: 2.4.0 - requires GEOS >= 3.7.0 Повертає відстань Фреше між двома геометріями.
  • ST_IsPolygonCCW - Доступність: 2.4.0 Перевіряє, чи мають полігони зовнішні кільця, орієнтовані проти годинникової стрілки, і внутрішні кільця, орієнтовані за годинниковою стрілкою.
  • ST_IsPolygonCW - Доступність: 2.4.0 Перевіряє, чи полігони мають зовнішні кільця, орієнтовані за годинниковою стрілкою, а внутрішні кільця — проти годинникової стрілки.
  • ST_MakeEmptyCoverage - Доступність: 2.4.0 Покрийте геореференційну область сіткою порожніх растрових плиток.

Functions enhanced in PostGIS 2.4

  • ST_AsTWKB - Покращено: 2.4.0 покращення пам'яті та швидкості. Повертає геометрію у вигляді TWKB, також відомого як "Tiny Well-Known Binary" (маленький добре відомий двійковий файл)
  • ST_Covers - Покращено: 2.4.0 Додано підтримку полігону в полігоні та лінії в полігоні для типу географії Перевіряє, чи кожна точка B лежить в A
  • ST_CurveToLine - Покращено: у версії 2.4.0 додано підтримку максимального відхилення та максимального кута допуску, а також симетричного виводу. Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_Project - Покращено: 2.4.0 Дозволено негативну відстань і ненормалізований азимут. Повертає точку, спроектовану від початкової точки на відстань і азимут.
  • ST_Reverse - Покращено: 2.4.0 додано підтримку кривих. Повернути геометрію з оберненим порядком вершин.

Functions changed in PostGIS 2.4

  • = - Змінено: 2.4.0, у попередніх версіях це була рівність обмежувальної рамки, а не геометрична рівність. Якщо вам потрібна рівність обмежувальної рамки, використовуйте замість цього . Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.
  • ST_Node - Змінено: 2.4.0 ця функція використовує GEOSNode внутрішньо замість GEOSUnaryUnion. Це може призвести до того, що отримані лінійні рядки матимуть інший порядок і напрямок порівняно з PostGIS < 2.4. Вузли — сукупність ліній.

13.12.11. PostGIS Functions new or enhanced in 2.3

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 2.3

  • &&&(geometry,gidx) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).
  • &&&(gidx,geometry) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.
  • &&&(gidx,gidx) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.
  • &&(box2df,box2df) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.
  • &&(box2df,geometry) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.
  • &&(geometry,box2df) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).
  • @(box2df,box2df) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.
  • @(box2df,geometry) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.
  • @(geometry,box2df) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).
  • Populate_Topology_Layer - Доступність: 2.3.0 Додає відсутні записи до таблиці topology.layer, зчитуючи метадані з таблиць topo.
  • ST_ClusterDBSCAN - Доступність: 2.3.0 Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.
  • ST_ClusterKMeans - Доступність: 2.3.0 Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.
  • ST_GeneratePoints - Доступність: 2.3.0 Генерує множину випадкових точок, що містяться в полігоні або полігоні.
  • ST_GeometricMedian - Доступність: 2.3.0 Повертає геометричну медіану MultiPoint.
  • ST_MakeLine - Доступність: 2.3.0 — додано підтримку елементів введення MultiPoint Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MinimumBoundingRadius - Доступність - 2.3.0 Повертає центр і радіус найменшого кола, що містить геометрію.
  • ST_MinimumClearance - Доступність: 2.3.0 Повертає мінімальний зазор геометрії, міру міцності геометрії.
  • ST_MinimumClearanceLine - Доступність: 2.3.0 - вимагає GEOS >= 3.6.0 Повертає двоточкову лінію LineString, що охоплює мінімальний простір геометрії.
  • ST_Normalize - Доступність: 2.3.0 Повернути геометрію в канонічній формі.
  • ST_Points - Доступність: 2.3.0 Повертає об'єкт MultiPoint, що містить координати геометрії.
  • ST_VoronoiLines - Доступність: 2.3.0 Повертає межі діаграми Вороного вершин геометрії.
  • ST_VoronoiPolygons - Доступність: 2.3.0 Повертає комірки діаграми Вороного вершин геометрії.
  • ST_WrapX - Доступність: 2.3.0 вимагає GEOS Оберніть геометрію навколо значення X.
  • TopoGeom_addElement - Доступність: 2.3 Додає елемент до визначення TopoGeometry.
  • TopoGeom_remElement - Доступність: 2.3 Видаляє елемент з визначення TopoGeometry.
  • ~(box2df,box2df) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).
  • ~(box2df,geometry) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.
  • ~(geometry,box2df) - Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN). Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).

Functions enhanced in PostGIS 2.3

  • ST_Contains - Покращено: 2.3.0 Покращення короткого замикання PIP розширено для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутнику. Перевіряє, чи кожна точка B лежить в A, і чи мають їхні внутрішні частини спільну точку
  • ST_Covers - Покращено: 2.3.0 Покращення короткого замикання PIP для геометрії, розширене для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутниках. Перевіряє, чи кожна точка B лежить в A
  • ST_Expand - Покращено: додано підтримку версії 2.3.0 для розширення поля на різну величину в різних вимірах. Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.
  • ST_Intersects - Покращено: 2.3.0 Покращення короткого замикання PIP розширено для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутнику. Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_Segmentize - Покращено: 2.3.0 Сегментація географії тепер створює підсегменти однакової довжини Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.
  • ST_Transform - Покращено: 2.3.0 додано підтримку прямого тексту PROJ.4. Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ST_Within - Покращено: 2.3.0 Покращення короткого замикання PIP для геометрії, розширене для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутниках. Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку

Functions changed in PostGIS 2.3

  • ST_PointN - Змінено: 2.3.0: доступне негативне індексування (-1 — останній пункт) Повертає N-ту точку в першому LineString або круговому LineString в геометрії.

13.12.12. PostGIS Functions new or enhanced in 2.2

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 2.2

  • <<->> - Доступність: 2.2.0. Повертає n-вимірну відстань між геометріями A і B або обмежувальними рамками
  • ST_AsEncodedPolyline - Доступність: 2.2.0 Повертає закодовану полілінію з геометрії LineString.
  • ST_AsTWKB - Доступність: 2.2.0 Повертає геометрію у вигляді TWKB, також відомого як "Tiny Well-Known Binary" (маленький добре відомий двійковий файл)
  • ST_BoundingDiagonal - Доступність: 2.2.0 Повертає діагональ обмежувального прямокутника геометрії.
  • ST_CPAWithin - Доступність: 2.2.0 Перевіряє, чи найближча точка зближення двох траєкторій знаходиться в межах заданої відстані.
  • ST_ClipByBox2D - Доступність: 2.2.0 Обчислює частину геометрії, що потрапляє в прямокутник.
  • ST_ClosestPointOfApproach - Доступність: 2.2.0 Повертає міру в найближчій точці зближення двох траєкторій.
  • ST_ClusterIntersecting - Доступність: 2.2.0 Агрегуюча функція, яка групує вхідні геометрії у зв'язані набори.
  • ST_ClusterWithin - Доступність: 2.2.0 Агрегатна функція, яка групує геометрії за відстанню розділення.
  • ST_CountAgg - Доступність: 2.2.0 Агрегат. Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню NODATA.
  • ST_CreateOverview - Доступність: 2.2.0 Створити версію заданого растрового покриття зі зниженою роздільною здатністю.
  • ST_DistanceCPA - Доступність: 2.2.0 Повертає відстань між найближчою точкою зближення двох траєкторій.
  • ST_ForceCurve - Доступність: 2.2.0 Перетворити геометрію в її вигнутий тип, якщо це можливо.
  • ST_IsValidTrajectory - Доступність: 2.2.0 Перевіряє, чи є геометрія дійсною траєкторією.
  • ST_LineFromEncodedPolyline - Доступність: 2.2.0 Створює LineString з закодованої полілінії.
  • ST_MapAlgebra (callback function version) - Доступність: 2.2.0: Можливість додавання маски Версія функції зворотного виклику - Повертає односмуговий растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.
  • ST_MemSize - Доступність: 2.2.0 Повертає обсяг простору (у байтах), який займає растр.
  • ST_RemoveRepeatedPoints - Доступність: 2.2.0 Повертає версію геометрії з видаленими дублікатами точок.
  • ST_Retile - Доступність: 2.2.0 Повернути набір налаштованих плиток з довільно розбитого на плитки растрового покриття.
  • ST_SetEffectiveArea - Доступність: 2.2.0 Встановлює ефективну площу для кожної вершини, використовуючи алгоритм Вісвалінгама-Вайатта.
  • ST_SimplifyVW - Доступність: 2.2.0 Повертає спрощене представлення геометрії, використовуючи алгоритм Вісвалінгама-Вайатта
  • ST_Subdivide - Доступність: 2.2.0 Обчислює прямолінійний поділ геометрії.
  • ST_SummaryStatsAgg - Доступність: 2.2.0 Агрегат. Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу набору растрів. Якщо діапазон не вказано, передбачається канал 1.
  • ST_SwapOrdinates - Доступність: 2.2.0 Повертає версію заданої геометрії із заміненими значеннями ординат.
  • postgis.enable_outdb_rasters - Доступність: 2.2.0 Булева опція конфігурації для увімкнення доступу до растрових смуг out-db.
  • postgis.gdal_datapath - Доступність: 2.2.0 Параметр конфігурації для призначення значення параметра GDAL_DATA GDAL. Якщо не встановлено, використовується змінна GDAL_DATA, встановлена в середовищі.
  • postgis.gdal_enabled_drivers - Доступність: 2.2.0 Параметр конфігурації для встановлення увімкнених драйверів GDAL у середовищі PostGIS. Впливає на змінну конфігурації GDAL GDAL_SKIP.
  • |=| - Доступність: 2.2.0. Повертає відстань між траєкторіями A і B у найближчій точці їх зближення.

Functions enhanced in PostGIS 2.2

  • <-> - Покращено: 2.2.0 — Поведінка True KNN («K найближчих сусідів») для геометрії та географії. Примітка: для географії KNN базується на сфері, а не на сфероїді. Повертає 2D відстань між A і B.
  • AsTopoJSON - Покращено: у версії 2.2.1 додано підтримку вхідних сигналів puntal Повертає представлення топогеометрії у форматі TopoJSON.
  • ST_Area - Покращено: 2.2.0 — вимірювання на сфероїді виконується за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0. Повертає площу полігональної геометрії.
  • ST_AsX3D - Покращено: 2.2.0: Підтримка геокоординат та перевертання осей (x/y, long/lat). Детальніше дивіться в налаштуваннях. Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_Azimuth - Покращено: вимірювання 2.2.0 на сфероїді, виконане за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0. Повертає азимут на північ від лінії між двома точками.
  • ST_Distance - Покращено: 2.2.0 — вимірювання на сфероїді виконується за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0. Повертає відстань між двома геометричними або географічними значеннями.
  • ST_Scale - Покращено: 2.2.0 додано підтримку масштабування всіх розмірів (параметр factor). Масштабує геометрію за заданими коефіцієнтами.
  • ST_Split - Покращено: 2.2.0 додано підтримку розділення лінії мультилінією, мультиточкою або (мульти)полігоном. Повертає колекцію геометрій, створених шляхом розділення однієї геометрії іншою геометрією.
  • ST_Summary - Покращено: 2.2.0 Додано підтримку TIN і кривих Повертає текстовий підсумок вмісту геометрії.

Functions changed in PostGIS 2.2

  • <-> - Змінено: 2.2.0 — Старі обхідні шляхи з гібридною синтаксичною конструкцією можуть працювати повільніше після появи справжнього KNN. Дивіться приклади нижче. Повертає 2D відстань між A і B.
  • ST_3DClosestPoint - Змінено: 2.2.0 - якщо введено 2 2D геометрії, повертається 2D точка (замість старого поведінки, що припускає 0 для відсутнього Z). У випадку 2D і 3D, Z більше не вважається 0 для відсутнього Z. Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_3DDistance - Змінено: 2.2.0 - У випадку 2D та 3D, Z більше не вважається рівним 0 для відсутнього Z. Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DLongestLine - Змінено: 2.2.0 - якщо введено 2 2D геометрії, повертається 2D точка (замість старого поведінки, що припускає 0 для відсутнього Z). У випадку 2D і 3D, Z більше не вважається 0 для відсутнього Z. Повертає найдовшу 3D лінію між двома геометріями
  • ST_3DMaxDistance - Змінено: 2.2.0 - У випадку 2D та 3D, Z більше не вважається рівним 0 для відсутнього Z. Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DShortestLine - Змінено: 2.2.0 - якщо введено 2 2D геометрії, повертається 2D точка (замість старого поведінки, що припускає 0 для відсутнього Z). У випадку 2D і 3D, Z більше не вважається 0 для відсутнього Z. Повертає найкоротшу 3D лінію між двома геометріями
  • ST_DistanceSphere - Змінено: 2.2.0 У попередніх версіях це називалося ST_Distance_Sphere Повертає мінімальну відстань у метрах між двома геометріями довготи/широти, використовуючи модель сферичної Землі.
  • ST_DistanceSpheroid - Змінено: 2.2.0 У попередніх версіях це називалося ST_Distance_Spheroid Повертає мінімальну відстань між двома геометріями lon/lat, використовуючи сфероїдальну модель Землі.
  • ST_Equals - Змінено: 2.2.0 Повертає true навіть для недійсних геометрій, якщо вони є бінарними рівними Перевіряє, чи дві геометрії містять однаковий набір точок
  • ST_LengthSpheroid - Змінено: 2.2.0 У попередніх версіях ця функція називалася ST_Length_Spheroid і мала псевдонім ST_3DLength_Spheroid Повертає 2D або 3D довжину/периметр геометрії lon/lat на сфероїді.
  • ST_MemSize - Змінено: 2.2.0 назва змінено на ST_MemSize відповідно до правил іменування. Повертає обсяг пам'яті, який займає геометрія.
  • ST_PointInsideCircle - Змінено: 2.2.0 У попередніх версіях це називалося ST_Point_Inside_Circle Перевіряє, чи геометрія точки знаходиться всередині кола, визначеного центром і радіусом
  • ValidateTopology - Змінено: 2.2.0 значення id1 та id2 були поміняні місцями для "перетину ребер вузлом" з метою узгодження з описом помилки. Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.

13.12.13. PostGIS Functions new or enhanced in 2.1

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 2.1

  • = - Доступність: 2.1.0 Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B. Використовує обмежувальну рамку подвійної точності.
  • AsTopoJSON - Доступність: 2.1.0 Повертає представлення топогеометрії у форматі TopoJSON.
  • ST_Box2dFromGeoHash - Доступність: 2.1.0 Повернути BOX2D із рядка GeoHash.
  • ST_ColorMap - Доступність: 2.1.0 Створює новий растр з максимум чотирма смугами 8BUI (відтінки сірого, RGB, RGBA) на основі вихідного растра та вказаної смуги. Якщо смуга не вказана, за замовчуванням використовується смуга 1.
  • ST_Contains - Доступність: 2.1.0 Повертає true, якщо жодна точка растра rastB не лежить зовні растра rastA і принаймні одна точка всередині rastB лежить всередині rastA.
  • ST_ContainsProperly - Доступність: 2.1.0 Повертає true, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA.
  • ST_CoveredBy - Доступність: 2.1.0 Повертає true, якщо жодна точка растра rastA не лежить за межами растра rastB.
  • ST_Covers - Доступність: 2.1.0 Повертає true, якщо жодна точка растра rastB не лежить за межами растра rastA.
  • ST_DFullyWithin - Доступність: 2.1.0 Повертає значення true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного.
  • ST_DWithin - Доступність: 2.1.0 Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного.
  • ST_DelaunayTriangles - Доступність: 2.1.0 Повертає триангуляцію Делауея вершин геометрії.
  • ST_Disjoint - Доступність: 2.1.0 Повертає true, якщо растр rastA не перетинається в просторі з rastB.
  • ST_DumpValues - Доступність: 2.1.0 Отримати значення вказаного каналу у вигляді двовимірного масиву.
  • ST_ForceSFS - Доступність: 2.1.0 Force geometries to use SFS 1.1 or 1.2 geometry types.
  • ST_FromGDALRaster - Доступність: 2.1.0 Повертає растр із підтримуваного файлу растра GDAL.
  • ST_GeomFromGeoHash - Доступність: 2.1.0 Повернути геометрію з рядка GeoHash.
  • ST_InvDistWeight4ma - Доступність: 2.1.0 Функція растрової обробки, яка інтерполює значення пікселя з сусідніх пікселів.
  • ST_MapAlgebra (callback function version) - Доступність: 2.1.0 Версія функції зворотного виклику - Повертає односмуговий растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.
  • ST_MapAlgebra (expression version) - Доступність: 2.1.0 Версія виразу — повертає одноканальний растр, заданий одним або двома вхідними растрами, індексами каналів і одним або декількома визначеними користувачем виразами SQL.
  • ST_MinConvexHull - Доступність: 2.1.0 Повернути геометрію опуклої оболонки растра, виключаючи пікселі NODATA.
  • ST_MinDist4ma - Доступність: 2.1.0 Функція обробки растру, яка повертає мінімальну відстань (у пікселях) між пікселем, що цікавить, та сусіднім пікселем із значенням.
  • ST_NearestValue - Доступність: 2.1.0 Повертає найближче значення, яке не є NODATA, пікселя заданого діапазону, визначеного стовпцем x і рядком y, або геометричної точки, вираженої в тій самій системі координат просторової прив'язки, що й растр.
  • ST_Neighborhood - Доступність: 2.1.0 Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр.
  • ST_NotSameAlignmentReason - Доступність: 2.1.0 Повертає текст, що вказує, чи вирівняні растри, а якщо ні, то причину цього.
  • ST_Overlaps - Доступність: 2.1.0 Повертає true, якщо растри rastA і rastB перетинаються, але один не повністю містить інший.
  • ST_PixelAsCentroid - Доступність: 2.1.0 Повертає центроїд (точкову геометрію) області, представленої пікселем.
  • ST_PixelAsCentroids - Доступність: 2.1.0 Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.
  • ST_PixelAsPoint - Доступність: 2.1.0 Повертає геометрію точки верхнього лівого кута пікселя.
  • ST_PixelAsPoints - Доступність: 2.1.0 Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.
  • ST_PixelOfValue - Доступність: 2.1.0 Отримати координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку.
  • ST_PointFromGeoHash - Доступність: 2.1.0 Повернути точку з рядка GeoHash.
  • ST_RasterToWorldCoord - Доступність: 2.1.0 Повертає верхній лівий кут растра у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Стовпець та рядок починаються з 1.
  • ST_Resize - Доступність: 2.1.0 Вимагає GDAL 1.6.1+ Змінити розмір растру до нової ширини/висоти
  • ST_Roughness - Доступність: 2.1.0 Повертає растр з обчисленою "шорсткістю" цифрової моделі рельєфу (DEM).
  • ST_SetValues - Доступність: 2.1.0 Повертає змінений растр, отриманий в результаті встановлення значень заданого каналу.
  • ST_Simplify - Доступність: 2.1.0 Повертає "спрощену" версію геометрії заданої TopoGeometry за допомогою алгоритму Дугласа-Пеукера.
  • ST_Summary - Доступність: 2.1.0 Повертає текстовий підсумок вмісту растру.
  • ST_TPI - Доступність: 2.1.0 Повертає растр з обчисленим індексом топографічного положення.
  • ST_TRI - Доступність: 2.1.0 Повертає растр з обчисленим індексом нерівності рельєфу.
  • ST_Tile - Доступність: 2.1.0 Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.
  • ST_Touches - Доступність: 2.1.0 Повертає true, якщо растрові зображення rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються.
  • ST_Union - Доступність: 2.1.0 Введено варіант ST_Union(rast, unionarg). Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • ST_Within - Доступність: 2.1.0 Повертає true, якщо жодна точка растра rastA не лежить зовні растра rastB і принаймні одна точка всередині rastA лежить всередині rastB.
  • ST_WorldToRasterCoord - Доступність: 2.1.0 Повертає верхній лівий кут як стовпець і рядок, задані геометричними координатами X і Y (довгота і широта) або геометрією точки, вираженою в системі координат просторової прив'язки растру.
  • UpdateRasterSRID - Доступність: 2.1.0 Змінити SRID всіх растрів у вказаній користувачем колонці та таблиці.
  • clearTopoGeom - Доступність: 2.1 Очищає вміст геометрії топографії.
  • postgis_sfcgal_version - Доступність: 2.1.0 Повертає версію SFCGAL, що використовується

Functions enhanced in PostGIS 2.1

  • ST_AddBand - Покращено: додано підтримку addbandarg 2.1.0. Повертає растр з новим каналом (каналами) заданого типу, доданим із заданим початковим значенням у заданому місці індексу. Якщо індекс не вказано, діапазон додається в кінець.
  • ST_AddBand - Покращено: додано підтримку 2.1.0 для нових діапазонів out-db. Повертає растр з новим каналом (каналами) заданого типу, доданим із заданим початковим значенням у заданому місці індексу. Якщо індекс не вказано, діапазон додається в кінець.
  • ST_AsBinary/ST_AsWKB - Покращено: 2.1.0 Додано outasin Повернути представлення растру у вигляді добре відомого бінарного коду (WKB).
  • ST_AsGML - Покращено: 2.1.0 Додано підтримку ідентифікаторів для GML 3. Повернути геометрію як елемент GML версії 2 або 3.
  • ST_Aspect - Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональний параметр функції interpolate_nodata Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.
  • ST_Boundary - Покращено: 2.1.0 додано підтримку Triangle Повертає межі геометрії.
  • ST_Clip - Покращено: 2.1.0 Переписано на C Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.
  • ST_DWithin - Покращено: 2.1.0 покращено швидкість роботи з географією. Детальніше див. Пришвидшення роботи з географією. Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної
  • ST_DWithin - Покращено: 2.1.0 додано підтримку кривих геометрій. Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної
  • ST_Distance - Покращено: 2.1.0 покращено швидкість роботи з географією. Детальніше див. Пришвидшення роботи з географією. Повертає відстань між двома геометричними або географічними значеннями.
  • ST_Distance - Покращено: 2.1.0 — додано підтримку кривих геометрій. Повертає відстань між двома геометричними або географічними значеннями.
  • ST_Distinct4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растру, яка обчислює кількість унікальних значень у сусідніх пікселях.
  • ST_DumpPoints - Покращено: 2.1.0 Вища швидкість. Перероблено як native-C. Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_HillShade - Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональний параметр функції interpolate_nodata Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.
  • ST_MakeValid - Enhanced: 2.1.0, added support for GEOMETRYCOLLECTION and MULTIPOINT. Attempts to make an invalid geometry valid without losing vertices.
  • ST_Max4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растру, яка обчислює максимальне значення пікселя в околиці.
  • ST_Mean4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растру, яка обчислює середнє значення пікселя в оточенні.
  • ST_Min4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растру, яка обчислює мінімальне значення пікселя в оточенні.
  • ST_PixelAsPolygons - Покращено: 2.1.0 додано опціональний аргумент exclude_nodata_value. Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.
  • ST_Polygon - Покращено: 2.1.0 Покращена швидкість (повністю на основі C) та гарантована валідність поверненого багатокутника. Повертає багатокутну геометрію, утворену об'єднанням пікселів, значення яких не дорівнює нулю. Якщо номер каналу не вказано, за замовчуванням використовується 1.
  • ST_Range4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растру, яка обчислює діапазон значень у сусідніх пікселях.
  • ST_SameAlignment - Покращено: 2.1.0 додавання варіанту Aggregate Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.
  • ST_Segmentize - Покращено: 2.1.0 додано підтримку географії. Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.
  • ST_SetGeoReference - Покращено: 2.1.0 Додано варіант ST_SetGeoReference(raster, double precision, ...) Встановити геореференцію 6 параметрів геореференції в одному виклику. Числа слід розділяти пробілами. Приймає вхідні дані у форматі GDAL або ESRI. За замовчуванням використовується GDAL.
  • ST_SetValue - Покращено: 2.1.0 Варіант геометрії ST_SetValue() тепер підтримує будь-який тип геометрії, а не тільки точку. Варіант геометрії є обгорткою навколо варіанту geomval[] функції ST_SetValues() Повертає модифікований растр, отриманий в результаті встановлення значення заданого каналу в заданому стовпці x, рядку y пікселя або пікселів, що перетинають певну геометрію. Номери каналів починаються з 1 і, якщо не вказано інше, приймаються за 1.
  • ST_Slope - Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональні параметри функції units, scale, interpolate_nodata Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.
  • ST_StdDev4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растра, яка обчислює стандартне відхилення значень сусідніх пікселів.
  • ST_Sum4ma - Покращено: 2.1.0 Додано варіант 2 Функція обробки растру, яка обчислює суму всіх значень сусідніх пікселів.
  • ST_Summary - Покращено: 2.1.0 Прапор S для позначення наявності відомої системи просторових координат Повертає текстовий підсумок вмісту геометрії.
  • ST_Transform - Покращено: 2.1.0 Додано варіант ST_Transform(rast, alignto) Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм передискретизації. Доступні опції: NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Union - Покращено: 2.1.0 Покращена швидкість (повністю на базі C). Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • ST_Union - Покращено: 2.1.0 ST_Union(rast) (варіант 1) об'єднує всі канали всіх вхідних растрів. Попередні версії PostGIS використовували першу канал. Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • ST_Union - Покращено: 2.1.0 ST_Union(rast, uniontype) (варіант 4) об'єднує всі канали всіх вхідних растрів. Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • toTopoGeom - Покращено: у версії 2.1.0 додано версію, що використовує існуючу TopoGeometry. Перетворює просту геометрію в топологічну геометрію.

Functions changed in PostGIS 2.1

  • ST_Aspect - Змінено: 2.1.0 У попередніх версіях значення повороту були в радіанах. Тепер значення повороту за замовчуванням в градусах Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.
  • ST_EstimatedExtent - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Estimated_Extent. Повертає приблизний діапазон просторової таблиці.
  • ST_Force2D - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_2D. Примусово переведіть геометрії в "2-вимірний режим".
  • ST_Force3D - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_3D. Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DM - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_3DM. Примусово перевести геометрії в режим XYM.
  • ST_Force3DZ - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_3DZ. Примусово перевести геометрії в режим XYZ.
  • ST_Force4D - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_4D. Примусово перевести геометрії в режим XYZM.
  • ST_ForceCollection - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Force_Collection. Перетворити геометрію в GEOMETRYCOLLECTION.
  • ST_HillShade - Змінено: 2.1.0 У попередніх версіях азимут і висота виражалися в радіанах. Тепер азимут і висота виражаються в градусах Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.
  • ST_LineInterpolatePoint - Змінено: 2.1.0. До версії 2.0.x ця функція називалася ST_Line_Interpolate_Point. Повертає точку, інтерпольовану вздовж лінії в дробовому місці.
  • ST_LineLocatePoint - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Line_Locate_Point. Повертає дробове значення відстані найближчої точки на лінії до заданої точки.
  • ST_LineSubstring - Змінено: 2.1.0. До версії 2.0.x це називалося ST_Line_Substring. Повертає частину лінії між двома дробовими позиціями.
  • ST_PixelAsCentroids - Змінено: 2.1.1 Змінено поведінку exclude_nodata_value. Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.
  • ST_PixelAsPoints - Змінено: 2.1.1 Змінено поведінку exclude_nodata_value. Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.
  • ST_PixelAsPolygons - Змінено: 2.1.1 Змінено поведінку exclude_nodata_value. Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.
  • ST_Polygon - Змінено: 2.1.0 У попередніх версіях іноді повертався полігон, змінено на завжди повертати мультиполігон. Повертає багатокутну геометрію, утворену об'єднанням пікселів, значення яких не дорівнює нулю. Якщо номер каналу не вказано, за замовчуванням використовується 1.
  • ST_RasterToWorldCoordX - Змінено: 2.1.0 У попередніх версіях це називалося ST_Raster2WorldCoordX. Повертає геометричну координату X у верхньому лівому куті растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.
  • ST_RasterToWorldCoordY - Змінено: 2.1.0 У попередніх версіях це називалося ST_Raster2WorldCoordY Повертає геометричну координату Y верхнього лівого кута растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.
  • ST_Rescale - Змінено: 2.1.0 Працює з растрами без SRID Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.
  • ST_Reskew - Змінено: 2.1.0 Працює з растрами без SRID Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Segmentize - Змінено: 2.1.0 В результаті впровадження підтримки географії використання ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5) спричиняє помилку неоднозначної функції. Вхідні дані потрібно правильно вказати як геометрію або географію. Використовуйте ST_GeomFromText, ST_GeogFromText або перетворення до необхідного типу (наприклад, ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) ) Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.
  • ST_Slope - Змінено: 2.1.0 У попередніх версіях значення повороту були в радіанах. Тепер значення повороту за замовчуванням в градусах Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.
  • ST_SnapToGrid - Змінено: 2.1.0 Працює з растрами без SRID Виконує ресемплінг растра, прив'язавши його до сітки. Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_WorldToRasterCoordX - Змінено: 2.1.0 У попередніх версіях це називалося ST_World2RasterCoordX Повертає стовпець у растрі геометрії точки (pt) або світові координати X та Y (xw, yw), представлені у світовій просторовій системі відліку растру.
  • ST_WorldToRasterCoordY - Змінено: 2.1.0 У попередніх версіях це називалося ST_World2RasterCoordY Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw), представлені у світовій просторовій системі координат растра.

13.12.14. PostGIS Functions new or enhanced in 2.0

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 2.0

  • && - Доступність: 2.0.0 Повертає TRUE, якщо обмежувальна рамка A перетинається з обмежувальною рамкою B.
  • &&& - Доступність: 2.0.0 Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.
  • <#> - Доступність: 2.0.0. Повертає 2D відстань між обмежувальними рамками A і B.
  • <-> - Доступність: 2.0.0 — Слабкий KNN надає найближчих сусідів на основі геометричних відстаней до центроїдів, а не реальних відстаней. Точні результати для точок, неточні для всіх інших типів. Повертає 2D відстань між A і B.
  • @ - Доступність: 2.0.0 растр @ растр, растр @ геометрія введено Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B. Використовує обмежувальну рамку подвійної точності.
  • @ - Доступність: 2.0.5 геометрія @ растр введена Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B. Використовує обмежувальну рамку подвійної точності.
  • AddEdge - Доступність: 2.0.0 Додає лінійний край до таблиці країв ребер та пов'язані початкові та кінцеві точки до таблиці вузлів точок заданої топологічної схеми, використовуючи задану геометрію лінійного ребра, та повертає ідентифікатор нового (або існуючого) ребра.
  • AddFace - Доступність: 2.0.0 Реєструє примітив грані в топології та отримує його ідентифікатор.
  • AddNode - Доступність: 2.0.0 Додає точковий вузол до таблиці вузлів у вказаній схемі топології та повертає ідентифікатор нового вузла. Якщо точка вже існує як вузол, повертається існуючий ідентифікатор вузла.
  • AddOverviewConstraints - Доступність: 2.0.0 Позначте стовпець растрових даних як огляд іншого стовпця.
  • AddRasterConstraints - Доступність: 2.0.0 Додає обмеження растру до завантаженої таблиці растру для певного стовпця, що обмежує просторове посилання, масштабування, розмір блоку, вирівнювання, смуги, тип смуги та прапорець, що позначає, чи стовпець растру регулярно блокується. Таблиця повинна бути завантажена даними, щоб обмеження могли бути виведені. Повертає значення true, якщо налаштування обмеження було виконано, і видає повідомлення в іншому випадку.
  • AsGML - Доступність: 2.0.0 Повертає GML-представлення топогеометрії.
  • CopyTopology - Доступність: 2.0.0 Створює копію топології (вузлів, ребер, граней, шарів і TopoGeometries) у новій схемі
  • DropOverviewConstraints - Доступність: 2.0.0 Зніміть позначку стовпця растрового зображення, щоб він не був представленням іншого.
  • DropRasterConstraints - Доступність: 2.0.0 Видаляє обмеження PostGIS растра, які посилаються на стовпець таблиці растра. Корисно, якщо потрібно перезавантажити дані або оновити дані стовпця растра.
  • GetEdgeByPoint - Доступність: 2.0.0 Знаходить ідентифікатор ребра, яке перетинає задану точку.
  • GetFaceByPoint - Доступність: 2.0.0 Знаходить грань, що перетинає задану точку.
  • GetNodeByPoint - Доступність: 2.0.0 Знаходить ідентифікатор вузла в точці.
  • GetNodeEdges - Доступність: 2.0 Повертає впорядкований набір ребер, що прилягають до заданого вузла.
  • GetRingEdges - Доступність: 2.0.0 Повертає впорядкований набір ідентифікаторів підписаних ребер, зустрітих при проходженні по заданій стороні ребра.
  • GetTopoGeomElements - Доступність: 2.0.0 Повертає набір об'єктів topoelement, що містять топологічні element_id,element_type заданої TopoGeometry (примітивні елементи).
  • GetTopologySRID - Доступність: 2.0.0 Повертає SRID топології в таблиці topology.topology, задавши ім'я топології.
  • Polygonize - Доступність: 2.0.0 Знаходить і реєструє всі грані, визначені краями топології.
  • ST_3DClosestPoint - Доступність: 2.0.0 Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_3DDFullyWithin - Доступність: 2.0.0 Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_3DDWithin - Доступність: 2.0.0 Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDistance - Доступність: 2.0.0 Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DIntersects - Доступність: 2.0.0 Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLongestLine - Доступність: 2.0.0 Повертає найдовшу 3D лінію між двома геометріями
  • ST_3DMaxDistance - Доступність: 2.0.0 Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DShortestLine - Доступність: 2.0.0 Повертає найкоротшу 3D лінію між двома геометріями
  • ST_AddEdgeModFace - Доступність: 2.0 Додайте нову кромку і, якщо при цьому розділяється грань, змініть вихідну грань і додайте нову.
  • ST_AddEdgeNewFaces - Доступність: 2.0 Додайте нову ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими.
  • ST_AsGDALRaster - Доступність: 2.0.0 — вимагає GDAL >= 1.6.0. Повертає растрову плитку у визначеному форматі GDAL Raster. Растрові формати є одними з тих, що підтримуються вашою скомпільованою бібліотекою. Використовуйте ST_GDALDrivers(), щоб отримати список форматів, що підтримуються вашою бібліотекою.
  • ST_AsJPEG - Доступність: 2.0.0 — вимагає GDAL >= 1.6.0. Повертає вибрані канали растрової плитки як одне зображення у форматі Joint Photographic Exports Group (JPEG) (масив байтів). Якщо канал не вказаний і є 1 або більше 3 каналів, то використовується тільки перший канал. Якщо є тільки 3 канали, то використовуються всі 3 канали і відображаються у форматі RGB.
  • ST_AsLatLonText - Доступність: 2.0 Повернути представлення градусів, хвилин, секунд заданої точки.
  • ST_AsPNG - Доступність: 2.0.0 — вимагає GDAL >= 1.6.0. уПовертає вибрані канали растрової плитки як одне зображення у форматі PNG (масив байтів). Якщо в растрі вказано 1, 3 або 4 канали і не вказано жодного каналу, то використовуються всі канали. Якщо вказано більше 2 або більше 4 каналів і не вказано жодного каналу, то використовується тільки канал 1. Канали відображаються в просторі RGB або RGBA.
  • ST_AsRaster - Доступність: 2.0.0 — вимагає GDAL >= 1.6.0. Перетворює геометрію PostGIS у растр PostGIS.
  • ST_AsTIFF - Доступність: 2.0.0 — вимагає GDAL >= 1.6.0. Повертає вибрані канали растра як одне зображення TIFF (масив байтів). Якщо канал не вказана або будь-яка із вказаних смуг не існує в растрі, то буде зроблена спроба використати всі канали.
  • ST_AsX3D - Доступність: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_Aspect - Доступність: 2.0.0 Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.
  • ST_Band - Доступність: 2.0.0 Повертає один або декілька каналів існуючого растру як новий растр. Корисно для створення нових растрів на основі існуючих.
  • ST_BandIsNoData - Доступність: 2.0.0 Повертає значення true, якщо канал заповнений тільки значеннями nodata.
  • ST_Clip - Доступність: 2.0.0 Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.
  • ST_CollectionHomogenize - Доступність: 2.0.0 Повертає найпростіше представлення колекції геометрії.
  • ST_ConcaveHull - Доступність: 2.0.0 Обчислює можливу увігнуту геометрію, яка містить усі вершини вхідної геометрії
  • ST_Count - Доступність: 2.0.0 Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню nodata.
  • ST_CreateTopoGeo - Доступність: 2.0 Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність операції.
  • ST_Distinct4ma - Доступність: 2.0.0 Функція обробки растру, яка обчислює кількість унікальних значень у сусідніх пікселях.
  • ST_FlipCoordinates - Доступність: 2.0.0 Повертає версію геометрії з перевернутими осями X та Y.
  • ST_GDALDrivers - Доступність: 2.0.0 — вимагає GDAL >= 1.6.0. Повертає список растрових форматів, що підтримуються PostGIS через GDAL. Тільки формати з can_write=True можуть використовуватися ST_AsGDALRaster.
  • ST_GeomFromGeoJSON - Доступність: 2.0.0 вимагає - JSON-C >= 0.9 Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS
  • ST_GetFaceEdges - Доступність: 2.0 Повертає набір впорядкованих ребер, що обмежують aface.
  • ST_HasNoBand - Доступність: 2.0.0 Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.
  • ST_HillShade - Доступність: 2.0.0 Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.
  • ST_Histogram - Доступність: 2.0.0 Повертає набір записів, що підсумовують розподіл даних растрового або растрового покриття за окремими діапазонами бінів. Кількість бінів обчислюється автоматично, якщо не вказано інше.
  • ST_InterpolatePoint - Доступність: 2.0.0 Повертає інтерпольоване значення геометрії, найближчої до точки.
  • ST_IsEmpty - Доступність: 2.0.0 Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.
  • ST_IsValidDetail - Доступність: 2.0.0 Повертає рядок valid_detail, в якому вказано, чи є геометрія дійсною, а якщо ні, то причина та місце розташування.
  • ST_IsValidReason - Availability: 2.0 version taking flags. Returns text stating if a geometry is valid, or a reason for invalidity.
  • ST_MakeLine - Доступність: 2.0.0 - Додано підтримку елементів введення LineString Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MakeValid - Доступність: 2.0.0 Attempts to make an invalid geometry valid without losing vertices.
  • ST_MapAlgebraExpr - Доступність: 2.0.0 Версія з 1 растровим каналом: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до вхідного растрового каналу та наданого типу пікселів. Якщо діапазон не вказано, передбачається діапазон 1.
  • ST_MapAlgebraExpr - Доступність: 2.0.0 2-канальна версія растра: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох вхідних растрових каналів та наданого типу пікселів. Якщо номери каналів не вказані, то за замовчуванням використовується канал 1 кожного растру. Результуючий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром, а його розмір буде визначений параметром "extenttype". Значення для "extenttype" можуть бути: INTERSECTION, UNION, FIRST, SECOND.
  • ST_MapAlgebraFct - Доступність: 2.0.0 Версія з 1 каналом - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до вхідного каналу растра та наданого типу пікселів. Якщо канал не вказаний, передбачається канал 1.
  • ST_MapAlgebraFct - Доступність: 2.0.0 2-канальна версія - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до 2 вхідних каналів растра та наданого типу пікселів. Якщо канал не вказано, то за замовчуванням використовується канал 1. Тип розширення за замовчуванням - INTERSECTION, якщо не вказано інше.
  • ST_MapAlgebraFctNgb - Доступність: 2.0.0 1-канальна версія: Map Algebra Nearest Neighbor з використанням визначеної користувачем функції PostgreSQL. Повертає растр, значення якого є результатом функції користувача PLPGSQL, що включає сусідство значень із вхідної каналу растра.
  • ST_Max4ma - Доступність: 2.0.0 Функція обробки растру, яка обчислює максимальне значення пікселя в околиці.
  • ST_Mean4ma - Доступність: 2.0.0 Функція обробки растру, яка обчислює середнє значення пікселя в оточенні.
  • ST_Min4ma - Доступність: 2.0.0 Функція обробки растру, яка обчислює мінімальне значення пікселя в оточенні.
  • ST_ModEdgeHeal - Доступність: 2.0 Виправляє двa ребра, видаляючи вузол, що їх з'єднує, змінюючи перше ребро та видаляючи друге ребро. Повертає ідентифікатор видаленого вузла.
  • ST_MoveIsoNode - Доступність: 2.0.0 Переміщує ізольований вузол у топології з однієї точки в іншу. Якщо нова геометрія apoint існує як вузол, виникає помилка. Повертає опис переміщення.
  • ST_NewEdgeHeal - Доступність: 2.0 Відновлює два ребра, видаляючи вузол, що їх з'єднує, видаляючи обидва ребра та замінюючи їх ребром, напрямок якого збігається з напрямком першого наданого ребра.
  • ST_Node - Доступність: 2.0.0 Вузли — сукупність ліній.
  • ST_NumPatches - Доступність: 2.0.0 Returns the number of faces in a PolyhedralSurface or TIN.
  • ST_OffsetCurve - Доступність: 2.0 Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії.
  • ST_PatchN - Доступність: 2.0.0 Returns the Nth face of a PolyhedralSurface or TIN.
  • ST_Perimeter - Доступність 2.0.0: додано підтримку географії Повертає довжину межі полігональної геометрії або географії.
  • ST_PixelAsPolygon - Доступність: 2.0.0 Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.
  • ST_PixelAsPolygons - Доступність: 2.0.0 Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.
  • ST_Project - Доступність: 2.0.0 Повертає точку, спроектовану від початкової точки на відстань і азимут.
  • ST_Quantile - Доступність: 2.0.0 Обчислюйте квантилі для покриття растрового зображення або растрової таблиці в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растрового зображення.
  • ST_Range4ma - Доступність: 2.0.0 Функція обробки растру, яка обчислює діапазон значень у сусідніх пікселях.
  • ST_Reclass - Доступність: 2.0.0 Створює новий растр, складений з типів каналів, перекласифікованих з оригінальних. nband — це канал, який буде змінена. Якщо nband не вказано, вважається, що він дорівнює 1. Всі інші канали повертаються без змін. Приклад використання: перетворення каналу 16BUI на 8BUI і так далі для спрощення візуалізації у вигляді форматів, придатних для перегляду.
  • ST_RelateMatch - Доступність: 2.0.0 Перевіряє, чи відповідає матриця перетину DE-9IM шаблону матриці перетину
  • ST_RemEdgeModFace - Доступність: 2.0 Видаляє ребро, і якщо ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох.
  • ST_RemEdgeNewFace - Доступність: 2.0 Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.
  • ST_Resample - Доступність: 2.0.0 Вимагає GDAL 1.6.1+ Передискретизуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри, довільний кут сітки та набір атрибутів геореференціювання растра, визначених або запозичених з іншого растра.
  • ST_Rescale - Доступність: 2.0.0 Вимагає GDAL 1.6.1+ Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.
  • ST_Reskew - Доступність: 2.0.0 Вимагає GDAL 1.6.1+ Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_SameAlignment - Доступність: 2.0.0 Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.
  • ST_SetBandIsNoData - Доступність: 2.0.0 Встановлює прапор isnodata каналу на TRUE.
  • ST_SharedPaths - Доступність: 2.0.0 Повертає колекцію, що містить шляхи, спільні для двох вхідних ліній/мультиліній.
  • ST_Slope - Доступність: 2.0.0 Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.
  • ST_Snap - Доступність: 2.0.0 Прив'язати сегменти та вершини вхідної геометрії до вершин еталонної геометрії.
  • ST_SnapToGrid - Доступність: 2.0.0 Вимагає GDAL 1.6.1+ Виконує ресемплінг растра, прив'язавши його до сітки. Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_Split - Доступність: 2.0.0 вимагає GEOS Повертає колекцію геометрій, створених шляхом розділення однієї геометрії іншою геометрією.
  • ST_StdDev4ma - Доступність: 2.0.0 Функція обробки растра, яка обчислює стандартне відхилення значень сусідніх пікселів.
  • ST_Sum4ma - Доступність: 2.0.0 Функція обробки растру, яка обчислює суму всіх значень сусідніх пікселів.
  • ST_SummaryStats - Доступність: 2.0.0 Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, то вважається, що це канал 1.
  • ST_Transform - Доступність: 2.0.0 Вимагає GDAL 1.6.1+ Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм передискретизації. Доступні опції: NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos. За замовчуванням використовується NearestNeighbor.
  • ST_UnaryUnion - Доступність: 2.0.0 Обчислює об'єднання компонентів однієї геометрії.
  • ST_Union - Доступність: 2.0.0 Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.
  • ST_ValueCount - Доступність: 2.0.0 Повертає набір записів, що містять значення піксельної смуги та кількість пікселів у заданому каналі растра (або растрового покриття), які мають заданий набір значень. Якщо канал не вказана, за замовчуванням використовується смуга 1. За замовчуванням пікселі з значенням nodata не враховуються. Виводяться всі інші значення пікселя, а значення пікселя каналу округлюються до найближчого цілого числа.
  • TopoElementArray_Agg - Доступність: 2.0.0 Повертає topoelementarray для набору масивів element_id, type (topoelements).
  • TopoGeo_AddLineString - Доступність: 2.0.0 Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.
  • TopoGeo_AddPoint - Доступність: 2.0.0 Додає точку до існуючої топології, використовуючи допуск і, можливо, розділяючи існуюче ребро.
  • TopoGeo_AddPolygon - Доступність: 2.0.0 Додає полігон до існуючої топології, використовуючи допуск і, можливо, розділяючи існуючі ребра/грані. Повертає ідентифікатори граней.
  • TopologySummary - Доступність: 2.0.0 Бере ім'я топології та надає підсумкові суми типів об'єктів у топології.
  • toTopoGeom - Доступність: 2.0 Перетворює просту геометрію в топологічну геометрію.
  • ~ - Доступність: 2.0.0 Повертає TRUE, якщо обмежувальна рамка A містить B. Використовує обмежувальну рамку подвійної точності.
  • ~= - Доступність: 2.0.0 Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

Functions enhanced in PostGIS 2.0

  • && - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.
  • AddGeometryColumn - Покращено: 2.0.0 Додано аргумент use_typmod. За замовчуванням створюється стовпець геометрії typmod замість стовпця на основі обмежень. Додає стовпець геометрії до існуючої таблиці.
  • Box2D - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає BOX2D, що представляє 2D розмір геометрії.
  • Box3D - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає BOX3D, що представляє 3D-розмір геометрії.
  • CreateTopology - Покращено: у версії 2.0 додано підтримку hasZ. Створює нову схему топології та реєструє її в таблиці topology.topology.
  • GeometryType - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає тип геометрії у вигляді тексту.
  • Populate_Geometry_Columns - Покращено: 2.0.0 use_typmod додано опціональний аргумент, який дозволяє контролювати, чи створюються стовпці з типовими модифікаторами або з перевірками обмежень. Забезпечує, щоб стовпці геометрії були визначені з модифікаторами типу або мали відповідні просторові обмеження.
  • ST_3DExtent - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_Affine - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Застосувати афінне перетворення 3D до геометрії.
  • ST_Area - Покращено: 2.0.0 - додано підтримку 2D багатогранних поверхонь. Повертає площу полігональної геометрії.
  • ST_AsBinary - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsBinary - Покращено: 2.0.0 додано підтримку вищих розмірностей координат. Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsBinary - Покращено: 2.0.0 додано підтримку вказання ендіанності для географічних даних. Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsEWKB - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.
  • ST_AsEWKT - Покращено: 2.0.0 додано підтримку географії, багатогранних поверхонь, трикутників і TIN. Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsGML - Покращено: додано підтримку префікса 2.0.0. Додано опцію 4 для GML3, що дозволяє використовувати тег LineString замість Curve для ліній. Додано підтримку GML3 для багатогранних поверхонь і TINS. Додано опцію 32 для виведення прямокутника. Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsKML - Покращено: 2.0.0 - Додано префікс простору імен, використання аргументів за замовчуванням та іменованих аргументів Повернути геометрію як елемент KML.
  • ST_Azimuth - Покращено: 2.0.0 додано підтримку географії. Повертає азимут на північ від лінії між двома точками.
  • ST_Dimension - Покращено: 2.0.0 додано підтримку багатогранних поверхонь і TIN. Більше не виникає виняток, якщо задано порожню геометрію. Повертає топологічну розмірність геометрії.
  • ST_Dump - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає набір рядків geometry_dump для компонентів геометрії.
  • ST_DumpPoints - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_Expand - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.
  • ST_Extent - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Агрегатна функція, яка повертає обмежувальну рамку геометрій.
  • ST_Force2D - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Примусово переведіть геометрії в "2-вимірний режим".
  • ST_Force3D - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.
  • ST_Force3DZ - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Примусово перевести геометрії в режим XYZ.
  • ST_ForceCollection - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Перетворити геометрію в GEOMETRYCOLLECTION.
  • ST_ForceRHR - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.
  • ST_GMLToSQL - Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN. Returns a geometry from GML. Alias for ST_GeomFromGML.
  • ST_GMLToSQL - Покращено: 2.0.0 додано опціональний параметр srid за замовчуванням. Returns a geometry from GML. Alias for ST_GeomFromGML.
  • ST_GeomFromEWKB - Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN. Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).
  • ST_GeomFromEWKT - Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN. Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).
  • ST_GeomFromGML - Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN. Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeomFromGML - Покращено: 2.0.0 додано опціональний параметр srid за замовчуванням. Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeometryN - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повернути елемент колекції геометрії.
  • ST_GeometryType - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Повертає тип SQL-MM геометрії у вигляді тексту.
  • ST_IsClosed - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).
  • ST_MakeEnvelope - Покращено: 2.0: Додано можливість вказати конверт без вказання SRID. Створює прямокутний полігон з мінімальних і максимальних координат.
  • ST_MakeValid - Enhanced: 2.0.1, speed improvements Attempts to make an invalid geometry valid without losing vertices.
  • ST_NPoints - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Повертає кількість точок (вершин) у геометрії.
  • ST_NumGeometries - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Повертає кількість елементів у колекції геометрії.
  • ST_Relate - Покращено: 2.0.0 — додано підтримку для визначення правила граничного вузла. Перевіряє, чи дві геометрії мають топологічний зв'язок, що відповідає шаблону матриці перетину, або обчислює їх матрицю перетину
  • ST_Rotate - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Обертає геометрію навколо точки початку координат.
  • ST_Rotate - Покращено: 2.0.0 додано додаткові параметри для визначення початку обертання. Обертає геометрію навколо точки початку координат.
  • ST_RotateX - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Обертає геометрію навколо осі X.
  • ST_RotateY - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Обертає геометрію навколо осі Y.
  • ST_RotateZ - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Обертає геометрію навколо осі Z.
  • ST_Scale - Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN. Масштабує геометрію за заданими коефіцієнтами.
  • ST_ShiftLongitude - Покращено: 2.0.0 додано підтримку багатогранних поверхонь та TIN. Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.
  • ST_Summary - Покращено: у версії 2.0.0 додано підтримку географії Повертає текстовий підсумок вмісту геометрії.
  • ST_Transform - Покращено: 2.0.0 додано підтримку багатогранних поверхонь. Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ST_Value - Покращено: 2.0.0 додано опціональний аргумент exclude_nodata_value. Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.
  • ValidateTopology - Покращено: 2.0.0 більш ефективне виявлення перетину ребер та виправлення помилок, що були присутні в попередніх версіях. Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.

Functions changed in PostGIS 2.0

  • AddGeometryColumn - Змінено: 2.0.0 Ця функція більше не оновлює geometry_columns, оскільки geometry_columns є поданням, яке зчитує дані з системних каталогів. За замовчуванням вона також не створює обмежень, а замість цього використовує вбудовану поведінку модифікатора типу PostgreSQL. Наприклад, створення стовпця wgs84 POINT за допомогою цієї функції тепер еквівалентно: ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326); Додає стовпець геометрії до існуючої таблиці.
  • AddGeometryColumn - Змінено: 2.0.0 Якщо вам потрібна стара поведінка обмежень, використовуйте стандартне значення use_typmod, але встановіть його на false. Додає стовпець геометрії до існуючої таблиці.
  • AddGeometryColumn - Змінено: 2.0.0 Види більше не можна реєструвати вручну в geometry_columns, однак види, побудовані на основі геометрій таблиць типу typmod і використовувані без функцій-обгортки, реєструватимуться правильно, оскільки вони успадковують поведінку типу typmod стовпця батьківської таблиці. Види, які використовують функції геометрії, що виводять інші геометрії, потрібно буде перетворити на геометрії типу typmod, щоб ці стовпці геометрії виду були зареєстровані правильно в geometry_columns. Див. . Додає стовпець геометрії до існуючої таблиці.
  • Box3D - Змінено: 2.0.0 У версіях до 2.0 замість box3d використовувався box2d. Оскільки box2d є застарілим типом, його було змінено на box3d. Повертає 3D-представлення обмежувальної рамки растра.
  • DropGeometryColumn - Changed: 2.0.0. Retained for backward compatibility after geometry_columns became a view of the system catalogs. Видаляє стовпець геометрії з просторової таблиці.
  • DropGeometryTable - Changed: 2.0.0. Retained for backward compatibility after geometry_columns became a view of the system catalogs. Видаляє таблицю та всі її посилання в geometry_columns.
  • Populate_Geometry_Columns - Змінено: 2.0.0 За замовчуванням тепер для обмеження типів геометрії використовуються модифікатори типів замість обмежень перевірки. Ви все ще можете використовувати поведінку обмежень перевірки, використовуючи новий параметр use_typmod і встановивши його значення false. Забезпечує, щоб стовпці геометрії були визначені з модифікаторами типу або мали відповідні просторові обмеження.
  • ST_3DExtent - Змінено: 2.0.0 У попередніх версіях це називалося ST_Extent3D Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DLength - Змінено: 2.0.0 У попередніх версіях це називалося ST_Length3D Повертає 3D довжину лінійної геометрії.
  • ST_3DMakeBox - Змінено: 2.0.0 У попередніх версіях це називалося ST_MakeBox3D Створює BOX3D, визначений двома геометріями 3D-точок.
  • ST_3DPerimeter - Змінено: 2.0.0 У попередніх версіях це називалося ST_Perimeter3D Повертає 3D периметр полігональної геометрії.
  • ST_AsBinary - Changed: 2.0.0 Inputs to this function can not be unknown -- must be geometry. Constructs such as ST_AsBinary('POINT(1 2)') are no longer valid and you will get an n ST_AsBinary(unknown) is not unique error. Code like that needs to be changed to ST_AsBinary('POINT(1 2)'::geometry);. If that is not possible, then install legacy.sql. Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsGML - Змінено: 2.0.0 використання аргументів із стандартними іменами Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsGeoJSON - Змінено: 2.0.0 підтримка аргументів за замовчуванням та іменованих аргументів. Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsSVG - Змінено: 2.0.0 для використання аргументів за замовчуванням та підтримки іменованих аргументів Повертає дані SVG-шляху для геометрії.
  • ST_EndPoint - Змінено: 2.0.0 більше не працює з одномірними MultiLineStrings. У старих версіях PostGIS одномірний MultiLineString працював з цією функцією і повертав кінцеву точку. У 2.0.0 він повертає NULL, як і будь-який інший MultiLineString. Стара поведінка була недокументованою функцією, але користувачі, які вважали, що їхні дані зберігаються як LINESTRING, можуть зіткнутися з поверненням NULL у 2.0.0. Returns the last point of a LineString, CircularLineString, or NURBSCurve.
  • ST_GDALDrivers - Змінено: 2.0.6, 2.1.3 — за замовчуванням драйвери не ввімкнені, якщо не встановлено GUC або змінну середовища gdal_enabled_drivers. Повертає список растрових форматів, що підтримуються PostGIS через GDAL. Тільки формати з can_write=True можуть використовуватися ST_AsGDALRaster.
  • ST_GeomFromText - Змінено: 2.0.0 У попередніх версіях PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') було дозволено. Тепер це є некоректним у PostGIS 2.0.0 для кращої відповідності стандартам SQL/MM. Тепер це слід писати як ST_GeomFromText('GEOMETRYCOLLECTION EMPTY') Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).
  • ST_GeometryN - Змінено: 2.0.0 Попередні версії повертали NULL для геометрій в однині. Це було змінено, щоб повертати геометрію для випадку ST_GeometryN(..,1). Повернути елемент колекції геометрії.
  • ST_IsEmpty - Змінено: 2.0.0 У попередніх версіях PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') було дозволено. Тепер це є незаконним у PostGIS 2.0.0 для кращої відповідності стандартам SQL/MM Перевіряє, чи геометрія порожня.
  • ST_Length - Змінено: 2.0.0 Істотна зміна — у попередніх версіях застосування цього до MULTI/POLYGON типу geography давало периметр POLYGON/MULTIPOLYGON. У 2.0.0 це було змінено, щоб повертати 0 відповідно до поведінки геометрії. Будь ласка, використовуйте ST_Perimeter, якщо ви хочете отримати периметр полігону Повертає 2D довжину лінійної геометрії.
  • ST_LocateAlong - Змінено: 2.0.0 у попередніх версіях це називалося ST_Locate_Along_Measure. Повертає точку (точки) на геометрії, яка відповідає значенню міри.
  • ST_LocateBetween - Змінено: 2.0.0 — у попередніх версіях ця функція називалася ST_Locate_Between_Measures.Змінено: 2.0.0 — у попередніх версіях ця функція називалася ST_Locate_Between_Measures. Повертає частини геометрії, які відповідають діапазону вимірювання.
  • ST_ModEdgeSplit - Змінено: 2.0 — у попередніх версіях це було неправильно названо ST_ModEdgesSplit Розділіть ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове.
  • ST_NumGeometries - Змінено: 2.0.0 У попередніх версіях це повертало NULL, якщо геометрія не була типом колекції/MULTI. 2.0.0+ тепер повертає 1 для одиночних геометрій, наприклад POLYGON, LINESTRING, POINT. Повертає кількість елементів у колекції геометрії.
  • ST_NumInteriorRings - Змінено: 2.0.0 - у попередніх версіях дозволялося передавати MULTIPOLYGON, повертаючи кількість внутрішніх кілець першого POLYGON. Повертає кількість внутрішніх кілець (отворів) полігону.
  • ST_PointN - Змінено: 2.0.0 більше не працює з одногеометричними мультилініями. У старіших версіях PostGIS — одинарну мультилінію працював би з цією функцією без проблем і повертав би початкову точку. У 2.0.0 він просто повертає NULL, як і будь-який інший мультилінії. Повертає N-ту точку в першому LineString або круговому LineString в геометрії.
  • ST_ScaleX - Змінено: 2.0.0. У версіях WKTRaster це називалося ST_PixelSizeX. Повертає X-компоненту ширини пікселя в одиницях системи координат.
  • ST_ScaleY - Змінено: 2.0.0. У версіях WKTRaster це називалося ST_PixelSizeY. Повертає компонент Y висоти пікселя в одиницях системи координат.
  • ST_SetScale - Змінено: 2.0.0 У версіях WKTRaster це називалося ST_SetPixelSize. Це було змінено у версії 2.0.0. Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина пікселя/висота.
  • ST_StartPoint - Змінено: 2.0.0 більше не працює з одномірними геометричними об'єктами MultiLineStrings. У старих версіях PostGIS одномірний MultiLineString працював з цією функцією без проблем і повертав початкову точку. У 2.0.0 він просто повертає NULL, як і будь-який інший MultiLineString. Стара поведінка була недокументованою функцією, але користувачі, які вважали, що їхні дані зберігаються як LINESTRING, можуть зіткнутися з поверненням NULL у 2.0.0. Returns the first point of a LineString, CircularLineString, or NURBSCurve.

13.12.15. PostGIS Functions new or enhanced in 1.5

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 1.5

  • && - Доступність: 1.5.0 додано підтримку географії. Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.
  • PostGIS_LibXML_Version - Доступність: 1.5 Returns the version number of the libxml2 library.
  • ST_AddMeasure - Доступність: 1.5.0 Інтерполює виміри вздовж лінійної геометрії.
  • ST_AsBinary - Доступність: 1.5.0 додано підтримку географії. Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.
  • ST_AsGML - Доступність: 1.5.0 додано підтримку географії. Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsGeoJSON - Доступність: 1.5.0 додано підтримку географії. Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_AsText - Доступність: 1.5 — додано підтримку географії. Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.
  • ST_Buffer - Доступність: 1.5 - ST_Buffer було вдосконалено для підтримки різних кінцевих капсул та типів з'єднання. Це корисно, наприклад, для перетворення лінійних дорожніх об'єктів у полігонні дороги з плоскими або квадратними краями замість заокруглених. Додано тонкий обгортковий об'єкт для географії. Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.
  • ST_ClosestPoint - Доступність: 1.5.0 Повертає 2D точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії від однієї геометрії до іншої.
  • ST_CollectionExtract - Доступність: 1.5.0 За заданою колекцією геометрій повертає мультигеометрію, що містить тільки елементи заданого типу.
  • ST_Covers - Доступність: 1.5 — додано підтримку географії. Перевіряє, чи кожна точка B лежить в A
  • ST_DFullyWithin - Доступність: 1.5.0 Перевіряє, чи геометрія повністю знаходиться в межах відстані від іншої
  • ST_DWithin - Доступність: 1.5.0 було впроваджено підтримку географії Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної
  • ST_Distance - Доступність: 1.5.0 Підтримка географії була впроваджена в версії 1.5. Покращення швидкості для плоских об'єктів для кращої обробки великих або численних вершин геометрії Повертає відстань між двома геометричними або географічними значеннями.
  • ST_DistanceSphere - Доступність: 1.5 — додано підтримку інших типів геометрії, крім точок. Попередні версії працюють тільки з точками. Повертає мінімальну відстань у метрах між двома геометріями довготи/широти, використовуючи модель сферичної Землі.
  • ST_DistanceSpheroid - Доступність: 1.5 — додано підтримку інших типів геометрії, крім точок. Попередні версії працюють тільки з точками. Повертає мінімальну відстань між двома геометріями lon/lat, використовуючи сфероїдальну модель Землі.
  • ST_DumpPoints - Доступність: 1.5.0 Повертає набір рядків geometry_dump для координат у геометрії.
  • ST_Envelope - Доступність: 1.5.0 поведінка змінена на виведення подвійної точності замість float4 Повертає геометрію, що представляє обмежувальну рамку геометрії.
  • ST_Expand - Доступність: 1.5.0 поведінка змінена на виведення координат подвійної точності замість float4. Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.
  • ST_GMLToSQL - Доступність: 1.5, вимагає libxml2 1.6+ Returns a geometry from GML. Alias for ST_GeomFromGML.
  • ST_GeomFromGML - Доступність: 1.5, вимагає libxml2 1.6+ Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_GeomFromKML - Доступність: 1.5, вимагає libxml2 2.6+ Приймає в якості вхідних даних KML-представлення геометрії та видає об'єкт геометрії PostGIS
  • ST_HausdorffDistance - Доступність: 1.5.0 Повертає відстань Гаусдорфа між двома геометріями.
  • ST_Intersection - Доступність: 1.5 додано підтримку типу даних географії. Обчислює геометрію, що представляє спільну частину геометрій A і B.
  • ST_Intersects - Доступність: 1.5 було впроваджено підтримку географії. Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • ST_Length - Доступність: підтримка географії 1.5.0 була введена в версії 1.5. Повертає 2D довжину лінійної геометрії.
  • ST_LongestLine - Доступність: 1.5.0 Повертає найдовшу 2D лінію між двома геометріями.
  • ST_MakeEnvelope - Доступність: 1.5 Створює прямокутний полігон з мінімальних і максимальних координат.
  • ST_MaxDistance - Доступність: 1.5.0 Повертає найбільшу відстань між двома геометріями в проекційних одиницях.
  • ST_ShortestLine - Доступність: 1.5.0 Повертає найкоротшу 2D лінію між двома геометріями
  • ~= - Доступність: 1.5.0 змінено поведінку Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

13.12.16. PostGIS Functions new or enhanced in 1.4

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 1.4

  • Populate_Geometry_Columns - Доступність: 1.4.0 Забезпечує, щоб стовпці геометрії були визначені з модифікаторами типу або мали відповідні просторові обмеження.
  • ST_Collect - Доступність: 1.4.0 — додано ST_Collect(geomarray). ST_Collect було вдосконалено для швидшої обробки більшої кількості геометрій. Створює GeometryCollection або Multi* геометрію з набору геометрій.
  • ST_ContainsProperly - Доступність: 1.4.0 Перевіряє, чи кожна точка B лежить у внутрішній частині A
  • ST_GeoHash - Доступність: 1.4.0 Повернути представлення геометрії у форматі GeoHash.
  • ST_IsValidReason - Доступність: 1.4 Returns text stating if a geometry is valid, or a reason for invalidity.
  • ST_LineCrossingDirection - Доступність: 1.4 Повертає число, що вказує на поведінку перетину двох LineStrings
  • ST_LocateBetweenElevations - Доступність: 1.4.0 Повертає частини геометрії, що лежать у діапазоні висоти (Z).
  • ST_MakeLine - Доступність: 1.4.0 — додано ST_MakeLine(geomarray). Агрегатні функції ST_MakeLine було вдосконалено для швидшої обробки більшої кількості точок. Створює LineString з геометрій Point, MultiPoint або LineString.
  • ST_MinimumBoundingCircle - Доступність: 1.4.0 Повертає найменший полігон кола, що містить геометрію.
  • ST_Union - Доступність: 1.4.0 — ST_Union було вдосконалено. Було впроваджено ST_Union(geomarray), а також пришвидшено збір агрегатів у PostgreSQL. Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

13.12.17. PostGIS Functions new or enhanced in 1.3

The functions given below are PostGIS functions that were added or enhanced.

Functions new in PostGIS 1.3

  • ST_AsGML - Доступність: 1.3.2 Повернути геометрію як елемент GML версії 2 або 3.
  • ST_AsGeoJSON - Доступність: 1.3.4 Повернути геометрію або об'єкт у форматі GeoJSON.
  • ST_CurveToLine - Доступність: 1.3.0 Перетворює геометрію, що містить криві, на лінійну геометрію.
  • ST_LineToCurve - Доступність: 1.3.0 Перетворює лінійну геометрію на криву геометрію.
  • ST_SimplifyPreserveTopology - Доступність: 1.3.3 Повертає спрощене та дійсне представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.

Розділ 14. Reporting Problems

14.1. Reporting Software Bugs

Reporting bugs effectively is a fundamental way to help PostGIS development. The most effective bug report is that enabling PostGIS developers to reproduce it, so it would ideally contain a script triggering it and every information regarding the environment in which it was detected. Good enough info can be extracted running SELECT postgis_full_version() [for PostGIS] and SELECT version() [for postgresql].

If you aren't using the latest release, it's worth taking a look at its release changelog first, to find out if your bug has already been fixed.

Using the PostGIS bug tracker will ensure your reports are not discarded, and will keep you informed on its handling process. Before reporting a new bug please query the database to see if it is a known one, and if it is please add any new information you have about it.

You might want to read Simon Tatham's paper about How to Report Bugs Effectively before filing a new report.

14.2. Reporting Documentation Issues

The documentation should accurately reflect the features and behavior of the software. If it doesn't, it could be because of a software bug or because the documentation is in error or deficient.

Documentation issues can also be reported to the PostGIS bug tracker.

If your revision is trivial, just describe it in a new bug tracker issue, being specific about its location in the documentation.

If your changes are more extensive, a patch is definitely preferred. This is a four step process on Unix (assuming you already have git installed):

Before editing or building the manual, read the repository's documentation development guide. It covers the executable example, generated figure, validation, HTML, and PDF workflows used by the manual.

  1. Clone the PostGIS' git repository. On Unix, type:

    git clone https://git.osgeo.org/gitea/postgis/postgis.git

    This will be stored in the directory postgis

  2. Make your changes to the documentation with your favorite text editor. On Unix, type (for example):

    vim doc/postgis.xml

    Note that the documentation is written in DocBook XML rather than HTML, so if you are not familiar with it please follow the example of the rest of the documentation.

  3. Make a patch file containing the differences from the master copy of the documentation. On Unix, type:

    git diff doc/postgis.xml > doc.patch

  4. Attach the patch to a new issue in bug tracker.

Розділ 15. Credits and Acknowledgments

PostGIS is built and sustained by a worldwide community. This chapter records the people, organizations, funders, and upstream projects that have contributed code, documentation, infrastructure, testing, support, and funding.

15.1. Project Steering Committee

The PostGIS Project Steering Committee (PSC) coordinates the general direction, release cycles, documentation, and outreach efforts for the PostGIS project. In addition the PSC provides general user support, accepts and approves patches from the general PostGIS community and votes on miscellaneous issues involving PostGIS such as developer commit access, new PSC members or significant API changes.

Regina Obe

CI and website maintenance, Windows production and experimental builds, documentation, alignment of PostGIS with PostgreSQL releases, X3D support, management functions.

Darafei Praliaskouski

Index improvements, bug fixing and geometry/geography function improvements, SFCGAL, raster, GitHub curation, and ci maintenance.

Paul Ramsey (Chair)

Co-founder of PostGIS project. General bug fixing, geography support, geography and geometry index support (2D, 3D, nD index and anything spatial index), underlying geometry internal structures, GEOS functionality integration and alignment with GEOS releases, alignment of PostGIS with PostgreSQL releases, loader/dumper, and Shapefile GUI loader.

Sandro Santilli

Bug fixes and maintenance, ci maintenance, git mirror management, management functions, integration of new GEOS functionality and alignment with GEOS releases, topology support, and raster framework and low level API functions.

15.2. Core Contributors Present

Nicklas Avén

Distance function enhancements (including 3D distance and relationship functions) and additions, Tiny WKB (TWKB) output format and general user support

Loïc Bartoletti

SFCGAL enhancements and maintenance and ci support

Dan Baston

Geometry clustering function additions, other geometry algorithm enhancements, GEOS enhancements and general user support

Martin Davis

GEOS enhancements and documentation

Björn Harrtell

MapBox Vector Tile, GeoBuf, and Flatgeobuf functions. Gitea testing and GitLab experimentation.

Aliaksandr Kalenik

Geometry Processing, PostgreSQL gist, general bug fixing

Laurențiu Nicola

Bug fixes, maintenance, stability, and performance

15.3. Core Contributors Past

Raúl Marín Rodríguez

Prior PSC Member, MVT support, Bug fixing, Performance and stability improvements, GitHub curation, alignment of PostGIS with PostgreSQL releases

Bborie Park

Prior PSC Member. Raster development, integration with GDAL, raster loader, user support, general bug fixing, testing on various OS (Slackware, Mac, Windows, and more)

Mark Cave-Ayland

Prior PSC Member. Coordinated bug fixing and maintenance effort, spatial index selectivity and binding, loader/dumper, and Shapefile GUI Loader, integration of new and new function enhancements.

Jorge Arévalo

Raster development, GDAL driver support, loader

Olivier Courtin

(Emeritus) Input/output XML (KML,GML)/GeoJSON functions, 3D support and bug fixes.

Chris Hodgson

Prior PSC Member. General development, site and buildbot maintenance, OSGeo incubation management

Mateusz Loskot

CMake support for PostGIS, built original raster loader in python and low level raster API functions

Kevin Neufeld

Prior PSC Member. Documentation and documentation support tools, buildbot maintenance, advanced user support on PostGIS newsgroup, and PostGIS maintenance function enhancements.

Dave Blasby

The original developer/Co-founder of PostGIS. Dave wrote the server side objects, index bindings, and many of the server side analytical functions.

Jeff Lounsbury

Original development of the Shapefile loader/dumper.

Mark Leslie

Ongoing maintenance and development of core functions. Enhanced curve support. Shapefile GUI loader.

Pierre Racine

Architect of PostGIS raster implementation. Raster overall architecture, prototyping, programming support

David Zwarg

Raster development (mostly map algebra analytic functions)

15.4. Other Contributors

Individual Contributors

@amwps290 (GitHub user)Fabrice FontaineMarkus Wanner
@kannes (GitHub user: Hannes)Florentin DrogeanuMatt Amos
@sunhm89 (GitHub user)Florian WeimerMatt Bretl
@wewindy (GitHub user: Chen)François BonzonMatthias Bay
Adrien BerchetFrank WarmerdamMaxim Kochetkov
Alex BodnaruGeorge SilvaMaxime Guillaud
Alex MayrhoferGerald FenoyMaxime van Noppen
Andrea PeriGino LucreziMaxime Schoemans
Andreas Forø TollefsenGiovanni ZezzaMegan Ma
Andreas NeumannGrant HutchinsMichael Fuhr
Andreas SchildGreg TroxelMichal Páleník
Andrew GierthGuillaume LelargeMike Toews
Andrew HarveyGiuseppe BroccoloMitchell Henke
Anne GhislaHan WangNathan Wagner
Antoine BajoletHannes JanetzekNathaniel Clay
Ariel MashrakiHans LemuetNicolas Roelandt
Arno RenevierHaribabu KommiNikita Shulga
Arthur BazinHarrissou Sant-annaNikolai Berkoff
Arthur LesuisseHavard TveiteNorman Barker
Artur ZakirovIIDA TetsushiNorman Vine
Ayo AdesugbaIngvild NystuenPatricia Tozer
Barbara PhillipotJackie LengPaul Norman
Baris ErgunJames AddisonPaulo Cesar Coronado
Bas CouwenbergJames MarcaPavel Seleznev
Ben JubbJan KatinsPawel Ostrowski
Benjamin MorelJan TojnarPeter Nguyen
Bernd ReißJason SmithPierre Cardinal
Bernhard ReiterJean FelderRafal Magda
Bill MillJeff AdamsRalph Mason
Björn EsserJelte FennemaRémi Cura
Brian HamlinJim JonesRichard Greenwood
Bruce RindahlJoe ConwayRobert Coup
Bruno Wolff IIIJonne SavolainenRodrigo Smarzaro
Bryce L. NordgrenJorge Gustavo RochaRoger Crew
Carl AndersonJorge SanzRon Mayer
Carlos López QuintanillaJose Carlos Martinez LlariSam Peters
Charles KarneyJostein LeiraSergei Shoulbakov
Charlie SavageJörg HabenichtSergey Fedoseev
Chris MayoJuan Sebastian Jimenez AldanaShinichi Sugiyama
Christian SchroederJuergen E. FischerShoaib Burq
Christoph BergJulien MonticoloSilvio Grosso
Christoph Moench-TegederJulien RouhaudStefan Corneliu Petrea
Dan FaudemerKashif RasulSteffen Macke
Dan LevyKlaus FoersterStepan Kuzmin
Dane SpringmeyerKris JurkaStephen Frost
Daniel NylanderKristian ThyStephen Woodbridge
Dapeng WangLars Aksel OpsahlSteven Ottens
Daryl HerzmannLaurențiu NicolaTalha Rizwan
Dave FuhryLaurenz AlbeTemuri Doghonadze
David G. JohnstonLars RoessigerTeramoto Ikuhiro
David GarnierLauri KajanThomas Muguet
David SkeaLeo HsuThomas Petazzoni
David TecherLoic DacharyTobias Bussmann
Denys KovshunLouis DescoteauxTom Glancy
Devrim GündüzLuca DelucchiTom van Tilburg
Dian M FayLuca S. PercichVictor Collod
Dmitry VasilyevLucas C. Villa RealVincent Bre
Edouard ChoinièreLudovic HirlimannVincent Mora
Eduin CarrilloMaksim KorotkovVincent Picavet
Egor IvkovManuel MorilloVolf Tomáš
Esteban ZimanyiMaria Arias de ReynaYoichi Kayama
Eugene AntimirovMarc DucobuYuri Astrakhan
Evan SiMark SondheimZuo Chenwei
Even RouaultMarkus Schaber 

Corporate Sponsors

These are corporate entities that have contributed developer time, hosting, or direct monetary funding to the PostGIS project. In alphabetical order:

Crowd Funding Campaigns

Crowd funding campaigns are campaigns we run to get badly wanted features funded that can service a large number of people. Each campaign is specifically focused on a particular feature or set of features. Each sponsor chips in a small fraction of the needed funding and with enough people/organizations contributing, we have the funds to pay for the work that will help many. If you have an idea for a feature you think many others would be willing to co-fund, please post to the PostGIS newsgroup your thoughts and together we can make it happen.

PostGIS has experimented with community fundraising for features in the past. We used PledgeBank and we got two successful campaigns out of it.

postgistopology - 10 plus sponsors each contributed $250 USD to build toTopoGeometry function and beef up topology support in 2.0.0. It happened.

postgis64windows - 20 someodd sponsors each contributed $100 USD to pay for the work needed to work out PostGIS 64-bit issues on windows. It happened.

External Libraries and Platforms

PostgreSQL, the extensible database system on which PostGIS is built. PostgreSQL provides the SQL engine, transactions, query planner, extension framework, and index access methods used by PostGIS.

The GEOS geometry operations library.

The PROJ coordinate transformation and geodesic calculation library.

The GDAL Geospatial Data Abstraction Library used to power much of the raster functionality introduced in PostGIS 2. In kind, improvements needed in GDAL to support PostGIS are contributed back to the GDAL project.

LibXML2 for XML-based spatial formats, and JSON-C for GeoJSON input.

The GNU Multiple Precision Arithmetic Library (GMP) for precision-sensitive topology operations.

protobuf-c for Mapbox Vector Tile and Geobuf output.

The iconv API, supplied by the C library or GNU libiconv, for character encoding conversion in the shapefile loader.

SFCGAL for advanced 2D and 3D functions, together with the CGAL algorithms that SFCGAL exposes.

Bundled Libraries and Source Code

PostGIS ships selected source from FlatGeobuf and FlatBuffers to support FlatGeobuf input and output.

Wagyu and Mapbox Geometry provide polygon clipping and validation for Mapbox Vector Tile output.

Ryu provides round-trip-safe floating-point formatting, and uthash provides in-process hash tables.

The shapefile loader and dumper include code derived from ShapeLib, originally by Frank Warmerdam and Even Rouault. They also include public-domain getopt code from AT&T.

liblwgeom/lookup3.c contains the public-domain lookup3 hash function by Bob Jenkins.

Додаток A. Release Notes

A.1. PostGIS 3.7.0

2026/xx/xx

This version requires GEOS 3.10+, PostgreSQL 14-19beta1, Proj 6.1+, libgmp. To take advantage of all features postgis extension features, GEOS 3.15+ is needed. To take advantage of all postgis_sfcgal extension features SFCGAL 2.3+ is needed.

A.1.1. Breaking Changes

#5688, [topology] topology building functions now interpret tolerance 0 (old default) to really mean 0 and want -1 (new default) to mean "use topology precision" (Sandro Santilli)

#6024, Remove support for PostgreSQL 12 and 13 (Regina Obe)

#6040, ST_GeoHash round trip through ST_GeomFromGeoHash (Paul Ramsey)

#6053, [address_standardizer] Extension removed and moved to https://github.com/postgis/address_standardizer (Paul Ramsey)

#6052, [tiger_geocoder] Extension removed and moved to https://git.osgeo.org/postgis/postgis_tiger_geocoder (Regina Obe)

#6079, Remove support for GEOS < 3.10 (Sandro Santilli)

#1793, Remove ST_MemCollect aggregate (Darafei Praliaskouski)

GH-848, CG_AlphaShape now returns a MultiPolygon (Jean Felder)

A.1.2. New Features

#1124, #2935, #3033, #4658, #4659, [loader] Rework loader arguments: shp2pgsql can create UNLOGGED tables and choose the feature id column name, shp2pgsql --drop-table can emit DROP TABLE before prepare output, raster2pgsql/shp2pgsql expose loader actions as long options, both loaders accept long aliases for existing options, and

-if-not-exists makes creation actions idempotent (Darafei Praliaskouski)

#4208, Add single-geometry variants of ST_MaxDistance and ST_LongestLine (Darafei Praliaskouski)

[topology] FindVertexSegmentPairsBelowDistance function (Sandro Santilli)

ST_CoverageEdges, returns MultiLinestring of distinct shared edges in polygonal coverage (Paul Ramsey)

ST_MinimumSpanningTree, window function to calculate MST (Paul Ramsey)

#5993, [topology] Add max_edges parameter to TopoGeo_AddLinestring (Sandro Santilli)

#6001, support MultiLineString in ST_MakeLine (Paul Ramsey)

#2858, ST_MMin and ST_MMax (Paul Ramsey)

#5941, [raster] Support GDT_Float16 pixel type (Darafei Praliaskouski)

#5992, Optimize GiST index for repeated edge subdivision in topology (Darafei Praliaskouski)

#5702, Allow the compiler to detect the parallelism -flto=auto (Darafei Praliaskouski)

#4798, ST_AsGeoJSON warns about duplicate property keys (Darafei Praliaskouski)

#5950, Document POSTGIS_REGRESS_DB_OWNER for sandboxed regression roles (Darafei Praliaskouski)

#4332, Clarify the scope of several Function Reference categories (Darafei Praliaskouski)

#4222, [raster] ST_DumpAsPolygons honours PostgreSQL interrupts (Darafei Praliaskouski)

#5109, Document the meaning of topology.next_left_edge and topology.next_right_edge links (Darafei Praliaskouski)

#5889, [topology] Include representative locations in topology build errors (Darafei Praliaskouski)

#2614, Use GEOSPreparedDistance and caching to accelerate ST_DWithin (Paul Ramsey)

#6022, Document ST_AsMVTGeom tile-coordinate simplification (Darafei Praliaskouski)

GH-839, ST_Multi support for TIN and surfaces (Loïc Bartoletti)

#4398, Add ST_CatmullSmoothing smoothes but retains original vertices (Paul Ramsey)

#4560, ST_3DInterpolatePoint for M interpolation from XYZ inputs (Paul Ramsey)

#1291, ST_MakePolygon support for curved rings (Darafei Praliaskouski)

GT-270, Add NURBSCurve (Loïc Bartoletti)

#2863, Add ST_XSize, ST_YSize, ST_ZSize, and ST_MSize dimension helpers (Darafei Praliaskouski)

[fuzzers] Centralize OSS-Fuzz build/dependency logic in PostGIS scripts, prefer requested CXX over pg_config --cc for internal C++ checks, and make fuzzer linking/runtime dependency packaging portable (Darafei Praliaskouski)

A.1.3. Enhancements

#2045, pgsql2shp query dumps no longer require temporary table privileges (Darafei Praliaskouski)

#1577, [loader] Report unsupported .zip archive input before trying to open shapefile sidecar files (Darafei Praliaskouski)

#3158, Move geometry and geography typmod bit helpers out of the public liblwgeom header (Darafei Praliaskouski)

#4678, [raster] Move st_sum4ma neighborhood callback to C (Darafei Praliaskouski)

#2116, [raster] Add ST_Value nearest-neighbor boundary options (Darafei Praliaskouski)

#2804, #4315, [raster] Support two-argument ST_MapAlgebra callbacks and pass callback call data as actual arguments (Darafei Praliaskouski)

#2898, Document SQL function cost tiers for contributors

#6062, [topology] Stop using recursive snapping, for improved robustness (Sandro Santilli)

#6065, Improved winding order computation robustness for rings having collapsed elements (Sandro Santilli)

#3743, #4385, [raster loader] Document raster2pgsql -s FROM_SRID:SRID reprojection support and clarify index creation timing for append loads (Darafei Praliaskouski)

#2137, [raster] Reuse matching source raster overviews in raster2pgsql -l (Darafei Praliaskouski)

#4749, Use point-in-polygon predicate fast paths for point-only GeometryCollections (Darafei Praliaskouski)

#5532, Validate the manual against DocBook XMLSchema in check-xml (Darafei Praliaskouski)

#6087, Add a repository-owned CI status checker and static dashboard generator (Darafei Praliaskouski)

#2807, [raster] Preserve missing NODATA values in ST_MapAlgebra outputs (Darafei Praliaskouski)

#2832, [raster] Avoid padding single-tile raster2pgsql overviews when padding is not requested (Darafei Praliaskouski)

#2623, Generate a pgsql2shp GID field when exporting geometry-only shapefiles (Darafei Praliaskouski)

#2850, Preserve pgsql2shp numeric precision and scale in DBF metadata (Darafei Praliaskouski)

#2386, Add raster2pgsql man page (Darafei Praliaskouski)

Build PostgreSQL extension modules with `-fno-semantic-interposition` when available so LTO can optimize same-DSO calls to exported PostGIS entry points directly instead of routing through the module PLT; in a local PostgreSQL 18 `pgbench` microbenchmark over 100k four-point groups this reduced `ST_Collect` aggregate latency by about 4% (Darafei Praliaskouski)

#5973, Install PostGIS utilities under `pg_config --bindir` by default and document `pg_config`-derived install paths more accurately (Darafei Praliaskouski)

#2808, Clarify postgis_full_version() output when installed component scripts are newer than core scripts (Darafei Praliaskouski)

#5593, Docs: render manual images with GraphicsMagick without temporary files, enabling parallel builds, keeping ImageMagick fallbacks working, and documenting the generator workflow for contributors (Darafei Praliaskouski)

#5645, Docs: keep code operators ("=>") intact in translated manuals by enforcing verbatim CSS (Darafei Praliaskouski)

#1408, Docs: flatten transparent manual images onto white backgrounds for PDF builds while keeping HTML images transparent (Darafei Praliaskouski)

#2838, Emit valid X3D Coordinate nodes for 2D polygon output (Darafei Praliaskouski)

#1705, Infer constraint metadata for direct view and materialized view geometry columns (Darafei Praliaskouski)

GH-899, [raster] Honor PostgreSQL interrupts in long-running GDAL progress callbacks (Darafei Praliaskouski)

#2583, Preserve Z/ZM dimensional qualifiers in ST_AsEWKT output for TIN (Darafei Praliaskouski)