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

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

Abstract

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

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

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


Table of Contents

Chapter 1. Вступ

PostGIS — це просторове розширення для реляційної бази даних PostgreSQL, створене компанією Refractions Research Inc. як проект з дослідження технологій просторових баз даних. Refractions — це компанія з консалтингу в галузі ГІС та баз даних, розташована у місті Вікторія, Британська Колумбія, Канада, що спеціалізується на інтеграції даних та розробці програмного забезпечення на замовлення.

PostGIS зараз є проєктом Фонду OSGeo, розробляється і фінансується багатьма розробниками FOSS4G і організаціями по всьому світу, які отримують величезну користь від його функціональності та універсальності.

Група розробників проєкту PostGIS планує підтримувати та вдосконалювати PostGIS для кращої підтримки ряду важливих функціональних можливостей ГІС в області просторових стандартів OGC і SQL/MM, розширених топологічних конструкцій (покриття, поверхні, сітки), джерел даних для інструментів для перегляду і редагування даних ГІС, а також інструментів вебдоступу до них.

1.1. Керівний комітет проекту

Координаційний комітет проекту PostGIS (PSC) координує загальний напрямок, цикли випуску, документацію та інформаційно-просвітницьку діяльність проекту PostGIS. Крім того, PSC надає загальну підтримку користувачам, приймає та затверджує виправлення від загальної спільноти PostGIS і голосує з різних питань, що стосуються PostGIS, таких як доступ розробників до комітів, нові члени PSC або значні зміни API.

Рауль Марін Родрігес

Підтримка MVT, виправлення помилок, поліпшення продуктивності та стабільності, курація GitHub, узгодження PostGIS з релізами PostgreSQL

Регіна Обе

CI and website maintenance, Windows production and experimental builds, documentation, alignment of PostGIS with PostgreSQL releases, X3D support, management functions.

Дарафей Пралясковський

Покращення індексу, виправлення помилок та покращення функцій геометрії/географії, SFCGAL, растр, курація GitHub та обслуговування ci.

Пол Рамзі (голова)

Співзасновник проекту PostGIS. Загальне виправлення помилок, підтримка географії, підтримка географічних та геометричних індексів (2D, 3D, nD індекси та будь-які просторові індекси), внутрішні структури геометрії, інтеграція функціональності GEOS та узгодження з релізами GEOS, узгодження PostGIS з релізами PostgreSQL, завантажувач/вивантажувач та завантажувач Shapefile GUI.

Сандро Сантіллі

Виправлення помилок та технічне обслуговування, обслуговування CI, управління дзеркалами Git, функції управління, інтеграція нових функцій GEOS та узгодження з випусками GEOS, підтримка топології, а також функції растрової структури та API низького рівня.

1.2. Основні учасники

Ніклас Авен

Покращення функції відстані (включно з функціями 3D-відстані та взаємозв'язку) та доповнення, формат виводу Tiny WKB (TWKB) та загальна підтримка користувачів

Лоїк Бартолетті

Покращення та обслуговування SFCGAL і підтримка ci

Ден Бастон

Додавання функцій кластеризації геометрії, інші вдосконалення алгоритмів геометрії, вдосконалення GEOS та загальна підтримка користувачів

Мартін Девіс

Удосконалення та документація GEOS

Бйорн Харрелл

Функції MapBox Vector Tile, GeoBuf та Flatgeobuf. Тестування Gitea та експерименти GitLab.

Олександр Каленік

Обробка геометрії, PostgreSQL gist, загальне виправлення помилок

Лаурентіу Нікола

Виправлення помилок, технічне обслуговування, стабільність та продуктивність

1.3. Основні учасники минулого

Бборі Парк

Колишній член PSC. Розробка растрових даних, інтеграція з GDAL, завантажувач растрових даних, підтримка користувачів, загальне виправлення помилок, тестування на різних ОС (Slackware, Mac, Windows та інші)

Марк Кейв-Айланд

Колишній член PSC. Координація виправлення помилок та технічного обслуговування, вибірковості та прив'язки просторового індексу, завантажувача/вивантажувача, а також Shapefile GUI Loader, інтеграція нових та вдосконалених функцій.

Хорхе Аревало

Розробка растрових даних, підтримка драйвера GDAL, завантажувач

Олів'є Куртен

(Почесний) Функції введення/виведення XML (KML, GML)/GeoJSON, підтримка 3D та виправлення помилок.

Кріс Ходжсон

Колишній член PSC. Загальний розвиток, обслуговування сайту та buildbot, управління інкубацією OSGeo

Матеуш Лоскот

Підтримка CMake для PostGIS, вбудований оригінальний завантажувач растрових даних на Python та функції низького рівня для роботи з растровими даними

Кевін Нойфельд

Колишній член PSC. Документація та інструменти підтримки документації, обслуговування buildbot, підтримка досвідчених користувачів у новинній групі PostGIS та вдосконалення функцій обслуговування PostGIS.

Дейв Бласбі

Оригінальний розробник/співзасновник PostGIS. Дейв написав об'єкти серверної частини, індексні прив'язки та багато аналітичних функцій серверної частини.

Джефф Лаунсбері

Оригінальна розробка завантажувача/вивантажувача Shapefile.

Марк Леслі

Постійне обслуговування та розвиток основних функцій. Покращена підтримка кривих. Завантажувач Shapefile GUI.

П'єр Расін

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

Девід Цварг

Розробка растрових даних (переважно аналітичні функції алгебри карт)

1.4. Інші автори

Індивідуальні учасники

Алекс БоднаруДжеральд ФенойМатіас Бей
Алекс МайрхоферДжино ЛукрезіМаксим Гійо
Андреа ПеріГрег ТрокселМаксима ван Ноппен
Андреас Форо ТоллефсенГійом ЛеларжМаксим Шеманс
Андреас НойманДжузеппе БрокколоМеган Ма
Ендрю ГертХан ВанМайкл Фур
Енн ГіслаГанс ЛемуетМайк Тоус
Антуан БажолеХарібабу КомміНатан Вагнер
Артур ЛесуаХавард ТвейтеНатаніель Клей
Артур ЗакіровІІДА ТетсушіМикита Шульга
Айо АдесугбаІнгвільд НюстенНорман Вайн
Барбара ФілліпотДжекі ЛенгПатрісія Тозер
Бен ДжуббДжеймс АддісонРафал Магда
Бернхард РайтерДжеймс МаркаРальф Мейсон
Бйорн ЕссерЯн КатінсРемі Кура
Брайан ХемлінЯн ТожнарРічард Грінвуд
Брюс РіндалДжейсон СмітРоберт Куп
Бруно Вольф IIIДжефф АдамсРоджер Крю
Брайс Л. НордгренДжелте ФеннемаРон Майер
Карл АндерсонДжим ДжонсСем Пітерс
Чарлі СейвіджДжо КонвейСебастьян Коувенберг
Кріс МайоЙонне СаволайненСергій Шульбаков
Крістіан ШредерХосе Карлос Мартінес ЛларіСергій Федосєєв
Крістоф БергЙорг ХабеніхтШінічі Сугіяма
Крістоф Менх-ТегедерЖюльєн РуоШоаїб Бурк
Дейн СпрінгмейерКашиф РасулСільвіо Гроссо
Даніель НюландерКлаус ФерстерСтефан Корнеліу Петреа
Дапен ВанКріс ЮркаСтеффен Макке
Деріл ГерцманнЛаурентіу НіколаСтепан Кузьмін
Дейв ФуріЛауренц АльбеСтівен Фрост
Девід ГарньєЛарс РоессігерСтівен Оттенс
Девід СкіЛео ХсуТалха Різван
Девід ТечерЛоїк ДачаріТерамото Ікухіро
Денис КовшунЛука С. ПерчічТом Гленсі
Діан М. ФейЛукас С. Вілла РеальТом ван Тільбург
Дмитро ВасилєвМаксим КоротковВіктор Колод
Едуїн КаррільоМарія Аріас де РейнаВінсент Бре
Естебан ЗіманіМарк ДюкубуВінсент Мора
Євген АнтиміровМарк СондхаймВінсент Пікаве
Навіть РуоМаркус ШаберВольф Томаш
Флоріан ВаймерМаркус ВаннерЗуо Ченвей
Френк ВармердамМетт Амос 
Джордж СільваМетт Бретл 

Корпоративні спонсори

Це корпоративні організації, які надали розробникам час, хостинг або пряме фінансове фінансування для проекту PostGIS. У алфавітному порядку:

Crowd Funding Campaigns

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

PostGIS вже експериментував із залученням коштів від спільноти для розробки нових функцій. Ми використовували PledgeBank і провели дві успішні кампанії.

postgistopology - 10 спонсорів внесли по 250 доларів США на створення функції toTopoGeometry та покращення підтримки топології в версії 2.0.0. Це сталося.

postgis64windows - 20 спонсорів внесли по 100 доларів США для оплати робіт, необхідних для вирішення проблем PostGIS 64-bit на Windows. Це сталося.

Важливі допоміжні бібліотеки

Бібліотека геометричних операцій GEOS

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

Бібліотека картографічних проекцій PROJ

І останнє, але не менш важливе, PostgreSQL, гігант, на якому стоїть PostGIS. Більша частина швидкості та гнучкості PostGIS була б неможливою без розширюваності, чудового планувальника запитів, індексу GIST та безлічі функцій SQL, що надаються PostgreSQL.

Chapter 2. Встановлення PostGIS

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

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

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

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

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

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

[Note]

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

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

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

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

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

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

[Note]

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

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.0alpha1.tar.gz

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

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

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

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

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

./configure

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

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

Необхідно

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

    Повна матриця підтримки PostgreSQL / PostGIS та матриця підтримки PostGIS/GEOS наведена за посиланням https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

  • Компілятор 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 (псевдоопціональний) тільки якщо ви не хочете растрові дані, ви можете залишити його поза увагою. Також переконайтеся, що ви ввімкнули драйвери, які ви хочете використовувати, як описано в Section 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 Chapter 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/ .

  • GraphicsMagick (gm convert) is required to generate the images used in the documentation. If GraphicsMagick is unavailable, ImageMagick (convert or magick convert) provides the same command-line syntax. GraphicsMagick is available from http://www.graphicsmagick.org/ and ImageMagick from https://imagemagick.org/ .

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

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

./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

Це місце, куди будуть встановлені виконувані файли завантажувача PostGIS та спільні бібліотеки. За замовчуванням це місце збігається з місцем встановлення PostgreSQL.

[Caution]

Цей параметр наразі не працює, оскільки пакет встановлюється лише в каталог інсталяції PostgreSQL. Відвідайте http://trac.osgeo.org/postgis/ticket/635 , щоб відстежити цю помилку.

--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.

[Note]

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

./autogen.sh

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

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

2.2.4. Збірка

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

make

Останній рядок виводу повинен бути таким: "PostGIS було успішно скомпільовано. Готово до встановлення."

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

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

make cheatsheets

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

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

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

make comments

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

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

cd extensions
cd postgis
make clean
make
export PGUSER=postgres #overwrite psql variables
make check #to test before install
make install
# to test extensions
make check RUNTESTFLAGS=--extension
[Note]

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, ви можете перевірити, чи встановлені розширення, виконавши такий запит:

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.0alpha1         | 3.7.0alpha1
 postgis_raster               | 3.7.0alpha1         | 3.7.0alpha1
 postgis_sfcgal               | 3.7.0alpha1         |
 postgis_topology             | 3.7.0alpha1         |

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

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

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

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

\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name        | postgis
Version     | 3.7.0alpha1
Schema      | public
Description | PostGIS geometry, geography, and raster spat..
-[ RECORD 2 ]-------------------------------------------------
Name        | postgis_raster
Version     | 3.0.0dev
Schema      | public
Description | PostGIS raster types and functions
-[ RECORD 3 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.7.0alpha1
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

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

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

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

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

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

make check

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

[Note]

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

[Caution]

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

[Note]

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

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

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

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, введіть

make install

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

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

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

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

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

make comments-install

[Note]

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

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

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

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

    SELECT version();

    Якщо ви використовуєте дистрибутив на основі RPM, ви можете перевірити наявність попередньо встановлених пакетів за допомогою команди rpm наступним чином: rpm -qa | grep postgresql

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

    SELECT PostGIS_Full_Version();

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

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

Chapter 3. Адміністрування PostGIS

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

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

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

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

ALTER SYSTEM SET work_mem = '256MB';
-- this forces non-startup configs to take effect for new connections
SELECT pg_reload_conf();
-- show current setting value
-- use SHOW ALL to see all settings
SHOW work_mem;

Окрім налаштувань Postgres, PostGIS має деякі власні налаштування, які перелічені в Section 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 МБ

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

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

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

    SET work_mem TO '256MB';

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

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

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

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

    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 у середовищі сервера. Ви також можете використовувати більш міжплатформний підхід, встановивши відповідний Section 7.22, “Великі уніфіковані змінні (GUC)”.

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

POSTGIS_ENABLE_OUTDB_RASTERS=1

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

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

POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

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

POSTGIS_GDAL_ENABLED_DRIVERS="GTiff PNG JPEG GIF XYZ"
[Note]

Якщо ви використовуєте 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-коду в базі даних, яку ви хочете активувати просторове розширення:

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

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

[Note]

Зазвичай це потрібно лише в тому випадку, якщо ви не можете або не хочете встановлювати 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 у терміналі:

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 для оновлення до останньої версії, яку ви встановили.

SELECT postgis_extensions_upgrade();

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

ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();
-- This second call is needed to rebundle postgis_raster extension
SELECT postgis_extensions_upgrade();

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

ALTER EXTENSION postgis UPDATE TO "3.7.0alpha1";
ALTER EXTENSION postgis_topology UPDATE TO "3.7.0alpha1";

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

No migration path defined for … to 3.7.0alpha1

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

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

Version "3.7.0alpha1" of extension "postgis" is already installed

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

ALTER EXTENSION postgis UPDATE TO "3.7.0alpha1next";
ALTER EXTENSION postgis_topology UPDATE TO "3.7.0alpha1next";
[Note]

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

[Note]

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

DROP EXTENSION postgis_raster;

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

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

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

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

Процес вивантаження/перезавантаження здійснюється за допомогою скрипта postgis_restore, який пропускає з вивантаження всіх визначень, що належать до PostGIS (включаючи старі), що дозволяє відновити схеми та дані в базі даних з встановленим PostGIS без помилок дублювання символів або перенесення застарілих об'єктів.

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

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

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

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

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

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

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

    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 і повторно створити перевірку (перевірки) за допомогою:

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

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

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

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

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

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

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

    Створіть нову базу даних newdb, активуйте необхідні розширення Postgis і правильно вставте французьку систему IGN за допомогою: цього скрипту Після цих операцій імпортуйте свої дані:

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

Chapter 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 Section 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 Section 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 Section 4.4, “Перевірка геометрії”

4.1.1.1. Point

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

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.

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.

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.

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.

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.

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 Section 4.4, “Перевірка геометрії”.

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.

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.

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.

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.

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.

[Note]

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.

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.

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.

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

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.

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.

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:

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

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

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

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:

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:

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 Chapter 7, Довідка PostGIS for the full list of functions.

[Note]

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 Section 4.5, “Spatial Reference Systems”

To make querying geometry efficient PostGIS defines various kinds of spatial indexes, and spatial operators to use them. See Section 4.9, “Spatial Indexes” and Section 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:

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)

[Caution]

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:

bytea EWKB = ST_AsEWKB(geometry);
text EWKT = ST_AsEWKT(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:

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 Section 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):

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):

    CREATE TABLE ptgeogwgs(gid serial PRIMARY KEY, geog geography(POINT));
  • Create a table with 2D POINT geography in NAD83 longlat:

    CREATE TABLE ptgeognad83(gid serial PRIMARY KEY, geog geography(POINT,4269));
  • Create a table with 3D (XYZ) POINTs and an explicit SRID of 4326:

    CREATE TABLE ptzgeogwgs84(gid serial PRIMARY KEY, geog geography(POINTZ,4326));
  • Create a table with 2D LINESTRING geography with the default SRID 4326:

    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):

    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:

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.

-- Index the test table with a spherical index
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.

-- Add some data into the test table
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.

-- NAD 83 lon/lat
SELECT 'SRID=4269;POINT(-123 34)'::geography;
                    geography
----------------------------------------------------
 0101000020AD1000000000000000C05EC00000000000004140
-- NAD27 lon/lat
SELECT 'SRID=4267;POINT(-123 34)'::geography;
                    geography
----------------------------------------------------
 0101000020AB1000000000000000C05EC00000000000004140

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

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).

-- A distance query using a 1000km tolerance
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.

-- Distance calculation using GEOGRAPHY
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.

-- Distance calculation using GEOMETRY
SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15)'::geometry);
st_distance
--------------------
 13.342271221453624

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 Section 13.11, “Матриця підтримки функцій PostGIS” for compare between what is supported for Geography vs. Geometry. For a brief listing and description of Geography functions, refer to Section 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.

(a) and (c) are simple LINESTRINGs. (b) and (d) are not simple. (c) is a closed Linear Ring.

(a)

(b)

(c)

(d)

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.

(e) and (f) are simple MULTILINESTRINGs. (g) is not simple.

(e)

(f)

(g)

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

To test if a geometry is simple use the ST_IsSimple function:

SELECT
   ST_IsSimple('LINESTRING(0 0, 100 100)') AS straight,
   ST_IsSimple('LINESTRING(0 0, 100 100, 100 0, 0 100)') AS crossing;
straight | crossing
----------+----------
 t        | f

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 are treated as redundant vertices, and do not make the polygon invalid. Repeated points that cause the boundary to self-intersect, self-touch, or collapse still violate the validity rules.

(h) and (i) are valid POLYGONs. (j-m) are invalid. (j) can be represented as a valid MULTIPOLYGON.

(h)

(i)

(j)

(k)

(l)

(m)

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)

(n) is a valid MULTIPOLYGON. (o) and (p) are invalid.

(n)

(o)

(p)

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.

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

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.

[Note]

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:

SELECT ST_IsValid('POLYGON ((20 180, 180 180, 180 20, 20 20, 20 180))');
t

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

SELECT valid, reason, ST_AsText(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)

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:

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:

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:

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:

+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. (To determine which UTM zone to use for your area of interest, see the utmzone PostGIS plpgsql helper function.)

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:

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):

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:

    CREATE TABLE geoms(gid serial PRIMARY KEY, geom geometry);
  • Create a table with 2D POINT geometry with the default SRID:

    CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINT));
  • Create a table with 3D (XYZ) POINTs and an explicit SRID of 3005:

    CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINTZ,3005));
  • Create a table with 4D (XYZM) LINESTRING geometry with the default SRID:

    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):

    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:

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:

\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 Section 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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

\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

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

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:

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:

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:

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

-m a_file_name 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:

# 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:

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

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:

SELECT road_id, ST_AsText(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:

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:

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:

SELECT ST_AsText(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:

pgsql2shp [<options
>] <database
> [<schema
>.]<table>
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 Section 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:

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:

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:

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:

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):

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:

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:

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:

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:

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

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:

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:

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:

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:

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:

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.

Chapter 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) )

Visually, for two overlapping polygonal geometries, this looks like:

 
 InteriorBoundaryExterior
Interior

dim( I(a) ∩ I(b) ) = 2

dim( I(a) ∩ B(b) = 1

dim( I(a) ∩ E(b) ) = 2

Boundary

dim( B(a) ∩ I(b) ) = 1

dim( B(a) ∩ B(b) ) = 0

dim( B(a) ∩ E(b) ) = 1

Exterior

dim( E(a) ∩ I(b) ) = 2

dim( E(a) ∩ B(b) ) = 1

dim( E(a) ∩ E(b) = 2

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:

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.

For example, consider a linear dataset representing a road network. It may be required to identify all road segments that cross each other, not at a point, but in a line (perhaps to validate a business rule such as ensuring that no two different roads share a common segment). In this case ST_Crosses does not provide the necessary spatial filter, since for linear features it returns true only where they cross at a point.

A two-step solution would be to first compute the actual intersection (ST_Intersection) of pairs of road lines that spatially intersect (ST_Intersects), and then check if the intersection's ST_GeometryType is 'LINESTRING' (properly dealing with cases that return GEOMETRYCOLLECTIONs of [MULTI]POINTs, [MULTI]LINESTRINGs, etc.).

Clearly, a simpler and faster solution is desirable.

A second example is locating wharves that intersect a lake's boundary on a line and where one end of the wharf is up on shore. In other words, where a wharf is within but not completely contained by a lake, intersects the boundary of a lake on a line, and where exactly one of the wharf's endpoints is within or on the boundary of the lake. It is possible to use a combination of spatial predicates to find the required features:

These requirements can be met by computing the full DE-9IM intersection matrix. PostGIS provides the ST_Relate function to do this:

SELECT ST_Relate(
    'LINESTRING (1 1, 5 5)',
    'POLYGON ((3 3, 3 7, 7 7, 7 3, 3 3))' );
1010F0212

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 in a more succinct way. The ST_Relate and the ST_RelateMatch functions can be used to test intersection matrix patterns. For the first example above, the intersection matrix pattern specifying two lines intersecting in a line is '1*1***1**':

-- Find road segments that intersect in a line
SELECT a.id
FROM roads a, roads b
WHERE a.id != b.id
      AND a.geom && b.geom
      AND ST_Relate(a.geom, b.geom, '1*1***1**');

For the second example, the intersection matrix pattern specifying a line partly inside and partly outside a polygon is '102101FF2':

-- Find wharves partly on a lake's shoreline
SELECT a.lake_id, b.wharf_id
FROM lakes a, wharfs b
WHERE a.geom && b.geom
      AND ST_Relate(a.geom, b.geom, '102101FF2');

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 Section 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 Section 7.10.1, “Оператори обмежувальної рамки” for the full list) and the distance operators used in nearest-neighbor queries (the most common being <->; see Section 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:

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:

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:

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):

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:

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):

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:

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?

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?

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

Chapter 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, і зіставляючи його з цим стовпцем. У нашому прикладі команди виглядають так:

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

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

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

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

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

Для таблиць, які в основному є тільки для читання і де для більшості запитів використовується один індекс, PostgreSQL пропонує команду CLUSTER. Ця команда фізично перевпорядковує всі рядки даних у тому ж порядку, що й критерії індексу, що дає дві переваги в продуктивності: По-перше, для сканування діапазону індексу кількість пошуків у таблиці даних значно зменшується. По-друге, якщо робочий набір зосереджений на невеликих інтервалах індексів, ви отримуєте більш ефективне кешування, оскільки рядки даних розподіляються між меншою кількістю сторінок даних. (Запрошуємо вас ознайомитися з документацією команди CLUSTER у посібнику PostgreSQL.)

Однак на даний момент PostgreSQL не дозволяє кластеризацію на індексах PostGIS GIST, оскільки індекси GIST просто ігнорують значення NULL, і ви отримуєте таке повідомлення про помилку:

CLUSTER my_geom_index ON my_table;
ERROR: cannot cluster when index access method does not handle null values
HINT: You may be able to work around this by marking column "geom" NOT NULL.

Як вказує повідомлення HINT, цю недоліку можна обійти, додавши до таблиці обмеження "not null":

ALTER TABLE my_table ALTER COLUMN geom SET not null;
ALTER TABLE

Звичайно, це не спрацює, якщо вам насправді потрібні значення NULL у стовпці геометрії. Крім того, ви повинні використовувати вищезазначений метод для додавання обмеження, використання обмеження CHECK, такого як "ALTER TABLE blubb ADD CHECK (geometry is not null);" не спрацює.

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

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

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

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

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

Chapter 7. Довідка PostGIS

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

[Note]

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

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

Abstract

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

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

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

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

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

Name

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

Опис

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

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

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

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

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

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

Name

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автоматичне

Name

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

Опис

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

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

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

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

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

Name

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

Опис

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

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

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

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


Name

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

Опис

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

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

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

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

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

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

Abstract

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

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

Name

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

Synopsis

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, тип геометрії або розмір є недійсними, виникає помилка.

[Note]

Змінено: 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.

[Note]

Змінено: 2.0.0 Види більше не можна реєструвати вручну в geometry_columns, однак види, побудовані на основі геометрій таблиць типу typmod і використовувані без функцій-обгортки, реєструватимуться правильно, оскільки вони успадковують поведінку типу typmod стовпця батьківської таблиці. Види, які використовують функції геометрії, що виводять інші геометрії, потрібно буде перетворити на геометрії типу typmod, щоб ці стовпці геометрії виду були зареєстровані правильно в geometry_columns. Див. Section 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.

CREATE SCHEMA my_schema;

Create a simple PostgreSQL table in the schema.

CREATE TABLE my_schema.my_spatial_table (id serial);

Describing the table shows a single id column.

\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.

SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geom', 4326, 'POINT', 2);

Add a point column using the old constraint-based behavior.

SELECT AddGeometryColumn('my_schema', 'my_spatial_table', 'geom_c', 4326, 'POINT', 2, false);

Add a CurvePolygon column using the old constraint-based behavior.

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.

\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)
 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.

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

Name

DropGeometryColumn — Видаляє стовпець геометрії з просторової таблиці.

Synopsis

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.

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.

[Note]

Змінено: 2.0.0 Ця функція надається для забезпечення зворотної сумісності. Тепер, коли geometry_columns є видом системних каталогів, ви можете видалити стовпець geometry так само, як і будь-який інший стовпець таблиці, за допомогою ALTER TABLE

Приклади

SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');
my_schema.my_spatial_table.geom effectively removed.

The above is also equivalent to the standard ALTER TABLE command. Both deregister the column from geometry_columns.

ALTER TABLE my_schema.my_spatial_table DROP column geom;

Name

DropGeometryTable — Видаляє таблицю та всі її посилання в geometry_columns.

Synopsis

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, що підтримують схеми, якщо схема не вказана.

[Note]

Змінено: 2.0.0 Ця функція надається для забезпечення зворотної сумісності. Тепер, коли geometry_columns є переглядом системних каталогів, ви можете видалити таблицю з геометричними стовпцями, як і будь-яку іншу таблицю, за допомогою DROP TABLE

Приклади

SELECT DropGeometryTable ('my_schema','my_spatial_table');
my_schema.my_spatial_table dropped.

The above is now equivalent to the standard DROP TABLE command.

DROP TABLE my_schema.my_spatial_table;

Name

Find_SRID — Повертає SRID, визначений для стовпця геометрії.

Synopsis

integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);

Опис

Повертає ціле значення SRID вказаного стовпця геометрії, шукаючи його в таблиці GEOMETRY_COLUMNS. Якщо стовпець геометрії не був доданий належним чином (наприклад, за допомогою функції AddGeometryColumn), ця функція не працюватиме.

Приклади

SELECT Find_SRID('public', 'tiger_us_state_2007', 'geom_4269');
4269

Див. також

ST_SRID


Name

Populate_Geometry_Columns — Забезпечує, щоб стовпці геометрії були визначені з модифікаторами типу або мали відповідні просторові обмеження.

Synopsis

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.

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


\d myspatial_table

                                   Table "public.myspatial_table"
 Column |           Type            |                           Modifiers
--------+---------------------------+---------------------------------------------------------------
 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.

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
\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)

Name

UpdateGeometrySRID — Оновлює SRID всіх об'єктів у стовпці геометрії та метадані таблиці.

Synopsis

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:

COPY roads (geom) FROM STDIN;
SRID=4326;LINESTRING(0 0, 10 10)
SRID=4326;LINESTRING(10 10, 15 0)
\.
                

Це змінить srid таблиці доріг на 4326 з будь-якого попереднього значення:

SELECT UpdateGeometrySRID('roads','geom',4326);

Попередній приклад еквівалентний цій DDL-інструкція:

ALTER TABLE roads
  ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326)
    USING ST_SetSRID(geom,4326);

Якщо ви неправильно вказали проекцію (або вказали її як невідому) під час завантаження і хочете перетворити все в веб-меркатор за один раз, ви можете зробити це за допомогою DDL, але в PostGIS немає еквівалентної функції для виконання цієї операції за один раз.

ALTER TABLE roads
 ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom,4326),3857) ;

7.3. Конструктори геометрії

Abstract

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

  • 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.

Name

ST_Collect — Створює GeometryCollection або Multi* геометрію з набору геометрій.

Synopsis

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

geometry ST_Collect(geometry set g1field);

Опис

Збирає геометрії в колекцію геометрій. Результатом є або Multi*, або GeometryCollection, залежно від того, чи мають вхідні геометрії однаковий або різний тип (однорідні або неоднорідні). Вхідні геометрії залишаються незмінними в колекції.

Варіант 1: приймає дві вхідні геометрії

Варіант 2: приймає масив геометрій

Варіант 3: агрегатна функція, що приймає набір рядків геометрій.

[Note]

Якщо будь-яка з вхідних геометрій є колекцією (Multi* або GeometryCollection), ST_Collect повертає GeometryCollection (оскільки це єдиний тип, який може містити вкладені колекції). Щоб цього уникнути, використовуйте ST_Dumpу підзапиті, щоб розгорнути вхідні колекції до їхніх атомних елементів (див. приклад нижче).

[Note]

ST_Collect і ST_Union виглядають схожими, але насправді працюють зовсім по-різному. ST_Collect об'єднує геометрії в колекцію, не змінюючи їх жодним чином. ST_Union геометрично об'єднує геометрії в місцях їх перетину і розділяє лінії в точках перетину. При розчиненні меж може повертати окремі геометрії.

Доступність: 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.

Приклади - Варіант з двома входами

Збір 2D точок.

SELECT ST_AsText(ST_Collect(
    ST_GeomFromText('POINT(1 2)'),
    ST_GeomFromText('POINT(-2 3)') ));
MULTIPOINT((1 2),(-2 3))

Збір 3D-точок.

SELECT ST_AsEWKT(ST_Collect(
        ST_GeomFromEWKT('POINT(1 2 3)'),
        ST_GeomFromEWKT('POINT(1 2 4)') ) );
MULTIPOINT(1 2 3,1 2 4)

Збір кривих.

SELECT ST_AsText(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))

Приклади - Варіант масиву

Використання конструктора масиву для підзапиту.

SELECT ST_Collect(ARRAY(SELECT geom FROM sometable));

Використання конструктора масиву для значень.

SELECT ST_AsText(ST_Collect(
        ARRAY[ ST_GeomFromText('LINESTRING(1 2, 3 4)'),
            ST_GeomFromText('LINESTRING(3 4, 4 5)') ] )) As wktcollect;
MULTILINESTRING((1 2,3 4),(3 4,4 5))

Приклади - Агрегований варіант

Створення декількох колекцій шляхом групування геометрій у таблиці.

SELECT stusps, ST_Collect(f.geom) as geom
     FROM (SELECT stusps, (ST_Dump(geom)).geom As geom
                FROM
                somestatetable ) As f
    GROUP BY stusps

Див. також

ST_Dump, ST_Union


Name

ST_LineFromMultiPoint — Створює LineString з геометрії MultiPoint.

Synopsis

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

SELECT ST_AsEWKT(ST_LineFromMultiPoint('MULTIPOINT(1 2 3, 4 5 6, 7 8 9)'));
LINESTRING(1 2 3,4 5 6,7 8 9)

Див. також

ST_AsEWKT, ST_MakeLine


Name

ST_MakeEnvelope — Створює прямокутний полігон з мінімальних і максимальних координат.

Synopsis

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.

Приклад: Побудова полігону обмежувальної рамки

SELECT ST_AsText(ST_MakeEnvelope(10, 10, 11, 11, 4326));
POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))

Name

ST_MakeLine — Створює LineString з геометрій Point, MultiPoint або LineString.

Synopsis

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 було вдосконалено для швидшої обробки більшої кількості точок.

Приклади: Варіант з двома входами

Створити лінію, що складається з двох точок.

SELECT ST_AsText(ST_MakeLine(ST_Point(1,2), ST_Point(3,4)));
LINESTRING(1 2,3 4)

Створити 3D лінію з двох 3D точок.

SELECT ST_AsEWKT(ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5)));
LINESTRING(1 2 3,3 4 5)

Створити лінію з двох роз'єднаних LineStrings.

SELECT ST_AsText(ST_MakeLine('LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)'));
LINESTRING(0 0,1 1,2 2,3 3)

Приклади: Варіант масиву

Створити лінію з масиву, сформованого підзапитом із сортуванням.

SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time));

Створити 3D лінію з масиву 3D точок

SELECT ST_AsEWKT(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)

Приклади: Агрегований варіант

У цьому прикладі запитуються послідовності точок GPS за часом із набору треків і створюється один запис для кожного треку. Результатом є геометрії LineStrings, що складаються з точок треку GPS у порядку руху.

Використання агрегату ORDER BY забезпечує правильний порядок LineString.

SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom
    FROM gps_points As gps
    GROUP BY track_id;

Якщо сортування в межах агрегату неможливе, можна скористатися сортуванням у підзапиті. Однак іноді план запиту може не враховувати порядок підзапиту.

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 track_id;

Name

ST_MakePoint — Створює 2D, 3DZ або 4D точку.

Synopsis

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. Він також простіший у використанні для числових значень координат.

[Note]

Для геодезичних координат X є довготою, а Y — широтою

[Note]

Функції 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.

SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);

This example creates a point in the WGS 84 geodetic CRS.

SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);

This example creates a 3D point with altitude.

SELECT ST_MakePoint(1, 2,1.5);

This example returns the Z coordinate of a point.

SELECT ST_Z(ST_MakePoint(1, 2,1.5));
1.5

Name

ST_MakePointM — Створює точку з значень X, Y та M.

Synopsis

geometry ST_MakePointM(float x, float y, float m);

Опис

Створює точку з координатами X, Y та M (вимірювання). Використовуйте ST_MakePoint, щоб створити точки з координатами XY, XYZ або XYZM.

Використовуйте ST_SetSRID, щоб вказати SRID для створеної точки.

[Note]

Для геодезичних координат X є довготою, а Y — широтою

[Note]

Функції ST_PointM та ST_PointZM можна використовувати для створення точок із значенням M та заданим SRID.

Приклади

[Note]

ST_AsEWKT використовується для виведення тексту, оскільки ST_AsTextне підтримує значення M.

Створити точку з невідомим SRID.

SELECT ST_AsEWKT(ST_MakePointM(-71.1043443253471, 42.3150676015829, 10));
POINTM(-71.1043443253471 42.3150676015829 10)

Створити точку з виміром у геодезичній системі координат WGS 84.

SELECT ST_AsEWKT(ST_SetSRID(ST_MakePointM(-71.104, 42.315, 10),  4326));
SRID=4326;POINTM(-71.104 42.315 10)

Отримати розмір створеної точки.

SELECT ST_M(ST_MakePointM(-71.104, 42.315, 10));
10

Name

ST_MakePolygon — Creates a Polygon or CurvePolygon from a shell and optional list of holes.

Synopsis

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.

[Note]

Ця функція не приймає 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.

Приклади: Варіант з одним входом

Створити полігон з 2D LineString.

SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));

Створіть полігон з відкритої лінії, використовуючи ST_StartPointта ST_AddPointдля його закриття.

SELECT ST_MakePolygon(ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)) )
FROM (
  SELECT ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)') As open_line) As foo;

Створіть полігон із 3D-лінії

SELECT ST_AsEWKT(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))

Створює полігон з лінії з вимірами

SELECT ST_AsEWKT(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))

Create a CurvePolygon from a CircularString shell.

SELECT ST_AsText(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))

Приклади: Зовнішня оболонка з внутрішніми отворами

Створити полігон у формі пончика з додатковим отвором

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 гарантує, що всі провінції будуть включені, навіть якщо вони не мають озер.

[Note]

Конструкція CASE використовується, оскільки передача нульового масиву в ST_MakePolygon призводить до повернення значення NULL.

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
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(), який перетворює набір рядків у масив.

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


Name

ST_Point — Створює точку із значеннями X, Y та SRID.

Synopsis

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.

[Note]

Для геодезичних координат X є довготою, а Y — широтою

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

This method implements the SQL/MM specification. SQL-MM 3: 6.1.2

Приклади: Геометрія

SELECT ST_Point(-71.104, 42.315);

Створення точки із зазначеним SRID:

SELECT ST_Point(-71.104, 42.315, 4326);

Альтернативний спосіб вказати SRID:

SELECT ST_SetSRID(ST_Point(-71.104, 42.315), 4326);

Приклади: Географія

Створіть точки географії за допомогою синтаксису перетворення :::

SELECT ST_Point(-71.104, 42.315, 4326)::geography;

Код до PostGIS 3.2, що використовує CAST:

SELECT CAST(ST_SetSRID(ST_Point(-71.104, 42.315), 4326) AS geography);

Якщо координати точки не знаходяться в геодезичній системі координат (такій як WGS84), то перед перенесенням в географічну систему їх необхідно перепроектувати. У цьому прикладі точка в системі координат Pennsylvania State Plane feet (SRID 2273) перепроектована в систему WGS84 (SRID 4326).

SELECT ST_Transform(ST_Point(3637510, 3014852, 2273), 4326)::geography;

Name

ST_PointZ — Створює точку з координатами X, Y, Z та значенням SRID.

Synopsis

geometry ST_PointZ(float x, float y, float z, integer srid=unknown);

Опис

Повертає точку з заданими значеннями координат X, Y і Z, а також, за бажанням, номер SRID.

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

Приклади

SELECT ST_PointZ(-71.104, 42.315, 3.4, 4326)
SELECT ST_PointZ(-71.104, 42.315, 3.4, srid => 4326)
SELECT ST_PointZ(-71.104, 42.315, 3.4)

Name

ST_PointM — Створює точку з значеннями X, Y, M та SRID.

Synopsis

geometry ST_PointM(float x, float y, float m, integer srid=unknown);

Опис

Повертає точку з заданими значеннями координат X, Y і M, а також, за бажанням, номер SRID.

Покращено: 3.2.0 Додано srid як додатковий опціональний аргумент. Старіші версії вимагають поєднання з ST_SetSRID для позначення srid на геометрії.

Приклади

SELECT ST_PointM(-71.104, 42.315, 3.4, 4326)
SELECT ST_PointM(-71.104, 42.315, 3.4, srid => 4326)
SELECT ST_PointM(-71.104, 42.315, 3.4)

Name

ST_PointZM — Створює точку з значеннями X, Y, Z, M та SRID.

Synopsis

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 на геометрії.

Приклади

SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, 4326)
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, srid => 4326)
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5)

Name

ST_Polygon — Створює полігон з LineString із заданим SRID.

Synopsis

geometry ST_Polygon(geometry lineString, integer srid);

Опис

Повертає полігон, побудований з заданого LineString, і встановлює систему просторових координат з srid.

ST_Polygon схожий на ST_MakePolygonВаріант 1 з додаванням налаштування SRID.

Для створення полігонів з отворами використовуйте ST_MakePolygonВаріант 2, а потім ST_SetSRID.

[Note]

Ця функція не приймає 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 полігон.

SELECT ST_AsText(ST_Polygon('LINESTRING(75 29, 77 29, 77 29, 75 29)'::geometry, 4326));
POLYGON((75 29,77 29,77 29,75 29))

Створити 3D полігон.

SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromEWKT('LINESTRING(75 29 1, 77 29 2, 77 29 3, 75 29 1)'), 4326));
SRID=4326;POLYGON((75 29 1, 77 29 2, 77 29 3, 75 29 1))

Name

ST_TileEnvelope — Створює прямокутний полігон у Web Mercator (SRID:3857) за допомогою системи тайлів XYZ.

Synopsis

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

Приклад: Побудова конверта плитки

SELECT ST_AsText(ST_TileEnvelope(2, 1, 1));
POLYGON((-10018754.1713945 0,-10018754.1713945 10018754.1713945,0 10018754.1713945,0 0,-10018754.1713945 0))
SELECT ST_AsText(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))

Див. також

ST_MakeEnvelope


Name

ST_HexagonGrid — Повертає набір шестикутників та індексів комірок, які повністю покривають межі аргументу геометрії.

Synopsis

setof record ST_HexagonGrid(float8 size, geometry bounds);

Опис

Починається з концепції шестикутної мозаїки площини. (Це не шестикутна мозаїка земної кулі, це не схема мозаїки H3). Для заданої плоскої SRS і заданого розміру ребра, починаючи від початку координат SRS, існує одне унікальне шестикутне покриття площини, Tiling(SRS, Size). Ця функція відповідає на питання: які шестикутники в заданому Tiling(SRS, Size) перекриваються з заданими межами.

SRS для вихідних шестикутників — це SRS, що надається геометрією меж.

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

Доступність: 3.1.0

Приклад: Підрахунок точок у шестикутниках

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

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;

Приклад: Створення шестнадцяткового покриття полігонів

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

У результаті мозаїчного покриття кожен стан покривається шестикутником, а на межі між станами утворюються перекриваються шестикутники.

[Note]

Ключове слово LATERAL є імпліцитним для функцій, що повертають набір, коли вони посилаються на попередню таблицю в списку FROM. Тому CROSS JOIN LATERAL, CROSS JOIN або просто є еквівалентними конструкціями для цього прикладу.

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)

Name

ST_Hexagon — Повертає один шестикутник, використовуючи заданий розмір ребра та координати комірки в просторі шестикутної сітки.

Synopsis

geometry ST_Hexagon(float8 size, integer cell_i, integer cell_j, geometry origin);

Опис

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

Шестикутники генеруються без заданого SRID, тому використовуйте ST_SetSRID, щоб задати SRID відповідно до ваших очікувань.

Доступність: 3.1.0

Приклад: Створення шестикутника в початку координат

SELECT ST_AsText(ST_SetSRID(ST_Hexagon(1.0, 0, 0), 3857));

POLYGON((-1 0,-0.5
         -0.866025403784439,0.5
         -0.866025403784439,1
         0,0.5
         0.866025403784439,-0.5
         0.866025403784439,-1 0)) 

Name

ST_SquareGrid — Повертає набір квадратів сітки та індексів комірок, які повністю покривають межі аргументу геометрії.

Synopsis

setof record ST_SquareGrid(float8 size, geometry bounds);

Опис

Починається з концепції квадратного покриття площини. Для заданої плоскої SRS і заданого розміру ребра, починаючи від початку SRS, існує одне унікальне квадратне покриття площини, Tiling(SRS, Size). Ця функція відповідає на питання: які сітки в заданому Tiling(SRS, Size) перекриваються з заданими межами.

SRS для вихідних квадратів — це SRS, що надається геометрією меж.

Подвоєння або розмір краю квадрата створює нову батьківську мозаїку, яка ідеально підходить до оригінальної мозаїки. Стандартні веб-карти в проекції Меркатора — це просто квадратні сітки, що є степенями числа два в площині Меркатора.

Доступність: 3.1.0

Приклад: Створення сітки з кроком 1 градус для країни

Сітка заповнить всю територію країни, тому якщо вам потрібні лише квадрати, що торкаються країни, вам доведеться потім відфільтрувати їх за допомогою ST_Intersects.

WITH grid AS (
SELECT (ST_SquareGrid(1, ST_Transform(geom,4326))).*
FROM admin0 WHERE name = 'Canada'
)
  SELEcT ST_AsText(geom)
  FROM grid

Приклад: Підрахунок очок у квадратах (з використанням одинарної сітки)

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

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

Приклад: Підрахунок точок у квадратах за допомогою набору сіток для кожної точки

Це дає той самий результат, що й у першому прикладі, але буде повільніше для великої кількості точок

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

Name

ST_Square — Повертає один квадрат, використовуючи заданий розмір сторони та координати комірки в просторі квадратної сітки.

Synopsis

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

Приклад: Створення квадрата в початку координат

SELECT ST_AsText(ST_SetSRID(ST_Square(1.0, 0, 0), 3857));

 POLYGON((0 0,0 1,1 1,1 0,0 0))

Name

ST_Letters — Повертає введені літери, відтворені як геометрія, з початковою позицією за замовчуванням в початку координат і висотою тексту за замовчуванням 100.

Synopsis

geometry ST_Letters(text letters, json font);

Опис

Використовує вбудований шрифт для відображення рядка як мультиполігональної геометрії. За замовчуванням висота тексту становить 100,0, відстань від нижньої частини нижнього виступу до верхньої частини великої літери. За замовчуванням початкова позиція розміщує початок базової лінії в точці початку координат. Для заміни шрифту потрібно передати карту json, де ключем є символ, а TWKB, закодований у base64, — форма шрифту, висота шрифтів становить 1000 одиниць від нижньої частини нижнього виступу до верхньої частини великої літери.

Текст за замовчуванням генерується в точці початку координат, тому щоб змінити його положення та розмір, спочатку застосуйте функцію ST_Scale, а потім функцію ST_Translate.

Доступність: 3.3.0

Приклад: Створення слова "Yo"

SELECT ST_AsText(ST_Letters('Yo'));

Листи, створені ST_Letters

Приклад: Масштабування та переміщення слів

SELECT ST_Translate(ST_Scale(ST_Letters('Yo'), 10, 10), 100,100);

Див. також

ST_AsTWKB, ST_Scale, ST_Translate


Name

ST_MakeNurbsCurve — Creates a NURBS (Non-Uniform Rational B-Spline) curve from control points, optional weights, and optional knot vector.

Synopsis

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.

SELECT ST_MakeNurbsCurve(2, 'LINESTRING(0 0, 5 10, 10 0)'::geometry);

This example creates a rational NURBS curve with custom weights.

SELECT ST_MakeNurbsCurve(2, 'LINESTRING(0 0, 5 10, 10 0)'::geometry, ARRAY[1.0, 2.0, 1.0]);

This example creates a NURBS curve with custom weights and knots.

SELECT 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]);

7.4. Доступ до геометрії

Abstract

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

  • 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 — Повертає кількість внутрішніх кілець (отворів) полігону. Aias для ST_NumInteriorRings
  • ST_NumPatches — Повертає кількість граней на багатогранній поверхні. Для небагатогранних геометрій повертає нуль.
  • ST_NumPoints — Повертає кількість точок у LineString або CircularString.
  • ST_PatchN — Повертає N-ту геометрію (грань) багатогранної поверхні.
  • 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.

Name

GeometryType — Повертає тип геометрії у вигляді тексту.

Synopsis

text GeometryType(geometry geomA);

Опис

Повертає тип геометрії у вигляді рядка. Наприклад: 'LINESTRING', 'POLYGON', 'MULTIPOINT' тощо.

OGC SPEC s2.1.1.1 - Повертає ім'я підтипу Geometry, який можна інстанціювати, до якого належить цей екземпляр Geometry. Ім'я підтипу Geometry, який можна інстанціювати, повертається у вигляді рядка.

[Note]

Ця функція також вказує, чи вимірюється геометрія, повертаючи рядок у вигляді '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).

Приклади

SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
LINESTRING
SELECT ST_GeometryType(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)) )'));
                        POLYHEDRALSURFACE
                        
SELECT GeometryType(geom) as result
  FROM
    (SELECT
       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 geom
    ) AS g;
TIN

Див. також

ST_GeometryType


Name

ST_Boundary — Повертає межі геометрії.

Synopsis

geometry ST_Boundary(geometry geomA);

Опис

Повертає закриття комбінаторної межі цієї геометрії. Комбінаторна межа визначається, як описано в розділі 3.12.3.2 специфікації OGC. Оскільки результат цієї функції є закриттям, а отже, топологічно замкнутим, отриману межу можна представити за допомогою примітивних елементів геометрії, як описано в розділі 3.12.2 специфікації OGC.

Виконано модулем GEOS

[Note]

До версії 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, не лінеаризує криві

Приклади

Лінія з накладеними граничними точками

SELECT ST_AsText(ST_Boundary(geom))
FROM (SELECT 'LINESTRING(100 150,50 60, 70 80, 160 170)'::geometry As geom) As f;
                                

MULTIPOINT((100 150),(160 170))

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

SELECT ST_AsText(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))

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')));
MULTIPOINT((1 1),(-1 1))
SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')));
LINESTRING(1 1,0 0,-1 1,1 1)

This example uses a 3D polygon.

SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('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)

This example uses a 3D MultiLineString.

SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('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)

Name

ST_BoundingDiagonal — Повертає діагональ обмежувального прямокутника геометрії.

Synopsis

geometry ST_BoundingDiagonal(geometry geom, boolean fits=false);

Опис

Повертає діагональ обмежувальної рамки наданої геометрії у вигляді LineString. Діагональ — це 2-точковий LineString із мінімальними значеннями кожного виміру в початковій точці та максимальними значеннями в кінцевій точці. Якщо вхідна геометрія порожня, діагональна лінія є LINESTRING EMPTY.

Додатковий параметр fits визначає, чи потрібно знайти найкраще співпадіння. Якщо значення false, можна прийняти діагональ дещо більшої обмежувальної рамки (що швидше обчислюється для геометрій з великою кількістю вершин). У будь-якому випадку обмежувальна рамка поверненої діагональної лінії завжди охоплює вхідну геометрію.

Повернена геометрія зберігає SRID та розмірність (наявність Z та M) вхідної геометрії.

[Note]

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

Доступність: 2.2.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

Приклади

This example returns the minimum X coordinate of a buffer around a point.

SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(
  ST_Buffer(ST_Point(0,0),10)
)));
-10

Name

ST_CoordDim — Повертає розмірність координат геометрії.

Synopsis

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).

Приклади

SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');
3
SELECT ST_CoordDim(ST_Point(1,2));
2

Див. також

ST_NDims


Name

ST_Dimension — Повертає топологічну розмірність геометрії.

Synopsis

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

Покращено: 2.0.0 додано підтримку багатогранних поверхонь і TIN. Більше не виникає виняток, якщо задано порожню геометрію.

[Note]

До версії 2.0.0 ця функція викликає виняток, якщо використовується з порожньою геометрією.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');
1

Див. також

ST_NDims


Name

ST_Dump — Повертає набір рядків geometry_dump для компонентів геометрії.

Synopsis

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 або вище.

[Note]

До версії 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.

Стандартні приклади

SELECT sometable.field1, sometable.field1,
      (ST_Dump(sometable.geom)).geom AS geom
FROM sometable;

-- Break a compound curve into its constituent linestrings and circularstrings
SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
  FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
         FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') 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)

Багатогранні поверхні, TIN і приклади трикутників

This example breaks a PolyhedralSurface into its faces.

SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt
  FROM (SELECT ST_Dump(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 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))

This example uses a TIN geometry.

SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_Dump(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 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))

Name

ST_DumpPoints — Повертає набір рядків geometry_dump для координат у геометрії.

Synopsis

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.

Класичний розрив таблиці рядків у вузли

SELECT edge_id, (dp).path[1] As index, ST_AsText((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)

Приклади стандартної геометрії

SELECT path, ST_AsText(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)

Багатогранні поверхні, TIN і приклади трикутників

This example uses a cube represented as a PolyhedralSurface.

SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints(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 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.

SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints(ST_GeomFromEWKT('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)

This example uses a TIN geometry.

SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints(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 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)

Name

ST_DumpSegments — Повертає набір рядків geometry_dump для сегментів у геометрії.

Synopsis

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.

Приклади стандартної геометрії

SELECT path, ST_AsText(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)

Приклади TIN і трикутників

This example uses a Triangle geometry.

SELECT path, ST_AsText(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)

This example uses a TIN geometry.

SELECT path, ST_AsEWKT(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)

Name

ST_DumpRings — Повертає набір рядків geometry_dump для зовнішнього та внутрішнього кілець полігону.

Synopsis

geometry_dump[] ST_DumpRings(geometry a_polygon);

Опис

Функція повернення набору (SRF), яка витягує кільця полігону. Вона повертає набір geometry_dumpрядків, кожен з яких містить геометрію (поле geom) та масив цілих чисел (поле path).

Поле geom містить кожне кільце як POLYGON. Поле path є цілочисельним масивом довжиною 1, що містить індекс кільця полігону. Зовнішнє кільце (оболонка) має індекс 0. Внутрішні кільця (отвори) мають індекси 1 і вище.

[Note]

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.

Приклади

Витяг усіх кілець як полігонів.

SELECT polyTable.field1, polyTable.field1,
          (ST_DumpRings(polyTable.geom)).geom As geom
FROM polyTable

Вилучення оболонки та отворів з полігона.

SELECT path, ST_AsText(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))

Name

ST_EndPoint — Returns the last point of a LineString, CircularLineString, or NURBSCurve.

Synopsis

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.

[Note]

Змінено: 2.0.0 більше не працює з одномірними MultiLineStrings. У старих версіях PostGIS одномірний MultiLineString працював з цією функцією і повертав кінцеву точку. У 2.0.0 він повертає NULL, як і будь-який інший MultiLineString. Стара поведінка була недокументованою функцією, але користувачі, які вважали, що їхні дані зберігаються як LINESTRING, можуть зіткнутися з поверненням NULL у 2.0.0.

Приклади

End point of a LineString

SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));
POINT(3 3)

Кінцева точка нелінійного об'єкта LineString має значення NULL

SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;
t

Кінцева точка 3D-лінії

3D endpoint.

SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));
POINT(0 0 5)

Кінцева точка CircularString

SELECT ST_AsText(ST_EndPoint('CIRCULARSTRING(5 2,-3 2, -2 1, -4 2, 6 3)'::geometry));
POINT(6 3)

End point of a NURBSCurve

SELECT ST_AsText(ST_EndPoint('NURBSCURVE(2, (0 0, 1 1, 2 0))'::geometry));
POINT(2 0)

Див. також

ST_PointN, ST_StartPoint


Name

ST_Envelope — Повертає геометрію, що представляє обмежувальну рамку геометрії.

Synopsis

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

Приклади

SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));
POINT(1 3)
SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));
POLYGON((0 0,0 3,1 3,1 0,0 0))
SELECT ST_AsText(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))
SELECT ST_AsText(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))
SELECT Box3D(geom), Box2D(geom), ST_AsText(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;

Огинаюча точки та лінійного відрізка.

SELECT ST_AsText(ST_Envelope(ST_Collect(
                        ST_GeomFromText('LINESTRING(55 75,125 150)'),
                        ST_Point(20, 80)
                        ))) As wktenv;
POLYGON((20 75,20 150,125 150,125 75,20 75))

Див. також

Box2D, Box3D, ST_OrientedEnvelope


Name

ST_ExteriorRing — Повертає LineString, що представляє зовнішнє кільце полігону

Synopsis

geometry ST_ExteriorRing(geometry a_polygon);

Опис

Повертає LineString, що представляє зовнішнє кільце полігону.

[Note]

Ця функція не підтримує 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.

Приклади

This example extracts exterior rings from a table of polygons.

SELECT gid, ST_ExteriorRing(geom) AS ering
FROM sometable;

--If you have a table of MULTIPOLYGONs
--and want to return a MULTILINESTRING composed of the exterior rings of each polygon
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;

--3d Example
SELECT ST_AsEWKT(ST_ExteriorRing(
        ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')
        )
);
LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)

Name

ST_GeometryN — Повернути елемент колекції геометрії.

Synopsis

geometry ST_GeometryN(geometry geomA, integer n);

Опис

Return the 1-based Nth element geometry of an input geometry which is a GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE, MULTIPOLYGON, or POLYHEDRALSURFACE. Otherwise, returns NULL.

[Note]

Індекс базується на 1, як і в специфікаціях OGC, починаючи з версії 0.8.0. У попередніх версіях це реалізовано на основі 0.

[Note]

Щоб витягти всі елементи геометрії, ST_Dumpє більш ефективним і працює для атомних геометрій.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь, трикутників і TIN.

Змінено: 2.0.0 Попередні версії повертали NULL для геометрій в однині. Це було змінено, щоб повертати геометрію для випадку ST_GeometryN(..,1).

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.

SELECT n, ST_AsEWKT(ST_GeometryN(geom, n)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('MULTIPOINT((1 2 7), (3 4 7), (5 6 7), (8 9 10))') ),
( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') )
        )As foo(geom)
        CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

 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)


--Extracting all geometries (useful when you want to assign an id)
SELECT gid, n, ST_GeometryN(geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

Багатогранні поверхні, TIN і приклади трикутників

This example breaks a PolyhedralSurface into its faces.

SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt
  FROM (SELECT 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 p_geom )  AS a;

Output:

POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))

This example uses a TIN geometry.

SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt
  FROM
    (SELECT
       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 geom
    ) AS g;

Output:

TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

Див. також

ST_Dump, ST_NumGeometries


Name

ST_GeometryType — Повертає тип SQL-MM геометрії у вигляді тексту.

Synopsis

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.

Приклади

SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                        ST_LineString
SELECT ST_GeometryType(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)) )'));
                        ST_PolyhedralSurface
SELECT ST_GeometryType(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)) )'));
                        ST_PolyhedralSurface
SELECT ST_GeometryType(geom) as result
  FROM
    (SELECT
       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 geom
    ) AS g;
ST_Tin

Див. також

GeometryType


Name

ST_HasArc — Тестує, чи містить геометрія кругову дугу

Synopsis

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.

Приклади

SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)'));
t

Див. також

ST_CurveToLine, ST_LineToCurve


Name

ST_InteriorRingN — Повертає N-те внутрішнє кільце (отвір) полігону.

Synopsis

geometry ST_InteriorRingN(geometry a_polygon, integer n);

Опис

Повертає N-те внутрішнє кільце (отвір) геометрії POLYGON як LINESTRING. Індекс починається з 1. Повертає NULL, якщо геометрія не є полігоном або індекс виходить за межі діапазону.

[Note]

Ця функція не підтримує 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.

Приклади

SELECT ST_AsText(ST_InteriorRingN(geom, 1)) As geom
FROM (SELECT ST_BuildArea(ST_Collect(
                        ST_Buffer(ST_Point(1,2), 20,3),
                        ST_Buffer(ST_Point(1, 2), 10,3))) As geom
                )  as foo;
                

Name

ST_NumCurves — Повернути кількість кривих компонентів у CompoundCurve.

Synopsis

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.

Приклади

-- Returns 3
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)
  )');

-- Returns 0
SELECT ST_NumCurves('COMPOUNDCURVE EMPTY');
        

Name

ST_CurveN — Повертає геометрію N-го компонента кривої CompoundCurve.

Synopsis

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.

Приклади

SELECT ST_AsText(ST_CurveN(
  '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)
  )',
  1));
        

Name

ST_IsClosed — Перевіряє, чи збігаються початкова та кінцева точки LineStrings. Для PolyhedralSurface перевіряє, чи є вона закритою (об'ємною).

Synopsis

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

[Note]

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

SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);
f
SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);
t
SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);
f
SELECT ST_IsClosed('POINT(0 0)'::geometry);
t
SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);
t

Приклади багатогранних поверхонь

This example uses a cube.

SELECT ST_IsClosed(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)) )'));
t

This example uses the same cube with one side missing.

SELECT ST_IsClosed(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)) )'));
f

Див. також

ST_IsRing


Name

ST_IsCollection — Перевіряє, чи є геометрія типом колекції геометрії.

Synopsis

boolean ST_IsCollection(geometry g);

Опис

Повертає TRUE, якщо тип геометрії аргументу є типом колекції геометрії. Типи колекцій є такими:

  • GEOMETRYCOLLECTION

  • MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE}

  • COMPOUNDCURVE

[Note]

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

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);
f
SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);
t
SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);
t
SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);
t
SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);
t

Див. також

ST_NumGeometries


Name

ST_IsEmpty — Перевіряє, чи геометрія порожня.

Synopsis

boolean ST_IsEmpty(geometry geomA);

Опис

Повертає true, якщо ця геометрія є порожньою. Якщо true, то ця геометрія представляє порожню колекцію геометрії, полігон, точку тощо.

[Note]

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.

[Warning]

Змінено: 2.0.0 У попередніх версіях PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') було дозволено. Тепер це є незаконним у PostGIS 2.0.0 для кращої відповідності стандартам SQL/MM

Приклади

SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));
t
SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));
t
SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
f
SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false;
t
(1 row)
SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));
t

Name

ST_IsPolygonCCW — Перевіряє, чи мають полігони зовнішні кільця, орієнтовані проти годинникової стрілки, і внутрішні кільця, орієнтовані за годинниковою стрілкою.

Synopsis

boolean ST_IsPolygonCCW ( geometry geom );

Опис

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

Повертає true, якщо геометрія не має полігональних компонентів.

[Note]

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

[Note]

Якщо полігональна геометрія не використовує зворотну орієнтацію для внутрішніх кілець (тобто, якщо одне або більше внутрішніх кілець орієнтовані в тому ж напрямку, що і зовнішнє кільце), то обидва ST_IsPolygonCW і ST_IsPolygonCCW повернуть false.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_IsPolygonCW — Перевіряє, чи полігони мають зовнішні кільця, орієнтовані за годинниковою стрілкою, а внутрішні кільця — проти годинникової стрілки.

Synopsis

boolean ST_IsPolygonCW ( geometry geom );

Опис

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

Повертає true, якщо геометрія не має полігональних компонентів.

[Note]

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

[Note]

Якщо полігональна геометрія не використовує зворотну орієнтацію для внутрішніх кілець (тобто, якщо одне або більше внутрішніх кілець орієнтовані в тому ж напрямку, що і зовнішнє кільце), то обидва ST_IsPolygonCW і ST_IsPolygonCCW повернуть false.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_IsRing — Перевіряє, чи лінія LineString є замкнутою та простою.

Synopsis

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

[Note]

SQL-MM визначає результат ST_IsRing(NULL) як 0, тоді як PostGIS повертає NULL.

Приклади

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)
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)

Name

ST_IsSimple — Перевіряє, чи геометрія не має точок самоперетину або самодотику.

Synopsis

boolean ST_IsSimple(geometry geomA);

Опис

Повертає значення true, якщо ця геометрія не має аномальних геометричних точок, таких як самоперетин або самодотичність. Для отримання додаткової інформації про визначення простоти та валідності геометрії OGC див. "Забезпечення відповідності геометрій стандарту OpenGIS"

[Note]

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.

Приклади

SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
f
SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
f

Див. також

ST_IsValid


Name

ST_M — Повертає координату M точки.

Synopsis

float ST_M(geometry a_point);

Опис

Повертає координату M точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Note]

Це (поки що) не є частиною специфікації 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.

Приклади

SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));
4

Див. також

ST_GeomFromEWKT, ST_X, ST_Y, ST_Z


Name

ST_MemSize — Повертає обсяг пам'яті, який займає геометрія.

Synopsis

integer ST_MemSize(geometry geomA);

Опис

Повертає обсяг пам'яті (у байтах), який займає геометрія.

Це доповнює вбудовані в PostgreSQL функції об'єктів бази даних pg_column_size, pg_size_pretty, pg_relation_size, pg_total_relation_size.

[Note]

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 відповідно до правил іменування.

Приклади

--Return how much byte space Boston takes up  in our Mass data set
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)*1.00 /
                SUM(ST_MemSize(geom))*100 As numeric(10,2)) As perbos
FROM towns;

totgeomsum        bossum        perbos
----------        ------        ------
1522 kB                30 kB        1.99


SELECT ST_MemSize(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));

---
73

--What percentage of our table is taken up by just the geometry
SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum(ST_MemSize(geom)) As geomsize,
sum(ST_MemSize(geom))*1.00/pg_total_relation_size('public.neighborhoods')*100 As pergeom
FROM neighborhoods;
fulltable_size geomsize  pergeom
------------------------------------------------
262144         96238         36.71188354492187500000
        

Name

ST_NDims — Повертає розмір координат геометрії.

Synopsis

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.

Приклади

SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,
        ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,
        ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;
d2point | d3point | d2pointm
---------+---------+----------
           2 |       3 |        3

Name

ST_NPoints — Повертає кількість точок (вершин) у геометрії.

Synopsis

integer ST_NPoints(geometry g1);

Опис

Повертає кількість точок у геометрії. Працює для всіх геометрій.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

[Note]

До версії 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.

Приклади

SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
4

--Polygon in 3D space
SELECT ST_NPoints(ST_GeomFromEWKT('LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)'))
4

Див. також

ST_NumPoints


Name

ST_NRings — Повертає кількість кілець у полігональній геометрії.

Synopsis

integer ST_NRings(geometry geomA);

Опис

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

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_NRings(geom) As Nrings, ST_NumInteriorRings(geom) As ninterrings
                                        FROM (SELECT ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As geom) As foo;
nrings | ninterrings
--------+-------------
          1 |           0
(1 row)

Див. також

ST_NumInteriorRings


Name

ST_NumGeometries — Повертає кількість елементів у колекції геометрії.

Synopsis

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.

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.

SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
1

--Geometry Collection Example - multis count as one geom in a collection
SELECT ST_NumGeometries(ST_GeomFromEWKT('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)))'));
3

Див. також

ST_GeometryN, ST_Multi


Name

ST_NumInteriorRings — Повертає кількість внутрішніх кілець (отворів) полігону.

Synopsis

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.

Приклади

This example counts the interior rings of a polygon.

SELECT gid, field1, field2, ST_NumInteriorRings(geom) AS numholes
FROM sometable;

--If you have multipolygons
--And you want to know the total number of interior rings in the MULTIPOLYGON
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;
                        

Name

ST_NumInteriorRing — Повертає кількість внутрішніх кілець (отворів) полігону. Aias для ST_NumInteriorRings

Synopsis

integer ST_NumInteriorRing(geometry a_polygon);


Name

ST_NumPatches — Повертає кількість граней на багатогранній поверхні. Для небагатогранних геометрій повертає нуль.

Synopsis

integer ST_NumPatches(geometry g1);

Опис

Повертає кількість граней на багатогранній поверхні. Для геометрій, що не є багатогранними, повертає нуль. Це псевдонім для ST_NumGeometries для підтримки іменування MM. Якщо вам не важлива конвенція MM, швидше використовувати ST_NumGeometries.

Доступність: 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.

Приклади

SELECT ST_NumPatches(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)) )'));
                6
                

Name

ST_NumPoints — Повертає кількість точок у LineString або CircularString.

Synopsis

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

Приклади

SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                4
                

Див. також

ST_NPoints


Name

ST_PatchN — Повертає N-ту геометрію (грань) багатогранної поверхні.

Synopsis

geometry ST_PatchN(geometry geomA, integer n);

Опис

Повертає N-ту геометрію (грань), починаючи з 1, якщо геометрія є POLYHEDRALSURFACE або POLYHEDRALSURFACEM. В іншому випадку повертає NULL. Повертає той самий результат, що й ST_GeometryN для PolyhedralSurfaces. Використання ST_GeometryN є швидшим.

[Note]

Індекс починається з 1.

[Note]

Якщо ви хочете витягти всі елементи геометрії, 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.

Приклади

Extract the 2nd face of the polyhedral surface.

SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt
FROM (
VALUES (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 foo(geom);
POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))

Name

ST_PointN — Повертає N-ту точку в першому LineString або круговому LineString в геометрії.

Synopsis

geometry ST_PointN(geometry a_linestring, integer n);

Опис

Повертає N-ту точку в одній лінійній або круговій лінійній геометрії. Негативні значення відраховуються назад від кінця LineString, так що -1 є останньою точкою. Повертає NULL, якщо в геометрії немає лінійної геометрії.

[Note]

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.

[Note]

Якщо ви хочете отримати 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.

[Note]

Змінено: 2.0.0 більше не працює з одногеометричними мультилініями. У старіших версіях PostGIS — одинарну мультилінію працював би з цією функцією без проблем і повертав би початкову точку. У 2.0.0 він просто повертає NULL, як і будь-який інший мультилінії.

Змінено: 2.3.0: доступне негативне індексування (-1 — останній пункт)

Приклади

This example extracts all POINT geometries from a LineString.

SELECT ST_AsText(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)

This example uses a CircularString.

SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'), 2));
POINT(3 2)
SELECT ST_AsText(f)
FROM ST_GeomFromText('LINESTRING(0 0 0, 1 1 1, 2 2 2)') AS g
  CROSS JOIN ST_PointN(g, -2) AS f; -- 1 based index
POINT Z (1 1 1)

Див. також

ST_NPoints


Name

ST_Points — Повертає об'єкт MultiPoint, що містить координати геометрії.

Synopsis

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

Приклади

SELECT ST_AsText(ST_Points('POLYGON Z ((30 10 4,10 30 5,40 40 6, 30 10))'));

MULTIPOINT Z ((30 10 4),(10 30 5),(40 40 6),(30 10 4))
                        

Name

ST_StartPoint — Returns the first point of a LineString, CircularLineString, or NURBSCurve.

Synopsis

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.

[Note]

Покращено: 3.2.0 повертає точку для всіх геометрій. Попередня поведінка повертала NULL, якщо вхідні дані не були LineString.

Змінено: 2.0.0 більше не працює з одномірними геометричними об'єктами MultiLineStrings. У старих версіях PostGIS одномірний MultiLineString працював з цією функцією без проблем і повертав початкову точку. У 2.0.0 він просто повертає NULL, як і будь-який інший MultiLineString. Стара поведінка була недокументованою функцією, але користувачі, які вважали, що їхні дані зберігаються як LINESTRING, можуть зіткнутися з поверненням NULL у 2.0.0.

Приклади

Початкова точка лінії

SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));
POINT(0 1)

Start point of a Point is the Point itself

SELECT ST_AsText(ST_StartPoint('POINT(0 1)'::geometry));
POINT(0 1)

Початкова точка 3D-лінії

SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry));
POINT(0 1 1)

Початкова точка CircularString

SELECT ST_AsText(ST_StartPoint('CIRCULARSTRING(5 2,-3 2, -2 1, -4 2, 6 3)'::geometry));
POINT(5 2)

Start point of a NURBSCurve

SELECT ST_AsText(ST_StartPoint('NURBSCURVE(2, (0 0, 1 1, 2 0))'::geometry));
POINT(0 0)

Див. також

ST_EndPoint, ST_PointN


Name

ST_StartM — Returns the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.

Synopsis

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

SELECT ST_StartM('LINESTRING M(0 0 10, 1 1 20, 2 0 30)'::geometry);
10

Start M value of a CircularString

SELECT ST_StartM('CIRCULARSTRING M(0 0 5, 1 1 10, 2 0 15)'::geometry);
5

Start M value of a NURBSCurve

SELECT ST_StartM('NURBSCURVE M(2, (0 0 100, 1 1 200, 2 0 300))'::geometry);
100

Geometry without M dimension returns NULL

SELECT ST_StartM('LINESTRING(0 0, 1 1)'::geometry) IS NULL AS is_null;
t

Див. також

ST_EndM, ST_SetStartM, ST_StartPoint


Name

ST_EndM — Returns the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.

Synopsis

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

SELECT ST_EndM('LINESTRING M(0 0 10, 1 1 20, 2 0 30)'::geometry);
30

End M value of a CircularString

SELECT ST_EndM('CIRCULARSTRING M(0 0 5, 1 1 10, 2 0 15)'::geometry);
15

End M value of a NURBSCurve

SELECT ST_EndM('NURBSCURVE M(2, (0 0 100, 1 1 200, 2 0 300))'::geometry);
300

Geometry without M dimension returns NULL

SELECT ST_EndM('LINESTRING(0 0, 1 1)'::geometry) IS NULL AS is_null;
t

Див. також

ST_StartM, ST_SetEndM, ST_EndPoint


Name

ST_SetStartM — Sets the M coordinate of the first point of a LineString, CircularLineString, or NURBSCurve.

Synopsis

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

SELECT ST_AsText(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)

Add M dimension and set start M value

SELECT ST_AsText(ST_SetStartM('LINESTRING(0 0, 1 1, 2 0)'::geometry, 50));
LINESTRING M (0 0 50,1 1 0,2 0 0)

Set start M value of a CircularString

SELECT ST_AsText(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)

Set start M value of a NURBSCurve

SELECT ST_AsText(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)))

Див. також

ST_SetEndM, ST_StartM, ST_StartPoint


Name

ST_SetEndM — Sets the M coordinate of the last point of a LineString, CircularLineString, or NURBSCurve.

Synopsis

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

SELECT ST_AsText(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)

Add M dimension and set end M value

SELECT ST_AsText(ST_SetEndM('LINESTRING(0 0, 1 1, 2 0)'::geometry, 75));
LINESTRING M (0 0 0,1 1 0,2 0 75)

Set end M value of a CircularString

SELECT ST_AsText(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)

Set end M value of a NURBSCurve

SELECT ST_AsText(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)))

Див. також

ST_SetStartM, ST_EndM, ST_EndPoint


Name

ST_Summary — Повертає текстовий підсумок вмісту геометрії.

Synopsis

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 і кривих

Приклади

SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,
        ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog;
geom             |          geog
-----------------------------+--------------------------
 LineString[B] with 2 points | Polygon[BGS] with 1 rings
                             | ring 0 has 5 points
                             :
(1 row)
SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As geog_line,
        ST_Summary(ST_GeomFromText('SRID=4326;POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 1))')) As geom_poly;
geog_line             |        geom_poly
-------------------------------- +--------------------------
 LineString[ZBGS] with 2 points | Polygon[ZBS] with 1 rings
                                :    ring 0 has 5 points
                                :
(1 row)

Name

ST_X — Повертає координату X точки.

Synopsis

float ST_X(geometry a_point);

Опис

Повертає координату X точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Note]

Щоб отримати мінімальне та максимальне значення 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.

Приклади

SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));
1
SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
1.5

Name

ST_Y — Повертає координату Y точки.

Synopsis

float ST_Y(geometry a_point);

Опис

Повертає координату Y точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Note]

Щоб отримати мінімальне та максимальне значення 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.

Приклади

SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));
2
SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
1.5

Name

ST_Z — Повертає координату Z точки.

Synopsis

float ST_Z(geometry a_point);

Опис

Повертає координату Z точки або NULL, якщо вона недоступна. Вхідні дані повинні бути точкою.

[Note]

Щоб отримати мінімальне та максимальне значення Z координат геометрії, використовуйте функції ST_ZMin та ST_ZMax.

This method implements the SQL/MM specification.

This function supports 3d and will not drop the z-index.

Приклади

SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));
3

Див. також

ST_GeomFromEWKT, ST_M, ST_X, ST_Y, ST_ZMax, ST_ZMin


Name

ST_ZMFlag — Повертає код, що вказує на розмірність координат ZM геометрії.

Synopsis

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.

Приклади

SELECT ST_ZMFlag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));
0
SELECT ST_ZMFlag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));
1
SELECT ST_ZMFlag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));
2
SELECT ST_ZMFlag(ST_GeomFromEWKT('POINT(1 2 3 4)'));
3

Див. також

ST_CoordDim, ST_NDims, ST_Dimension


Name

ST_HasZ — Перевіряє, чи має геометрія розмір Z.

Synopsis

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.

Приклади

SELECT ST_HasZ(ST_GeomFromText('POINT(1 2 3)'));
 true
SELECT ST_HasZ(ST_GeomFromText('LINESTRING(0 0, 1 1)'));
 false

Див. також

ST_ZMFlag

ST_HasM


Name

ST_HasM — Перевіряє, чи має геометрія розмір M (вимір).

Synopsis

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.

Приклади

SELECT ST_HasM(ST_GeomFromText('POINTM(1 2 3)'));
 true
SELECT ST_HasM(ST_GeomFromText('LINESTRING(0 0, 1 1)'));
 false

Див. також

ST_ZMFlag

ST_HasZ


Name

ST_ControlPoints — Returns the control points of a NURBS curve as a MULTIPOINT geometry.

Synopsis

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.

SELECT ST_AsText(ST_ControlPoints('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry));
MULTIPOINT((0 0),(5 10),(10 0))

This example counts the control points.

SELECT ST_NPoints(ST_ControlPoints('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry));
3

Name

ST_Degree — Returns the polynomial degree of a NURBS curve.

Synopsis

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.

SELECT ST_Degree('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
2

This example checks whether a NURBS curve is cubic.

SELECT ST_Degree('NURBSCURVE(3, (0 0, 2 5, 5 8, 10 0))'::geometry) = 3;
t

Name

ST_Weights — Returns the weight array of a rational NURBS curve.

Synopsis

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.

SELECT ST_Weights(ST_MakeNurbsCurve(2, 'LINESTRING(0 0, 5 10, 10 0)'::geometry, ARRAY[1.0, 2.0, 1.0]));
{1,2,1}

This example checks the weights of a non-rational curve.

SELECT ST_Weights('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
null

Name

ST_Knots — Returns the knot vector of a NURBS curve.

Synopsis

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.

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}

This example checks the knots of a curve using the default knot vector.

SELECT ST_Knots('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
null

Name

ST_NumControlPoints — Returns the number of control points in a NURBS curve.

Synopsis

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.

SELECT ST_NumControlPoints('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
3

This example verifies that a curve has enough control points for its degree.

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

Name

ST_NurbsCurveIsRational — Checks if a NURBS curve is rational (has weights).

Synopsis

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.

SELECT ST_NurbsCurveIsRational(ST_MakeNurbsCurve(
                2,
                'LINESTRING(0 0, 5 10, 10 0)'::geometry,
                ARRAY[1.0, 2.0, 1.0]));
t

This example checks a non-rational curve.

SELECT ST_NurbsCurveIsRational('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
f

Name

ST_IsNurbsCurve — Checks if a geometry is a NURBS curve.

Synopsis

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.

SELECT ST_IsNurbsCurve('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry);
t

This example tests a regular LineString.

SELECT ST_IsNurbsCurve('LINESTRING(0 0, 10 10)'::geometry);
f

Name

ST_Evaluate — Evaluates a NURBS curve at a specific parameter value and returns the resulting point.

Synopsis

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.

SELECT ST_AsText(ST_Evaluate('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry, 0.5));

This example samples multiple points along a curve.

SELECT t, ST_AsText(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;

Name

ST_NurbsToLineString — Converts a NURBS curve to a LINESTRING by uniform sampling.

Synopsis

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.

SELECT ST_AsText(ST_NurbsToLineString('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry));

This example creates a high-quality approximation with 64 segments.

SELECT ST_AsText(ST_NurbsToLineString('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry, 64));

This example creates a lower-quality, faster approximation with 16 segments.

SELECT ST_AsText(ST_NurbsToLineString('NURBSCURVE(2, (0 0, 5 10, 10 0))'::geometry, 16));

7.5. Редактори геометрії

Abstract

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

  • 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 — Змусити геометрії використовувати тільки типи геометрії SFS 1.1.
  • 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 — Повертає версію заданої геометрії із заміненими значеннями ординат.

Name

ST_AddPoint — Додати точку до LineString.

Synopsis

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 лінії

SELECT ST_AsEWKT(ST_AddPoint('LINESTRING(0 0 1, 1 1 1)', ST_MakePoint(1, 2, 3)));
LINESTRING(0 0 1,1 1 1,1 2 3)

Гарантуйте, що всі лінії в таблиці закриті, додавши початкову точку кожної лінії до кінця лінії тільки для тих, які не закриті.

UPDATE sometable
SET geom = ST_AddPoint(geom, ST_StartPoint(geom))
FROM sometable
WHERE ST_IsClosed(geom) = false;

Див. також

ST_RemovePoint, ST_SetPoint


Name

ST_CollectionExtract — За заданою колекцією геометрій повертає мультигеометрію, що містить тільки елементи заданого типу.

Synopsis

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

Опис

За заданою колекцією геометрій повертає однорідну мультигеометрію.

Якщо type не вказано, повертає мультигеометрію, що містить тільки геометрії найвищого виміру. Тому полігони мають пріоритет над лініями, які мають пріоритет над точками.

Якщо вказано type, повертає мультигеометрію, що містить тільки цей тип. Якщо немає підгеометрій потрібного типу, повертається геометрія EMPTY. Підтримуються тільки точки, лінії та полігони. Номери типів:

  • 1 == POINT

  • 2 == LINESTRING

  • 3 == POLYGON

Для вхідних даних атомарної геометрії геометрія повертається без змін, якщо тип вхідних даних відповідає запитуваному типу. В іншому випадку результатом є геометрія EMPTY заданого типу. За необхідності їх можна перетворити на мультигеометрії за допомогою ST_Multi.

[Warning]

Результати MultiPolygon не перевіряються на валідність. Якщо компоненти полігону є суміжними або перекриваються, результат буде недійсним. (Наприклад, це може статися при застосуванні цієї функції до результату ST_Split.) Цю ситуацію можна перевірити за допомогою ST_IsValid і виправити за допомогою ST_MakeValid.

Доступність: 1.5.0

[Note]

До версії 1.5.3 ця функція повертала атомарні вхідні дані без змін, незалежно від типу. У версії 1.5.3 невідповідні одиничні геометрії повертали результат NULL. У версії 2.0.0 невідповідні одиничні геометрії повертають результат EMPTY запитуваного типу.

Приклади

Витяг типу найвищого виміру:

SELECT ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
MULTILINESTRING((1 1, 2 2))

Витягнути точки (тип 1 == POINT):

SELECT ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
                1));
MULTIPOINT((0 0))

Витягнути лінії (тип 2 == LINESTRING):

SELECT ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))',
                2));
MULTILINESTRING((0 0, 1 1), (2 2, 3 3))

Name

ST_CollectionHomogenize — Повертає найпростіше представлення колекції геометрії.

Synopsis

geometry ST_CollectionHomogenize(geometry collection);

Опис

За заданою колекцією геометрії повертає "найпростіше" представлення вмісту.

  • Однорідні (однотипні) колекції повертаються як відповідна мультигеометрія.

  • Гетерогенні (змішані) колекції об'єднуються в одну колекцію GeometryCollection.

  • Колекції, що містять один атомарний елемент, повертаються як цей елемент.

  • Атомарні геометрії повертаються без змін. При необхідності їх можна перетворити на мультигеометрії за допомогою ST_Multi.

[Warning]

Ця функція не гарантує, що результат є дійсним. Зокрема, колекція, що містить сусідні або перекриваються полігони, створить недійсний MultiPolygon. Цю ситуацію можна перевірити за допомогою ST_IsValid і виправити за допомогою ST_MakeValid.

Доступність: 2.0.0

Приклади

Одноелементна колекція, перетворена в атомарну геометрію

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));
POINT(0 0)

Вкладена колекція з одним елементом, перетворена в атомарну геометрію:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(MULTIPOINT((0 0)))'));
POINT(0 0)

Колекція перетворена на багатогеометрію:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));
MULTIPOINT((0 0),(1 1))

Вкладені неоднорідні колекції, сплощені до GeometryCollection:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0), GEOMETRYCOLLECTION( LINESTRING(1 1, 2 2)))'));
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2))

Колекція полігонів, перетворених у (недійсний) MultiPolygon:

SELECT ST_AsText(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)))

Name

ST_CurveToLine — Перетворює геометрію, що містить криві, на лінійну геометрію.

Synopsis

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.

Приклади

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('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)

This example uses 3D input.

SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('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.

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('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)

Ensure approximated line is no further than 20 units away from. Original curve, and make the result direction-neutral.

SELECT ST_AsText(ST_CurveToLine('CIRCULARSTRING(0 0,100 -100,200 0)'::geometry,
                20, -- Tolerance
                1, -- Above is max distance between curve and line
                1  -- Symmetric flag
));
LINESTRING(0 0,49.99999999999996 -86.60254037844383,149.99999999999994 -86.6025403784439,200 0)

Див. також

ST_LineToCurve


Name

ST_Scroll — Змінити початкову точку замкнутої лінії LineString.

Synopsis

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.

Приклади

Зробіть закриту лінію, починаючи з її третьої вершини

SELECT ST_AsEWKT(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)

Див. також

ST_Normalize


Name

ST_FlipCoordinates — Повертає версію геометрії з перевернутими осями X та Y.

Synopsis

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).

Приклад

SELECT ST_AsEWKT(ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)')));
POINT(2 1)

Див. також

ST_SwapOrdinates


Name

ST_Force2D — Примусово переведіть геометрії в "2-вимірний режим".

Synopsis

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.

Приклади

SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('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)
SELECT  ST_AsEWKT(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))

Див. також

ST_Force3D


Name

ST_Force3D — Примусово перевести геометрії в режим XYZ. Це псевдонім для ST_Force3DZ.

Synopsis

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.

SELECT ST_AsEWKT(ST_Force3D(ST_GeomFromEWKT('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)
SELECT  ST_AsEWKT(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))

Name

ST_Force3DZ — Примусово перевести геометрії в режим XYZ.

Synopsis

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.

SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromEWKT('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)
SELECT  ST_AsEWKT(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))

Name

ST_Force3DM — Примусово перевести геометрії в режим XYM.

Synopsis

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.

SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromEWKT('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)
SELECT  ST_AsEWKT(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))

Name

ST_Force4D — Примусово перевести геометрії в режим XYZM.

Synopsis

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.

SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromEWKT('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)
SELECT  ST_AsEWKT(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))

Name

ST_ForceCollection — Перетворити геометрію в GEOMETRYCOLLECTION.

Synopsis

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.

Приклади

SELECT  ST_AsEWKT(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)))
SELECT ST_AsText(ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));
GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))

This example uses a PolyhedralSurface.

SELECT ST_AsEWKT(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))
)
                

Name

ST_ForceCurve — Перетворити геометрію в її вигнутий тип, якщо це можливо.

Synopsis

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.

Приклади

SELECT ST_AsText(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))

Див. також

ST_LineToCurve


Name

ST_ForcePolygonCCW — Всі зовнішні кільця орієнтуйте проти годинникової стрілки, а всі внутрішні кільця — за годинниковою стрілкою.

Synopsis

geometry ST_ForcePolygonCCW ( geometry geom );

Опис

Змушує (Мульти)Полігони) використовувати орієнтацію проти годинникової стрілки для зовнішнього кільця та орієнтацію за годинниковою стрілкою для внутрішніх кілець. Неполігональні геометрії повертаються без змін.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_ForcePolygonCW — Всі зовнішні кільця орієнтуйте за годинниковою стрілкою, а всі внутрішні кільця — проти годинникової стрілки.

Synopsis

geometry ST_ForcePolygonCW ( geometry geom );

Опис

Змушує (Мульти)Полігони) використовувати орієнтацію за годинниковою стрілкою для зовнішнього кільця та проти годинникової стрілки для внутрішніх кілець. Неполігональні геометрії повертаються без змін.

Доступність: 2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_ForceSFS — Змусити геометрії використовувати тільки типи геометрії SFS 1.1.

Synopsis

geometry ST_ForceSFS(geometry geomA);

geometry ST_ForceSFS(geometry geomA, text version);

Опис

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.


Name

ST_ForceRHR — Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.

Synopsis

geometry ST_ForceRHR(geometry g);

Опис

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

[Note]

Вищезазначене визначення правила правої руки суперечить визначенням, що використовуються в інших контекстах. Щоб уникнути плутанини, рекомендується використовувати ST_ForcePolygonCW.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_AsEWKT(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))

Name

ST_LineExtend — Повертає лінію, розширений вперед і назад на вказані відстані.

Synopsis

geometry ST_LineExtend(geometry line, float distance_forward, float distance_backward=0.0);

Опис

Повертає лінію, продовжену вперед і назад шляхом додавання нових початкових (і кінцевих) точок на заданій відстані (відстанях). Відстань, рівна нулю, не додає точку. Допускаються тільки невід'ємні відстані. Напрямок доданих точок визначається першими (і останніми) двома відмінними точками лінії. Повторювані точки ігноруються.

Доступність: 3.4.0

Приклад: Продовжує лінію на 5 одиниць вперед і 6 одиниць назад

SELECT ST_AsText(ST_LineExtend('LINESTRING(0 0, 0 10)'::geometry, 5, 6));
LINESTRING(0 -6,0 0,0 10,0 15)

Name

ST_LineToCurve — Перетворює лінійну геометрію на криву геометрію.

Synopsis

geometry ST_LineToCurve(geometry geomANoncircular);

Опис

Перетворює прості LINESTRING/POLYGON в CIRCULAR STRINGs і вигнуті полігони. Зверніть увагу, що для опису вигнутого еквівалента потрібно набагато менше точок.

[Note]

Якщо вхідні дані 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 uses 2D input.

SELECT ST_AsText(ST_LineToCurve(foo.geom)) As curvedastext,ST_AsText(foo.geom) As non_curvedastext
    FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As geom) As foo;

curvedatext                                                            non_curvedastext
--------------------------------------------------------------------|-----------------------------------------------------------------
CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 0.878679656440359, | POLYGON((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473,
1 0,-1.12132034355965 5.12132034355963,4 3))                        |  3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359,
                                                                    |  2.66671069905881 0.505591163092366,2.14805029709527 0.228361402466141,
                                                                    |  1.58527096604839 0.0576441587903094,1 0,
                                                                    |  0.414729033951621 0.0576441587903077,-0.148050297095264 0.228361402466137,
                                                                    |  -0.666710699058802 0.505591163092361,-1.12132034355964 0.878679656440353,
                                                                    |  -1.49440883690763 1.33328930094119,-1.77163859753386 1.85194970290472
                                                                    |  --ETC-- ,3.94235584120969 3.58527096604839,4 3))

This example uses 3D input.

SELECT ST_AsText(ST_LineToCurve(geom)) As curved, ST_AsText(geom) AS not_curved
FROM (SELECT ST_Translate(ST_Force3D(ST_Boundary(ST_Buffer(ST_Point(1,3), 2,2))),0,0,3) AS geom) AS foo;
curved                                      | not_curved
--------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CIRCULARSTRING Z (3 3 3,-1 3 3,3 3 3)      | LINESTRING Z (3 3 3,2.414213562373095 1.585786437626905 3,1 1 3,-0.414213562373095 1.585786437626905 3,-1 3 3,-0.414213562373095 4.414213562373095 3,1 5 3,2.414213562373095 4.414213562373096 3,3 3 3)
(1 row)

Див. також

ST_CurveToLine


Name

ST_Multi — Повернути геометрію як геометрію MULTI*.

Synopsis

geometry ST_Multi(geometry geom);

Опис

Повертає геометрію як колекцію геометрії MULTI*. Якщо геометрія вже є колекцією, вона повертається без змін.

Приклади

SELECT ST_AsText(ST_Multi('POLYGON ((10 30, 30 30, 30 10, 10 10, 10 30))'));
MULTIPOLYGON(((10 30,30 30,30 10,10 10,10 30)))

Див. також

ST_AsText


Name

ST_Normalize — Повернути геометрію в канонічній формі.

Synopsis

geometry ST_Normalize(geometry geom);

Опис

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

В основному корисний тільки для тестування (порівняння очікуваних і отриманих результатів).

Доступність: 2.3.0

Приклади

SELECT ST_AsText(ST_Normalize(ST_GeomFromText('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))

Див. також

ST_Equals,


Name

ST_Project — Повертає точку, спроектовану від початкової точки на відстань і азимут.

Synopsis

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 градусів

SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0)));
POINT(0.635231029125537 0.639472334729198)

Name

ST_QuantizeCoordinates — Встановлює найменш значущі біти координат у нуль

Synopsis

geometry ST_QuantizeCoordinates ( geometry g , int prec_x , int prec_y , int prec_z , int prec_m );

Опис

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 стискає більш ефективно.

[Note]

На розмір геометрії на диску потенційно впливає лише ST_QuantizeCoordinates. ST_MemSize, який повідомляє про використання геометрії в пам'яті, поверне те саме значення незалежно від дискового простору, який використовує геометрія.

Приклади

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));
POINT(100.12344360351562 0)
WITH test AS (SELECT 'POINT (123.456789123456 123.456789123456)'::geometry AS geom)
SELECT
  digits,
  encode(ST_QuantizeCoordinates(geom, digits), 'hex'),
  ST_AsText(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


Name

ST_RemovePoint — Видалити точку з лінії.

Synopsis

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

UPDATE sometable
        SET geom = ST_RemovePoint(geom, ST_NPoints(geom) - 1)
        FROM sometable
        WHERE ST_IsClosed(geom);

Див. також

ST_AddPoint, ST_NPoints, ST_NumPoints


Name

ST_RemoveRepeatedPoints — Повертає версію геометрії з видаленими дублікатами точок.

Synopsis

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.

Приклади

SELECT ST_AsText(ST_RemoveRepeatedPoints('MULTIPOINT ((1 1), (2 2), (3 3), (2 2))'));
MULTIPOINT((1 1),(2 2),(3 3))
SELECT ST_AsText(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)

Приклад: Елементи колекції обробляються окремо.

SELECT ST_AsText(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))

Приклад: Повторне видалення точок з допуском відстані.

SELECT ST_AsText(ST_RemoveRepeatedPoints('LINESTRING (0 0, 0 0, 1 1, 5 5, 1 1, 2 2)', 2));
LINESTRING(0 0,5 5,2 2)

Див. також

ST_Simplify


Name

ST_RemoveIrrelevantPointsForView — Видаляє точки, які не мають значення для візуалізації певного прямокутного виду геометрії.

Synopsis

geometry ST_RemoveIrrelevantPointsForView(geometry geom, box2d bounds, boolean cartesian_hint = false);

Опис

Повертає geometryбез точок, що не мають значення для візуалізації геометрії в заданому прямокутному вікні.

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

Оцінюються тільки геометрії типу (MULTI)POLYGON і (MULTI)LINESTRING. Інші геометрії залишаються без змін.

На відміну від ST_ClipByBox2D(), ця функція

  • сортує точки без обчислення нових точок перетину, що дозволяє уникнути помилок округлення і, як правило, підвищує продуктивність,

  • повертає геометрію з однаковою або схожою кількістю точок,

  • призводить до однакового результату візуалізації в межах заданого виду, і

  • може призвести до самоперетину, що зробить отриману геометрію недійсною (див. приклад нижче).

Якщо cartesian_hint встановлено на true, алгоритм застосовує додаткові оптимізації, що включають декартову математику, для подальшого зменшення кількості отриманих точок. Зверніть увагу, що використання цієї опції може призвести до появи артефактів рендерингу, якщо отримані координати перед рендерингом проектуються в іншу (не декартову) систему координат.

[Warning]

Для полігонів ця функція наразі не гарантує, що результат є дійсним. Цю ситуацію можна перевірити за допомогою ST_IsValid та виправити за допомогою ST_MakeValid.

Приклад: ST_RemoveIrrelevantPointsForView() застосовано до полігону. Сині точки залишаються, результат візуалізації (світло-синя область) у сірій області перегляду також залишається.

Приклад: Оскільки точки лише сортуються і нові точки не обчислюються, результат функції ST_RemoveIrrelevantPointsForView() може містити самоперетини.

Доступність: 3.5.0

Приклади

SELECT ST_AsText(ST_RemoveIrrelevantPointsForView(ST_GeomFromText('MULTIPOLYGON(((10 10, 20 10, 30 10, 40 10, 20 20, 10 20, 10 10)),((10 10, 20 10, 20 20, 10 20, 10 10)))'),
                        ST_MakeEnvelope(12,12,18,18), true));
MULTIPOLYGON(((10 10,40 10,20 20,10 20,10 10)),((10 10,20 10,20 20,10 20,10 10)))
SELECT ST_AsText(ST_RemoveIrrelevantPointsForView(ST_GeomFromText('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))'),
                        ST_MakeEnvelope(12,12,18,18), true));
MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
SELECT ST_AsText(ST_RemoveIrrelevantPointsForView(ST_GeomFromText('LINESTRING(0 0, 10 0,20 0,30 0)'),
                        ST_MakeEnvelope(12,12,18,18), true));
LINESTRING EMPTY
SELECT ST_AsText(ST_RemoveIrrelevantPointsForView(ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
                        ST_MakeEnvelope(12,12,18,18), true));
POLYGON((15 30,30 0,0 0,15 30))
SELECT ST_AsText(ST_RemoveIrrelevantPointsForView(ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
                        ST_MakeEnvelope(12,12,18,18)));
POLYGON((0 30,30 30,30 0,0 0,0 30))

Див. також

ST_ClipByBox2D, ST_Intersection


Name

ST_RemoveSmallParts — Видаляє невеликі частини (кільця полігону або лінії) геометрії.

Synopsis

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.

Приклад: ST_RemoveSmallParts() застосовано до мультиполігону. Сині частини залишаються.

Доступність: 3.5.0

Приклади

SELECT ST_AsText(ST_RemoveSmallParts(ST_GeomFromText('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)))
SELECT ST_AsText(ST_RemoveSmallParts(ST_GeomFromText('LINESTRING(10 10, 20 20)'),
                                50, 50));
LINESTRING EMPTY

Name

ST_Reverse — Повернути геометрію з оберненим порядком вершин.

Synopsis

geometry ST_Reverse(geometry g1);

Опис

Може використовуватися для будь-якої геометрії та змінює порядок вершин.

Покращено: 2.4.0 додано підтримку кривих.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_AsText(geom) as line, ST_AsText(ST_Reverse(geom)) As reverseline
FROM ST_MakeLine(ST_Point(1,2), ST_Point(1,10)) As geom;
line         |     reverseline
---------------------+----------------------
LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)

Name

ST_Segmentize — Повертає змінену геометрію/географію, в якій немає сегментів, довжина яких перевищує задану відстань.

Synopsis

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

Опис

Повертає змінену геометрію/географію, в якій немає сегментів довжиною більше max_segment_length. Довжина обчислюється у 2D. Сегменти завжди розділяються на підсегменти однакової довжини.

  • Для геометрії максимальна довжина вимірюється в одиницях просторової системи відліку.

  • Для географії максимальна довжина вимірюється в метрах. Відстані обчислюються на сфері. Додані вершини створюються вздовж дуг сферичного великого кола, визначених кінцевими точками відрізків.

[Note]

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

[Warning]

Для вхідних даних, що містять довгі сегменти, вказання відносно короткого 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) )

Приклади

Сегментація лінії. Довгі сегменти розділяються рівномірно, а короткі сегменти не розділяються.

SELECT ST_AsText(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))

Сегментація полігону:

SELECT ST_AsText(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))

Сегментація географічної лінії з використанням максимальної довжини сегмента 2000 кілометрів. Вершини додаються вздовж дуги великого кола, що з'єднує кінцеві точки.

SELECT ST_AsText(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)

Географічна лінія, сегментована вздовж дуги великого кола

Див. також

ST_LineSubstring


Name

ST_SetPoint — Замінити точку лінійного об'єкта на задану точку.

Synopsis

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.

SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)'));
LINESTRING(-1 1,-1 3)

Change last point in a line string (let's play with 3D linestring this time)

SELECT ST_AsEWKT(ST_SetPoint(foo.geom, ST_NumPoints(foo.geom) - 1, ST_GeomFromEWKT('POINT(-1 1 3)')))
FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As geom) As foo;
LINESTRING(-1 2 3,-1 3 4,-1 1 3)
SELECT ST_AsText(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)

Name

ST_ShiftLongitude — Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.

Synopsis

geometry ST_ShiftLongitude(geometry geom);

Опис

Зчитує кожну точку/вершину в геометрії та зміщує її координату довготи з -180..0 на 180..360 і навпаки, якщо вона знаходиться в цих діапазонах. Ця функція є симетричною, тому результатом є представлення даних -180..180 у вигляді 0..360 та представлення даних 0..360 у вигляді -180..180.

[Note]

Це корисно тільки для даних з координатами в довготі/широті; наприклад, SRID 4326 (географічна система WGS 84).

[Warning]

Помилка версії до 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.

SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(270 0)'::geometry))
POINT(-90 0)

This example performs a reverse longitude shift on a single point.

SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(-90 0)'::geometry))
POINT(270 0)

This example shows that LineStrings are shifted only where coordinates require it.

SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;LINESTRING(174 12, 182 13)'::geometry))
LINESTRING(174 12,-178 13)

Див. також

ST_WrapX


Name

ST_WrapX — Оберніть геометрію навколо значення X.

Synopsis

geometry ST_WrapX(geometry geom, float8 wrap, float8 move);

Опис

Ця функція розділяє вхідні геометрії, а потім переміщує кожен отриманий компонент, що потрапляє праворуч (для від'ємного значення 'move') або ліворуч (для додатного значення 'move') від заданої лінії 'wrap' у напрямку, визначеному параметром 'move', і нарешті знову об'єднує частини разом.

[Note]

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

Доступність: 2.3.0 вимагає GEOS

This function supports 3d and will not drop the z-index.

Приклади

Move all components of the given geometries whose bounding box. Falls completely on the left of x=0 to +360.

select ST_WrapX(geom, 0, 360);

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=-30 to +360
select ST_WrapX(geom, -30, 360);
        

Див. також

ST_ShiftLongitude


Name

ST_SnapToGrid — Прив'яжіть всі точки вхідної геометрії до регулярної сітки.

Synopsis

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 як розмір для будь-якого виміру, який не потрібно прив'язувати до сітки.

[Note]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple).

[Note]

До версії 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.

Приклади

This example snaps geometries to a precision grid of 10^-3.

UPDATE mytable
   SET geom = ST_SnapToGrid(geom, 0.001);

SELECT ST_AsText(ST_SnapToGrid(ST_GeomFromText('LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667)'),
                0.001));
LINESTRING(1.112 2.123,4.111 3.237)

This example snaps a 4D geometry.

SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('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)'),
                ST_GeomFromEWKT('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)

With a 4D geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps m and z the same.

SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 3 2.3456,
                4.111111 3.2374897 3.1234 1.1111)'),
           0.01)      );
LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)

Name

ST_Snap — Прив'язати сегменти та вершини вхідної геометрії до вершин еталонної геометрії.

Synopsis

geometry ST_Snap(geometry input, geometry reference, float tolerance);

Опис

Прив'язує вершини та сегменти геометрії до вершин іншої геометрії. Для контролю місця прив'язки використовується допуск відстані прив'язки. Результатом є геометрія з прив'язаними вершинами. Якщо прив'язка не відбувається, геометрія залишається без змін.

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

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

[Note]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple) та валідність (див. ST_IsValid).

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

Мультиполігон, показаний лінією (до будь-якого прив'язування)

Мультиполігон, прив'язаний до лінії з точністю до 1,01 відстані. Новий мультиполігону відображається з посиланням на лінію

SELECT ST_AsText(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)))
                                

Мультиполігон, прив'язаний до лінії з допуском: 1,25 відстані. Новий мультиполігон відображається з посиланням на лінію

SELECT ST_AsText(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)))
                                

Лінія прив'язалася до вихідного мультиполігону з допуском 1,01 відстані. Нова лінія відображається з посиланням на мультиполігон

SELECT ST_AsText(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)

Лінія прив'язалася до вихідного мультиполігону з допуском 1,25 відстані. Нова лінія відображається з посиланням на мультиполігон

SELECT ST_AsText(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)

Див. також

ST_SnapToGrid


Name

ST_SwapOrdinates — Повертає версію заданої геометрії із заміненими значеннями ординат.

Synopsis

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.

SELECT ST_AsText(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)

Див. також

ST_FlipCoordinates

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

Abstract

Ці функції перевіряють, чи геометрії є дійсними відповідно до стандарту 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.

Name

ST_IsValid — Перевіряє, чи геометрія має правильну форму в 2D.

Synopsis

boolean ST_IsValid(geometry g);

boolean ST_IsValid(geometry g, integer flags);

Опис

Перевіряє, чи значення ST_Geometry є правильно сформованим і дійсним у 2D відповідно до правил OGC. Для геометрій з 3 і 4 вимірами дійсність все ще перевіряється тільки у 2 вимірах. Для геометрій, які є недійсними, видається повідомлення PostgreSQL NOTICE з детальною інформацією про причини недійсності.

Для версії з параметром flags підтримувані значення задокументовані в ST_IsValidDetailЦя версія не друкує ПОВІДОМЛЕННЯ, що пояснює недійсність.

Більш детальну інформацію про визначення геометричної валідності див. Section 4.4, “Перевірка геометрії”

[Note]

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

[Note]

Ні специфікації OGC-SFS, ні SQL-MM не містять аргументу прапорця для ST_IsValid. Прапорець є розширенням PostGIS.

Приклади

SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line,
        ST_IsValid(ST_GeomFromText('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

Name

ST_IsValidDetail — Повертає рядок valid_detail, в якому вказано, чи є геометрія дійсною, а якщо ні, то причина та місце розташування.

Synopsis

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.


SELECT gid, reason(ST_IsValidDetail(geom)), ST_AsText(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)

 --simple example
SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');

 valid | reason | location
-------+--------+----------
 t     |        |


Див. також

ST_IsValid, ST_IsValidReason


Name

ST_IsValidReason — Returns text stating if a geometry is valid, or a reason for invalidity.

Synopsis

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.

SELECT ST_IsValidReason(
    'POLYGON ((100 200, 100 100, 200 200,
     200 100, 100 200))'::geometry) as validity_info;
Self-intersection[150 150]

This example returns the first three rejects from a successful quintuplet experiment.


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
SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');

 st_isvalidreason
------------------
 Valid Geometry


Див. також

ST_IsValid, ST_Summary


Name

ST_MakeValid — Attempts to make an invalid geometry valid without losing vertices.

Synopsis

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.

Приклади

before_geom: MULTIPOLYGON of 2 overlapping polygons

after_geom: MULTIPOLYGON of 4 non-overlapping polygons

after_geom_structure: MULTIPOLYGON of 1 non-overlapping polygon

SELECT f.geom AS before_geom, ST_MakeValid(f.geom) AS after_geom, ST_MakeValid(f.geom, 'method=structure') AS after_geom_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 geom) AS f;

before_geom: MULTIPOLYGON of 6 overlapping polygons

after_geom: MULTIPOLYGON of 14 Non-overlapping polygons

after_geom_structure: MULTIPOLYGON of 1 Non-overlapping polygon

SELECT c.geom AS before_geom,
                    ST_MakeValid(c.geom) AS after_geom,
                    ST_MakeValid(c.geom, 'method=structure') AS after_geom_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 geom) AS c;

Приклади

SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=true'
    ));
POINT(0 0)
SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=false'
    ));
LINESTRING EMPTY

7.7. Функції просторової системи координат

Abstract

Ці функції працюють із системою просторових координат геометрій, визначеною в таблиці 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 — Повернути записи метаданих для проектованих систем координат, області використання яких повністю містять параметр меж.

Name

ST_InverseTransformPipeline — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат, використовуючи обернену функцію визначеного конвеєра перетворення координат.

Synopsis

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.

SELECT ST_AsText(
    ST_InverseTransformPipeline(
        'POINT(426857.9877165967 5427937.523342293)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::16031'
    )
) AS wgs_geom;
POINT(2 48.99999999999999)

Приклад GDA2020.

This example uses ST_Transform with automatic selection of a conversion pipeline.

SELECT ST_AsText(ST_Transform('SRID=4939;POINT(143.0 -37.0)'::geometry, 7844)) AS gda2020_auto;
POINT(143.00000635638918 -36.999986706128176)

Name

ST_SetSRID — Встановити SRID для геометрії.

Synopsis

geometry ST_SetSRID(geometry geom, integer srid);

Опис

Встановлює SRID для геометрії на певне ціле значення. Корисно при побудові обмежувальних рамок для запитів.

[Note]

Ця функція жодним чином не трансформує координати геометрії — вона просто встановлює метадані, що визначають просторову систему відліку, в якій, як передбачається, знаходиться геометрія. Використовуйте 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.

SELECT ST_AsEWKT(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326)) AS wgs84long_lat;
SRID=4326;POINT(-123.365556 48.428611)

Mark a point as WGS 84 longitude/latitude and then transform it to Web Mercator.

SELECT ST_AsEWKT(ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326),3785)) AS sphere_merc;
SRID=3785;POINT(-13732990.8753491 6178458.96425423)

Name

ST_SRID — Повертає ідентифікатор просторової прив'язки для геометрії.

Synopsis

integer ST_SRID(geometry g1);

Опис

Повертає ідентифікатор просторової прив'язки для ST_Geometry, як визначено в таблиці spatial_ref_sys. Section 4.5, “Spatial Reference Systems”

[Note]

Таблиця 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.

Приклади

SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));
    4326
    

Name

ST_Transform — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.

Synopsis

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.

[Note]

Вимагає компіляції PostGIS з підтримкою PROJ. Використовуйте PostGIS_Full_Version, щоб підтвердити, що підтримка PROJ скомпільована.

[Note]

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

[Note]

До версії 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 довгота-широта

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
  743265 2967450,743265.625 2967416,743238 2967416))',2249),
    4326)) As wgs_geom;
POLYGON((-71.1776848522251 42.3902896512903,-71.17768437663261 42.390382947801015,-71.17758443054647 42.390382667791854,-71.17758259272304 42.390289364798825,-71.1776848522251 42.3902896512903))

3D Circular String example.

SELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),
    4326));
SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 42.3903829478009 2,
 -71.1775844305465 42.3903826677917 3,
 -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)

    

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

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/.

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_AsText(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))

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

Іноді перетворення координат із зміщенням сітки може завершитися невдачею, наприклад, якщо PROJ.4 не було створено з файлами зміщення сітки або координати не лежать у діапазоні, для якого визначено зміщення сітки. За замовчуванням PostGIS видасть помилку, якщо файл зміщення сітки відсутній, але цю поведінку можна налаштувати для кожного SRID окремо, або шляхом тестування різних значень to_proj тексту PROJ.4, або шляхом зміни значення proj4text в таблиці spatial_ref_sys.

Наприклад, параметр proj4text +datum=NAD87 є скороченою формою для наступного параметра +nadgrids:

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat

Префікс @ означає, що помилка не повідомляється, якщо файли відсутні, але якщо кінець списку досягнуто, а відповідний файл не знайдено (тобто знайдено і перекривається), то видається помилка.

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

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null

Файл нульового зсуву сітки є дійсним файлом зсуву сітки, що охоплює весь світ і не застосовує жодного зсуву. Отже, для повного прикладу, якщо ви хочете змінити PostGIS так, щоб перетворення до SRID 4267, які не лежать у правильному діапазоні, не викликали помилку ERROR, ви повинні використати наступне:

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;

Name

ST_TransformPipeline — Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат за допомогою визначеного конвеєра перетворення координат.

Synopsis

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.

SELECT ST_AsText(
    ST_TransformPipeline(
        'SRID=4326;POINT(2 49)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::16031'
    )
) AS utm_geom;
POINT(426857.9877165967 5427937.523342293)

This example transforms in the inverse direction.

SELECT ST_AsText(
    ST_InverseTransformPipeline(
        'POINT(426857.9877165967 5427937.523342293)'::geometry,
        'urn:ogc:def:coordinateOperation:EPSG::16031'
    )
) AS wgs_geom;
POINT(2 48.99999999999999)

Приклад GDA2020.

This example uses ST_Transform with automatic selection of a conversion pipeline.

SELECT ST_AsText(ST_Transform('SRID=4939;POINT(143.0 -37.0)'::geometry, 7844)) AS gda2020_auto;
POINT(143.00000635638918 -36.999986706128176)

Using a defined conversion (EPSG:8447)

SELECT ST_AsText(
    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.

SELECT ST_AsText(
    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)

Name

postgis_srs_codes — Повернути список кодів SRS, пов'язаних із зазначеним органом.

Synopsis

setof text postgis_srs_codes(text auth_name);

Опис

Повертає набір усіх auth_srid для заданого auth_name.

Доступність: 3.4.0

Версія Proj 6+

Приклади

Перелічіть перші десять кодів, пов'язаних з органом EPSG.

SELECT * FROM postgis_srs_codes('EPSG') ORDER BY 1 LIMIT 10;
10156
 10157
 10158
 10160
 10162
 10163
 10164
 10165
 10166
 10167

Name

postgis_srs — Повернути запис метаданих для запитуваного органу та srid.

Synopsis

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.

SELECT * FROM postgis_srs('EPSG', '3005');

auth_name | EPSG
auth_srid | 3005
srname    | NAD83 / BC Albers
srtext    | PROJCS["NAD83 / BC Albers", ... ]]
proj4text | +proj=aea +lat_0=45 +lon_0=-126 +lat_1=50 +lat_2=58.5 +x_0=1000000 +y_0=0 +datum=NAD83 +units=m +no_defs +type=crs
point_sw  | 0101000020E6100000E17A14AE476161C00000000000204840
point_ne  | 0101000020E610000085EB51B81E855CC0E17A14AE47014E40
    

Name

postgis_srs_all — Повернути записи метаданих для кожної системи просторових координат у базовій базі даних Proj.

Synopsis

набір записів postgis_srs_all(void);

Опис

Повертає набір усіх записів метаданих у базовій базі даних Proj. Записи матимуть auth_name, auth_srid, srname, srtext, proj4text та кути області використання, point_sw і point_ne.

Доступність: 3.4.0

Версія Proj 6+

Приклади

Отримайте перші 10 записів метаданих з бази даних Proj.

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. Введення геометрії

Abstract

Ці функції створюють геометричні об'єкти з різних текстових або бінарних форматів.

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 — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT). Це псевдонім для 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 — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT). Це псевдонім для ST_GeomFromText.

Name

ST_BdPolyFromText — Побудувати полігон, заданий довільною сукупністю замкнутих лінійних відрізків у вигляді добре відомого текстового представлення MultiLineString.

Synopsis

geometry ST_BdPolyFromText(text WKT, integer srid);

Опис

Побудувати полігон, заданий довільною сукупністю замкнутих лінійних відрізків у вигляді добре відомого текстового представлення MultiLineString.

[Note]

Видає помилку, якщо 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


Name

ST_BdMPolyFromText — Побудувати мультиполігон на основі довільної сукупності замкнутих лінійних відрізків у вигляді текстового представлення MultiLineString. Загальновідоме текстове представлення.

Synopsis

geometry ST_BdMPolyFromText(text WKT, integer srid);

Опис

Побудувати полігон, заданий довільною сукупністю замкнутих ліній, полігонів, багатолінійних ліній у вигляді добре відомого текстового представлення.

[Note]

Видає помилку, якщо 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


Name

ST_GeogFromText — Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).

Synopsis

geography ST_GeogFromText(text EWKT);

Опис

Повертає географічний об'єкт із відомого тексту або розширеного відомого представлення. Якщо не вказано, використовується SRID 4326. Це псевдонім для ST_GeographyFromText. Точки завжди виражаються у форматі довготи та широти.

Приклади

This example converts longitude/latitude coordinates to geography.

ALTER TABLE sometable ADD COLUMN geog geography(POINT,4326);
UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')');

--- specify a geography point using EPSG:4267, NAD27
SELECT ST_AsEWKT(ST_GeogFromText('SRID=4267;POINT(-77.0092 38.889588)'));
                        

Див. також

ST_AsText, ST_GeographyFromText


Name

ST_GeographyFromText — Повернути вказане географічне значення з представлення Well-Known Text або розширеного (WKT).

Synopsis

geography ST_GeographyFromText(text EWKT);

Опис

Повертає географічний об'єкт із загальновідомого текстового представлення. Якщо не вказано, використовується SRID 4326.

Див. також

ST_GeogFromText, ST_AsText


Name

ST_GeomCollFromText — Створює колекцію Geometry з колекції WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

Synopsis

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

[Note]

Якщо ви абсолютно впевнені, що всі ваші геометрії 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.

Приклади

SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))');

Див. також

ST_GeomFromText, ST_SRID


Name

ST_GeomFromEWKT — Повернути вказане значення ST_Geometry з розширеного представлення добре відомого тексту (EWKT).

Synopsis

geometry ST_GeomFromEWKT(text EWKT);

Опис

Створює об'єкт PostGIS ST_Geometry з представлення OGC Extended Well-Known text (EWKT).

[Note]

Формат 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).

Приклади

SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');
SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');

SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');

SELECT 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))');

SELECT 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)))');

3D circular string.

SELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)');

This example uses a PolyhedralSurface.

SELECT 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))
)');

Див. також

ST_AsEWKT, ST_GeomFromText


Name

ST_GeomFromMARC21 — Приймає географічні дані MARC21/XML як вхідні дані та повертає геометричний об'єкт PostGIS.

Synopsis

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+

[Note]

Кодовані картографічні математичні дані MARC21/XML наразі не надають жодних засобів для опису просторової системи координат закодованих координат, тому ця функція завжди повертатиме геометрію з SRID 0.

[Note]

Повернуті геометрії POLYGON завжди будуть орієнтовані за годинниковою стрілкою.

Приклади

Перетворення географічних даних MARC21/XML, що містять один POINT, закодований як hddd.dddddd


                SELECT
                ST_AsText(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)

Перетворення географічних даних MARC21/XML, що містять один POLYGON, закодований як hdddmmss



                SELECT
                ST_AsText(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))

Перетворення географічних даних MARC21/XML, що містять POLYGON та POINT:



                SELECT
                ST_AsText(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))

Див. також

ST_AsMARC21


Name

ST_GeometryFromText — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT). Це псевдонім для ST_GeomFromText.

Synopsis

geometry ST_GeometryFromText(text WKT);

geometry ST_GeometryFromText(text WKT, integer srid);

Опис

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


Name

ST_GeomFromText — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).

Synopsis

geometry ST_GeomFromText(text WKT);

geometry ST_GeomFromText(text WKT, integer srid);

Опис

Створює об'єкт PostGIS ST_Geometry на основі текстового представлення OGC Well-Known.

[Note]

Існує два варіанти функції 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.

[Note]

Хоча ST_MakePoint не відповідає стандарту OGC, він працює швидше, ніж ST_GeomFromText і ST_PointFromText. Він також простіший у використанні для числових значень координат. ST_Point — це інший варіант, схожий за швидкістю на ST_MakePoint і сумісний з OGC, але підтримує тільки 2D-точки.

[Warning]

Змінено: 2.0.0 У попередніх версіях PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') було дозволено. Тепер це є некоректним у PostGIS 2.0.0 для кращої відповідності стандартам SQL/MM. Тепер це слід писати як ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')

Приклади

SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');
SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4269);

SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');

SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');

SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');

SELECT 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);

SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)');
        

Name

ST_LineFromText — Створює геометрію з представлення WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

Synopsis

geometry ST_LineFromText(text WKT);

geometry ST_LineFromText(text WKT, integer srid);

Опис

Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0. Якщо переданий WKT не є LINESTRING, повертається null.

[Note]

OGC SPEC 3.2.6.2 — опція SRID належить до набору вимог відповідності.

[Note]

Якщо ви знаєте, що всі ваші геометрії є 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

Приклади

SELECT ST_AsText(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
                

Див. також

ST_GeomFromText


Name

ST_MLineFromText — Повернути вказане значення ST_MultiLineString з представлення WKT.

Synopsis

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

[Note]

Якщо ви абсолютно впевнені, що всі ваші геометрії 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

Приклади

SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');

Див. також

ST_GeomFromText


Name

ST_MPointFromText — Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.

Synopsis

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

[Note]

Якщо ви абсолютно впевнені, що всі ваші геометрії 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

Приклади

SELECT ST_MPointFromText('MULTIPOINT((1 2),(3 4))');
SELECT ST_MPointFromText('MULTIPOINT((-70.9590 42.1180),(-70.9611 42.1223))', 4326);

Див. також

ST_GeomFromText


Name

ST_MPolyFromText — Створює геометрію MultiPolygon з WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.

Synopsis

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

[Note]

Якщо ви абсолютно впевнені, що всі ваші геометрії 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

Приклади

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)))');
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);

Див. також

ST_GeomFromText, ST_SRID


Name

ST_PointFromText — Створює точку Геометрія з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується невідомий.

Synopsis

geometry ST_PointFromText(text WKT);

geometry ST_PointFromText(text WKT, integer srid);

Опис

Створює об'єкт точки PostGIS ST_Geometry з текстового представлення OGC Well-Known. Якщо SRID не вказано, за замовчуванням використовується невідоме значення (наразі 0). Якщо геометрія не є представленням точки WKT, повертає null. Якщо WKT повністю недійсне, видає помилку.

[Note]

Існує 2 варіанти функції ST_PointFromText, перший не приймає SRID і повертає геометрію без визначеної системи просторових координат. Другий приймає ідентифікатор просторової координатної системи як другий аргумент і повертає ST_Geometry, що включає цей srid як частину своїх метаданих. SRID повинен бути визначений у таблиці spatial_ref_sys.

[Note]

Якщо ви абсолютно впевнені, що всі ваші геометрії 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

Приклади

SELECT ST_PointFromText('POINT(-71.064544 42.28787)');
SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);
        

Name

ST_PolygonFromText — Створює геометрію з WKT із заданим SRID. Якщо SRID не вказано, за замовчуванням використовується 0.

Synopsis

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 взята з набору вимог відповідності

[Note]

Якщо ви абсолютно впевнені, що всі ваші геометрії 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

Приклади

SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');
010300000001000000050000006...
SELECT ST_PolygonFromText('POINT(1 2)') IS NULL AS point_is_notpoly;
t

Див. також

ST_GeomFromText


Name

ST_WKTToSQL — Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT). Це псевдонім для ST_GeomFromText.

Synopsis

geometry ST_WKTToSQL(text WKT);

Опис

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 — Створює LINESTRING з WKB із заданим SRID
  • ST_LinestringFromWKB — Створює геометрію з WKB із заданим SRID.
  • ST_PointFromWKB — Створює геометрію з WKB із заданим SRID
  • ST_WKBToSQL — Повертає вказане значення ST_Geometry з добре відомого двійкового представлення (WKB). Це псевдонім для ST_GeomFromWKB, який не приймає srid.

Name

ST_GeogFromWKB — Створює географічний екземпляр на основі добре відомого двійкового геометричного представлення (WKB) або розширеного добре відомого двійкового представлення (EWKB).

Synopsis

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.

SELECT ST_AsText(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)

Див. також

ST_GeogFromText, ST_AsBinary


Name

ST_GeomFromEWKB — Повернути вказане значення ST_Geometry з розширеного добре відомого двійкового представлення (EWKB).

Synopsis

geometry ST_GeomFromEWKB(bytea EWKB);

Опис

Створює об'єкт PostGIS ST_Geometry з представлення OGC Extended Well-Known binary (EWKT).

[Note]

Формат 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).

Приклади

лінія бінарне представлення LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) in NAD 83 long lat (4269).

[Note]

ПРИМІТКА: Незважаючи на те, що масиви байтів розділяються символом \ і можуть містити символ ', нам потрібно екранувати обидва символи за допомогою \ і '', якщо стандарт standard_conforming_strings вимкнено. Тому це не виглядає точно так, як його представлення в AsEWKB.

SELECT ST_GeomFromEWKB(E'\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344J=
\\013B\\312Q\\300n\\303(\\010\\036!E@''\\277E''K
\\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q
\\300p\\231\\323e1!E@');
[Note]

У PostgreSQL стандарт standard_conforming_strings за замовчуванням встановлений на on. Ви можете змінити значення за замовчуванням за необхідності для окремого запиту або на рівні бази даних чи сервера. Нижче наведено, як це зробити, якщо standard_conforming_strings = on. У цьому випадку ми екрануємо “ за допомогою стандартного ANSI ”, але слэши не екрануються

set standard_conforming_strings = on;
SELECT ST_GeomFromEWKB('\001\002\000\000 \255\020\000\000\003\000\000\000\344J=\012\013B
    \312Q\300n\303(\010\036!E@''\277E''K\012\312Q\300\366{b\235*!E@\225|\354.P\312Q\012\300p\231\323e1')

Name

ST_GeomFromWKB — Створює екземпляр геометрії з добре відомого двійкового представлення геометрії (WKB) та опціонального SRID.

Synopsis

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.

SELECT ST_AsEWKT(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)
SELECT
  ST_AsText(ST_GeomFromWKB(ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
POINT(2 5)

Name

ST_LineFromWKB — Створює LINESTRING з WKB із заданим SRID

Synopsis

geometry ST_LineFromWKB(bytea WKB);

geometry ST_LineFromWKB(bytea WKB, integer srid);

Опис

Функція ST_LineFromWKB приймає добре відоме двійкове представлення геометрії та ідентифікатор просторової системи відліку (SRID) і створює екземпляр відповідного типу геометрії — у цьому випадку геометрії LINESTRING. Ця функція виконує роль Geometry Factory в SQL.

Якщо SRID не вказано, за замовчуванням використовується значення 0. Якщо вхідний параметр bytea не представляє LINESTRING, повертається NULL.

[Note]

OGC SPEC 3.2.6.2 — опція SRID належить до набору вимог відповідності.

[Note]

Якщо ви знаєте, що всі ваші геометрії є LINESTRINGs, ефективніше просто використовувати ST_GeomFromWKB. Ця функція просто викликає ST_GeomFromWKB і додає додаткову перевірку, що вона повертає лінію.

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

Приклади

SELECT ST_AsText(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
                

Name

ST_LinestringFromWKB — Створює геометрію з WKB із заданим SRID.

Synopsis

geometry ST_LinestringFromWKB(bytea WKB);

geometry ST_LinestringFromWKB(bytea WKB, integer srid);

Опис

Функція ST_LinestringFromWKB приймає добре відоме двійкове представлення геометрії та ідентифікатор просторової системи координат (SRID) і створює екземпляр відповідного типу геометрії — у цьому випадку геометрії LINESTRING. Ця функція виконує роль фабрики геометрії в SQL.

Якщо SRID не вказано, за замовчуванням використовується 0. NULL повертається, якщо вхідний bytea не представляє геометрію LINESTRING. Це псевдонім для ST_LineFromWKB.

[Note]

OGC SPEC 3.2.6.2 — необов'язковий SRID взято з набору вимог відповідності.

[Note]

Якщо ви знаєте, що всі ваші геометрії є LINESTRINGs, ефективніше просто використовувати ST_GeomFromWKB. Ця функція просто викликає ST_GeomFromWKB і додає додаткову перевірку, що вона повертає 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

Приклади

SELECT
  ST_AsText(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

Див. також

ST_GeomFromWKB, ST_LineFromWKB


Name

ST_PointFromWKB — Створює геометрію з WKB із заданим SRID

Synopsis

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.

Приклади

SELECT
  ST_AsText(ST_PointFromWKB(ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
POINT(2 5)
SELECT
  ST_AsText(ST_PointFromWKB(ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry)
        )
  );
null

Див. також

ST_GeomFromWKB, ST_LineFromWKB


Name

ST_WKBToSQL — Повертає вказане значення ST_Geometry з добре відомого двійкового представлення (WKB). Це псевдонім для ST_GeomFromWKB, який не приймає srid.

Synopsis

geometry ST_WKBToSQL(bytea WKB);

Опис

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 — Повертає вказане значення ST_Geometry з представлення GML. Це псевдонім для ST_GeomFromGML.
  • ST_LineFromEncodedPolyline — Створює LineString з закодованої полілінії.
  • ST_PointFromGeoHash — Повернути точку з рядка GeoHash.
  • ST_FromFlatGeobufToTable — Створює таблицю на основі структури даних FlatGeobuf.
  • ST_FromFlatGeobuf — Зчитує дані FlatGeobuf.

Name

ST_Box2dFromGeoHash — Повернути BOX2D із рядка GeoHash.

Synopsis

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

Приклади

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0');
BOX(-115.172816 36.114646,-115.172816 36.114646)
SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0);
BOX(-180 -90,180 90)
SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10);
BOX(-115.17282128334 36.1146408319473,-115.172810554504 36.1146461963654)

Name

ST_GeomFromGeoHash — Повернути геометрію з рядка GeoHash.

Synopsis

geometry ST_GeomFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Опис

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

Якщо не вказано precision, ST_GeomFromGeoHash повертає полігон на основі повної точності вхідного рядка GeoHash.

Якщо вказано precision, ST_GeomFromGeoHash використає стільки символів з GeoHash, щоб створити полігон.

Доступність: 2.1.0

Приклади

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
POLYGON((-115.3125 36.03515625,-115.3125 36.2109375,-114.9609375 36.2109375,-114.9609375 36.03515625,-115.3125 36.03515625))
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
POLYGON((-115.17282128334 36.1146408319473,-115.17282128334 36.1146461963654,-115.172810554504 36.1146461963654,-115.172810554504 36.1146408319473,-115.17282128334 36.1146408319473))

Name

ST_GeomFromGML — Приймає в якості вхідних даних GML-представлення геометрії та видає об'єкт геометрії PostGIS

Synopsis

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 за замовчуванням.

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.

[Note]

Функція ST_GeomFromGML не підтримує геометрії кривих SQL/MM.

Приклади - Одинарна геометрія з srsName

SELECT 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>
$$);

                

Приклади - Використання XLink

SELECT ST_GeomFromGML($$
    <gml:LineString xmlns:gml="http://www.opengis.net/gml"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            srsName="urn:ogc:def:crs:EPSG::4269">
        <gml:pointProperty>
            <gml:Point gml:id="p1"
><gml:pos
>42.258729 -71.16028</gml:pos
></gml:Point>
        </gml:pointProperty>
        <gml:pos
>42.259112 -71.160837</gml:pos>
        <gml:pointProperty>
            <gml:Point xlink:type="simple" xlink:href="#p1"/>
        </gml:pointProperty>
    </gml:LineString>
$$);

                

Приклади - Поліедральна поверхня

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)))

Name

ST_GeomFromGeoJSON — Приймає в якості вхідних даних геометричне представлення у форматі geojson і видає геометричний об'єкт PostGIS

Synopsis

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

[Note]

Якщо JSON-C не ввімкнено, замість виводу ви отримаєте повідомлення про помилку. Щоб увімкнути JSON-C, запустіть configure --with-jsondir=/path/to/json-c. Детальніше див. Section 2.2.3, “Конфігурація збірки”.

This function supports 3d and will not drop the z-index.

Приклади

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) AS wkt;
POINT(-48.23456 20.12345)

This example creates a 3D LineString.

SELECT ST_AsText(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)

Name

ST_GeomFromKML — Приймає в якості вхідних даних KML-представлення геометрії та видає об'єкт геометрії PostGIS

Synopsis

geometry ST_GeomFromKML(text geomkml);

Опис

Створює об'єкт PostGIS ST_Geometry з представлення OGC KML.

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.

[Note]

Функція ST_GeomFromKML не підтримує геометрії кривих SQL/MM.

Приклади - Одинарна геометрія з srsName

SELECT ST_GeomFromKML($$
    <LineString>
        <coordinates
>-71.1663,42.2614
            -71.1667,42.2616</coordinates>
    </LineString>
$$);

        

Name

ST_GeomFromTWKB — Створює екземпляр геометрії з представлення геометрії TWKB ("Tiny Well-Known Binary").

Synopsis

geometry ST_GeomFromTWKB(bytea twkb);

Опис

Функція ST_GeomFromTWKB приймає геометричне представлення TWKB ("Tiny Well-Known Binary") (WKB) і створює екземпляр відповідного типу геометрії.

Приклади

SELECT ST_AsText(ST_GeomFromTWKB(ST_AsTWKB('LINESTRING(126 34, 127 35)'::geometry)));
LINESTRING(126 34, 127 35)
SELECT ST_AsEWKT(ST_GeomFromTWKB(E'\\x620002f7f40dbce4040105')
);
LINESTRING(-113.98 39.198,-113.981 39.195)

Див. також

ST_AsTWKB


Name

ST_GMLToSQL — Повертає вказане значення ST_Geometry з представлення GML. Це псевдонім для ST_GeomFromGML.

Synopsis

geometry ST_GMLToSQL(text geomgml);

geometry ST_GMLToSQL(text geomgml, integer srid);

Опис

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 за замовчуванням.


Name

ST_LineFromEncodedPolyline — Створює LineString з закодованої полілінії.

Synopsis

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.

SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'));
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)

This example selects a different precision than the one used for polyline encoding.

SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@',6));
SRID=4326;LINESTRING(-12.02 3.85,-12.095 4.07,-12.6453 4.3252)

    

Див. також

ST_AsEncodedPolyline


Name

ST_PointFromGeoHash — Повернути точку з рядка GeoHash.

Synopsis

point ST_PointFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Опис

Повернути точку з рядка GeoHash. Точка представляє центральну точку GeoHash.

Якщо не вказано precision, ST_PointFromGeoHash повертає точку на основі повної точності вхідного рядка GeoHash.

Якщо вказано precision, ST_PointFromGeoHash використає стільки символів з GeoHash, скільки потрібно для створення точки.

Доступність: 2.1.0

Приклади

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
POINT(-115.172816 36.114646)
SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
POINT(-115.13671875 36.123046875)
SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
POINT(-115.172815918922 36.1146435141563)

Name

ST_FromFlatGeobufToTable — Створює таблицю на основі структури даних FlatGeobuf.

Synopsis

void ST_FromFlatGeobufToTable(text schemaname, text tablename, bytea FlatGeobuf input data);

Опис

Створює таблицю на основі структури даних FlatGeobuf. (http://flatgeobuf.org).

schema Ім'я схеми.

table Ім'я таблиці.

data Введіть дані FlatGeobuf.

Доступність: 3.2.0


Name

ST_FromFlatGeobuf — Зчитує дані FlatGeobuf.

Synopsis

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. Вивід геометрії

Abstract

Ці функції перетворюють геометричні об'єкти в різні текстові або двійкові формати.

7.9.1. Well-Known Text (WKT)

  • ST_AsEWKT — Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.
  • ST_AsText — Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.

Name

ST_AsEWKT — Повернути представлення геометрії у вигляді добре відомого тексту (WKT) з метаданими SRID.

Synopsis

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.

[Warning]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

[Note]

Специфікація WKT не включає SRID. Щоб отримати формат OGC WKT, використовуйте ST_AsText.

[Warning]

Формат 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).

Приклади

SELECT ST_AsEWKT('0103000020e61000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000'::geometry);
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018E20A4100000000485F024100000000000000400000000018E20A4100000000305C02410000000000000840');
CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)

Name

ST_AsText — Повернути представлення геометрії/географії у вигляді добре відомого тексту (WKT) без метаданих SRID.

Synopsis

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.

[Note]

Стандартне представлення OGC WKT не включає SRID. Щоб включити SRID як частину вихідного представлення, використовуйте нестандартну функцію PostGIS ST_AsEWKT

[Warning]

Текстове представлення чисел у WKT може не зберігати повну точність з плаваючою комою. Щоб забезпечити повну точність зберігання або передачі даних, найкраще використовувати формат Well-Known Binary (WKB) (див. ST_AsBinaryта maxdecimaldigits).

[Warning]

Використання параметра 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.

Приклади

SELECT ST_AsText('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000');
POLYGON((0 0,0 1,1 1,1 0,0 0))

Повна точність виводу є стандартною настройкою.

SELECT ST_AsText('POINT(111.1111111 1.1111111)'::geometry);
POINT(111.1111111 1.1111111)

Аргумент maxdecimaldigits можна використовувати для обмеження точності виводу.

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).

Name

ST_AsBinary — Повернути представлення геометрії/географії у форматі OGC/ISO Well-Known Binary (WKB) без метаданих SRID.

Synopsis

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.

[Note]

Формат OGC/ISO WKB не включає SRID. Щоб отримати формат EWKB, який включає SRID, використовуйте ST_AsEWKB

[Note]

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.

Приклади

SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
\x01030000000100000005000000000000000000000000000000000000000000000000000000000000
000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000
00000000000000000000000000
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
\x000000000300000001000000050000000000000000000000000000000000000000000000003ff000
00000000003ff00000000000003ff00000000000003ff00000000000000000000000000000000000
00000000000000000000000000

Name

ST_AsEWKB — Повернути розширене добре відоме двійкове (EWKB) представлення геометрії з метаданими SRID.

Synopsis

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.

[Note]

Щоб отримати формат 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).

Приклади

SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
\x0103000020e610000001000000050000000000000000000000000000000000000000000000000000
00000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000
0000000000000000000000000000000000
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


Name

ST_AsHEXEWKB — Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR).

Synopsis

text ST_AsHEXEWKB(geometry g1, text NDRorXDR);

text ST_AsHEXEWKB(geometry g1);

Опис

Повертає геометрію у форматі HEXEWKB (у вигляді тексту) з використанням кодування little-endian (NDR) або big-endian (XDR). Якщо кодування не вказано, використовується NDR.

[Note]

Доступність: 1.2.2

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

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:

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.

Name

ST_AsEncodedPolyline — Повертає закодовану полілінію з геометрії LineString.

Synopsis

text ST_AsEncodedPolyline(geometry geom, integer precision=5);

Опис

Повертає геометрію у вигляді закодованої полілінії. Цей формат використовується Google Maps з точністю = 5 та Open Source Routing Machine з точністю = 5 і 6.

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

Доступність: 2.2.0

Приклади

Базовий

SELECT ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
_p~iF~ps|U_ulLnnqC_mqNvxq`@
  

Використовуйте разом із географічними лініями та географічною сегментацією, а також розмістіть на картах Google

This example builds the SQL for a Boston-to-San-Francisco path with segments every 100 kilometers.

SELECT ST_AsEncodedPolyline(ST_Segmentize(
        ST_GeogFromText('LINESTRING(-71.0519 42.4935,-122.4483 37.64)'),
        100000)::geometry) As encodedFlightPath;

javascript буде виглядати приблизно так, де змінну $ ви замінюєте результатом запиту

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry"
></script>
<script type="text/javascript">
   flightPath = new google.maps.Polyline({
      path:  google.maps.geometry.encoding.decodePath("$encodedFlightPath"),
      map: map,
      strokeColor: '#0000CC',
      strokeOpacity: 1.0,
      strokeWeight: 4
    });
</script>


Name

ST_AsFlatGeobuf — Повернути представлення FlatGeobuf набору рядків.

Synopsis

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


Name

ST_AsGeobuf — Повернути представлення Geobuf набору рядків.

Synopsis

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

Приклади

SELECT encode(ST_AsGeobuf(q, 'geom'), 'base64')
    FROM (SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))') AS geom) AS q;
GAAiEAoOCgwIBBoIAAAAAgIAAAE=

Name

ST_AsGeoJSON — Повернути геометрію або об'єкт у форматі GeoJSON.

Synopsis

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.

[Warning]

Використання параметра 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.

Приклади

Створити колекцію об'єктів:

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:

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:

SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) FROM fe_edges LIMIT 1;
{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}

Підтримуються 3D-геометрії:

SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

Аргумент Options можна використовувати для додавання BBOX і CRS у вихідні дані GeoJSON:

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]}

Name

ST_AsGML — Повернути геометрію як елемент GML версії 2 або 3.

Synopsis

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).

[Warning]

Використання параметра 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.

[Note]

Тільки версія 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).

Приклади: Версія 2

SELECT ST_AsGML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
    st_asgml
    --------
    <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>

Приклади: Версія 3

Flip coordinates and output extended EPSG (16 | 1)

SELECT ST_AsGML(3, ST_GeomFromText('POINT(5.234234233242 6.34534534534)',4326), 5, 17);
      st_asgml
      --------
    <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) --
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 32);
    st_asgml
    --------
  <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 --
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 49);
  st_asgml
  --------
  <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.

SELECT ST_AsGML(
3,
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)) )'));
  st_asgml
  --------
 <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


Name

ST_AsKML — Повернути геометрію як елемент KML.

Synopsis

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, простір імен за замовчуванням — без префікса.

[Warning]

Використання параметра maxdecimaldigits може призвести до некоректності геометрії вихідних даних. Щоб уникнути цього, спочатку використовуйте ST_ReducePrecision з відповідним розміром сітки.

[Note]

Потрібно, щоб PostGIS було скомпільовано з підтримкою Proj. Використовуйте PostGIS_Full_Version, щоб підтвердити, що підтримка proj скомпільована.

[Note]

Доступність: 1.2.2 — пізніші варіанти, що містять параметр версії, з'явилися в 1.3.2

[Note]

Покращено: 2.0.0 - Додано префікс простору імен, використання аргументів за замовчуванням та іменованих аргументів

[Note]

Змінено: 3.0.0 - Вилучено підпис варіанту "versioned"

[Note]

Вихідні дані AsKML не працюватимуть з геометріями, які не мають SRID

This function supports 3d and will not drop the z-index.

Приклади

SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

    st_askml
    --------
    <Polygon
><outerBoundaryIs
><LinearRing
><coordinates
>0,0 0,1 1,1 1,0 0,0</coordinates
></LinearRing
></outerBoundaryIs
></Polygon>

    --3d linestring
    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


Name

ST_AsLatLonText — Повернути представлення градусів, хвилин, секунд заданої точки.

Synopsis

text ST_AsLatLonText(geometry pt, text format='');

Опис

Повертає представлення точки у градусах, хвилинах і секундах.

[Note]

Передбачається, що точка знаходиться в проекції широти/довготи. Координати 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

Приклади

Формат за замовчуванням.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));
2°19'29.928"S 3°14'3.243"W

Надання формату (такого самого, як за замовчуванням).

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 і ., просто пропускаються.

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

Підписані ступені замість основних напрямків.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"'));
-2°19'29.928" -3°14'3.243"

Десятичні градуси.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
2.3250 degrees S 3.2342 degrees W

Надмірно великі значення нормалізуються.

SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));
72°19'29.928"S 57°45'56.757"E

Name

ST_AsMARC21 — Повертає геометрію у вигляді запису MARC21/XML із полем географічних даних (034).

Synopsis

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

[Note]

Ця функція не підтримує геометрії, що не є lon/lat, оскільки вони не підтримуються стандартом MARC21/XML (Coded Cartographic Mathematical Data).

[Note]

Стандарт MARC21/XML не передбачає жодних засобів для анотування просторової системи координат для кодованих картографічних математичних даних, що означає, що ця інформація буде втрачена після перетворення у формат MARC21/XML.

Приклади

Перетворення POINT у формат MARC21/XML у вигляді hdddmmss (за замовчуванням)



                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 з десятковими градусами



                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 відповідає їхньому порядку в колекції.



                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


Name

ST_AsMVTGeom — Перетворює геометрію в координатну систему плитки MVT.

Synopsis

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

[Note]

Починаючи з версії 3.0, під час конфігурації можна вибрати Wagyu для обрізання та перевірки полігонів MVT. Ця бібліотека працює швидше та дає більш правильні результати, ніж стандартна GEOS, але може пропускати невеликі полігони.

Приклади

SELECT ST_AsText(ST_AsMVTGeom(ST_GeomFromText('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)))

Канонічний приклад для плитки Web Mercator з використанням обчислених меж плитки для запиту та обрізки геометрії. Припускається, що стовпець data.geom має srid 4326.


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)



Name

ST_AsMVT — Агрегатна функція, що повертає MVT-представлення набору рядків.

Synopsis

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.

[Important]

Не викликайте з 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

Приклади

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


Name

ST_AsSVG — Повертає дані SVG-шляху для геометрії.

Synopsis

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 для використання аргументів за замовчуванням та підтримки іменованих аргументів

[Note]

Доступність: 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.

Приклади

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

Circular string

SELECT ST_AsSVG(ST_GeomFromText('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)'));
M -2 0 A 2 2 0 0 1 2 0 A 2 2 0 0 1 2 -4

Multi-curve

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

Multi-surface

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

Name

ST_AsTWKB — Повертає геометрію у вигляді TWKB, також відомого як "Tiny Well-Known Binary" (маленький добре відомий двійковий файл)

Synopsis

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. Інші параметри працюють так само, як і для простої форми функції.

[Note]

Специфікація формату доступна в Інтернеті за адресою https://github.com/TWKB/Specification, а код для створення клієнта JavaScript можна знайти за адресою https://github.com/TWKB/twkb.js.

Покращено: 2.4.0 покращення пам'яті та швидкості.

Доступність: 2.2.0

Приклади

SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
\x02000202020808

Щоб створити агрегований об'єкт TWKB, що містить ідентифікатори, спочатку агрегуйте потрібні геометрії та об'єкти за допомогою функції "array_agg()", а потім викличте відповідну функцію TWKB.

SELECT ST_AsTWKB(array_agg(geom), array_agg(gid)) FROM mytable;
\x040402020400000202

Name

ST_AsX3D — Повертає геометрію у форматі елемента вузла X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML

Synopsis

text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);

Опис

Повертає геометрію у вигляді елемента вузла у форматі X3D xml http://www.web3d.org/standards/number/19776-1. Якщо maxdecimaldigits (точність) не вказано, то за замовчуванням використовується значення 15.

[Note]

Існують різні варіанти перетворення геометрії 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
[Note]

Підтримка 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).

Приклад: Створити повністю функціональний документ X3D - Це створить куб, який можна переглянути в FreeWrl та інших переглядачах X3D.

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 будівлі

Скопіюйте та вставте результат цього запиту в x3d scene viewer і натисніть Show (Показати)

SELECT string_agg('<Shape
>' || ST_AsX3D(ST_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);

Будівлі, утворені шляхом поділу PostGIS та екструзії

Приклад: Восьмикутник, піднятий на 3 одиниці, з десятковою точністю 6

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

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>

Приклад: Замкнута багатолінійна (межа полігону з отворами)

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>

Name

ST_GeoHash — Повернути представлення геометрії у форматі GeoHash.

Synopsis

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

[Note]

ST_GeoHash вимагає, щоб вхідні геометричні дані були в географічних координатах (довгота/широта).

This method supports Circular Strings and Curves.

Приклади

SELECT ST_GeoHash(ST_Point(-126,48));
c0w3hf1s70w3hf1s70w3
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.

SELECT ST_GeoHash('LINESTRING(-126 48, -126.1 48.1)'::geometry);
c0w3

7.10. Оператори

Abstract

Ці записи документують просторові оператори, визначені 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.

Name

&& — Повертає TRUE, якщо 2D обмежувальна рамка A перетинається з 2D обмежувальною рамкою B.

Synopsis

boolean &&( geometry A , geometry B );

boolean &&( geography A , geography B );

Опис

Оператор && повертає TRUE, якщо 2D обмежувальна рамка геометрії A перетинає 2D обмежувальну рамку геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Покращено: 2.0.0 додано підтримку багатогранних поверхонь.

Доступність: 1.5.0 додано підтримку географії.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

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)

Див. також

ST_Intersects, ST_Extent, |&>, &>, &<|, &<, ~, @


Name

&&(geometry,box2df) — Повертає TRUE, якщо (кешована) 2D обмежувальна рамка геометрії перетинає 2D обмежувальну рамку з плаваючою точністю (BOX2DF).

Synopsis

boolean &&( geometry A , box2df B );

Опис

Оператор && повертає TRUE, якщо кешована 2D обмежувальна рамка геометрії A перетинає 2D обмежувальну рамку B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_Point(1,1) && ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&(box2df,geometry) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) перетинає (кешовану) 2D обмежувальну рамку геометрії.

Synopsis

boolean &&( box2df A , geometry B );

Опис

Оператор && повертає TRUE, якщо 2D обмежувальна рамка A перетинає кешовану 2D обмежувальну рамку геометрії B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_Point(1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&(box2df,box2df) — Повертає TRUE, якщо дві обмежувальні рамки 2D з плаваючою точністю (BOX2DF) перетинаються між собою.

Synopsis

boolean &&( box2df A , box2df B );

Опис

Оператор && повертає TRUE, якщо дві 2D обмежувальні рамки A і B перетинаються, використовуючи точність float. Це означає, що якщо A (або B) є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку (BOX2DF) з точністю float

[Note]

Цей оператор призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

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)

Name

&&& — Повертає TRUE, якщо n-D обмежувальна рамка A перетинається з n-D обмежувальною рамкою B.

Synopsis

boolean &&&( geometry A , geometry B );

Опис

Оператор &&& повертає TRUE, якщо n-вимірна обмежувальна рамка геометрії A перетинає n-вимірну обмежувальну рамку геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Доступність: 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 лінійні об'єкти

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

Приклади: 3M LineStrings

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

Див. також

&&


Name

&&&(geometry,gidx) — Повертає TRUE, якщо (кешована) n-вимірна обмежувальна рамка геометрії перетинає n-вимірну обмежувальну рамку з плаваючою точністю (GIDX).

Synopsis

boolean &&&( geometry A , gidx B );

Опис

Оператор &&& повертає TRUE, якщо кешована n-вимірна обмежувальна рамка геометрії A перетинає n-вимірну обмежувальну рамку B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box3d, вона буде внутрішньо перетворена в обмежувальну рамку 3D з точністю float (GIDX)

[Note]

Цей оператор призначений для внутрішнього використання індексами 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.

Приклади

SELECT ST_MakePoint(1,1,1) &&& ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&&(gidx,geometry) — Повертає TRUE, якщо обмежувальна рамка з n-вимірною точністю (GIDX) перетинає (кешовану) n-вимірну обмежувальну рамку геометрії.

Synopsis

boolean &&&( gidx A , geometry B );

Опис

Оператор &&& повертає TRUE, якщо n-вимірна обмежувальна рамка A перетинає кешовану n-вимірну обмежувальну рамку геометрії B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box3d, вона буде внутрішньо перетворена в 3D обмежувальну рамку (GIDX) з точністю float

[Note]

Цей оператор призначений для внутрішнього використання індексами 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.

Приклади

SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_MakePoint(1,1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&&(gidx,gidx) — Повертає TRUE, якщо дві n-вимірні обмежувальні рамки (GIDX) з плаваючою точністю перетинаються між собою.

Synopsis

boolean &&&( gidx A , gidx B );

Опис

Оператор &&& повертає TRUE, якщо дві n-вимірні обмежувальні рамки A і B перетинаються, використовуючи точність float. Це означає, що якщо A (або B) є (подвійної точності) box3d, вона буде внутрішньо перетворена в обмежувальну рамку 3D з точністю float (GIDX)

[Note]

Цей оператор призначений для внутрішнього використання індексами 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.

Приклади

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)

Name

&< — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться ліворуч від обмежувальної рамки B.

Synopsis

boolean &<( geometry A , geometry B );

Опис

Оператор &< повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться ліворуч від обмежувальної рамки геометрії B, або, точніше, перекриває або НЕ знаходиться праворуч від обмежувальної рамки геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

&&, |&>, &>, &<|


Name

&<| — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться нижче обмежувальної рамки B.

Synopsis

boolean &<|( geometry A , geometry B );

Опис

Оператор &<| повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться нижче обмежувальної рамки геометрії B, або, точніше, перекриває або НЕ знаходиться вище обмежувальної рамки геометрії B.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

&&, |&>, &>, &<


Name

&> — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться праворуч від обмежувальної рамки B.

Synopsis

boolean &>( geometry A , geometry B );

Опис

Оператор &> повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться праворуч від обмежувальної рамки геометрії B, або, точніше, перекриває або НЕ знаходиться ліворуч від обмежувальної рамки геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

&&, |&>, &<|, &<


Name

<< — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго ліворуч від B.

Synopsis

boolean <<( geometry A , geometry B );

Опис

Оператор << повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго ліворуч від обмежувальної рамки геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

>>, |>>, <<|


Name

<<| — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго нижче B.

Synopsis

boolean <<|( geometry A , geometry B );

Опис

Оператор <<| повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго нижче обмежувальної рамки геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

<<, >>, |>>


Name

= — Повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B.

Synopsis

boolean =( geometry A , geometry B );

boolean =( geography A , geography B );

Опис

Оператор = повертає TRUE, якщо координати та порядок координат геометрії/географії A збігаються з координатами та порядком координат геометрії/географії B. PostgreSQL використовує оператори =, < та >, визначені для геометрій, для виконання внутрішнього впорядкування та порівняння геометрій (тобто в операторах GROUP BY або ORDER BY).

[Note]

Цей оператор вважає рівними лише геометрію/географію, які є абсолютно однаковими в усіх відношеннях, мають однакові координати в однаковому порядку. Для "просторової рівності", яка ігнорує такі речі, як порядок координат, і може виявляти об'єкти, що займають однакову просторову площу, але мають різне представлення, використовуйте ST_OrderingEqualsабо ST_Equals

[Caution]

Цей операнд НЕ використовуватиме жодних індексів, які можуть бути доступні для геометрій. Для перевірки точної рівності за допомогою індексу поєднайте = з &&.

Змінено: 2.4.0, у попередніх версіях це була рівність обмежувальної рамки, а не геометрична рівність. Якщо вам потрібна рівність обмежувальної рамки, використовуйте замість цього ~=.

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::geometry;
 ?column?
----------
 f
(1 row)

SELECT ST_AsText(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)

-- Note: the GROUP BY uses the "=" to compare for geometry equivalency.
SELECT ST_AsText(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)

-- In versions prior to 2.0, this used to return true --
 SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') =
        ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect;

--pt_intersect --
f

Див. також

ST_Equals, ST_OrderingEquals, ~=


Name

>> — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго праворуч від B.

Synopsis

boolean >>( geometry A , geometry B );

Опис

Оператор >> повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго праворуч від обмежувальної рамки геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

<<, |>>, <<|


Name

@ — Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B.

Synopsis

boolean @( geometry A , geometry B );

Опис

Оператор @ повертає TRUE, якщо обмежувальна рамка геометрії A повністю міститься в обмежувальній рамці геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

~, &&


Name

@(geometry,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка геометрії міститься в 2D обмежувальній рамці з плаваючою точністю (BOX2DF).

Synopsis

boolean @( geometry A , box2df B );

Опис

Оператор @ повертає TRUE, якщо 2D обмежувальна рамка геометрії A міститься в 2D обмежувальній рамці B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;
t

Name

@(box2df,geometry) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в 2D обмежувальній рамці геометрії.

Synopsis

boolean @( box2df A , geometry B );

Опис

Оператор @ повертає TRUE, якщо 2D обмежувальна рамка A міститься в 2D обмежувальній рамці геометрії B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) AS is_contained;
t

Name

@(box2df,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка з плаваючою точністю (BOX2DF) міститься в іншій 2D обмежувальній рамці з плаваючою точністю.

Synopsis

boolean @( box2df A , box2df B );

Опис

Оператор @ повертає TRUE, якщо 2D обмежувальна рамка A міститься в 2D обмежувальній рамці B, використовуючи точність float. Це означає, що якщо A (або B) є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

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

Name

|&> — Повертає TRUE, якщо обмежувальна рамка A перекриває або знаходиться над обмежувальною рамкою B.

Synopsis

boolean |&>( geometry A , geometry B );

Опис

Оператор |&> повертає TRUE, якщо обмежувальна рамка геометрії A перекриває або знаходиться над обмежувальною рамкою геометрії B, або, точніше, перекриває або НЕ знаходиться нижче обмежувальної рамки геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

&&, &>, &<|, &<


Name

|>> — Повертає TRUE, якщо обмежувальна рамка A знаходиться строго над обмежувальною рамкою B.

Synopsis

boolean |>>( geometry A , geometry B );

Опис

Оператор |>> повертає TRUE, якщо обмежувальна рамка геометрії A знаходиться строго над обмежувальною рамкою геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

<<, >>, <<|


Name

~ — Повертає TRUE, якщо обмежувальна рамка A містить B.

Synopsis

boolean ~( geometry A , geometry B );

Опис

Оператор ~ повертає TRUE, якщо обмежувальна рамка геометрії A повністю містить обмежувальну рамку геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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)

Див. також

@, &&


Name

~(geometry,box2df) — Повертає TRUE, якщо 2D обмежувальна рамка геометрії містить 2D обмежувальну рамку з плаваючою точністю (GIDX).

Synopsis

boolean ~( geometry A , box2df B );

Опис

Оператор ~ повертає TRUE, якщо 2D обмежувальна рамка геометрії A містить 2D обмежувальну рамку B, використовуючи точність float. Це означає, що якщо B є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) ~ ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS contains;
t

Name

~(box2df,geometry) — Повертає TRUE, якщо обмежувальна рамка з плаваючою точністю 2D (BOX2DF) містить обмежувальну рамку 2D геометрії.

Synopsis

boolean ~( box2df A , geometry B );

Опис

Оператор ~ повертає TRUE, якщо 2D обмежувальна рамка A містить обмежувальну рамку геометрії B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) AS contains;
t

Name

~(box2df,box2df) — Повертає TRUE, якщо обмежувальна рамка з точністю до 2D float (BOX2DF) містить іншу обмежувальну рамку з точністю до 2D float (BOX2DF).

Synopsis

boolean ~( box2df A , box2df B );

Опис

Оператор ~ повертає TRUE, якщо 2D обмежувальна рамка A містить 2D обмежувальну рамку B, використовуючи точність float. Це означає, що якщо A є (подвійної точності) box2d, вона буде внутрішньо перетворена в 2D обмежувальну рамку з точністю float (BOX2DF)

[Note]

Цей операнд призначений для внутрішнього використання індексами BRIN, а не користувачами.

Доступність: 2.3.0 було впроваджено підтримку Block Range INdexes (BRIN).

This method supports Circular Strings and Curves.

This function supports Polyhedral surfaces.

Приклади

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) AS contains;
t

Name

~= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

Synopsis

boolean ~=( geometry A , geometry B );

Опис

Оператор ~= повертає TRUE, якщо обмежувальна рамка геометрії/географії A збігається з обмежувальною рамкою геометрії/географії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Доступність: 1.5.0 змінено поведінку

This function supports Polyhedral surfaces.

[Warning]

У PostGIS 1.5 поведінка цього оператора змінилася: замість перевірки фактичної геометричної рівності тепер перевіряється лише рівність обмежувальної рамки. Щоб ускладнити справу, поведінка оператора також залежить від того, чи було оновлення жорстким чи м'яким. Щоб дізнатися, яку поведінку має ваша база даних, виконайте запит, наведений нижче. Щоб перевірити справжню рівність, використовуйте ST_OrderingEqualsабо ST_Equals.

Приклади

SELECT 'LINESTRING(0 0, 1 1)'::geometry ~= 'LINESTRING(0 1, 1 0)'::geometry AS equality;
t

Див. також

ST_Equals, ST_OrderingEquals, =

7.10.2. Оператори відстані

  • <-> — Повертає 2D відстань між A і B.
  • |=| — Повертає відстань між траєкторіями A і B у найближчій точці їх зближення.
  • <#> — Повертає 2D відстань між обмежувальними рамками A і B.
  • <<->> — Повертає n-вимірну відстань між геометріями A і B або обмежувальними рамками

Name

<-> — Повертає 2D відстань між A і B.

Synopsis

double precision <->( geometry A , geometry B );

double precision <->( geography A , geography B );

Опис

Оператор <-> повертає 2D-відстань між двома геометріями. Використовується в розділі «ORDER BY» для надання наборів результатів найближчих сусідів з індексом за допомогою пошуку справжньої відстані KNN для геометрій та відстані на сфері для географічних даних.

[Note]

Цей операнд використовує 2D-індекси GiST, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, що використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Note]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою (не знаходиться в підзапиті/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 надає найближчих сусідів на основі геометричних відстаней до центроїдів, а не реальних відстаней. Точні результати для точок, неточні для всіх інших типів.

Приклади

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:

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 з індексом, а потім точний запит, щоб отримати правильний порядок:

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, <#>


Name

|=| — Повертає відстань між траєкторіями A і B у найближчій точці їх зближення.

Synopsis

double precision |=|( geometry A , geometry B );

Опис

Оператор |=| повертає 3D відстань між двома траєкторіями (див. ST_IsValidTrajectory). Це те саме, що й ST_DistanceCPA, але як оператор його можна використовувати для пошуку найближчих сусідів за допомогою N-вимірного індексу.

[Note]

Цей операнд використовує індекси ND GiST, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, що використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Note]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою (не в підзапиті/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.

\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)

Name

<#> — Повертає 2D відстань між обмежувальними рамками A і B.

Synopsis

double precision <#>( geometry A , geometry B );

Опис

Оператор <#> повертає відстань між двома обмежувальними прямокутниками з плаваючою комою, можливо зчитуючи їх із просторового індексу. Корисний для виконання наближеного упорядкування відстаней найближчих сусідів.

[Note]

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

[Note]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою, наприклад ORDER BY (ST_GeomFromText('POINT(1 2)') <#> geom) замість g1.geom <#>.

Доступність: 2.0.0.

Приклади

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, <->


Name

<<->> — Повертає n-вимірну відстань між геометріями A і B або обмежувальними рамками

Synopsis

double precision <<->>( geometry A , geometry B );

Опис

Оператор <<->> повертає n-вимірну (евклідову) відстань між центроїдами обмежувальних рамок двох геометрій. Корисний для наближеного упорядкування найближчих сусідів за відстанню.

[Note]

Цей операнд використовує індекси n-D GiST, які можуть бути доступні для геометрій. Він відрізняється від інших операторів, що використовують просторові індекси, тим, що просторовий індекс використовується тільки тоді, коли оператор знаходиться в розділі ORDER BY.

[Note]

Індекс спрацьовує тільки в тому випадку, якщо одна з геометрій є константою (не знаходиться в підзапиті/cte). Наприклад, 'SRID=3005;POINT(1011102 450541)'::geometry замість a.geom

Доступність: 2.2.0.

Див. також

<->

7.11. Просторові відносини

Abstract

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

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, і чи мають їхні внутрішні частини спільну точку

Name

ST_3DIntersects — Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)

Synopsis

boolean ST_3DIntersects( geometry geomA , geometry geomB );

Опис

Перекриття, дотики, всередині всі означають просторове перетин. Якщо будь-яке з вищезазначених повертає значення true, то геометрії також просторово перетинаються. Роз'єднаність означає false для просторового перетину.

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

[Note]

Через помилки плаваючої стійкості геометрії не завжди перетинаються так, як ви очікуєте після геометричної обробки. Наприклад, найближча точка на лінії до геометрії може не лежати на лінії. Для таких випадків, коли відстань в один сантиметр ви хочете вважати перетином, використовуйте 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

Приклади геометрії

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)

Приклади TIN

SELECT ST_3DIntersects('TIN(((0 0 0,1 0 0,0 1 0,0 0 0)))'::geometry, 'POINT(.1 .1 0)'::geometry);
t

Див. також

ST_3DDWithin, ST_Intersects


Name

ST_Contains — Перевіряє, чи кожна точка B лежить в A, і чи мають їхні внутрішні частини спільну точку

Synopsis

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).

[Note]

Оскільки внутрішні частини повинні мати спільну точку, тонкість визначення полягає в тому, що полігони та лінії не містять лінії та точки, що повністю лежать у їхніх межах. Для отримання додаткової інформації див. Тонкощі OGC Covers, Contains, Within. Предикат ST_Covers забезпечує більш всеосяжне відношення.

[Note]

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 з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутнику.

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Important]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

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 у таких випадках:

LINESTRING / MULTIPOINT

POLYGON / POINT

POLYGON / LINESTRING

POLYGON / POLYGON

ST_Contains повертає FALSE у таких ситуаціях:

POLYGON / MULTIPOINT

POLYGON / LINESTRING

Через умову внутрішнього перетину ST_Contains повертає FALSE у таких ситуаціях (тоді як ST_Covers повертає TRUE):

LINESTRING / POINT

POLYGON / LINESTRING

This example tests a circle within another circle.

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 (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
       ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                | t                | t                | t          | t        | f

This example demonstrates the difference between contains and contains-properly predicates.

SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
   ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) 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(geomA);
geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f

 

Name

ST_ContainsProperly — Перевіряє, чи кожна точка B лежить у внутрішній частині A

Synopsis

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 для відфільтрування тестових геометрій, які повністю лежать всередині області. У цих випадках перетин апріорі відомий як точна оригінальна тестова геометрія.

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_ContainsProperly.

[Note]

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

Виконується модулем GEOS.

Доступність: 1.4.0

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Important]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

Приклади

This example tests a circle within another circle.

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 (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                     | t                    | f                    | t          | t                 | f

This example demonstrates the difference between contains and contains-properly predicates.

SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
 ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) 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(geomA);
geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f
 

Name

ST_CoveredBy — Перевіряє, чи кожна точка A лежить в B

Synopsis

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, оскільки вона має простіше визначення, яке не містить особливості, що "межі не знаходяться всередині їх геометрії".

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_CoveredBy.

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Important]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

Виконано модулем GEOS

Доступність: 1.2.2

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Це не стандарт OGC, але Oracle теж його має.

Приклади

This example tests a circle covered by another circle.

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 exeriorwithinbig
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exeriorwithinbig
--------------+-------------------+----------------------+------------------
 t            | t                 | t                    | f
(1 row) 

Name

ST_Covers — Перевіряє, чи кожна точка B лежить в A

Synopsis

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, оскільки вона має простіше визначення, яке не містить особливості, що "геометрії не містять своїх меж".

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_Covers.

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Important]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

Виконано модулем GEOS

Покращено: 2.4.0 Додано підтримку полігону в полігоні та лінії в полігоні для типу географії

Покращено: 2.3.0 Покращення короткого замикання PIP для геометрії, розширене для підтримки MultiPoints з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутниках.

Доступність: 1.5 — додано підтримку географії.

Доступність: 1.2.2

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Це не стандарт OGC, але Oracle теж його має.

Приклади

Приклад геометрії

This example tests a circle covering another circle.

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 (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
 t            | f              | t                 | f
(1 row) 

Приклад географії

This example compares a point with a 300-meter buffer against a point and against a 10-meter buffer around that point.

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(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly,
        ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo;
poly_covers_pt | buff_10m_covers_cent
----------------+------------------
 f              | t

Див. також

ST_Contains, ST_CoveredBy, ST_Within


Name

ST_Crosses — Перевіряє, чи дві геометрії мають деякі, але не всі внутрішні точки спільні

Synopsis

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 для ситуацій "точка/точка" та "площа/площа"

[Note]

Специфікація OpenGIS Simple Features визначає цей предикат тільки для ситуацій "Точка/Лінія", "Точка/Площа", "Лінія/Лінія" та "Лінія/Площа". JTS / GEOS розширює визначення, щоб воно застосовувалося також до ситуацій "Лінія/Точка", "Площа/Точка" та "Площа/Лінія". Це робить відношення симетричним.

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

[Important]

Покращено: 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.

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

Розглянемо ситуацію, коли користувач має дві таблиці: таблицю доріг і таблицю автомагістралей.

CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

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

SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);

Див. також

ST_Contains, ST_Overlaps


Name

ST_Disjoint — Перевіряє, чи дві геометрії не мають спільних точок

Synopsis

boolean ST_Disjoint( geometry A , geometry B );

Опис

Повертає true, якщо дві геометрії не перетинаються. Геометрії не перетинаються, якщо вони не мають спільних точок.

Якщо для пари геометрій справедливе будь-яке інше просторове відношення, вони не є роз'єднаними. Роз'єднаність означає, що ST_Intersects є хибним.

У математичних термінах: ST_Disjoint(A, B) ⇔ A ⋂ B = ∅

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

Виконано модулем GEOS

[Note]

Цей виклик функції не використовує індекси. Негативний предикат ST_Intersectsможна використовувати як більш ефективну альтернативу, яка використовує індекси: ST_Disjoint(A,B) = NOT ST_Intersects(A,B)

[Note]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

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

Приклади

SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
t
SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
f

Див. також

ST_Intersects


Name

ST_Equals — Перевіряє, чи дві геометрії містять однаковий набір точок

Synopsis

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)

[Important]

Покращено: 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 навіть для недійсних геометрій, якщо вони є бінарними рівними

Приклади

SELECT ST_Equals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),
    ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
t
SELECT ST_Equals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')),
    ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
t

Name

ST_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)

Synopsis

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, який перевіряє, що геометрії НЕ перетинаються.

[Note]

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 було впроваджено підтримку географії.

[Note]

Для географії ця функція має похибку відстані приблизно 0,00001 метра і використовує обчислення сфери, а не сфероїда.

[Note]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

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).

Приклади геометрії

SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
f
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
t

This example looks up rows in a table; for faster lookup, the geometry column should have a GiST index.

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)

Приклади з географії

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


Name

ST_LineCrossingDirection — Повертає число, що вказує на поведінку перетину двох LineStrings

Synopsis

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

Опис

Задано дві лінії, повертає ціле число від -3 до 3, що вказує на тип перетину між ними. 0 означає відсутність перетину. Підтримується тільки для LINESTRINGs.

Номер перетину має таке значення:

  • 0: ЛІНІЯ БЕЗ ПЕРЕТИНУ

  • -1: ПЕРЕТИН ЛІНІЇ ЗЛІВА

  • 1: ПЕРЕТИН ЛІНІЇ СПРАВА

  • -2: КІНЕЦЬ ЛІНІЇ МУЛЬТИКРОС ЛІВОРУЧ

  • 2: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ СПРАВА

  • -3: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ Ж САМИЙ ПЕРШИЙ ЗЛІВА

  • 3: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ Ж САМИЙ ПЕРШИЙ ПРАВОРУЧ

Доступність: 1.4

Приклади

Приклад: ЛІНІЯ ПЕРЕТИНАЄ ЛІВОРУЧ і ЛІНІЯ ПЕРЕТИНАЄ ПРАВОРУЧ

Синій: лінія A; Зелений: лінія B

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING (20 140, 71 74, 161 53)') As lineB
  ) As foo;
A_cross_B | B_cross_A
-----------+-----------
        -1 |         1

Приклад:

Синій: лінія A; Зелений: лінія B

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
 ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
 ST_GeomFromText('LINESTRING(171 154,20 140,71 74,161 53)') As lineB
  ) As foo;
A_cross_B | B_cross_A
-----------+-----------
         3 |        -3

Приклад: ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ САМИЙ ПЕРШИЙ ЛІВИЙ і ЛІНІЯ МУЛЬТИКРОС КІНЕЦЬ ТОЙ САМИЙ ПЕРШИЙ ПРАВИЙ

Синій: лінія A; Зелений: лінія B

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING(5 90, 71 74, 20 140, 171 154)') As lineB
  ) As foo;
A_cross_B | B_cross_A
-----------+-----------
        -2 |         2

Приклад:Знаходить всі вулиці, які перетинаються


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


Name

ST_OrderingEquals — Перевіряє, чи дві геометрії представляють одну і ту ж геометрію і мають точки в одному і тому ж порядку напрямків

Synopsis

boolean ST_OrderingEquals(geometry A, geometry B);

Опис

ST_OrderingEquals порівнює дві геометрії і повертає t (TRUE), якщо геометрії рівні і координати мають однаковий порядок; в іншому випадку повертає f (FALSE).

[Note]

Ця функція реалізована відповідно до специфікації 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

Приклади

SELECT ST_OrderingEquals('LINESTRING(0 0, 10 10)',
  'LINESTRING(0 0, 5 5, 10 10)');
f
SELECT ST_OrderingEquals('LINESTRING(0 0, 10 10)',
  'LINESTRING(0 0, 10 10)');
t
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

Див. також

&&, ST_Equals, ST_Reverse


Name

ST_Overlaps — Перевіряє, чи дві геометрії мають однакові розміри і перетинаються, але кожна з них має принаймні одну точку, яка не належить до іншої

Synopsis

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)

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, використовуйте функцію _ST_Overlaps.

Виконано модулем GEOS

[Important]

Покращено: 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 у таких ситуаціях:

MULTIPOINT / MULTIPOINT

LINESTRING / LINESTRING

POLYGON / POLYGON

Точка на лінійному елементі міститься, але оскільки вона має менший розмір, вона не перетинається і не перекривається.

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 ST_GeomFromText('POINT (100 100)') As a,
             ST_GeomFromText('LINESTRING (30 50, 40 160, 160 40, 180 160)')  AS b) AS t
overlaps | crosses | intersects | b_contains_a
---------+----------------------+--------------
f        | f       | t          | t

Лінія, яка частково покриває багатокутник, перетинається і перетинає його, але не перекриває, оскільки має інший розмір.

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 ST_GeomFromText('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
             ST_GeomFromText('LINESTRING(10 10, 190 190)') AS b) AS t;
overlap | crosses | intersects | contains
---------+---------+------------+--------------
 f       | t       | t          | f

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

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 ST_GeomFromText('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
             ST_GeomFromText('POLYGON ((110 180, 20 60, 130 90, 110 180))') AS b) As t;
overlaps | crosses | intersects | b_contains_a | dim_a | dim_b | dim_int
----------+---------+------------+--------------+-------+-------+-----------
 t        | f       | t          | f            |     2 |     2 |       2

Name

ST_Relate — Перевіряє, чи дві геометрії мають топологічний зв'язок, що відповідає шаблону матриці перетину, або обчислює їх матрицю перетину

Synopsis

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********, який не оцінюється жодним іменованим предикатом.

Для отримання додаткової інформації див. Section 5.1, “Determining Spatial Relationships”.

Варіант 1: Перевіряє, чи дві геометрії пов'язані просторово відповідно до заданого intersectionMatrixPattern.

[Note]

На відміну від більшості названих предикатів просторових відносин, це НЕ включає автоматичний виклик індексу. Причина полягає в тому, що деякі відносини є істинними для геометрій, які НЕ перетинаються (наприклад, Disjoint). Якщо ви використовуєте шаблон відносин, який вимагає перетину, включіть виклик індексу &&.

[Note]

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

Варіант 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 — додано підтримку для визначення правила граничного вузла.

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

Приклади

Використання функції з булевим значенням для перевірки просторових взаємозв'язків.

SELECT ST_Relate('POINT(1 2)', ST_Buffer('POINT(1 2)', 2), '0FFFFF212');
t
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)

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********');

Обчислення матриці перетину для просторових відносин.

SELECT ST_Relate('POINT(1 2)',
                  ST_Buffer('POINT(1 2)', 2));
0FFFFF212
SELECT ST_Relate('LINESTRING(1 2, 3 4)',
                  'LINESTRING(5 6, 7 8)' );
FF1FF0102

Використання різних правил граничних вузлів для обчислення просторових відносин між 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.

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

Name

ST_RelateMatch — Перевіряє, чи відповідає матриця перетину DE-9IM шаблону матриці перетину

Synopsis

boolean ST_RelateMatch(text intersectionMatrix, text intersectionMatrixPattern);

Опис

Перевіряє, чи значення intersectionMatrix моделі Dimensionally Extended 9-Intersection Model (DE-9IM) відповідає intersectionMatrixPattern. Значення матриці перетину можна обчислити за допомогою ST_Relate.

Для отримання додаткової інформації див. Section 5.1, “Determining Spatial Relationships”.

Виконано модулем GEOS

Доступність: 2.0.0

Приклади

SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF') ;
t

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

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

Name

ST_Touches — Перевіряє, чи мають дві геометрії хоча б одну спільну точку, але їхні внутрішні частини не перетинаються

Synopsis

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****

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. Щоб уникнути використання індексу, замість цього використовуйте _ST_Touches.

[Important]

Покращено: 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 у наведених нижче прикладах.

POLYGON / POLYGON

POLYGON / POLYGON

POLYGON / LINESTRING

LINESTRING / LINESTRING

LINESTRING / LINESTRING

POLYGON / POINT

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry);
f
SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::geometry);
t

Name

ST_Within — Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку

Synopsis

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).

[Note]

Оскільки внутрішні частини повинні мати спільну точку, тонкість визначення полягає в тому, що лінії та точки, які повністю лежать на межі полігонів або ліній, не входять до геометрії. Для отримання додаткової інформації див. Тонкощі OGC Covers, Contains, Within. Предикат ST_CoveredBy забезпечує більш всеосяжне відношення.

[Note]

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 з невеликою кількістю точок. Попередні версії підтримували тільки точки в багатокутниках.

[Important]

Покращено: 3.0.0 увімкнув підтримку для GEOMETRYCOLLECTION

[Important]

Не використовуйте цю функцію з недійсними геометріями. Ви отримаєте несподівані результати.

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

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 tests a circle within another circle.

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
(
SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
--------------+------------+------------+------------+------------+------------
 t            | t          | f          | t          | t          | t
(1 row)

7.11.2. Відношення дистанції

  • ST_3DDWithin — Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDFullyWithin — Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_DFullyWithin — Перевіряє, чи геометрія повністю знаходиться в межах відстані від іншої
  • ST_DWithin — Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної
  • ST_PointInsideCircle — Перевіряє, чи геометрія точки знаходиться всередині кола, визначеного центром і радіусом

Name

ST_3DDWithin — Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані

Synopsis

boolean ST_3DDWithin(geometry g1, geometry g2, double precision distance_of_srid);

Опис

Повертає значення true, якщо 3D-відстань між двома геометричними значеннями не перевищує відстань distance_of_srid. Відстань вказується в одиницях, визначених просторовою системою координат геометрій. Щоб ця функція мала сенс, вихідні геометрії повинні бути в одній системі координат (мати однаковий SRID).

[Note]

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

Приклади

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.

SELECT ST_3DDWithin(ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163),
      ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163),
      126.8
    ) As within_dist_3d,
ST_DWithin(ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163),
      ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163),
      126.8
    ) As within_dist_2d;
within_dist_3d | within_dist_2d
----------------+----------------
 f              | t

Name

ST_3DDFullyWithin — Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані

Synopsis

boolean ST_3DDFullyWithin(geometry g1, geometry g2, double precision distance);

Опис

Повертає значення true, якщо 3D-геометрії повністю знаходяться на заданій відстані одна від одної. Відстань задається в одиницях, визначених просторовою системою координат геометрій. Щоб ця функція мала сенс, вихідні геометрії повинні мати однакову проекцію координат і однаковий SRID.

[Note]

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 compares the difference between fully within and distance within as well. As the distance fully within for the 2D footprint of the line/point vs. the 3D fully within.

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
    (select ST_GeomFromEWKT('POINT(1 1 2)') as geom_a,
    ST_GeomFromEWKT('LINESTRING(1 5 2, 2 7 20, 1 9 100, 14 12 3)') as geom_b) t1;
d3dfullywithin10 | d3dwithin10 | d2dfullywithin20 | d3dfullywithin20
------------------+-------------+------------------+------------------
 f                | t           | t                | f 

Name

ST_DFullyWithin — Перевіряє, чи геометрія повністю знаходиться в межах відстані від іншої

Synopsis

boolean ST_DFullyWithin(geometry g1, geometry g2, double precision distance);

Опис

Повертає значення true, якщо g2 повністю знаходиться в межах distance від g1. Візуально умова є істинною, якщо g2 знаходиться в межах буфера distance від g1. Відстань вказується в одиницях, визначених просторовою системою координат геометрій.

[Note]

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. Результати будуть відрізнятися від попередніх версій, але повинні бути ближчими до очікувань користувачів.

Приклади

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)', 'LINESTRING(1 5, 2 7, 1 9, 14 12)')
    ) AS v(geom_a, geom_b)
dfullywithin10 | dwithin10 | dfullywithin20
----------------+-----------+----------------
 f              | t         | t

Name

ST_DWithin — Перевіряє, чи дві геометрії знаходяться на заданій відстані одна від одної

Synopsis

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 для вимірювання на сфері.

[Note]

Для 3D-геометрій використовуйте ST_3DDWithin.

[Note]

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

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 використовує швидшу функцію короткого замикання відстані.

Приклади

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.

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 is in units of spatial ref (e.g. meters, feet, degrees)
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 broadcasting towers that a receiver with limited range can receive.
-- Data is geometry in Spherical Mercator (SRID=3857), ranges are approximate.

-- Create geometry index that will check proximity limit of user to tower
CREATE INDEX ON broadcasting_towers using gist (geom);

-- Create geometry index that will check proximity limit of tower to user
CREATE INDEX ON broadcasting_towers using gist (ST_Expand(geom, sending_range));

-- Query towers that 4-kilometer receiver in Minsk Hackerspace can get
-- Note: two conditions, because shorter LEAST(b.sending_range, 4000) will not use index.
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


Name

ST_PointInsideCircle — Перевіряє, чи геометрія точки знаходиться всередині кола, визначеного центром і радіусом

Synopsis

boolean ST_PointInsideCircle(geometry a_point, float center_x, float center_y, float radius);

Опис

Повертає значення true, якщо геометрія є точкою і знаходиться всередині кола з центром center_x,center_y і радіусом radius.

[Warning]

Не використовує просторові індекси. Замість цього використовуйте ST_DWithin.

Доступність: 1.2

Змінено: 2.2.0 У попередніх версіях це називалося ST_Point_Inside_Circle

Приклади

SELECT ST_PointInsideCircle(ST_Point(1,2), 0.5, 2, 3);
t

Див. також

ST_DWithin

7.12. Функції вимірювання

Abstract

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

  • 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 лінію між двома геометріями

Name

ST_Area — Повертає площу полігональної геометрії.

Synopsis

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.

[Note]

Для багатогранних поверхонь підтримуються тільки 2D багатогранні поверхні (не 2.5D). Для 2.5D може бути надано відповідь, відмінну від нуля, але тільки для граней, які повністю лежать у площині XY.

Приклади

Площа ділянки в квадратних футах для ділянки землі в штаті Массачусетс і помножте на коефіцієнт перетворення, щоб отримати квадратні метри. Зверніть увагу, що це квадратні фути, оскільки EPSG:2249 — це система координат штату Массачусетс

select ST_Area(geom) sqft,
    ST_Area(geom) * 0.3048 ^ 2 sqm
from (
         select 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
                                 743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
     ) subquery;
┌─────────┬─────────────┐
│  sqft   │     sqm     │
├─────────┼─────────────┤
│ 928.625 │ 86.27208552 │
└─────────┴─────────────┘

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.

select ST_Area(geom) sqft,
    ST_Area(ST_Transform(geom, 26986)) As sqm
from (
         select
             'SRID=2249;POLYGON((743238 2967416,743238 2967450,
             743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
     ) subquery;
┌─────────┬─────────────────┐
│  sqft   │       sqm       │
├─────────┼─────────────────┤
│ 928.625 │ 86.272430607008 │
└─────────┴─────────────────┘

Поверніть площу в квадратних футах і квадратних метрах, використовуючи тип даних "географія". Зверніть увагу, що ми перетворюємо геометрію в географію (перед тим, як це зробити, переконайтеся, що ваша геометрія відповідає стандарту WGS 84 long lat 4326). Географія завжди вимірюється в метрах. Це лише для демонстрації та порівняння. Зазвичай ваша таблиця вже зберігається в типі даних "географія".

select ST_Area(geog) / 0.3048 ^ 2 sqft_spheroid,
    ST_Area(geog, false) / 0.3048 ^ 2 sqft_sphere,
    ST_Area(geog) sqm_spheroid
from (
         select ST_Transform(
                    'SRID=2249;POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
                    4326
             ) :: geography geog
     ) as subquery;
┌──────────────────┬──────────────────┬──────────────────┐
│  sqft_spheroid   │   sqft_sphere    │   sqm_spheroid   │
├──────────────────┼──────────────────┼──────────────────┤
│ 928.684405784452 │ 927.049336105925 │ 86.2776044979692 │
└──────────────────┴──────────────────┴──────────────────┘

Якщо ваші дані вже знаходяться в географії:

select ST_Area(geog) / 0.3048 ^ 2 sqft,
    ST_Area(the_geog) sqm
from somegeogtable;

Name

ST_Azimuth — Повертає азимут на північ від лінії між двома точками.

Synopsis

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().

Азимут можна використовувати разом з ST_Translate для зміщення об'єкта вздовж його перпендикулярної осі. Дивіться функцію upgis_lineshift() у PostGIS wiki для реалізації цього.

Доступність: 1.1.0

Покращено: 2.0.0 додано підтримку географії.

Покращено: вимірювання 2.2.0 на сфероїді, виконане за допомогою GeographicLib для підвищення точності та надійності. Для використання нової функції потрібно PROJ >= 4.9.0.

Приклади

Геометрія Азимут у градусах

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

Синій: точка відліку (25,45); Зелений: точка призначення (75, 100); Жовтий: вісь Y або північ; Червоний: кут азимута.

Синій: точка відліку (75, 100); Зелений: точка призначення (25, 45); Жовтий: вісь Y або північ; Червоний: кут азимута.


Name

ST_Angle — Повертає кут між двома векторами, визначеними 3 або 4 точками, або 2 лініями.

Synopsis

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

Приклади

Кут між трьома точками

SELECT degrees(ST_Angle('POINT(0 0)', 'POINT(10 10)', 'POINT(20 0)'));
270

Кут між векторами, визначеними чотирма точками

SELECT degrees(ST_Angle('POINT (10 10)', 'POINT (0 0)', 'POINT(90 90)', 'POINT (100 80)'));
269.9999999999999

Кут між векторами, визначеними початковою та кінцевою точками ліній

SELECT degrees(ST_Angle('LINESTRING(0 0, 0.3 0.7, 1 1)', 'LINESTRING(0 0, 0.2 0.5, 1 0)'));
45

Див. також

ST_Azimuth


Name

ST_ClosestPoint — Повертає 2D точку на g1, яка найближча до g2. Це перша точка найкоротшої лінії від однієї геометрії до іншої.

Synopsis

geometry ST_ClosestPoint(geometry geom1, geometry geom2);

geography ST_ClosestPoint(geography geom1, geography geom2, boolean use_spheroid = true);

Опис

Повертає двовимірну точку на geom1, яка найближча до geom2. Це перша точка найкоротшої лінії між геометріями (розрахована за допомогою ST_ShortestLine).

[Note]

Якщо у вас є 3D-геометрія, ви можете скористатися ST_3DClosestPoint.

Покращено: 3.4.0 - Підтримка географії.

Доступність: 1.5.0

Приклади

Найближчою точкою для точки та лінійного елемента є сама точка. Найближчою точкою для лінійного елемента та точки є точка на лінії.

SELECT ST_AsText(ST_ClosestPoint(pt,line)) AS cp_pt_line,
       ST_AsText(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)

Найближча точка полігону A до полігону B

SELECT ST_AsText(ST_ClosestPoint(
                                'POLYGON ((190 150, 20 10, 160 70, 190 150))',
                                ST_Buffer('POINT(80 160)', 30)        )) As ptwkt;

POINT(131.59149149528952 101.89887534906195)


Name

ST_3DClosestPoint — Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.

Synopsis

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.

Приклади

лінія та точка — як 3D, так і 2D найближча точка

SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt,
                ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_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;

cp3d_line_pt                                                |               cp2d_line_pt
-----------------------------------------------------------+------------------------------------------
POINT(54.69937988676193 128.93502291722837 11.547586950660556) | POINT(73.07692307692307 115.38461538461539)

лінія та багатоточка — як 3D, так і 2D найближча точка

SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt,
                ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_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;

cp3d_line_pt                        | cp2d_line_pt
-----------------------------------------------------------+--------------
POINT(54.69937988676193 128.93502291722837 11.547586950660556) | POINT(50 75)

Багатолінійні та полігони, як 3D, так і 2D, найближчі точки

SELECT ST_AsEWKT(ST_3DClosestPoint(poly, mline)) As cp3d,
    ST_AsEWKT(ST_ClosestPoint(poly, mline)) As cp2d
        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;

cp3d                    |     cp2d
-------------------------------------------+--------------
POINT(40.45454545454545 53.63636363636364 5) | POINT(20 40)


Name

ST_Distance — Повертає відстань між двома геометричними або географічними значеннями.

Synopsis

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, одиниці виміру - градуси.

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.

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

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 метри площини штату Массачусетс) (найточніше для штату Массачусетс)

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) (найменша точність)

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

Приклади з географії

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

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

Name

ST_3DDistance — Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.

Synopsis

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.

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.

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

Name

ST_DistanceSphere — Повертає мінімальну відстань у метрах між двома геометріями довготи/широти, використовуючи модель сферичної Землі.

Synopsis

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

Приклади

SELECT round(CAST(ST_DistanceSphere(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As dist_meters,
round(
    CAST(ST_Distance(
                                ST_Transform(ST_Centroid(geom),32611),
                                ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As dist_utm11_meters,
round(CAST(ST_Distance(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)', 4326)) As numeric),5) As dist_degrees,
round(
    CAST(ST_Distance(
                                ST_Transform(geom,32611),
                                ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As min_dist_line_point_meters
FROM
        (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As geom) as foo;
dist_meters | dist_utm11_meters | dist_degrees | min_dist_line_point_meters
        -------------+-------------------+--------------+----------------------------
                70424.71 |          70438.00 |      0.72900 |                   65871.18

Див. також

ST_Distance, ST_DistanceSpheroid


Name

ST_DistanceSpheroid — Повертає мінімальну відстань між двома геометріями lon/lat, використовуючи сфероїдальну модель Землі.

Synopsis

float ST_DistanceSpheroid(geometry geomlonlatA, geometry geomlonlatB, spheroid measurement_spheroid=WGS84);

Опис

Повертає мінімальну відстань у метрах між двома геометріями lon/lat, заданими для певного сфероїда. Див. пояснення сфероїдів, наведене для ST_LengthSpheroid.

[Note]

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

Доступність: 1.5 — додано підтримку інших типів геометрії, крім точок. Попередні версії працюють тільки з точками.

Змінено: 2.2.0 У попередніх версіях це називалося ST_Distance_Spheroid

Приклади

SELECT round(
            CAST(
                        ST_DistanceSpheroid(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]')
                                As numeric),2) As dist_meters_spheroid,
                round(CAST(ST_DistanceSphere(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As dist_meters_sphere,
round(
    CAST(ST_Distance(
                                ST_Transform(ST_Centroid(geom),32611),
                                ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As dist_utm11_meters
FROM
        (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As geom) as foo;
dist_meters_spheroid | dist_meters_sphere | dist_utm11_meters
----------------------+--------------------+-------------------
                         70454.92 |           70424.71 |          70438.00

Див. також

ST_Distance, ST_DistanceSphere


Name

ST_FrechetDistance — Повертає відстань Фреше між двома геометріями.

Synopsis

float ST_FrechetDistance(geometry g1, geometry g2, float densifyFrac = -1);

Опис

Реалізує алгоритм обчислення відстані Фреше, обмеженої дискретними точками для обох геометрій, на основі Computing Discrete Fréchet Distance. Відстань Фреше — це міра подібності кривих, що враховує розташування та порядок точок уздовж кривих. Тому вона часто є кращою за відстань Гаусдорфа.

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

Одиниці вимірювання відповідають одиницям просторової системи координат геометрії.

[Note]

Поточна реалізація підтримує тільки вершини як дискретні місця розташування. Це можна розширити, щоб дозволити використання довільної щільності точок.

[Note]

Чим менше значення densifyFrac ми вказуємо, тим точніше буде відстань Фреше. Однак час обчислення та використання пам'яті зростають пропорційно до квадрату кількості підсегментів.

Виконується модулем GEOS.

Availability: 2.4.0 - requires GEOS >= 3.7.0

Приклади

SELECT ST_FrechetDistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry);
70.7106781186548
SELECT ST_FrechetDistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry, 0.5);
50

Див. також

ST_HausdorffDistance


Name

ST_HausdorffDistance — Повертає відстань Гаусдорфа між двома геометріями.

Synopsis

float ST_HausdorffDistance(geometry g1, geometry g2);

float ST_HausdorffDistance(geometry g1, geometry g2, float densifyFrac);

Опис

Повертає відстань Гаусдорфа між двома геометріями. Відстань Гаусдорфа — це міра схожості або відмінності двох геометрій.

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

Одиниці вимірювання відповідають одиницям просторової системи координат геометрії.

[Note]

Цей алгоритм НЕ є еквівалентним стандартній відстані Гаусдорфа. Однак він обчислює наближення, яке є правильним для великої підмножини корисних випадків. Одним з важливих випадків є лінійні рядки, які приблизно паралельні один одному і мають приблизно однакову довжину. Це корисний показник для зіставлення ліній.

Доступність: 1.5.0

Приклади

Відстань Гаусдорфа (червоний) і відстань (жовтий) між двома лініями

SELECT ST_HausdorffDistance(geomA, geomB),
       ST_Distance(geomA, geomB)
    FROM (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) AS t;
st_hausdorffdistance | st_distance
----------------------+-------------
    37.26206567625497 |          20

Приклад: Відстань Гаусдорфа з ущільненням.

SELECT ST_HausdorffDistance(
            'LINESTRING (130 0, 0 0, 0 150)'::geometry,
            'LINESTRING (10 10, 10 150, 130 10)'::geometry,
            0.5);
70

Приклад: Для кожної будівлі знайдіть ділянку, яка найкраще її представляє. Спочатку ми вимагаємо, щоб ділянка перетиналася з геометрією будівлі. DISTINCT ON гарантує, що кожна будівля буде вказана тільки один раз. ORDER BY .. ST_HausdorffDistance вибирає ділянку, яка найбільш схожа на будівлю.

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


Name

ST_Length — Повертає 2D довжину лінійної геометрії.

Synopsis

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, але це може змінитися для підтримки вищих вимірів.

[Warning]

Змінено: 2.0.0 Істотна зміна — у попередніх версіях застосування цього до MULTI/POLYGON типу geography давало периметр POLYGON/MULTIPOLYGON. У 2.0.0 це було змінено, щоб повертати 0 відповідно до поведінки геометрії. Будь ласка, використовуйте ST_Perimeter, якщо ви хочете отримати периметр полігону

[Note]

Для географії за замовчуванням використовується сфероїдальна модель. Щоб скористатися швидшим, але менш точним сферичним розрахунком, використовуйте 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 - це фути штату Массачусетс

SELECT ST_Length(ST_GeomFromText(
'LINESTRING(743238 2967416,743238 2967450,743265 2967450,
743265.625 2967416,743238 2967416)',
2249));
122.63074400009504

This example transforms a WGS 84 LineString to Massachusetts State Plane meters.

SELECT ST_Length(ST_Transform(
                ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)'),
                        26986
        )
);
34309.4563576191

Приклади з географії

Повернути довжину географічної лінії WGS 84

This example uses the default spheroid calculation.

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

Name

ST_Length2D — Повертає 2D довжину лінійної геометрії. Псевдонім для ST_Length

Synopsis

float ST_Length2D(geometry a_2dlinestring);

Опис

Повертає 2D довжину геометрії, якщо це лінія або багатолінійна лінія. Це псевдонім для ST_Length

Див. також

ST_Length, ST_3DLength


Name

ST_3DLength — Повертає 3D довжину лінійної геометрії.

Synopsis

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 — це фути штату Массачусетс

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

Див. також

ST_Length, ST_Length2D


Name

ST_LengthSpheroid — Повертає 2D або 3D довжину/периметр геометрії lon/lat на сфероїді.

Synopsis

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.

Приклади

SELECT ST_LengthSpheroid(
                                  geometry_column,
                                  'SPHEROID["GRS_1980",6378137,298.257222101]'
                      )
                          FROM geometry_table;
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 (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5),
        (-71.05957 42.3589 , -71.061 43))') As geom,
CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m)  as foo;
tot_len      |    len_line1     |    len_line2
------------------+------------------+------------------
 85204.52077117894 | 13986.87252824332 | 71217.64824293563

This example uses 3D input.

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 (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30),
        (-71.05957 42.3589 75, -71.061 43 90))') As geom,
CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m)  as foo;
tot_len      |    len_line1    |    len_line2
------------------+-----------------+------------------
 85204.52592562366 | 13986.876103023424 | 71217.64982260024

Див. також

ST_GeometryN, ST_Length


Name

ST_LongestLine — Повертає найдовшу 2D лінію між двома геометріями.

Synopsis

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.

Приклади

Найдовша лінія між точкою і прямою

SELECT ST_AsText(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)

Найдовша лінія між двома полігонами

SELECT ST_AsText(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)

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

SELECT ST_AsText(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


Name

ST_3DLongestLine — Повертає найдовшу 3D лінію між двома геометріями

Synopsis

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.

Приклади

лінія та точка — найдовша лінія у 3D та 2D

SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
                ST_AsEWKT(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)

лінія та мультиточка — найдовша лінія в 3D та 2D

SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
                ST_AsEWKT(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)

MultiLineString і Polygon, як 3D, так і 2D найдовша лінія

SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d,
    ST_AsEWKT(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)


Name

ST_MaxDistance — Повертає найбільшу відстань між двома геометріями в проекційних одиницях.

Synopsis

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.

Приклади

Максимальна відстань між точкою та лініями.

SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
2
SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 2, 2 2 )'::geometry);
2.82842712474619

Максимальна відстань між вершинами однієї геометрії.

SELECT ST_MaxDistance('POLYGON ((10 10, 10 0, 0 0, 10 10))'::geometry);
14.142135623730951

Name

ST_3DMaxDistance — Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.

Synopsis

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.

SELECT ST_3DMaxDistance(
                        ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 10000)'),2163),
                                ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)
                        ) As dist_3d,
                        ST_MaxDistance(
                                ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 10000)'),2163),
                                ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)
                        ) As dist_2d;
dist_3d      |     dist_2d
------------------+------------------
 24383.7467488441 | 22247.8472107251

Name

ST_MinimumClearance — Повертає мінімальний зазор геометрії, міру міцності геометрії.

Synopsis

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

Приклади

SELECT ST_MinimumClearance('POLYGON ((0 0, 1 0, 1 1, 0.5 3.2e-4, 0 0))');
0.00032

Name

ST_MinimumClearanceLine — Повертає двоточкову лінію LineString, що охоплює мінімальний простір геометрії.

Synopsis

Geometry ST_MinimumClearanceLine(geometry g);

Опис

Повертає двоточкову лінію LineString, що охоплює мінімальний зазор геометрії. Якщо геометрія не має мінімального зазору, повертається LINESTRING EMPTY.

Виконується модулем GEOS.

Доступність: 2.3.0 - вимагає GEOS >= 3.6.0

Приклади

SELECT ST_AsText(ST_MinimumClearanceLine('POLYGON ((0 0, 1 0, 1 1, 0.5 3.2e-4, 0 0))'));
LINESTRING(0.5 0.00032,0.5 0)
                  

Див. також

ST_MinimumClearance


Name

ST_Perimeter — Повертає довжину межі полігональної геометрії або географії.

Synopsis

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: додано підтримку географії

Приклади: Геометрія

Повернути периметр у футах для полігону та мультиполігону. Зверніть увагу, що це фути, оскільки EPSG:2249 — це фути штату Массачусетс.

SELECT ST_Perimeter(ST_GeomFromText(
'POLYGON((743238 2967416,743238 2967450,743265 2967450,
743265.625 2967416,743238 2967416))',
2249));
122.63074400009504
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

Приклади: Географія

Повернути периметр у метрах і футах для полігону та мультиполігону. Зверніть увагу, що це географічні координати (WGS 84 long lat)

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

This example uses a MultiPolygon.

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
                        

Name

ST_Perimeter2D — Повертає 2D периметр полігональної геометрії. Псевдонім для ST_Perimeter.

Synopsis

float ST_Perimeter2D(geometry geomA);

Опис

Повертає двовимірний периметр багатокутної геометрії.

[Note]

Наразі це псевдонім для ST_Perimeter. У майбутніх версіях ST_Perimeter може повертати найбільший периметр для геометрії. Це питання ще розглядається

Див. також

ST_Perimeter


Name

ST_3DPerimeter — Повертає 3D периметр полігональної геометрії.

Synopsis

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

Приклади

Периметр злегка піднятого полігону в повітрі в штаті Массачусетс, фути площини штату

SELECT ST_3DPerimeter(geom), ST_Perimeter2D(geom), ST_Perimeter(geom) FROM
                        (SELECT ST_GeomFromEWKT('SRID=2249;POLYGON((743238 2967416 2,743238 2967450 1,
743265.625 2967416 1,743238 2967416 2))') As geom) As foo;
ST_3DPerimeter  |  st_perimeter2d  |   st_perimeter
------------------+------------------+------------------
105.46579359767418 | 105.43299727218763 | 105.43299727218763

Name

ST_ShortestLine — Повертає найкоротшу 2D лінію між двома геометріями

Synopsis

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

Приклади

Найкоротша лінія між точкою та лінією

SELECT ST_AsText(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)

Найкоротша лінія між полігонами

SELECT ST_AsText(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)


Name

ST_3DShortestLine — Повертає найкоротшу 3D лінію між двома геометріями

Synopsis

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.

Приклади

лінія та точка — найкоротша лінія в 3D та 2D

SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
                ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_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;

shl3d_line_pt                                                                 |               shl2d_line_pt
----------------------------------------------------------------------------+------------------------------------------------------
 LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30) | LINESTRING(73.07692307692307 115.38461538461539,100 100)

лінія та мультиточка — найкоротша лінія в 3D та 2D

SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
                ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_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;

shl3d_line_pt                                       | shl2d_line_pt
---------------------------------------------------------------------------+------------------------
 LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30) | LINESTRING(50 75,50 74)

MultiLineString і полігон, як 3D, так і 2D найкоротша лінія

SELECT ST_AsEWKT(ST_3DShortestLine(poly, mline)) As shl3d,
    ST_AsEWKT(ST_ShortestLine(poly, mline)) As shl2d
        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;

shl3d                                                                           |     shl2d
---------------------------------------------------------------------------------------------------+------------------------
 LINESTRING(40.45454545454545 53.63636363636364 5,40.45454545454545 53.63636363636364 5) | LINESTRING(20 40,20 40)

7.13. Функції накладання

Abstract

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

  • 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 — Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

Name

ST_ClipByBox2D — Обчислює частину геометрії, що потрапляє в прямокутник.

Synopsis

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.

SELECT ST_ClipByBox2D(geom, ST_MakeEnvelope(0,0,10,10)) FROM mytab;

Name

ST_Difference — Обчислює геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B.

Synopsis

geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1);

Опис

Повертає геометрію, що представляє частину геометрії A, яка не перетинається з геометрією B. Це еквівалентно A - ST_Intersection(A,B). Якщо A повністю міститься в B, то повертається порожня атомарна геометрія відповідного типу.

[Note]

Це єдина функція накладання, де порядок введення має значення. 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 лініями.

SELECT ST_AsText(ST_Difference('LINESTRING(50 100, 50 200)'::geometry,
            'LINESTRING(50 50, 50 150)'::geometry
        )
    );
LINESTRING(50 150,50 200)

Різниця між 3D-точками.

SELECT ST_AsEWKT(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)

Name

ST_Intersection — Обчислює геометрію, що представляє спільну частину геометрій A і B.

Synopsis

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 корисний для обрізання геометрій, наприклад, у запитах на обмежувальну рамку, буфер або регіон, де потрібна лише частина геометрії, що знаходиться всередині країни або регіону, що цікавить.

[Note]

For geography this is a thin wrapper around the geometry implementation. Спочатку визначається найкращий SRID, який відповідає обмежувальній рамці 2 географічних об'єктів (якщо географічні об'єкти знаходяться в межах однієї половини зони UTM, але не в одній і тій же UTM, вибирається одна з них) (віддаючи перевагу UTM або Ламберту Азимутальному рівновеликому (LAEA) північному/південному полюсу, а в найгіршому випадку використовуючи проекцію Меркатора), а потім перетинається в найкращому плоскому просторовому відліку і перетворюється назад в географію WGS84.

[Warning]

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

[Warning]

ST_3DIntersection яка виконує правильне 3D перетин для 3D геометрій. Хоча ця функція працює з Z-координатами, вона виконує усереднення Z-координат.

Виконано модулем 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 копіюються, усереднюються або інтерполюються.

Приклади

SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry));
POINT EMPTY
SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry));
POINT(0 0)

Виріжте всі лінії (треки) за країною. Тут ми припускаємо, що геометрія країни є POLYGON або MULTIPOLYGONS. ПРИМІТКА: ми зберігаємо тільки перетини, які утворюють LINESTRING або MULTILINESTRING, оскільки нас не цікавлять траси, які просто мають спільну точку. Дамп необхідний для розширення колекції геометрії в окремі частини MULT*. Нижче наведено досить загальний приклад, який підійде для полігонів тощо, якщо змінити умову where.

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, залишить тільки полігони і розчиниться оболонку колекції.)

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));

Examples: 2.5D geometries

Note this is not a true 3D intersection. It uses 2.5D geometries (geometries with Z ordinates, but where calculations are performed in 2D). Compare to the same example using ST_3DIntersection.

select ST_AsText(ST_Intersection(linestring, polygon)) As wkt
from  ST_GeomFromText('LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)') AS linestring
 CROSS JOIN ST_GeomFromText('POLYGON((0 0 8, 0 1 8, 1 1 8, 1 0 8, 0 0 8))') AS polygon;
LINESTRING Z (1 1 8,0.5 0.5 8,0 0 10)

Name

ST_MemUnion — Агрегатна функція, яка об'єднує геометрії в пам'яті ефективним, але повільнішим способом.

Synopsis

geometry ST_MemUnion(geometry set geomfield);

Опис

Агрегатна функція, яка об'єднує вхідні геометрії, зливаючи їх для отримання геометрії результату без перекриттів. Результатом може бути одна геометрія, MultiGeometry або Geometry Collection.

[Note]

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

This function supports 3d and will not drop the z-index. Однак результат обчислюється тільки за допомогою XY. Значення результату Z копіюються, усереднюються або інтерполюються.

Приклади

SELECT id,
       ST_MemUnion(geom) as singlegeom
FROM sometable f
GROUP BY id;

Див. також

ST_Union


Name

ST_Node — Вузли — сукупність ліній.

Synopsis

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.

Приклади

Вузли 3D-лінії, що перетинається сама з собою

SELECT ST_AsText(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))

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

SELECT ST_AsText(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))

Див. також

ST_UnaryUnion, ST_Union


Name

ST_Split — Повертає колекцію геометрій, створених шляхом розділення однієї геометрії іншою геометрією.

Synopsis

geometry ST_Split(geometry input, geometry blade);

Опис

Функція підтримує розділення LineString за межею (Multi)Point, (Multi)LineString або (Multi)Polygon, або (Multi)Polygon за LineString. Коли (Multi)Polygon використовується як лезо, його лінійні компоненти (межа) використовуються для розділення вхідних даних. Результуюча геометрія завжди є колекцією.

Ця функція в певному сенсі є протилежною до ST_Union. Застосування ST_Union до повернутої колекції теоретично повинно дати вихідну геометрію (хоча через числове округлення це може бути не зовсім так).

[Note]

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

Доступність: 2.0.0 вимагає GEOS

Покращено: 2.2.0 додано підтримку розділення лінії мультилінією, мультиточкою або (мульти)полігоном.

Покращено: 2.5.0 додано підтримку розділення полігону мультилінією.

Приклади

Розділити полігон лінією.

До розділення

Після розділення

SELECT ST_AsText(ST_Split(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50), -- circle
                ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) -- line
    ));
GEOMETRYCOLLECTION(
            POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..),
            POLYGON(..))
)
            

Розділити MultiLineString за точкою, яка лежить точно на обох елементах LineStrings.

До розділення

Після розділення

SELECT ST_AsText(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)
)

Розділити лінію String за точкою, яка не лежить точно на лінії. Показано за допомогою ST_Snap, щоб прив'язати лінію до точки, щоб її можна було розділити.

WITH data AS (SELECT
  'LINESTRING(0 0, 100 100)'::geometry AS line,
  'POINT(51 50)':: geometry AS point
)
SELECT ST_AsText(ST_Split(ST_Snap(line, point, 1), point)) AS snapped_split,
       ST_AsText(ST_Split(line, point)) AS not_snapped_not_split
       FROM data;
snapped_split                            |            not_snapped_not_split
---------------------------------------------------------------------+---------------------------------------------
 GEOMETRYCOLLECTION(LINESTRING(0 0,51 50),LINESTRING(51 50,100 100)) | GEOMETRYCOLLECTION(LINESTRING(0 0,100 100))

Див. також

ST_Snap, ST_Union


Name

ST_Subdivide — Обчислює прямолінійний поділ геометрії.

Synopsis

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, запити до індексу дають менше випадків "влучання". Випадки "влучання" обробляються швидше, оскільки просторові операції, що виконуються індексом, перевіряють менше точок.

[Note]

При перетворенні поділеної геометрії на географію, отримана географія може відрізнятися від оригіналу. Поділ додає вершини в плоскому (геометричному) просторі. Якщо вершини вставляються вздовж межі, вони змінять географічне представлення, де краї інтерпретуються як геодезичні сегменти. Щоб мінімізувати спотворення, спочатку ущільніть географію за допомогою ST_Segmentize, щоб додати геодезичні вершини, а потім перетворіть на геометрію перед поділом.

[Note]

Це функція повернення набору (SRF), яка повертає набір рядків, що містять окремі значення геометрії. Її можна використовувати в списку SELECT або в розділі FROM для створення набору результатів з одним записом для кожної геометрії результату.

Виконується модулем GEOS.

Доступність: 2.2.0

Покращено: 2.5.0 повторно використовує існуючі точки при розділенні полігону, кількість вершин зменшено з 8 до 5.

Покращено: 3.1.0 приймає параметр gridSize.

Для використання параметра gridSize необхідна версія GEOS >= 3.9.0

Приклади

Приклад: Розділіть полігон на частини з не більше ніж 10 вершинами та присвойте кожній частині унікальний ідентифікатор.

Розділено на максимум 10 вершин

SELECT row_number() OVER() As rn, ST_AsText(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))
  

Приклад: Ущільніть довгу географічну лінію за допомогою ST_Segmentize(geography, distance) і використовуйте ST_Subdivide, щоб розділити отриману лінію на підлінії з 8 вершинами. Ущільнення мінімізує вплив змін на географічне представлення геометрії під час поділу.

Ущільнені та розділені лінії.

SELECT ST_AsText(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)

Приклад: Розділіть складні геометрії таблиці на місці. Оригінальні записи геометрії видаляються з вихідної таблиці, а нові записи для кожної розділеної геометрії результату вставляються.


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 є функцією, що повертає набір (таблицю) і повертає набір рядків з одним значенням, ця синтаксична конструкція автоматично створює таблицю з одним рядком для кожної частини результату.

CREATE TABLE subdivided_geoms AS
    SELECT pkey, ST_Subdivide(geom) AS geom
    FROM original_geoms;

Name

ST_SymDifference — Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.

Synopsis

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.

SELECT ST_AsText(ST_SymDifference(ST_GeomFromText('LINESTRING(50 100, 50 200)'),
        ST_GeomFromText('LINESTRING(50 50, 50 150)')
    )
);
MULTILINESTRING((50 150,50 200),(50 50,50 100))
--When used in 3d doesn't quite do the right thing
SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'),
    ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))
MULTILINESTRING((1 3 4,1 4 2),(1 1 3,1 2 1))

Name

ST_UnaryUnion — Обчислює об'єднання компонентів однієї геометрії.

Synopsis

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


Name

ST_Union — Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.

Synopsis

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.

[Note]

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

[Note]

Агрегована версія не визначена явно в 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 копіюються, усереднюються або інтерполюються.

Приклади

Приклад агрегату

SELECT id,
       ST_Union(geom) as singlegeom
FROM sometable f
GROUP BY id;
              

Неагрегований приклад

SELECT ST_AsText(ST_Union('POINT(1 2)'::geometry, 'POINT(-2 3)'::geometry));
MULTIPOINT((1 2),(-2 3))
SELECT ST_AsText(ST_Union('POINT(1 2)'::geometry, 'POINT(1 2)'::geometry));
POINT(1 2)

3D example - sort of supports 3D (and with mixed geometry types!)

SELECT ST_AsEWKT(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)))

This 3D example does not mix dimensions.

SELECT ST_AsEWKT(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)))

This example unions an array built from a query.

SELECT ST_Union(ARRAY(SELECT geom FROM sometable));

This example unions an array of linestrings.

SELECT ST_AsText(ST_Union(ARRAY[
    ST_GeomFromText('LINESTRING(1 2, 3 4)'),
    ST_GeomFromText('LINESTRING(3 4, 4 5)')
])) As wktunion;
MULTILINESTRING((1 2,3 4),(3 4,4 5))

7.14. Обробка геометрії

Abstract

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

  • 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 — Повертає комірки діаграми Вороного вершин геометрії.

Name

ST_Buffer — Обчислює геометрію, що охоплює всі точки в межах заданої відстані від геометрії.

Synopsis

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”.

[Note]

For geography this is a thin wrapper around the geometry implementation. Визначає плоску систему просторових координат, яка найкраще відповідає обмежувальній рамці географічного об'єкта (спробує UTM, рівновелику азимутальну проекцію Ламберта (LAEA) з північним/південним полюсом і, нарешті, проекцію Меркатора). Буфер обчислюється в плоскому просторі, а потім перетворюється назад у WGS84. Це може не дати бажаного результату, якщо вхідний об'єкт набагато більший за зону UTM або перетинає лінію зміни дати

[Note]

Буфер може обробляти недійсні вхідні дані, а вихідні дані завжди мають дійсну полігональну геометрію. Буферизація за відстанню 0 іноді використовується як спосіб виправлення недійсних полігонів. ST_MakeValidбільш підходить для цього процесу, оскільки може обробляти мультиполігони.

[Note]

Буферизація іноді використовується для виконання пошуку в межах певної відстані. Для цього випадку використання ефективніше використовувати ST_DWithin.

[Note]

Ця функція ігнорує вимір 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

Приклади

quad_segs=8 (за замовчуванням)

SELECT ST_Buffer(
 ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=8');
                

quad_segs=2 (неповноцінний)

SELECT ST_Buffer(
 ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2');
                

endcap=round join=round (за замовчуванням)

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=round join=round');
                

endcap=square

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=square join=round');
                

endcap=flat

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=flat join=round');
                

join=bevel

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=bevel');
                

join=mitre mitre_limit=5.0 (стандартне обмеження mitre)

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=mitre mitre_limit=5.0');
                

join=mitre mitre_limit=1

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=mitre mitre_limit=1.0');
                

side=left

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=left');
                

side=right

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=right');
                

side=left join=mitre

SELECT ST_Buffer(
 ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=left join=mitre');
                

right-hand-winding, polygon boundary side=left

SELECT ST_Buffer(
ST_ForceRHR(ST_Boundary(ST_GeomFromText('POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))),
 ), 20, 'side=left');
                

right-hand-winding, polygon boundary side=right

SELECT ST_Buffer(
ST_ForceRHR(ST_Boundary(ST_GeomFromText('POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))
), 20,'side=right')
                

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)

SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As promisingcircle_pcount,
ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 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.

SELECT ST_AsText(ST_Buffer(
ST_Transform(ST_SetSRID(ST_Point(-71.063526, 42.35785),4269), 26986),
100,2)) As octagon;
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))

Name

ST_BuildArea — Створює полігональну геометрію, утворену лініями геометрії.

Synopsis

geometry ST_BuildArea(geometry geom);

Опис

Створює площинну геометрію, утворену лініями, що складають вхідну геометрію. Вхідними даними можуть бути LineString, MultiLineString, Polygon, MultiPolygon або GeometryCollection. Результатом є Polygon або MultiPolygon, залежно від вхідних даних. Якщо вхідні лінії не утворюють полігонів, повертається NULL.

На відміну від ST_MakePolygon, ця функція приймає кільця, утворені декількома лініями, і може утворювати будь-яку кількість полігонів.

Ця функція перетворює внутрішні кільця на отвори. Щоб перетворити внутрішні кільця також на полігони, використовуйте ST_Polygonize.

[Note]

Для коректної роботи цієї функції вхідні лінії повинні бути правильно позначені вузлами. Для позначення ліній можна використовувати ST_Node.

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

Доступність: 1.1.0

Приклади

Вхідні лінії

Результати за площею

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_AsText(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))

Створити кільце з двох круглих полігонів

SELECT ST_BuildArea(ST_Collect(inring,outring))
FROM (SELECT
    ST_Buffer('POINT(100 90)', 25) As inring,
    ST_Buffer('POINT(100 90)', 50) As outring) As t;

Див. також

ST_Collect, ST_MakePolygon, ST_MakeValid, ST_Node, ST_Polygonize, ST_BdPolyFromText, ST_BdMPolyFromText (обгортки для цієї функції зі стандартним інтерфейсом OGC)


Name

ST_Centroid — Повертає геометричний центр геометрії.

Synopsis

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

Приклади

На наступних ілюстраціях червона точка є центром ваги вихідної геометрії.

Центроїд MULTIPOINT

Центроїд LINESTRING

Центроїд POLYGON

Центроїд GEOMETRYCOLLECTION

SELECT ST_AsText(ST_Centroid('MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )'));
st_astext
------------------------------------------
POINT(2.307692307692308 3.307692307692308)
(1 row)

SELECT ST_AsText(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 ;
------------------------------------------
POINT(0.5 1)


SELECT ST_AsText(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;
------------------------------------------
POINT(0.5 1)

Name

ST_ChaikinSmoothing — Повертає згладжену версію геометрії, використовуючи алгоритм Чайкіна.

Synopsis

geometry ST_ChaikinSmoothing(geometry geom, integer nIterations = 1, boolean preserveEndPoints = false);

Опис

Згладжує лінійну або полігональну геометрію за допомогою алгоритму Чайкіна. Ступінь згладжування контролюється параметром nIterations. На кожній ітерації кожна внутрішня вершина замінюється двома вершинами, розташованими на 1/4 довжини відрізків лінії перед і після вершини. Розумний ступінь згладжування забезпечується 3 ітераціями; максимальне значення обмежено 5.

Якщо preserveEndPoints має значення true, кінцеві точки кілець полігону не згладжуються. Кінцеві точки лінійних об'єктів завжди зберігаються.

[Note]

Кількість вершин подвоюється з кожною ітерацією, тому геометрія результату може мати набагато більше точок, ніж вхідні дані. Щоб зменшити кількість точок, скористайтеся функцією спрощення результату (див. ST_Simplify, ST_SimplifyPreserveTopologyта ST_SimplifyVW).

Результатом є інтерпольовані значення для розмірів Z і M, якщо вони присутні.

This function supports 3d and will not drop the z-index.

Доступність: 2.5.0

Приклади

Згладжування трикутника:

SELECT ST_AsText(ST_ChaikinSmoothing(geom)) smoothed
FROM (SELECT  'POLYGON((0 0, 8 8, 0 16, 0 0))'::geometry geom) AS foo;

                 smoothed
───────────────────────────────────────────
 POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2))

Згладжування полігону за допомогою 1, 2 і 3 ітерацій:

nIterations = 1

nIterations = 2

nIterations = 3

SELECT 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))',
            generate_series(1, 3) );

Згладжування LineString за допомогою 1, 2 і 3 ітерацій:

nIterations = 1

nIterations = 2

nIterations = 3

SELECT ST_ChaikinSmoothing('LINESTRING (10 140, 80 130, 100 190, 190 150, 140 20, 120 120, 50 30, 30 100)',
            generate_series(1, 3) );

Name

ST_CatmullRomSmoothing — Returns a smoothed version of a geometry, using the Catmull-Rom spline algorithm

Synopsis

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.

[Note]

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 4-point collinear line with default nSegments=5:

SELECT ST_AsText(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)

Smoothing a Polygon using nSegments = 5 and 10:

nSegments = 5

nSegments = 10

SELECT ST_CatmullRomSmoothing('POLYGON ((20 20, 60 90, 10 150, 100 190, 190 160, 130 120, 190 50, 140 70, 120 10, 90 60, 20 20))',
            generate_series(5, 10, 5) );

Smoothing a LineString using nSegments = 5 and 10:

nSegments = 5

nSegments = 10

SELECT ST_CatmullRomSmoothing('LINESTRING (10 140, 80 130, 100 190, 190 150, 140 20, 120 120, 50 30, 30 100)',
            generate_series(5, 10, 5) );

Name

ST_ConcaveHull — Обчислює можливу увігнуту геометрію, яка містить усі вершини вхідної геометрії

Synopsis

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 дають прийнятні результати.

[Note]

Технічно, параметр 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+

Приклади

Увігнутий корпус багатоточкового пристрою

SELECT ST_AsText(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))
    

Увігнутий корпус багатоточкового пристрою, що дозволяє робити отвори

SELECT ST_AsText(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))
    

polygon_hull

points_hull

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

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;

Використання з ST_Collect для обчислення увігнутої оболонки набору геометрій.

This example estimates an infected area from point observations.

SELECT disease_type,
    ST_ConcaveHull(ST_Collect(obs_pnt), 0.3 ) AS geom
  FROM disease_obs
  GROUP BY disease_type;

Name

ST_ConvexHull — Обчислює опуклу оболонку геометрії.

Synopsis

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.

Приклади

Опукла оболонка багатолінійної та мультиточкової фігури

SELECT ST_AsText(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))
    

Використання разом із ST_Collect для обчислення опуклих оболонок наборів геометричних фігур.

This example returns an estimated infected area from point observations.

SELECT d.disease_type,
    ST_ConvexHull(ST_Collect(d.geom)) As geom
    FROM disease_obs As d
    GROUP BY d.disease_type;

Name

ST_DelaunayTriangles — Повертає триангуляцію Делауея вершин геометрії.

Synopsis

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).

Приклади

Оригінальні полігони

our original geometry
    ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
            50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
        )

ST_DelaunayTriangles з 2 полігонів: трикутники Делоне, кожен трикутник виділений різним кольором


geometries overlaid multilinestring triangles

SELECT
    ST_DelaunayTriangles(ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
            50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
        ))
     As  dtriag;
                

Delaunay triangles as a MultiLineString

SELECT
    ST_DelaunayTriangles(ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
            50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
        ),0.001,1)
     As  dtriag;

Delaunay triangles of 45 points as 55 triangle polygons


this produces a table of 42 points that form an L shape

SELECT (ST_DumpPoints(ST_GeomFromText('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)'))).geom
    INTO TABLE l_shape;

output as individual polygon triangles

SELECT ST_AsText((ST_Dump(geom)).geom) As wkt
FROM ( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geom
FROM l_shape) As foo;


wkt

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))

Приклад використання вершин із значеннями Z.


3D multipoint

SELECT ST_AsText(ST_DelaunayTriangles(ST_GeomFromText('MULTIPOINT Z(14 14 10, 150 14 100,34 6 25, 20 10 150)'))) As wkt;


wkt

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)))

Name

ST_FilterByM — Видаляє вершини на основі їхнього значення M

Synopsis

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 можна отримати спрощену версію геометрії без будь-яких обчислень, просто за допомогою фільтрування

[Note]

Існує різниця в тому, що повертає ST_SimplifyVW, коли недостатньо точок відповідають критеріям, порівняно з ST_FilterByM. ST_SimplifyVW повертає геометрію з достатньою кількістю точок, тоді як ST_FilterByM повертає порожню геометрію

[Note]

Зверніть увагу, що повернута геометрія може бути недійсною

[Note]

Ця функція повертає всі розмірності, включаючи значення Z і M

Доступність: 2.5.0

Приклади

Лінійний рядок фільтрується

SELECT ST_AsText(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)

Name

ST_GeneratePoints — Генерує множину випадкових точок, що містяться в полігоні або полігоні.

Synopsis

geometry ST_GeneratePoints(geometry g, integer npoints, integer seed = 0);

Опис

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

Доступність: 2.3.0

Покращено: 3.0.0, додано параметр seed

Приклади

Створено мультиточку, що складається з 12 точок, накладених на оригінальний полігон, з використанням випадкового початкового значення 1996

SELECT ST_GeneratePoints(geom, 12, 1996)
FROM (
    SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'),
        10, 'endcap=round join=round') AS geom
) AS s;

Задано таблицю полігонів s. Поверніть 12 окремих точок для кожного полігону. Результати будуть різними при кожному запуску.

SELECT s.id, dp.path[1] AS pt_id, dp.geom
FROM s, ST_DumpPoints(ST_GeneratePoints(s.geom,12)) AS dp;

Див. також

ST_DumpPoints


Name

ST_GeometricMedian — Повертає геометричну медіану MultiPoint.

Synopsis

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.

Приклади

Порівняння геометричної медіани (червоний) та центроїда (бірюзовий) MultiPoint.

WITH test AS (
SELECT 'MULTIPOINT((10 10), (10 40), (40 10), (190 190))'::geometry geom)
SELECT
  ST_AsText(ST_Centroid(geom)) centroid,
  ST_AsText(ST_GeometricMedian(geom)) median
FROM test;
centroid      |                 median
--------------------+----------------------------------------
   POINT(62.5 62.5) | POINT(25.01778421249728 25.01778421249728)
(1 row)

Див. також

ST_Centroid


Name

ST_LineMerge — Повернути лінії, утворені зшиванням MultiLineString.

Synopsis

geometry ST_LineMerge(geometry amultilinestring);

geometry ST_LineMerge(geometry amultilinestring, boolean directed);

Опис

Повертає LineString або MultiLineString, утворений шляхом з'єднання лінійних елементів MultiLineString. Лінії з'єднуються в кінцевих точках на двосторонніх перетинах. Лінії не з'єднуються на перетинах з трьома або більше точками.

Якщо directed має значення TRUE, то ST_LineMerge не змінюватиме порядок точок у LineStrings, тому лінії з протилежними напрямками не будуть об'єднані

[Note]

Використовуйте тільки з MultiLineString/LineStrings. Інші типи геометрії повертають порожній GeometryCollection

Виконується модулем GEOS.

Покращено: 3.3.0 приймає спрямований параметр.

Для використання параметра directed необхідна версія GEOS >= 3.11.0.

Доступність: 1.1.0

[Warning]

Ця функція видаляє розмірність M.

Приклади

Cardinality 2

Nodes with cardinality 2 are merged away.

SELECT ST_AsText(ST_LineMerge('MULTILINESTRING((10 160, 60 120), (120 140, 60 120), (120 140, 180 120))'
                ));
LINESTRING(10 160,60 120,120 140,180 120)

Cardinality 3 or More

Лінії не об'єднуються на перетинах зі ступенем > 2.

SELECT ST_AsText(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))

Лінії, що не стикаються

Якщо об'єднання неможливе через непересічні лінії, повертається оригінальний MultiLineString.

SELECT ST_AsText(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))

Направлений параметр

Лінії з протилежними напрямками не об'єднуються, якщо directed = TRUE.

SELECT ST_AsText(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))

Обробка Z-виміру

SELECT ST_AsText(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)

Див. також

ST_Segmentize, ST_LineSubstring


Name

ST_MaximumInscribedCircle — Обчислює найбільше коло, що міститься в геометрії.

Synopsis

(geometry, geometry, double precision) ST_MaximumInscribedCircle(geometry geom);

Опис

Знаходить найбільше коло, яке міститься в (мульти)полігоні або не перетинається з лініями та точками. Повертає запис із полями:

  • center - центр кола

  • nearest - точка на геометрії, найближча до центру

  • radius - радіус кола

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

Доступність: 3.1.0.

Потрібна версія GEOS >= 3.9.0.

Приклади

Максимальне вписане коло полігону. Повертаються центр, найближча точка та радіус.

SELECT radius, ST_AsText(center) AS center, ST_AsText(nearest) AS nearest
    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))');
radius      |           center           |    nearest
-----------------+----------------------------+---------------
45.18896951053177 | POINT(96.9287109375 76.3232421875) | POINT(61.64205411585366 104.55256764481707)

Максимальне вписане коло багатолінійної фігури. Повертаються центр, найближча точка та радіус.


Name

ST_LargestEmptyCircle — Обчислює найбільше коло, яке не перетинається з геометрією.

Synopsis

(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.

Приклади

SELECT radius,
      center,
      nearest
  FROM ST_LargestEmptyCircle('MULTILINESTRING (
          (10 100, 60 180, 130 150, 190 160),
          (20 50, 70 70, 90 20, 110 40),
          (160 30, 100 100, 180 100))');

Найбільше порожнє коло в наборі ліній.

SELECT radius,
       center,
       nearest
  FROM ST_LargestEmptyCircle(ST_Collect('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),
           0,
         'POLYGON ((90 190, 10 100, 60 10, 190 40, 120 100, 190 180, 90 190))'::geometry
       );

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

Див. також

ST_MinimumBoundingRadius


Name

ST_MinimumBoundingCircle — Повертає найменший полігон кола, що містить геометрію.

Synopsis

geometry ST_MinimumBoundingCircle(geometry geomA, integer num_segs_per_qt_circ=48);

Опис

Повертає найменший полігон кола, що містить геометрію.

[Note]

Обмежувальне коло наближається полігоном із 48 сегментами на чверть кола за замовчуванням. Оскільки полігон є наближенням мінімального обмежувального кола, деякі точки в геометрії вхідних даних можуть не міститися в полігоні. Наближення можна поліпшити, збільшивши кількість сегментів. Для додатків, де наближення не підходить, можна використовувати ST_MinimumBoundingRadius.

Використовуйте з ST_Collect, щоб отримати мінімальне обмежуюче коло набору геометрій.

Щоб обчислити дві точки, що лежать на мінімальному колі (максимальний діаметр), використовуйте ST_LongestLine.

Відношення площі полігону до площі його мінімального обмежувального кола називається коефіцієнтом компактності Реока.

Виконується модулем GEOS.

Доступність: 1.4.0

Приклади

SELECT d.disease_type,
    ST_MinimumBoundingCircle(ST_Collect(d.geom)) As geom
    FROM disease_obs As d
    GROUP BY d.disease_type;

Мінімальне обмежуюче коло точки та лінії. Використання 8 сегментів для наближення чверті кола

SELECT ST_AsText(ST_MinimumBoundingCircle(ST_Collect(ST_GeomFromText('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.49999999999999 178.4024474346694))

Name

ST_MinimumBoundingRadius — Повертає центр і радіус найменшого кола, що містить геометрію.

Synopsis

(geometry, double precision) ST_MinimumBoundingRadius(geometry geom);

Опис

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

  • center - центр кола

  • radius - радіус кола

Використовуйте з ST_Collect, щоб отримати мінімальне обмежуюче коло набору геометрій.

Щоб обчислити дві точки, що лежать на мінімальному колі (максимальний діаметр), використовуйте ST_LongestLine.

Доступність - 2.3.0

Приклади

SELECT ST_AsText(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

Name

ST_OrientedEnvelope — Повертає прямокутник з мінімальною площею, що містить геометрію.

Synopsis

geometry ST_OrientedEnvelope( geometry geom );

Опис

Повертає прямокутник з мінімальною площею, що охоплює геометрію. Зверніть увагу, що може існувати більше одного такого прямокутника. У разі вироджених вхідних даних може повертати Point або LineString.

Доступність: 2.5.0.

Вимагає GEOS >= 3.6.0.

Приклади

SELECT ST_AsText(ST_OrientedEnvelope('MULTIPOINT ((0 0), (-1 -1), (3 2))'));
POLYGON((3 2,-1 -1,-1.12 -0.84,2.88 2.16,3 2))

Орієнтована оболонка точки та лінії.

SELECT ST_AsText(ST_OrientedEnvelope(ST_Collect(ST_GeomFromText('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))

Name

ST_OffsetCurve — Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії.

Synopsis

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

[Note]

Ця функція ігнорує вимір Z. Вона завжди дає двовимірний результат, навіть якщо використовується для тривимірної геометрії.

Приклади

Обчислити відкритий буфер навколо доріг

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;

                

15, "quad_segs=4 join=round" оригінальна лінія та її зміщення на 15 одиниць.

SELECT ST_AsText(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'));

output

LINESTRING(164 1,18 1,12.2597485145237 2.1418070123307,
    7.39339828220179 5.39339828220179,
    5.39339828220179 7.39339828220179,
    2.14180701233067 12.2597485145237,1 18,1 195)
                

-15, 'quad_segs=4 join=round' оригінальна лінія та її зміщення -15 одиниць

SELECT ST_AsText(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;

notsocurvy

LINESTRING(31 195,31 31,164 31)
                

подвійне зміщення для отримання більш вигнутої кривої, зверніть увагу, що перше зміщення змінює напрямок, тому -30 + 15 = -15

SELECT ST_AsText(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;

morecurvy

LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307,
35.3933982822018 35.3933982822018,
32.1418070123307 40.2597485145237,31 46,31 195)
                

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

SELECT ST_AsText(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;

parallel curves

MULTILINESTRING((164 1,18 1,12.2597485145237 2.1418070123307,
7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179,
2.14180701233067 12.2597485145237,1 18,1 195),
(164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 35.3933982822018,
32.1418070123307 40.2597485145237,31 46,31 195))
                

15, "quad_segs=4 join=bevel" показано з оригінальною лінією

SELECT ST_AsText(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'));

output

LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179,
    5.39339828220179 7.39339828220179,1 18,1 195)
                

15,-15 collected, join=mitre mitre_limit=2.1

SELECT ST_AsText(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;

output

MULTILINESTRING((164 1,11.7867965644036 1,1 11.7867965644036,1 195),
    (31 195,31 31,164 31))
                

Див. також

ST_Buffer


Name

ST_PointOnSurface — Обчислює точку, яка гарантовано лежить у полігоні або на геометрії.

Synopsis

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.

Приклади

Точка на поверхні MULTIPOINT

Точка на поверхні LINESTRING

Точка на поверхні POLYGON

Точка на поверхні GEOMETRYCOLLECTION

SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));
------------
 POINT(0 5)

SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry));
------------
 POINT(0 5)

SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));
----------------
 POINT(2.5 2.5)

SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, 0 10 2)')));
----------------
 POINT(0 0 1)

Приклад: Результат ST_PointOnSurface гарантовано лежить всередині полігонів, тоді як точка, обчислена за допомогою ST_Centroid, може лежати поза ними.

Червоний: точка на поверхні; Зелений: центроїд

SELECT ST_AsText(ST_PointOnSurface(geom)) AS pt_on_surf,
       ST_AsText(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)

Name

ST_Polygonize — Обчислює сукупність полігонів, утворених з ліній набору геометрій.

Synopsis

geometry ST_Polygonize(geometry set geomfield);

geometry ST_Polygonize(geometry[] geom_array);

Опис

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

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

[Note]

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

[Note]

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

Виконується модулем GEOS.

Доступність: 1.0.0RC1

Приклади

Вхідні лінії

Результат polygonized

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_AsText(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)))

Polygonizing таблиці лінійних рядків:

SELECT ST_AsEWKT(ST_Polygonize(geom_4269)) As geomtextrep
FROM (SELECT geom_4269 FROM ma.suffolk_edges) As foo;

-------------------------------------
 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)))

--Use ST_Dump to dump out the polygonize geoms into individual polygons
SELECT ST_AsEWKT((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;

------------------------
 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))

Див. також

ST_BuildArea, ST_Dump, ST_Node


Name

ST_ReducePrecision — Повертає дійсну геометрію з точками, округленими до допуску сітки.

Synopsis

geometry ST_ReducePrecision(geometry g, float8 gridsize);

Опис

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

На відміну від ST_SnapToGrid, повернута геометрія буде дійсною, без самоперетинів кілець або згорнутих компонентів.

Зниження точності може бути використано для:

  • відповідність координат точності даних

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

  • забезпечити правильний вивід геометрії у формати, що використовують нижчу точність (наприклад, текстові формати, такі як WKT, GeoJSON або KML, коли кількість десяткових знаків у виводі обмежена).

  • експорт дійсної геометрії в системи, які використовують нижчу або обмежену точність (наприклад, SDE, значення толерантності Oracle)

Доступність: 3.1.0.

Потрібна версія GEOS >= 3.9.0.

Приклади

SELECT ST_AsText(ST_ReducePrecision('POINT(1.412 19.323)', 0.1));
POINT(1.4 19.3)
SELECT ST_AsText(ST_ReducePrecision('POINT(1.412 19.323)', 1.0));
POINT(1 19)
SELECT ST_AsText(ST_ReducePrecision('POINT(1.412 19.323)', 10));
POINT(0 20)

Зниження точності може зменшити кількість вершин

SELECT ST_AsText(ST_ReducePrecision('LINESTRING (10 10, 19.6 30.1, 20 30, 20.3 30, 40 40)', 1));
LINESTRING (10 10, 20 30, 40 40)

Точне скорочення розділяє полігони, якщо це необхідно для забезпечення валідності

SELECT ST_AsText(ST_ReducePrecision('POLYGON ((10 10, 60 60.1, 70 30, 40 40, 50 10, 10 10))', 10));
MULTIPOLYGON(((40 40,50 10,10 10,40 40)),((60 60,70 30,40 40,60 60)))

Name

ST_SharedPaths — Повертає колекцію, що містить шляхи, спільні для двох вхідних ліній/мультиліній.

Synopsis

geometry ST_SharedPaths(geometry lineal1, geometry lineal2);

Опис

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

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади: Пошук спільних шляхів

Мультилінія та лінія

Спільний шлях мультиліній та ліній, накладених на оригінальні геометрії.

SELECT ST_AsText(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,90 161, 76 175)')
    )
  )

GEOMETRYCOLLECTION(MULTILINESTRING((126 156.25,126 125),
 (101 150,90 161),(90 161,76 175)),MULTILINESTRING EMPTY)


same example but linestring orientation flipped

SELECT ST_AsText(ST_SharedPaths(ST_GeomFromText('LINESTRING(76 175,90 161,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,90 161),(90 161,101 150),(126 125,126 156.25)))


Name

ST_Simplify — Повертає спрощене представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.

Synopsis

geometry ST_Simplify(geometry geom, float tolerance);

geometry ST_Simplify(geometry geom, float tolerance, boolean preserveCollapsed);

Опис

Обчислює спрощене представлення геометрії за допомогою алгоритму Дугласа-Пьюкера. Спрощення tolerance є значенням відстані в одиницях вхідної SRS. Спрощення видаляє вершини, які знаходяться в межах відстані толерантності спрощеної лінії. Результат може бути недійсним, навіть якщо вхідні дані є дійсними.

Функція може бути викликана з будь-яким типом геометрії (включаючи GeometryCollections), але спрощуються тільки елементи лінії та полігону. Кінцеві точки лінійної геометрії зберігаються.

Прапор preserveCollapsed зберігає невеликі геометрії, які в іншому випадку були б видалені з урахуванням заданого допуску. Наприклад, якщо лінія довжиною 1 м спрощується з допуском 10 м, то при значенні preserveCollapsed лінія не зникне. Цей прапор корисний для цілей візуалізації, щоб запобігти зникненню дуже невеликих об'єктів з карти.

[Note]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple), топологія може не зберегтися, а полігональні результати можуть бути недійсними (див. ST_IsValid). Використовуйте ST_SimplifyPreserveTopology, щоб зберегти топологію та забезпечити дійсність.

[Note]

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

Доступність: 1.2.2

Приклади

A circle simplified with a medium tolerance becomes an octagon, and with a large tolerance disappears.

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;
np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_gone | np100_geometrygoesaway
-----------+-------------------+---------------------+-------------+-----------+------------------------
        49 |                33 |                  17 |           9 |      null | t

Спрощення набору ліній. Після спрощення лінії можуть перетинатися.

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))',
    40);

Спрощення багатокутника. Результати багатокутника можуть бути недійсними.

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)))',
    40);

Name

ST_SimplifyPreserveTopology — Повертає спрощене та дійсне представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.

Synopsis

geometry ST_SimplifyPreserveTopology(geometry geom, float tolerance);

Опис

Обчислює спрощене представлення геометрії за допомогою варіанту алгоритму Дугласа-Пьюкера, який обмежує спрощення, щоб забезпечити топологію результату, ідентичну топології вхідних даних. Допуск спрощення tolerance є значенням відстані в одиницях вхідної SRS. Спрощення видаляє вершини, які знаходяться в межах допуску відстані спрощеної лінії, за умови збереження топології. Результат буде дійсним і простим, якщо вхідні дані є такими.

Функцію можна викликати з будь-яким типом геометрії (включаючи GeometryCollections), але спрощуються тільки елементи лінії та полігону. Для полігональних вхідних даних результат матиме таку саму кількість кілець (оболонок і отворів), і кільця не перетинатимуться. Кінцеві точки кілець можуть бути спрощені. Для лінійних вхідних даних результат матиме таку саму кількість ліній, і лінії не перетинатимуться, якщо вони не перетиналися в оригінальній геометрії. Кінцеві точки лінійної геометрії зберігаються.

[Note]

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

Виконується модулем GEOS.

Доступність: 1.3.3

Приклади

For the same example as ST_Simplify, ST_SimplifyPreserveTopology prevents the geometry from disappearing.

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

Спрощення набору ліній із збереженням топології ліній, що не перетинаються.

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))',
    40);

Спрощення мультиполігону із збереженням топології оболонок і отворів.

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)))',
    40);

Name

ST_SimplifyPolygonHull — Обчислює спрощену зовнішню або внутрішню оболонку полігональної геометрії із збереженням топології.

Synopsis

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.

Приклади

Зовнішня оболонка полігону

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))',
    0.3);

Внутрішня оболонка полігону

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))',
    0.3, false);

Спрощення зовнішньої оболонки мультиполігону з сегментацією

SELECT ST_SimplifyPolygonHull(ST_Segmentize(ST_Letters('xt'), 2.0),
    0.1);


Name

ST_SimplifyVW — Повертає спрощене представлення геометрії, використовуючи алгоритм Вісвалінгама-Вайатта

Synopsis

geometry ST_SimplifyVW(geometry geom, float tolerance);

Опис

Повертає спрощене представлення геометрії за допомогою алгоритму Visvalingam-Whyatt. Спрощення tolerance є значенням площі в одиницях вхідної SRS. Спрощення видаляє вершини, які утворюють "кути" з площею, меншою за толерантність. Результат може бути недійсним, навіть якщо вхідні дані є дійсними.

Функція може бути викликана з будь-яким типом геометрії (включаючи GeometryCollections), але спрощуються тільки елементи лінії та полігону. Кінцеві точки лінійної геометрії зберігаються.

[Note]

Повернена геометрія може втратити свою простоту (див. ST_IsSimple), топологія може не зберегтися, а полігональні результати можуть бути недійсними (див. ST_IsValid). Використовуйте ST_SimplifyPreserveTopology, щоб зберегти топологію та забезпечити дійсність. ST_CoverageSimplifyтакож зберігає топологію та дійсність.

[Note]

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

[Note]

Ця функція обробляє 3D, і третій вимір впливатиме на результат.

Доступність: 2.2.0

Приклади

Лінія (LineString) спрощується з мінімальним допуском площі 30.

SELECT ST_AsText(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)

Спрощення лінії.

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)',
    1600);

Спрощення полігону.

SELECT ST_SimplifyVW('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)))',
    40);

Name

ST_SetEffectiveArea — Встановлює ефективну площу для кожної вершини, використовуючи алгоритм Вісвалінгама-Вайатта.

Synopsis

geometry ST_SetEffectiveArea(geometry geom, float threshold = 0, integer set_area = 1);

Опис

Встановлює ефективну площу для кожної вершини, використовуючи алгоритм Вісвалінгама-Вайатта. Ефективна площа зберігається як M-значення вершини. Якщо використовується опціональний параметр "threshold", буде повернуто спрощену геометрію, що містить тільки вершини з ефективною площею, більшою або рівною значенню порогу.

Ця функція може бути використана для спрощення на стороні сервера, коли вказано поріг. Інший варіант – використання порогового значення нуль. У цьому випадку буде повернуто повну геометрію з ефективними площами у вигляді M-значень, які клієнт може використовувати для дуже швидкого спрощення.

Фактично виконує операції тільки з (мульти)лініями та (мульти)полігонами, але ви можете безпечно викликати її з будь-яким типом геометрії. Оскільки спрощення відбувається на основі окремих об'єктів, ви також можете передати цій функції GeometryCollection.

[Note]

Зверніть увагу, що повернена геометрія може втратити свою простоту (див. ST_IsSimple)

[Note]

Зверніть увагу, що топологія може не зберегтися, що може призвести до недійсних геометрій. Для збереження топології використовуйте (див. ST_SimplifyPreserveTopology).

[Note]

Геометрія виводу втратить всю попередню інформацію в значеннях M

[Note]

Ця функція обробляє 3D, і третій вимір впливатиме на ефективну площу

Доступність: 2.2.0

Приклади

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

select ST_AsText(ST_SetEffectiveArea(geom)) all_pts, ST_AsText(ST_SetEffectiveArea(geom,30) ) thrshld_30
FROM (SELECT  'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
all_pts                                             |                                   thrshld_30
------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------
 LINESTRING M (5 2 3.402823466385289e+38,3 8 29,6 20 1.5,7 25 49.5,10 10 3.402823466385289e+38) | LINESTRING M (5 2 3.402823466385289e+38,7 25 49.5,10 10 3.402823466385289e+38)
(1 row)

Див. також

ST_SimplifyVW


Name

ST_TriangulatePolygon — Обчислює обмежену триангуляцію Делоне полігонів

Synopsis

geometry ST_TriangulatePolygon(geometry geom);

Опис

Обчислює обмежену триангуляцію Делоне для полігонів. Підтримуються отвори та мультиполігони.

"Обмежена триангуляція Делоне" полігону — це набір трикутників, утворених з вершин полігону, які точно його покривають, з максимальним сумарним внутрішнім кутом серед усіх можливих триангуляцій. Вона забезпечує "найкращу якість" триангуляції полігону.

Доступність: 3.3.0.

Вимагає GEOS >= 3.11.0.

Приклад

Тріангуляція квадрата.

SELECT ST_AsText(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)))

Приклад

Тріангуляція літери P.

SELECT ST_AsText(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))'
    ));

Триангуляція полігонів

Такий самий приклад, як ST_Tesselate

SELECT ST_AsText(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)))

Оригінальний полігон

Трикутний полігон


Name

ST_VoronoiLines — Повертає межі діаграми Вороного вершин геометрії.

Synopsis

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

Приклади

Лінії діаграми Вороного з допуском 30 одиниць

SELECT ST_AsText(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))

Name

ST_VoronoiPolygons — Повертає комірки діаграми Вороного вершин геометрії.

Synopsis

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

Приклади

Точки, накладені на діаграму Вороного

SELECT ST_AsText(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)))

Діаграма Вороного з толерантністю 30 одиниць

SELECT ST_AsText(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)))

7.15. Покриття

Abstract

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

  • ST_CoverageInvalidEdges — Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.
  • ST_CoverageClean — Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.
  • ST_CoverageSimplify — Віконна функція, яка спрощує краї полігонального покриття.
  • ST_CoverageEdges — Computes the unique edges of a polygonal coverage.
  • ST_CoverageUnion — Обчислює об'єднання набору полігонів, що утворюють покриття, видаляючи спільні ребра.

Name

ST_CoverageInvalidEdges — Віконна функція, яка знаходить місця, де полігони не утворюють дійсного покриття.

Synopsis

geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance = 0);

Опис

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

Набір дійсних полігонів є дійсним покриттям, якщо виконуються такі умови:

  • Неперекриваються - полігони не перекриваються (їх внутрішні частини не перетинаються)

  • Edge-Matched - вершини вздовж спільних ребер є ідентичними

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

Умови дозволяють дійсному покриттю містити отвори (проміжки між полігонами), якщо сусідні полігони збігаються по краях. Однак дуже вузькі проміжки часто є небажаними. Якщо параметр tolerance задано з відстанню, відмінною від нуля, краї, що утворюють вужчі проміжки, також будуть повернуті як недійсні.

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

Доступність: 3.4.0

Потрібна версія GEOS >= 3.12.0

Приклади

Недійсні ребра, спричинені перекриттям і невідповідністю вершин

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_AsText(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

This example tests the entire table for coverage validity.

SELECT true = ALL (
    SELECT ST_CoverageInvalidEdges(geom) OVER () IS NULL
    FROM coverage
    );
      

Name

ST_CoverageClean — Обчислює чисте (збіжні краї, без перекриттів, без прогалин) полігональне покриття, задане нечистим вхідним даними.

Synopsis

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 і може бути введено в функції обробки покриття.

[Note]

Щоб полегшити визначення максимальної ширини проміжків, їх можна обчислити, очистивши за допомогою gapMaximumWidth = > 0 і використовуючи ST_CoverageUnionдля об'єднання результату покриття. Дірки в об'єднанні відповідають проміжкам в оригінальному наборі даних. Ширину проміжків можна виміряти, витягнувши отвори у вигляді багатокутників і виконавши на них ST_MaximumInscribedCircle; ширина проміжку дорівнює подвійному обчисленому радіусу.

Доступність: 3.6.0 - вимагає GEOS >= 3.14.0

Приклади

This example populates the input table.

CREATE TABLE example AS SELECT * FROM (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)
) AS v(id, geom);

Полігони з перекриттями та розривами

This example shows that the coverage is invalid.

SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ())
  FROM example;

Недійсні грані покриття

This example cleans the coverage by merging gaps with width less than or equal to 1.

CREATE TABLE example_clean AS
  SELECT id, ST_CoverageClean(geom, 1) OVER () AS GEOM
  FROM example;

Чисте полігональне покриття, з усуненням перекриттів і вузьких проміжків


Name

ST_CoverageSimplify — Віконна функція, яка спрощує краї полігонального покриття.

Synopsis

geometry ST_CoverageSimplify(geometry winset geom, float8 tolerance, boolean simplifyBoundary = true);

Опис

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

Спрощення використовує варіант алгоритму Visvalingam–Whyatt. Параметр tolerance має одиниці виміру відстані і приблизно дорівнює квадратному кореню з площі трикутників, що спрощуються.

Щоб спростити тільки "внутрішні" краї покриття (ті, що є спільними для двох полігонів), встановіть параметр simplifyBoundary на значення false.

[Note]

Якщо вхідні дані не є дійсним покриттям, у вихідних даних можуть з'явитися несподівані артефакти (наприклад, перетини меж або розділені межі, які здавалися спільними). Використовуйте ST_CoverageInvalidEdges, щоб визначити, чи є покриття дійсним.

Доступність: 3.4.0

Потрібна версія GEOS >= 3.12.0

Приклади

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

Спрощене покриття

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_AsText(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))

Name

ST_CoverageEdges — Computes the unique edges of a polygonal coverage.

Synopsis

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.

SELECT ST_AsText(ST_CoverageEdges(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)), POLYGON((10 0, 20 0, 20 10, 10 10, 10 0)))')));
MULTILINESTRING((0 0, 10 0), (10 0, 20 0), (20 0, 20 10), (20 10, 10 10), (10 10, 0 10), (0 10, 0 0), (10 0, 10 10))

This example returns only the interior shared edges of a coverage.

SELECT ST_AsText(ST_CoverageEdges(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)), POLYGON((10 0, 20 0, 20 10, 10 10, 10 0)))'), 2));
MULTILINESTRING((10 0, 10 10))

Name

ST_CoverageUnion — Обчислює об'єднання набору полігонів, що утворюють покриття, видаляючи спільні ребра.

Synopsis

geometry ST_CoverageUnion(geometry set geom);

Опис

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

[Note]

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

Доступність: 3.4.0 - вимагає GEOS >= 3.8.0

Приклади

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

Результат об'єднання

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_AsText(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)))

7.16. Афінні перетворення

Abstract

Ці функції змінюють положення та форму геометрій за допомогою афінних перетворень.

  • ST_Affine — Застосувати афінне перетворення 3D до геометрії.
  • ST_Rotate — Обертає геометрію навколо точки початку координат.
  • ST_RotateX — Обертає геометрію навколо осі X.
  • ST_RotateY — Обертає геометрію навколо осі Y.
  • ST_RotateZ — Обертає геометрію навколо осі Z.
  • ST_Scale — Масштабує геометрію за заданими коефіцієнтами.
  • ST_Translate — Перетворює геометрію за заданими зміщеннями.
  • ST_TransScale — Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.

Name

ST_Affine — Застосувати афінне перетворення 3D до геометрії.

Synopsis

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: Виклик

ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff) 

представляє матрицю перетворення

/ a  b  c  xoff \
| d  e  f  yoff |
| g  h  i  zoff |
\ 0  0  0     1 /

і вершини перетворюються наступним чином:

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 афінне перетворення до геометрії. Виклик

ST_Affine(geom, a, b, d, e, xoff, yoff)

представляє матрицю перетворення.

/  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  /

і вершини трансформуються наступним чином:

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

[Note]

До версії 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();

SELECT ST_AsEWKT(ST_Affine(geom,  cos(pi()), -sin(pi()), 0,  sin(pi()), cos(pi()), 0,  0, 0, 1,  0, 0, 0)) As using_affine,
         ST_AsEWKT(ST_Rotate(geom, pi())) As using_rotate
        FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;
using_affine         |        using_rotate
-----------------------------+-----------------------------
 LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)
(1 row)

Rotate a 3D line 180 degrees in both the x and z axis.

SELECT ST_AsEWKT(ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0))
        FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;
LINESTRING(-1 -2 -3,-1 -4 -3)

Name

ST_Rotate — Обертає геометрію навколо точки початку координат.

Synopsis

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.

SELECT ST_AsText(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)'::geometry, pi()), 6);
LINESTRING(-50 -160,-50 -50,-100 -50)

This example rotates a geometry 30 degrees counter-clockwise around x=50, y=160.

SELECT ST_AsText(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)'::geometry, pi()/6, 50, 160), 6);
LINESTRING(50 160,105 64.737206,148.30127 89.737206)

This example rotates a geometry 60 degrees clockwise around its centroid.

SELECT ST_AsText(ST_Rotate(geom, -pi()/3, ST_Centroid(geom)), 4)
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)

Name

ST_RotateX — Обертає геометрію навколо осі X.

Synopsis

geometry ST_RotateX(geometry geomA, float rotRadians);

Опис

Обертає геометрію geomA - rotRadians навколо осі X.

[Note]

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.

SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
LINESTRING(1 -3 2,1 -1 1)

Див. також

ST_Affine, ST_RotateY, ST_RotateZ


Name

ST_RotateY — Обертає геометрію навколо осі Y.

Synopsis

geometry ST_RotateY(geometry geomA, float rotRadians);

Опис

Обертає геометрію geomA - rotRadians навколо осі y.

[Note]

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.

SELECT ST_AsEWKT(ST_RotateY(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
LINESTRING(3 2 -1,1 1 -1)

Див. також

ST_Affine, ST_RotateX, ST_RotateZ


Name

ST_RotateZ — Обертає геометрію навколо осі Z.

Synopsis

geometry ST_RotateZ(geometry geomA, float rotRadians);

Опис

Обертає геометрію geomA - rotRadians навколо осі Z.

[Note]

Це синонім ST_Rotate

[Note]

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

[Note]

До версії 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.

SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
LINESTRING(-2 1 3,-1 1 1)

This example rotates a curved circle around the Z axis.

SELECT ST_AsEWKT(ST_RotateZ(geom, pi()/2))
FROM (SELECT ST_LineToCurve(ST_Buffer(ST_GeomFromText('POINT(234 567)'), 3)) As geom) As foo;
CURVEPOLYGON(CIRCULARSTRING(-567 237.00000000000003,-567 231.00000000000003,-567 237.00000000000003))

Див. також

ST_Affine, ST_RotateX, ST_RotateY


Name

ST_Scale — Масштабує геометрію за заданими коефіцієнтами.

Synopsis

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 еквівалентні відсутності масштабування відповідного виміру.

Варіант з трьома геометріями дозволяє передавати «хибну точку відліку» для масштабування. Це дозволяє здійснювати «масштабування на місці», наприклад, використовуючи центроїд геометрії як хибну точку відліку. Без хибної точки відліку масштабування відбувається відносно фактичної точки відліку, тому всі координати просто множаться на коефіцієнт масштабування.

[Note]

До версії 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.

SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('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)

This example scales X and Y values.

SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75));
LINESTRING(0.5 1.5 3,0.5 0.75 1)

This example scales X, Y, Z, and M values.

SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('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)

This example scales X and Y values using a false origin.

SELECT ST_AsText(ST_Scale('LINESTRING(1 1, 2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry));
LINESTRING(1 1,3 3)

Див. також

ST_Affine, ST_TransScale


Name

ST_Translate — Перетворює геометрію за заданими зміщеннями.

Synopsis

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.

[Note]

До версії 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 градус довготи

SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)',4326),1,0)) AS wgs_transgeomtxt;
POINT(-70.01 42.37)

Перемістіть лінію на 1 градус довготи та 1/2 градуса широти

SELECT ST_AsText(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)

Перемістити 3D-точку

SELECT ST_AsEWKT(ST_Translate(CAST('POINT(0 0 0)' AS geometry), 5, 12,3));
POINT(5 12 3)

Move points with a measure coordinate

SELECT ST_AsEWKT(ST_Translate(ST_GeomFromEWKT('POINTM(0 0 11)'), 5, 12));
POINTM(5 12 11)
SELECT ST_AsEWKT(ST_Translate(ST_GeomFromEWKT('POINT(0 0 7 11)'), 5, 12, 3));
POINT(5 12 10 11)

Переміщення кривої та точки

SELECT ST_AsText(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))

Див. також

ST_Affine, ST_AsText, ST_GeomFromText


Name

ST_TransScale — Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.

Synopsis

geometry ST_TransScale(geometry geomA, float deltaX, float deltaY, float XFactor, float YFactor);

Опис

Перетворює геометрію за допомогою аргументів deltaX і deltaY, а потім масштабує її за допомогою аргументів XFactor і YFactor, працюючи тільки в 2D.

[Note]

ST_TransScale(geomA, deltaX, deltaY, XFactor, YFactor) є скороченим варіантом ST_Affine(geomA, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, deltaX*XFactor, deltaY*YFactor, 0).

[Note]

До версії 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.

Приклади

SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 1, 1, 2));
LINESTRING(1.5 6 3,1.5 4 1)

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.

SELECT ST_AsText(ST_TransScale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)),1,2,3,4));
CURVEPOLYGON(CIRCULARSTRING(714 2276,696 2276,714 2276))

Див. також

ST_Affine, ST_Translate

7.17. Функції кластеризації

Abstract

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

  • 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 — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.

Name

ST_ClusterDBSCAN — Функція вікна, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму DBSCAN.

Synopsis

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.

[Note]

Геометріям, які не відповідають критеріям для приєднання до будь-якого кластера, присвоюється номер кластера NULL.

Доступність: 2.3.0

This method supports Circular Strings and Curves.

Приклади

Групування полігонів на відстані 50 метрів один від одного, при цьому в кожній групі має бути не менше 2 полігонів.

Кластери в межах 50 метрів з щонайменше 2 елементами в кожному кластері. Одиночні елементи мають NULL для cid

SELECT name, ST_ClusterDBSCAN(geom, eps =
> 50, minpoints =
> 2) over () AS cid
FROM boston_polys
WHERE name 
> '' AND building 
> ''
        AND ST_DWithin(
        geom,
        ST_Transform(
            ST_GeomFromText('POINT(-71.04054 42.35141)', 4326),
            26986),
        500
    );

                name                 | bucket
-------------------------------------+--------
 Manulife Tower                      |      0
 Park Lane Seaport I                 |      0
 Park Lane Seaport II                |      0
 Renaissance Boston Waterfront Hotel |      0
 Seaport Boston Hotel                |      0
 Seaport Hotel & World Trade Center  |      0
 Waterside Place                     |      0
 World Trade Center East             |      0
 100 Northern Avenue                 |      1
 100 Pier 4                          |      1
 The Institute of Contemporary Art   |      1
 101 Seaport                         |      2
 District Hall                       |      2
 One Marina Park Drive               |      2
 Twenty Two Liberty                  |      2
 Vertex                              |      2
 Vertex                              |      2
 Watermark Seaport                   |      2
 Blue Hills Bank Pavilion            |   NULL
 World Trade Center West             |   NULL
(20 rows)

Приклад об'єднання ділянок з однаковим номером кластера в геометричні колекції.

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;
    

Name

ST_ClusterIntersecting — Агрегуюча функція, яка групує вхідні геометрії у зв'язані набори.

Synopsis

geometry[] ST_ClusterIntersecting(geometry set g);

Опис

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

Доступність: 2.2.0

Приклади

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 ST_AsText(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))

Name

ST_ClusterIntersectingWin — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, групуючи вхідні геометрії у пов'язані набори.

Synopsis

integer ST_ClusterIntersectingWin(geometry winset geom);

Опис

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

Доступність: 3.4.0

Приклади

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,
  ST_AsText(geom),
  ST_ClusterIntersectingWin(geom) 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

Name

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.

Synopsis

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.

Connected and overlapping linestrings

CREATE TABLE clusterrelate (
  id serial,
  geom geometry);

INSERT INTO clusterrelate (geom)
  VALUES
  ('LINESTRING(0 0,1 1)'),
  ('LINESTRING(2 2,1 1)'),
  ('LINESTRING(0 1,1 0)'),
  ('LINESTRING(0 1,0 4)'),
  ('LINESTRING(2 2,2 4)'),
  ('LINESTRING(1.5 2.5,2.5 3.5)');

SELECT id,
  ST_AsText(geom),
  ST_ClusterRelateWin(geom, '****0****') OVER () AS cluster
FROM clusterrelate;
id |          st_astext          | cluster
----+-----------------------------+---------
  1 | LINESTRING(0 0,1 1)         |       0
  2 | LINESTRING(2 2,1 1)         |       0
  3 | LINESTRING(0 1,1 0)         |       1
  4 | LINESTRING(0 1,0 4)         |       1
  5 | LINESTRING(2 2,2 4)         |       0
  6 | LINESTRING(1.5 2.5,2.5 3.5) |       2

Name

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.

Synopsis

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

Приклади

SELECT id, ST_AsText(geom), ST_MinimumSpanningTree(geom) OVER () AS msp
  FROM (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)
) AS t(id, geom);
id |      st_astext      | msp
----+---------------------+-----
  1 | LINESTRING(0 0,1 0) |   1
  2 | LINESTRING(0 0,0 1) |   1
  3 | LINESTRING(1 1,0 1) |   1
  4 | LINESTRING(1 1,1 0) |   0
  5 | LINESTRING(0 0,1 1) |   0
  6 | LINESTRING(1 0,0 1) |   0

Name

ST_ClusterKMeans — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії за допомогою алгоритму K-means.

Synopsis

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

Приклади

Створити фіктивний набір посилок для прикладів:

CREATE TABLE parcels AS
SELECT lpad((row_number() over())::text,3,'0') As parcel_id, geom,
('{residential, commercial}'::text[])[1 + mod(row_number()OVER(),2)] As type
FROM
    ST_Subdivide(
        ST_Buffer(
            'SRID=3857;LINESTRING(40 100, 98 100, 100 150, 60 90)'::geometry,
            40, 'endcap=square'),
        12) As geom;

Пакунки, позначені кольором за номером кластера (cid)

SELECT ST_ClusterKMeans(geom, 3) OVER() AS cid, parcel_id, geom
    FROM parcels;

cid | parcel_id |   geom
-----+-----------+---------------
   0 | 001       | 0103000000...
   0 | 002       | 0103000000...
   1 | 003       | 0103000000...
   0 | 004       | 0103000000...
   1 | 005       | 0103000000...
   2 | 006       | 0103000000...
   2 | 007       | 0103000000...

Розподіл кластерів ділянок за типом:

SELECT ST_ClusterKMeans(geom, 3) over (PARTITION BY type) AS cid, parcel_id, type
    FROM parcels;
cid | parcel_id |    type
-----+-----------+-------------
   1 | 005       | commercial
   1 | 003       | commercial
   2 | 007       | commercial
   0 | 001       | commercial
   1 | 004       | residential
   0 | 002       | residential
   2 | 006       | residential

Приклад: Кластеризація попередньо агрегованого набору даних про населення планетарного масштабу за допомогою 3D-кластеризації та зважування. Визначте щонайменше 20 регіонів на основі даних про населення Kontur, які не простягаються більше ніж на 3000 км від їхнього центру:

create table kontur_population_3000km_clusters as
select
    geom,
    ST_ClusterKMeans(
        ST_Force4D(
            ST_Transform(ST_Force3D(geom), 4978), -- cluster in 3D XYZ CRS
            mvalue => population -- set clustering to be weighed by population
        ),
        20,                      -- aim to generate at least 20 clusters
        max_radius => 3000000    -- but generate more to make each under 3000 km radius
    ) over () as cid
from
    kontur_population;
    

Населення світу, скупчене вище зазначених показників, утворює 46 кластерів. Кластери зосереджені в густонаселених регіонах (Нью-Йорк, Москва). Гренландія є одним кластером. Існують острівні кластери, що простягаються через антимеридіан. Краї кластерів повторюють кривизну Землі.


Name

ST_ClusterWithin — Агрегатна функція, яка групує геометрії за відстанню розділення.

Synopsis

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.

Приклади

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 ST_AsText(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))

Name

ST_ClusterWithinWin — Віконна функція, яка повертає ідентифікатор кластера для кожної вхідної геометрії, кластеризуючи за відстанню розділення.

Synopsis

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.

Приклади

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,
  ST_AsText(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

7.18. Функції обмежувальної рамки

Abstract

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

Див. також Section 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.

Name

Box2D — Повертає BOX2D, що представляє 2D розмір геометрії.

Synopsis

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).

Приклади

SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)'));
BOX(1 2,5 6)
SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
BOX(220186.99512189245 150406,220288.24878054656 150506.12682932706)

Див. також

Box3D, ST_GeomFromText


Name

Box3D — Повертає BOX3D, що представляє 3D-розмір геометрії.

Synopsis

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.

Приклади

SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)'));
BOX3D(1 2 3,5 6 5)
SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)'));
BOX3D(220186.99512189245 150406 1,220288.24878054656 150506.12682932706 1)

Див. також

Box2D, ST_GeomFromEWKT


Name

ST_EstimatedExtent — Повертає приблизний діапазон просторової таблиці.

Synopsis

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(), а результат є точним.

[Note]

За відсутності статистики (порожня таблиця або не викликано ANALYZE) ця функція повертає NULL. До версії 1.5.4 замість цього виникало виключення.

[Note]

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

Доступність: 1.0.0

Змінено: 2.1.0. До версії 2.0.x це називалося ST_Estimated_Extent.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_EstimatedExtent('ny', 'edges', 'geom');
BOX(-8877653 4912316,-8010225.5 5589284)

SELECT ST_EstimatedExtent('feature_poly', 'geom');
BOX(-124.659652709961 24.6830825805664,-67.7798080444336 49.0012092590332)
        

Див. також

ST_Extent, ST_3DExtent


Name

ST_Expand — Повертає обмежувальну рамку, розширену з іншої обмежувальної рамки або геометрії.

Synopsis

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 розширює обмежувальну рамку вздовж кожної осі.

[Note]

До версії 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).

Приклади

[Note]

У наведених нижче прикладах використовується карта США National Atlas Equal Area (SRID=2163), яка є метровою проекцією

--10 meter expanded box around bbox of a linestring
SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163),10) As box2d);
BOX(2312882 110666,2312990 110724)

This example expands a 3D box by 10 meters.

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.

SELECT ST_AsEWKT(ST_Expand(ST_GeomFromEWKT('SRID=2163;POINT(2312980 110676)'),10));
SRID=2163;POLYGON((2312970 110666,2312970 110686,2312990 110686,2312990 110666,2312970 110666))

Див. також

ST_Buffer, ST_DWithin, ST_SRID


Name

ST_Extent — Агрегатна функція, яка повертає обмежувальну рамку геометрій.

Synopsis

box2d ST_Extent(geometry set geomfield);

Опис

Агрегатна функція, яка повертає обмежувальну рамку box2d, що обмежує набір геометрій.

Координати обмежувальної рамки знаходяться в просторовій системі координат вхідних геометрій.

ST_Extent за своєю концепцією схожий на SDO_AGGR_MBR Oracle Spatial/Locator.

[Note]

ST_Extent повертає прямокутники тільки з координатами X і Y, навіть для 3D-геометрій. Щоб повернути координати XYZ, використовуйте ST_3DExtent.

[Note]

Повернене значення 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).

Приклади

[Note]

У наведених нижче прикладах використовується система координат штату Массачусетс (SRID=2249)

SELECT ST_Extent(geom) AS bextent FROM sometable;
BOX(739651.875 2908247.25,794875.8125 2970042.75)
--Return extent of each category of geometries
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.

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))
        

Name

ST_3DExtent — Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.

Synopsis

box3d ST_3DExtent(geometry set geomfield);

Опис

Агрегатна функція, яка повертає обмежувальну рамку box3d(включає координату Z), що обмежує набір геометрій.

Координати обмежувальної рамки знаходяться в просторовій системі координат вхідних геометрій.

[Note]

Повернене значення 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).

Приклади

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.

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


Name

ST_MakeBox2D — Створює BOX2D, визначений двома 2D точковими геометріями.

Synopsis

box2d ST_MakeBox2D(geometry pointLowLeft, geometry pointUpRight);

Опис

Створює box2d, визначений двома геометріями Point. Це корисно для виконання запитів діапазону.

Приклади


--Return all features that fall reside 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)
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


Name

ST_3DMakeBox — Створює BOX3D, визначений двома геометріями 3D-точок.

Synopsis

box3d ST_3DMakeBox(geometry point3DLowLeftBottom, geometry point3DUpRightTop);

Опис

Створює box3d, визначений двома геометріями 3D Point.

Ця функція підтримує 3D і не знижує z-індекс.

Змінено: 2.0.0 У попередніх версіях це називалося ST_MakeBox3D

Приклади

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


Name

ST_XMax — Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.

Synopsis

float ST_XMax(box3d aGeomorBox2DorBox3D);

Опис

Повертає X максимум 2D або 3D обмежувальної рамки або геометрії.

[Note]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_XMax('BOX3D(1 2 3, 4 5 6)');
4
SELECT ST_XMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
5
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.

SELECT ST_XMax('LINESTRING(1 3, 5 6)');
ERROR: BOX3D parser - doesn't start with BOX3D(
SELECT ST_XMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
220288.248780547

Name

ST_XMin — Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.

Synopsis

float ST_XMin(box3d aGeomorBox2DorBox3D);

Опис

Повертає мінімальне значення X для 2D або 3D обмежувальної рамки або геометрії.

[Note]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_XMin('BOX3D(1 2 3, 4 5 6)');
1
SELECT ST_XMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
1
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.

SELECT ST_XMin('LINESTRING(1 3, 5 6)');
ERROR: BOX3D parser - doesn't start with BOX3D(
SELECT ST_XMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
220186.995121892

Name

ST_YMax — Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.

Synopsis

float ST_YMax(box3d aGeomorBox2DorBox3D);

Опис

Повертає максимальне значення Y 2D або 3D обмежувальної рамки або геометрії.

[Note]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_YMax('BOX3D(1 2 3, 4 5 6)');
5
SELECT ST_YMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
6
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.

SELECT ST_YMax('LINESTRING(1 3, 5 6)');
ERROR: BOX3D parser - doesn't start with BOX3D(
SELECT ST_YMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
150506.126829327

Name

ST_YMin — Повертає мінімальне значення Y для 2D або 3D обмежувальної рамки або геометрії.

Synopsis

float ST_YMin(box3d aGeomorBox2DorBox3D);

Опис

Повертає мінімальне значення Y 2D або 3D обмежувальної рамки або геометрії.

[Note]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_YMin('BOX3D(1 2 3, 4 5 6)');
2
SELECT ST_YMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
3
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.

SELECT ST_YMin('LINESTRING(1 3, 5 6)');
ERROR: BOX3D parser - doesn't start with BOX3D(
SELECT ST_YMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
150406

Name

ST_ZMax — Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії.

Synopsis

float ST_ZMax(box3d aGeomorBox2DorBox3D);

Опис

Повертає максимальне значення Z для 2D або 3D обмежувальної рамки або геометрії..

[Note]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_ZMax('BOX3D(1 2 3, 4 5 6)');
6
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));
7
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.

SELECT ST_ZMax('LINESTRING(1 3 4, 5 6 7)');
ERROR: BOX3D parser - doesn't start with BOX3D(
SELECT ST_ZMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
3

Name

ST_ZMin — Повертає мінімальне значення Z для 2D або 3D обмежувальної рамки або геометрії.

Synopsis

float ST_ZMin(box3d aGeomorBox2DorBox3D);

Опис

Повертає мінімальне значення Z 2D- або 3D-обмежувальної рамки або геометрії.

[Note]

Хоча ця функція визначена тільки для box3d, вона також працює для значень box2d і geometry завдяки автоматичному перетворенню. Однак вона не приймає текстове представлення geometry або box2d, оскільки вони не перетворюються автоматично.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves.

Приклади

SELECT ST_ZMin('BOX3D(1 2 3, 4 5 6)');
3
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));
4
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.

SELECT ST_ZMin('LINESTRING(1 3 4, 5 6 7)');
ERROR: BOX3D parser - doesn't start with BOX3D(
SELECT ST_ZMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
1

Name

ST_XSize — Returns the X size of a 2D or 3D bounding box or a geometry.

Synopsis

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).

[Note]

Хоча ця функція визначена тільки для 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

Приклади

SELECT ST_XSize('BOX3D(1 2 3, 4 5 6)');
3
SELECT ST_XSize(ST_GeomFromText('LINESTRING(1 3, 5 6)'));
4

Див. також

ST_XMin, ST_XMax, ST_YSize, ST_ZSize, ST_MSize


Name

ST_YSize — Returns the Y size of a 2D or 3D bounding box or a geometry.

Synopsis

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).

[Note]

Хоча ця функція визначена тільки для 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

Приклади

SELECT ST_YSize('BOX3D(1 2 3, 4 5 6)');
3
SELECT ST_YSize(ST_GeomFromText('LINESTRING(1 3, 5 6)'));
3

Див. також

ST_YMin, ST_YMax, ST_XSize, ST_ZSize, ST_MSize


Name

ST_ZSize — Returns the Z size of a 2D or 3D bounding box or a geometry.

Synopsis

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).

[Note]

Хоча ця функція визначена тільки для 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

Приклади

SELECT ST_ZSize('BOX3D(1 2 3, 4 5 6)');
3
SELECT ST_ZSize(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));
3

Див. також

ST_ZMin, ST_ZMax, ST_XSize, ST_YSize, ST_MSize


Name

ST_MMin — Повертає M-мінімум геометрії.

Synopsis

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.

Приклади

SELECT ST_MMin('POINT M (1 2 3)');
3

Name

ST_MMax — Returns the M maxima of a geometry.

Synopsis

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.

Приклади

SELECT ST_MMax('POINT M (1 2 3)');
3

Name

ST_MSize — Returns the M size of a geometry.

Synopsis

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

Приклади

SELECT ST_MSize('LINESTRING M (1 2 3, 4 6 8)');
5

Див. також

ST_MMin, ST_MMax, ST_XSize, ST_YSize, ST_ZSize

7.19. Лінійне посилання

Abstract

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

  • 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 — Інтерполює виміри вздовж лінійної геометрії.

Name

ST_LineInterpolatePoint — Повертає точку, інтерпольовану вздовж лінії в дробовому місці.

Synopsis

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для обчислення найближчого до точки місця розташування лінії.

[Note]

ST_3DLineInterpolatePoint обчислює точки в 3D і інтерполює тільки значення M.

[Note]

Починаючи з версії 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.

Приклади

LineString з інтерпольованою точкою в положенні 20% (0,20)

This example returns the point 20 percent along a line.

SELECT ST_AsEWKT(ST_LineInterpolatePoint(
    'LINESTRING(25 50, 100 125, 150 190)',
    0.2));
POINT(51.5974135047432 76.5974135047432)

Середина 3D лінії:

SELECT ST_AsEWKT(ST_LineInterpolatePoint(
    'LINESTRING(1 2 3, 4 5 6, 6 7 8)',
    0.5));
POINT(3.5 4.5 5.5)

Найближча точка на прямій до точки:

SELECT ST_AsText(ST_LineInterpolatePoint(
    line.geom,
    ST_LineLocatePoint(line.geom, 'POINT(4 3)')))
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As geom) AS line;
POINT(3 4)

Name

ST_3DLineInterpolatePoint — Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці.

Synopsis

geometry ST_3DLineInterpolatePoint(geometry a_linestring, float8 a_fraction);

Опис

Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці. Перший аргумент повинен бути LINESTRING. Другий аргумент — це число з плаваючою комою від 0 до 1, що позначає місце розташування точки як дробу довжини лінії. Якщо значення M присутнє, воно інтерполюється.

[Note]

ST_LineInterpolatePoint обчислює точки в 2D, а потім інтерполює значення для Z і M, тоді як ця функція обчислює точки в 3D і інтерполює тільки значення M.

Доступність: 3.0.0

This function supports 3d and will not drop the z-index.

Приклади

Точка повернення 20% вздовж 3D лінії

SELECT ST_AsText(ST_3DLineInterpolatePoint(
    'LINESTRING(25 50 70, 100 125 90, 150 190 200)',
    0.20));
POINT Z (59.06758929108215 84.06758929108216 79.0846904776219)

Name

ST_LineInterpolatePoints — Повертає точки, інтерпольовані вздовж лінії з дробовим інтервалом.

Synopsis

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.

Приклади

Лінія String з точками, інтерпольованими кожні 20%

This example returns points every 20 percent along a two-dimensional line.

SELECT ST_AsText(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))

Name

ST_LineLocatePoint — Повертає дробове значення відстані найближчої точки на лінії до заданої точки.

Synopsis

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.

SELECT ST_AsText(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 ST_GeomFromText('LINESTRING(1 2, 3 4)') 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

This example finds the closest point on a line to a point or other geometry.

SELECT ST_AsText(ST_LineInterpolatePoint(
    foo.the_line,
    ST_LineLocatePoint(foo.the_line, ST_GeomFromText('POINT(4 3)'))))
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo;
POINT(3 4)

Name

ST_LineSubstring — Повертає частину лінії між двома дробовими позиціями.

Synopsis

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.

[Note]

Це працює тільки з LINESTRING. Щоб використовувати на суміжних MULTILINESTRING, спочатку об'єднайте їх за допомогою ST_LineMerge.

[Note]

Починаючи з версії 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.

Приклади

Лінія LineString, на яку накладено 1/3 середнього діапазону (0,333, 0,666)

SELECT ST_AsText(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)

Якщо початкова та кінцева точки однакові, результатом є ТОЧКА.

SELECT ST_AsText(ST_LineSubstring(
    'LINESTRING(25 50, 100 125, 150 190)',
    0.333,
    0.333));
POINT(69.28469348539744 94.28469348539744)

Запит для розрізання LineString на секції довжиною 100 або менше. Він використовує generate_series() з CROSS JOIN LATERAL для створення еквівалента циклу FOR.

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_AsText(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)
    -- skip last i if line length is exact multiple of sublen
    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)

Заходи з реалізації географії вздовж сфероїда, геометрія вздовж лінії

SELECT ST_AsText(ST_LineSubstring(
    'LINESTRING(-118.2436 34.0522, -71.0570 42.3611)'::geography,
    0.333,
    0.666),
    6) AS geog_sub,
    ST_AsText(ST_LineSubstring(
        'LINESTRING(-118.2436 34.0522, -71.0570 42.3611)'::geometry,
        0.333,
        0.666),
        6) AS geom_sub;
geog_sub                         |                         geom_sub
---------------------------------------------------------+----------------------------------------------------------
 LINESTRING(-103.911641 38.931128,-87.941787 41.831072) | LINESTRING(-102.530462 36.819064,-86.817324 39.585927)

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.

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_AsText(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)

Name

ST_LocateAlong — Повертає точку (точки) на геометрії, яка відповідає значенню міри.

Synopsis

geometry ST_LocateAlong(geometry geom_with_measure, float8 measure, float8 offset = 0);

Опис

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

Якщо вказано offset, результат буде зміщений вліво або вправо від лінії введення на вказану відстань. Позитивне зміщення буде вліво, а негативне — вправо.

[Note]

Використовуйте цю функцію тільки для лінійних геометрій з компонентом 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

Приклади

SELECT ST_AsText(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))

Name

ST_LocateBetween — Повертає частини геометрії, які відповідають діапазону вимірювання.

Synopsis

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

Приклади

SELECT ST_AsText(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))

LineString із відрізком між мірками 2 та 8, зміщений ліворуч

SELECT ST_AsText(ST_LocateBetween(
    ST_AddMeasure(
        'LINESTRING (20 180, 50 20, 100 120, 180 20)',
        0,
        10),
    2,
    8,
    20));
MULTILINESTRING((54.49835019899045 104.53426957938231,58.70056060327303 82.12248075654186,82.11145618000168 128.94427190999915,84.24893681714357 132.32493442618113,87.01636951231555 135.21267035596549,90.30307285299679 137.49198684843182,93.97759758337769 139.07172433557758,97.89298381958797 139.8887023914453,101.89263860095893 139.9102465862721,105.81659870902816 139.13549527600819,109.50792827749828 137.5954340631298,112.81899532549731 135.351656550512,115.6173761888606 132.49390095108848,145.31017306064817 95.37790486135405))

Name

ST_LocateBetweenElevations — Повертає частини геометрії, що лежать у діапазоні висоти (Z).

Synopsis

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.

Приклади

SELECT ST_AsText(ST_LocateBetweenElevations(
    'LINESTRING(1 2 3, 4 5 6)'::geometry,
    2,
    4));
MULTILINESTRING Z ((1 2 3,2 3 4))
SELECT ST_AsText(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))

Див. також

ST_Dump, ST_LocateBetween


Name

ST_InterpolatePoint — Повертає інтерпольоване значення геометрії, найближчої до точки.

Synopsis

float8 ST_InterpolatePoint(geometry linear_geom_with_measure, geometry point);

Опис

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

[Note]

Використовуйте цю функцію тільки для лінійних геометрій з компонентом M

Доступність: 2.0.0

This function supports 3d and will not drop the z-index.

Приклади

SELECT ST_InterpolatePoint(
    'LINESTRING M (0 0 0, 10 0 20)',
    'POINT(5 5)');
10

Name

ST_3DInterpolatePoint — Returns the interpolated measure of a geometry closest to a point in 3D.

Synopsis

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.

[Note]

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.

SELECT ST_3DInterpolatePoint(
    'LINESTRING ZM (0 0 0 0, 10 0 10 20)',
    'POINT Z (5 0 5)');
10

This example uses a vertical line with zero XY extent, where 3D projection works but 2D projection does not.

SELECT ST_3DInterpolatePoint(
    'LINESTRING ZM (0 0 0 0, 0 0 10 100)',
    'POINT Z (5 5 5)');
50

Name

ST_AddMeasure — Інтерполює виміри вздовж лінійної геометрії.

Synopsis

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.

Приклади

SELECT ST_AsText(ST_AddMeasure(
    ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),
    1,
    4)) As ewelev;
LINESTRING M (1 0 1,2 0 2,4 0 4)
SELECT ST_AsText(ST_AddMeasure(
    ST_GeomFromEWKT('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)
SELECT ST_AsText(ST_AddMeasure(
    ST_GeomFromEWKT('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)
SELECT ST_AsText(ST_AddMeasure(
    ST_GeomFromEWKT('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))

7.20. Функції траєкторії

Abstract

Ці функції підтримують роботу з траєкторіями. Траєкторія — це лінійна геометрія зі зростаючими значеннями (значення M) на кожній координаті. Просторово-часові дані можна моделювати, використовуючи відносні часи (наприклад, епоху) як значення вимірювань.

  • ST_IsValidTrajectory — Перевіряє, чи є геометрія дійсною траєкторією.
  • ST_ClosestPointOfApproach — Повертає міру в найближчій точці зближення двох траєкторій.
  • ST_DistanceCPA — Повертає відстань між найближчою точкою зближення двох траєкторій.
  • ST_CPAWithin — Перевіряє, чи найближча точка зближення двох траєкторій знаходиться в межах заданої відстані.

Name

ST_IsValidTrajectory — Перевіряє, чи є геометрія дійсною траєкторією.

Synopsis

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.

SELECT ST_IsValidTrajectory(ST_MakeLine(ST_MakePointM(0, 0, 1),
    ST_MakePointM(0, 1, 2)));
t

This example constructs an invalid trajectory.

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


Name

ST_ClosestPointOfApproach — Повертає міру в найближчій точці зближення двох траєкторій.

Synopsis

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
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,
       ST_AsText(pa, 2) AS pa, ST_AsText(pb, 2) AS pb
FROM points, cpa;
t              |      distance      |                  pa                  |                   pb
----------------------------+--------------------+--------------------------------------+----------------------------------------
 2015-05-26 10:45:31.034483 | 1.9652147377620688 | POINT ZM (7.59 0 3.79 1432637131.03) | POINT ZM (9.1 1.24 3.93 1432637131.03)

Name

ST_DistanceCPA — Повертає відстань між найближчою точкою зближення двох траєкторій.

Synopsis

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
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

Name

ST_CPAWithin — Перевіряє, чи найближча точка зближення двох траєкторій знаходиться в межах заданої відстані.

Synopsis

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.

Приклади

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

7.21. Version Functions

Abstract

These functions report and upgrade PostGIS versions.

Name

PostGIS_Extensions_Upgrade — Packages and upgrades PostGIS extensions (e.g. postgis_raster, postgis_topology, postgis_sfcgal) to given or latest version.

Synopsis

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

[Note]

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.

Приклади

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

Name

PostGIS_Full_Version — Reports full PostGIS version and build configuration infos.

Synopsis

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

Приклади

SELECT PostGIS_Full_Version();
POSTGIS="3.4.0dev 3.3.0rc2-993-g61bdf43a7" [EXTENSION] PGSQL="160" GEOS="3.12.0dev-CAPI-1.18.0" SFCGAL="1.3.8" PROJ="7.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db" GDAL="GDAL 3.2.2, released 2021/03/05" LIBXML="2.9.10" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" TOPOLOGY RASTER

Name

PostGIS_GEOS_Version — Returns the version number of the GEOS library.

Synopsis

text PostGIS_GEOS_Version();

Опис

Returns the version number of the GEOS library, or NULL if GEOS support is not enabled.

Приклади

SELECT PostGIS_GEOS_Version();
3.12.0dev-CAPI-1.18.0

Name

PostGIS_GEOS_Compiled_Version — Returns the version number of the GEOS library against which PostGIS was built.

Synopsis

text PostGIS_GEOS_Compiled_Version();

Опис

Returns the version number of the GEOS library, or against which PostGIS was built.

Доступність: 3.4.0

Приклади

SELECT PostGIS_GEOS_Compiled_Version();
3.12.0

Name

PostGIS_Liblwgeom_Version — Returns the version number of the liblwgeom library. This should match the version of PostGIS.

Synopsis

text PostGIS_Liblwgeom_Version();

Опис

Returns the version number of the liblwgeom library/

Приклади

SELECT PostGIS_Liblwgeom_Version();
3.4.0dev 3.3.0rc2-993-g61bdf43a7

Name

PostGIS_LibXML_Version — Returns the version number of the libxml2 library.

Synopsis

text PostGIS_LibXML_Version();

Опис

Returns the version number of the LibXML2 library.

Доступність: 1.5

Приклади

SELECT PostGIS_LibXML_Version();
2.9.10

Name

PostGIS_LibJSON_Version — Returns the version number of the libjson-c library.

Synopsis

text PostGIS_LibJSON_Version();

Опис

Returns the version number of the LibJSON-C library.

Приклади

SELECT PostGIS_LibJSON_Version();
0.17

Name

PostGIS_Lib_Build_Date — Returns build date of the PostGIS library.

Synopsis

text PostGIS_Lib_Build_Date();

Опис

Returns build date of the PostGIS library.

Приклади

SELECT PostGIS_Lib_Build_Date();
2023-06-22 03:56:11

Name

PostGIS_Lib_Version — Returns the version number of the PostGIS library.

Synopsis

text PostGIS_Lib_Version();

Опис

Returns the version number of the PostGIS library.

Приклади

SELECT PostGIS_Lib_Version();
3.4.0dev

Name

PostGIS_PROJ_Version — Returns the version number of the PROJ4 library.

Synopsis

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

Приклади

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

Name

PostGIS_PROJ_Compiled_Version — Returns the version number of the PROJ library against which PostGIS was built.

Synopsis

text PostGIS_PROJ_Compiled_Version();

Опис

Returns the version number of the PROJ library, or against which PostGIS was built.

Доступність: 3.5.0

Приклади

SELECT PostGIS_PROJ_Compiled_Version();
9.1.1

Name

PostGIS_Wagyu_Version — Returns the version number of the internal Wagyu library.

Synopsis

text PostGIS_Wagyu_Version();

Опис

Returns the version number of the internal Wagyu library, or NULL if Wagyu support is not enabled.

Приклади

SELECT PostGIS_Wagyu_Version();
0.5.0 (Internal)

Name

PostGIS_Scripts_Build_Date — Returns build date of the PostGIS scripts.

Synopsis

text PostGIS_Scripts_Build_Date();

Опис

Returns build date of the PostGIS scripts.

Доступність: 1.0.0RC1

Приклади

SELECT PostGIS_Scripts_Build_Date();
2023-06-22 03:56:11

Name

PostGIS_Scripts_Installed — Returns version of the PostGIS scripts installed in this database.

Synopsis

text PostGIS_Scripts_Installed();

Опис

Returns version of the PostGIS scripts installed in this database.

[Note]

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

Приклади

SELECT PostGIS_Scripts_Installed();
3.4.0dev 3.3.0rc2-993-g61bdf43a7

Name

PostGIS_Scripts_Released — Returns the version number of the postgis.sql script released with the installed PostGIS lib.

Synopsis

text PostGIS_Scripts_Released();

Опис

Returns the version number of the postgis.sql script released with the installed PostGIS lib.

[Note]

Starting with version 1.1.0 this function returns the same value of PostGIS_Lib_Version. Kept for backward compatibility.

Availability: 0.9.0

Приклади

SELECT PostGIS_Scripts_Released();
3.4.0dev 3.3.0rc2-993-g61bdf43a7

Name

PostGIS_Version — Returns PostGIS version number and compile-time options.

Synopsis

text PostGIS_Version();

Опис

Returns PostGIS version number and compile-time options.

Приклади

SELECT PostGIS_Version();
3.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1

7.22. Великі уніфіковані змінні (GUC)

Abstract

У цьому розділі перелічено власні великі уніфіковані змінні 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.

Name

postgis.gdal_datapath — Параметр конфігурації для призначення значення параметра GDAL_DATA GDAL. Якщо не встановлено, використовується змінна GDAL_DATA, встановлена в середовищі.

Опис

Змінна PostgreSQL GUC для встановлення значення опції GDAL_DATA GDAL. Значення postgis.gdal_datapath повинно бути повним фізичним шляхом до файлів даних GDAL.

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

[Note]

Цей параметр можна встановити у файлі конфігурації PostgreSQL postgresql.conf. Його також можна встановити для окремого з'єднання або транзакції.

Доступність: 2.2.0

[Note]

Додаткова інформація про GDAL_DATA доступна в розділі "Параметри конфігурації" на сайті GDAL Опція конфігурації.

Приклади

Встановити та скинути postgis.gdal_datapath

SET postgis.gdal_datapath TO '/usr/local/share/gdal.hidden';
SET postgis.gdal_datapath TO default;
                

Налаштування Windows для певної бази даних

ALTER DATABASE gisdb
SET postgis.gdal_datapath = 'C:/Program Files/PostgreSQL/9.3/gdal-data';

Name

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. Можна вказати кілька драйверів, розділивши їх пробілом.

[Note]

Для 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() призведуть до появи повідомлень про помилки.

[Note]

У стандартній установці PostGIS postgis.gdal_enabled_drivers встановлено на DISABLE_ALL.

[Note]

Додаткова інформація про GDAL_SKIP доступна в розділі "Параметри конфігурації" на сайті GDAL Опція конфігурації.

Доступність: 2.2.0

Приклади

Set and reset postgis.gdal_enabled_drivers for the current session.

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SET postgis.gdal_enabled_drivers = default;
                

Set specific drivers for all new connections to a database.

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.

ALTER SYSTEM SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';

Reload the PostgreSQL configuration so the changed setting is applied.

SELECT pg_reload_conf();

Name

postgis.enable_outdb_rasters — Булева опція конфігурації для увімкнення доступу до растрових смуг out-db.

Опис

Булева опція конфігурації для увімкнення доступу до растрових смуг out-db. Цю опцію можна встановити у файлі конфігурації PostgreSQL: postgresql.conf. Її також можна встановити для з'єднання або транзакції.

Початкове значення postgis.enable_outdb_rasters також можна встановити, передавши змінну середовища POSTGIS_ENABLE_OUTDB_RASTERS з значенням, відмінним від нуля, процесу, що запускає PostgreSQL.

[Note]

Навіть якщо postgis.enable_outdb_rasters має значення True, доступні растрові формати визначаються GUC postgis.gdal_enabled_drivers.

[Note]

У стандартній установці PostGIS postgis.enable_outdb_rasters встановлено на False.

Доступність: 2.2.0

Приклади

Set and reset postgis.enable_outdb_rasters for the current session.

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.

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.

ALTER SYSTEM SET postgis.enable_outdb_rasters = true;

Reload the PostgreSQL configuration so the changed setting is applied.

SELECT pg_reload_conf();

Name

postgis.gdal_vsi_options — Конфігурація рядка для встановлення параметрів, що використовуються під час роботи з растровим файлом out-db.

Опис

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

Доступність: 3.2.0

Приклади

Встановити postgis.gdal_vsi_options для поточної сесії:

SET postgis.gdal_vsi_options = 'AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyy';

Встановіть postgis.gdal_vsi_options тільки для поточної транзакції за допомогою ключового слова LOCAL:

SET LOCAL postgis.gdal_vsi_options = 'AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyy';

Name

postgis.gdal_cpl_debug — Булева конфігурація для ввімкнення та вимкнення реєстрації повідомлень про налагодження GDAL.

Опис

За замовчуванням, журнали GDAL друкуються на stderr, а повідомлення нижчого рівня не друкуються взагалі. Встановлення цього GUC на true призведе до надсилання журналів GDAL до потоку журналів PostgreSQL, тож ви зможете бачити більше або менше з них, змінюючи client_min_message PostgreSQL GUC.

Доступність: 3.6.0

7.23. Функції усунення несправностей

Abstract

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

  • PostGIS_AddBBox — Додати обмежувальну рамку до геометрії.
  • PostGIS_DropBBox — Видалити кеш обмежувальної рамки з геометрії.
  • PostGIS_HasBBox — Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку.

Name

PostGIS_AddBBox — Додати обмежувальну рамку до геометрії.

Synopsis

geometry PostGIS_AddBBox(geometry geomA);

Опис

Додати обмежувальну рамку до геометрії. Це пришвидшить запити на основі обмежувальної рамки, але збільшить розмір геометрії.

[Note]

Обмежувальні рамки автоматично додаються до геометрій, тому, як правило, це не потрібно, якщо тільки створена обмежувальна рамка якимось чином не пошкодилася або у вас стара версія, в якій відсутні обмежувальні рамки. Тоді вам потрібно видалити стару і додати нову.

This method supports Circular Strings and Curves.

Приклади

UPDATE sometable
 SET geom =  PostGIS_AddBBox(geom)
 WHERE PostGIS_HasBBox(geom) = false;

Name

PostGIS_DropBBox — Видалити кеш обмежувальної рамки з геометрії.

Synopsis

geometry PostGIS_DropBBox(geometry geomA);

Опис

Видалити кеш обмежувальної рамки з геометрії. Це зменшує розмір геометрії, але уповільнює запити на основі обмежувальної рамки. Також використовується для видалення пошкодженої обмежувальної рамки. Ознакою пошкодження кешованої обмежувальної рамки є те, що ST_Intersects та інші запити на відношення пропускають геометрії, які повинні повертати значення true.

[Note]

Обмежувальні рамки автоматично додаються до геометрій і покращують швидкість запитів, тому, як правило, це не потрібно, якщо тільки створена обмежувальна рамка якимось чином не пошкодилася або у вас стара версія, в якій відсутні обмежувальні рамки. У такому випадку потрібно видалити старі та додати заново. Таке пошкодження спостерігалося в серіях 8.3-8.3.6, де кешовані bboxes не завжди перераховувалися при зміні геометрії, і оновлення до нової версії без перезавантаження дампа не виправляє вже пошкоджені рамки. Тому можна вручну виправити за допомогою наведеного нижче коду та додати bbox заново або виконати перезавантаження дампа.

This method supports Circular Strings and Curves.

Приклади

--This example drops bounding boxes where the cached box is not correct
                        --The force to ST_AsBinary before applying Box2D forces a recalculation of the box, and Box2D applied to the table geometry always
                        -- returns the cached bounding box.
                        UPDATE sometable
 SET geom =  PostGIS_DropBBox(geom)
 WHERE Not (Box2D(ST_AsBinary(geom)) = Box2D(geom));

        UPDATE sometable
 SET geom =  PostGIS_AddBBox(geom)
 WHERE Not PostGIS_HasBBOX(geom);


 

Name

PostGIS_HasBBox — Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку.

Synopsis

boolean PostGIS_HasBBox(geometry geomA);

Опис

Повертає TRUE, якщо bbox цієї геометрії кешована, і FALSE в іншому випадку. Використовуйте PostGIS_AddBBoxта PostGIS_DropBBoxдля керування кешуванням.

This method supports Circular Strings and Curves.

Приклади

SELECT geom
FROM sometable WHERE PostGIS_HasBBox(geom) = false;

Chapter 8. Довідник функцій SFCGAL

SFCGAL — це бібліотека-обгортка C++ навколо CGAL, яка надає розширені 2D- та 3D-просторові функції. Для надійності координати геометрії мають точне раціональне числове представлення.

Інструкції з інсталяції бібліотеки можна знайти на домашній сторінці SFCGAL http://www.sfcgal.org). Щоб увімкнути функції, скористайтеся командою create extension postgis_sfcgal.

8.1. Функції управління SFCGAL

Abstract

У цьому розділі перелічено функції для визначення версії SFCGAL та залежностей бібліотек, які ви використовуєте.

  • postgis_sfcgal_version — Повертає версію SFCGAL, що використовується
  • postgis_sfcgal_full_version — Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL та Boost

Name

postgis_sfcgal_version — Повертає версію SFCGAL, що використовується

Synopsis

текст postgis_sfcgal_version(void);

Опис

Повертає версію SFCGAL, що використовується

Доступність: 2.1.0

This method needs SFCGAL backend.

Див. також

postgis_sfcgal_full_version


Name

postgis_sfcgal_full_version — Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL та Boost

Synopsis

текст postgis_sfcgal_full_version(void);

Опис

Повертає повну версію SFCGAL, що використовується, включаючи версії CGAL і Boost

Доступність: 3.3.0

This method needs SFCGAL backend.

Див. також

postgis_sfcgal_version

8.2. SFCGAL Аксесори та сетери

Abstract

Ці функції забезпечують доступ до властивостей геометрій або їх налаштування. Геометрії, які в першу чергу підтримуються цими функціями, — це 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.
  • ST_ForceLHR — Примусова орієнтація LHR
  • ST_IsPlanar — Перевірте, чи є поверхня плоскою
  • ST_IsSolid — Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • ST_MakeSolid — Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • ST_Orientation — Визначте орієнтацію поверхні
  • ST_3DArea — Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • ST_Volume — Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.

Name

CG_ForceLHR — Примусова орієнтація LHR

Synopsis

geometry CG_ForceLHR(geometry geom);

Опис

Доступність: 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).


Name

CG_IsPlanar — Перевірте, чи є поверхня плоскою

Synopsis

boolean CG_IsPlanar(geometry geom);

Опис

Доступність: 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).


Name

CG_IsSolid — Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.

Synopsis

boolean CG_IsSolid(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).


Name

CG_MakeSolid — Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.

Synopsis

geometry CG_MakeSolid(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).


Name

CG_Orientation — Визначте орієнтацію поверхні

Synopsis

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.


Name

CG_Area — Обчислює площу геометрії

Synopsis

double precision CG_Area( geometry geom );

Опис

Обчислює площу геометричної фігури.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає значення подвійної точності, що представляє площу.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

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

Див. також

ST_3DArea, ST_Area


Name

CG_3DArea — Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.

Synopsis

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, є геометрією поверхні, а не об'ємним тілом. Тому він має площу поверхні. Після перетворення на об'ємне тіло площа поверхні зникає.

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


Name

CG_Volume — Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.

Synopsis

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)

Приклад

A closed polyhedral surface has volume. CG_MakeSolid makes the solid representation explicit.

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

Див. також

CG_3DArea, CG_MakeSolid, CG_IsSolid


Name

ST_ForceLHR — Примусова орієнтація LHR

Synopsis

geometry ST_ForceLHR(geometry geom);

Опис

[Warning]

ST_ForceLHR є застарілим з версії 3.5.0. Замість нього використовуйте CG_ForceLHR.

Доступність: 2.1.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).


Name

ST_IsPlanar — Перевірте, чи є поверхня плоскою

Synopsis

boolean ST_IsPlanar(geometry geom);

Опис

[Warning]

ST_IsPlanar є застарілим з версії 3.5.0. Замість нього використовуйте CG_IsPlanar.

Доступність: 2.2.0: Це було задокументовано в 2.1.0, але випадково пропущено у випуску 2.1.

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).


Name

ST_IsSolid — Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.

Synopsis

boolean ST_IsSolid(geometry geom1);

Опис

[Warning]

ST_IsSolid є застарілим з версії 3.5.0. Замість нього використовуйте CG_IsSolid.

Доступність: 2.2.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).


Name

ST_MakeSolid — Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.

Synopsis

geometry ST_MakeSolid(geometry geom1);

Опис

[Warning]

ST_MakeSolid є застарілим з версії 3.5.0. Замість нього використовуйте CG_MakeSolid.

Доступність: 2.2.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).


Name

ST_Orientation — Визначте орієнтацію поверхні

Synopsis

integer ST_Orientation(geometry geom);

Опис

[Warning]

ST_Orientation є застарілим з версії 3.5.0. Замість нього використовуйте CG_Orientation.

Функція застосовується тільки до полігонів. Вона повертає -1, якщо полігон орієнтований проти годинникової стрілки, і 1, якщо полігон орієнтований за годинниковою стрілкою.

Доступність: 2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.


Name

ST_3DArea — Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.

Synopsis

floatST_3DArea(geometry geom1);

Опис

[Warning]

ST_3DArea є застарілим з версії 3.5.0. Замість нього використовуйте CG_3DArea.

Доступність: 2.1.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, є геометрією поверхні, а не об'ємним тілом. Тому він має площу поверхні. Після перетворення на об'ємне тіло площа поверхні зникає.

SELECT ST_3DArea(geom) As cube_surface_area,
        ST_3DArea(ST_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    

Див. також

ST_Area, ST_MakeSolid, ST_IsSolid, ST_Area


Name

ST_Volume — Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.

Synopsis

float ST_Volume(geometry geom1);

Опис

[Warning]

ST_Volume є застарілим з версії 3.5.0. Замість нього використовуйте CG_Volume.

Доступність: 2.2.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 (такий самий, як ST_3DVolume)

Приклад

A closed polyhedral surface has volume. ST_MakeSolid makes the solid representation explicit.

SELECT ST_Volume(geom) As cube_surface_vol,
    ST_Volume(ST_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

Див. також

ST_3DArea, ST_MakeSolid, ST_IsSolid

8.3. Функції обробки та взаємозв'язків SFCGAL

  • CG_Intersection — Обчислює перетин двох геометрій
  • CG_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)
  • CG_3DIntersects — Перевіряє, чи перетинаються дві 3D-геометрії
  • CG_Difference — Обчислює геометричну різницю між двома геометріями
  • ST_3DDifference — Виконати 3D-різницю
  • CG_3DDifference — Виконати 3D-різницю
  • CG_Distance — Обчислює мінімальну відстань між двома геометріями
  • CG_3DDistance — Обчислює мінімальну 3D відстань між двома геометріями
  • ST_3DConvexHull — Обчислює 3D опуклу оболонку геометрії.
  • CG_3DConvexHull — Обчислює 3D опуклу оболонку геометрії.
  • ST_3DIntersection — Виконати 3D перетин
  • CG_3DIntersection — Виконати 3D перетин
  • CG_Union — Обчислює об'єднання двох геометрій
  • ST_3DUnion — Виконайте об'єднання 3D.
  • CG_3DUnion — Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • ST_AlphaShape — Обчислює альфа-форму, що охоплює геометрію
  • CG_AlphaShape — Обчислює альфа-форму, що охоплює геометрію
  • CG_ApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника
  • ST_ApproximateMedialAxis — Обчисліть приблизну медіальну вісь плоскої геометрії.
  • 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.
  • ST_ConstrainedDelaunayTriangles — Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • CG_ConstrainedDelaunayTriangles — Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • ST_Extrude — Видавити поверхню до відповідного об'єму
  • CG_Extrude — Видавити поверхню до відповідного об'єму
  • CG_ExtrudeStraightSkeleton — Пряма екструзія скелета
  • CG_GreeneApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника
  • ST_MinkowskiSum — Обчислює суму Мінковського
  • CG_MinkowskiSum — Обчислює суму Мінковського
  • ST_OptimalAlphaShape — Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.
  • CG_OptimalAlphaShape — Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.
  • CG_OptimalConvexPartition — Обчислює оптимальний опуклий поділ геометрії багатокутника
  • CG_StraightSkeleton — Обчислити прямий скелет з геомeтрії
  • ST_StraightSkeleton — Обчислити прямий скелет з геомeтрії
  • ST_Tesselate — Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • 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

Name

CG_Intersection — Обчислює перетин двох геометрій

Synopsis

geometry CG_Intersection( geometry geomA , geometry geomB );

Опис

Обчислює перетин двох геометрій.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає геометрію, що представляє перетин.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

SELECT ST_AsText(CG_Intersection('LINESTRING(0 0, 5 5)', 'LINESTRING(5 0, 0 5)'));
POINT(2.5 2.5)

Name

CG_Intersects — Перевіряє, чи перетинаються дві геометрії (чи мають вони хоча б одну спільну точку)

Synopsis

boolean CG_Intersects( geometry geomA , geometry geomB );

Опис

Повертає true, якщо дві геометрії перетинаються. Геометрії перетинаються, якщо вони мають спільну точку.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

SELECT CG_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
f
SELECT CG_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
t

Name

CG_3DIntersects — Перевіряє, чи перетинаються дві 3D-геометрії

Synopsis

boolean CG_3DIntersects( geometry geomA , geometry geomB );

Опис

Перевіряє, чи перетинаються дві 3D-геометрії. 3D-геометрії перетинаються, якщо вони мають спільну точку в тривимірному просторі.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: це "допустима" версія, яка повертає логічне значення, а не ціле число.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

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

Name

CG_Difference — Обчислює геометричну різницю між двома геометріями

Synopsis

geometry CG_Difference( geometry geomA , geometry geomB );

Опис

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

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає геометрію.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

SELECT ST_AsText(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))

Див. також

ST_3DDifference, ST_Difference


Name

ST_3DDifference — Виконати 3D-різницю

Synopsis

geometry ST_3DDifference(geometry geom1, geometry geom2);

Опис

[Warning]

ST_3DDifference є застарілим з версії 3.5.0. Замість нього використовуйте CG_3DDifference.

Повертає ту частину geom1, яка не входить до geom2.

Доступність: 2.2.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).


Name

CG_3DDifference — Виконати 3D-різницю

Synopsis

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).

Приклади

3D-зображення були створені за допомогою PostGIS ST_AsX3D і відтворені в HTML за допомогою бібліотеки відтворення X3Dom HTML Javascript.

SELECT CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'), 0, 0, 30) AS geom1,
                                CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'), 50, 'quad_segs=1'), 0, 0, 30) AS geom2;
                            

Накладені оригінальні 3D-геометрії. geom2 — це частина, яка буде видалена.

SELECT CG_3DDifference(geom1,geom2)
                            FROM ( SELECT CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'), 0, 0, 30) AS geom1,
                            CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'), 50, 'quad_segs=1'), 0, 0, 30) AS geom2 ) As t;

Що залишається після видалення geom2


Name

CG_Distance — Обчислює мінімальну відстань між двома геометріями

Synopsis

double precision CG_Distance( geometry geomA , geometry geomB );

Опис

Обчислює мінімальну відстань між двома геометріями.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає значення подвійної точності, що представляє відстань.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

SELECT CG_Distance('LINESTRING(0.0 0.0,-1.0 -1.0)', 'LINESTRING(3.0 4.0,4.0 5.0)');
5

Див. також

CG_3DDistance, CG_Distance


Name

CG_3DDistance — Обчислює мінімальну 3D відстань між двома геометріями

Synopsis

double precision CG_3DDistance( geometry geomA , geometry geomB );

Опис

Обчислює мінімальну 3D відстань між двома геометріями.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає значення подвійної точності, що представляє 3D-відстань.

Доступність: 3.5.0

This method needs SFCGAL backend.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади геометрії

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

Див. також

CG_Distance, ST_3DDistance


Name

ST_3DConvexHull — Обчислює 3D опуклу оболонку геометрії.

Synopsis

geometry ST_3DConvexHull(geometry geom1);

Опис

[Warning]

ST_3DConvexHull є застарілим з версії 3.5.0. Замість нього використовуйте CG_3DConvexHull.

Доступність: 3.3.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).


Name

CG_3DConvexHull — Обчислює 3D опуклу оболонку геометрії.

Synopsis

geometry CG_3DConvexHull(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).

Приклади

SELECT ST_AsText(CG_3DConvexHull('LINESTRING Z(0 0 5, 1 5 3, 5 7 6, 9 5 3 , 5 7 5, 6 3 5)'::geometry));
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)))
WITH f AS (SELECT i, CG_Extrude(geom, 0,0, i ) AS geom
        FROM ST_Subdivide(ST_Letters('CH'),5) WITH ORDINALITY AS sd(geom,i)
        )
        SELECT CG_3DConvexHull(ST_Collect(f.geom) )
        FROM f;

Оригінальна геометрія, накладена на 3D опуклу оболонку

Див. також

ST_Letters, ST_AsX3D


Name

ST_3DIntersection — Виконати 3D перетин

Synopsis

geometry ST_3DIntersection(geometry geom1, geometry geom2);

Опис

[Warning]

ST_3DIntersection є застарілим з версії 3.5.0. Замість нього використовуйте CG_3DIntersection.

Повернути геометрію, яка є спільною частиною між geom1 і geom2.

Доступність: 2.1.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).


Name

CG_3DIntersection — Виконати 3D перетин

Synopsis

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-зображення були створені за допомогою PostGIS ST_AsX3D і відтворені в HTML за допомогою бібліотеки відтворення X3Dom HTML Javascript.

SELECT CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'), 0, 0, 30) AS geom1,
                                    CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'), 50, 'quad_segs=1'), 0, 0, 30) AS geom2;
                                

Накладені оригінальні 3D-геометрії. geom2 показано напівпрозорим

SELECT CG_3DIntersection(geom1,geom2)
                                FROM ( SELECT CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'), 0, 0, 30) AS geom1,
                                CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'), 50, 'quad_segs=1'), 0, 0, 30) AS geom2 ) As t;

Перетин geom1 і geom2

3D лінійні ланцюжки та багатокутники

SELECT ST_AsText(CG_3DIntersection(linestring, polygon)) As wkt
    FROM  ST_GeomFromText('LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)') AS linestring
    CROSS JOIN ST_GeomFromText('POLYGON((0 0 8, 0 1 8, 1 1 8, 1 0 8, 0 0 8))') AS polygon;
LINESTRING Z (1 1 8,0.5 0.5 8)

Куб (закрита багатогранна поверхня) і багатокутник Z

SELECT ST_AsText(
CG_3DIntersection(
ST_GeomFromText('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))'::geometry))
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)))

Перетин двох твердих тіл, що призводить до об'ємного перетину, також є твердим тілом (ST_Dimension повертає 3)

SELECT ST_AsText(
            CG_3DIntersection(
              CG_Extrude(ST_Buffer('POINT(10 20)'::geometry,10,1), 0, 0, 30),
              CG_Extrude(ST_Buffer('POINT(10 20)'::geometry,10,1), 2, 0, 10)));
POLYHEDRALSURFACE Z (((13.3333333333333 13.3333333333333 10,20 20 0,20 20 10,13.3333333333333 13.3333333333333 10)),
        ((20 20 10,16.6666666666667 23.3333333333333 10,13.3333333333333 13.3333333333333 10,20 20 10)),
        ((20 20 0,16.6666666666667 23.3333333333333 10,20 20 10,20 20 0)),
        ((13.3333333333333 13.3333333333333 10,10 10 0,20 20 0,13.3333333333333 13.3333333333333 10)),
        ((16.6666666666667 23.3333333333333 10,12 28 10,13.3333333333333 13.3333333333333 10,16.6666666666667 23.3333333333333 10)),
        ((20 20 0,9.99999999999995 30 0,16.6666666666667 23.3333333333333 10,20 20 0)),
        ((10 10 0,9.99999999999995 30 0,20 20 0,10 10 0)),((13.3333333333333 13.3333333333333 10,12 12 10,10 10 0,13.3333333333333 13.3333333333333 10)),
        ((12 28 10,12 12 10,13.3333333333333 13.3333333333333 10,12 28 10)),
        ((16.6666666666667 23.3333333333333 10,9.99999999999995 30 0,12 28 10,16.6666666666667 23.3333333333333 10)),
        ((10 10 0,0 20 0,9.99999999999995 30 0,10 10 0)),
        ((12 12 10,11 11 10,10 10 0,12 12 10)),((12 28 10,11 11 10,12 12 10,12 28 10)),
        ((9.99999999999995 30 0,11 29 10,12 28 10,9.99999999999995 30 0)),((0 20 0,2 20 10,9.99999999999995 30 0,0 20 0)),
        ((10 10 0,2 20 10,0 20 0,10 10 0)),((11 11 10,2 20 10,10 10 0,11 11 10)),((12 28 10,11 29 10,11 11 10,12 28 10)),
        ((9.99999999999995 30 0,2 20 10,11 29 10,9.99999999999995 30 0)),((11 11 10,11 29 10,2 20 10,11 11 10)))

Name

CG_Union — Обчислює об'єднання двох геометрій

Synopsis

geometry CG_Union( geometry geomA , geometry geomB );

Опис

Обчислює об'єднання двох геометрій.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає геометрію, що представляє об'єднання.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

SELECT ST_AsText(CG_Union('POINT(.5 0)', 'LINESTRING(-1 0,1 0)'));
LINESTRING(-1 0,0.5 0,1 0)

Див. також

ST_3DUnion, ST_Union


Name

ST_3DUnion — Виконайте об'єднання 3D.

Synopsis

geometry ST_3DUnion(geometry geom1, geometry geom2);

geometry ST_3DUnion(geometry set g1field);

Опис

[Warning]

ST_3DUnion є застарілим з версії 3.5.0. Замість нього використовуйте CG_3DUnion.

Доступність: 2.2.0

Доступність: додано агрегований варіант 3.3.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 об'єднанням набору рядків геометрій. Функція ST_3DUnion() є "агрегатною" функцією в термінології PostgreSQL. Це означає, що вона оперує рядками даних так само, як функції SUM() і AVG(), і, як і більшість агрегатів, ігнорує геометрії NULL.


Name

CG_3DUnion — Виконайте об'єднання 3D за допомогою postgis_sfcgal.

Synopsis

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.

Приклади

3D-зображення були створені за допомогою PostGIS ST_AsX3D і відтворені в HTML за допомогою бібліотеки відтворення X3Dom HTML Javascript.

SELECT CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'), 0, 0, 30) AS geom1,
                                    CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'), 50, 'quad_segs=1'), 0, 0, 30) AS geom2;
                                

Накладені оригінальні 3D-геометрії. geom2 — це та, що має прозорість.

SELECT CG_3DUnion(geom1,geom2)
                                FROM ( SELECT CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'), 0, 0, 30) AS geom1,
                                CG_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'), 50, 'quad_segs=1'), 0, 0, 30) AS geom2 ) As t;

Об'єднання geom1 і geom2


Name

ST_AlphaShape — Обчислює альфа-форму, що охоплює геометрію

Synopsis

geometry ST_AlphaShape(geometry geom, float alpha, boolean allow_holes = false);

Опис

[Warning]

ST_AlphaShape є застарілим з версії 3.5.0. Замість нього використовуйте CG_AlphaShape.

Обчислює альфа-форму точок у геометрії. Альфа-форма — це (зазвичай) увігнута багатокутна геометрія, яка містить усі вершини вхідних даних і вершини якої є підмножиною вершин вхідних даних. Альфа-форма забезпечує більш точне наближення до форми вхідних даних, ніж форма, створена опуклою оболонкою.


Name

CG_AlphaShape — Обчислює альфа-форму, що охоплює геометрію

Synopsis

geometry CG_AlphaShape(geometry geom, float alpha, boolean allow_holes = false);

Опис

Обчислює альфа-форму точок у геометрії. Альфа-форма — це (зазвичай) увігнута багатокутна геометрія, яка містить усі вершини вхідних даних і вершини якої є підмножиною вершин вхідних даних. Альфа-форма забезпечує більш точне наближення до форми вхідних даних, ніж форма, створена опуклою оболонкою.

"Тіснота прилягання" контролюється параметром alpha, який може мати значення від 0 до нескінченності. Менші значення альфа дають більш увігнуті результати. Значення альфа, більші за певне значення, що залежить від даних, дають опуклу оболонку вхідних даних.

[Note]

Після впровадження CGAL значення альфа є квадратом радіуса диска, що використовується в алгоритмі Alpha-Shape для "ерозії" триангуляції Делоне вхідних точок. Докладнішу інформацію див. у CGAL Alpha-Shapes. Це відрізняється від оригінального визначення альфа-форм, яке визначає альфа як радіус ерозійного диска.

Обчислена форма не містить отворів, якщо опціональний аргумент allow_holes не вказаний як true.

Ця функція ефективно обчислює увігнуту оболонку геометрії подібно до ST_ConcaveHull, але використовує CGAL та інший алгоритм.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.4.1.

This method needs SFCGAL backend.

Приклади

Альфа-форма MultiPoint (той самий приклад, що й CG_OptimalAlphaShape)

SELECT ST_AsText(
        CG_AlphaShape(
        '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,
        80.2));

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)))

Альфа-форма MultiPoint, що допускає отвори (той самий приклад, що і CG_OptimalAlphaShape)

SELECT ST_AsText(
    CG_AlphaShape(
    '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,
    100.1,
    true))

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)))

Альфа-форма MultiPoint, що допускає отвори (той самий приклад, що і ST_ConcaveHull)

SELECT ST_AsText(
                CG_AlphaShape(
                '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,
                102.2,
                true));

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)))


Name

CG_ApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника

Synopsis

geometry CG_ApproxConvexPartition(geometry geom);

Опис

Обчислює наближене опукле розбиття геометрії полігону (за допомогою триангуляції).

[Note]

Розбиття багатокутника 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.

Приклади

Наближене опукле розділення (той самий приклад, що й CG_YMonotonePartition, CG_GreeneApproxConvexPartition та CG_OptimalConvexPartition)

SELECT ST_AsText(CG_ApproxConvexPartition('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));

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)))


Name

ST_ApproximateMedialAxis — Обчисліть приблизну медіальну вісь плоскої геометрії.

Synopsis

geometry ST_ApproximateMedialAxis(geometry geom);

Опис

[Warning]

ST_ApproximateMedialAxis є застарілим з версії 3.5.0. Замість нього використовуйте CG_ApproximateMedialAxis.

Повертає приблизну медіальну вісь для введеної площі на основі її прямого скелета. Використовує специфічний API SFCGAL, якщо побудований на основі сумісної версії (1.2.0+). В іншому випадку функція є лише обгорткою навколо CG_StraightSkeleton (повільніший варіант).

Доступність: 2.2.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).


Name

CG_ApproximateMedialAxis — Обчисліть приблизну медіальну вісь плоскої геометрії.

Synopsis

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.

[Note]

Ця функція ігнорує вимір Z. Вона завжди дає двовимірний результат, навіть якщо використовується для тривимірної геометрії.

This method needs SFCGAL backend.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

Приклади

SELECT CG_ApproximateMedialAxis(ST_GeomFromText('POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20, 160 30, 60 30, 60 130, 190 140, 190 190 ))'));

Полігон і його наближена медіальна вісь

This example computes the projected medial axis with free endpoints extended to the polygon boundary.

SELECT ST_AsText(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))

Name

CG_GenerateFlatRoof — Generate a flat (box) roof from a footprint polygon.

Synopsis

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.

Приклади

SELECT ST_AsText(
  CG_GenerateFlatRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))',
    2.0));
-- POLYHEDRALSURFACE Z (...)

Name

CG_GenerateHippedRoof — Generate a hipped roof from a footprint polygon.

Synopsis

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.

Приклади

SELECT ST_AsText(
  CG_GenerateHippedRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))',
    2.0));
-- POLYHEDRALSURFACE Z (...)

Name

CG_GenerateGableRoof — Generate a gable roof from a footprint polygon.

Synopsis

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.

Приклади

SELECT ST_CoordDim(
  CG_GenerateGableRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))',
    2.0, 30.0));
-- 3

Name

CG_GenerateSkillionRoof — Generate a skillion (single-slope) roof from a footprint polygon.

Synopsis

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).

This example uses height 2.0 and returns 6 patches.

SELECT ST_NumPatches(
  CG_GenerateSkillionRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))',
    2.0));
-- 6

-- height 4.0 -> 5 patches (one face filtered)
SELECT ST_NumPatches(
  CG_GenerateSkillionRoof(
    'POLYGON((0 0,5 0,5 4,0 4,0 0))',
    4.0));
-- 5

Name

CG_GenerateRoof — Generate a roof of the requested type from a footprint polygon.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_GenerateRoof('POLYGON((0 0,4 0,4 4,0 4,0 0))', 'HIPPED', 2.0, 30.0, 0));
-- POLYHEDRALSURFACE Z (((0 4 0,4 4 0,4 0 0,0 0 0,0 4 0)), ...)

SELECT ST_AsText(CG_GenerateRoof('POLYGON((0 0,4 0,4 4,0 4,0 0))', 'FLAT', 2.0));
-- POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 4 0,4 0 0,0 0 0)), ...)

Name

CG_PolygonRepair — Repair an invalid polygon or multipolygon.

Synopsis

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.

Приклади

This example repairs a bowtie self-intersecting polygon.

SELECT ST_AsText(CG_PolygonRepair('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)))

-- Keep all winding area with UNION rule (requires CGAL 6.1 or later)
SELECT ST_AsText(CG_PolygonRepair('POLYGON((0 0,2 2,2 0,0 2,0 0))', 'UNION'));
-- MULTIPOLYGON(((0 0,1 1,0 2,0 0)))

Див. також

ST_IsValid, ST_MakeValid


Name

ST_ConstrainedDelaunayTriangles — Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.

Synopsis

geometry ST_ConstrainedDelaunayTriangles(geometry g1);

Опис

[Warning]

ST_ConstrainedDelaunayTriangles є застарілим з версії 3.5.0. Замість нього використовуйте CG_ConstrainedDelaunayTriangles.

Повертає обмежену триангуляцію Делоне навколо вершин вхідної геометрії. Вихідними даними є TIN.

This method needs SFCGAL backend.

Доступність: 3.0.0

This function supports 3d and will not drop the z-index.


Name

CG_ConstrainedDelaunayTriangles — Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.

Synopsis

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.

Приклади

CG_Обмежені трикутники Делоне з 2 полігонів

select CG_ConstrainedDelaunayTriangles(
                                        ST_Union(
                                        'POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'::geometry,
                                        ST_Buffer('POINT(110 170)'::geometry, 20)
                                        )
                                        );
                                    

ST_DelaunayTriangles 2 полігонів. Краї трикутника перетинають межі полігонів.

select ST_DelaunayTriangles(
                                        ST_Union(
                                        'POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'::geometry,
                                        ST_Buffer('POINT(110 170)'::geometry, 20)
                                        )
                                        );
                                    


Name

ST_Extrude — Видавити поверхню до відповідного об'єму

Synopsis

geometry ST_Extrude(geometry geom, float x, float y, float z);

Опис

[Warning]

ST_Extrude є застарілим з версії 3.5.0. Замість нього використовуйте CG_Extrude.

Доступність: 2.1.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).


Name

CG_Extrude — Видавити поверхню до відповідного об'єму

Synopsis

geometry CG_Extrude(geometry geom, float x, float y, float z);

Опис

Доступність: 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).

Приклади

3D-зображення були створені за допомогою PostGIS ST_AsX3D і відтворені в HTML за допомогою бібліотеки відтворення X3Dom HTML Javascript.

SELECT ST_Buffer(
                                    ST_GeomFromText('POINT(100 90)'),
                                    50, 'quad_segs=2'),0,0,30);

Оригінальний восьмикутник, сформований з точки буферизації

CG_Extrude(
                                ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'),
                                0, 0, 30);

Шестикутник, видавлений на 30 одиниць уздовж Z, утворює PolyhedralSurfaceZ

SELECT ST_GeomFromText('LINESTRING(50 50, 100 90, 95 150)')

Оригінальна лінія

SELECT CG_Extrude(ST_GeomFromText('LINESTRING(50 50, 100 90, 95 150)'),0,0,10));

LineString, видавлений вздовж Z, створює PolyhedralSurfaceZ


Name

CG_ExtrudeStraightSkeleton — Пряма екструзія скелета

Synopsis

geometry CG_ExtrudeStraightSkeleton(geometry geom, float roof_height, float body_height = 0);

Опис

Обчислює екструзію з максимальною висотою геометрії багатокутника.

[Note]

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.

Приклади

SELECT ST_AsText(CG_ExtrudeStraightSkeleton('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))', 3.0, 2.0));

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)))


Name

CG_GreeneApproxConvexPartition — Обчислює наближене опукле розбиття геометрії багатокутника

Synopsis

geometry CG_GreeneApproxConvexPartition(geometry geom);

Опис

Обчислює наближене монотонне опукле розбиття геометрії багатокутника.

[Note]

Розбиття багатокутника 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.

Приклади

Наближене опукле розділення Гріна (той самий приклад, що й CG_YMonotonePartition, CG_ApproxConvexPartition та CG_OptimalConvexPartition)

SELECT ST_AsText(CG_GreeneApproxConvexPartition('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));

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)))


Name

ST_MinkowskiSum — Обчислює суму Мінковського

Synopsis

geometry ST_MinkowskiSum(geometry geom1, geometry geom2);

Опис

[Warning]

ST_MinkowskiSum є застарілим з версії 3.5.0. Замість нього використовуйте CG_MinkowskiSum.

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

Сума Мінковського двох геометрій A і B — це множина всіх точок, які є сумою будь-якої точки в A і B. Суми Мінковського часто використовуються в плануванні руху та комп'ютерному проектуванні. Більш детальна інформація на Вікіпедія Сума Мінковського.

Перший параметр може бути будь-якою 2D-геометрією (точка, лінія, багатокутник). Якщо передається 3D-геометрія, вона буде перетворена в 2D шляхом примусового встановлення Z на 0, що може призвести до випадків недійсність. Другий параметр повинен бути 2D-багатокутником.

Реалізація використовує CGAL 2D Minkowskisum.

Доступність: 2.1.0

This method needs SFCGAL backend.


Name

CG_MinkowskiSum — Обчислює суму Мінковського

Synopsis

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.

Приклади

Сума Мінковського лінійного ланцюга та багатокутника, де лінійний ланцюг перетинає коло

Перед підсумовуванням

Після підсумовування

SELECT CG_MinkowskiSum(line, circle))
            FROM (SELECT
            ST_MakeLine(ST_Point(10, 10),ST_Point(100, 100)) As line,
            ST_Buffer(ST_GeomFromText('POINT(50 50)'), 30) As circle) As foo;

            -- wkt --
            MULTIPOLYGON(((30 59.9999999999999,30.5764415879031 54.1472903395161,32.2836140246614 48.5194970290472,35.0559116309237 43.3328930094119,38.7867965644036 38.7867965644035,43.332893009412 35.0559116309236,48.5194970290474 32.2836140246614,54.1472903395162 30.5764415879031,60.0000000000001 30,65.8527096604839 30.5764415879031,71.4805029709527 32.2836140246614,76.6671069905881 35.0559116309237,81.2132034355964 38.7867965644036,171.213203435596 128.786796564404,174.944088369076 133.332893009412,177.716385975339 138.519497029047,179.423558412097 144.147290339516,180 150,179.423558412097 155.852709660484,177.716385975339 161.480502970953,174.944088369076 166.667106990588,171.213203435596 171.213203435596,166.667106990588 174.944088369076,
            161.480502970953 177.716385975339,155.852709660484 179.423558412097,150 180,144.147290339516 179.423558412097,138.519497029047 177.716385975339,133.332893009412 174.944088369076,128.786796564403 171.213203435596,38.7867965644035 81.2132034355963,35.0559116309236 76.667106990588,32.2836140246614 71.4805029709526,30.5764415879031 65.8527096604838,30 59.9999999999999)))
        

Сума Мінковського багатокутника і багатоточкової фігури

Перед підсумовуванням

Після підсумовування: багатокутник дублюється і переноситься в положення точок

SELECT CG_MinkowskiSum(mp, poly)
        FROM (SELECT 'MULTIPOINT(25 50,70 25)'::geometry As mp,
        'POLYGON((130 150, 20 40, 50 60, 125 100, 130 150))'::geometry As poly
        ) As foo


        -- wkt --
        MULTIPOLYGON(
        ((70 115,100 135,175 175,225 225,70 115)),
        ((120 65,150 85,225 125,275 175,120 65))
        )
    

Name

ST_OptimalAlphaShape — Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.

Synopsis

geometry ST_OptimalAlphaShape(geometry geom, boolean allow_holes = false, integer nb_components = 1);

Опис

[Warning]

ST_OptimalAlphaShape є застарілим з версії 3.5.0. Замість нього використовуйте CG_OptimalAlphaShape.

Обчислює «оптимальну» альфа-форму точок у геометрії. Альфа-форма обчислюється з використанням значення α, обраного таким чином, щоб:

  1. кількість елементів полігону дорівнює або менше, ніж nb_components (за замовчуванням 1)

  2. всі точки введення містяться в фігурі

Результат не буде містити отвори, якщо опціональний аргумент allow_holes не буде вказаний як true.

Доступність: 3.3.0 — вимагає SFCGAL >= 1.4.1.

This method needs SFCGAL backend.


Name

CG_OptimalAlphaShape — Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.

Synopsis

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.

Приклади

Оптимальна альфа-форма MultiPoint (той самий приклад, що й CG_AlphaShape)

SELECT ST_AsText(
            CG_OptimalAlphaShape(
            '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));

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)))

Оптимальна альфа-форма MultiPoint, що допускає отвори (той самий приклад, що і CG_AlphaShape)

SELECT ST_AsText(
    CG_OptimalAlphaShape(
    '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,
    allow_holes => true));

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)))

Див. також

ST_ConcaveHull, CG_AlphaShape


Name

CG_OptimalConvexPartition — Обчислює оптимальний опуклий поділ геометрії багатокутника

Synopsis

geometry CG_OptimalConvexPartition(geometry geom);

Опис

Обчислює оптимальний опуклий поділ геометрії багатокутника.

[Note]

Розбиття багатокутника P — це набір багатокутників, внутрішні частини яких не перетинаються, а об'єднання багатокутників дорівнює внутрішній частині вихідного багатокутника P. CG_OptimalConvexPartition створює розбиття, яке є оптимальним за кількістю частин.

Доступність: 3.5.0 — вимагає SFCGAL >= 1.5.0.

Вимагає SFCGAL >= 1.5.0

This method needs SFCGAL backend.

Приклади

Оптимальний опуклий поділ (той самий приклад, що й CG_YMonotonePartition, CG_ApproxConvexPartition та CG_GreeneApproxConvexPartition)

SELECT ST_AsText(CG_OptimalConvexPartition('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));

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)))


Name

CG_StraightSkeleton — Обчислити прямий скелет з геомeтрії

Synopsis

geometry CG_StraightSkeleton(geometry geom, boolean use_distance_as_m = false);

Опис

Доступність: 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).

Приклади

SELECT CG_StraightSkeleton(ST_GeomFromText('POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20, 160 30, 60 30, 60 130, 190 140, 190 190 ))'));
SELECT ST_AsText(CG_StraightSkeleton('POLYGON((0 0,1 0,1 1,0 1,0 0))', true));
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))

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

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.

Оригінальний полігон

Прямий скелет полігона


Name

ST_StraightSkeleton — Обчислити прямий скелет з геомeтрії

Synopsis

geometry ST_StraightSkeleton(geometry geom);

Опис

[Warning]

ST_StraightSkeleton є застарілим починаючи з версії 3.5.0. Замість нього використовуйте CG_StraightSkeleton.

Доступність: 2.1.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).

Приклади

SELECT ST_StraightSkeleton(ST_GeomFromText('POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20, 160 30, 60 30, 60 130, 190 140, 190 190 ))'));

Оригінальний полігон

Прямий скелет полігона

Див. також

CG_ExtrudeStraightSkeleton


Name

ST_Tesselate — Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN

Synopsis

geometry ST_Tesselate(geometry geom);

Опис

[Warning]

ST_Tesselate є застарілим з версії 3.5.0. Замість нього використовуйте CG_Tesselate.

Приймає як вхідні дані поверхню типу MULTI(POLYGON) або POLYHEDRALSURFACE і повертає представлення TIN за допомогою процесу тесселяції з використанням трикутників.

[Note]

ST_TriangulatePolygon виконує подібну функцію, за винятком того, що повертає колекцію геометрії багатокутників замість TIN, а також працює тільки з 2D-геометріями.

Доступність: 2.1.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).


Name

CG_Tesselate — Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN

Synopsis

geometry CG_Tesselate(geometry geom);

Опис

Приймає як вхідні дані поверхню типу MULTI(POLYGON) або POLYHEDRALSURFACE і повертає представлення TIN за допомогою процесу тесселяції з використанням трикутників.

[Note]

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).

Приклади

SELECT ST_GeomFromText('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)) )');

Оригінальний куб

SELECT CG_Tesselate(ST_GeomFromText('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)) )'));
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)))

Тессельований куб з кольоровими трикутниками

SELECT 'POLYGON (( 10 190, 10 70, 80 70, 80 130, 50 160, 120 160, 120 190, 10 190 ))'::geometry;

Оригінальний полігон

SELECT
                        CG_Tesselate('POLYGON (( 10 190, 10 70, 80 70, 80 130, 50 160, 120 160, 120 190, 10 190 ))'::geometry);

TIN(((80 130,50 160,80 70,80 130)),((50 160,10 190,10 70,50 160)),
                ((80 70,50 160,10 70,80 70)),((120 160,120 190,50 160,120 160)),
                ((120 190,10 190,50 160,120 190)))

Тессельований багатокутник


Name

CG_Triangulate — Тріангулює полігональну геометрію

Synopsis

geometry CG_Triangulate( geometry geom );

Опис

Триангулює полігональну геометрію.

Виконується модулем SFCGAL

[Note]

ПРИМІТКА: ця функція повертає геометрію, що представляє триангульований результат.

Доступність: 3.5.0

This method needs SFCGAL backend.

Приклади геометрії

SELECT ST_AsText(CG_Triangulate('POLYGON((0.0 0.0,1.0 0.0,1.0 1.0,0.0 1.0,0.0 0.0),(0.2 0.2,0.2 0.8,0.8 0.8,0.8 0.2,0.2 0.2))'));
st_astext
                ----------
                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)))

                (1 row)

Name

CG_Visibility — Обчислити полігон видимості з точки або сегмента в геометрії полігона

Synopsis

geometry CG_Visibility(geometry polygon, geometry point);

geometry CG_Visibility(geometry polygon, geometry pointA, geometry 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).

Приклади

SELECT CG_Visibility('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, 'POINT(91 87)'::geometry);
SELECT CG_Visibility('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,'POINT(78.5 68)'::geometry, 'POINT(98.5 68)'::geometry);

Оригінальний полігон

Видимість з точки

Видимість з сегмента


Name

CG_YMonotonePartition — Обчислює y-монотонний поділ геометрії багатокутника

Synopsis

geometry CG_YMonotonePartition(geometry geom);

Опис

Обчислює y-монотонний поділ геометрії багатокутника.

[Note]

Розбиття багатокутника 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.

Приклади

Оригінальний полігон

Y-монотонний поділ (той самий приклад, що й CG_ApproxConvexPartition, CG_GreeneApproxConvexPartition та CG_OptimalConvexPartition)

SELECT ST_AsText(CG_YMonotonePartition('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));

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)))


Name

CG_StraightSkeletonPartition — Обчислює прямий скелетний поділ багатокутника.

Synopsis

geometry CG_StraightSkeletonPartition(geometry geom, boolean auto_orientation);

Опис

Обчислює пряме скелетне розділення вхідної геометрії багатокутника geom. Прямий скелет — це розділення багатокутника на грані, утворені шляхом відстеження збігання його ребер. Якщо auto_orientation встановлено на true, функція автоматично налаштує орієнтацію вхідного багатокутника, щоб забезпечити правильні результати.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.0.0.

This method needs SFCGAL backend.

Приклади

SELECT ST_AsText(CG_StraightSkeletonPartition('POLYGON((0 0, 4 0, 2 2, 0 0))', true));
POLYHEDRALSURFACE(((0 0,2 0.82842712474619,2 2)),((4 0,2 0.82842712474619,0 0)),((2 2,2 0.82842712474619,4 0)))
SELECT CG_StraightSkeletonPartition(
            ST_GeomFromText('POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20,
            160 30, 60 30, 60 130, 190 140, 190 190 ))'),
            true );

Оригінальний полігон

Пряма скелетна роздільна лінія багатокутника


Name

CG_3DBuffer — Обчислює 3D-буфер навколо геометрії.

Synopsis

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.

Приклади

SELECT ST_AsText(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)), ... )

Наступні зображення були відтворені шляхом вставлення результату запиту ST_AsX3D у X3D Viewer.

SELECT string_agg('<Shape
>' || ST_AsX3D(cgbuffer3d_output)  || '<Appearance>
          <Material diffuseColor="0 0.8 0.2" specularColor="0 1 0"/>
        </Appearance>
    </Shape
>', '');

сегменти=32 (округлений буфер)

SELECT CG_3DBuffer(ST_GeomFromText('POINT(100 90)'), 50,32,0);

5 сегментів, округлено

SELECT CG_3DBuffer(
 ST_GeomFromText('POINT(100 90)'),
 50,5,0);
            

32 сегменти, круг

SELECT CG_3DBuffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
    ),
 10,32,0);
            

32 сегменти, квадрат

SELECT CG_3DBuffer(
  ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
    ),
 10,32,2);
            

Див. також

ST_Buffer, ST_3DConvexHull, ST_AsX3D


Name

CG_Rotate — Повертає геометрію на заданий кут навколо початку координат (0,0).

Synopsis

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.

Приклади

SELECT ST_AsText(CG_Rotate('LINESTRING(1 0, 0 1)', pi()/2));
LINESTRING(6.123233995736766e-17 1,-1 6.123233995736766e-17)

Див. також

CG_2DRotate, ST_Rotate


Name

CG_2DRotate — Повертає геометрію на заданий кут навколо вказаної точки в 2D.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_2DRotate('POINT(1 0)', pi()/2, 1, 1));
POINT(2 1)

Див. також

CG_Rotate, CG_3DRotate


Name

CG_3DRotate — Обертає геометрію в 3D-просторі навколо вектора осі.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_3DRotate('POINT(1 0 0)', pi()/2, 0, 0, 1));
POINT Z (6.123233995736766e-17 1 0)

Див. також

CG_RotateX, CG_RotateY, CG_RotateZ


Name

CG_RotateX — Повертає геометрію навколо осі X на заданий кут.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_RotateX('POINT(0 1 0)', pi()/2));
POINT Z (0 6.123233995736766e-17 1)

Див. також

CG_RotateY, CG_RotateZ, CG_3DRotate


Name

CG_RotateY — Повертає геометрію навколо осі Y на заданий кут.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_RotateY('POINT(1 0 0)', pi()/2));
POINT Z (6.123233995736766e-17 0 -1)

Див. також

CG_RotateX, CG_RotateZ, CG_3DRotate


Name

CG_RotateZ — Повертає геометрію навколо осі Z на заданий кут.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_RotateZ('POINT(1 0 0)', pi()/2));
POINT Z (6.123233995736766e-17 1 0)

Див. також

CG_RotateX, CG_RotateY, CG_3DRotate


Name

CG_Scale — Масштабує геометрію рівномірно у всіх вимірах за заданим коефіцієнтом.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_Scale('LINESTRING(1 1, 2 2)', 2));
LINESTRING(2 2,4 4)

Name

CG_3DScale — Масштабує геометрію за окремими коефіцієнтами вздовж осей X, Y та Z.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_3DScale('POINT(1 1 1)', 2, 3, 4));
POINT Z (2 3 4)

Див. також

CG_Scale, CG_3DScaleAroundCenter


Name

CG_3DScaleAroundCenter — Масштабує геометрію в 3D-просторі навколо вказаної центральної точки.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_3DScaleAroundCenter('POINT(2 2 2)', 0.5, 0.5, 0.5, 1, 1, 1));
POINT Z (1.5 1.5 1.5)

Див. також

CG_Scale, CG_3DScale


Name

CG_Translate — Перекладає (переміщує) геометрію на задані відступи в 2D-просторі.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_Translate('LINESTRING(1 1, 2 2)', 1, -1));
LINESTRING(2 0,3 1)

Див. також

CG_3DTranslate, ST_Translate


Name

CG_3DTranslate — Перекладає (переміщує) геометрію на задані відступи в 3D-просторі.

Synopsis

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.

Приклади

SELECT ST_AsText(CG_3DTranslate('POINT(1 1 1)', 1, -1, 2));
POINT Z (2 0 3)

Див. також

CG_Translate, ST_Translate


Name

CG_Simplify — Зменшує складність геометрії, зберігаючи при цьому основні характеристики та значення Z/M.

Synopsis

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.

SELECT ST_AsText(CG_Simplify(ST_GeomFromText('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));

Simplify a 3D terrain geometry while preserving topology and Z values.

SELECT ST_AsText(CG_Simplify(ST_GeomFromText('LINESTRING Z(0 0 0, 0 1 1, 0.1 1 1, 0.2 1 1, 0.3 1 1, 1 1 2)'), 0.2, true));

Simplify a geometry with both Z and M values.

SELECT ST_AsText(CG_Simplify(ST_GeomFromText('LINESTRING ZM(0 0 0 1, 0 1 1 2, 0.1 1 1 3, 0.2 1 1 4, 0.3 1 1 5, 1 1 2 6)'), 0.2));

Simplify two geometries together, preserving Z and M values without preserving topology.

SELECT ST_AsText(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));

Simplify two geometries together, preserving Z and M values and topology.

SELECT ST_AsText(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));

WITH depts_pds 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 FROM depts_pds;
        

Оригінальні геометрії

WITH depts_pds 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 (ST_Dump(CG_Simplify(geom, 0.5, true))).geom FROM depts_pds;
        

Спрощення з 0,5 і збереженням топології

WITH depts_pds 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 (ST_Dump(CG_Simplify(geom, 0.5, false))).geom FROM depts_pds;
      

Спрощення з 0,5 без збереження топології


Name

CG_3DAlphaWrapping — Обчислює 3D-обгортку альфа, яка суворо охоплює геометрію.

Synopsis

geometry CG_3DAlphaWrapping(geometry geom, integer relative_alpha, integer relative_offset);

Опис

Обчислює 3D Alpha Wrapping точок у геометрії. Альфа-обгортання — це водонепроникна та орієнтована поверхнева сітка, яка суворо охоплює вхідні дані. Його можна розглядати як розширення або вдосконалення альфа-форми.

Параметр relative_alpha контролює, які функції з'являтимуться у вихідних даних. Він може мати значення від 0 до нескінченності. Менші значення relative_alpha дають простіші вихідні дані, але вони є менш точними представленнями вихідних даних.

Параметр relative_offset контролює точність результату. Він може мати значення від 0 до нескінченності. Якщо цей параметр встановлений на 0, його значення автоматично визначається на основі параметра relative_alpha.

Доступність: 3.6.0 — вимагає SFCGAL >= 2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

Приклади

SELECT CG_3DAlphaWrapping(
           '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,
           10);

Альфа-обгортання MultiPoint (той самий приклад, що й CG_OptimalAlphaShape)

SELECT CG_3DAlphaWrapping(
           '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,
           14);

Альфа-обгортання MultiPoint (той самий приклад, що і ST_ConcaveHull)

Вплив параметра relative_alpha із значеннями 5, 10 і 20. Значення 5 дає грубий результат. Збільшення параметра до 20 значно покращує точність і детальність результату.

Див. також

CG_AlphaShape


Name

CG_NurbsCurveInterpolate — Creates an interpolating NURBS curve passing through all given data points

Synopsis

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.

Приклади

This example creates a smooth curve interpolating through five points.

SELECT CG_NurbsCurveInterpolate(
    'LINESTRING(0 0, 1 2, 3 3, 5 1, 6 0)'::geometry,
    3
);

-- 3D interpolation
SELECT CG_NurbsCurveInterpolate(
    'LINESTRING Z(0 0 0, 1 2 1, 3 3 0, 5 1 -1, 6 0 0)'::geometry,
    2
);

Name

CG_NurbsCurveApproximate — Creates an approximating NURBS curve fitting data points within a tolerance

Synopsis

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.

Приклади

This example approximates noisy data using a tolerance.

SELECT CG_NurbsCurveApproximate(
    'LINESTRING(0 0, 1 2.1, 2 1.9, 3 3.2, 4 2.8, 5 1)'::geometry,
    2,
    0.5
);

-- Control maximum complexity
SELECT CG_NurbsCurveApproximate(
    'LINESTRING(0 0, 1 2, 2 2, 3 3, 4 3, 5 1, 6 0, 7 -1, 8 0)'::geometry,
    3,
    0.2,
    20  -- max 20 control points
);

Name

CG_NurbsCurveDerivative — Computes the derivative (tangent, curvature) of a NURBS curve at a given parameter

Synopsis

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.

Приклади

This example returns the tangent vector at the curve midpoint.

WITH nurbs AS (
    SELECT ST_MakeNurbsCurve(2, 'LINESTRING(0 0, 5 10, 10 0)'::geometry) AS geom
)
SELECT CG_NurbsCurveDerivative(geom, 0.5, 1) FROM nurbs;

-- Get curvature at start of curve
WITH nurbs AS (
    SELECT ST_MakeNurbsCurve(3, 'LINESTRING(0 0, 2 5, 5 5, 8 2, 10 0)'::geometry) AS geom
)
SELECT CG_NurbsCurveDerivative(geom, 0.0, 2) FROM nurbs;

-- Analyze tangent at multiple points
WITH nurbs AS (
    SELECT ST_MakeNurbsCurve(2, 'LINESTRING(0 0, 5 10, 10 0)'::geometry) AS geom
)
SELECT
    t.param,
    CG_NurbsCurveDerivative(n.geom, t.param, 1) AS tangent
FROM nurbs n
CROSS JOIN (VALUES (0.0), (0.25), (0.5), (0.75), (1.0)) AS t(param);

Див. також

ST_Evaluate, ST_MakeNurbsCurve

Chapter 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.

Детальнішу інформацію про цей проект можна знайти за посиланням PostGIS Topology Wiki

Усі функції та таблиці, пов'язані з цим модулем, встановлюються у схемі під назвою topology.

Функції, які визначені в стандарті SQL/MM, мають префікс ST_, а функції, специфічні для PostGIS, не мають префікса.

Підтримка топології вбудована за замовчуванням і може бути вимкнена шляхом вказання опції конфігурації --without-topology під час компіляції, як описано в Chapter 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. Типи топології

Abstract

У цьому розділі перелічено типи даних PostgreSQL, встановлені PostGIS Topology. Зверніть увагу, що ми описуємо поведінку цих типів при перетворенні, що є дуже важливим, особливо при розробці власних функцій.

  • getfaceedges_returntype — Комбінований тип, що складається з порядкового номера та номера ребра.
  • TopoGeometry — Композитний тип, що представляє топологічно визначену геометрію.
  • validatetopology_returntype — Комбінований тип, що складається з повідомлення про помилку та ідентифікаторів id1 та id2 для позначення місця помилки. Це тип повернення для ValidateTopology.

Name

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

Опис

Композитний тип, що складається з порядкового номера та номера ребра. Це тип повернення для функцій ST_GetFaceEdges та GetNodeEdges.

  1. sequence integer: Посилається на топологію, визначену в таблиці topology.topology, яка визначає схему топології та srid.

  2. edge integer: ідентифікатор ребра.


Name

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

Опис

Композитний тип, що посилається на геометрію топології в конкретному шарі топології, має конкретний тип і конкретний ідентифікатор. Елементами 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


Name

validatetopology_returntype — Комбінований тип, що складається з повідомлення про помилку та ідентифікаторів id1 та id2 для позначення місця помилки. Це тип повернення для ValidateTopology.

Опис

Композитний тип, що складається з повідомлення про помилку та двох цілих чисел. Функція ValidateTopology повертає набір таких елементів для позначення помилок перевірки, а також ідентифікатори id1 та id2 для позначення ідентифікаторів об'єктів топології, пов'язаних із помилкою.

  1. error є varchar: Позначає тип помилки.

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

  2. id1 integer позначає ідентифікатор ребра / грані / вузлів, що містить помилку.

  3. id2 integer: для помилок, що стосуються 2 об'єктів, позначає вторинний край / або вузол

Див. також

ValidateTopology

9.3. Топологічні домени

Abstract

У цьому розділі перелічено домени PostgreSQL, встановлені PostGIS Topology. Домени можна використовувати як типи об'єктів, наприклад, як об'єкти, що повертаються функціями, або стовпці таблиць. Відмінність домену від типу полягає в тому, що домен — це існуючий тип, до якого прив'язано обмеження перевірки.

  • TopoElement — Масив із 2 цілих чисел, що зазвичай використовується для ідентифікації компонента TopoGeometry.
  • TopoElementArray — Масив об'єктів TopoElement.

Name

TopoElement — Масив із 2 цілих чисел, що зазвичай використовується для ідентифікації компонента TopoGeometry.

Опис

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

У випадку простої TopoGeometry перший елемент масиву представляє ідентифікатор топологічного примітиву, а другий елемент представляє його тип (1:вузол, 2:ребро, 3:грань). У випадку ієрархічної TopoGeometry перший елемент масиву представляє ідентифікатор дочірньої TopoGeometry, а другий елемент представляє ідентифікатор її шару.

[Note]

Для будь-якої ієрархічної TopoGeometry всі дочірні елементи TopoGeometry будуть походити з того самого дочірнього шару, як зазначено в записі topology.layer для шару TopoGeometry, що визначається.

Приклади

SELECT te[1] AS id, te[2] AS type FROM
( SELECT ARRAY[1,2]::topology.topoelement AS te ) f;
id | type
----+------
  1 |    2
                 
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.

SELECT ARRAY[1,2,3]::topology.topoelement;
ERROR:  value for domain topology.topoelement violates check constraint "dimensions"

Name

TopoElementArray — Масив об'єктів TopoElement.

Опис

Масив з 1 або більше об'єктів TopoElement, який зазвичай використовується для передачі компонентів об'єктів TopoGeometry.

Приклади

SELECT '{{1,2},{4,3}}'::topology.topoelementarray AS tea;
{{1,2},{4,3}}

This is the more verbose equivalent.

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.

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}}
SELECT '{{1,2,4},{3,4,5}}'::topology.topoelementarray AS tea;
ERROR:  value for domain topology.topoelementarray violates check constraint "dimensions"

9.4. Управління топологією та топогеометрією

Abstract

У цьому розділі перелічено функції топології для створення нових схем топології, перевірки топологій та управління стовпцями 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) для топології та примітивних ідентифікаторів.

Name

AddTopoGeometryColumn — Додає стовпець топогеометрії до існуючої таблиці, реєструє цей новий стовпець як шар у topology.layer і повертає новий layer_id.

Synopsis

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);

Опис

Кожен об'єкт 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.

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');
CREATE SCHEMA ri;
CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);
SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');

Name

RenameTopoGeometryColumn — Перейменовує стовпець топогеометрії

Synopsis

topology.layer RenameTopoGeometryColumn(regclass layer_table, name feature_column, name new_name);

Опис

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

Доступність: 3.4.0

Приклади

SELECT topology.RenameTopoGeometryColumn('public.parcels', 'topogeom', 'tgeom');

Name

DropTopology — Використовуйте з обережністю: видаляє схему топології та її посилання з таблиці topology.topology, а також посилання на таблиці в цій схемі з таблиці geometry_columns.

Synopsis

integer DropTopology(varchar topology_schema_name);

Опис

Видаляє схему топології та її посилання з таблиці topology.topology, а також посилання на таблиці в цій схемі з таблиці geometry_columns. Цю функцію слід ВИКОРИСТОВУВАТИ З ОБЕРЕЖНІСТЮ, оскільки вона може знищити важливі для вас дані. Якщо схема не існує, вона просто видаляє записи посилань на вказану схему.

Доступність: 1.1

Приклади

Cascade видаляє схему ma_topo та всі посилання на неї в topology.topology та geometry_columns.

SELECT topology.DropTopology('ma_topo');

Див. також

DropTopoGeometryColumn


Name

RenameTopology — Перейменовує топологію

Synopsis

varchar RenameTopology(varchar old_name, varchar new_name);

Опис

Перейменовує схему топології, оновлюючи запис метаданих у таблиці topology.topology.

Доступність: 3.4.0

Приклади

Перейменуйте топологію з topo_stage на topo_prod.

SELECT topology.RenameTopology('topo_stage', 'topo_prod');

Name

DropTopoGeometryColumn — Видаляє стовпець топогеометрії з таблиці з назвою table_name у схемі schema_name та скасовує реєстрацію стовпців у таблиці topology.layer.

Synopsis

text DropTopoGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);

Опис

Видаляє стовпець топогеометрії з таблиці з назвою table_name у схемі schema_name та скасовує реєстрацію стовпців у таблиці topology.layer. Повертає підсумок стану видалення. ПРИМІТКА: перед видаленням спочатку встановлює всі значення на NULL, щоб обійти перевірки цілісності посилань.

Доступність: 1.1

Приклади

SELECT topology.DropTopoGeometryColumn('ma_topo', 'parcel_topo', 'topo');

Див. також

AddTopoGeometryColumn


Name

FixCorruptTopoGeometryColumn — Виправлено пошкодження топогеометрії, спричинене оновленням до postgis_topology 3.6.0 та вище

Synopsis

text FixCorruptTopoGeometryColumn(name layerSchema, name layerTable, name layerColumn );

Опис

При оновленні топології PostGIS <3.6.0 до версії >3.6.0+ було змінено визначення стовпця topogeometry. Це спричинило пошкодження топогеометрій, створених до оновлення. Ця функція виправляє це пошкодження в уражених таблицях.

Доступність: 3.6.1

Приклади

Виправити всі стовпці топології

SELECT topology.FixCorruptTopoGeometryColumn(schema_name, table_name, feature_column)
    FROM topology.layer;
                

Див. також

UpgradeTopology


Name

Populate_Topology_Layer — Додає відсутні записи до таблиці topology.layer, зчитуючи метадані з таблиць topo.

Synopsis

setof record Populate_Topology_Layer();

Опис

Додає відсутні записи до таблиці topology.layer, перевіряючи обмеження топології в таблицях. Ця функція корисна для виправлення записів у каталозі топології після відновлення схем із даними топології.

Повертає список створених записів. Повертаються стовпці schema_name, table_name, feature_column.

Доступність: 2.3.0

Приклади

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');

This query returns no records because the feature is already registered.

SELECT *
FROM topology.Populate_Topology_Layer();

Rebuild the topology layer catalog.

TRUNCATE TABLE topology.layer;

SELECT *
FROM topology.Populate_Topology_Layer();

SELECT topology_id,layer_id, schema_name As sn, table_name As tn, feature_column As fc
FROM topology.layer;

                                
schema_name | table_name | feature_column
-------------+------------+----------------
 strk        | parcels    | topo
(1 row)

 topology_id | layer_id |  sn  |   tn    |  fc
-------------+----------+------+---------+------
           2 |        2 | strk | parcels | topo
(1 row)

Див. також

AddTopoGeometryColumn


Name

TopologySummary — Бере ім'я топології та надає підсумкові суми типів об'єктів у топології.

Synopsis

text TopologySummary(varchar topology_schema_name);

Опис

Бере ім'я топології та надає підсумкові суми типів об'єктів у топології.

Доступність: 2.0.0

Приклади

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

Name

ValidateTopology — Повертає набір об'єктів validated_topology_returntype, що детально описують проблеми з топологією.

Synopsis

setof validatetopology_returntype ValidateTopology(varchar toponame, geometry bbox);

Опис

Повертає набір об'єктів 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, виконується перевірка маркування ребер та з'єднання ребер.

Приклади

SELECT * FROM topology.ValidateTopology('ma_topo');
error        | id1 | id2
-------------------+-----+-----
face without edges |   1 |

Див. також

validatetopology_returntype


Name

ValidateTopologyRelation — Повертає інформацію про недійсні записи топологічних відносин

Synopsis

setof record ValidateTopologyRelation(varchar toponame);

Опис

Повертає набір записів, що містять інформацію про недійсні елементи в таблиці відносин топології.

Доступність: 3.2.0

Див. також

ValidateTopology


Name

ValidateTopologyPrecision — Повертає неточні вершини в топології.

Synopsis

geometry ValidateTopologyPrecision(name toponame, geometry bbox, float8 gridSize);

Опис

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

Доступність: 3.6.0

Приклади

SELECT ST_AsEWKT(g)
FROM topology.ValidateTopologyPrecision(
    'city_data',
    gridSize =
> 2,
    bbox =
> ST_MakeEnvelope(0, 0, 20, 20)
) g;
MULTIPOINT(9 6,9 14)

Див. також

MakeTopologyPrecise


Name

MakeTopologyPrecise — Прив'язати вершини топології до сітки з високою точністю.

Synopsis

void MakeTopologyPrecise(name toponame, geometry bbox, float8 gridSize);

Опис

Прив'язує всі вершини топології до сітки точності топології або до сітки, розмір якої вказано параметром 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.

[Note]

При використанні функції "Прив'язати" топологія може стати недійсною, тому рекомендується перевірити результат операції за допомогою ValidateTopology.

Доступність: 3.6.0

Приклади

SELECT topology.MakeTopologyPrecise(
    'city_data',
    gridSize =
> 2
);

Name

FindTopology — Повертає запис топології різними способами.

Synopsis

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);

Опис

Приймає ідентифікатор топології або ідентифікатор об'єкта, пов'язаного з топологією, і повертає запис топології.

Доступність: 3.2.0

Приклади

SELECT name(FindTopology('features.land_parcels', 'feature'));
city_data

Див. також

FindLayer


Name

FindLayer — Повертає запис topology.layer різними способами.

Synopsis

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);

Опис

Приймає ідентифікатор шару або ідентифікатор об'єкта, пов'язаного з топологією, і повертає запис topology.layer.

Доступність: 3.2.0

Приклади

SELECT layer_id(FindLayer('features.land_parcels', 'feature'));
1

Див. також

FindTopology


Name

TotalTopologySize — Загальний обсяг дискового простору, використовуваний зазначеною топологією, включаючи всі індекси та дані TOAST.

Synopsis

int8 TotalTopologySize(name toponame);

Опис

Приймає ім'я топології та надає загальний обсяг дискового простору, зайнятого всіма її таблицями, включаючи індекси та дані TOAST.

Доступність: 3.6.0

Приклади

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

Name

UpgradeTopology — Оновлює вказану топологію для підтримки великих ідентифікаторів (int8) для топології та примітивних ідентифікаторів.

Synopsis

void UpgradeTopology(name toponame);

Опис

Бере ім'я топології та оновлює його для підтримки великих ідентифікаторів (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

Приклади

SELECT topology.UpgradeTopology('city_data');

9.5. Управління статистикою топології

Abstract

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

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

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

[Note]

Статистика, оновлена за допомогою autovacuum, НЕ буде видима для транзакцій, які були запущені до завершення процесу autovacuum, тому для використання оновленої статистики довготривалі транзакції повинні самостійно виконати ANALYZE.

9.6. Конструктори топології

Abstract

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

  • CreateTopology — Створює нову схему топології та реєструє її в таблиці topology.topology.
  • CopyTopology — Створює копію топології (вузлів, ребер, граней, шарів і TopoGeometries) у новій схемі
  • ST_InitTopoGeo — Створює нову схему топології та реєструє її в таблиці topology.topology.
  • ST_CreateTopoGeo — Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність операції.
  • TopoGeo_AddPoint — Додає точку до існуючої топології, використовуючи допуск і, можливо, розділяючи існуюче ребро.
  • TopoGeo_AddLineString — Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.
  • TopoGeo_AddPolygon — Додає полігон до існуючої топології, використовуючи допуск і, можливо, розділяючи існуючі ребра/грані. Повертає ідентифікатори граней.
  • TopoGeo_LoadGeometry — Завантажте геометрію в існуючу топологію, при необхідності вирівнюючи та розділяючи.

Name

CreateTopology — Створює нову схему топології та реєструє її в таблиці topology.topology.

Synopsis

integer CreateTopology(name topology_schema_name, integer srid, double precision prec=0, boolean hasz=false, integer topoid=0, boolean useslargeids=false);

Опис

Створює нову схему топології з іменем 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 метра, оскільки система просторових координат базується на метрах.

SELECT topology.CreateTopology('ma_topo', 26986, 0.5);

Створіть топологію для Род-Айленду під назвою ri_topo у системі просторових координат State Plane-feet (SRID = 3438)

SELECT topology.CreateTopology('ri_topo', 3438) AS topoid;
2

Name

CopyTopology — Створює копію топології (вузлів, ребер, граней, шарів і TopoGeometries) у новій схемі

Synopsis

integer CopyTopology(varchar existing_topology_name, varchar new_name);

Опис

Створює нову топологію з назвою new_name, з SRID і точністю, скопійованими з existing_topology_name. Вузли, ребра та грані в existing_topology_name копіюються в нову топологію, а також шари та пов'язані з ними TopoGeometries.

[Note]

Нові рядки в таблиці topology.layer містять синтетичні значення для schema_name, table_name та feature_column. Це пов'язано з тим, що об'єкти TopoGeometry існують лише як визначення і ще не доступні в таблиці, визначеній користувачем.

Доступність: 2.0.0

Приклади

Створіть резервну копію топології під назвою ma_topo.

SELECT topology.CopyTopology('ma_topo', 'ma_topo_backup');

Name

ST_InitTopoGeo — Створює нову схему топології та реєструє її в таблиці topology.topology.

Synopsis

text ST_InitTopoGeo(varchar topology_schema_name);

Опис

Це еквівалент 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

Приклади

SELECT topology.ST_InitTopoGeo('topo_schema_to_create') AS topocreation;
Topology-Geometry 'topo_schema_to_create' (id:7) created.

Див. також

CreateTopology


Name

ST_CreateTopoGeo — Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність операції.

Synopsis

text ST_CreateTopoGeo(varchar atopology, geometry acollection);

Опис

Додає колекцію геометрій до заданої порожньої топології та повертає повідомлення з детальною інформацією про успішність виконання.

Корисно для заповнення порожньої топології.

Доступність: 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.

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.

CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);

SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');

Name

TopoGeo_AddPoint — Додає точку до існуючої топології, використовуючи допуск і, можливо, розділяючи існуюче ребро.

Synopsis

bigint TopoGeo_AddPoint(varchar atopology, geometry apoint, float8 tolerance);

Опис

Додає точку до існуючої топології та повертає її ідентифікатор. Задана точка буде прив'язана до існуючих вузлів або ребер в межах заданого допуску. Існуюче ребро може бути розділене прив'язаною точкою.

Доступність: 2.0.0


Name

TopoGeo_AddLineString — Додає лінійний елемент до існуючої топології з використанням допуску та можливого розділення існуючих ребер/граней.

Synopsis

SETOF bigint TopoGeo_AddLineString(varchar atopology, geometry aline, float8 tolerance, int max_edges);

Опис

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

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

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

Кількість новостворених ребер (які покривають раніше непокритий простір або є результатом розділення існуючих ребер) може бути обмежена параметром max_edges.

[Note]

Оновлення статистики про топології, що завантажуються за допомогою цієї функції, залежить від виклику, див. maintaining statistics during topology editing and population.

Доступність: 2.0.0

Покращено: у версії 3.2.0 додано підтримку повернення підписаного ідентифікатора.

Покращено: у версії 3.7.0 додано підтримку обмеження кількості нових ребер, що створюються в топології.


Name

TopoGeo_AddPolygon — Додає полігон до існуючої топології, використовуючи допуск і, можливо, розділяючи існуючі ребра/грані. Повертає ідентифікатори граней.

Synopsis

SETOF bigint TopoGeo_AddPolygon(varchar atopology, geometry apoly, float8 tolerance);

Опис

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

[Note]

Оновлення статистики про топології, що завантажуються за допомогою цієї функції, залежить від виклику, див. maintaining statistics during topology editing and population.

Доступність: 2.0.0


Name

TopoGeo_LoadGeometry — Завантажте геометрію в існуючу топологію, при необхідності вирівнюючи та розділяючи.

Synopsis

void TopoGeo_LoadGeometry(varchar atopology, geometry ageom, float8 tolerance);

Опис

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

[Note]

Оновлення статистики про топології, що завантажуються за допомогою цієї функції, залежить від виклику, див. maintaining statistics during topology editing and population.

Доступність: 3.5.0

9.7. Редактори топології

Abstract

Цей розділ охоплює функції топології для додавання, переміщення, видалення та розділення ребер, граней та вузлів. Усі ці функції визначені стандартом 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 — Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.

Name

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

Synopsis

bigint ST_AddIsoNode(varchar atopology, bigint aface, geometry apoint);

Опис

Додає ізольований вузол із точкою розташування apoint до існуючої грані з ідентифікатором грані aface до топології atopology і повертає ідентифікатор нового вузла.

Якщо система просторових координат (srid) геометрії точки не збігається з топологією, apoint не є геометрією точки, точка є нульовою або точка перетинає існуючу ребро (навіть на межі), то виникає виняток. Якщо точка вже існує як вузол, виникає виняток.

Якщо aface не дорівнює нулю, а apoint не знаходиться в межах грані, то генерується виняток.

Доступність: 1.1

This method implements the SQL/MM specification. SQL-MM: Топо-мережеві процедури: X+1.3.1

Приклади


Name

ST_AddIsoEdge — Додає ізольоване ребро, визначене геометрією alinestring, до топології, що з'єднує два існуючі ізольовані вузли anode та anothernode, і повертає ідентифікатор нового ребра.

Synopsis

bigint ST_AddIsoEdge(varchar atopology, bigint anode, bigint anothernode, geometry alinestring);

Опис

Додає ізольоване ребро, визначене геометрією 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


Name

ST_AddEdgeNewFaces — Додайте нову ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими.

Synopsis

bigint ST_AddEdgeNewFaces(varchar atopology, bigint anode, bigint anothernode, geometry acurve);

Опис

Додайте нове ребро і, якщо при цьому розділяється грань, видаліть оригінальну грань і замініть її двома новими гранями. Повертає ідентифікатор новододаного ребра.

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Якщо будь-які аргументи мають нульове значення, вказані вузли невідомі (повинні вже існувати в таблиці 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

Приклади


Name

ST_AddEdgeModFace — Додайте нову кромку і, якщо при цьому розділяється грань, змініть вихідну грань і додайте нову.

Synopsis

bigint ST_AddEdgeModFace(varchar atopology, bigint anode, bigint anothernode, geometry acurve);

Опис

Додайте нове ребро і, якщо це призведе до розділення грані, змініть оригінальну грань і додайте нову.

[Note]

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

Повертає ідентифікатор новододаного ребра.

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Якщо будь-які аргументи мають нульове значення, вказані вузли невідомі (повинні вже існувати в таблиці 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

Приклади


Name

ST_RemEdgeNewFace — Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.

Synopsis

bigint ST_RemEdgeNewFace(varchar atopology, bigint anedge);

Опис

Видаляє ребро і, якщо видалене ребро розділяло дві грані, видаляє оригінальні грані та замінює їх новою гранею.

Повертає ідентифікатор новоствореної грані або NULL, якщо нова грань не створена. Нова грань не створюється, якщо видалена ребро є висячою, ізольованою або обмеженою гранею всесвіту (що може призвести до затоплення всесвіту гранею з іншого боку).

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Відмовляється видаляти край, що бере участь у визначенні існуючої TopoGeometry. Відмовляється виправляти дві грані, якщо будь-яка TopoGeometry визначена тільки однією з них (а не іншою).

Якщо будь-які аргументи мають нульове значення, задана ребро невідома (повинна вже існувати в таблиці edge схеми топології), ім'я топології недійсне, то генерується помилка.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.14

Приклади


Name

ST_RemEdgeModFace — Видаляє ребро, і якщо ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох.

Synopsis

bigint ST_RemEdgeModFace(varchar atopology, bigint anedge);

Опис

Видаляє ребро, і якщо видалене ребро розділяє дві грані, видаляє одну грань і модифікує іншу грань, щоб покрити простір обох. Переважно зберігає грань праворуч, щоб забезпечити узгодженість з ST_AddEdgeModFace. Повертає ідентифікатор грані, яка зберігається.

Відповідно оновлює всі існуючі з'єднані ребра та взаємозв'язки.

Відмовляється видаляти край, що бере участь у визначенні існуючої TopoGeometry. Відмовляється виправляти дві грані, якщо будь-яка TopoGeometry визначена тільки однією з них (а не іншою).

Якщо будь-які аргументи мають нульове значення, задана ребро невідома (повинна вже існувати в таблиці edge схеми топології), ім'я топології недійсне, то генерується помилка.

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.15

Приклади


Name

ST_ChangeEdgeGeom — Змінює форму ребра, не впливаючи на топологічну структуру.

Synopsis

text ST_ChangeEdgeGeom(varchar atopology, bigint anedge, geometry acurve);

Опис

Змінює форму ребра, не впливаючи на топологічну структуру.

Якщо будь-які аргументи мають значення 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

Приклади

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

Name

ST_ModEdgeSplit — Розділіть ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове.

Synopsis

bigint ST_ModEdgeSplit(varchar atopology, bigint anedge, geometry apoint);

Опис

Розділити ребро, створивши новий вузол уздовж існуючого ребра, змінивши оригінальне ребро та додавши нове ребро. Відповідно оновлює всі існуючі з'єднані ребра та відносини. Повертає ідентифікатор новододаного вузла.

Доступність: 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.

SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227592 893910, 227600 893910)', 26986)) AS edgeid;
3

Split the edge with a new node.

SELECT topology.ST_ModEdgeSplit('ma_topo', 3, ST_SetSRID(ST_Point(227594, 893910), 26986)) AS node_id;
7

Name

ST_ModEdgeHeal — Виправляє двa ребра, видаляючи вузол, що їх з'єднує, змінюючи перше ребро та видаляючи друге ребро. Повертає ідентифікатор видаленого вузла.

Synopsis

bigint ST_ModEdgeHeal(varchar atopology, bigint anedge, bigint anotheredge);

Опис

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

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.9

Див. також

ST_ModEdgeSplit ST_NewEdgesSplit


Name

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

Synopsis

bigint ST_NewEdgeHeal(varchar atopology, bigint anedge, bigint anotheredge);

Опис

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

Доступність: 2.0

This method implements the SQL/MM specification. SQL-MM: Topo-Geo та Topo-Net 3: Деталі процедури: X.3.9


Name

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

Synopsis

text ST_MoveIsoNode(varchar atopology, bigint anode, geometry apoint);

Опис

Переміщує ізольований вузол у топології з однієї точки в іншу. Якщо нова геометрія 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.

SELECT topology.ST_AddIsoNode('ma_topo', NULL, ST_GeomFromText('POINT(227579 893916)', 26986)) AS nodeid;
7

Move the new node.

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


Name

ST_NewEdgesSplit — Розділіть ребро, створивши новий вузол уздовж існуючого ребра, видаливши оригінальне ребро і замінивши його двома новими ребрами. Повертає ідентифікатор нового вузла, створеного для з'єднання нових ребер.

Synopsis

bigint ST_NewEdgesSplit(varchar atopology, bigint anedge, geometry apoint);

Опис

Розділити ребро з ідентифікатором 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.

SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575 893917, 227592 893900)', 26986)) AS edgeid;
2

Split the new edge.

SELECT topology.ST_NewEdgesSplit('ma_topo', 2, ST_GeomFromText('POINT(227578.5 893913.5)', 26986)) AS newnodeid;
6

Name

ST_RemoveIsoNode — Видаляє ізольований вузол і повертає опис дії. Якщо вузол не ізольований (є початком або кінцем ребра), то генерується виняток.

Synopsis

text ST_RemoveIsoNode(varchar atopology, bigint anode);

Опис

Видаляє ізольований вузол і повертає опис дії. Якщо вузол не ізольований (є початком або кінцем ребра), то генерується виняток.

Доступність: 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.

SELECT topology.ST_RemoveIsoNode('ma_topo', 7) AS result;
Isolated node 7 removed

Див. також

ST_AddIsoNode


Name

ST_RemoveIsoEdge — Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.

Synopsis

text ST_RemoveIsoEdge(varchar atopology, bigint anedge);

Опис

Видаляє ізольовану грань і повертає опис дії. Якщо грань не ізольована, то генерується виняток.

Доступність: 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.

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

Name

GetEdgeByPoint — Знаходить ідентифікатор ребра, яке перетинає задану точку.

Synopsis

bigint GetEdgeByPoint(varchar atopology, geometry apoint, float8 tol1);

Опис

Отримує ідентифікатор ребра, яке перетинає точку.

Функція повертає ціле число (id-edge) за заданою топологією, точкою POINT і допуском tolerance. Якщо tolerance = 0, то точка повинна перетинати край.

Якщо apoint не перетинає ребро, повертає 0 (нуль).

Якщо використання tolerance > 0 і поблизу точки є більше ніж одна грань, то виникає виняток.

[Note]

Якщо tolerance = 0, функція використовує ST_Intersects, в іншому випадку використовує ST_DWithin.

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

У цих прикладах використовуються ребра, які ми створили в AddEdge

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.

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

Name

GetFaceByPoint — Знаходить грань, що перетинає задану точку.

Synopsis

bigint GetFaceByPoint(varchar atopology, geometry apoint, float8 tol1);

Опис

Знаходить грань, на яку вказує точка, з заданим допуском.

Функція ефективно шукатиме грань, що перетинає коло з центром у точці та радіусом, що відповідає допуску.

Якщо жодна поверхня не перетинає задане місце пошуку, повертається 0 (універсальна поверхня).

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

Доступність: 2.0.0

Покращено: 3.2.0 більш ефективна реалізація та чіткіший контракт, припиняє роботу з недійсними топологіями.

Приклади

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.

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

Name

GetFaceContainingPoint — Знаходить обличчя, що містить точку.

Synopsis

bigint GetFaceContainingPoint(text atopology, geometry apoint);

Опис

Повертає ідентифікатор грані, що містить точку.

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

[Note]

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

Доступність: 3.2.0

Див. також

ST_GetFaceGeometry


Name

GetNodeByPoint — Знаходить ідентифікатор вузла в точці.

Synopsis

bigint GetNodeByPoint(varchar atopology, geometry apoint, float8 tol1);

Опис

Отримує ідентифікатор вузла в точці розташування.

Функція повертає ціле число (id-node) за заданою топологією, POINT і допуском. Якщо допуск = 0, це означає точне перетин, в іншому випадку витягує вузол з інтервалу.

Якщо apoint не перетинає вузол, повертає 0 (нуль).

Якщо використання tolerance > 0 і поблизу точки знаходиться більше одного вузла, то виникає виняток.

[Note]

Якщо tolerance = 0, функція використовує ST_Intersects, в іншому випадку використовує ST_DWithin.

Виконується модулем GEOS.

Доступність: 2.0.0

Приклади

У цих прикладах використовуються ребра, які ми створили в AddEdge

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.

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

Name

GetTopologyID — Повертає ідентифікатор топології в таблиці topology.topology за назвою топології.

Synopsis

integer GetTopologyID(varchar toponame);

Опис

Повертає ідентифікатор топології в таблиці topology.topology за назвою топології.

Доступність: 1.1

Приклади

SELECT topology.GetTopologyID('ma_topo') AS topo_id;
1

Name

GetTopologySRID — Повертає SRID топології в таблиці topology.topology, задавши ім'я топології.

Synopsis

integer GetTopologyID(varchar toponame);

Опис

Повертає ідентифікатор просторового посилання топології в таблиці topology.topology за назвою топології.

Доступність: 2.0.0

Приклади

SELECT topology.GetTopologySRID('ma_topo') AS srid;
4326

Name

GetTopologyName — Повертає назву топології (схеми) за ідентифікатором топології.

Synopsis

varchar GetTopologyName(integer topology_id);

Опис

Повертає ім'я топології (схему) з таблиці topology.topology, задавши ідентифікатор топології.

Доступність: 1.1

Приклади

SELECT topology.GetTopologyName(1) AS topo_name;
ma_topo

Name

ST_GetFaceEdges — Повертає набір впорядкованих ребер, що обмежують aface.

Synopsis

getfaceedges_returntype ST_GetFaceEdges(varchar atopology, bigint aface);

Опис

Повертає набір впорядкованих ребер, що обмежують 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.

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.

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;

Name

ST_GetFaceGeometry — Повертає багатокутник у заданій топології із зазначеним ідентифікатором грані.

Synopsis

geometry ST_GetFaceGeometry(varchar atopology, bigint aface);

Опис

Повертає багатокутник у заданій топології із зазначеним ідентифікатором грані. Будує багатокутник із ребер, що утворюють грань.

Доступність: 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.

SELECT ST_AsText(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))

Див. також

AddFace


Name

GetRingEdges — Повертає впорядкований набір ідентифікаторів підписаних ребер, зустрітих при проходженні по заданій стороні ребра.

Synopsis

getfaceedges_returntype GetRingEdges(varchar atopology, bigint aring, integer max_edges=null);

Опис

Повертає впорядкований набір ідентифікаторів підписаних ребер, зустрінутих під час проходження по заданій стороні ребра. Кожен вихідний елемент складається з послідовності та ідентифікатора підписаного ребра. Номери послідовності починаються з значення 1.

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

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

[Note]

Ця функція використовує метадані зв'язку крайових кілець.

Доступність: 2.0.0

Див. також

ST_GetFaceEdges, GetNodeEdges


Name

GetNodeEdges — Повертає впорядкований набір ребер, що прилягають до заданого вузла.

Synopsis

getfaceedges_returntype GetNodeEdges(varchar atopology, bigint anode);

Опис

Повертає впорядкований набір ребер, що прилягають до заданого вузла. Кожен вихідний елемент складається з послідовності та ідентифікатора ребра зі знаком. Номери послідовності починаються з 1. Позитивне ребро починається в заданому вузлі. Негативне ребро закінчується в заданому вузлі. Замкнуті ребра з'являються двічі (з обома знаками). Порядок визначається за годинниковою стрілкою, починаючи з півночі.

[Note]

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

Доступність: 2.0


Name

FindVertexSegmentPairsBelowDistance — Find pairs of topology vertex/segment that are closer than tolerated distance

Synopsis

setof record FindVertexSegmentPairsBelowDistance(varchar atopology, float8 tolerance);

Опис

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. Обробка топології

Abstract

Цей розділ описує функції для обробки топологій нестандартними способами.

  • Polygonize — Знаходить і реєструє всі грані, визначені краями топології.
  • AddNode — Додає точковий вузол до таблиці вузлів у вказаній схемі топології та повертає ідентифікатор нового вузла. Якщо точка вже існує як вузол, повертається існуючий ідентифікатор вузла.
  • AddEdge — Додає лінійний край до таблиці країв ребер та пов'язані початкові та кінцеві точки до таблиці вузлів точок заданої топологічної схеми, використовуючи задану геометрію лінійного ребра, та повертає ідентифікатор нового (або існуючого) ребра.
  • AddFace — Реєструє примітив грані в топології та отримує його ідентифікатор.
  • ST_Simplify — Повертає "спрощену" версію геометрії заданої TopoGeometry за допомогою алгоритму Дугласа-Пеукера.
  • RemoveUnusedPrimitives — Видаляє примітивні елементи топології, які не потрібні для визначення існуючих об'єктів TopoGeometry.

Name

Polygonize — Знаходить і реєструє всі грані, визначені краями топології.

Synopsis

text Polygonize(varchar toponame);

Опис

Реєструє всі грані, які можна побудувати з примітивів ребер.

Припускається, що цільова топологія не містить самоперетинаючих ребер.

[Note]

Вже відомі грані розпізнаються, тому можна безпечно викликати Polygonize кілька разів для однієї топології.

[Note]

Ця функція не використовує і не встановлює поля next_left_edge та next_right_edge таблиці ребер.

Доступність: 2.0.0

Див. також

AddFace, ST_Polygonize


Name

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

Synopsis

bigint AddNode(varchar toponame, geometry apoint, boolean allowEdgeSplitting=false, boolean computeContainingFace=false);

Опис

Додає точковий вузол до таблиці вузлів у вказаній схемі топології. Функція AddEdge автоматично додає початкову та кінцеву точки ребра при виклику, тому немає необхідності явно додавати вузли ребра.

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

Якщо computeContainingFace має значення true, для новододаного вузла буде обчислено правильну грань, що його містить.

[Note]

Якщо геометрія apoint вже існує як вузол, вузол не додається, а повертається існуючий nodeid.

Доступність: 2.0.0

Приклади

SELECT topology.AddNode('ma_topo', ST_GeomFromText('POINT(227641.6 893816.5)', 26986)) AS nodeid;
4

Див. також

AddEdge, CreateTopology


Name

AddEdge — Додає лінійний край до таблиці країв ребер та пов'язані початкові та кінцеві точки до таблиці вузлів точок заданої топологічної схеми, використовуючи задану геометрію лінійного ребра, та повертає ідентифікатор нового (або існуючого) ребра.

Synopsis

bigint AddEdge(varchar toponame, geometry aline);

Опис

Додає ребро до таблиці ребер і пов'язані вузли до таблиці вузлів заданої схеми toponame з використанням заданої геометрії лінійного рядка та повертає edgeid нового або існуючого запису. Новододане ребро має обох боків "універсум" і пов'язане саме з собою.

[Note]

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

[Note]

Геометрія aline повинна мати той самий srid, що визначений для топології, інакше буде видано помилку недійсного просторового посилання sys.

Виконується модулем GEOS.

[Warning]

AddEdge застаріло з версії 3.5.0. Замість цього використовуйте TopoGeo_AddLineString.

Доступність: 2.0.0

Приклади

SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575.8 893917.2, 227591.9 893900.4)', 26986)) AS edgeid;
1
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.

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

Name

AddFace — Реєструє примітив грані в топології та отримує його ідентифікатор.

Synopsis

bigint AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

Опис

Реєструє примітив грані в топології та отримує його ідентифікатор.

Для новододаної грані краї, що утворюють її межі, та краї, що містяться в грані, будуть оновлені, щоб мати правильні значення в полях left_face та right_face. Ізольовані вузли, що містяться в грані, також будуть оновлені, щоб мати правильне значення поля containing_face.

[Note]

Ця функція не використовує і не встановлює поля next_left_edge та next_right_edge таблиці ребер.

Припускається, що топологія цілі є правильною (не містить самоперетинаючих ребер). Виникає виняток, якщо: Межа багатокутника не повністю визначена існуючими ребрами або багатокутник перетинає існуючу грань.

Якщо геометрія apolygon вже існує як грань, то: якщо force_new має значення false (за замовчуванням), повертається ідентифікатор існуючої грані; якщо force_new має значення true, новому зареєстрованому грані присвоюється новий ідентифікатор.

[Note]

Коли виконується нова реєстрація існуючої грані (force_new=true), не буде виконано жодних дій для вирішення висячих посилань на існуючу грань у таблицях ребер, вузлів та відносин, а також не буде оновлено поле MBR існуючого запису грані. Це має зробити викликаючий.

[Note]

Геометрія 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.

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.

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

Name

ST_Simplify — Повертає "спрощену" версію геометрії заданої TopoGeometry за допомогою алгоритму Дугласа-Пеукера.

Synopsis

geometry ST_Simplify(topogeometry tg, float8 tolerance);

Опис

Повертає "спрощену" геометрію заданої TopoGeometry, використовуючи алгоритм Дугласа-Пеукера для кожного компонента ребра.

[Note]

Повернена геометрія може бути неспрощеною або недійсна.

Розділення граней компонентів може допомогти зберегти простоту/дійсність.

Виконується модулем GEOS.

Доступність: 2.1.0

Див. також

Геометрія ST_Simplify, ST_IsSimple, ST_IsValid, ST_ModEdgeSplit


Name

RemoveUnusedPrimitives — Видаляє примітивні елементи топології, які не потрібні для визначення існуючих об'єктів TopoGeometry.

Synopsis

bigint RemoveUnusedPrimitives(text topology_name, geometry bbox);

Опис

Знаходить всі примітиви (вузли, ребра, грані), які не є строго необхідними для представлення існуючих об'єктів TopoGeometry, і видаляє їх, зберігаючи топологічну валідність (зв'язки ребер, маркування граней) і зайнятість простору TopoGeometry.

Нові примітивні ідентифікатори не створюються, а існуючі примітиви розширюються, щоб включити об'єднані грані (після видалення ребер) або відновлені ребра (після видалення вузлів).

Доступність: 3.3.0

Див. також

ST_ModEdgeHeal, ST_RemEdgeModFace

9.10. Конструктори топогеометрії

Abstract

Цей розділ присвячений функціям топології для створення нових топогеометрій.

  • CreateTopoGeom — Створює новий об'єкт топографічної геометрії з масиву топографічних елементів - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection
  • toTopoGeom — Перетворює просту геометрію в топологічну геометрію.
  • TopoElementArray_Agg — Повертає topoelementarray для набору масивів element_id, type (topoelements).
  • TopoElement — Перетворює топогеометрію в топоелемент.

Name

CreateTopoGeom — Створює новий об'єкт топографічної геометрії з масиву топографічних елементів - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection

Synopsis

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);

Опис

Створює об'єкт топогеометрії для шару, позначеного layer_id, і реєструє його в таблиці відносин у схемі toponame.

tg_type є цілим числом: 1:[multi]point (точкова), 2:[multi]line (лінійна), 3:[multi]poly (площа), 4:колекція. layer_id є ідентифікатором шару в таблиці topology.layer.

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

Пропуск масиву компонентів призводить до створення порожнього об'єкта TopoGeometry.

Доступність: 1.1

Приклади: Форма з існуючих ребер

Створіть топогеометрію в схемі ri_topo для шару 2 (наш ri_roads) типу (2) LINE для першого ребра (ми завантажили в ST_CreateTopoGeo).

INSERT INTO ri.ri_roads(road_name, topo) VALUES('Unknown', topology.CreateTopoGeom('ri_topo',2,2,'{{1,2}}'::topology.topoelementarray);

Приклади: Перетворення плоскої геометрії в найкраще наближену топогеометрію

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

Create the topogeometry column.

SELECT topology.AddTopoGeometryColumn(
                'topo_boston',
                'boston', 'blockgroups', 'topo', 'POLYGON');

1

Update the column assuming everything is perfectly aligned with the edges.

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.

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))
        OR
 (  ST_Intersects(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id))
            AND ST_Area(ST_Intersection(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id) ) ) >
                ST_Area(topology.ST_GetFaceGeometry('topo_boston', f.face_id))*0.5
                )
            GROUP BY b.gid) As foo
WHERE foo.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.

UPDATE boston.blockgroups SET new_geom = topo::geometry;

Name

toTopoGeom — Перетворює просту геометрію в топологічну геометрію.

Synopsis

topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance=-1);

topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance=-1);

Опис

Перетворює просту геометрію в 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.

SELECT topology.CreateTopology('topo_boston_test', 2249);

Create a new table.

CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));

Add a topogeometry column to the new table.

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.

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.

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.

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.

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
  );
        

Name

TopoElementArray_Agg — Повертає topoelementarray для набору масивів element_id, type (topoelements).

Synopsis

topoelementarray TopoElementArray_Agg(topoelement set tefield);

Опис

Використовується для створення TopoElementArray з набору TopoElement.

Доступність: 2.0.0

Приклади

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


Name

TopoElement — Перетворює топогеометрію в топоелемент.

Synopsis

topoelement TopoElement(topogeometry topo);

Опис

Перетворює TopoGeometry на TopoElement.

Доступність: 3.4.0

Приклади

Це повністю автономний робочий процес

Return the TopoElement representation of each topogeometry.

SELECT TopoElement(topo)
FROM neighborhoods;

Use a cast to aggregate topogeometries into a TopoElementArray.

SELECT topology.TopoElementArray_Agg(topo::topoelement)
FROM neighborhoods
GROUP BY city;

9.11. Редактори топогеометрії

Abstract

Цей розділ охоплює функції топології для редагування існуючих топогеометрій.

  • clearTopoGeom — Очищає вміст геометрії топографії.
  • TopoGeom_addElement — Додає елемент до визначення TopoGeometry.
  • TopoGeom_remElement — Видаляє елемент з визначення TopoGeometry.
  • TopoGeom_addTopoGeom — Додає елемент TopoGeometry до визначення іншого TopoGeometry.
  • toTopoGeom — Додає геометричну фігуру до існуючої топографічної геометрії.

Name

clearTopoGeom — Очищає вміст геометрії топографії.

Synopsis

topogeometry clearTopoGeom(topogeometry topogeom);

Опис

Очищає вміст TopoGeometry, перетворюючи його на порожній. Найчастіше використовується разом з toTopoGeom для заміни форми існуючих об'єктів та будь-яких залежних об'єктів на вищих ієрархічних рівнях.

Доступність: 2.1

Приклади

Shrink all TopoGeometry polygons by 10 meters.

UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);

Див. також

toTopoGeom


Name

TopoGeom_addElement — Додає елемент до визначення TopoGeometry.

Synopsis

topogeometry TopoGeom_addElement(topogeometry tg, topoelement el);

Опис

Додає TopoElement до визначення об'єкта TopoGeometry. Не видає помилку, якщо елемент вже є частиною визначення.

Доступність: 2.3

Приклади

Add edge 5 to TopoGeometry tg.

UPDATE mylayer SET tg = TopoGeom_addElement(tg, '{5,2}');

Name

TopoGeom_remElement — Видаляє елемент з визначення TopoGeometry.

Synopsis

topogeometry TopoGeom_remElement(topogeometry tg, topoelement el);

Опис

Видаляє TopoElement з визначення об'єкта TopoGeometry.

Доступність: 2.3

Приклади

Remove face 43 from TopoGeometry tg.

UPDATE mylayer SET tg = TopoGeom_remElement(tg, '{43,3}');

Name

TopoGeom_addTopoGeom — Додає елемент TopoGeometry до визначення іншого TopoGeometry.

Synopsis

topogeometry TopoGeom_addTopoGeom(topogeometry tgt, topogeometry src);

Опис

Додає елементи TopoGeometry до визначення іншого TopoGeometry, можливо змінюючи його кешований тип (атрибут type) на колекцію, якщо це необхідно для збереження всіх елементів в об'єкті-джерелі.

Два об'єкти TopoGeometry повинні бути визначені відповідно до *однієї і тієї ж* топології, а якщо вони визначені ієрархічно, то повинні складатися з елементів одного і того ж дочірнього шару.

Доступність: 3.2

Приклади

Set an overall TopoGeometry value to be composed of all elements from specific TopoGeometry values.

UPDATE mylayer SET tg_overall = TopoGeom_addTopoGeom(
    TopoGeom_addTopoGeom(
        clearTopoGeom(tg_overall),
        tg_specific1
    ),
    tg_specific2
);
                                

Name

toTopoGeom — Додає геометричну фігуру до існуючої топографічної геометрії.

Опис

Див. toTopoGeom.

9.12. Доступ до топогеометрії

  • GetTopoGeomElementArray — Повертає topoelementarray (масив топоелементів), що містить топологічні елементи та тип заданої TopoGeometry (примітивні елементи).
  • GetTopoGeomElements — Повертає набір об'єктів topoelement, що містять топологічні element_id,element_type заданої TopoGeometry (примітивні елементи).
  • ST_SRID — Повертає ідентифікатор просторової прив'язки для топогеометрії.

Name

GetTopoGeomElementArray — Повертає topoelementarray (масив топоелементів), що містить топологічні елементи та тип заданої TopoGeometry (примітивні елементи).

Synopsis

topoelementarray GetTopoGeomElementArray(varchar toponame, integer layer_id, bigint tg_id);

topoelementarray GetTopoGeomElementArray(topogeometry tg);

Опис

Повертає TopoElementArray, що містить топологічні елементи та тип заданої TopoGeometry (примітивні елементи). Це схоже на GetTopoGeomElements, за винятком того, що повертає елементи у вигляді масиву, а не набору даних.

tg_id — ідентифікатор топогеометрії об'єкта топогеометрії в топології в шарі, позначеному layer_id в таблиці topology.layer.

Доступність: 1.1

Приклади


Name

GetTopoGeomElements — Повертає набір об'єктів topoelement, що містять топологічні element_id,element_type заданої TopoGeometry (примітивні елементи).

Synopsis

setof topoelement GetTopoGeomElements(varchar toponame, integer layer_id, bigint tg_id);

setof topoelement GetTopoGeomElements(topogeometry tg);

Опис

Повертає набір element_id,element_type (topoelements), що відповідає елементам примітивної топології TopoElement (1: вузли, 2: ребра, 3: грані), з яких складається заданий об'єкт топогеометрії в схемі toponame.

tg_id — ідентифікатор топогеометрії об'єкта топогеометрії в топології в шарі, позначеному layer_id в таблиці topology.layer.

Доступність: 2.0.0

Приклади


Name

ST_SRID — Повертає ідентифікатор просторової прив'язки для топогеометрії.

Synopsis

integer ST_SRID(topogeometry tg);

Опис

Повертає ідентифікатор просторової прив'язки для ST_Geometry, як визначено в таблиці spatial_ref_sys. Section 4.5, “Spatial Reference Systems”

[Note]

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

Доступність: 3.2.0

This method implements the SQL/MM specification. SQL-MM 3: 14.1.5

Приклади

SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));
                4326
                

9.13. Вихідні дані TopoGeometry

  • AsGML — Повертає GML-представлення топогеометрії.
  • AsTopoJSON — Повертає представлення топогеометрії у форматі TopoJSON.

Name

AsGML — Повертає GML-представлення топогеометрії.

Synopsis

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);

Опис

Повертає GML-представлення топогеометрії у форматі GML3. Якщо не вказано nsprefix_in, використовується gml. Передайте порожній рядок для nsprefix, щоб отримати некваліфікований простір імен. Параметри точності (за замовчуванням: 15) та опції (за замовчуванням 1), якщо вони вказані, передаються без змін до базового виклику ST_AsGML.

Параметр visitedTable, якщо він вказаний, використовується для відстеження відвіданих елементів Node та Edge, щоб використовувати перехресні посилання (xlink:xref) замість дублювання визначень. Таблиця повинна мати (принаймні) два цілочисельні поля: 'element_type' та 'element_id'. Користувач, який викликає функцію, повинен мати права на читання та запис у вказаній таблиці. Для найкращої продуктивності слід визначити індекс для element_type та element_id у такому порядку. Такий індекс буде створено автоматично шляхом додавання унікального обмеження до полів. Приклад:

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

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>

Те саме завдання, що й попереднє, але без простору імен

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


Name

AsTopoJSON — Повертає представлення топогеометрії у форматі TopoJSON.

Synopsis

text AsTopoJSON(topogeometry tg, regclass edgeMapTable);

Опис

Повертає представлення топогеометрії у форматі TopoJSON. Якщо edgeMapTable не є нульовим, воно буде використовуватися як відображення ідентифікаторів ребер на індекси дуг для пошуку/зберігання. Це необхідно для того, щоб у кінцевому документі можна було отримати компактний масив "дуг".

У таблиці, якщо вона надана, має бути поле "arc_id" типу "serial" та "edge_id" типу integer; код буде запитувати таблицю щодо "edge_id", тому рекомендується додати індекс до цього поля.

[Note]

Індекси дуг у вихідних даних TopoJSON починаються з 0, але в таблиці "edgeMapTable" вони починаються з 1.

Повний документ TopoJSON повинен містити, крім фрагментів, повернутих цією функцією, фактичні дуги та деякі заголовки. Див. специфікацію TopoJSON.

Доступність: 2.1.0

Покращено: у версії 2.2.1 додано підтримку вхідних сигналів puntal

Див. також

ST_AsGeoJSON

Приклади

Create a temporary edge map for the TopoJSON output.

CREATE TEMP TABLE edgemap(arc_id serial, edge_id int unique);

Build the TopoJSON header, objects, arcs, and footer.

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. Топологія Просторові відносини

Abstract

У цьому розділі перелічено функції топології, що використовуються для перевірки взаємозв'язків між топогеометріями та топологічними примітивами

  • Equals — Повертає true, якщо дві топогеометрії складаються з однакових топологічних примітивів.
  • Intersects — Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.

Name

Equals — Повертає true, якщо дві топогеометрії складаються з однакових топологічних примітивів.

Synopsis

boolean Equals(topogeometry tg1, topogeometry tg2);

Опис

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

[Note]

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

Доступність: 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.

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


Name

Intersects — Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.

Synopsis

boolean Intersects(topogeometry tg1, topogeometry tg2);

Опис

Повертає true, якщо будь-яка пара примітивів з двох топогеометрій перетинаються.

[Note]

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

Доступність: 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.

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. Приклад використання:

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).

Chapter 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.

[Note]

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:

# -s use srid 4326
# -I create spatial index
# -C use standard raster constraints
# -M vacuum analyze after load
# *.tif load all these files
# -F include a filename column in the raster table
# -t tile the output 100x100
# public.demelevation load into this table
raster2pgsql -s 4326 -I -C -M -F -t 100x100 *.tif public.demelevation 
> elev.sql

# -d connect to this database
# -f read this file after connecting
psql -d gisdb -f elev.sql
[Note]

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:

raster2pgsql -s 4326 -I -C -M *.tif -F -t 100x100 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.

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
# Get a list of raster types supported:
raster2pgsql -G

The -G commands 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:

    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:

    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.

    [Note]

    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.

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.

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.

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.

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 Section 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.

[Note]

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 below using

http://mywebserver/test_raster.php?srid=2249

to get the raster image in Massachusetts state plane feet.


<?php
/** contents of test_raster.php **/
$conn_str ='dbname=mydb host=localhost port=5432 user=myuser password=mypwd';
$dbconn = pg_connect($conn_str);
header('Content-Type: image/png');
/**If a particular projection was requested use it otherwise use mass state plane meters **/
if (!empty( $_REQUEST['srid'] ) &amp;&amp; is_numeric( $_REQUEST['srid']) ){
                $input_srid = intval($_REQUEST['srid']);
}
else { $input_srid = 26986; }
/** The set bytea_output ensures bytea values are returned using escape format. **/
$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 a PHP request stream that can then be embedded in an img src html 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 Section 10.3.1, “PHP Example Outputting using ST_AsPNG in concert with other raster functions” except implemented in C#.

You would call the below using

http://mywebserver/TestRaster.ashx?srid=2249

to get the raster image in Massachusetts state plane feet.

 -- web.config connection string section --
<connectionStrings>
    <add name="DSN"
        connectionString="server=localhost;database=mydb;Port=5432;User Id=myuser;password=mypwd"/>
</connectionStrings>
// Code for TestRaster.ashx
<%@ 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 {
                    using (NpgsqlConnection conn = new NpgsqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DSN"].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 using a command something like:

set env CLASSPATH .:..\postgresql-9.0-801.jdbc4.jar
javac SaveQueryImage.java
jar cfm SaveQueryImage.jar Manifest.txt *.class

And call it from the command-line with something like

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 --
Class-Path: postgresql-9.0-801.jdbc4.jar
Main-Class: SaveQueryImage
// Code for SaveQueryImage.java
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.

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
-- note the postgresql daemon account needs to have write access to folder
-- this echos back the file names created;
 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 first launch your psql commandline connected to your database.

Unlike the python approach, this approach creates the file on your local computer.

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);
-- you'll get an output something like --
   oid   | num_bytes
---------+-----------
 2630819 |     74860

-- next note the oid and do this replacing the c:/test.png to file path location
-- on your local computer
 \lo_export 2630819 'C:/temp/aerial_samp.png'

-- this deletes the file from large object storage on db
SELECT lo_unlink(2630819);
                        

Chapter 11. Растрова довідка

raster — це тип PostGIS для зберігання та аналізу растрових даних.

Для завантаження растрів з растрових файлів див. Section 10.1, “Loading and Creating Rasters”

Деякі приклади в цьому довіднику використовують растрову таблицю фіктивних даних, створену за допомогою наступного коду:

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. Типи даних растрової підтримки

Abstract

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

  • geomval — Просторовий тип даних із двома полями — geom (містить об’єкт геометрії) та val (містить значення пікселя з растрового каналу у форматі double precision).
  • addbandarg — Складений тип, що використовується як вхідний параметр у функції ST_AddBand для визначення атрибутів та початкового значення нового каналу.
  • rastbandarg — Композитний тип, який використовується, коли потрібно виразити растр і індекс каналу цього растра.
  • raster — растровий тип просторових даних.
  • reclassarg — Композитний тип, що використовується як вхідні дані для функції ST_Reclass, яка визначає поведінку перекласифікації.
  • summarystats — Композитний тип, що повертається функціями ST_SummaryStats та ST_SummaryStatsAgg.
  • unionarg — Композитний тип, що використовується як вхідні дані для функції ST_Union, яка визначає смуги, що підлягають обробці, та поведінку операції UNION.

Name

geomval — Просторовий тип даних із двома полями — geom (містить об’єкт геометрії) та val (містить значення пікселя з растрового каналу у форматі double precision).

Опис

geomval — це складений тип даних, що складається з геометричного об’єкта, на який посилається поле .geom, та val — числа з подвійною точністю, яке представляє значення пікселя в певній геометричній точці в растровому каналі. Він використовується функціями ST_DumpAsPolygon та сімейством функцій перетину растрових даних як вихідний тип для розбиття растрового шару на геометричні полігони.


Name

addbandarg — Складений тип, що використовується як вхідний параметр у функції ST_AddBand для визначення атрибутів та початкового значення нового каналу.

Опис

Складений тип, що використовується як вхідний параметр у функції ST_AddBand для визначення атрибутів та початкового значення нового каналу

index integer

Значення з відліком від 1, яке вказує позицію, куди буде додано новий шар серед каналів растра. Якщо вказано NULL, новий канал буде додано в кінець списку шарів растра.

pixeltype text

Тип пікселя нового каналу. Один із визначених типів пікселів, описаних у ST_BandPixelType.

initialvalue double precision

Початкове значення, яке буде встановлено для всіх пікселів нового каналу.

nodataval double precision

Значення NODATA для нового каналу. Якщо встановлено NULL, новий канал не матиме призначеного значення NODATA.

Див. також

ST_AddBand


Name

rastbandarg — Композитний тип, який використовується, коли потрібно виразити растр і індекс каналу цього растра.

Опис

Комбінований тип, який використовується, коли потрібно виразити растр і індекс каналу цього растру.

rast raster

Растр, про який йде мова/

nband integer

Значення з відліком від 1, що вказує на конкретний канал растра


Name

raster — растровий тип просторових даних.

Опис

Растр — це тип просторових даних, що використовується для представлення растрових даних, таких як дані, імпортовані з файлів JPEG, TIFF, PNG, цифрових моделей рельєфу. Кожен растр має 1 або більше каналів, кожен з яких має набір значень пікселів. Растри можуть бути геореферентними.

[Note]

Вимагає компіляції PostGIS з підтримкою GDAL. Наразі растри можуть бути неявним чином перетворені на геометричний тип, але перетворення повертає ST_ConvexHullрастра. Це автоматичне перетворення може бути видалене в найближчому майбутньому, тому не покладайтеся на нього.

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

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

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

Name

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

Опис

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

nband integer

Номер каналу, який потрібно перекласифікувати.

reclassexpr text

вираз діапазону, що складається з розділених комами відображень діапазону:map_range. : для визначення відображення, яке визначає, як відображати старі значення діапазону на нові значення діапазону. ( означає >, ) означає менше, ] < або дорівнює, [ означає > або дорівнює

1. [a-b] = a <= x <= b

2. (a-b] = a < x <= b

3. [a-b) = a <= x < b

4. (a-b) = a < x < b

(нотація є необов'язковою, тому a-b означає те саме, що (a-b)

pixeltype text

Один із визначених типів пікселів, як описано в ST_BandPixelType

nodataval double precision

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

Приклад: Перекласифікуйте діапазон 2 як 8BUI, де 255 є значенням nodata

SELECT ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255)::reclassarg;

Приклад: Перекласифікуйте діапазон 1 як 1BB і не визначайте значення nodata

SELECT ROW(1, '0-100]:0, (100-255:1', '1BB', NULL)::reclassarg;

Див. також

ST_Reclass


Name

summarystats — Композитний тип, що повертається функціями ST_SummaryStats та ST_SummaryStatsAgg.

Опис

Композитний тип, що повертається функціями ST_SummaryStats та ST_SummaryStatsAgg.

лічильник цілого числа

Кількість пікселів, що враховуються для зведеної статистики.

сума подвійної точності

Сума всіх підрахованих значень пікселів.

середня подвійна точність

Арифметичне середнє всіх підрахованих значень пікселів.

stddev подвійна точність

Стандартне відхилення всіх підрахованих значень пікселів.

мінімальна подвійна точність

Мінімальне значення підрахованих значень пікселів.

максимальна подвійна точність

Максимальне значення підрахованих значень пікселів.


Name

unionarg — Композитний тип, що використовується як вхідні дані для функції ST_Union, яка визначає смуги, що підлягають обробці, та поведінку операції UNION.

Опис

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

nband integer

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

uniontype text

Тип операції UNION. Один із визначених типів, описаних у 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 — Створити версію заданого растрового покриття зі зниженою роздільною здатністю.

Name

AddRasterConstraints — Додає обмеження растру до завантаженої таблиці растру для певного стовпця, що обмежує просторове посилання, масштабування, розмір блоку, вирівнювання, смуги, тип смуги та прапорець, що позначає, чи стовпець растру регулярно блокується. Таблиця повинна бути завантажена даними, щоб обмеження могли бути виведені. Повертає значення true, якщо налаштування обмеження було виконано, і видає повідомлення в іншому випадку.

Synopsis

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 );

Опис

Створює обмеження для стовпця растра, які використовуються для відображення інформації в каталозі растра raster_columns. rastschema — це назва схеми таблиці, в якій знаходиться таблиця. srid має бути цілим числом, що посилається на запис у таблиці SPATIAL_REF_SYS.

Завантажувач raster2pgsql використовує цю функцію для реєстрації растрових таблиць

Дійсні імена обмежень для передачі: детальнішу інформацію див. у Section 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

  • Більше — все, що вказано як вхідні дані для вищезазначених функцій

[Note]

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

[Note]

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

Доступність: 2.0.0

Приклади: Застосувати всі можливі обмеження до стовпця на основі даних

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);


-- verify if registered correctly in the raster_columns view --
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}

Приклади: Застосувати одне обмеження

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

Name

DropRasterConstraints — Видаляє обмеження PostGIS растра, які посилаються на стовпець таблиці растра. Корисно, якщо потрібно перезавантажити дані або оновити дані стовпця растра.

Synopsis

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);

Опис

Видаляє обмеження растра PostGIS, що посилаються на стовпець таблиці растра, які були додані за допомогою AddRasterConstraints. Корисно, якщо вам потрібно завантажити більше даних або оновити дані стовпця растра. Вам не потрібно це робити, якщо ви хочете позбутися таблиці растра або стовпця растра.

Щоб скинути растрову таблицю, використовуйте стандартну команду

DROP TABLE mytable

Щоб видалити тільки стовпець растрових даних і залишити решту таблиці, використовуйте стандартний SQL

ALTER TABLE mytable DROP COLUMN rast

таблиця зникне з каталогу raster_columns, якщо стовпець або таблиця будуть видалені. Однак, якщо будуть видалені тільки обмеження, стовпець растра все одно буде вказаний у каталозі raster_columns, але крім імені стовпця та таблиці про нього не буде жодної іншої інформації.

Доступність: 2.0.0

Приклади

SELECT DropRasterConstraints ('myrasters','rast');
----RESULT output ---
t

-- verify change in raster_columns --
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


Name

AddOverviewConstraints — Позначте стовпець растрових даних як огляд іншого стовпця.

Synopsis

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);

Опис

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

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

Якщо параметри ovschema та refschema пропущені, буде використана перша таблиця, знайдена під час сканування search_path.

Доступність: 2.0.0

Приклади

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);

-- verify if registered correctly in the raster_overviews view --
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)

Name

DropOverviewConstraints — Зніміть позначку стовпця растрового зображення, щоб він не був представленням іншого.

Synopsis

boolean DropOverviewConstraints(name ovschema, name ovtable, name ovcolumn);

boolean DropOverviewConstraints(name ovtable, name ovcolumn);

Опис

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

Якщо параметр ovschema пропущено, буде використано першу таблицю, знайдено під час сканування search_path.

Доступність: 2.0.0


Name

PostGIS_GDAL_Version — Повідомляє про версію бібліотеки GDAL, яка використовується PostGIS.

Synopsis

text PostGIS_GDAL_Version();

Опис

Повідомляє про версію бібліотеки GDAL, яка використовується PostGIS. Також перевіряє і повідомляє, чи може GDAL знайти свої файли даних.

Приклади

SELECT PostGIS_GDAL_Version();
GDAL 1.11dev, released 2013/04/13

Див. також

postgis.gdal_datapath


Name

PostGIS_Raster_Lib_Build_Date — Повідомляє дату створення повної растрової бібліотеки.

Synopsis

text PostGIS_Raster_Lib_Build_Date();

Опис

Звіти про дату створення растру

Приклади

SELECT PostGIS_Raster_Lib_Build_Date();
2010-04-28 21:15:10

Див. також

PostGIS_Raster_Lib_Version


Name

PostGIS_Raster_Lib_Version — Повідомляє про повну растрову версію та інформацію про конфігурацію збірки.

Synopsis

text PostGIS_Raster_Lib_Version();

Опис

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

Приклади

SELECT PostGIS_Raster_Lib_Version();
2.0.0

Див. також

PostGIS_Lib_Version


Name

ST_GDALDrivers — Повертає список растрових форматів, що підтримуються PostGIS через GDAL. Тільки формати з can_write=True можуть використовуватися ST_AsGDALRaster.

Synopsis

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);

Опис

Повертає список растрових форматів 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.

Приклади: Список драйверів

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

Приклад: Список опцій для кожного драйвера

Output the create options XML column of JPEG as a table. These creator options can be used in the ST_AsGDALRaster options argument.

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 returns raw XML output for GeoTIFF creator options.


SELECT create_options
FROM ST_GDALDrivers()
WHERE short_name = 'GTiff';

<CreationOptionList>
    <Option name="COMPRESS" type="string-select">
        <Value
>NONE</Value>
        <Value
>LZW</Value>
        <Value
>PACKBITS</Value>
        <Value
>JPEG</Value>
        <Value
>CCITTRLE</Value>
        <Value
>CCITTFAX3</Value>
        <Value
>CCITTFAX4</Value>
        <Value
>DEFLATE</Value>
    </Option>
    <Option name="PREDICTOR" type="int" description="Predictor Type"/>
    <Option name="JPEG_QUALITY" type="int" description="JPEG quality 1-100" default="75"/>
    <Option name="ZLEVEL" type="int" description="DEFLATE compression level 1-9" default="6"/>
    <Option name="NBITS" type="int" description="BITS for sub-byte files (1-7), sub-uint16 (9-15), sub-uint32 (17-31)"/>
    <Option name="INTERLEAVE" type="string-select" default="PIXEL">
        <Value
>BAND</Value>
        <Value
>PIXEL</Value>
    </Option>
    <Option name="TILED" type="boolean" description="Switch to tiled format"/>
    <Option name="TFW" type="boolean" description="Write out world file"/>
    <Option name="RPB" type="boolean" description="Write out .RPB (RPC) file"/>
    <Option name="BLOCKXSIZE" type="int" description="Tile Width"/>
    <Option name="BLOCKYSIZE" type="int" description="Tile/Strip Height"/>
    <Option name="PHOTOMETRIC" type="string-select">
        <Value
>MINISBLACK</Value>
        <Value
>MINISWHITE</Value>
        <Value
>PALETTE</Value>
        <Value
>RGB</Value>
        <Value
>CMYK</Value>
        <Value
>YCBCR</Value>
        <Value
>CIELAB</Value>
        <Value
>ICCLAB</Value>
        <Value
>ITULAB</Value>
    </Option>
    <Option name="SPARSE_OK" type="boolean" description="Can newly created files have missing blocks?" default="FALSE"/>
    <Option name="ALPHA" type="boolean" description="Mark first extrasample as being alpha"/>
    <Option name="PROFILE" type="string-select" default="GDALGeoTIFF">
        <Value
>GDALGeoTIFF</Value>
        <Value
>GeoTIFF</Value>
        <Value
>BASELINE</Value>
    </Option>
    <Option name="PIXELTYPE" type="string-select">
        <Value
>DEFAULT</Value>
        <Value
>SIGNEDBYTE</Value>
    </Option>
    <Option name="BIGTIFF" type="string-select" description="Force creation of BigTIFF file">
        <Value
>YES</Value>
        <Value
>NO</Value>
        <Value
>IF_NEEDED</Value>
        <Value
>IF_SAFER</Value>
    </Option>
    <Option name="ENDIANNESS" type="string-select" default="NATIVE" description="Force endianness of created file. For DEBUG purpose mostly">
        <Value
>NATIVE</Value>
        <Value
>INVERTED</Value>
        <Value
>LITTLE</Value>
        <Value
>BIG</Value>
    </Option>
    <Option name="COPY_SRC_OVERVIEWS" type="boolean" default="NO" description="Force copy of overviews of source dataset (CreateCopy())"/>
</CreationOptionList>

-- Output the create options XML column for GTiff as a table  --
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,
       array_to_string(xpath('Value/text()', g.opt),', ') As vals
FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::xml)) As opt
FROM  ST_GDALDrivers()
WHERE short_name = 'GTiff') As g;

       oname        |     otype     |                               descrip                                |                                   vals
--------------------+---------------+----------------------------------------------------------------------+---------------------------------------------------------------------------
 COMPRESS           | string-select |                                                                      | NONE, LZW, PACKBITS, JPEG, CCITTRLE, CCITTFAX3, CCITTFAX4, DEFLATE
 PREDICTOR          | int           | Predictor Type                                                       |
 JPEG_QUALITY       | int           | JPEG quality 1-100                                                   |
 ZLEVEL             | int           | DEFLATE compression level 1-9                                        |
 NBITS              | int           | BITS for sub-byte files (1-7), sub-uint16 (9-15), sub-uint32 (17-31) |
 INTERLEAVE         | string-select |                                                                      | BAND, PIXEL
 TILED              | boolean       | Switch to tiled format                                               |
 TFW                | boolean       | Write out world file                                                 |
 RPB                | boolean       | Write out .RPB (RPC) file                                            |
 BLOCKXSIZE         | int           | Tile Width                                                           |
 BLOCKYSIZE         | int           | Tile/Strip Height                                                    |
 PHOTOMETRIC        | string-select |                                                                      | MINISBLACK, MINISWHITE, PALETTE, RGB, CMYK, YCBCR, CIELAB, ICCLAB, ITULAB
 SPARSE_OK          | boolean       | Can newly created files have missing blocks?                         |
 ALPHA              | boolean       | Mark first extrasample as being alpha                                |
 PROFILE            | string-select |                                                                      | GDALGeoTIFF, GeoTIFF, BASELINE
 PIXELTYPE          | string-select |                                                                      | DEFAULT, SIGNEDBYTE
 BIGTIFF            | string-select | Force creation of BigTIFF file                                       | YES, NO, IF_NEEDED, IF_SAFER
 ENDIANNESS         | string-select | Force endianness of created file. For DEBUG purpose mostly           | NATIVE, INVERTED, LITTLE, BIG
 COPY_SRC_OVERVIEWS | boolean       | Force copy of overviews of source dataset (CreateCopy())             |
(19 rows)


Name

UpdateRasterSRID — Змінити SRID всіх растрів у вказаній користувачем колонці та таблиці.

Synopsis

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);

Опис

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

[Note]

Ця функція не впливає на дані (значення пікселів смуги) растрів. Змінюються лише метадані растра.

Доступність: 2.1.0

Див. також

UpdateGeometrySRID


Name

ST_CreateOverview — Створити версію заданого растрового покриття зі зниженою роздільною здатністю.

Synopsis

regclass ST_CreateOverview(regclass tab, name col, int factor, text algo='NearestNeighbor');

Опис

Створіть оглядову таблицю з передискретизованими плитками з вихідної таблиці. Вихідні плитки матимуть той самий розмір, що й вхідні, і покриватимуть ту саму просторову площу з меншою роздільною здатністю (розмір пікселя буде 1/factor від оригіналу в обох напрямках).

Таблиця огляду буде доступна в каталозі raster_overviews і матиме обмеження растрового формату.

Варіанти алгоритму: 'NearestNeighbor', 'Bilinear', 'Cubic', 'CubicSpline' та 'Lanczos'. Докладнішу інформацію див. у розділі: Методи передискретизації GDAL Warp.

Доступність: 2.2.0

Приклад

Вихідна якість загалом краща, але формат продукту створюється повільніше

SELECT ST_CreateOverview('mydata.mytable'::regclass, 'rast', 2, 'Lanczos');

Вивід для швидшої обробки найближчого сусіда за замовчуванням

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.

Name

ST_AddBand — Повертає растр з новим каналом (каналами) заданого типу, доданим із заданим початковим значенням у заданому місці індексу. Якщо індекс не вказано, діапазон додається в кінець.

Synopsis

(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);

Опис

Повертає растр з новим каналом, доданим у заданому положенні (індексі), заданого типу, заданого початкового значення та заданого значення 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.

Приклади: Односмуговий новий канал

This example adds another 8-bit unsigned integer band with pixels initialized to 200.

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.

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[]
     )
    );

-- output meta data of raster bands to verify all is right --
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.

SELECT  (rmd).width, (rmd).height, (rmd).numbands
FROM (SELECT ST_MetaData(rast) As rmd
    FROM dummy_rast WHERE rid = 10) AS foo;
upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+------------+------------+-------+-------+------+----------
          0 |          0 |   100 |    100 |      1 |     -1 |     0 |     0 |   0 |        2
                

Приклади: кілька нових каналів

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.

SELECT
    mouse,
    ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1) As rast
FROM mice_studies
GROUP BY mouse;
                

Приклади: Новий канал Out-db

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

Name

ST_AsRaster — Перетворює геометрію PostGIS у растр PostGIS.

Synopsis

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);

Опис

Перетворює геометрію 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.

[Note]

Поки що не здатний відтворювати складні типи геометрії, такі як криві, TINS та PolyhedralSurfaces, але повинен бути здатним до цього, як тільки GDAL зможе це робити.

Приклади: Вихідні геометрії у вигляді файлів PNG

чорне коло

This example outputs a black circle occupying 150 by 150 pixels.

SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150));

приклад з буфера, відтвореного лише за допомогою PostGIS

This example maps bands to RGB channels, producing the teal value (118,154,118).

SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel'),
            200,200,ARRAY['8BUI', '8BUI', '8BUI'], ARRAY[118,154,118], ARRAY[0,0,0]));

Name

ST_AsRasterAgg — Агрегація. Перетворює геометрії PostGIS у новий растр.

Synopsis

raster ST_AsRasterAgg(geometry geom, double precision val, raster ref, text pixeltype, double precision nodataval, text uniontype, boolean touched);

Опис

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

Доступність: 3.6.0

Приклади

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)

Name

ST_Band — Повертає один або декілька каналів існуючого растру як новий растр. Корисно для створення нових растрів на основі існуючих.

Synopsis

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=,);

Опис

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

[Warning]

Для 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.

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.

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.

SELECT ST_NumBands(ST_Band(rast, ARRAY[2,3])) As num_bands
    FROM dummy_rast
WHERE rid=2;
                    
2

оригінал (стовпчик rast)

dupe_band

sing_band

--Make a new raster with 2nd band of original and 1st band repeated twice,
and another with just the third band
SELECT rast, ST_Band(rast, ARRAY[2,1,1]) As dupe_band,
    ST_Band(rast, 3) As sing_band
FROM samples.than_chunked
WHERE rid=35;
                    

Name

ST_MakeEmptyCoverage — Покрийте геореференційну область сіткою порожніх растрових плиток.

Synopsis

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);

Опис

Створіть набір растрових плиток за допомогою ST_MakeEmptyRaster. Розмір сітки становить width та height. Розмір плитки становить tilewidth та tileheight. Область, що охоплюється геореференцією, простягається від верхнього лівого кута (upperleftx, upperlefty) до нижнього правого кута (upperleftx + width * scalex, upperlefty + height * scaley).

[Note]

Зверніть увагу, що scaley зазвичай є від'ємним для растрів, а scalex — додатним. Отже, нижній правий кут матиме нижче значення y і вище значення x, ніж верхній лівий кут.

Доступність: 2.4.0

Базові приклади

Створіть 16 плиток у сітці 4x4, щоб покрити область WGS84 від верхнього лівого кута (22, 77) до нижнього правого кута (55, 33).

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


Name

ST_MakeEmptyRaster — Повертає порожній растр (без каналів) заданих розмірів (ширина і висота), верхнього лівого кута X і Y, розміру пікселя і повороту (scalex, scaley, skewx і skewy) та системи координат (srid). Якщо передано растр, повертає новий растр з тим самим розміром, вирівнюванням та SRID. Якщо srid не вказано, просторова система координат встановлюється на невідому (0).

Synopsis

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);

Опис

Повертає порожній растр (без каналу) заданих розмірів (ширина та висота) з геореференцією в просторових (або світових) координатах з верхнім лівим X (upperleftx), верхнім лівим Y (upperlefty), розміром пікселя та обертанням (scalex, scaley, skewx та skewy) і системи координат (srid).

В останній версії для визначення розміру пікселя (pixelsize) використовується єдиний параметр. scalex встановлюється на значення цього аргументу, а scaley — на від'ємне значення цього аргументу. skewx і skewy встановлюються на 0.

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

Якщо srid не вказано, за замовчуванням використовується значення 0. Після створення порожнього растру ви, ймовірно, захочете додати до нього канали і, можливо, відредагувати його. Дивіться ST_AddBandдля визначення каналів і ST_SetValueдля встановлення початкових значень пікселів.

Приклади

INSERT INTO dummy_rast(rid,rast)
VALUES(3, ST_MakeEmptyRaster(100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) );

--use an existing raster as template for new raster
INSERT INTO dummy_rast(rid,rast)
SELECT 4, ST_MakeEmptyRaster(rast)
FROM dummy_rast WHERE rid = 3;

-- output meta data of rasters we just added
SELECT rid, (md).*
FROM (SELECT rid, ST_MetaData(rast) As md
    FROM dummy_rast
    WHERE rid IN(3,4)) As foo;
rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
-----+------------+------------+-------+--------+------------+------------+-------+-------+------+----------
   3 |     0.0005 |     0.0005 |   100 |    100 |          1 |          1 |    0  |     0 | 4326 |        0
   4 |     0.0005 |     0.0005 |   100 |    100 |          1 |          1 |    0  |     0 | 4326 |        0

Name

ST_Tile — Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.

Synopsis

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);

Опис

Повертає набір растрів, отриманих в результаті розділення вхідного растра на основі бажаних розмірів вихідних растрів.

Якщо padwithnodata = FALSE, крайні плитки з правого та нижнього боків растра можуть мати інші розміри, ніж решта плиток. Якщо padwithnodata = TRUE, всі плитки матимуть однакові розміри, при цьому крайні плитки можуть бути заповнені значеннями NODATA. Якщо для растрових смуг не вказано значення NODATA, його можна вказати, встановивши nodataval.

[Note]

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

Доступність: 2.1.0

Приклади

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 ST_Tile(rast, 3, 3, TRUE) AS rast FROM bar
)
SELECT
    ST_DumpValues(rast)
FROM baz;
(1,"{{1,1,1},{1,1,1},{1,1,1}}")
 (2,"{{10,10,10},{10,10,10},{10,10,10}}")
 (1,"{{2,2,2},{2,2,2},{2,2,2}}")
 (2,"{{20,20,20},{20,20,20},{20,20,20}}")
 (1,"{{3,3,3},{3,3,3},{3,3,3}}")
 (2,"{{30,30,30},{30,30,30},{30,30,30}}")
 (1,"{{4,4,4},{4,4,4},{4,4,4}}")
 (2,"{{40,40,40},{40,40,40},{40,40,40}}")
 (1,"{{5,5,5},{5,5,5},{5,5,5}}")
 (2,"{{50,50,50},{50,50,50},{50,50,50}}")
 (1,"{{6,6,6},{6,6,6},{6,6,6}}")
 (2,"{{60,60,60},{60,60,60},{60,60,60}}")
 (1,"{{7,7,7},{7,7,7},{7,7,7}}")
 (2,"{{70,70,70},{70,70,70},{70,70,70}}")
 (1,"{{8,8,8},{8,8,8},{8,8,8}}")
 (2,"{{80,80,80},{80,80,80},{80,80,80}}")
 (1,"{{9,9,9},{9,9,9},{9,9,9}}")
 (2,"{{90,90,90},{90,90,90},{90,90,90}}")
(18 rows)
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 ST_Tile(rast, ARRAY[2], 3, 3) AS rast FROM bar
)
SELECT
    ST_DumpValues(rast)
FROM baz;
(1,"{{10,10,10},{10,10,10},{10,10,10}}")
 (1,"{{20,20,20},{20,20,20},{20,20,20}}")
 (1,"{{30,30,30},{30,30,30},{30,30,30}}")
 (1,"{{40,40,40},{40,40,40},{40,40,40}}")
 (1,"{{50,50,50},{50,50,50},{50,50,50}}")
 (1,"{{60,60,60},{60,60,60},{60,60,60}}")
 (1,"{{70,70,70},{70,70,70},{70,70,70}}")
 (1,"{{80,80,80},{80,80,80},{80,80,80}}")
 (1,"{{90,90,90},{90,90,90},{90,90,90}}")
(9 rows)

Див. також

ST_Union, ST_Retile


Name

ST_Retile — Повернути набір налаштованих плиток з довільно розбитого на плитки растрового покриття.

Synopsis

SETOF raster ST_Retile(regclass tab, name col, geometry ext, float8 sfx, float8 sfy, int tw, int th, text algo='NearestNeighbor');

Опис

Повернути набір плиток із заданим масштабом (sfx, sfy) і максимальний розмір (tw, th), що покривають вказану площу (ext) з даними, що надходять із вказаного растрового покриття (tab, col).

Варіанти алгоритму: 'NearestNeighbor', 'Bilinear', 'Cubic', 'CubicSpline' та 'Lanczos'. Докладнішу інформацію див. у розділі: Методи передискретизації GDAL Warp.

Доступність: 2.2.0

Див. також

ST_CreateOverview


Name

ST_FromGDALRaster — Повертає растр із підтримуваного файлу растра GDAL.

Synopsis

raster ST_FromGDALRaster(bytea gdaldata, integer srid=NULL);

Опис

Повертає растр із підтримуваного файлу растра GDAL. gdaldata має тип bytea і повинен містити вміст файлу растра GDAL.

Якщо srid має значення NULL, функція спробує автоматично призначити SRID з растру GDAL. Якщо srid вказано, надане значення замінить будь-який автоматично призначений SRID.

Доступність: 2.1.0

Приклади

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), представлені у світовій просторовій системі координат растра.

Name

ST_GeoReference — Повертає метадані геореференції у форматі GDAL або ESRI, як це зазвичай зустрічається у світовому файлі. За замовчуванням використовується GDAL.

Synopsis

text ST_GeoReference(raster rast, text format=GDAL);

Опис

Повертає метадані геореференції, включаючи повернення каретки, у форматі 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

Приклади

SELECT ST_GeoReference(rast, 'ESRI') As esri_ref, ST_GeoReference(rast, 'GDAL') As gdal_ref
 FROM dummy_rast WHERE rid=1;
esri_ref   |   gdal_ref
--------------+--------------
 2.0000000000 | 2.0000000000
 0.0000000000 : 0.0000000000
 0.0000000000 : 0.0000000000
 3.0000000000 : 3.0000000000
 1.5000000000 : 0.5000000000
 2.0000000000 : 0.5000000000

Name

ST_Height — Повертає висоту растра в пікселях.

Synopsis

integer ST_Height(raster rast);

Опис

Повертає висоту растру.

Приклади

SELECT rid, ST_Height(rast) As rastheight
FROM dummy_rast;
rid | rastheight
-----+------------
   1 |         20
   2 |          5

Див. також

ST_Width


Name

ST_IsEmpty — Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.

Synopsis

boolean ST_IsEmpty(raster rast);

Опис

Повертає значення true, якщо растр порожній (ширина = 0 і висота = 0). В іншому випадку повертає значення false.

Доступність: 2.0.0

Приклади

SELECT ST_IsEmpty(ST_MakeEmptyRaster(100, 100, 0, 0, 0, 0, 0, 0))
f
SELECT ST_IsEmpty(ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0))
t

Див. також

ST_HasNoBand


Name

ST_MemSize — Повертає обсяг простору (у байтах), який займає растр.

Synopsis

integer ST_MemSize(raster rast);

Опис

Повертає обсяг простору (у байтах), який займає растр.

Це гарне доповнення до вбудованих функцій PostgreSQL pg_column_size, pg_size_pretty, pg_relation_size, pg_total_relation_size.

[Note]

pg_relation_size, що визначає розмір таблиці в байтах, може повертати розмір, менший за ST_MemSize. Це пов'язано з тим, що pg_relation_size не додає розмір тостованих таблиць, а великі геометрії зберігаються в таблицях TOAST. pg_column_size може повертати менший розмір, оскільки він повертає стислий розмір.

pg_total_relation_size - включає таблицю, тостовані таблиці та індекси.

Доступність: 2.2.0

Приклади

SELECT ST_MemSize(ST_AsRaster(ST_Buffer(ST_Point(1,5),10,1000),150, 150, '8BUI')) AS rast_mem;
22568

Див. також


Name

ST_MetaData — Повертає основні метадані про растровий об'єкт, такі як розмір пікселя, поворот (перекос), верхній, нижній лівий кут тощо.

Synopsis

record ST_MetaData(raster rast);

Опис

Повертає основні метадані про растровий об'єкт, такі як розмір пікселя, поворот (перекос), верхній, нижній лівий кут тощо. Повертаються стовпці: upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands

Приклади

SELECT rid, (foo.md).*
 FROM (SELECT rid, ST_MetaData(rast) As md
FROM dummy_rast) As foo;
rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
 ----+------------+------------+-------+--------+--------+-----------+-------+-------+------+-------
   1 |        0.5 |        0.5 |    10 |     20 |      2 |      3 |     0 |     0 |    0 |        0
   2 | 3427927.75 |    5793244 |     5 |      5 |   0.05 |  -0.05 |     0 |     0 |    0 |        3

Див. також

ST_BandMetaData, ST_NumBands


Name

ST_NumBands — Повертає кількість каналів у растровому об'єкті.

Synopsis

integer ST_NumBands(raster rast);

Опис

Повертає кількість каналів у растровому об'єкті.

Приклади

SELECT rid, ST_NumBands(rast) As numbands
FROM dummy_rast;
rid | numbands
----+----------
  1 |        0
  2 |        3

Див. також

ST_Value


Name

ST_PixelHeight — Повертає висоту пікселя в геометричних одиницях просторової системи координат.

Synopsis

double precision ST_PixelHeight(raster rast);

Опис

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

Дивіться ST_PixelWidthдля схематичного зображення цього взаємозв'язку.

Приклади: Растри без нахилу

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

Приклади: Растери з нахилом, відмінним від 0

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

Name

ST_PixelWidth — Повертає ширину пікселя в геометричних одиницях просторової системи координат.

Synopsis

double precision ST_PixelWidth(raster rast);

Опис

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

Наступна діаграма ілюструє взаємозв'язок:

Ширина пікселя: Розмір пікселя в напрямку i

Висота пікселя: розмір пікселя в напрямку j

Приклади: Растри без нахилу

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

Приклади: Растери з нахилом, відмінним від 0

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

Name

ST_ScaleX — Повертає X-компоненту ширини пікселя в одиницях системи координат.

Synopsis

float8 ST_ScaleX(raster rast);

Опис

Повертає компонент X ширини пікселя в одиницях системи координат. Докладнішу інформацію див. у World File.

Змінено: 2.0.0. У версіях WKTRaster це називалося ST_PixelSizeX.

Приклади

SELECT rid, ST_ScaleX(rast) As rastpixwidth
FROM dummy_rast;
rid | rastpixwidth
-----+--------------
   1 |            2
   2 |         0.05

Див. також

ST_Width


Name

ST_ScaleY — Повертає компонент Y висоти пікселя в одиницях системи координат.

Synopsis

float8 ST_ScaleY(raster rast);

Опис

Повертає компонент Y висоти пікселя в одиницях системи координат. Може бути від'ємним. Докладнішу інформацію див. у World File.

Змінено: 2.0.0. У версіях WKTRaster це називалося ST_PixelSizeY.

Приклади

SELECT rid, ST_ScaleY(rast) As rastpixheight
FROM dummy_rast;
rid | rastpixheight
-----+---------------
   1 |             3
   2 |         -0.05

Див. також

ST_Height


Name

ST_RasterToWorldCoord — Повертає верхній лівий кут растра у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Стовпець та рядок починаються з 1.

Synopsis

record ST_RasterToWorldCoord(raster rast, integer xcolumn, integer yrow);

Опис

Повертає верхній лівий кут у вигляді геометричних координат X та Y (довгота та широта) за заданим стовпцем та рядком. Повернені координати X та Y виражені в геометричних одиницях растру з геореференцією. Нумерація стовпців і рядків починається з 1, але якщо будь-який параметр передається як нуль, від'ємне число або число, більше за відповідний розмір растра, то будуть повернуті координати за межами растра, припускаючи, що сітка растра застосовується за межами растра.

Доступність: 2.1.0

Приклади

This example uses a non-skewed raster.

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.

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

Name

ST_RasterToWorldCoordX — Повертає геометричну координату X у верхньому лівому куті растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.

Synopsis

float8 ST_RasterToWorldCoordX(raster rast, integer xcolumn);

float8 ST_RasterToWorldCoordX(raster rast, integer xcolumn, integer yrow);

Опис

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

[Note]

Для невикривлених растрів достатньо вказати стовпець 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.

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.

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

Name

ST_RasterToWorldCoordY — Повертає геометричну координату Y верхнього лівого кута растра, стовпця та рядка. Нумерація стовпців та рядків починається з 1.

Synopsis

float8 ST_RasterToWorldCoordY(raster rast, integer yrow);

float8 ST_RasterToWorldCoordY(raster rast, integer xcolumn, integer yrow);

Опис

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

[Note]

Для невикривлених растрів достатньо вказати стовпець Y. Для викривлених растрів геореферентна координата є функцією ST_ScaleY і ST_SkewY, а також рядка і стовпця. Якщо для викривленого растра вказати тільки рядок Y, буде видано повідомлення про помилку.

Змінено: 2.1.0 У попередніх версіях це називалося ST_Raster2WorldCoordY

Приклади

Non-skewed raster providing row is sufficient.

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.

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

Name

ST_Rotation — Повертає величину повороту растра в радіанах.

Synopsis

float8 ST_Rotation(raster rast);

Опис

Повертає рівномірне обертання растру в радіанах. Якщо растр не має рівномірного обертання, повертається NaN. Докладнішу інформацію див. у розділі World File.

Приклади

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

Name

ST_SkewX — Повертає геоприв'язку X skew (або параметр обертання).

Synopsis

float8 ST_SkewX(raster rast);

Опис

Повертає геоприв'язку X skew (або параметр обертання). Докладнішу інформацію див. у World File.

Приклади

SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast;
rid | skewx | skewy |       georef
-----+-------+-------+--------------------
   1 |     0 |     0 | 2.0000000000
                     : 0.0000000000
                     : 0.0000000000
                     : 3.0000000000
                     : 0.5000000000
                     : 0.5000000000
                     :
   2 |     0 |     0 | 0.0500000000
                     : 0.0000000000
                     : 0.0000000000
                     : -0.0500000000
                     : 3427927.7500000000
                     : 5793244.0000000000

Див. також

ST_GeoReference, ST_SkewY, ST_SetSkew


Name

ST_SkewY — Повертає геоприв'язку Y skew (або параметр обертання).

Synopsis

float8 ST_SkewY(raster rast);

Опис

Повертає геоприв'язку Y skew (або параметр обертання). Докладнішу інформацію див. у World File.

Приклади

SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast;
rid | skewx | skewy |       georef
-----+-------+-------+--------------------
   1 |     0 |     0 | 2.0000000000
                     : 0.0000000000
                     : 0.0000000000
                     : 3.0000000000
                     : 0.5000000000
                     : 0.5000000000
                     :
   2 |     0 |     0 | 0.0500000000
                     : 0.0000000000
                     : 0.0000000000
                     : -0.0500000000
                     : 3427927.7500000000
                     : 5793244.0000000000

Див. також

ST_GeoReference, ST_SkewX, ST_SetSkew


Name

ST_SRID — Повертає ідентифікатор просторової системи координат растра, як визначено в таблиці spatial_ref_sys.

Synopsis

integer ST_SRID(raster rast);

Опис

Повертає ідентифікатор просторової системи координат растрового об'єкта, як визначено в таблиці spatial_ref_sys.

[Note]

Растери та геометрії без геореференції використовують SRID 0.

Приклади

SELECT ST_SRID(rast) As srid
FROM dummy_rast WHERE rid=1;
0

Name

ST_Summary — Повертає текстовий підсумок вмісту растру.

Synopsis

text ST_Summary(raster rast);

Опис

Повертає текстовий підсумок вмісту растру.

Доступність: 2.1.0

Приклади

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)

Name

ST_UpperLeftX — Повертає верхню ліву координату X растру в проекційній просторовій системі координат.

Synopsis

float8 ST_UpperLeftX(raster rast);

Опис

Повертає верхню ліву координату X растра в проекційній просторовій системі відліку.

Приклади

SELECt rid, ST_UpperLeftX(rast) As ulx
FROM dummy_rast;
rid |    ulx
-----+------------
   1 |        0.5
   2 | 3427927.75

Див. також

ST_UpperLeftY, ST_GeoReference, Box3D


Name

ST_UpperLeftY — Повертає верхню ліву координату Y растру в проекційній просторовій системі координат.

Synopsis

float8 ST_UpperLeftY(raster rast);

Опис

Повертає верхню ліву координату Y растру в проекційній просторовій системі координат.

Приклади

SELECT rid, ST_UpperLeftY(rast) As uly
FROM dummy_rast;
rid |   uly
-----+---------
   1 |     0.5
   2 | 5793244

Див. також

ST_UpperLeftX, ST_GeoReference, Box3D


Name

ST_Width — Повертає ширину растру в пікселях.

Synopsis

integer ST_Width(raster rast);

Опис

Повертає ширину растра в пікселях.

Приклади

SELECT ST_Width(rast) As rastwidth
FROM dummy_rast WHERE rid=1;
10

Див. також

ST_Height


Name

ST_WorldToRasterCoord — Повертає верхній лівий кут як стовпець і рядок, задані геометричними координатами X і Y (довгота і широта) або геометрією точки, вираженою в системі координат просторової прив'язки растру.

Synopsis

record ST_WorldToRasterCoord(raster rast, geometry pt);

record ST_WorldToRasterCoord(raster rast, double precision longitude, double precision latitude);

Опис

Повертає верхній лівий кут як стовпець і рядок, задані геометричними X і Y (довгота і широта) або геометрією точки. Ця функція працює незалежно від того, чи знаходяться геометричні X і Y або геометрія точки за межами растра. Геометричні X і Y повинні бути виражені в системі координат просторової прив'язки растра.

Доступність: 2.1.0

Приклади

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

Name

ST_WorldToRasterCoordX — Повертає стовпець у растрі геометрії точки (pt) або світові координати X та Y (xw, yw), представлені у світовій просторовій системі відліку растру.

Synopsis

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);

Опис

Повертає стовпець у растрі геометрії точки (pt) або світові координати X і Y (xw, yw). Точка або (якщо растр перекошений, потрібні обидві світові координати xw і yw). Якщо растр не перекошений, достатньо xw. Світові координати знаходяться в просторовій системі координат растра.

Змінено: 2.1.0 У попередніх версіях це називалося ST_World2RasterCoordX

Приклади

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

Name

ST_WorldToRasterCoordY — Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw), представлені у світовій просторовій системі координат растра.

Synopsis

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);

Опис

Повертає рядок у растрі геометрії точки (pt) або світові координати X і Y (xw, yw). Точка або (якщо растр перекошений, потрібні обидві світові координати xw і yw). Якщо растр не перекошений, достатньо xw. Світові координати знаходяться в просторовій системі координат растра.

Змінено: 2.1.0 У попередніх версіях це називалося ST_World2RasterCoordY

Приклади

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.

Name

ST_BandMetaData — Повертає основні метадані для конкретного растрового каналу. Якщо не вказано, припускається канал № 1.

Synopsis

(1) record ST_BandMetaData(raster rast, integer band=1);

(2) record ST_BandMetaData(raster rast, integer[] band);

Опис

Повертає основні метадані про растровий канал. Повертаються стовпці: pixeltype, nodatavalue, isoutdb, path, outdbbandnum, filesize, filetimestamp.

[Note]

Якщо растр не містить каналів, то видається помилка.

[Note]

Якщо канал не має значення NODATA, nodatavalue дорівнює NULL.

[Note]

Якщо isoutdb має значення False, path, outdbbandnum, filesize та filetimestamp мають значення NULL. Якщо доступ до outdb вимкнено, filesize та filetimestamp також матимуть значення NULL.

Покращено: 2.5.0, додано outdbbandnum, filesize та filetimestamp для растрів outdb.

Приклади: Варіант 1

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       |      |
                

Приклади: Варіант 2

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
    *
FROM ST_BandMetaData((SELECT rast FROM foo),
    ARRAY[1,3,2]::int[]
);
bandnum | pixeltype | nodatavalue | isoutdb |                                      path                                      | outdbbandnum  | filesize | filetimestamp |
---------+-----------+-------------+---------+--------------------------------------------------------------------------------+---------------+----------+---------------+-
       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif      |            1  |    12345 |    1521807257 |
       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif      |            3  |    12345 |    1521807257 |
       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif      |            2  |    12345 |    1521807257 |

Див. також

ST_MetaData, ST_BandPixelType


Name

ST_BandNoDataValue — Повертає значення в заданому каналі, яке не представляє даних. Якщо карал № 1 не задано.

Synopsis

double precision ST_BandNoDataValue(raster rast, integer bandnum=1);

Опис

Повертає значення, яке не представляє даних для каналу

Приклади

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


Name

ST_BandIsNoData — Повертає значення true, якщо канал заповнений тільки значеннями nodata.

Synopsis

boolean ST_BandIsNoData(raster rast, integer band, boolean forceChecking=false);

boolean ST_BandIsNoData(raster rast, boolean forceChecking=false);

Опис

Повертає значення true, якщо канал заповнений тільки значеннями nodata. Якщо не вказано, припускається канал 1. Якщо останній аргумент дорівнює TRUE, весь канал перевіряється піксель за пікселем. В іншому випадку функція просто повертає значення прапорця isnodata для каналу. Якщо не вказано, значенням за замовчуванням для цього параметра є FALSE.

Доступність: 2.0.0

[Note]

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.

create table dummy_rast (rid integer, rast raster);

-- Add raster with two bands, one pixel/band. In the first band, nodatavalue = pixel value = 3.
-- In the second band, nodatavalue = 13, pixel value = 4
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
            

Name

ST_BandPath — Повертає шлях до системного файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, приймається значення 1.

Synopsis

text ST_BandPath(raster rast, integer bandnum=1);

Опис

Повертає шлях до системного файлу каналу растра. Видає помилку, якщо викликається з каналом в db.

Приклади

                    

Див. також


Name

ST_BandFileSize — Повертає розмір файлу каналу, що зберігається у файловій системі. Якщо номер каналу не вказано, вважається, що він дорівнює 1.

Synopsis

bigint ST_BandFileSize(raster rast, integer bandnum=1);

Опис

Повертає розмір файлу каналу, що зберігається у файловій системі. Видає помилку, якщо викликається зі каналу в db або якщо доступ outdb не ввімкнено.

Ця функція зазвичай використовується разом із ST_BandPath() та ST_BandFileTimestamp(), щоб клієнт міг визначити, чи ім'я файлу растрового зображення outdb, яке він бачить, збігається з ім'ям файлу, яке бачить сервер.

Доступність: 2.5.0

Приклади

SELECT ST_BandFileSize(rast,1) FROM dummy_rast WHERE rid = 1;
240574

Name

ST_BandFileTimestamp — Повертає мітку часу файлу смуги, що зберігається у файловій системі. Якщо номер смуги не вказано, вважається, що він дорівнює 1.

Synopsis

bigint ST_BandFileTimestamp(raster rast, integer bandnum=1);

Опис

Повертає мітку часу файлу (кількість секунд з 1 січня 1970 року 00:00:00 UTC) смуги, що зберігається у файловій системі. Видає помилку, якщо викликається зі смугою в базі даних або якщо доступ outdb не ввімкнено.

Ця функція зазвичай використовується разом з ST_BandPath() та ST_BandFileSize(), щоб клієнт міг визначити, чи ім'я файлу растрового зображення outdb, яке він бачить, збігається з ім'ям файлу, яке бачить сервер.

Доступність: 2.5.0

Приклади

SELECT ST_BandFileTimestamp(rast,1) FROM dummy_rast WHERE rid = 1;
1521807257

Name

ST_BandPixelType — Повертає тип пікселя для заданого діапазону. Якщо діапазон не вказано, приймається значення 1.

Synopsis

text ST_BandPixelType(raster rast, integer bandnum=1);

Опис

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

Існує 11 типів пікселів. Підтримуються такі типи пікселів:

  • 1BB - 1-бітний логічний

  • 2BUI - 2-бітне ціле число без знака

  • 4BUI - 4-бітне ціле число без знака

  • 8BSI – 8-бітне ціле число зі знаком

  • 8BUI – 8-бітне ціле число без знака

  • 16BSI – 16-бітне ціле число зі знаком

  • 16BUI – 16-бітне ціле число без знака

  • 32BSI – 32-бітне ціле число без знака

  • 32BUI – 32-бітне ціле число без знака

  • 32BF - 32-бітний з плаваючою комою

  • 64BF - 64-бітний з плаваючою комою

Приклади

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


Name

ST_MinPossibleValue — Повертає мінімальне значення, яке може зберігати цей тип пікселів.

Synopsis

integer ST_MinPossibleValue(text pixeltype);

Опис

Повертає мінімальне значення, яке може зберігати цей тип пікселів.

Приклади

SELECT ST_MinPossibleValue('16BSI');
-32768
SELECT ST_MinPossibleValue('8BUI');
0

Див. також

ST_BandPixelType


Name

ST_HasNoBand — Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.

Synopsis

boolean ST_HasNoBand(raster rast, integer bandnum=1);

Опис

Повертає значення true, якщо немає діапазону з вказаним номером. Якщо номер діапазону не вказано, то вважається, що це діапазон № 1.

Доступність: 2.0.0

Приклади

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 пікселя, значення якого дорівнює значенню пошуку.

Name

ST_PixelAsPolygon — Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.

Synopsis

geometry ST_PixelAsPolygon(raster rast, integer columnx, integer rowy);

Опис

Повертає геометрію полігону, що обмежує піксель для певного рядка та стовпця.

Доступність: 2.0.0

Приклади

This example returns a raster pixel polygon.

SELECT i,j, ST_AsText(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, ..

Name

ST_PixelAsPolygons — Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням, X- та Y-координатами кожного пікселя.

Synopsis

setof record ST_PixelAsPolygons(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

Опис

Повертає геометрію полігону, що обмежує кожен піксель растрового каналу, разом із значенням (подвійна точність), X- та Y-координатами растру (цілими числами) кожного пікселя.

Формат запису повернення: geom geometry, val подвійна точність, x ціле число, y цілі числа.

[Note]

Коли exclude_nodata_value = TRUE, як точки повертаються тільки ті пікселі, значення яких не є NODATA.

[Note]

ST_PixelAsPolygons повертає одну геометрію полігону для кожного пікселя. Це відрізняється від ST_DumpAsPolygons, де кожна геометрія представляє один або кілька пікселів з однаковим значенням пікселя.

Доступність: 2.0.0

Покращено: 2.1.0 додано опціональний аргумент exclude_nodata_value.

Змінено: 2.1.1 Змінено поведінку exclude_nodata_value.

Приклади

This example returns a raster pixel polygon.

SELECT (gv).x, (gv).y, (gv).val, ST_AsText((gv).geom) geom
FROM (SELECT ST_PixelAsPolygons(ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.001, -0.001, 0.001, 0.001, 4269),
                                                    '8BUI'::text, 1, 0),
                                         2, 2, 10),
                             1, 1, NULL)
) gv
) foo
ORDER BY (gv).x, (gv).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))

Name

ST_PixelAsPoint — Повертає геометрію точки верхнього лівого кута пікселя.

Synopsis

geometry ST_PixelAsPoint(raster rast, integer columnx, integer rowy);

Опис

Повертає точкову геометрію верхнього лівого кута пікселя.

Доступність: 2.1.0

Приклади

SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 1)) FROM dummy_rast WHERE rid = 1;
POINT(0.5 0.5)

Name

ST_PixelAsPoints — Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.

Synopsis

setof record ST_PixelAsPoints(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

Опис

Повертає точкову геометрію для кожного пікселя растрового діапазону разом із значенням, X- та Y-координатами кожного пікселя. Координати точкової геометрії відповідають верхньому лівому куту пікселя.

Формат запису повернення: geom geometry, val подвійна точність, x ціле число, y цілі числа.

[Note]

Коли exclude_nodata_value = TRUE, як точки повертаються тільки ті пікселі, значення яких не є NODATA.

Доступність: 2.1.0

Змінено: 2.1.1 Змінено поведінку exclude_nodata_value.

Приклади

SELECT x, y, val, ST_AsText(geom) FROM (SELECT (ST_PixelAsPoints(rast, 1)).* FROM dummy_rast WHERE rid = 2) foo;
x | y | val |          st_astext
---+---+-----+------------------------------
 1 | 1 | 253 | POINT(3427927.75 5793244)
 2 | 1 | 254 | POINT(3427927.8 5793244)
 3 | 1 | 253 | POINT(3427927.85 5793244)
 4 | 1 | 254 | POINT(3427927.9 5793244)
 5 | 1 | 254 | POINT(3427927.95 5793244)
 1 | 2 | 253 | POINT(3427927.75 5793243.95)
 2 | 2 | 254 | POINT(3427927.8 5793243.95)
 3 | 2 | 254 | POINT(3427927.85 5793243.95)
 4 | 2 | 253 | POINT(3427927.9 5793243.95)
 5 | 2 | 249 | POINT(3427927.95 5793243.95)
 1 | 3 | 250 | POINT(3427927.75 5793243.9)
 2 | 3 | 254 | POINT(3427927.8 5793243.9)
 3 | 3 | 254 | POINT(3427927.85 5793243.9)
 4 | 3 | 252 | POINT(3427927.9 5793243.9)
 5 | 3 | 249 | POINT(3427927.95 5793243.9)
 1 | 4 | 251 | POINT(3427927.75 5793243.85)
 2 | 4 | 253 | POINT(3427927.8 5793243.85)
 3 | 4 | 254 | POINT(3427927.85 5793243.85)
 4 | 4 | 254 | POINT(3427927.9 5793243.85)
 5 | 4 | 253 | POINT(3427927.95 5793243.85)
 1 | 5 | 252 | POINT(3427927.75 5793243.8)
 2 | 5 | 250 | POINT(3427927.8 5793243.8)
 3 | 5 | 254 | POINT(3427927.85 5793243.8)
 4 | 5 | 254 | POINT(3427927.9 5793243.8)
 5 | 5 | 254 | POINT(3427927.95 5793243.8)

Name

ST_PixelAsCentroid — Повертає центроїд (точкову геометрію) області, представленої пікселем.

Synopsis

geometry ST_PixelAsCentroid(raster rast, integer x, integer y);

Опис

Повертає центроїд (точкову геометрію) області, представленої пікселем.

Покращено: 3.2.0 Тепер швидше реалізовано в C.

Доступність: 2.1.0

Приклади

SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 1)) FROM dummy_rast WHERE rid = 1;
POINT(1.5 2)

Name

ST_PixelAsCentroids — Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія — це центроїд області, представленої пікселем.

Synopsis

setof record ST_PixelAsCentroids(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

Опис

Повертає центроїд ( точкову геометрію) для кожного пікселя растрового каналу разом із значенням, X- та Y-координатами кожного пікселя. Точкова геометрія є центроїдом області, представленої пікселем..

Формат запису повернення: geom geometry, val подвійна точність, x ціле число, y цілі числа.

[Note]

Коли exclude_nodata_value = TRUE, як точки повертаються тільки ті пікселі, значення яких не є NODATA.

Покращено: 3.2.0 Тепер швидше реалізовано в C.

Змінено: 2.1.1 Змінено поведінку exclude_nodata_value.

Доступність: 2.1.0

Приклади

This example uses LATERAL syntax.

SELECT x, y, val, ST_AsText(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)

Name

ST_Value — Повертає значення заданого каналу в заданому стовпці x, рядку y пікселя або в певній геометричній точці. Номери смуг починаються з 1 і, якщо не вказано, приймаються за 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передано, то воно зчитується з метаданих растру.

Synopsis

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);

Опис

Повертає значення заданого каналу в заданому стовпці 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.

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
SELECT rid, ST_Value(rast, 3, sometable.geom) As b3pval
FROM sometable
WHERE ST_Intersects(rast,sometable.geom);
                
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.


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.


SELECT ST_AsText(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 particular polygon --
SELECT ST_AsText(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.



SELECT ST_AsText(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)))


Name

ST_NearestValue — Повертає найближче значення, яке не є NODATA, пікселя заданого діапазону, визначеного стовпцем x і рядком y, або геометричної точки, вираженої в тій самій системі координат просторової прив'язки, що й растр.

Synopsis

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);

Опис

Повертає найближче значення, яке не є NODATA, заданого діапазону в заданому стовпці x, рядку y пікселя або в конкретній геометричній точці. Якщо стовпець x, рядок y пікселя або піксель у заданій геометричній точці є NODATA, функція знайде найближчий піксель до стовпця x, рядка y пікселя або геометричної точки, значення якого не є NODATA.

Номери смуг починаються з 1, і якщо не вказано інше, то bandnum вважається рівним 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передається, то воно зчитується з метаданих растра.

Доступність: 2.1.0

[Note]

ST_NearestValue є повноцінною заміною для ST_Value.

Приклади

This example reads a value from pixel 2x2.

SELECT
    ST_Value(rast, 2, 2) AS value,
    ST_NearestValue(rast, 2, 2) AS nearestvalue
FROM (
    SELECT
        ST_SetValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                                '8BUI'::text, 1, 0
                            ),
                            1, 1, 0.
                        ),
                        2, 3, 0.
                    ),
                    3, 5, 0.
                ),
                4, 2, 0.
            ),
            5, 4, 0.
        ) AS rast
) AS foo
value | nearestvalue
-------+--------------
     1 |            1

This example reads a NODATA value from pixel 2x3.

SELECT
    ST_Value(rast, 2, 3) AS value,
    ST_NearestValue(rast, 2, 3) AS nearestvalue
FROM (
    SELECT
        ST_SetValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                                '8BUI'::text, 1, 0
                            ),
                            1, 1, 0.
                        ),
                        2, 3, 0.
                    ),
                    3, 5, 0.
                ),
                4, 2, 0.
            ),
            5, 4, 0.
        ) AS rast
) AS foo
value | nearestvalue
-------+--------------
       |            1

Див. також

ST_Neighborhood, ST_Value


Name

ST_SetZ — Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.

Synopsis

geometry ST_SetZ(raster rast, geometry geom, text resample=nearest, integer band=1);

Опис

Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими у вимір Z за допомогою заданого алгоритму ресемплювання.

Параметр resample можна встановити на значення "nearest", щоб скопіювати значення з комірки, в яку потрапляє кожна вершина, або "bilinear", щоб використовувати білінійну інтерполяцію для обчислення значення, яке також враховує сусідні комірки.

Доступність: 3.2.0

Приклади

2x2 test raster with values. 10 50. 40 20.

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_AsText(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)

Див. також

ST_Value, ST_SetM


Name

ST_SetM — Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растра, скопійованими в розмірність M за допомогою заданого алгоритму ресемплювання.

Synopsis

geometry ST_SetM(raster rast, geometry geom, text resample=nearest, integer band=1);

Опис

Повертає геометрію з тими самими координатами X/Y, що й вхідна геометрія, та значеннями з растру, скопійованими в M виміри за допомогою запитуваного алгоритму ресемплювання.

Параметр resample можна встановити на значення "nearest", щоб скопіювати значення з комірки, в яку потрапляє кожна вершина, або "bilinear", щоб використовувати білінійну інтерполяцію для обчислення значення, яке також враховує сусідні комірки.

Доступність: 3.2.0

Приклади

2x2 test raster with values. 10 50. 40 20.

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_AsText(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)

Див. також

ST_Value, ST_SetZ


Name

ST_Neighborhood — Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр.

Synopsis

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);

Опис

Повертає двовимірний масив подвійної точності значень, що не є NODATA, навколо пікселя заданого діапазону, визначеного або стовпцемX і рядкомY, або геометричною точкою, вираженою в тій самій системі координат просторової прив'язки, що й растр. Параметри distanceX та distanceY визначають кількість пікселів навколо заданого пікселя по осях X та Y, наприклад, я хочу отримати всі значення в межах 3 пікселів по осі X та 2 пікселів по осі Y навколо пікселя, що мене цікавить. Центральним значенням двовимірного масиву буде значення в пікселі, вказаному стовпцем X і рядком Y, або геометричною точкою.

Номери смуг починаються з 1, і якщо не вказано інше, то bandnum вважається рівним 1. Якщо exclude_nodata_value встановлено на false, то всі пікселі, включаючи пікселі nodata, вважаються пересічними і повертають значення. Якщо exclude_nodata_value не передається, то воно зчитується з метаданих растра.

[Note]

Кількість елементів уздовж кожної осі двовимірного масиву, що повертається, дорівнює 2 * (distanceX|distanceY) + 1. Отже, для distanceX і distanceY рівних 1 масив, що повертається, буде 3x3.

[Note]

Вихідні дані двовимірного масиву можна передати до будь-якої з вбудованих функцій обробки растрових даних, наприклад ST_Min4ma, ST_Sum4ma, ST_Mean4ma.

Доступність: 2.1.0

Приклади

This example reads a value from pixel 2x2.

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.

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.

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}}

Name

ST_SetValue — Повертає модифікований растр, отриманий в результаті встановлення значення заданого каналу в заданому стовпці x, рядку y пікселя або пікселів, що перетинають певну геометрію. Номери каналів починаються з 1 і, якщо не вказано інше, приймаються за 1.

Synopsis

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);

Опис

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

Покращено: 2.1.0 Варіант геометрії ST_SetValue() тепер підтримує будь-який тип геометрії, а не тільки точку. Варіант геометрії є обгорткою навколо варіанту geomval[] функції ST_SetValues()

Приклади

This example uses geometry input.


                SELECT (foo.geomval).val, ST_AsText(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.

UPDATE dummy_rast SET rast = ST_SetValue(rast,1, ST_Point(3427927.75, 5793243.95),100)
        WHERE rid = 2   ;

                

Див. також

ST_Value, ST_DumpAsPolygons


Name

ST_SetValues — Повертає змінений растр, отриманий в результаті встановлення значень заданого каналу.

Synopsis

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);

Опис

Повертає змінений растр, отриманий в результаті встановлення зазначених пікселів на нові значення для вказаного каналу. 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

Приклади: Варіант 1


/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =
>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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[][]
        )
    ) 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 ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =
>    | 9 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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[][]
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   9
 1 | 2 |   9
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9

/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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[][]
        )
    ) AS poly
) foo
ORDER BY 1, 2;
x | y | val
---+---+-----
 1 | 1 |   9
 1 | 2 |   1
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9
/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
|   | 1 | 1 |          |   | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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
        )
    ) AS poly
) foo
ORDER BY 1, 2;
x | y | val
---+---+-----
 1 | 1 |
 1 | 2 |   1
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9

Приклади: Варіант 2

/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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
        )
    ) 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
/*
This example is like the previous one.  Instead of nosetvalue = -1, nosetvalue = NULL

The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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
        )
    ) 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

Приклади: Варіант 3

/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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
        )
    ) 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 ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 |   | 1 |    =>    | 1 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
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
        )
    ) AS poly
) foo
ORDER BY 1, 2;
x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9

Приклади: Варіант 5

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
)
SELECT
    rid, gid, ST_DumpValues(ST_SetValue(rast, 1, geom, gid))
FROM foo t1
CROSS JOIN bar t2
ORDER BY rid, gid;
rid | gid |                                                                st_dumpvalues
-----+-----+---------------------------------------------------------------------------------------------------------------------------------------------
   1 |   1 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,1,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}")
   1 |   2 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}")
   1 |   3 | (1,"{{3,3,3,3,3},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}")
   1 |   4 | (1,"{{4,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,4}}")
(4 rows)

Нижче показано, що geomvals, розташовані далі в масиві, можуть перезаписати попередні geomvals

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
)
SELECT
    t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[]))
FROM foo t1
CROSS JOIN bar t2
CROSS JOIN bar t3
WHERE t2.gid = 1
    AND t3.gid = 2
ORDER BY t1.rid, t2.gid, t3.gid;
rid | gid | gid |                                                    st_dumpvalues
-----+-----+-----+---------------------------------------------------------------------------------------------------------------------
   1 |   1 |   2 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}")
(1 row)

Цей приклад є протилежним до попереднього прикладу

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
)
SELECT
    t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[]))
FROM foo t1
CROSS JOIN bar t2
CROSS JOIN bar t3
WHERE t2.gid = 2
    AND t3.gid = 1
ORDER BY t1.rid, t2.gid, t3.gid;
rid | gid | gid |                                                    st_dumpvalues
-----+-----+-----+---------------------------------------------------------------------------------------------------------------------
   1 |   2 |   1 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,1,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}")
(1 row)

Name

ST_DumpValues — Отримати значення вказаного каналу у вигляді двовимірного масиву.

Synopsis

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 );

Опис

Отримати значення вказаного каналу у вигляді двовимірного масиву (перший індекс — рядок, другий — стовпець). Якщо nband дорівнює NULL або не вказано, обробляються всі растрові канали.

Доступність: 2.1.0

Приклади

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)
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)
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


Name

ST_PixelOfValue — Отримати координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку.

Synopsis

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 );

Опис

Отримайте координати columnx, rowy пікселя, значення якого дорівнює значенню пошуку. Якщо канал не вказаний, то вважається, що це канал 1.

Доступність: 2.1.0

Приклади

SELECT
    (pixels).*
FROM (
    SELECT
        ST_PixelOfValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                                    '8BUI'::text, 1, 0
                                ),
                                1, 1, 0
                            ),
                            2, 3, 0
                        ),
                        3, 5, 0
                    ),
                    4, 2, 0
                ),
                5, 4, 255
            ),
        1, ARRAY[1, 255]) AS pixels
) AS foo
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.

Name

ST_SetGeoReference — Встановити геореференцію 6 параметрів геореференції в одному виклику. Числа слід розділяти пробілами. Приймає вхідні дані у форматі GDAL або ESRI. За замовчуванням використовується GDAL.

Synopsis

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);

Опис

Встановити геореференцію 6 параметрів геореференції за один виклик. Приймає вхідні дані у форматі "GDAL" або "ESRI". За замовчуванням використовується GDAL. Якщо 6 координат не вказано, повертається нульове значення.

Різниця між форматами представлення полягає в наступному:

GDAL:

scalex skewy skewx scaley upperleftx upperlefty

ESRI:

scalex skewy skewx scaley upperleftx + scalex*0.5 upperlefty + scaley*0.5
[Note]

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

Покращено: 2.1.0 Додано варіант ST_SetGeoReference(raster, double precision, ...)

Приклади

WITH foo AS (
    SELECT ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0) AS rast
)
SELECT
    0 AS rid, (ST_MetaData(rast)).*
FROM foo
UNION ALL
SELECT
    1, (ST_MetaData(ST_SetGeoReference(rast, '10 0 0 -10 0.1 0.1', 'GDAL'))).*
FROM foo
UNION ALL
SELECT
    2, (ST_MetaData(ST_SetGeoReference(rast, '10 0 0 -10 5.1 -4.9', 'ESRI'))).*
FROM foo
UNION ALL
SELECT
    3, (ST_MetaData(ST_SetGeoReference(rast, 1, 1, 10, -10, 0.001, 0.001))).*
FROM foo
rid |     upperleftx     |     upperlefty     | width | height | scalex | scaley | skewx | skewy | srid | numbands
-----+--------------------+--------------------+-------+--------+--------+--------+-------+-------+------+----------
   0 |                  0 |                  0 |     5 |      5 |      1 |     -1 |     0 |     0 |    0 |        0
   1 |                0.1 |                0.1 |     5 |      5 |     10 |    -10 |     0 |     0 |    0 |        0
   2 | 0.0999999999999996 | 0.0999999999999996 |     5 |      5 |     10 |    -10 |     0 |     0 |    0 |        0
   3 |                  1 |                  1 |     5 |      5 |     10 |    -10 | 0.001 | 0.001 |    0 |        0

Name

ST_SetRotation — Встановіть поворот растра в радіанах.

Synopsis

raster ST_SetRotation(raster rast, float8 rotation);

Опис

Рівномірно повертає растр. Поворот вимірюється в радіанах. Докладнішу інформацію див. у World File.

Приклади

SELECT
  ST_ScaleX(rast1), ST_ScaleY(rast1), ST_SkewX(rast1), ST_SkewY(rast1),
  ST_ScaleX(rast2), ST_ScaleY(rast2), ST_SkewX(rast2), ST_SkewY(rast2)
FROM (
  SELECT ST_SetRotation(rast, 15) AS rast1, rast as rast2 FROM dummy_rast
) AS foo;
st_scalex      |      st_scaley      |      st_skewx      |      st_skewy      | st_scalex | st_scaley | st_skewx | st_skewy
---------------------+---------------------+--------------------+--------------------+-----------+-----------+----------+----------
   -1.51937582571764 |   -2.27906373857646 |   1.95086352047135 |   1.30057568031423 |         2 |         3 |        0 |        0
 -0.0379843956429411 | -0.0379843956429411 | 0.0325143920078558 | 0.0325143920078558 |      0.05 |     -0.05 |        0 |        0

Name

ST_SetScale — Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина пікселя/висота.

Synopsis

raster ST_SetScale(raster rast, float8 xy);

raster ST_SetScale(raster rast, float8 x, float8 y);

Опис

Встановлює розмір пікселів по осях X та Y в одиницях системи координат. Кількість одиниць/ширина/висота пікселя. Якщо передано лише одну одиницю, вважається, що X та Y мають однакове значення.

[Note]

ST_SetScale відрізняється від ST_Rescale тим, що ST_SetScale не передискретизує растр для відповідності розмірам растра. Він лише змінює метадані (або геореференцію) растра, щоб виправити спочатку неправильно вказане масштабування. ST_Rescale призводить до того, що растр має різну ширину і висоту, обчислені для відповідності географічному розміру вхідного растра. ST_SetScale не змінює ні ширину, ні висоту растра.

Змінено: 2.0.0 У версіях WKTRaster це називалося ST_SetPixelSize. Це було змінено у версії 2.0.0.

Приклади

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)
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


Name

ST_SetSkew — Встановлює геореференцію X і Y (або параметр обертання). Якщо передається тільки один параметр, X і Y встановлюються на одне і те ж значення.

Synopsis

raster ST_SetSkew(raster rast, float8 skewxy);

raster ST_SetSkew(raster rast, float8 skewx, float8 skewy);

Опис

Встановлює геореференцію X і Y (або параметр обертання). Якщо передається тільки один параметр, X і Y встановлюються на одне і те ж значення. Докладнішу інформацію див. у World File.

Приклади

This is the first example.

UPDATE dummy_rast SET rast = ST_SetSkew(rast,1,2) WHERE rid = 1;
SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast WHERE rid = 1;
rid | skewx | skewy |    georef
----+-------+-------+--------------
  1 |     1 |     2 | 2.0000000000
                    : 2.0000000000
                    : 1.0000000000
                    : 3.0000000000
                    : 0.5000000000
                    : 0.5000000000

This second example sets both values to the same number.

UPDATE dummy_rast SET rast = ST_SetSkew(rast,0) WHERE rid = 1;
SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast WHERE rid = 1;
rid | skewx | skewy |    georef
-----+-------+-------+--------------
   1 |     0 |     0 | 2.0000000000
                     : 0.0000000000
                     : 0.0000000000
                     : 3.0000000000
                     : 0.5000000000
                     : 0.5000000000

Name

ST_SetSRID — Встановлює SRID растра на певне ціле число srid, визначене в таблиці spatial_ref_sys.

Synopsis

raster ST_SetSRID(raster rast, integer srid);

Опис

Встановлює SRID на растрі на певне ціле значення.

[Note]

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


Name

ST_SetUpperLeft — Встановлює значення верхнього лівого кута пікселя растру на проектовані координати X і Y.

Synopsis

raster ST_SetUpperLeft(raster rast, double precision x, double precision y);

Опис

Встановіть значення верхнього лівого кута растра на проектовані координати X і Y

Приклади

SELECT ST_SetUpperLeft(rast,-71.01,42.37)
FROM dummy_rast
WHERE rid = 2;
                    

Див. також

ST_UpperLeftX, ST_UpperLeftY


Name

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

Synopsis

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);

Опис

Ресемплуйте растр, використовуючи вказаний алгоритм ресемплінгу, нові розміри (ширина та висота), кут сітки (gridx та gridy) та набір атрибутів геореференціювання растра (scalex, scaley, skewx та skewy), визначених або запозичених з іншого растра. Якщо використовується еталонний растр, обидва растри повинні мати однаковий SRID.

Нові значення пікселів обчислюються за допомогою одного з наступних алгоритмів ресемплінгу:

  • NearestNeighbor (англійська або американська орфографія)

  • Bilinear

  • Cubic

  • CubicSpline

  • Lanczos

  • Max

  • Min

За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгірші результати інтерполяції.

Якщо не вказано maxerr, використовується максимальна похибка 0,125%.

[Note]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Покращено: додано опції максимального та мінімального значення ресемплювання 3.4.0

Приклади

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


Name

ST_Rescale — Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline, Lanczos, Max або Min. За замовчуванням використовується NearestNeighbor.

Synopsis

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);

Опис

Виконує ресемплінг растра, змінивши тільки його масштаб (або розмір пікселя). Нові значення пікселів обчислюються за допомогою одного з наступних алгоритмів ресемплінгу:

  • NearestNeighbor (англійська або американська орфографія)

  • Bilinear

  • Cubic

  • CubicSpline

  • Lanczos

  • Max

  • Min

За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгірші результати інтерполяції.

scalex та scaley визначають новий розмір пікселя. scaley часто повинен бути від'ємним, щоб отримати добре орієнтований растр.

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

maxerr — це поріг для наближення перетворення за допомогою алгоритму ресемплінгу (в пікселях). Якщо maxerr не вказано, використовується значення за замовчуванням 0,125, яке є таким самим, як і в утиліті GDAL gdalwarp. Якщо встановлено нульове значення, наближення не відбувається.

[Note]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

[Note]

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.

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.

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

Name

ST_Reskew — Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.

Synopsis

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);

Опис

Виконує ресемплінг растра, регулюючи тільки його нахил (або параметри обертання). Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгіршу інтерполяцію.

skewx та skewy визначають новий кут нахилу.

Розмір нового растра буде відповідати розміру наданого растра.

Відсоток максимальної похибки 0,125, якщо не вказано maxerr.

[Note]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

[Note]

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.

SELECT ST_Rotation(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0));

0

-- the reskewed raster raster rotation
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));

-0.982793723247329

Name

ST_SnapToGrid — Виконує ресемплінг растра, прив'язавши його до сітки. Нові значення пікселів обчислюються за допомогою алгоритму ресемплінгу NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor.

Synopsis

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);

Опис

Виконує ресемплінг растра, прив'язуючи його до сітки, визначеної довільним кутом пікселя (gridx & gridy) і, за бажанням, розміром пікселя (scalex & scaley). Нові значення пікселів обчислюються за допомогою алгоритму передискретизації NearestNeighbor (англійська або американська орфографія), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгіршу інтерполяцію.

gridx та gridy визначають будь-який довільний піксельний кут нової сітки. Це не обов'язково верхній лівий кут нового растра, і він не обов'язково повинен знаходитися всередині або на краю нового растрового простору.

Ви можете додатково визначити розмір пікселів нової сітки за допомогою scalex та scaley.

Розмір нового растра буде відповідати розміру наданого растра.

Відсоток максимальної похибки 0,125, якщо не вказано maxerr.

[Note]

Докладнішу інформацію див.: Методи ресемплювання GDAL Warp.

[Note]

Використовуйте 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.

SELECT ST_UpperLeftX(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0));
0

-- the upper left of raster after snapping
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));

-0.0008

Name

ST_Resize — Змінити розмір растру до нової ширини/висоти

Synopsis

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);

Опис

Змінити розмір растру до нової ширини/висоти. Нову ширину/висоту можна вказати у вигляді точної кількості пікселів або відсотка від ширини/висоти растру. Розмір нового растру буде таким самим, як розмір наданого растру.

Нові значення пікселів обчислюються за допомогою алгоритму передискретизації NearestNeighbor (англійське або американське написання), Bilinear, Cubic, CubicSpline або Lanczos. За замовчуванням використовується NearestNeighbor, який є найшвидшим, але дає найгіршу інтерполяцію.

Варіант 1 очікує фактичну ширину/висоту вихідного растру.

Варіант 2 очікує десяткові значення від нуля (0) до одиниці (1), що вказують відсоток ширини/висоти вхідного растра.

Варіант 3 приймає або фактичну ширину/висоту вихідного растра, або текстовий відсоток ("20%"), що вказує відсоток ширини/висоти вхідного растра.

Доступність: 2.1.0 Вимагає GDAL 1.6.1+

Приклади

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
), bar AS (
    SELECT rid, ST_MetaData(rast) AS meta, rast FROM foo
)
SELECT rid, (meta).* FROM bar
rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
-----+------------+------------+-------+--------+--------+--------+-------+-------+------+----------
   1 |          0 |          0 |   500 |    500 |      2 |     -2 |     0 |     0 |    0 |        1
   2 |          0 |          0 |   500 |    100 |      2 |    -10 |     0 |     0 |    0 |        1
   3 |          0 |          0 |   250 |    900 |      4 | -1.1111111111111112 |     0 |     0 |    0 |        1
(3 rows)

Name

ST_Transform — Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм передискретизації. Доступні опції: NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos. За замовчуванням використовується NearestNeighbor.

Synopsis

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);

Опис

Перепроектує растр у відомій системі просторових координат в іншу відому систему просторових координат, використовуючи вказаний алгоритм деформації пікселів. Використовує '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) з опорним растром.

[Note]

Якщо ви виявили, що підтримка перетворення не працює належним чином, можливо, вам доведеться встановити змінну середовища PROJSO на бібліотеку проекцій, яку використовує ваша збірка PostGIS. Для цього потрібно лише вказати ім'я файлу. Наприклад, у Windows у Панелі керування -> Система -> Змінні середовища додайте системну змінну з назвою PROJSO і встановіть для неї значення libproj.dll. Після цієї зміни вам доведеться перезапустити службу/демон PostgreSQL.

[Warning]

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

Доступність: 2.0.0 Вимагає GDAL 1.6.1+

Покращено: 2.1.0 Додано варіант ST_Transform(rast, alignto)

Приклади

SELECT ST_Width(mass_stm) As w_before, ST_Width(wgs_84) As w_after,
  ST_Height(mass_stm) As h_before, ST_Height(wgs_84) As h_after
    FROM
    ( SELECT rast As mass_stm, ST_Transform(rast,4326) As wgs_84,
  ST_Transform(rast,4326, 'Bilinear') AS wgs_84_bilin
        FROM aerials.o_2_boston
            WHERE ST_Intersects(
                rast,
                ST_Transform(ST_MakeEnvelope(-71.128, 42.2392,-71.1277, 42.2397, 4326),
                    26986) )
        LIMIT 1) As foo;
w_before | w_after | h_before | h_after
----------+---------+----------+---------
      200 |     228 |      200 |     170

оригінальні метри площини маси (mass_stm)

Після перетворення в wgs 84 long lat (wgs_84)

Після перетворення в wgs 84 long lat за допомогою білінійного алгоритму замість стандартного NN (wgs_84_bilin)

Приклади: Варіант 3

Нижче показано різницю між використанням ST_Transform(raster, srid) та ST_Transform(raster, alignto)

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_SameAlignment(rast) AS rast,
    ST_SameAlignment(not_aligned) AS not_aligned,
    ST_SameAlignment(aligned) AS aligned
FROM baz
rast | not_aligned | aligned
------+-------------+---------
 t    | f           | t

not_aligned

aligned

Див. також

ST_Transform, ST_SetSRID

11.8. Редактори растрових каналів

  • ST_SetBandNoDataValue — Встановлює значення для заданого каналу, яке не представляє даних. Якщо канал не вказано, вважається, що це канао 1. Щоб позначити канал як такий, що не має значення nodata, встановіть значення nodata = NULL.
  • ST_SetBandIsNoData — Встановлює прапор isnodata каналу на TRUE.
  • ST_SetBandPath — Оновлює шля та номер зовнішнього каналу out-db
  • ST_SetBandIndex — Оновити номер зовнішнього каналу out-db

Name

ST_SetBandNoDataValue — Встановлює значення для заданого каналу, яке не представляє даних. Якщо канал не вказано, вважається, що це канао 1. Щоб позначити канал як такий, що не має значення nodata, встановіть значення nodata = NULL.

Synopsis

raster ST_SetBandNoDataValue(raster rast, double precision nodatavalue);

raster ST_SetBandNoDataValue(raster rast, integer band, double precision nodatavalue, boolean forcechecking=false);

Опис

Встановлює значення, яке не представляє даних для каналу. Якщо не вказано, припускається канал 1. Це вплине на результати функцій ST_Polygon, ST_DumpAsPolygons та ST_PixelAs...().

Приклади

This example changes only the first band NODATA value.

UPDATE dummy_rast
    SET rast = ST_SetBandNoDataValue(rast,1, 254)
WHERE rid = 2;

-- change no data band value of bands 1,2,3
UPDATE dummy_rast
    SET rast =
        ST_SetBandNoDataValue(ST_SetBandNoDataValue(ST_SetBandNoDataValue(rast,1, 254),
                2,99),
                3,108)
        WHERE rid = 2;

-- wipe out the nodata value this will ensure all pixels are considered for all processing functions
UPDATE dummy_rast
    SET rast = ST_SetBandNoDataValue(rast,1, NULL)
WHERE rid = 2;
                    

Див. також

ST_BandNoDataValue, ST_NumBands


Name

ST_SetBandIsNoData — Встановлює прапор isnodata каналу на TRUE.

Synopsis

raster ST_SetBandIsNoData(raster rast, integer band=1);

Опис

Встановлює прапор isnodata для каналу на true. Якщо не вказано, припускається канал 1. Цю функцію слід викликати тільки тоді, коли прапор вважається брудним. Тобто, коли результат виклику ST_BandIsNoData відрізняється при використанні TRUE як останнього аргументу і без його використання

Доступність: 2.0.0

Приклади

This example creates a dummy table with one raster column.

create table dummy_rast (rid integer, rast raster);

-- Add raster with two bands, one pixel/band. In the first band, nodatavalue = pixel value = 3.
-- In the second band, nodatavalue = 13, pixel value = 4
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. We are going to set it to true
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

                    

Name

ST_SetBandPath — Оновлює шля та номер зовнішнього каналу out-db

Synopsis

raster ST_SetBandPath(raster rast, integer band, text outdbpath, integer outdbindex, boolean force=false);

Опис

Оновлює шлях до зовнішнього растрового файлу та номер зовнішнього каналу out-db.

[Note]

Якщо force встановлено на true, не виконуються жодні тести для забезпечення сумісності (наприклад, вирівнювання, підтримка пікселів) між зовнішнім растровим файлом та растром PostGIS. Цей режим призначений для змін файлової системи, в якій знаходиться зовнішній растр.

Доступність: 2.5.0

Приклади

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,
    *
FROM ST_BandMetaData((SELECT rast FROM foo),
    ARRAY[1,3,2]::int[]
)
UNION ALL
SELECT
    2,
    *
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[]
)
ORDER BY 1, 2;
query | bandnum | pixeltype | nodatavalue | isoutdb |                                      path                                       | outdbbandnum
-------+---------+-----------+-------------+---------+---------------------------------------------------------------------------------+--------------
     1 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     1 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            2
     1 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3
     2 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     2 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected2.tif      |            1
     2 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3

Див. також

ST_BandMetaData, ST_SetBandIndex


Name

ST_SetBandIndex — Оновити номер зовнішнього каналу out-db

Synopsis

raster ST_SetBandIndex(raster rast, integer band, integer outdbindex, boolean force=false);

Опис

Оновлює зовнішній номер каналу out-db. Це не впливає на зовнішній растровий файл, пов'язаний з каналом out-db

[Note]

Якщо force встановлено на true, тести на сумісність (наприклад, вирівнювання, підтримка пікселів) між зовнішнім растровим файлом і растром PostGIS не виконуються. Цей режим призначений для випадків, коли канали переміщуються в зовнішньому растровому файлі.

[Note]

Внутрішньо цей метод замінює канал растра PostGIS за індексом band новим каналом замість оновлення існуючої інформації про шлях.

Доступність: 2.5.0

Приклади

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,
    *
FROM ST_BandMetaData((SELECT rast FROM foo),
    ARRAY[1,3,2]::int[]
)
UNION ALL
SELECT
    2,
    *
FROM ST_BandMetaData((
        SELECT
            ST_SetBandIndex(rast,
                2,
                1
            ) AS rast
        FROM foo
    ),
    ARRAY[1,3,2]::int[]
)
ORDER BY 1, 2;
query | bandnum | pixeltype | nodatavalue | isoutdb |                                      path                                       | outdbbandnum
-------+---------+-----------+-------------+---------+---------------------------------------------------------------------------------+--------------
     1 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     1 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            2
     1 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3
     2 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     2 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     2 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/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 не враховуються. Виводяться всі інші значення пікселя, а значення пікселя каналу округлюються до найближчого цілого числа.

Name

ST_Count — Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню nodata.

Synopsis

bigint ST_Count(raster rast, integer nband=1, boolean exclude_nodata_value=true);

bigint ST_Count(raster rast, boolean exclude_nodata_value);

Опис

Повертає кількість пікселів у заданому каналі растрового зображення або растрового покриття. Якщо канал не вказано, nband за замовчуванням дорівнює 1.

[Note]

Якщо 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.

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

Name

ST_CountAgg — Агрегат. Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, за замовчуванням використовується канал 1. Якщо exclude_nodata_value встановлено на true, враховуватимуться лише пікселі, які не дорівнюють значенню NODATA.

Synopsis

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);

Опис

Повертає кількість пікселів у заданому каналі набору растрів. Якщо канал не вказано, nband за замовчуванням дорівнює 1.

Якщо exclude_nodata_value встановлено на true, будуть підраховуватися тільки пікселі, значення яких не дорівнює значенню NODATA растра. Встановіть exclude_nodata_value на false, щоб підрахувати всі пікселі

За замовчуванням буде зразковано всі пікселі. Щоб отримати швидшу відповідь, встановіть sample_percent на значення від нуля (0) до одиниці (1)

Доступність: 2.2.0

Приклади

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)
FROM foo;
20

Name

ST_Histogram — Повертає набір записів, що підсумовують розподіл даних растрового або растрового покриття за окремими діапазонами бінів. Кількість бінів обчислюється автоматично, якщо не вказано інше.

Synopsis

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);

Опис

Повертає набір записів, що складається з мінімального, максимального значення, кількості та відсотка для заданого растрового діапазону для кожного біна. Якщо діапазон не вказано, nband за замовчуванням дорівнює 1.

[Note]

За замовчуванням враховуються тільки значення пікселів, які не дорівнюють значенню 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

Приклад: Одинарна растрова плитка — обчислення гістограм для смуг 1, 2, 3 та автоматичне обчислення бінів

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

Приклад: Тільки діапазон 2, але для 6 бінів

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.

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)

Name

ST_Quantile — Обчислюйте квантилі для покриття растрового зображення або растрової таблиці в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растрового зображення.

Synopsis

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);

Опис

Обчисліть квантилі для покриття растра або таблиці растра в контексті вибірки або сукупності. Таким чином, значення може бути перевірено на відповідність 25%, 50% та 75% процентилю растра.

[Note]

Якщо exclude_nodata_value встановлено на false, також будуть підраховуватися пікселі без даних.

Змінено: 3.1.0 Вилучено варіант ST_Quantile(table_name, column_name).

Доступність: 2.0.0

Приклади

UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,249) WHERE rid=2;
--Example will consider only pixels of band 1 that are not 249 and in named quantiles --

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
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.

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

Name

ST_SummaryStats — Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, то вважається, що це канал 1.

Synopsis

summarystats ST_SummaryStats(raster rast, boolean exclude_nodata_value);

summarystats ST_SummaryStats(raster rast, integer nband, boolean exclude_nodata_value);

Опис

Повертає summarystats, що складається з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, nband за замовчуванням дорівнює 1.

[Note]

За замовчуванням враховуються тільки значення пікселів, які не дорівнюють значенню nodata. Встановіть exclude_nodata_value на false, щоб отримати кількість всіх пікселів.

[Note]

За замовчуванням буде зразковано всі пікселі. Щоб отримати швидшу відповідь, встановіть sample_percent нижче 1

Змінено: 3.1.0 Варіанти ST_SummaryStats(rastertable, rastercolumn, ...) видалено. Замість них використовуйте ST_SummaryStatsAgg.

Доступність: 2.0.0

Приклад: Одинарна растрова плитка

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

Приклад: Підсумуйте пікселі, які перетинають будівлі, що представляють інтерес

Цей приклад зайняв 574 мс на PostGIS Windows 64-біт з усіма будівлями Бостона та повітряними плитками (плитки розміром 150x150 пікселів ~ 134 000 плиток), ~102 000 записів про будівлі

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

Приклад: Растрове покриття

This example returns statistics for each band.

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 -- will get better speed if set sampling to less than 100%. Here we set to 25% and get a much faster answer.

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
                

Name

ST_SummaryStatsAgg — Агрегат. Повертає зведені статистичні дані, що складаються з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу набору растрів. Якщо діапазон не вказано, передбачається канал 1.

Synopsis

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);

Опис

Повертає summarystats, що складається з кількості, суми, середнього значення, стандартного відхилення, мінімального та максимального значень для заданого растрового каналу растрового зображення або растрового покриття. Якщо діапазон не вказано, nband за замовчуванням дорівнює 1.

[Note]

За замовчуванням враховуються тільки значення пікселів, які не дорівнюють значенню NODATA. Встановіть exclude_nodata_value на False, щоб отримати кількість всіх пікселів.

[Note]

За замовчуванням буде зразковано всі пікселі. Щоб отримати швидшу відповідь, встановіть sample_percent на значення від 0 до 1

Доступність: 2.2.0

Приклади

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,
    round((stats).sum::numeric, 3),
    round((stats).mean::numeric, 3),
    round((stats).stddev::numeric, 3),
    round((stats).min::numeric, 3),
    round((stats).max::numeric, 3)
FROM (
    SELECT
        ST_SummaryStatsAgg(rast, 1, TRUE, 1) AS stats
    FROM foo
) bar;
count |  round  | round  | round |  round  | round
-------+---------+--------+-------+---------+-------
    20 | -68.584 | -3.429 | 6.571 | -10.000 | 3.142
(1 row)

Name

ST_ValueCount — Повертає набір записів, що містять значення піксельної смуги та кількість пікселів у заданому каналі растра (або растрового покриття), які мають заданий набір значень. Якщо канал не вказана, за замовчуванням використовується смуга 1. За замовчуванням пікселі з значенням nodata не враховуються. Виводяться всі інші значення пікселя, а значення пікселя каналу округлюються до найближчого цілого числа.

Synopsis

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);

Опис

Повертає набір записів із стовпцями value count, які містять значення пікселя каналу та кількість пікселів у растровій плитці або растровому покритті вибраного каналу.

Якщо канал не вказано, nband за замовчуванням дорівнює 1. Якщо searchvalues не вказано, повертаються всі значення пікселів, знайдені в растрі або растровому покритті. Якщо вказано одне значення пошуку, повертається ціле число замість записів, що позначають кількість пікселів, які мають це значення пікселів каналу

[Note]

Якщо exclude_nodata_value встановлено на false, також будуть підраховуватися пікселі без даних.

Доступність: 2.0.0

Приклади

UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,249) WHERE rid=2;
--Example will count only pixels of band 1 that are not 249. --

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.

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.

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.

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.

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).

Name

ST_RastFromWKB — Повернути растрове значення з растрового файлу Well-Known Binary (WKB).

Synopsis

raster ST_RastFromWKB(bytea wkb);

Опис

За заданим растром Well-Known Binary (WKB) повернути растр.

Доступність: 2.5.0

Приклади

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

Name

ST_RastFromHexWKB — Повернути растрове значення з шестнадцяткового представлення растру Well-Known Binary (WKB).

Synopsis

raster ST_RastFromHexWKB(text wkb);

Опис

За заданим растром Well-Known Binary (WKB) у шістнадцятковому представленні повернути растр.

Доступність: 2.5.0

Приклади

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 (масив байтів). Якщо канал не вказана або будь-яка із вказаних смуг не існує в растрі, то буде зроблена спроба використати всі канали.

Name

ST_AsBinary/ST_AsWKB — Повернути представлення растру у вигляді добре відомого бінарного коду (WKB).

Synopsis

bytea ST_AsBinary(raster rast, boolean outasin=FALSE);

bytea ST_AsWKB(raster rast, boolean outasin=FALSE);

Опис

Повертає двійкове представлення растру. Якщо outasin має значення TRUE, смуги out-db обробляються як in-db. Детальні відомості про представлення див. у файлі raster/doc/RFC2-WellKnownBinaryFormat, що міститься в папці джерел PostGIS.

Це корисно в бінарних курсорах для вилучення даних з бази даних без перетворення їх у рядкове представлення.

[Note]

За замовчуванням, вихідні дані WKB містять зовнішній шлях до файлу для смуг out-db. Якщо клієнт не має доступу до растрового файлу, що лежить в основі смуги out-db, встановіть outasin на TRUE.

Покращено: 2.1.0 Додано outasin

Покращено: 2.5.0 Додано ST_AsWKB

Приклади

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


Name

ST_AsHexWKB — Повернути добре відомий бінарний файл (WKB) у шістнадцятковому представленні растру.

Synopsis

bytea ST_AsHexWKB(raster rast, boolean outasin=FALSE);

Опис

Повертає двійкове представлення у шістнадцятковому форматі растра. Якщо outasin дорівнює TRUE, смуги out-db обробляються як in-db. Детальніше про представлення див. raster/doc/RFC2-WellKnownBinaryFormat у папці джерел PostGIS.

[Note]

За замовчуванням вихідні дані Hex WKB містять зовнішній шлях до файлу для смуг out-db. Якщо клієнт не має доступу до растрового файлу, що лежить в основі смуги out-db, встановіть outasin на TRUE.

Доступність: 2.5.0

Приклади

SELECT ST_AsHexWKB(rast) AS rastbin FROM dummy_rast WHERE rid=1;
010000000000000000000000400000000000000840000000000000E03F000000000000E03F000000000000000000000000000000000A0000000A001400

Name

ST_AsGDALRaster — Повертає растрову плитку у визначеному форматі GDAL Raster. Растрові формати є одними з тих, що підтримуються вашою скомпільованою бібліотекою. Використовуйте ST_GDALDrivers(), щоб отримати список форматів, що підтримуються вашою бібліотекою.

Synopsis

bytea ST_AsGDALRaster(raster rast, text format, text[] options=NULL, integer srid=sameassource);

Опис

Повертає растрову плитку у вказаному форматі. Аргументи наведені нижче:

  • Формат format для виводу. Це залежить від драйверів, скомпільованих у вашій бібліотеці libgdal. Зазвичай доступні формати "JPEG", "GTIff", "PNG". Використовуйте ST_GDALDrivers, щоб отримати список форматів, які підтримує ваша бібліотека.

  • options текстовий масив опцій GDAL. Допустимі опції залежать від формату. Докладнішу інформацію див. у розділі Опції формату GDAL Raster.

  • srs Проект proj4text або srtext (з spatial_ref_sys) для вбудовування в зображення

Доступність: 2.0.0 — вимагає GDAL >= 1.6.0.

Приклад виводу JPEG, кілька плиток як єдиний растр

SELECT ST_AsGDALRaster(ST_Union(rast), 'JPEG', ARRAY['QUALITY=50']) As rastjpg
FROM dummy_rast
WHERE rast && ST_MakeEnvelope(10, 10, 11, 11);

Використання підтримки великих об'єктів PostgreSQL для експорту растрових даних

Один із способів експортувати растр в інший формат — це використання функцій експорту великих об'єктів PostgreSQL. Ми повторимо попередній приклад, але також виконаємо експорт. Зверніть увагу, що для цього вам знадобиться доступ суперкористувача до бази даних, оскільки використовуються функції lo на стороні сервера. Експорт також відбуватиметься в шлях у мережі сервера. Якщо вам потрібно експортувати локально, використовуйте еквівалентні функції psql lo_, які експортують у локальну файлову систему, а не у файлову систему сервера.

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;

Приклади виводу GTIFF

SELECT ST_AsGDALRaster(rast, 'GTiff') As rastjpg
FROM dummy_rast WHERE rid=2;

-- Out GeoTiff with jpeg compression, 90% quality
SELECT ST_AsGDALRaster(
  rast,
  'GTiff',
  ARRAY['COMPRESS=JPEG', 'JPEG_QUALITY=90'],
  4269) As rasttiff
FROM dummy_rast WHERE rid=2;
                

Name

ST_AsJPEG — Повертає вибрані канали растрової плитки як одне зображення у форматі Joint Photographic Exports Group (JPEG) (масив байтів). Якщо канал не вказаний і є 1 або більше 3 каналів, то використовується тільки перший канал. Якщо є тільки 3 канали, то використовуються всі 3 канали і відображаються у форматі RGB.

Synopsis

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);

Опис

Повертає вибрані канали растра як єдине зображення 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.

SELECT ST_AsJPEG(rast) As rastjpg
    FROM dummy_rast WHERE rid=2;

Output only the first band at 90 percent quality.

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.

SELECT ST_AsJPEG(rast,ARRAY[2,1,3],ARRAY['QUALITY=90','PROGRESSIVE=ON']) As rastjpg
    FROM dummy_rast WHERE rid=2;

Name

ST_AsPNG — уПовертає вибрані канали растрової плитки як одне зображення у форматі PNG (масив байтів). Якщо в растрі вказано 1, 3 або 4 канали і не вказано жодного каналу, то використовуються всі канали. Якщо вказано більше 2 або більше 4 каналів і не вказано жодного каналу, то використовується тільки канал 1. Канали відображаються в просторі RGB або RGBA.

Synopsis

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);

Опис

Повертає вибрані канали растра як єдине зображення 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.

Приклади

SELECT ST_AsPNG(rast) As rastpng
FROM dummy_rast WHERE rid=2;

-- export the first 3 bands and map band 3 to Red, band 1 to Green, band 2 to blue
SELECT ST_AsPNG(rast, ARRAY[3,1,2]) As rastpng
FROM dummy_rast WHERE rid=2;
                

Name

ST_AsTIFF — Повертає вибрані канали растра як одне зображення TIFF (масив байтів). Якщо канал не вказана або будь-яка із вказаних смуг не існує в растрі, то буде зроблена спроба використати всі канали.

Synopsis

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);

Опис

Повертає вибрані канали растра у вигляді єдиного файлу формату 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%

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 або більше каналів.

Name

ST_Clip — Повертає растр, обрізаний вхідною геометрією. Якщо номер каналу не вказано, обробляються всі канали. Якщо crop не вказано або TRUE, вихідний растр обрізається. Якщо touched встановлено на TRUE, то долучаються дотичні пікселі, інакше долучається тільки той піксель, центр якого знаходиться в геометрії.

Synopsis

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);

Опис

Повертає растр, обрізаний вхідною геометрією 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, які перетинають геометрію.

[Note]

За замовчуванням використовується значення touched=false, яке вибирає тільки ті пікселі, центр яких покритий геометрією.

Покращено: 3.5.0 - додано аргумент touched.

Доступність: 2.0.0

Покращено: 2.1.0 Переписано на C

У наведених прикладах використовуються аерофотознімки штату Массачусетс, доступні на сайті MassGIS MassGIS Aerial Orthos.

Приклади: Порівняння вибору всіх торканих елементів та не всіх торканих елементів

SELECT ST_Count(rast) AS count_pixels_in_orig, ST_Count(rast_touched) AS all_touched_pixels, ST_Count(rast_not_touched) AS default_clip
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)
 CROSS JOIN ST_Clip(r.rast, g.geom, touched =
> true) AS rast_touched
 CROSS JOIN ST_Clip(r.rast, g.geom, touched =
> false) AS rast_not_touched;
count_pixels_in_orig | all_touched_pixels | default_clip
----------------------+--------------------+--------------
                 2605 |                 16 |           10
(1 row)

Приклади: 1 канал обрізається (не торкається)

Clip the first band of an aerial tile by a 20 meter buffer.

SELECT ST_Clip(
        rast,
        1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20)
    ) from aerials.boston
WHERE rid = 4;
                    

Demonstrate effect of crop on final dimensions of raster. Note how final extent is clipped to that of the geometry. If crop = true.

SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim,
    ST_XMax(clipper) As xmax_clipper,
    ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim,
    ST_XMax(ST_Envelope(rast)) As xmax_rast_orig
FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper
    FROM aerials.boston
WHERE rid = 6) As foo;
xmax_w_trim    |   xmax_clipper   |   xmax_wo_trim   |  xmax_rast_orig
------------------+------------------+------------------+------------------
 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996

Повна растрова плитка перед обрізанням

Після обрізання

Приклади: обрізання 1 каналу без обрізки та додавання інших каналів без змін

Same example as before, but we need to set crop to false to be able to use ST_AddBand. Because ST_AddBand requires all bands be the same Width and height.

SELECT ST_AddBand(
    ST_Clip(
        rast,
        1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),
        false
    ),
    ARRAY[ST_Band(rast,2),ST_Band(rast,3)]
) from aerials.boston
WHERE rid = 6;
                    

Повна растрова плитка перед обрізанням

Після обрізки - сюрреалістично

Приклади: Обрізати всі канали

Clip all bands of an aerial tile by a 20 meter buffer. Only difference is we don't specify a specific band to clip. So all bands are clipped.

SELECT ST_Clip(
      rast,
      ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20),
      false
    ) from aerials.boston
WHERE rid = 4;
                    

Повна растрова плитка перед обрізанням

Після обрізання


Name

ST_ColorMap — Створює новий растр з максимум чотирма смугами 8BUI (відтінки сірого, RGB, RGBA) на основі вихідного растра та вказаної смуги. Якщо смуга не вказана, за замовчуванням використовується смуга 1.

Synopsis

raster ST_ColorMap(raster rast, integer nband=1, text colormap=grayscale, text method=INTERPOLATE);

raster ST_ColorMap(raster rast, text colormap, text method=INTERPOLATE);

Опис

Застосуйте 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. Приклад наведено нижче.

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 для використання запису колірної карти, значення якого найближче до значення пікселя

[Note]

Чудовим джерелом інформації про колірні карти є ColorBrewer.

[Warning]

У отриманих каналах нового растра не буде встановлено значення NODATA. Використовуйте ST_SetBandNoDataValue, щоб встановити значення NODATA, якщо це необхідно.

Доступність: 2.1.0

Приклади

Це чорнова таблиця, з якою можжна погратися

Setup test raster table.

DROP TABLE IF EXISTS funky_shapes;
CREATE TABLE funky_shapes(rast raster);

INSERT INTO funky_shapes(rast)
WITH ref AS (
    SELECT ST_MakeEmptyRaster(200, 200, 0, 200, 1, -1, 0, 0) AS rast
)
SELECT
    ST_Union(rast)
FROM (
    SELECT
        ST_AsRaster(ST_Rotate(ST_Buffer(ST_GeomFromText('LINESTRING(0 2,50 50,150 150,125 50)'),
                    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
    ST_NumBands(rast) As n_orig,
    ST_NumBands(ST_ColorMap(rast,1, 'greyscale')) As ngrey,
    ST_NumBands(ST_ColorMap(rast,1, 'pseudocolor')) As npseudo,
    ST_NumBands(ST_ColorMap(rast,1, 'fire')) As nfire,
    ST_NumBands(ST_ColorMap(rast,1, 'bluered')) As nbluered,
    ST_NumBands(ST_ColorMap(rast,1, '
100% 255   0   0
 80% 160   0   0
 50% 130   0   0
 30%  30   0   0
 20%  60   0   0
  0%   0   0   0
  nv 255 255 255
    ')) As nred
FROM funky_shapes;
                    
n_orig | ngrey | npseudo | nfire | nbluered | nred
--------+-------+---------+-------+----------+------
      1 |     1 |       4 |     4 |        4 |    3
                    

Приклади: Порівняйте різні варіанти відображення кольорової карти за допомогою ST_AsPNG

SELECT
    ST_AsPNG(rast) As orig_png,
    ST_AsPNG(ST_ColorMap(rast,1,'greyscale')) As grey_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'pseudocolor')) As pseudo_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'nfire')) As fire_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'bluered')) As bluered_png,
    ST_AsPNG(ST_ColorMap(rast,1, '
100% 255   0   0
 80% 160   0   0
 50% 130   0   0
 30%  30   0   0
 20%  60   0   0
  0%   0   0   0
  nv 255 255 255
    ')) As red_png
FROM funky_shapes;
                    

orig_png

grey_png

pseudo_png

fire_png

bluered_png

red_png


Name

ST_Grayscale — Створює новий растр з одним каналом 8BUI на основі вихідного растра та вказаних каналів, що представляють червоний, зелений та синій кольори

Synopsis

(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);

Опис

Створіть растр з одним каналом 8BUI, маючи три вхідні канали (з одного або декількох растрів). Будь-який вхідний канал, тип пікселів якого не є 8BUI, буде перекласифіковано за допомогою ST_Reclass.

[Note]

Ця функція не схожа на ST_ColorMap з ключовим словом grayscale, оскільки ST_ColorMap працює тільки з одним каналом, а ця функція очікує три канали для RGB. Ця функція застосовує наступне рівняння для перетворення RGB у сірий: 0,2989 * RED + 0,5870 * GREEN + 0,1140 * BLUE

Доступність: 2.5.0

Приклади: Варіант 1

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SET postgis.enable_outdb_rasters = True;

WITH apple AS (
    SELECT ST_AddBand(ST_MakeEmptyRaster(350, 246, 0, 0, 1, -1, 0, 0, 0),
        '/tmp/apple.png'::text,
        NULL::int[]
    ) AS rast
)
SELECT
    ST_AsPNG(rast) AS original_png,
    ST_AsPNG(ST_Grayscale(rast)) AS grayscale_png
FROM apple;
                    

original_png

grayscale_png

Приклади: Варіант 2

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SET postgis.enable_outdb_rasters = True;

WITH apple AS (
    SELECT ST_AddBand(ST_MakeEmptyRaster(350, 246, 0, 0, 1, -1, 0, 0, 0),
        '/tmp/apple.png'::text,
        NULL::int[]
    ) AS rast
)
SELECT
    ST_AsPNG(rast) AS original_png,
    ST_AsPNG(ST_Grayscale(ARRAY[
            ROW(rast, 1)::rastbandarg, -- red
            ROW(rast, 2)::rastbandarg, -- green
            ROW(rast, 3)::rastbandarg, -- blue
        ]::rastbandarg[]
    )) AS grayscale_png
FROM apple;
                    

Див. також

ST_AsPNG, ST_Reclass, ST_ColorMap


Name

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

Synopsis

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);

Опис

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

Перші три варіанти, що повертають набір 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.

[Note]

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

[Note]

Щоб обчислити перетин каналу растра з геометрією в растровому просторі, використовуйте ST_Clip. ST_Clip працює з растрами з декількома каналами і не повертає канал, що відповідає растрованій геометрії.

[Note]

ST_Intersection слід використовувати разом з ST_Intersects та індексом у стовпці растру та/або стовпці геометрії.

Покращено: 2.0.0 — додано перетин у растровому просторі. У попередніх версіях до 2.0.0 підтримувався лише перетин у векторному просторі.

Приклади: Геометрія, Растр — результатом є значення геометрії

SELECT
    foo.rid,
    foo.gid,
    ST_AsText((foo.geomval).geom) As geomwkt,
    (foo.geomval).val
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, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')),
            (3, ST_GeomFromText('LINESTRING(1 2, 3 4)'))
    ) As g(gid,geom)
    WHERE A.rid = 2
) As foo;
rid | gid |      geomwkt                                               | val
-----+-----+---------------------------------------------------------------------------------------------
   2 |   1 | POINT(3427928 5793243.85)                                  | 249
   2 |   1 | POINT(3427928 5793243.85)                                  | 253
   2 |   2 | POINT(3427927.85 5793243.75)                               | 254
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 251
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 253
   2 |   2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8)   | 252
   2 |   2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250
   2 |   3 | GEOMETRYCOLLECTION EMPTY

Name

ST_MapAlgebra (callback function version) — Версія функції зворотного виклику - Повертає односмуговий растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.

Synopsis

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);

Опис

Повертає одноканальний растр, заданий одним або декількома вхідними растрами, індексами каналів і однією функцією зворотного виклику, заданою користувачем.

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:

CREATE OR REPLACE FUNCTION sample_callbackfunc(value double precision[][][], position 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.

Для передачі аргументу regprocedure до функції SQL необхідно передати повну сигнатуру функції, а потім перетворити її до типу regprocedure. Щоб передати вищезазначену функцію PL/pgSQL як аргумент, SQL для аргументу буде таким:

'sample_callbackfunc(double precision[], integer[], text[])'::regprocedure

Зверніть увагу, що аргумент містить ім'я функції, типи аргументів функції, лапки навколо імені та типів аргументів, а також приведення до типу regprocedure.

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.

[Note]

Для отримання додаткової інформації про ключове слово VARIADIC зверніться до документації PostgreSQL та розділу "Функції SQL із змінною кількістю аргументів" у Функції мови запитів (SQL).

Варіант 1 приймає масив rastbandarg, що дозволяє використовувати операцію алгебри карт на багатьох растрах та/або багатьох каналах. Див. приклад Варіант 1.

Варіанти 2 і 3 працюють з одним або декількома каналами одного растра. Див. приклад варіантів 2 і 3.

Варіант 4 працює з двома растрами з одним каналом на растр. Див. приклад Варіант 4.

Доступність: 2.2.0: Можливість додавання маски

Доступність: 2.1.0

Приклади: Варіант 1

Один растр, один канал

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
                    

Один растр, кілька каналів

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
                    

Кілька растрів, кілька каналів

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
                    

Повний приклад плиток покриття з сусідством.

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.

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
)
WITH 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[],
            'raster_nmapalgebra_test(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;
                    

Приклади: Варіанти 2 і 3

Один растр, кілька каналів

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
                    

Один растр, один канал

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
                    

Приклади: Варіант 4

Два растри, два канали

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
                    

Приклади: використання масок

WITH foo AS (SELECT
   ST_SetBandNoDataValue(ST_SetValue(ST_SetValue(ST_AsRaster(ST_Buffer(ST_GeomFromText('LINESTRING(50 50,100 90,100 50)'), 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 )
SELECT 'original' AS title, rast
FROM foo
UNION ALL
SELECT 'no mask mean value' AS title, ST_MapAlgebra(rast,1,'ST_Mean4ma(double precision[], int[], text[])'::regprocedure) AS rast
FROM foo
UNION ALL
SELECT 'mask only consider neighbors, exclude center' 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 'mask weighted only consider neighbors, exclude center multi other pixel values by 2' 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;
                    

оригінальний

значення без маски (те саме, що мати всі 1 у матриці маски)

маска враховує тільки сусідів, виключає центр

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


Name

ST_MapAlgebra (expression version) — Версія виразу — повертає одноканальний растр, заданий одним або двома вхідними растрами, індексами каналів і одним або декількома визначеними користувачем виразами SQL.

Synopsis

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);

Опис

Версія виразу — повертає одноканальний растр на основі одного або двох вхідних растрів, індексів каналів та одного або декількох визначених користувачем виразів 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

Приклади: Варіанти 1 і 2

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;
                    

Приклади: Варіанти 3 і 4

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;
                    

Name

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

Synopsis

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);

Опис

[Warning]

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 від каналу оригінального растра.

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.

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
SELECT
    ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast
WHERE rid = 2;
2BUI

оригінал (стовпець rast_view)

rast_view_ma

Створіть новий 3-канальний растр того ж типу пікселів, що і наш оригінальний 3-канальний растр, з першим каналом, зміненим за допомогою алгебри карт, і двома іншими каналами, що залишилися без змін.

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;
                    

Name

ST_MapAlgebraExpr — 2-канальна версія растра: створює новий одноканальний растр, сформований шляхом застосування дійсної алгебраїчної операції PostgreSQL до двох вхідних растрових каналів та наданого типу пікселів. Якщо номери каналів не вказані, то за замовчуванням використовується канал 1 кожного растру. Результуючий растр буде вирівняний (масштаб, нахил і кути пікселів) на сітці, визначеній першим растром, а його розмір буде визначений параметром "extenttype". Значення для "extenttype" можуть бути: INTERSECTION, UNION, FIRST, SECOND.

Synopsis

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);

Опис

[Warning]

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-канальний перетин і об'єднання

Створіть новий одноканальний растр на основі нашого оригіналу, який є функцією модуля 2 від каналу оригінального растра.

Create a cool set of rasters.

DROP TABLE IF EXISTS fun_shapes;
CREATE TABLE fun_shapes(rid serial PRIMARY KEY, fun_name text, rast raster);

-- Insert some cool shapes around Boston in Massachusetts state plane meters --
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;

--map them -
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
                    

перетин алгебри карт

об'єднання алгебри карт

Приклад: Накладання растрів на полотно у вигляді окремих каналів

We use ST_AsPNG to render the image so all single band ones look grey.

WITH mygeoms
    AS ( SELECT 2 As bnum, ST_Buffer(ST_Point(1,5),10) As geom
            UNION ALL
            SELECT 3 AS bnum,
                ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel') As geom
            UNION ALL
            SELECT 1 As bnum,
                ST_Buffer(ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'), 5,'join=bevel') As geom
            ),
   -- define our canvas to be 1 to 1 pixel to geometry
   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,
                    Max(ST_SRID(geom)) As srid
                    from mygeoms
                    ) As foo
            ),
   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]') As rast
                FROM mygeoms AS m CROSS JOIN canvas
                ORDER BY m.bnum) As rasts
                )
          SELECT rasts[1] As rast1 , rasts[2] As rast2, rasts[3] As rast3, ST_AddBand(ST_AddBand(rasts[1],rasts[2]), rasts[3]) As final_rast
            FROM rbands;
                    

rast1

rast2

rast3

final_rast

Приклад: Накладення 2-метрової межі вибраних ділянок на аерофотознімки

Create new 3 band raster composed of first 2 clipped bands, and overlay of 3rd band with our geometry. This query took 3.6 seconds on PostGIS windows 64-bit install.

WITH pr AS
-- Note the order of operation: we clip all the rasters to dimensions of our region
(SELECT ST_Clip(rast,ST_Expand(geom,50) ) As rast, g.geom
    FROM aerials.o_2_boston AS r INNER JOIN
-- union our parcels of interest so they form a single geometry we can later intersect with
        (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))
),
-- we then union the raster shards together
-- ST_Union on raster is kinda of slow but much faster the smaller you can get the rasters
-- therefore we want to clip first and then union
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)
-- return our final raster which is the unioned shard with
-- with the overlay of our parcel boundaries
-- add first 2 bands, then mapalgebra of 3rd band + geometry
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;
                    

Сині лінії — межі окремих ділянок


Name

ST_MapAlgebraFct — Версія з 1 каналом - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до вхідного каналу растра та наданого типу пікселів. Якщо канал не вказаний, передбачається канал 1.

Synopsis

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);

Опис

[Warning]

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:

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 для аргументу буде таким:

'simple_function(float,integer[],text[])'::regprocedure

Зверніть увагу, що аргумент містить ім'я функції, типи аргументів функції, лапки навколо імені та типів аргументів, а також приведення до типу regprocedure.

Третім аргументом для userfunction є масив variadic text. Усі кінцеві текстові аргументи для будь-якого виклику ST_MapAlgebraFct передаються до вказаної userfunction і містяться в аргументі args.

[Note]

Для отримання додаткової інформації про ключове слово VARIADIC зверніться до документації PostgreSQL та розділу "Функції SQL із змінною кількістю аргументів" у Функції мови запитів (SQL).

[Note]

Аргумент text[] для userfunction є обов'язковим, незалежно від того, чи ви вирішили передати аргументи до вашої функції користувача для обробки, чи ні.

Доступність: 2.0.0

Приклади

Створіть новий одноканальний растр на основі нашого оригіналу, який є функцією модуля 2 від каналу оригінального растра.

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).

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

SELECT ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast WHERE rid = 2;

 b1pixtyp
----------
 2BUI

оригінал (колонка rast-view)

rast_view_ma

Створіть новий 3-канальний растр того ж типу пікселів, що і наш оригінальний 3-канальний растр, з першим каналом, зміненим за допомогою алгебри карт, і двома іншими каналами, що залишилися без змін.

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;
                    

Name

ST_MapAlgebraFct — 2-канальна версія - Створює новий одноканальний растр, сформований шляхом застосування дійсної функції PostgreSQL до 2 вхідних каналів растра та наданого типу пікселів. Якщо канал не вказано, то за замовчуванням використовується канал 1. Тип розширення за замовчуванням - INTERSECTION, якщо не вказано інше.

Synopsis

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);

Опис

[Warning]

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:

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 для аргументу буде таким:

'simple_function(double precision, double precision, integer[], text[])'::regprocedure

Зверніть увагу, що аргумент містить ім'я функції, типи аргументів функції, лапки навколо імені та типів аргументів, а також приведення до типу regprocedure.

Четвертий аргумент для tworastuserfunc є масивом variadic text. Усі кінцеві текстові аргументи до будь-якого виклику ST_MapAlgebraFct передаються до вказаного tworastuserfunc і містяться в аргументі userargs.

[Note]

Для отримання додаткової інформації про ключове слово VARIADIC зверніться до документації PostgreSQL та розділу "Функції SQL із змінною кількістю аргументів" у Функції мови запитів (SQL).

[Note]

Аргумент text[] для tworastuserfunc є обов'язковим, незалежно від того, чи ви вирішили передати аргументи до вашої користувацької функції для обробки, чи ні.

Доступність: 2.0.0

Приклад: Накладання растрів на полотно у вигляді окремих каналів

Define our user defined function.


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;

-- prep our test table of rasters
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 with ST_AddBand
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;

накладення каналів карти (полотно) (R: невелика дорога, G: коло, B: велика дорога)

Визначена користувачем функція, яка приймає додаткові аргументи

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)';
                    

визначений користувачем з додатковими аргументами та різними каналами з того самого растру


Name

ST_MapAlgebraFctNgb — 1-канальна версія: Map Algebra Nearest Neighbor з використанням визначеної користувачем функції PostgreSQL. Повертає растр, значення якого є результатом функції користувача PLPGSQL, що включає сусідство значень із вхідної каналу растра.

Synopsis

raster ST_MapAlgebraFctNgb(raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args);

Опис

[Warning]

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.

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;

-- now we apply to our raster averaging pixels within 2 pixels of each other in X and Y direction --
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;
                    

Перший канал нашого растра

новий растр після усереднення пікселів у межах 4x4 пікселів один від одного


Name

ST_Reclass — Створює новий растр, складений з типів каналів, перекласифікованих з оригінальних. nband — це канал, який буде змінена. Якщо nband не вказано, вважається, що він дорівнює 1. Всі інші канали повертаються без змін. Приклад використання: перетворення каналу 16BUI на 8BUI і так далі для спрощення візуалізації у вигляді форматів, придатних для перегляду.

Synopsis

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);

Опис

Створює новий растр, сформований шляхом застосування операції перекласифікації, визначеної reclassexpr на вхідному растрі (rast). Опис виразів перекласифікації див. у reclassarg. Якщо band не вказано, вважається, що це смуга 1.

Новий растр матиме ті ж геореференцію, ширину та висоту, що й оригінальний растр. Канали нового растра мають тип пікселів pixeltype. Якщо вказано reclassargset, то кожен reclassarg визначає тип цільового каналу. Незазначені канали повертаються без змін.

Доступність: 2.0.0

Приклад: Основний

Створіть новий растр з оригіналу, де канал 2 перетворюється з 8BUI на 4BUI, а всі значення від 101 до 254 встановлюються на значення nodata.

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

Приклад: Розширене використання декількох reclassargs

Створіть новий растр з оригіналу, де канали 1,2,3 перетворюються відповідно на 1BB,4BUI, 4BUI і перекласифікуються. Зверніть увагу, що тут використовується аргумент reclassarg з змінною кількістю параметрів, який може приймати як вхідні дані необмежену кількість reclassargs (теоретично стільки смуг, скільки у вас є)

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

Приклад: Розширена карта одного каналу 32BF растру до декількох видимих каналів

Створити новий 3-канальний (8BUI, 8BUI, 8BUI видимий растр) з растра, який має тільки один канал 32bf

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)
    ]
    );
                    

Name

ST_ReclassExact — Створює новий растр, що складається з каналів, перекласифікованих з оригінальних, використовуючи співвідношення 1:1 між значеннями в оригінальному каналі та новими значеннями в каналі призначення.

Synopsis

raster ST_ReclassExact(raster rast, double precision[] inputvalues, double precision[] outputvalues, integer bandnumber=1, text pixeltype=32BF, double precision nodatavalue=NULL);

Опис

Створює новий растр, сформований шляхом застосування операції перекласифікації, визначеної масивами inputvalues та outputvalues. Значення пікселів, знайдені у вхідному масиві, відображаються на відповідні значення у вихідному масиві. Усі інші значення пікселів відображаються на nodatavalue.

Тип вихідного пікселя за замовчуванням є float, але його можна вказати за допомогою параметра pixeltype. Якщо не вказано bandnumber, то вважається, що це канал 1.

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

Доступність: 3.6.0

Приклад: Основний

Створіть невеликий растр і зіставте його пікселі з новими значеннями.

CREATE TABLE reclassexact (
        id integer,
        rast raster
);

--
-- Create a raster with just four pixels
-- [1  2]
-- [3  4]
--
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
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 pixtype
    ) AS rast
  FROM reclassexact
  WHERE id = 1
  )
SELECT 'rce-1', (ST_DumpValues(rc.rast)).*
FROM rc;
                    

Name

ST_Union — Повертає об'єднання набору растрових плиток в один растр, що складається з 1 або більше каналів.

Synopsis

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);

Опис

Повертає об'єднання набору растрових плиток в один растр, що складається з принаймні одного каналу. Розмір отриманого растру дорівнює розміру всього набору. У разі перетину отримане значення визначається uniontype, яке може бути одним із таких: LAST (за замовчуванням), FIRST, MIN, MAX, COUNT, SUM, MEAN, RANGE.

[Note]

Щоб растри могли бути об'єднані, вони повинні мати однакове вирівнювання. Для отримання додаткової інформації та допомоги використовуйте 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) об'єднує всі канали всіх вхідних растрів.

Приклади: Відновлення одноканального фрагментованої растрової плитки

This creates a single band from first band of raster tiles. That form the original file system tile.

SELECT filename, ST_Union(rast,1) As file_rast
FROM sometable WHERE filename IN('dem01', 'dem02') GROUP BY filename;
                    

Приклади: Повернути мультиканальний растр, який є об'єднанням плиток, що перетинають геометрію

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[].

SELECT ST_Union(rast)
FROM aerials.boston
WHERE ST_Intersects(rast,  ST_GeomFromText('LINESTRING(230486 887771, 230500 88772)',26986) );
                    

Приклади: Повернути мультиканальний растр, який є об'єднанням плиток, що перетинають геометрію

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

This creates a multi band raster collecting all the tiles that intersect a line.

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 — Функція обробки растру, яка обчислює суму всіх значень сусідніх пікселів.

Name

ST_Distinct4ma — Функція обробки растру, яка обчислює кількість унікальних значень у сусідніх пікселях.

Synopsis

float8 ST_Distinct4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Distinct4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчисліть кількість унікальних значень пікселів у сусідніх пікселях.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

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)

Name

ST_InvDistWeight4ma — Функція растрової обробки, яка інтерполює значення пікселя з сусідніх пікселів.

Synopsis

double precision ST_InvDistWeight4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

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

Існує два опціональних параметри, які можна передати через userargs. Перший параметр — це коефіцієнт потужності (змінна k у наведеному нижче рівнянні) від 0 до 1, який використовується в рівнянні зваженої оберненої відстані. Якщо не вказано, значення за замовчуванням дорівнює 1. Другий параметр — це відсоток ваги, який застосовується тільки тоді, коли значення пікселя, що цікавить, включено до інтерпольованого значення з сусідства. Якщо не вказано, а піксель, що цікавить, має значення, то це значення повертається.

Основне рівняння зворотної відстані становить:

k = коефіцієнт потужності, дійсне число від 0 до 1

[Note]

Ця функція є спеціалізованою функцією зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

Доступність: 2.1.0

Приклади

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

Name

ST_Max4ma — Функція обробки растру, яка обчислює максимальне значення пікселя в околиці.

Synopsis

float8 ST_Max4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Max4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчисліть максимальне значення пікселя в околі пікселів.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

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)

Name

ST_Mean4ma — Функція обробки растру, яка обчислює середнє значення пікселя в оточенні.

Synopsis

float8 ST_Mean4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Mean4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчислити середнє значення пікселя в оточенні пікселів.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади: Варіант 1

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)

Приклади: Варіант 2

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)

Name

ST_Min4ma — Функція обробки растру, яка обчислює мінімальне значення пікселя в оточенні.

Synopsis

float8 ST_Min4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Min4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчисліть мінімальне значення пікселя в оточенні пікселів.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

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)

Name

ST_MinDist4ma — Функція обробки растру, яка повертає мінімальну відстань (у пікселях) між пікселем, що цікавить, та сусіднім пікселем із значенням.

Synopsis

double precision ST_MinDist4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

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

[Note]

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

[Note]

Ця функція є спеціалізованою функцією зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

Доступність: 2.1.0

Приклади

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

Name

ST_Range4ma — Функція обробки растру, яка обчислює діапазон значень у сусідніх пікселях.

Synopsis

float8 ST_Range4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Range4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчисліть діапазон значень пікселів у сусідніх пікселях.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

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)

Name

ST_StdDev4ma — Функція обробки растра, яка обчислює стандартне відхилення значень сусідніх пікселів.

Synopsis

float8 ST_StdDev4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_StdDev4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчисліть стандартне відхилення значень пікселів у сусідніх пікселях.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

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)

Name

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

Synopsis

float8 ST_Sum4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Sum4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

Опис

Обчисліть суму всіх значень пікселів у сусідніх пікселях.

Для варіанту 2 заміну значення для пікселів NODATA можна вказати, передавши це значення в userargs.

[Note]

Варіант 1 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebraFctNgb.

[Note]

Варіант 2 — це спеціалізована функція зворотного виклику для використання як параметр зворотного виклику до ST_MapAlgebra (callback function version).

[Warning]

Не рекомендується використовувати варіант 1, оскільки ST_MapAlgebraFctNgbбув визнаний застарілим у версії 2.1.0.

Доступність: 2.0.0

Покращено: 2.1.0 Додано варіант 2

Приклади

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.

Name

ST_Aspect — Повертає аспект (за замовчуванням у градусах) растрового каналу висоти. Корисно для аналізу рельєфу місцевості.

Synopsis

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);

Опис

Повертає аспект (за замовчуванням у градусах) каналу растрового зображення висоти. Використовує алгебру карт і застосовує рівняння аспекту до сусідніх пікселів.

units вказує одиниці виміру аспекту. Можливі значення: RADIANS, DEGREES (за замовчуванням).

Коли units = RADIANS, значення знаходяться в діапазоні від 0 до 2 * pi радіан, виміряних за годинниковою стрілкою від півночі.

Коли units = DEGREES, значення знаходяться в діапазоні від 0 до 360 градусів, виміряних за годинниковою стрілкою від півночі.

Якщо поворот пікселя дорівнює нулю, аспект пікселя дорівнює -1.

[Note]

Для отримання додаткової інформації про поворот, експозицію та тіньове затінення див. ESRI - Як працює тіньове затінення та Польовий посібник ERDAS - Зображення аспектів.

Доступність: 2.0.0

Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональний параметр функції interpolate_nodata

Змінено: 2.1.0 У попередніх версіях значення повороту були в радіанах. Тепер значення повороту за замовчуванням в градусах

Приклади: Варіант 1

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_Aspect(rast, 1, '32BF'))
FROM foo

                                                                                                    st_dumpvalues
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------
 (1,"{{315,341.565063476562,0,18.4349479675293,45},{288.434936523438,315,0,45,71.5650482177734},{270,270,-1,90,90},{251.565048217773,225,180,135,108.434951782227},{225,198.43495178
2227,180,161.565048217773,135}}")
(1 row)

Приклади: Варіант 2

Повний приклад плиток покриття.

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;
                    

Name

ST_HillShade — Повертає гіпотетичне освітлення растрового каналу висоти за допомогою введених значень азимута, висоти, яскравості та масштабу.

Synopsis

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);

Опис

Повертає гіпотетичне освітлення растрового каналу висоти за допомогою вхідних даних азимута, висоти, яскравості та масштабу. Використовує алгебру карт і застосовує рівняння затінення пагорбів до сусідніх пікселів. Значення пікселів, що повертаються, знаходяться в діапазоні від 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перед обчисленням освітлення тіньового рельєфу.

[Note]

Для отримання додаткової інформації про Hillshade, будь ласка, зверніться до Як працює hillshade.

Доступність: 2.0.0

Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональний параметр функції interpolate_nodata

Змінено: 2.1.0 У попередніх версіях азимут і висота виражалися в радіанах. Тепер азимут і висота виражаються в градусах

Приклади: Варіант 1

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)

Приклади: Варіант 2

Повний приклад плиток покриття.

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;
                    

Name

ST_Roughness — Повертає растр з обчисленою "шорсткістю" цифрової моделі рельєфу (DEM).

Synopsis

raster ST_Roughness(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

Опис

Обчислює "шорсткість" цифрової моделі рельєфу (DEM), віднімаючи максимальне значення від мінімального для заданої області.

Доступність: 2.1.0

Приклади

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

Name

ST_Slope — Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Корисно для аналізу рельєфу місцевості.

Synopsis

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);

Опис

Повертає нахил (за замовчуванням у градусах) растрового діапазону висот. Використовує алгебру карт і застосовує рівняння нахилу до сусідніх пікселів.

units вказує одиниці виміру нахилу. Можливі значення: RADIANS, DEGREES (за замовчуванням), PERCENT.

scale — це співвідношення вертикальних одиниць до горизонтальних. Для Feet:LatLon використовуйте scale=370400, для Meters:LatLon використовуйте scale=111120.

Якщо interpolate_nodata має значення TRUE, значення пікселів NODATA з вхідного растру будуть інтерпольовані за допомогою ST_InvDistWeight4maперед обчисленням нахилу поверхні.

[Note]

Для отримання додаткової інформації про нахил, експозицію та тіньове затінення див. ESRI - Як працює тіньове затінення та Польовий посібник ERDAS - Зображення схилів.

Доступність: 2.0.0

Покращено: 2.1.0 Використовує ST_MapAlgebra() та додано опціональні параметри функції units, scale, interpolate_nodata

Змінено: 2.1.0 У попередніх версіях значення повороту були в радіанах. Тепер значення повороту за замовчуванням в градусах

Приклади: Варіант 1

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)

Приклади: Варіант 2

Повний приклад плиток покриття.

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;
                    

Name

ST_TPI — Повертає растр з обчисленим індексом топографічного положення.

Synopsis

raster ST_TPI(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

Опис

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

[Note]

Ця функція підтримує тільки фокальний середній радіус, рівний одиниці.

Доступність: 2.1.0

Приклади

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

Name

ST_TRI — Повертає растр з обчисленим індексом нерівності рельєфу.

Synopsis

raster ST_TRI(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

Опис

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

[Note]

Ця функція підтримує тільки фокальний середній радіус, рівний одиниці.

Доступність: 2.1.0

Приклади

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

Name

ST_InterpolateRaster — Інтерполює поверхню сітки на основі вхідного набору 3-D точок, використовуючи значення X і Y для позиціонування точок на сітці, а значення Z точок — як висоту поверхні.

Synopsis

raster ST_InterpolateRaster(geometry input_points, text algorithm_options, raster template, integer template_band_num=1);

Опис

Інтерполює поверхню сітки на основі вхідного набору 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

Приклад

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


Name

ST_Contour — Генерує набір векторних контурів із наданого растрового каналу, використовуючи алгоритм контурного відображення GDAL.

Synopsis

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);

Опис

Генерує набір векторних контурів із наданого растрового 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

Приклад

WITH c AS (
SELECT (ST_Contour(rast, 1, fixed_levels => ARRAY[100.0, 200.0, 300.0])).*
FROM dem_grid WHERE rid = 1
)
SELECT ST_AsText(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 — Обчислює частку кожної растрової комірки, яка покрита заданою геометрією.

Name

Box3D — Повертає 3D-представлення обмежувальної рамки растра.

Synopsis

box3d Box3D(raster rast);

Опис

Повертає поле, що представляє розмір растру.

Багатокутник визначається кутовими точками обмежувального прямокутника ((MINX, MINY), (MAXX, MAXY))

Змінено: 2.0.0 У версіях до 2.0 замість box3d використовувався box2d. Оскільки box2d є застарілим типом, його було змінено на box3d.

Приклади

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


Name

ST_ConvexHull — Повертає геометрію опуклої оболонки растра, включаючи значення пікселів, рівні BandNoDataValue. Для растрів правильної форми та без нахилу це дає той самий результат, що й ST_Envelope, тому корисно лише для растрів неправильної форми або з нахилом.

Synopsis

geometry ST_ConvexHull(raster rast);

Опис

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

[Note]

ST_Envelope округлює координати і, отже, додає невеликий буфер навколо растра, тому результат дещо відрізняється від ST_ConvexHull, який не округлює.

Приклади

Дивіться Специфікація PostGIS Raster для ознайомлення з діаграмою.

Note envelope and convexhull are more or less the same.

SELECT ST_AsText(ST_ConvexHull(rast)) As convhull,
    ST_AsText(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.

SELECT ST_AsText(ST_ConvexHull(rast)) As convhull,
    ST_AsText(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))

Name

ST_DumpAsPolygons — Повертає набір рядків geomval (geom,val) із заданого растрового каналу. Якщо номер каналу не вказано, за замовчуванням використовується канал 1.

Synopsis

setof geomval ST_DumpAsPolygons(raster rast, integer band_num=1, boolean exclude_nodata_value=TRUE);

Опис

Це функція, що повертає набір (SRF). Вона повертає набір рядків geomval, сформованих геометрією (geom) та значенням піксельів каналу (val). Кожен багатокутник є об'єднанням усіх пікселів для ціього каналу, які мають однакове значення пікселя, позначене val.

ST_DumpAsPolygon корисний для полігонізації растрів. Він є зворотним до GROUP BY, оскільки створює нові рядки. Наприклад, його можна використовувати для розширення одного растра на кілька POLYGONS/MULTIPOLYGONS.

Змінено 3.3.0, перевірка та виправлення вимкнені для покращення продуктивності. Може призвести до недійсних геометрій.

Змінено 3.7.0, полігонізація враховує переривання PostgreSQL, тому скасування та тайм-аути операторів негайно зупиняють обробку.

Доступність: Потрібна версія GDAL 1.7 або вище.

[Note]

Якщо для діапазону не встановлено значення даних, пікселі з цим значенням не будуть повертатися, за винятком випадків, коли exclude_nodata_value=false.

[Note]

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

[Note]

Це відрізняється від ST_PixelAsPolygons, де для кожного пікселя повертається одна геометрія, незалежно від значення пікселя.

Приклади

This syntax uses a LATERAL join.

SELECT val, ST_AsText(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))

Name

ST_Envelope — Повертає полігон, що відображає межі растру.

Synopsis

geometry ST_Envelope(raster rast);

Опис

Повертає полігональне представлення меж растра в одиницях просторових координат, визначених srid. Це мінімальна обмежувальна рамка float8, представлена у вигляді полігону.

Полігон визначається кутовими точками обмежувальної рамки ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY))

Приклади

SELECT rid, ST_AsText(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


Name

ST_MinConvexHull — Повернути геометрію опуклої оболонки растра, виключаючи пікселі NODATA.

Synopsis

geometry ST_MinConvexHull(raster rast, integer nband=NULL);

Опис

Повертає геометрію опуклої оболонки растра, виключаючи пікселі NODATA. Якщо nband дорівнює NULL, враховуються всі канали растра.

Доступність: 2.1.0

Приклади

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
    ST_AsText(ST_ConvexHull(rast)) AS hull,
    ST_AsText(ST_MinConvexHull(rast)) AS mhull,
    ST_AsText(ST_MinConvexHull(rast, 1)) AS mhull_1,
    ST_AsText(ST_MinConvexHull(rast, 2)) AS mhull_2
FROM foo
hull               |                mhull                |               mhull_1               |               mhull_2
----------------------------------+-------------------------------------+-------------------------------------+-------------------------------------
 POLYGON((0 0,9 0,9 -9,0 -9,0 0)) | POLYGON((0 -3,9 -3,9 -9,0 -9,0 -3)) | POLYGON((3 -3,9 -3,9 -6,3 -6,3 -3)) | POLYGON((0 -3,6 -3,6 -9,0 -9,0 -3))

Name

ST_Polygon — Повертає багатокутну геометрію, утворену об'єднанням пікселів, значення яких не дорівнює нулю. Якщо номер каналу не вказано, за замовчуванням використовується 1.

Synopsis

geometry ST_Polygon(raster rast, integer band_num=1);

Опис

Змінено 3.3.0, перевірка та виправлення вимкнені для покращення продуктивності. Може призвести до недійсних геометрій.

Доступність: 0.1.6 Вимагає GDAL 1.7 або вище.

Покращено: 2.1.0 Покращена швидкість (повністю на основі C) та гарантована валідність поверненого багатокутника.

Змінено: 2.1.0 У попередніх версіях іноді повертався полігон, змінено на завжди повертати мультиполігон.

Приклади

By default no data band value is 0 or not set, so polygon will return a square polygon.

SELECT ST_AsText(ST_Polygon(rast)) As geomwkt
FROM dummy_rast
WHERE rid = 2;
MULTIPOLYGON(((3427927.75 5793244,3427928 5793244,3427928 5793243.75,3427927.75 5793243.75,3427927.75 5793244)))

Now we change the no data value of first band.

UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,1,254)
WHERE rid = 2;
SELECt rid, ST_BandNoDataValue(rast)
from dummy_rast where rid = 2;

-- ST_Polygon excludes the pixel value 254 and returns a multipolygon
SELECT ST_AsText(ST_Polygon(rast)) As geomwkt
FROM dummy_rast
WHERE rid = 2;
MULTIPOLYGON(((3427927.9 5793243.95,3427927.85 5793243.95,3427927.85 5793244,3427927.9 5793244,3427927.9 5793243.95)),((3427928 5793243.85,3427928 5793243.8,3427927.95 5793243.8,3427927.95 5793243.85,3427927.9 5793243.85,3427927.9 5793243.9,3427927.9 5793243.95,3427927.95 5793243.95,3427928 5793243.95,3427928 5793243.85)),((3427927.8 5793243.75,3427927.75 5793243.75,3427927.75 5793243.8,3427927.75 5793243.85,3427927.75 5793243.9,3427927.75 5793244,3427927.8 5793244,3427927.8 5793243.9,3427927.8 5793243.85,3427927.85 5793243.85,3427927.85 5793243.8,3427927.85 5793243.75,3427927.8 5793243.75)))

Or if you want the no data value different for just one time.

SELECT ST_AsText(ST_Polygon(ST_SetBandNoDataValue(rast,1,252)
        )
    ) As geomwkt
FROM dummy_rast
WHERE rid =2;
MULTIPOLYGON(((3427928 5793243.85,3427928 5793243.8,3427928 5793243.75,3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8,3427927.75 5793243.8,3427927.75 5793243.85,3427927.75 5793243.9,3427927.75 5793244,3427927.8 5793244,3427927.85 5793244,3427927.9 5793244,3427928 5793244,3427928 5793243.95,3427928 5793243.85),(3427927.9 5793243.9,3427927.9 5793243.85,3427927.95 5793243.85,3427927.95 5793243.9,3427927.9 5793243.9)))

Див. також

ST_Value, ST_DumpAsPolygons


Name

ST_IntersectionFractions — Обчислює частку кожної растрової комірки, яка покрита заданою геометрією.

Synopsis

raster ST_IntersectionFractions(raster rast, geometry geom);

Опис

Обчислює частку кожної растрової комірки, яка покрита заданою геометрією. Перший аргумент — це растр, який визначає геометрію сітки, що використовується для обчислення. Розмір і розмір комірки зчитуються з параметра растра. Другий аргумент — це геометрія, яка накладається на сітку, і кожна комірка заповнюється на основі накладення геометрії на сітку. Для полігонів значення, що повертається для кожної комірки, є часткою її площі, яка покрита геометрією. Для лінійних об'єктів значення, що повертається для кожної комірки, є довжиною, що міститься в комірці.

Доступність: 3.6.0 Вимагає GEOS 3.14 або вище.

Приклади

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
  ));

--
-- This rotated square polygon covers half of each cell in the
-- raster.
--
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. Використовує обмежувальну рамку подвійної точності.

Name

&& — Повертає TRUE, якщо обмежувальна рамка A перетинається з обмежувальною рамкою B.

Synopsis

boolean &&( raster A , raster B );

boolean &&( raster A , geometry B );

boolean &&( geometry B , raster A );

Опис

Оператор && повертає TRUE, якщо обмежувальна рамка растра/геометрії A перетинає обмежувальну рамку растра/геометрії B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Доступність: 2.0.0

Приклади

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

Name

&< — Повертає TRUE, якщо обмежувальна рамка A знаходиться ліворуч від B.

Synopsis

boolean &<( raster A , raster B );

Опис

Оператор &< повертає TRUE, якщо обмежувальна рамка растру A перекриває або знаходиться ліворуч від обмежувальної рамки растру B, або, точніше, перекриває або НЕ знаходиться праворуч від обмежувальної рамки растру B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Приклади

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


Name

&> — Повертає TRUE, якщо обмежувальна рамка A знаходиться праворуч від обмежувальної рамки B.

Synopsis

boolean &>( raster A , raster B );

Опис

Оператор &> повертає TRUE, якщо обмежувальна рамка растра A перекриває або знаходиться праворуч від обмежувальної рамки растра B, або, точніше, перекриває або НЕ знаходиться ліворуч від обмежувальної рамки растра B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні для геометрій.

Приклади

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


Name

= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B. Використовує обмежувальну рамку подвійної точності.

Synopsis

boolean =( raster A , raster B );

Опис

Оператор = повертає TRUE, якщо обмежувальна рамка растра A збігається з обмежувальною рамкою растра B. PostgreSQL використовує оператори =, < та >, визначені для растрів, для виконання внутрішнього впорядкування та порівняння растрів (тобто в операторі GROUP BY або ORDER BY). .

[Caution]

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

Доступність: 2.1.0

Див. також

~=


Name

@ — Повертає TRUE, якщо обмежувальна рамка A міститься в обмежувальній рамці B. Використовує обмежувальну рамку подвійної точності.

Synopsis

boolean @( raster A , raster B );

boolean @( geometry A , raster B );

boolean @( raster B , geometry A );

Опис

Оператор @ повертає TRUE, якщо обмежувальна рамка растру/геометрії A міститься в обмежувальній рамці растру/геометрії B.

[Note]

Цей операнд буде використовувати просторові індекси на растрах.

Доступність: 2.0.0 растр @ растр, растр @ геометрія введено

Доступність: 2.0.5 геометрія @ растр введена

Див. також

~


Name

~= — Повертає TRUE, якщо обмежувальна рамка A збігається з обмежувальною рамкою B.

Synopsis

boolean ~=( raster A , raster B );

Опис

Оператор ~= повертає TRUE, якщо обмежувальна рамка растра A збігається з обмежувальною рамкою растра B.

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Доступність: 2.0.0

Приклади

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

SELECT ST_AddBand(prec.rast, alt.rast) As new_rast
    FROM prec INNER JOIN alt ON (prec.rast ~= alt.rast);
        

Див. також

ST_AddBand, =


Name

~ — Повертає TRUE, якщо обмежувальна рамка A містить B. Використовує обмежувальну рамку подвійної точності.

Synopsis

boolean ~( raster A , raster B );

boolean ~( geometry A , raster B );

boolean ~( raster B , geometry A );

Опис

Оператор ~ повертає TRUE, якщо обмежувальна рамка растра/геометрії A містить обмежувальну рамку растра/геометрії B.

[Note]

Цей операнд буде використовувати просторові індекси на растрах.

Доступність: 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 повністю знаходяться на заданій відстані один від одного.

Name

ST_Contains — Повертає true, якщо жодна точка растра rastB не лежить зовні растра rastA і принаймні одна точка всередині rastB лежить всередині rastA.

Synopsis

boolean ST_Contains( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Contains( raster rastA , raster rastB );

Опис

Растр rastA містить rastB тоді і тільки тоді, коли жодна точка rastB не лежить зовні rastA і принаймні одна точка всередині rastB лежить всередині rastA. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Contains(ST_Polygon(raster), geometry) або ST_Contains(geometry, ST_Polygon(raster)).

[Note]

ST_Contains() є оберненою функцією до ST_Within(). Отже, ST_Contains(rastA, rastB) означає ST_Within(rastB, rastA).

Доступність: 2.1.0

Приклади

Specified band numbers.

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.

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


Name

ST_ContainsProperly — Повертає true, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA.

Synopsis

boolean ST_ContainsProperly( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_ContainsProperly( raster rastA , raster rastB );

Опис

Растр rastA містить rastB, якщо rastB перетинає внутрішню частину rastA, але не межу або зовнішню частину rastA. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

Растр rastA не містить сам себе належним чином, але містить сам себе.

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_ContainsProperly(ST_Polygon(raster), geometry) або ST_ContainsProperly(geometry, ST_Polygon(raster)).

Доступність: 2.1.0

Приклади

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


Name

ST_Covers — Повертає true, якщо жодна точка растра rastB не лежить за межами растра rastA.

Synopsis

boolean ST_Covers( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Covers( raster rastA , raster rastB );

Опис

Растр rastA покриває rastB тоді і тільки тоді, коли жодна точка rastB не лежить за межами rastA. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Covers(ST_Polygon(raster), geometry) або ST_Covers(geometry, ST_Polygon(raster)).

Доступність: 2.1.0

Приклади

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


Name

ST_CoveredBy — Повертає true, якщо жодна точка растра rastA не лежить за межами растра rastB.

Synopsis

boolean ST_CoveredBy( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_CoveredBy( raster rastA , raster rastB );

Опис

Растр rastA покривається rastB тоді і тільки тоді, коли жодна точка rastA не лежить за межами rastB. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_CoveredBy(ST_Polygon(raster), geometry) або ST_CoveredBy(geometry, ST_Polygon(raster)).

Доступність: 2.1.0

Приклади

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


Name

ST_Disjoint — Повертає true, якщо растр rastA не перетинається в просторі з rastB.

Synopsis

boolean ST_Disjoint( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Disjoint( raster rastA , raster rastB );

Опис

Растери rastA і rastB є роз'єднаними, якщо вони не мають спільного простору. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується лише опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються лише ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція НЕ використовує жодних індексів.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте 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.

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.

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


Name

ST_Intersects — Повертає true, якщо растр rastA просторово перетинається з растром rastB.

Synopsis

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 );

Опис

Повертає true, якщо растр rastA просторово перетинає растр rastB. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується лише опукла оболонка растра. Якщо номер канал вказано, у тесті враховуються лише ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

Покращено: 2.0.0 додано підтримку растрових/растрових перетинів.

[Warning]

Змінено: 2.1.0 Поведінка варіантів ST_Intersects(raster, geometry) змінена, щоб відповідати поведінці ST_Intersects(geometry, raster).

Приклади

Different bands of same raster.

SELECT ST_Intersects(rast, 2, rast, 3) FROM dummy_rast WHERE rid = 2;
t

Див. також

ST_Intersection, ST_Disjoint


Name

ST_Overlaps — Повертає true, якщо растри rastA і rastB перетинаються, але один не повністю містить інший.

Synopsis

boolean ST_Overlaps( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Overlaps( raster rastA , raster rastB );

Опис

Повертає true, якщо растр rastA просторово перекриває растр rastB. Це означає, що rastA і rastB перетинаються, але один не містить повністю інший. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Overlaps(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

Comparing different bands of same raster.

SELECT ST_Overlaps(rast, 1, rast, 2) FROM dummy_rast WHERE rid = 2;
f

Див. також

ST_Intersects


Name

ST_Touches — Повертає true, якщо растрові зображення rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються.

Synopsis

boolean ST_Touches( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Touches( raster rastA , raster rastB );

Опис

Повертає true, якщо растр rastA просторово торкається растра rastB. Це означає, що rastA і rastB мають принаймні одну спільну точку, але їх внутрішні частини не перетинаються. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується лише опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються лише ті пікселі, які мають значення (не NODATA).

[Note]

Ця функція буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Touches(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

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


Name

ST_SameAlignment — Повертає значення true, якщо растри мають однаковий нахил, масштаб, просторову прив'язку та зміщення (пікселі можна розмістити на одній сітці без розрізання на пікселі), і false, якщо вони не відповідають цим критеріям, з повідомленням, що детально описує проблему.

Synopsis

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 );

Опис

Неагрегована версія (варіанти 1 і 2): Повертає значення true, якщо два растри (надані безпосередньо або створені з використанням значень upperleft, scale, skew і srid) мають однаковий масштаб, нахил, srid і принаймні один з чотирьох кутів будь-якого пікселя одного растра припадає на будь-який кут сітки іншого растра. Повертає false, якщо вони не мають, і ПОВІДОМЛЕННЯ з детальною інформацією про проблему вирівнювання.

Агрегатна версія (Варіант 3): З набору растрів повертає значення true, якщо всі растри в наборі вирівняні. Функція ST_SameAlignment() є "агрегатною" функцією в термінології PostgreSQL. Це означає, що вона оперує рядками даних так само, як функції SUM() і AVG().

Доступність: 2.0.0

Покращено: 2.1.0 додавання варіанту Aggregate

Приклади: Растри

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
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

Name

ST_NotSameAlignmentReason — Повертає текст, що вказує, чи вирівняні растри, а якщо ні, то причину цього.

Synopsis

text ST_NotSameAlignmentReason(raster rastA, raster rastB);

Опис

Повертає текст, що вказує, чи растри вирівняні, а якщо ні, то причину цього.

[Note]

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

Доступність: 2.1.0

Приклади

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)

Name

ST_Within — Повертає true, якщо жодна точка растра rastA не лежить зовні растра rastB і принаймні одна точка всередині rastA лежить всередині rastB.

Synopsis

boolean ST_Within( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Within( raster rastA , raster rastB );

Опис

Растр rastA знаходиться в межах rastB тоді і тільки тоді, коли жодна точка rastA не лежить за межами rastB і принаймні одна точка внутрішньої області rastA лежить у внутрішній області rastB. Якщо номер каналу не вказано (або встановлено на NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_Within(ST_Polygon(raster), geometry) або ST_Within(geometry, ST_Polygon(raster)).

[Note]

ST_Within() є оберненою функцією до ST_Contains(). Отже, ST_Within(rastA, rastB) означає ST_Contains(rastB, rastA).

Доступність: 2.1.0

Приклади

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

Name

ST_DWithin — Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного.

Synopsis

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 );

Опис

Повертає true, якщо растри rastA і rastB знаходяться на заданій відстані один від одного. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

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

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_DWithin(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

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


Name

ST_DFullyWithin — Повертає значення true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного.

Synopsis

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 );

Опис

Повертає true, якщо растри rastA і rastB повністю знаходяться на заданій відстані один від одного. Якщо номер каналу не вказано (або встановлено NULL), у тесті враховується тільки опукла оболонка растра. Якщо номер каналу вказано, у тесті враховуються тільки ті пікселі, які мають значення (не NODATA).

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

[Note]

Цей операнд буде використовувати будь-які індекси, які можуть бути доступні на растрах.

[Note]

Щоб перевірити просторові відносини між растром і геометрією, використовуйте ST_Polygon на растрі, наприклад ST_DFullyWithin(ST_Polygon(raster), geometry).

Доступність: 2.1.0

Приклади

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. Поради щодо растру

Abstract

У цьому розділі описано різні підводні камені та поради, пов'язані з 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.

# 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).

...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

Основна зміна, яку потрібно внести, стосується обмежень відкритих файлів ядра Linux. Вона складається з двох частин:

  • Максимальна кількість відкритих файлів для всієї системи

  • Максимальна кількість відкритих файлів на процес

11.18.1.2.1. Максимальна кількість відкритих файлів для всієї системи

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

$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

Якщо повернуте значення недостатньо велике, додайте файл до /etc/sysctl.d/ відповідно до наступного прикладу:

$ 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 працює):

$ 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

$ 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.

...
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].

...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

Після внесення необхідних змін до systemd перезавантажте демон

systemctl daemon-reload

Chapter 12. Додаткові функції PostGIS

У цьому розділі описано функції, що містяться в папці extras архівів вихідного коду PostGIS та репозиторії вихідного коду. Вони не завжди входять до складу бінарних випусків PostGIS, але зазвичай є скриптами на основі PL/pgSQL або стандартними скриптами оболонки, які можна запускати без змін.

Chapter 13. Спеціальні функції PostGIS Вказівник

13.1. Агрегатні функції PostGIS

Нижче наведено просторові агрегатні функції, які використовуються так само, як і агрегатні функції SQL, такі як sum та average.

  • CG_3DUnion - Виконайте об'єднання 3D за допомогою postgis_sfcgal.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DUnion - Виконайте об'єднання 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_3DArea - Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • ST_3DDWithin - Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDifference - Виконати 3D-різницю
  • ST_3DDistance - Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DIntersection - Виконати 3D перетин
  • ST_3DIntersects - Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLength - Повертає 3D довжину лінійної геометрії.
  • ST_3DPerimeter - Повертає 3D периметр полігональної геометрії.
  • ST_3DUnion - Виконайте об'єднання 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 - Повертає вказане значення ST_Geometry з представлення GML. Це псевдонім для ST_GeomFromGML.
  • ST_GeomCollFromText - Створює колекцію Geometry з колекції WKT із заданим SRID. Якщо SRID не задано, за замовчуванням використовується 0.
  • ST_GeomFromText - Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT).
  • ST_GeomFromWKB - Створює екземпляр геометрії з добре відомого двійкового представлення геометрії (WKB) та опціонального SRID.
  • ST_GeometryFromText - Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT). Це псевдонім для 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 - Створює LINESTRING з WKB із заданим SRID
  • ST_LinestringFromWKB - Створює геометрію з WKB із заданим 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 - Повертає кількість граней на багатогранній поверхні. Для небагатогранних геометрій повертає нуль.
  • ST_NumPoints - Повертає кількість точок у LineString або CircularString.
  • ST_OrderingEquals - Перевіряє, чи дві геометрії представляють одну і ту ж геометрію і мають точки в одному і тому ж порядку напрямків
  • ST_Overlaps - Перевіряє, чи дві геометрії мають однакові розміри і перетинаються, але кожна з них має принаймні одну точку, яка не належить до іншої
  • ST_PatchN - Повертає N-ту геометрію (грань) багатогранної поверхні.
  • 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_Volume - Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • ST_WKBToSQL - Повертає вказане значення ST_Geometry з добре відомого двійкового представлення (WKB). Це псевдонім для ST_GeomFromWKB, який не приймає srid.
  • ST_WKTToSQL - Повертає вказане значення ST_Geometry з представлення Well-Known Text (WKT). Це псевдонім для ST_GeomFromText.
  • ST_Within - Перевіряє, чи кожна точка A лежить в B, і чи мають їхні внутрішні частини спільну точку
  • ST_X - Повертає координату X точки.
  • ST_Y - Повертає координату Y точки.
  • ST_Z - Повертає координату Z точки.
  • ST_SRID - Повертає ідентифікатор просторової прив'язки для топогеометрії.

13.4. Функції підтримки географії PostGIS

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

[Note]

Функції з (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_3DArea - Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • ST_3DClosestPoint - Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_3DConvexHull - Обчислює 3D опуклу оболонку геометрії.
  • ST_3DDFullyWithin - Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_3DDWithin - Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDifference - Виконати 3D-різницю
  • ST_3DDistance - Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DInterpolatePoint - Returns the interpolated measure of a geometry closest to a point in 3D.
  • ST_3DIntersection - Виконати 3D перетин
  • ST_3DIntersects - Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLength - Повертає 3D довжину лінійної геометрії.
  • ST_3DLineInterpolatePoint - Повертає точку, інтерпольовану вздовж 3D-лінії в дробовому місці.
  • ST_3DLongestLine - Повертає найдовшу 3D лінію між двома геометріями
  • ST_3DMaxDistance - Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DPerimeter - Повертає 3D периметр полігональної геометрії.
  • ST_3DShortestLine - Повертає найкоротшу 3D лінію між двома геометріями
  • ST_3DUnion - Виконайте об'єднання 3D.
  • ST_AddMeasure - Інтерполює виміри вздовж лінійної геометрії.
  • ST_AddPoint - Додати точку до LineString.
  • ST_Affine - Застосувати афінне перетворення 3D до геометрії.
  • ST_ApproximateMedialAxis - Обчисліть приблизну медіальну вісь плоскої геометрії.
  • 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_ConstrainedDelaunayTriangles - Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • 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_Extrude - Видавити поверхню до відповідного об'єму
  • ST_FlipCoordinates - Повертає версію геометрії з перевернутими осями X та Y.
  • ST_Force2D - Примусово переведіть геометрії в "2-вимірний режим".
  • ST_ForceCurve - Перетворити геометрію в її вигнутий тип, якщо це можливо.
  • ST_ForceLHR - Примусова орієнтація LHR
  • ST_ForcePolygonCCW - Всі зовнішні кільця орієнтуйте проти годинникової стрілки, а всі внутрішні кільця — за годинниковою стрілкою.
  • ST_ForcePolygonCW - Всі зовнішні кільця орієнтуйте за годинниковою стрілкою, а всі внутрішні кільця — проти годинникової стрілки.
  • ST_ForceRHR - Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.
  • ST_ForceSFS - Змусити геометрії використовувати тільки типи геометрії SFS 1.1.
  • 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_IsPlanar - Перевірте, чи є поверхня плоскою
  • ST_IsPolygonCCW - Перевіряє, чи мають полігони зовнішні кільця, орієнтовані проти годинникової стрілки, і внутрішні кільця, орієнтовані за годинниковою стрілкою.
  • ST_IsPolygonCW - Перевіряє, чи полігони мають зовнішні кільця, орієнтовані за годинниковою стрілкою, а внутрішні кільця — проти годинникової стрілки.
  • ST_IsSimple - Перевіряє, чи геометрія не має точок самоперетину або самодотику.
  • ST_IsSolid - Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • 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_MakeSolid - Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • 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 - Повертає кількість граней на багатогранній поверхні. Для небагатогранних геометрій повертає нуль.
  • ST_Orientation - Визначте орієнтацію поверхні
  • ST_PatchN - Повертає N-ту геометрію (грань) багатогранної поверхні.
  • 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_StraightSkeleton - Обчислити прямий скелет з геомeтрії
  • ST_SwapOrdinates - Повертає версію заданої геометрії із заміненими значеннями ординат.
  • ST_SymDifference - Обчислює геометрію, що представляє частини геометрій A і B, які не перетинаються.
  • ST_Tesselate - Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • ST_TransScale - Перетворює та масштабує геометрію за заданими зміщеннями та коефіцієнтами.
  • ST_Translate - Перетворює геометрію за заданими зміщеннями.
  • ST_UnaryUnion - Обчислює об'єднання компонентів однієї геометрії.
  • ST_Union - Обчислює геометрію, що представляє об'єднання множин точок вхідних геометрій.
  • ST_Volume - Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • 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 - Змусити геометрії використовувати тільки типи геометрії SFS 1.1.
  • 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_3DArea - Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • ST_3DClosestPoint - Повертає 3D точку на g1, яка найближча до g2. Це перша точка найкоротшої 3D лінії.
  • ST_3DConvexHull - Обчислює 3D опуклу оболонку геометрії.
  • ST_3DDFullyWithin - Перевіряє, чи дві 3D-геометрії повністю знаходяться в межах заданої 3D-відстані
  • ST_3DDWithin - Перевіряє, чи дві 3D-геометрії знаходяться в межах заданої 3D-відстані
  • ST_3DDifference - Виконати 3D-різницю
  • ST_3DDistance - Повертає мінімальну 3D декартову відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DExtent - Агрегатна функція, яка повертає 3D обмежувальну рамку геометрій.
  • ST_3DIntersection - Виконати 3D перетин
  • ST_3DIntersects - Перевіряє, чи дві геометрії перетинаються в просторі 3D - тільки для точок, лінійних відрізків, полігонів, багатогранних поверхонь (площ)
  • ST_3DLongestLine - Повертає найдовшу 3D лінію між двома геометріями
  • ST_3DMaxDistance - Повертає максимальну 3D-відстань (на основі просторової референції) між двома геометріями в проекційних одиницях.
  • ST_3DShortestLine - Повертає найкоротшу 3D лінію між двома геометріями
  • ST_3DUnion - Виконайте об'єднання 3D.
  • ST_Affine - Застосувати афінне перетворення 3D до геометрії.
  • ST_ApproximateMedialAxis - Обчисліть приблизну медіальну вісь плоскої геометрії.
  • 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_Extrude - Видавити поверхню до відповідного об'єму
  • ST_FlipCoordinates - Повертає версію геометрії з перевернутими осями X та Y.
  • ST_Force2D - Примусово переведіть геометрії в "2-вимірний режим".
  • ST_ForceLHR - Примусова орієнтація LHR
  • ST_ForceRHR - Примусово встановити орієнтацію вершин полігону відповідно до правила правої руки.
  • ST_ForceSFS - Змусити геометрії використовувати тільки типи геометрії SFS 1.1.
  • 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_IsPlanar - Перевірте, чи є поверхня плоскою
  • ST_IsSolid - Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • ST_MakeSolid - Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • ST_MemSize - Повертає обсяг пам'яті, який займає геометрія.
  • ST_NPoints - Повертає кількість точок (вершин) у геометрії.
  • ST_NumGeometries - Повертає кількість елементів у колекції геометрії.
  • ST_NumPatches - Повертає кількість граней на багатогранній поверхні. Для небагатогранних геометрій повертає нуль.
  • ST_PatchN - Повертає N-ту геометрію (грань) багатогранної поверхні.
  • ST_RemoveRepeatedPoints - Повертає версію геометрії з видаленими дублікатами точок.
  • ST_Reverse - Повернути геометрію з оберненим порядком вершин.
  • ST_Rotate - Обертає геометрію навколо точки початку координат.
  • ST_RotateX - Обертає геометрію навколо осі X.
  • ST_RotateY - Обертає геометрію навколо осі Y.
  • ST_RotateZ - Обертає геометрію навколо осі Z.
  • ST_Scale - Масштабує геометрію за заданими коефіцієнтами.
  • ST_ShiftLongitude - Змінює координати довготи геометрії в діапазоні від -180 до 180 і від 0 до 360.
  • ST_StraightSkeleton - Обчислити прямий скелет з геомeтрії
  • ST_Summary - Повертає текстовий підсумок вмісту геометрії.
  • ST_SwapOrdinates - Повертає версію заданої геометрії із заміненими значеннями ординат.
  • ST_Tesselate - Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • ST_Transform - Повернути нову геометрію з координатами, перетвореними в іншу систему просторових координат.
  • ST_Volume - Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • ~(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    
ST_ForceLHR     
ST_IsPlanar     
ST_IsSolid     
ST_MakeSolid     
ST_Orientation       
ST_3DArea    
ST_Volume    
CG_Intersection       
CG_Intersects      
CG_3DIntersects      
CG_Difference      
ST_3DDifference    
CG_3DDifference    
CG_Distance      
CG_3DDistance      
ST_3DConvexHull     
CG_3DConvexHull     
ST_3DIntersection    
CG_3DIntersection    
CG_Union       
ST_3DUnion    
CG_3DUnion    
ST_AlphaShape       
CG_AlphaShape       
CG_ApproxConvexPartition       
ST_ApproximateMedialAxis     
CG_ApproximateMedialAxis     
CG_GenerateFlatRoof       
CG_GenerateHippedRoof       
CG_GenerateGableRoof       
CG_GenerateSkillionRoof       
CG_GenerateRoof       
CG_PolygonRepair       
ST_ConstrainedDelaunayTriangles       
CG_ConstrainedDelaunayTriangles       
ST_Extrude     
CG_Extrude     
CG_ExtrudeStraightSkeleton       
CG_GreeneApproxConvexPartition       
ST_MinkowskiSum       
CG_MinkowskiSum       
ST_OptimalAlphaShape       
CG_OptimalAlphaShape       
CG_OptimalConvexPartition       
CG_StraightSkeleton     
ST_StraightSkeleton     
ST_Tesselate     
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_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.

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_3DConvexHull - Доступність: 3.3.0 Обчислює 3D опуклу оболонку геометрії.
  • ST_3DUnion - Доступність: додано агрегований варіант 3.3.0 Виконайте об'єднання 3D.
  • 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_OptimalAlphaShape - Доступність: 3.3.0 — вимагає SFCGAL >= 1.4.1. Обчислює альфа-форму, що охоплює геометрію, використовуючи «оптимальне» значення альфа.
  • 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_ConstrainedDelaunayTriangles - Доступність: 3.0.0 Повернути обмежену триангуляцію Делоне навколо заданої вхідної геометрії.
  • 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_3DDifference - Доступність: 2.2.0 Виконати 3D-різницю
  • ST_3DUnion - Доступність: 2.2.0 Виконайте об'єднання 3D.
  • ST_ApproximateMedialAxis - Доступність: 2.2.0 Обчисліть приблизну медіальну вісь плоскої геометрії.
  • 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_IsPlanar - Доступність: 2.2.0: Це було задокументовано в 2.1.0, але випадково пропущено у випуску 2.1. Перевірте, чи є поверхня плоскою
  • ST_IsSolid - Доступність: 2.2.0 Перевірте, чи є геометрія об'ємною. Перевірка дійсності не виконується.
  • ST_IsValidTrajectory - Доступність: 2.2.0 Перевіряє, чи є геометрія дійсною траєкторією.
  • ST_LineFromEncodedPolyline - Доступність: 2.2.0 Створює LineString з закодованої полілінії.
  • ST_MakeSolid - Доступність: 2.2.0 Перетворити геометрію в об'ємне тіло. Перевірка не виконується. Щоб отримати дійсне об'ємне тіло, вхідна геометрія повинна бути закритою поліедральною поверхнею або закритою TIN.
  • 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 Повертає версію заданої геометрії із заміненими значеннями ординат.
  • ST_Volume - Доступність: 2.2.0 Computes the volume of a 3D geometry. Closed surfaces can have non-zero volume.
  • 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_3DArea - Доступність: 2.1.0 Обчислює площу 3D-поверхні. Для об'ємних тіл повертає значення 0.
  • ST_3DIntersection - Доступність: 2.1.0 Виконати 3D перетин
  • 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_Extrude - Доступність: 2.1.0 Видавити поверхню до відповідного об'єму
  • ST_ForceLHR - Доступність: 2.1.0 Примусова орієнтація LHR
  • 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_MinkowskiSum - Доступність: 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_Orientation - Доступність: 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_StraightSkeleton - Доступність: 2.1.0 Обчислити прямий скелет з геомeтрії
  • ST_Summary - Доступність: 2.1.0 Повертає текстовий підсумок вмісту растру.
  • ST_TPI - Доступність: 2.1.0 Повертає растр з обчисленим індексом топографічного положення.
  • ST_TRI - Доступність: 2.1.0 Повертає растр з обчисленим індексом нерівності рельєфу.
  • ST_Tesselate - Доступність: 2.1.0 Виконує тесселяцію поверхні полігона або багатогранної поверхні і повертає результат у вигляді TIN або набору TIN
  • 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 Повертає кількість граней на багатогранній поверхні. Для небагатогранних геометрій повертає нуль.
  • ST_OffsetCurve - Доступність: 2.0 Повертає лінію зміщення на заданій відстані та стороні від вхідної лінії.
  • ST_PatchN - Доступність: 2.0.0 Повертає N-ту геометрію (грань) багатогранної поверхні.
  • 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. Повертає вказане значення ST_Geometry з представлення GML. Це псевдонім для ST_GeomFromGML.
  • ST_GMLToSQL - Покращено: 2.0.0 додано опціональний параметр srid за замовчуванням. Повертає вказане значення ST_Geometry з представлення GML. Це псевдонім для 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 - Змінено: 2.0.0 Ця функція надається для забезпечення зворотної сумісності. Тепер, коли geometry_columns є видом системних каталогів, ви можете видалити стовпець geometry так само, як і будь-який інший стовпець таблиці, за допомогою ALTER TABLE Видаляє стовпець геометрії з просторової таблиці.
  • DropGeometryTable - Змінено: 2.0.0 Ця функція надається для забезпечення зворотної сумісності. Тепер, коли geometry_columns є переглядом системних каталогів, ви можете видалити таблицю з геометричними стовпцями, як і будь-яку іншу таблицю, за допомогою DROP TABLE Видаляє таблицю та всі її посилання в 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+ Повертає вказане значення ST_Geometry з представлення GML. Це псевдонім для 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 Повертає спрощене та дійсне представлення геометрії, використовуючи алгоритм Дугласа-Пьюкера.

Chapter 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):

  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.

Appendix A. Appendix

Release Notes

Table of Contents

A.1. PostGIS 3.7.0alpha1

2026/07/05

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.

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)

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)

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)

Bug Fixes

#4616, Detect pgsql2shp query keywords case-insensitively (Darafei Praliaskouski)

#2838, Emit valid X3D Coordinate nodes for 2D polygon output (Darafei Praliaskouski)

Fix WKB and TWKB parser resource exhaustion on malformed input (Darafei Praliaskouski)

#6083, Pass configured dependency include paths to fuzzer smoke builds (Darafei Praliaskouski)

#3103, Add regression coverage for exact-schema find_srid and geometry_columns lookups (Darafei Praliaskouski)

#1705, Infer constraint metadata for direct view and materialized view geometry columns (Darafei Praliaskouski)

#6038, Avoid stale relation lookups in geometry_columns after topology objects are dropped (Darafei Praliaskouski)

#5655, [doc] Skip XML validation during `make check` when xsltproc is unavailable (Darafei Praliaskouski)

#5487, Improve error detail for repeated upgrades after an incomplete deprecated-function cleanup (Darafei Praliaskouski)

GH-899, [raster] Honor PostgreSQL interrupts in long-running GDAL progress callbacks (Darafei Praliaskouski)

#5975, Initialize skipped union-find cluster ids deterministically (Darafei Praliaskouski)

#5904, [topology] Avoid MinGW format warnings when logging topology ids (Darafei Praliaskouski)

GH-885, [topology] Avoid GMP overflow in ring orientation for very large finite coordinates (Darafei Praliaskouski)

#6073, #6074, Stabilize geography LRS endpoint interpolation and pole centroid regressions on 32-bit systems (Darafei Praliaskouski)

#6082, Fix Japanese PDF build by avoiding non-ASCII arrows in SQL program listings (Darafei Praliaskouski)

GH-888, [sfcgal] Avoid stale detoasted geometry access in CG_Visibility empty-input handling for SFCGAL < 2.2 (Darafei Praliaskouski)

#3179, Mark truncated libpgcommon PostgreSQL messages instead of silently dropping the tail (Darafei Praliaskouski)

#6003, Avoid size_t formats in liblwgeom logging/error wrappers for MinGW builds (Darafei Praliaskouski)

GH-886, ST_ClusterRelateWin validates NULL relate matrices before detoasting them (Darafei Praliaskouski)

GH-889, ST_Relate pattern inversion avoids out-of-bounds access on short DE-9IM patterns (Darafei Praliaskouski)

GH-890, Avoid GIDX BRIN summary merges across mismatched dimensions (Darafei Praliaskouski)

#5948, [topology] Prevent MakeTopologyPrecise from erasing edges when grid size exceeds their extent (Darafei Praliaskouski)

#5959, Prevent histogram target overflow when analysing massive tables (Darafei Praliaskouski)

#6080, Avoid out-of-bounds hex WKB lookup for high-bit input bytes (Darafei Praliaskouski)

GH-895, Qualify pg_class lookup during SRID/PROJ validation (Darafei Praliaskouski)

#4828, geometry_columns handles NOT VALID SRID checks without errors (Darafei Praliaskouski)

#6048, [raster] ST_Clip no longer crashes when clipping sparse band selections (Darafei Praliaskouski)

GH-894, [raster] Fix Float16 import, mixed nodata warping, band replacement cleanup, GDAL credential redaction, and Python GDAL compatibility (Darafei Praliaskouski)

Flatgeobuf schema mismatch vulnerability (NeuroWinter)

#5899, pg_upgrade issue for non-standard geography SRID (Paul Ramsey)

#2583, Preserve Z/ZM dimensional qualifiers in ST_AsEWKT output for TIN (Darafei Praliaskouski)