PostGIS 3.5.0dev Handbuch

DEV (Thu 29 Feb 2024 10:34:23 AM UTC rev. 8f341b2 )

Die PostGIS Development Group

Abstract

PostGIS ist eine Erweiterung des objektrelationalen Datenbanksystems PostgreSQL. Es ermöglicht die Speicherung von Geoobjekten eines GIS (Geoinformationssystem) in der Datenbank. PostGIS unterstützt räumliche, GIST-basierte R-Tree Indizes, sowie Funktionen zur Analyse und Bearbeitung von Geoobjekten.

Dieses Handbuch beschreibt die Version 3.5.0dev

Diese Arbeit ist unter der Creative Commons Attribution-Share Alike 3.0 License lizensiert. Sie können den Inhalt ungeniert nutzen, aber wir ersuchen Sie das PostGIS Projekt namentlich aufzuführen und wenn möglich einen Verweis auf https://postgis.net zu setzen.


Table of Contents

Chapter 1. Einführung

PostGIS erweitert das relationale Datenbanksystem PostgreSQL zu einer Geodatenbank. PostGIS wurde im Rahmen eines Technologieforschungsprojektes zu Geodatenbanken von Refractions Research Inc gegründet. Refractions ist ein Beratungsunternehmen für GIS und Datenbanken in Viktoria, British Columbia, Kanada, spezialisiert auf Datenintegration und Entwicklung von Individualsoftware.

PostGIS ist ein Projekt der OSGeo Foundation. PostGIS wird von vielen FOSS4G-Entwicklern und Unternehmen auf der ganzen Welt laufend verbessert und finanziert. Diese profitieren ihrerseits von der Funktionsvielfalt und Einsatzflexibilität von PostGIS.

Die PostGIS Project Develpment Group beabsichtigt durch die Unterstützung und Weiterentwicklung von PostGIS eine hohe Funktionsvielfalt zu erreichen. Diese soll wichtige GIS-Funktionalitäten, Kompatibilität mit den spatialen Standards OpenGIS und SQL/MM, hochentwickelte topologische Konstrukte (Coverages, Oberflächen, Netzwerke), Datenquellen für Desktop Benutzeroberflächen zum Darstellen und Bearbeiten von GIS Daten, sowie Werkzeuge für den Zugriff via Internettechnologie beinhalten.

1.1. Projektleitung

Das PostGIS Project Steering Committee (PSC) koordiniert die allgemeine Ausrichtung, den Releasezyklus, die Dokumentation und die Öffentlichkeitsarbeit des PostGIS Projektes. Zusätzlich bietet das PSC allgemeine Unterstützung für Anwender, übernimmt und prüft Patches aus der PostGIS Gemeinschaft und stimmt über sonstige Themen, wie Commit-Zugriff für Entwickler, neue PSC Mitglieder oder entscheidende Änderungen an der API, ab.

Raúl Marín Rodríguez

MVT-Unterstützung, Fehlerbehebung, Leistungs- und Stabilitätsverbesserungen, GitHub-Kuratierung, Anpassung von PostGIS an PostgreSQL-Versionen

Regina Obe

CI- und Website-Wartung, Windows-Produktions- und Experimental-Builds, Dokumentation, Anpassung von PostGIS an PostgreSQL-Releases, X3D-Unterstützung, TIGER-Geocoder-Unterstützung, Verwaltungsfunktionen.

Darafei Praliaskouski

Indexverbesserungen, Fehlerbehebung und Verbesserungen der Geometrie-/Geografiefunktionen, SFCGAL, Raster, GitHub-Kuratierung und CI-Wartung.

Paul Ramsey (Vorsitzender)

Mitbegründer des PostGIS Projektes. Allgemeine Fehlerbehebung, geographische Unterstützung, Indizes zur Unterstützung von Geographie und Geometrie (2D, 3D, nD Index und jegliche räumliche Indizes), grundlegende interne geometrische Strukturen, PointCloud (in Entwicklung), Einbindung von GEOS Funktionalität und Abstimmung mit GEOS Releases, Abglech von PostGIS mit den PostgreSQL Releases, Loader/Dumper und die Shapefile Loader GUI.

Sandro Santilli

Fehlerkorrekturen und -wartung, ci-Wartung, Git-Mirror-Verwaltung, Verwaltungsfunktionen, Integration neuer GEOS-Funktionen und Anpassung an GEOS-Releases, Topologie-Unterstützung sowie Raster-Framework und Low-Level-API-Funktionen.

1.2. Aktuelle Kernentwickler

Nicklas Avén

Verbesserung und Erweiterung von Distanzfunktionen (einschließlich 3D-Distanz und Funktionen zu räumlichen Beziehungen), Tiny WKB Ausgabeformat (TWKB) (in Entwicklung) und allgemeine Unterstützung von Anwendern.

Loïc Bartoletti

SFCGAL-Verbesserungen und -Wartung sowie CI-Unterstützung

Dan Baston

Beiträge zu den geometrischen Clusterfunktionen, Verbesserung anderer geometrischer Alorithmen, GEOS Erweiterungen und allgemeine Unterstützung von Anwendern.

Martin Davis

GEOS-Verbesserungen und Dokumentation

Björn Harrtell

MapBox Vector Tile, GeoBuf, und Flatgeobuf Funktionen. Gitea-Tests und GitLab-Experimente.

Aliaksandr Kalenik

Geometrieverarbeitung, PostgreSQL gist, allgemeine Fehlerbehebung

1.3. Frühere Kernentwickler

Bborie Park

Vorheriges PSC-Mitglied. Rasterentwicklung, Integration mit GDAL, Rasterloader, Benutzerunterstützung, allgemeine Fehlerbehebung, Testen auf verschiedenen Betriebssystemen (Slackware, Mac, Windows und mehr)

Mark Cave-Ayland

Koordiniert die Wartung und Fehlerbehebung, die Selektivität und die Anbindung von räumlichen Indizes, den Loader/Dumper und die Shapfile Loader GUI, die Einbindung von neuen Funktionen sowie die Verbesserung von neuen Funktionen.

Jorge Arévalo

Entwicklung von PostGIS Raster, GDAL-Treiberunterstützung, Lader/loader

Olivier Courtin

Ein- und Ausgabefunktionen für XML (KML,GML)/GeoJSON, 3D Unterstützng und Bugfixes.

Chris Hodgson

Ehemaliges PSC Mitglied. Allgemeine Entwicklungsarbeit, Wartung von Buildbot und Homepage, OSGeo Inkubationsmanagement.

Mateusz Loskot

CMake Unterstützung für PostGIS, Entwicklung des ursprünglichen Raster-Laders in Python und systemnahe Funktionen der Raster-API

Kevin Neufeld

Ehemaliges PSC Mitglied. Dokumentation und Werkzeuge zur Dokumentationsunterstützung, Buildbot Wartung, fortgeschrittene Anwenderunterstützung auf der PostGIS Newsgroup, Verbesserungen an den Funktionen zur Verwaltung von Geometrien.

Dave Blasby

Der ursprüngliche Entwickler und Mitbegründer von PostGIS. Dave schrieb die serverseitigen Bereiche, wie das Binden von Indizes und viele der serverseitiger analytischer Funktionen.

Jeff Lounsbury

Ursprüngliche Entwicklung des Shapefile Loader/Dumper. Aktuell ist er Vertreter der PostGIS Projekt Inhaber.

Mark Leslie

Laufende Wartung und Entwicklung der Kernfunktionen. Erweiterte Unterstützung von Kurven. Shapefile Loader GUI.

Pierre Racine

Architekt der PostGIS-Rasterimplementierung. Raster-Gesamtarchitektur, Prototyping, Programmierunterstützung

David Zwarg

Entwickelt für Raster (in erster Linie analytische Funktionen in Map Algebra)

1.4. Weitere Mitwirkende

Die einzelnen Mitwirkenden

Alex BodnaruGino LucreziMatthias Bucht
Alex MayrhoferGreg TroxelMaxime Guillaud
Andrea PeriGuillaume LelargeMaxime van Noppen
Andreas Forø TollefsenGiuseppe BroccoloMaxime Schoemans
Andreas NeumannHan WangMichael Fuhr
Andrew GierthHans LemuetMike Toews
Anne GhislaHaribabu KommiNathan Wagner
Antoine BajoletHavard TveiteNathaniel Clay
Arthur LesuisseIIDA TetsushiNikita Shulga
Artur ZakirovIngvild NystuenNorman Vine
Barbara PhillipotJackie LengPatricia Tozer
Ben JubbJames MarcaRafal Magda
Bernhard ReiterJan KatinsRalph Mason
Björn EsserJan TojnarRémi Cura
Brian HamlinJason SmithRichard Greenwood
Bruce RindahlJeff AdamsRobert Coup
Bruno Wolff IIIJelte FennemaRoger Besatzung
Bryce L. NordgrenJim JonesRon Mayer
Carl AndersonJoe ConwaySebastiaan Couwenberg
Charlie SavageJonne SavolainenSergej Schoulbakow
Chris MayoJose Carlos Martinez LlariSergej Fedosejew
Christian SchroederJörg HabenichtShinichi Sugiyama
Christoph BergJulien RouhaudShoaib Burq
Christoph Moench-TegederKashif RasulSilvio Grosso
Dane SpringmeyerKlaus FoersterStefan Corneliu Petrea
Daryl HerzmannKris JurkaSteffen Macke
Dave FuhryLaurenz AlbeStepan Kusmin
David ZwargLars RoessigerStephen Frost
David ZwargLeo HsuSteven Ottens
David ZwargLoic DacharyTalha Rizwan
Dmitri WassiljewLuca S. PercichTeramoto Ikuhiro
Eduin CarrilloLucas C. Villa RealTom Glancy
Esteban ZimanyiMaria Arias de ReynaTom van Tilburg
Eugene AntimirovMarc DucobuVictor Collod
Auch RouaultMark SondheimVincent Bre
Florian WeimerMarkus SchaberVincent Mora
Frank WarmerdamMarkus WannerVincent Picavet
Georg SilvaMatt AmosVolf Tomáš
Gerald FenoyMatt Bretl 

Gründungs-Sponsoren

Dabei handelt es sich um Unternehmen, die Entwicklungszeit, Hosting, oder direkte finanzielle Förderungen, in das PostGIS Projekt eingebracht haben

Crowd Funding-Kampagnen

Wir starten Crowdfunding Kampagnen, um dringend gewünschte und von vielen Anwendern benötigte Funktionalitäten zu finanzieren. Jede Kampagne konzentriert sich auf eine bestimmte Funktionalität oder eine Gruppe von Funktionen. Jeder Sponsor spendiert einen kleinen Teil des benötigten Geldes und wenn genug Menschen/Organisationen mitmachen, können wir die Arbeit bezahlen, von der dann viele etwas haben. Falls Sie eine Idee für eine Funktionalität haben, bei der Sie glauben, dass viele andere bereit sind diese mitzufinanzieren, dann schicken Sie bitte Ihre Überlegungen an die PostGIS newsgroup - gemeinsam wird es uns gelingen.

PostGIS 2.0.0 war die erste Version, mit der wir diese Strategie verfolgten. Wir benutzten PledgeBank und hatten zwei erfolgreiche Kampagnen.

postgistopology - mehr als 10 Sponsoren förderten mit jeweils $250 USD die Entwicklung von TopoGeometry Funktionen und das Aufmöbeln der Topologie-Unterstützung für 2.0.0.

postgis64windows - 20 Sponsoren förderten die Arbeit an den Problemen mit der 64-bit Version von PostGIS für Windows mit jeweils $100 USD. Es ist tatsächlich geschehen und nun steht eine 64-bit Version von PostGIS 2.0.1 als PostgreSQL Stack-Builder zur Verfügung.

Wichtige Support-Bibliotheken

Die GEOS Geometrieoperationsbibliothek

Die GDAL Geospatial Data Abstraction Library (GDAL) wurde verwendet, um einen Großteil der in PostGIS 2 eingeführten Rasterfunktionalität zu unterstützen. Verbesserungen, die in GDAL benötigt werden, um PostGIS zu unterstützen, werden dem GDAL-Projekt zur Verfügung gestellt.

Die PROJ kartographische Projektionsbibliothek

Zu guter Letzt das PostgreSQL DBMS, der Gigant auf dessen Schultern PostGIS steht. Die Geschwindigkeit und Flexibilität von PostGIS wäre ohne die Erweiterbarkeit, den großartigen Anfrageplaner, den GIST Index, und der Unmenge an SQL Funktionen, die von PostgreSQL bereitgestellt werden, nicht möglich.

Chapter 2. PostGIS Installation

Dieses Kapitel erläutert die notwendigen Schritte zur Installation von PostGIS.

2.1. Kurzfassung

Zum Kompilieren müssen die Abhängigkeiten im Suchpfad eingetragen sein:

tar -xvzf postgis-3.5.0dev.tar.gz
cd postgis-3.5.0dev
./configure
make
make install

Nachdem PostGIS installiert ist, muss es in jeder Datenbank-Instanz, in der es verwendet werden soll, aktiviert werden.

2.2. Kompilierung und Installation des Quellcodes: Detaillierte Beschreibung

[Note]

Viele Betriebssysteme stellen heute bereits vorkompilierte Pakete für PostgreSQL/PostGIS zur Verfügung. Somit ist eine Kompilation nur notwendig, wenn man die aktuellsten Versionen benötigt oder für die Paketverwaltung zustänig ist.

Dieser Abschnitt enthält allgemeine Kompilierungsanweisungen. Wenn Sie für Windows etc. oder ein anderes Betriebssystem kompilieren, können Sie zusätzliche, detailliertere Hilfe unter PostGIS User contributed compile guides und PostGIS Dev Wiki finden.

Vorgefertigte Pakete für verschiedene Betriebssysteme sind in PostGIS Vorgefertigte Pakete aufgeführt.

Wenn Sie ein Windowsbenutzer sind, können Sie stabile Kompilationen mittels Stackbuilder oder die PostGIS Windows download site erhalten. Es gibt auch very bleeding-edge windows experimental builds, die ein oder zweimal pro Woche, bzw. anlassweise kompiliert werden. Damit können Sie mit im Aufbau befindlichen PostGIS Releases experimentieren.

Das PostGIS-Modul ist eine Erweiterung für den PostgreSQL-Backend-Server. Als solches benötigt PostGIS 3.5.0dev vollen Zugriff auf die Header des PostgreSQL-Servers, um kompiliert werden zu können. Es kann mit den PostgreSQL-Versionen 12 - 17 kompiliert werden. Frühere Versionen von PostgreSQL werden nicht unterstützt.

Lesen Sie die PostgreSQL-Installationsanleitung, wenn Sie PostgreSQL noch nicht installiert haben. https://www.postgresql.org .

[Note]

Um die GEOS Funktionen nutzen zu können, muss bei der Installation von PostgreSQL explizit gegen die Standard C++ Bibliothek gelinkt werden:

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

Dies dient als Abhilfe für C++ Fehler bei der Interaktion mit älteren Entwicklungswerkzeugen. Falls eigenartige Probleme auftreten (die Verbindung zum Backend bricht unerwartet ab oder ähnliches) versuchen Sie bitte diesen Trick. Dies verlangt natürlich die Kompilation von PostgreSQL von Grund auf.

Die folgenden Schritte bescheiben die Konfiguration und Kompilation des PostGIS Quellcodes. Sie gelten für Linux Anwender und funktionieren nicht für Windows oder Mac.

2.2.1. Nutzung des Quellcodes

Das PostGIS Quellarchiv kann von der Download Webseite https://postgis.net/stuff/postgis-3.5.0dev.tar.gz bezogen werden.

wget https://postgis.net/stuff/postgis-3.5.0dev.tar.gz
tar -xvzf postgis-3.5.0dev.tar.gz
cd postgis-3.5.0dev

Dadurch wird das Verzeichnis postgis-3.5.0dev im aktuellen Arbeitsverzeichnis erzeugt.

Alternativ kann der Quellcode auch von svn repository http://svn.osgeo.org/postgis/trunk/ bezogen werden.

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

Um die Installation fortzusetzen ist in das neu erstellte Verzeichnis postgis-3.5.0dev zu wechseln.

./configure

2.2.2. Systemvoraussetzungen

Zur Kompilation und Anwendung stellt PostGIS die folgenden Systemanforderungen:

Notwendige Systemvoraussetzungen

  • PostgreSQL 12 - 17. Eine vollständige Installation von PostgreSQL (einschließlich der Server-Header) ist erforderlich. PostgreSQL ist verfügbar unter https://www.postgresql.org .

    Eine vollständige PostgreSQL/PostGIS-Unterstützungsmatrix und PostGIS/GEOS-Unterstützungsmatrix finden Sie unter https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

  • GNU C Compiler (gcc). Es können auch andere ANSI C Compiler zur PostGIS Kompilation verwendet werden, aber die Kompilation mit gcc macht die geringsten Probleme.

  • GNU Make (gmake oder make). Für viele Systeme ist GNU make die Standardversion von make. Überprüfe die Version durch make -v. Andere Versionen von make können das PostGIS Makefile nicht richtig ausführen.

  • Proj Reprojektion Bibliothek. Proj 6.1 oder höher ist erforderlich. Die Proj-Bibliothek wird zur Unterstützung der Koordinatenreprojektion in PostGIS verwendet. Proj steht zum Download zur Verfügung unter https://proj.org/ .

  • GEOS-Geometriebibliothek, Version 3.8.0 oder höher, aber GEOS 3.12+ ist erforderlich, um alle neuen Funktionen und Eigenschaften voll nutzen zu können. GEOS steht zum Download bereit unter https://libgeos.org .

  • LibXML2, Version 2.5.x oder höher. LibXML2 wird derzeit in einigen Importfunktionen (ST_GeomFromGML und ST_GeomFromKML) verwendet. LibXML2 steht unter https://gitlab.gnome.org/GNOME/libxml2/-/releases zum Download bereit.

  • JSON-C, Version 0.9 oder höher. JSON-C wird zurzeit benutzt um GeoJSON über die Funktion ST_GeomFromGeoJson zu importieren. JSON-C kann unter https://github.com/json-c/json-c/releases/ bezogen werden.

  • GDAL, Version 2+ ist erforderlich 3+ wird bevorzugt. Dies ist für die Rasterunterstützung erforderlich. https://gdal.org/download.html.

  • Wenn mit PostgreSQL+JIT kompiliert wird, ist die LLVM-Version >=6 erforderlich https://trac.osgeo.org/postgis/ticket/4125.

Optionale Systemanforderungen

  • GDAL (pseudo optional) nur wenn Sie kein Rasterunterstützung möchten, können Sie es weglassen. Sorgen Sie außerdem dafür das Treiber, die Sie brauchen wie in Section 3.2, “Konfigurieren der Rasterunterstützung” beschrieben, aktiviert sind.

  • GTK (benötigt GTK+2.0, 2.8+) um den "shp2pgsql-gui shape file loader" zu kompilieren. http://www.gtk.org/ .

  • SFCGAL, Version 1.3.1 (oder höher), 1.4.1 oder höher wird empfohlen und benötigt, um alle Funktionen nutzen zu können. SFCGAL kann verwendet werden, um zusätzliche 2D- und 3D-Analysefunktionen für PostGIS cf Chapter 8, Referenz der SFCGAL-Funktionen bereitzustellen. Außerdem kann SFCGAL anstelle von GEOS für einige 2D-Funktionen verwendet werden, die von beiden Backends bereitgestellt werden (z. B. ST_Intersection oder ST_Area). Eine PostgreSQL-Konfigurationsvariable postgis.backend erlaubt es dem Endbenutzer zu kontrollieren, welches Backend er verwenden möchte, wenn SFCGAL installiert ist (GEOS als Standard). Hinweis: SFCGAL 1.2 benötigt mindestens CGAL 4.3 und Boost 1.54 (vgl. https://sfcgal.org) https://gitlab.com/sfcgal/SFCGAL/.

  • Um den Section 12.1, “Adressennormierer” zu bauen, benötigen Sie auch PCRE http://www.pcre.org (welches in der Regel auf Nix-Systemen bereits installiert ist). Section 12.1, “Adressennormierer” wird automatisch gebaut, wenn es eine PCRE-Bibliothek erkennt, oder Sie geben einen gültigen --mit-pcre-dir=/path/to/pcre während configure an.

  • Um ST_AsMVT verwenden zu können, wird die protobuf-c Bibliothek (für die Anwendung) und der protoc-c Kompiler (für die Kompilation) benötigt. Weiters ist pgk-config erforderlich um die korrekte Minimumversion von protobuf-c zu bestimmen. Siehe protobuf-c.

  • CUnit (CUnit). Wird für Regressionstest benötigt. http://cunit.sourceforge.net/

  • DocBook (xsltproc) ist für die Kompilation der Dokumentation notwendig. Docbook steht unter http://www.docbook.org/ zur Verfügung.

  • DBLatex (dblatex) ist zur Kompilation der Dokumentation im PDF-Format nötig. DBLatex liegt unter http://dblatex.sourceforge.net/ vor.

  • ImageMagick (convert) wird zur Erzeugung von Bildern für die Dokumentation benötigt. ImageMagick kann von http://www.imagemagick.org/ bezogen werden.

2.2.3. Konfiguration

Wie bei den meisten Installationen auf Linux besteht der erste Schritt in der Erstellung eines Makefiles, welches dann zur Kompilation des Quellcodes verwendet wird. Dies wird durch einen Aufruf des Shell Scripts erreicht.

./configure

Ohne zusätzliche Parameter legt dieser Befehl die Komponenten und Bibliotheken fest, welche für die Kompilation des PostGIS Quellcodes auf Ihrem System benötigt werden. Obwohl dies der häufigste Anwendungsfall von ./configure ist, akzeptiert das Skript eine Reihe von Parametern, falls sich die benötigten Bibliotheken und Programme nicht in den Standardverzeichnissen befinden.

Die folgende Liste weist nur die am häufigsten verwendeten Parameter auf. Für eine vollständige Liste benutzen Sie bitte --help oder --help=short .

--with-library-minor-version

Ab PostGIS 3.0 werden die standardmäßig erzeugten Bibliotheksdateien nicht mehr die Nebenversion als Teil des Dateinamens haben. Das bedeutet, dass alle PostGIS 3 Bibliotheken auf postgis-3 enden. Dies wurde gemacht, um pg_upgrade einfacher zu machen, mit dem Nachteil, dass Sie nur eine Version der PostGIS 3 Serie auf Ihrem Server installieren können. Um das alte Verhalten der Datei einschließlich der Nebenversion zu erhalten: z.B. postgis-3.0 fügen Sie diesen Schalter zu Ihrer configure-Anweisung hinzu.

--prefix=PREFIX

Das Verzeichnis, in dem die PostGIS Bibliotheken und SQL-Skripts installiert werden. Standardmäßig ist dies das Verzeichnis in dem auch PostgreSQL installatiert wurde.

[Caution]

Dieser Parameter ist zur Zeit defekt; somit kann PostGIS nur in das PostgreSQL Installationsverzeichnis installiert werden. Dieser Bug kann auf http://trac.osgeo.org/postgis/ticket/635 verfolgt werden.

--with-pgconfig=FILE

PostgreSQL stellt das Dienstprogramm pg_config zur Verfügung um Extensions wie PostGIS die Auffindung des PostgreSQL Installationsverzeichnisses zu ermöglichen. Benutzen Sie bitte diesen Parameter (--with-pgconfig=/path/to/pg_config) um eine bestmmte PostgreSQL Installation zu definieren, gegen die PostGIS kompiliert werden soll.

--with-gdalconfig=FILE

GDAL, eine erforderliche Bibliothek, welche die Funktionalität zur Rasterunterstützung liefert. gdal-config um Software Installationen die Auffindung des GDAL Installationsverzeichnis zu ermöglichen. Benutzen Sie bitte diesen Parameter (--with-gdalconfig=/path/to/gdal-config) um eine bestimmte GDAL Installation zu definieren, gegen die PostGIS kompiliert werden soll.

--with-geosconfig=FILE

GEOS, eine erforderliche Geometriebibliothek, stellt geos-config zur Verfügung, um Software Installationen das Auffinden des GEOS Installationsverzeichnisses zu ermöglichen. Benutzen Sie bitte diesen Parameter (--with-geosconfig=/path/to/geos-config) um eine bestimmte GEOS Installation zu definieren, gegen die PostGIS kompiliert werden soll.

--with-xml2config=FILE

LibXML ist die Bibliothek, die für die Durchführung von GeomFromKML/GML-Prozessen erforderlich ist. Normalerweise wird sie gefunden, wenn Sie libxml installiert haben, aber wenn nicht oder Sie eine bestimmte Version verwenden wollen, müssen Sie PostGIS auf eine bestimmte xml2-config confi-Datei verweisen, damit Softwareinstallationen das LibXML-Installationsverzeichnis finden können. Verwenden Sie diesen Parameter (>--with-xml2config=/path/to/xml2-config), um manuell eine bestimmte LibXML-Installation anzugeben, gegen die PostGIS gebaut werden soll.

--with-projdir=DIR

Proj4 ist eine Bibliothek, die von PostGIS zur Koordinatentransformation benötigt wird. Benutzen Sie bitte diesen Parameter (--with-projdir=/path/to/projdir) um ein bestimmtes Proj4 Installationsverzeichnis anzugeben, für das PostGIS kompiliert werden soll.

--with-libiconv=DIR

Das Verzeichnis in dem iconv installiert ist.

--with-jsondir=DIR

JSON-C ist eine MIT-lizensierte JSON Bibliothek, die von PostGIS für ST_GeomFromJSON benötigt wird. Benutzen Sie bitte diesen Parameter (--with-jsondir=/path/to/jsondir), um ein bestimmtes JSON-C Installationsverzeichnis anzugeben, für das PostGIS kompiliert werden soll.

--with-pcredir=DIR

PCRE ist eine BSD-lizensierte Perl compatible Bibliothek für reguläre Ausdrücke, die von der Erweiterung "address_standardizer" benötigt wird. Verwenden Sie diesen Parameter (--with-pcredir=/path/to/pcredir), um ein bestimmtes Installationsverzeichnis von PCRE anzugeben, gegen das PostGIS kompiliert werden soll.

--with-gui

Kompilieren Sie die Datenimport-GUI (benötigt GTK+2.0). Dies erzeugt die graphische Schnittstelle "shp2pgsql-gui" für shp2pgsql.

--without-raster

Ohne Rasterunterstützung kompilieren.

--without-topology

Ausschalten der Topologie Unterstützung. Es existiert keine entsprechende Bibliothek, da sich die gesamte benötigte Logik in der postgis-3.5.0dev Bibliothek befindet.

--with-gettext=no

Standardmäßig versucht PostGIS gettext zu detektieren und kompiliert mit gettext Unterstützung. Wenn es allerdings zu Inkompatibilitätsproblemen kommt, die zu einem Zusammenbrechen des Loader führen, so können Sie das mit diesem Befehl zur Gänze deaktivieren. Siehe Ticket http://trac.osgeo.org/postgis/ticket/748 für ein Beispiel wie dieses Problem gelöst werden kann. Sie verpassen nicht viel, wenn Sie dies deaktivieren, da es für die internationale Hilfe zum GUI Loader/Label verwendet wird, welcher nicht dokumentiert und immer noch experimentell ist.

--with-sfcgal=PATH

Ohne diesen Switch wird PostGIS ohne sfcgal Unterstützung installiert. PATH ist ein optionaler Parameter, welcher einen alternativen Pfad zu sfcgal-config angibt.

--without-phony-revision

Deaktivieren Sie die Aktualisierung von postgis_revision.h, um es an den aktuellen HEAD des Git-Repository anzupassen.

[Note]

Wenn Sie PostGIS vom Code Repository bezogen haben, müssen Sie zu allererst das Skript ausführen

./autogen.sh

Dieses Skript erzeugt das configure Skript, welches seinerseits zur Anpassung der Installation von PostGIS eingesetzt wird.

Falls Sie stattdessen PostGIS als Tarball vorliegen haben, dann ist es nicht notwendig ./autogen.sh auszuführen, da configure bereits erzeugt wurde.

2.2.4. Build-Prozess

Sobald das Makefile erzeugt wurde, ist der Build-Prozess für PostGIS so einfach wie

make

Die letzte Zeile der Ausgabe sollte "PostGIS was built successfully. Ready to install." enthalten

Seit PostGIS v1.4.0 haben alle Funktionen Kommentare, welche aus der Dokumentation erstellt werden. Wenn Sie diese Kommentare später in die räumliche Datenbank importieren wollen, können Sie den Befehl ausführen der "docbook" benötigt. Die Dateien "postgis_comments.sql", "raster_comments.sql" und "topology_comments.sql" sind im Ordner "doc" der "tar.gz"-Distribution mit paketiert, weshalb Sie bei einer Installation vom "tar ball" her, die Kommentare nicht selbst erstellen müssen. Die Kommentare werden auch als Teil der Installation "CREATE EXTENSION" angelegt.

make comments

Eingeführt in PostGIS 2.0. Erzeugt HTML-Spickzettel, die als schnelle Referenz oder als Handzettel für Studenten geeignet sind. Dies benötigt xsltproc zur Kompilation und erzeugt 4 Dateien in dem Ordner "doc": topology_cheatsheet.html,tiger_geocoder_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html

Einige bereits Vorgefertigte können von PostGIS / PostgreSQL Study Guides als HTML oder PDF heruntergeladen werden

make cheatsheets

2.2.5. Build-Prozess für die PostGIS Extensions und deren Bereitstellung

Die PostGIS Erweiterungen/Extensions werden ab PostgreSQL 9.1+ automatisch kompiliert und installiert.

Wenn Sie aus dem Quell-Repository kompilieren, müssen Sie zuerst die Beschreibung der Funktionen kompilieren. Diese lassen sich kompilieren, wenn Sie docbook installiert haben. Sie können sie aber auch händisch mit folgender Anweisung kompilieren:

make comments

Sie müssen die Kommentare nicht kompilieren, wenn sie von einem Format "tar" weg kompilieren, da diese in der tar-Datei bereits vorkompilierten sind.

Wenn Sie gegen PostgreSQL 9.1 kompilieren, sollten die Erweiterungen automatisch als Teil des Prozesses "make install" kompilieren. Falls notwendig, können Sie auch vom Ordner mit den Erweiterungen aus kompilieren, oder die Dateien auf einen anderen Server kopieren.

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 benutzt psql um Tests auszuführen und kann daher psql Umgebungsvariablen benutzen. Gängige Variablen, die man überschreiben kann, sind PGUSER,PGPORT und PGHOST. Siehe psql Umgebungsvariablen

Die Erweiterungsdateien sind für dieselbe Version von PostGIS immer ident, unabhängig vom Betriebssystem. Somit ist es in Ordnung, die Erweiterungsdateien von einem Betriebssystem auf ein anderes zu kopieren, solange die Binärdateien von PostGIS bereits installiert sind.

Falls Sie die Erweiterungen händisch auf einen anderen Server installieren wollen, müssen sie folgende Dateien aus dem Erweiterungsordner in den Ordner PostgreSQL / share / extension Ihrer PostgreSQL Installation kopieren. Ebenso die benötigten Binärdateien für das reguläre PostGIS, falls sich PostGIS noch nicht auf dem Server befindet.

  • Dies sind die Kontrolldateien, welche Information wie die Version der zu installierenden Erweiterung anzeigen, wenn diese nicht angegben ist. postgis.control, postgis_topology.control.

  • Alle Dateien in dem Ordner "/sql" der jeweiligen Erweiterung. Diese müssen in das Verzeichnis "share/extension" von PostgreSQL extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sql kopiert werden

Sobald Sie das getan haben, sollten Sie postgis, postgis_topology als verfügbare Erweiterungen in PgAdmin sehen -> extensions.

Falls Sie psql verwenden, können Sie die installierten Erweiterungen folgendermaßen abfragen:

SELECT name, default_version,installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';

             name             | default_version | installed_version
------------------------------+-----------------+-------------------
 address_standardizer         | 3.5.0dev         | 3.5.0dev
 address_standardizer_data_us | 3.5.0dev         | 3.5.0dev
 postgis                      | 3.5.0dev         | 3.5.0dev
 postgis_raster               | 3.5.0dev         | 3.5.0dev
 postgis_sfcgal               | 3.5.0dev         |
 postgis_tiger_geocoder       | 3.5.0dev         | 3.5.0dev
 postgis_topology             | 3.5.0dev         |
(6 rows)

Wenn Sie in der Datenbank, die Sie abfragen, eine Erweiterung installiert haben, dann sehen Sie einen Hinweis in der Spalte installed_version. Wenn Sie keine Datensätze zurückbekommen bedeutet dies, dass Sie überhaupt keine PostGIS Erweiterung auf dem Server installiert haben. PgAdmin III 1.14+ bietet diese Information ebenfalls in der Sparte extensions im Navigationsbaum der Datenbankinstanz an und ermöglicht sogar ein Upgrade oder eine Deinstallation über einen Rechtsklick.

Wenn die Erweiterungen vorhanden sind, können Sie die PostGIS-Extension sowohl mit der erweiterten pgAdmin Oberfläche als auch mittels folgender SQL-Befehle in einer beliebigen Datenbank installieren:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch; --needed for postgis_tiger_geocoder
--optional used by postgis_tiger_geocoder, or can be used standalone
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;

Sie können psql verwenden, um sich die installierten Versionen und die Datenbankschemen in denen sie installiert sind, anzeigen zu lassen.

\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name        | postgis
Version     | 3.5.0dev
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_tiger_geocoder
Version     | 3.5.0dev
Schema      | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.5.0dev
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

Die Erweiterungstabellen spatial_ref_sys. layer und topology können nicht explizit gesichert werden. Sie können nur mit der entsprechenden postgis oder postgis_topology Erweiterung gesichert werden, was nur geschieht, wenn Sie die ganze Datenbank sichern. Ab PostGIS 2.0.2 werden nur diejenigen Datensätze von SRID beim Backup der Datenbank gesichert, die nicht mit PostGIS paketiert sind. Sie sollten daher keine paketierte SRID ändern und Sie können erwarten, dass Ihre Änderungen gesichert werden. Wenn Sie irgendein Problem finden, reichen Sie bitte ein Ticket ein. Die Struktur der Erweiterungstabellen wird niemals gesichert, da diese mit CREATE EXTENSION erstellt wurde und angenommen wird, dass sie für eine bestimmten Version einer Erweiterung gleich ist. Dieses Verhalten ist in dem aktuellen PostgreSQL Extension Model eingebaut, weshalb wir daran nichts ändern können.

Wenn Sie 3.5.0dev ohne unser wunderbares Extension System installiert haben, können Sie auf erweiterungsbasiert wechseln, indem Sie folgende Befehle ausführen, welche die Funktionen in ihre entsprechenden Erweiterungen paketieren.

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

2.2.6. Softwaretest

Wenn Sie die Kompilation von PostGIS überprüfen wollen:

make check

Obiger Befehl durchläuft mehere Überprüfungen und Regressionstests, indem er die angelegte Bibliothek in einer aktuellen PostgreSQL Datenbank ausführt.

[Note]

Falls Sie PostGIS so konfiguriert haben, dass nicht die Standardverzeichnisse für PostgreSQL, GEOS oder Proj4 verwendet werden, kann es sein, dass Sie die Speicherstellen dieser Bibliotheken in der Umgebungsvariablen "LD_LIBRARY_PATH" eintragen müssen.

[Caution]

Zurzeit beruht make check auf die Umgebungsvariablen PATH undPGPORT beim Ausführen der Überprüfungen - es wird nicht die Version von PostgreSQL verwendet, die mit dem Konfigurationsparameter --with-pgconfig angegeben wurde. Daher stellen Sie sicher, dass die Variable PATH mit der während der Konfiguration dedektierten Installation von PostgreSQL übereinstimmt, oder seien Sie auf drohende Kopfschmerzen vorbereitet.

Wenn make check erfolgreich ist, wird die Ausgabe von fast 500 Tests erzeugt. Die Ergebnisse sehen ähnlich aus wie die folgenden (zahlreiche Zeilen wurden weggelassen):

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

Die Erweiterungen postgis_tiger_geocoder und address_standardizer unterstützen zurzeit nur die standardmäßige Installationsüberprüfung von PostgreSQL. Um diese zu überprüfen siehe unterhalb. Anmerkung: "make install" ist nicht notwendig, wenn Sie bereits ein "make install" im Root des Ordners mit dem PostGIS Quellcode durchgeführt haben.

Für den address_standardizer:

cd extensions/address_standardizer
make install
make installcheck
          

Die Ausgabe sollte folgendermaßen aussehen:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test-init-extensions     ... ok
test test-parseaddress        ... ok
test test-standardize_address_1 ... ok
test test-standardize_address_2 ... ok

=====================
 All 4 tests passed.
=====================

Für den Tiger Geokodierer müssen Sie die Erweiterungen "postgis" und "fuzzystrmatch" in Ihrer PostgreSQL Instanz haben. Die Überprüfungen des "address_standardizer" laufen ebenfalls an, wenn Sie postgis mit "address_standardizer" Unterstützung kompiliert haben:

cd extensions/postgis_tiger_geocoder
make install
make installcheck
          

Die Ausgabe sollte folgendermaßen aussehen:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== installing postgis_tiger_geocoder      ==============
CREATE EXTENSION
============== installing address_standardizer        ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok
test test-pagc_normalize_address ... ok

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

2.2.7. Installation

Um PostGIS zu installieren geben Sie bitte folgendes ein

make install

Dies kopiert die Installationsdateien von PostGIS in das entsprechende Unterverzeichnis, welches durch den Konfigurationsparameter --prefix bestimmt wird. Insbesondere:

  • Die Binärdateien vom Loader und Dumper sind unter [prefix]/bin installiert.

  • Die SQL-Dateien, wie postgis.sql sind unter [prefix]/share/contrib installiert.

  • Die PostGIS Bibliotheken sind unter [prefix]/lib installiert.

Falls Sie zuvor den Befehl make comments ausgeführt haben, um die Dateien postgis_comments.sql und raster_comments.sql anzulegen, können Sie die SQL-Dateien folgendermaßen installieren:

make comments-install

[Note]

postgis_comments.sql, raster_comments.sql und topology_comments.sql wurden vom klassischen Build- und Installationsprozess getrennt, da diese mit xsltproc eine zusätzliche Abhängigkeit haben.

2.3. Installation und Verwendung des Adressennormierers

Die Erweiterung address_standardizer musste als getrenntes Paket heruntergeladen werden. Ab PostGIS 2.2 ist es mitgebündelt. Für weitere Informationen zu dem address_standardizer, was er kann und wie man ihn für spezielle Bedürfnisse konfigurieren kann, siehe Section 12.1, “Adressennormierer”.

Dieser Adressennormierer kann in Verbindung mit der in PostGIS paketierten Erweiterung "tiger gecoder" als Ersatz für Normalize_Address verwendet werden. Um diesen als Ersatz zu nutzen, siehe Section 2.4.2, “Die Adressennormierer-Extension zusammen mit dem Tiger Geokodierer verwenden”. Sie können diesen auch als Baustein für Ihren eigenen Geokodierer verwenden oder für die Normierung von Adressen um diese leichter vergleichbar zu machen.

Der Adressennormierer benötigt PCRE, welches üblicherweise auf Nix-Systemen bereits installiert ist. Sie können die letzte Version aber auch von http://www.pcre.org herunterladen. Wenn PCRE während der Section 2.2.3, “Konfiguration” gefunden wird, dann wird die Erweiterung "address standardizer" automatisch kompiliert. Wenn Sie stattdessen eine benutzerdefinierte Installation von PCRE verwenden wollen, können Sie --with-pcredir=/path/to/pcre an "configure" übergeben, wobei /path/to/pcre der Root-Ordner Ihrer Verzeichnisse "include" und "lib" von PCRE ist.

Für Windows Benutzer ist ab PostGIS 2.1+ die Erweiterung "address_standardizer" bereits mitpaketiert. Somit besteht keine Notwendigkeit zu Kompilieren und es kann sofort der Schritt CREATE EXTENSION ausgeführt werden.

Sobald die Installation beendet ist, können Sie sich mit Ihrer Datenbank verbinden und folgenden SQL-Befehl ausführen:

CREATE EXTENSION address_standardizer;

Der folgende Test benötigt keine rules-, gaz- oder lex-Tabellen

SELECT num, street, city, state, zip
 FROM parse_address('1 Devonshire Place PH301, Boston, MA 02109');

Die Ausgabe sollte wie folgt sein:

num |         street         |  city  | state |  zip
-----+------------------------+--------+-------+-------
 1   | Devonshire Place PH301 | Boston | MA    | 02109

2.4. Installieren, Aktualisieren von Tiger Geocoder und Laden von Daten

Extras wie den Tiger Geokodierer befinden sich möglicherweise nicht in Ihrer PostGIS Distribution. Wenn Sie die Erweiterung "Tiger Geokodierer" vermissen, oder eine neuere Version installieren wollen, dann können Sie die Dateien share/extension/postgis_tiger_geocoder.* aus den Paketen des Abschnitts Windows Unreleased Versions für Ihre Version von PostgreSQL verwenden. Obwohl diese Pakete für Windows sind, funktionieren die Dateien der Erweiterung "postgis_tiger_geocoder" mit jedem Betriebssystem, da die Erweiterung eine reine SQL/plpgsql Anwendung ist.

2.4.1. Tiger Geocoder Aktivieren Sie Ihre PostGIS-Datenbank

  1. Diese Anleitung geht davon aus, dass Ihre PostgreSQL-Installation bereits die postgis_tiger_geocoder-Erweiterung installiert hat.

  2. Verbinden Sie sich zu Ihrer Datenbank über psql, pgAdmin oder ein anderes Werkzeug und führen Sie die folgenden SQL Befehle aus. Wenn Sie in eine Datenbank installieren, die bereits PostGIS beinhaltet, dann müssen Sie den ersten Schritt nicht ausführen. Wenn Sie auch die Erweiterung fuzzystrmatch bereits installiert haben, so müssen Sie auch den zweiten Schritt nicht ausführen.

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    --this one is optional if you want to use the rules based standardizer (pagc_normalize_address)
    CREATE EXTENSION address_standardizer;

    Wenn Sie bereits die postgis-tiger-geocoder Extension installiert haben und nur auf den letzten Stand updaten wollen:

    ALTER EXTENSION postgis UPDATE;
    ALTER EXTENSION postgis_tiger_geocoder UPDATE;

    Wenn benutzerdefinierte Einträge oder Änderungen an tiger.loader_platform oder tiger.loader_variables gemacht wurden, müssen diese aktualisiert werden.

  3. Um die Richtigkeit der Installation festzustellen, führen Sie bitte folgenden SQL-Befehl in Ihrer Datenbank aus:

    SELECT na.address, na.streetname,na.streettypeabbrev, na.zip
            FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;

    Dies sollte folgendes ausgeben:

    address | streetname | streettypeabbrev |  zip
    ---------+------------+------------------+-------
               1 | Devonshire | Pl               | 02109
  4. Erstellen Sie einen neuen Datensatz in der Tabelle tiger.loader_platform, welcher die Pfade zu Ihren ausführbaren Dateien und zum Server beinhaltet.

    Um zum Beispiel ein Profil mit dem Namen "debbie" anzulegen. welches der sh Konvention folgt, können Sie folgendes tun:

    INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep,
                       loader, environ_set_command, county_process_command)
    SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep,
               loader, environ_set_command, county_process_command
      FROM tiger.loader_platform
      WHERE os = 'sh';

    Anschließend ändern Sie die Pfade in der Spalte declare_sect, so dass diese mit den Speicherpfaden von Debbie's "pg", "nzip", "shp2pgsql", "psql", etc. übereinstimmen.

    Wenn Sie die Tabelle loader_platform nicht editieren, so beinhaltet diese lediglich die üblichen Ortsangaben und Sie müssen das erzeugte Skript editieren, nachdem es erzeugt wurde.

  5. Ab PostGIS 2.4.1 wurde der Ladevorgang der "Zip code-5 digit tabulation area" zcta5 überarbeitet, um aktuelle zcta5 Daten zu laden und ist nun ein Teil von Loader_Generate_Nation_Script, falls aktiviert. Standardmäßig ausgeschaltet, da der Ladevorgang ziemlich viel Zeit benötigt (20 bis 60 Minuten), ziemlich viel Festplattenspeicher beansprucht wird und es nur selten verwendet wird.

    Folgendermaßen können Sie deise aktivieren:

    UPDATE tiger.loader_lookuptables SET load = true WHERE table_name = 'zcta520';

    Falls vorhanden kann die Funktion Geocode diese verwenden, wenn die zips durch einen Boundary Filter begrenzt sind. Die Funktion Reverse_Geocode verwendet dies wenn eine zurückgegebene Adresse keinen zip-Code enthält, was oft bei der inversen Geokodierung von Highways auftritt.

  6. Erstellen Sie einen Ordner mit der Bezeichnung gisdata im Root des Servers oder auf Ihrem lokalen PC, wenn Sie eine schnelle Netzwerkverbindung zu dem Server haben. In diesen Ordner werden die Dateien von Tiger heruntergeladen und aufbereitet. Wenn Sie den Ordner nicht im Root des Servers haben wollen, oder für die Staging-Umgebung in eine anderen Ordner wechseln wollen, dann können Sie das Attribut staging_fold in der Tabelle tiger.loader_variables editieren.

  7. Erstellen Sie einen Ordner "temp" in dem Ordner gisdata oder wo immer Sie staging_fold haben wollen. Dies wird der Ordner, in dem der Loader die heruntergeladenen Tigerdaten extrahiert.

  8. Anschließend führen Sie die SQL Funktion Loader_Generate_Nation_Script aus, um sicherzustellen dass die Bezeichnung Ihres benutzerdefinierten Profils verwendet wird und kopieren das Skript in eine .sh oder .bat Datei. Um zum Beispiel das Skript zum Laden einer Nation zu erzeugen:

    psql -c "SELECT Loader_Generate_Nation_Script('debbie')" -d geocoder -tA > /gisdata/nation_script_load.sh
  9. Führen Sie die erzeugten Skripts zum Laden der Nation auf der Befehlszeile aus.

    cd /gisdata
    sh nation_script_load.sh
  10. Nachdem Sie das "Nation" Skript ausgeführt haben, sollten sich drei Tabellen in dem Schema tiger_data befinden und mit Daten befüllt sein. Führen Sie die folgenden Abfragen in "psql" oder "pgAdmin" aus, um dies sicher zu stellen

    SELECT count(*) FROM tiger_data.county_all;
    count
    -------
      3235
    (1 row)
    SELECT count(*) FROM tiger_data.state_all;
    count
    -------
        56
    (1 row)
    

    Dies enthält nur Daten, wenn Sie zcta5 zum Laden markiert haben.

    SELECT count(*) FROM tiger_data.zcta5_all;
    count
    -------
      33931
    (1 row)
    
  11. Standardmäßig werden die Tabellen, die bg, tract, tabblock20 entsprechen, nicht geladen. Diese Tabellen werden vom Geocoder nicht verwendet, aber von den Leuten für Bevölkerungsstatistiken genutzt. Wenn Sie sie als Teil Ihrer Staatslasten laden möchten, führen Sie die folgende Anweisung aus, um sie zu aktivieren.

    UPDATE tiger.loader_lookuptables SET load = true WHERE load = false AND lookup_name IN('tract', 'bg', 'tabblock20');

    Alternativ können Sie diese Tabellen nach dem Laden der Länderdaten importieren, indem Sie das Loader_Generate_Census_Script verwenden

  12. Für jeden Staat, für den Sie Daten laden wollen, müssen Sie ein Skript Loader_Generate_Script erstellen.

    [Warning]

    Erstellen Sie das Skript für die Bundesstaaten NICHT bevor die Daten zur Nation geladen wurden, da das Skript die Liste "county" verwendet, welche durch das "nation"-Skript geladen wird.

  13. psql -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'debbie')" -d geocoder -tA > /gisdata/ma_load.sh
  14. Die vorher erzeugten, befehlszeilenorientierten Skripts ausführen.

    cd /gisdata
    sh ma_load.sh
  15. Nachdem Sie mit dem Laden der Daten fertig sind, ist es eine gute Idee ein ANALYZE auf die Tigertabellen auszuführen, um die Datenbankstatistik (inklusive vererbter Statistik) zu aktualisieren

    SELECT install_missing_indexes();
    vacuum (analyze, verbose) tiger.addr;
    vacuum (analyze, verbose) tiger.edges;
    vacuum (analyze, verbose) tiger.faces;
    vacuum (analyze, verbose) tiger.featnames;
    vacuum (analyze, verbose) tiger.place;
    vacuum (analyze, verbose) tiger.cousub;
    vacuum (analyze, verbose) tiger.county;
    vacuum (analyze, verbose) tiger.state;
    vacuum (analyze, verbose) tiger.zcta5;
    vacuum (analyze, verbose) tiger.zip_lookup_base;
    vacuum (analyze, verbose) tiger.zip_state;
    vacuum (analyze, verbose) tiger.zip_state_loc;

2.4.2. Die Adressennormierer-Extension zusammen mit dem Tiger Geokodierer verwenden

Eine von vielen Beschwerden betrifft die Funktion Normalize_Address des Adressennormierers, die eine Adresse vor der Geokodierung vorbereitend standardisiert. Der Normierer ist bei weitem nicht perfekt und der Versuch seine Unvollkommenheit auszubessern nimmt viele Ressourcen in Anspruch. Daher haben wir ein anderes Projekt integriert, welches eine wesentlich bessere Funktionseinheit für den Adressennormierer besitzt. Um diesen neuen Adressennormierer zu nutzen, können Sie die Erweiterung so wie unter Section 2.3, “Installation und Verwendung des Adressennormierers” beschrieben kompilieren und als Extension in Ihrer Datenbank installieren.

Sobald Sie diese Extension in der gleichen Datenbank installieren, in der Sie auch postgis_tiger_geocoder installiert haben, dann können Sie Pagc_Normalize_Address anstatt Normalize_Address verwenden. Diese Erweiterung ist nicht auf Tiger beschränkt, wodurch sie auch mit anderen Datenquellen, wie internationalen Adressen, genutzt werden kann. Die Tiger Geokodierer Extension enthält eine eigenen Versionen von rules table (tiger.pagc_rules), gaz table (tiger.pagc_gaz) und lex table (tiger.pagc_lex). Diese können Sie hinzufügen und aktualisieren, um die Normierung an die eigenen Bedürfnisse anzupassen.

2.4.3. Erforderliche Werkzeuge für das Laden von Tigerdaten

Der Ladeprozess lädt Daten von der Census Webseite für die jeweiligen Nationsdateien und die angeforderten Bundesstaaten herunter, extrahiert die Dateien und lädt anschließlich jeden Bundesstaat in einen eigenen Satz von Bundesstaattabellen. Jede Bundesstaattabelle erbt von den Tabellen im Schema tiger, wodurch es ausreicht nur diese Tabellen abzufragen um auf alle Daten zugreifen zu können. Sie können auch jederzeit Bundesstaattabellen mit Drop_State_Tables_Generate_Script löschen, wenn Sie einen Bundesstaat neu laden müssen oder den Bundesstaat nicht mehr benötigen.

Um Daten laden zu können benötigen Sie folgende Werkzeuge:

  • Ein Werkzeug, um die Zip-Dateien der Census Webseite zu entpacken.

    Auf UNIX-ähnlichen Systemen: Das Programm unzip, das üblicherweise auf den meisten UNIX-ähnlichen Systemen bereits vorinstalliert ist.

    Auf Windows 7-zip, ein freies Werkzeug zum komprimieren/entkomprimieren, das Sie von http://www.7-zip.org/ herunterladen können.

  • Das shp2pgsql Kommandozeilenprogramm, welches standardmäßig mit PostGIS mitinstalliert wird.

  • wget, ein Download-Manager, der üblicherweise auf den meisten UNIX/Linux Systemen vorinstalliert ist.

    Für Windows können Sie vorkompilierte Binärdateien von http://gnuwin32.sourceforge.net/packages/wget.htm herunterladen

Wenn Sie von tiger_2010 aktualisieren, müssen Sie zuerst Drop_Nation_Tables_Generate_Script generieren und ausführen. Bevor Sie die Daten eines Staates laden, müssen Sie die landesweiten Daten laden, was Sie mit Loader_Generate_Nation_Script tun. Dabei wird ein Loader-Skript für Sie generiert. Loader_Generate_Nation_Script ist ein einmaliger Schritt, der für Upgrades (von Tiger-Volkszählungsdaten aus dem Vorjahr) und für Neuinstallationen durchgeführt werden sollte.

Wie ein Skript zum Laden der Daten für Ihre Plattform und für die gewünschten Bundesstaaten generiert werden kann siehe Loader_Generate_Script. Sie können diese stückchenweise installieren. Sie müssen nicht alle benötigten Staaten auf einmal laden. Sie können sie laden wenn Sie diese benötigen.

Nachdem die gewünschten Bundesstaaten geladen wurden, führen Sie so wie unter Install_Missing_Indexes beschrieben

SELECT install_missing_indexes();

aus.

Um zu überprüfen, dass alles funktioniert wie es sollte, können Sie eine Geokodierung über eine Adresse Ihres Staates laufen lassen, indem Sie Geocode verwenden

2.4.4. Aktualisieren der Tiger Geocoder Installation und Daten

Aktualisieren Sie zunächst Ihre postgis_tiger_geocoder Erweiterung wie folgt:

ALTER EXTENSION postgis_tiger_geocoder UPDATE;

Anschließend löschen Sie alle "nation"-Tabellen und laden die Neuen. Erstellen Sie ein "drop"-Skript mit den unter Drop_Nation_Tables_Generate_Script beschriebenen SQL-Anweisungen

SELECT drop_nation_tables_generate_script();

Führen Sie die erstellten SQL "drop"-Anweisungen aus.

Die untere SELECT Anweisung erstellt ein Skript zum Laden eines Staates. Details dazu finden Sie unter Loader_Generate_Nation_Script.

Auf Windows:

SELECT loader_generate_nation_script('windows'); 

Auf Unix/Linux:

SELECT loader_generate_nation_script('sh');

Unter Section 2.4.1, “Tiger Geocoder Aktivieren Sie Ihre PostGIS-Datenbank” finden Sie Anweisungen zur Ausführung des Generierungsskripts. Dieser Vorgang muss nur einmal durchgeführt werden.

[Note]

Sie können verschiedene Jahrestabellen für die einzelnen Bundesländer verwenden und jedes Bundesland separat aktualisieren. Bevor Sie ein Bundesland aktualisieren, müssen Sie zunächst die Statustabellen des Vorjahres für dieses Bundesland mit Drop_State_Tables_Generate_Script löschen.

2.5. Übliche Probleme bei der Installation

Falls Ihre Installation/Upgrade nicht so verläuft wie erwartet, gibt es eine ganze Reihe von Dingen zu überprüfen.

  1. Überprüfen Sie, ob Sie PostgreSQL 12 oder neuer installiert haben und dass die Version des PostgreSQL Quellcodes, gegen den Sie kompilieren, mit der Version der laufenden PostgreSQL Datenbank übereinstimmt. Ein Wirrwarr kann dann entstehen, wenn die Linux Distribution bereits PostgreSQL installiert hat, oder wenn Sie PostgreSQL in einem anderen Zusammenhang installiert und darauf vergessen haben. PostGIS funktioniert nur mit PostgreSQL 12 oder jünger und es kommt zu merkwürdigen, unerwarteten Fehlermeldungen, wenn Sie eine ältere Version verwenden. Um die Version Ihrer laufenden PostgreSQL Datenbank zu überprüfen, können Sie sich mittels psql zur Datenbank verbinden und folgende Anfrage ausführen:

    SELECT version();

    Falls Sie eine RPM-basierte Distribution am Laufen haben, können Sie nach vorinstallierten Paketen mit dem Befehl rpm suchen: rpm -qa | grep postgresql

  2. Wenn das Upgrade schief geht, stellen Sie bitte sicher, dass PostGIS, in der Datenbank die Sie wiederherstellen wollen, installiert ist.

    SELECT postgis_full_version();

Überprüfen Sie bitte auch, ob "configure" den korrekten Speicherort und die korrekte Version von PostgreSQL, sowie der Bibliotheken Proj4 und GEOS gefunden hat.

  1. Die Ausgabe von configure wird verwendet, um die Datei postgis_config.h zu erstellen. Überprüfen Sie bitte, ob die Variablen POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION und POSTGIS_GEOS_VERSION korrekt gesetzt sind.

Chapter 3. PostGIS Verwaltung

3.1. Leistungsoptimierung

Das Tuning für die PostGIS-Leistung ist ähnlich wie das Tuning für jede PostgreSQL-Arbeitslast. Die einzige zusätzliche Überlegung ist, dass Geometrien und Raster in der Regel groß sind, so dass speicherbezogene Optimierungen im Allgemeinen einen größeren Einfluss auf PostGIS haben als andere Arten von PostgreSQL-Abfragen.

Allgemeine Informationen zur Optimierung von PostgreSQL finden Sie unter Tuning your PostgreSQL Server.

Für PostgreSQL 9.4+ kann die Konfiguration auf Serverebene eingestellt werden, ohne postgresql.conf oder postgresql.auto.conf zu berühren, indem der Befehl ALTER SYSTEM verwendet wird.

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;

Zusätzlich zu den Postgres-Einstellungen verfügt PostGIS über einige benutzerdefinierte Einstellungen, die unter Section 7.23, “PostGIS Grand Unified Custom Variables (GUCs)” aufgeführt sind.

3.1.1. Startup

Diese Einstellungen werden in postgresql.conf konfiguriert:

constraint_exclusion

  • Standard: Partition

  • Dies wird im Allgemeinen für die Partitionierung von Tabellen verwendet. Die Voreinstellung hierfür ist "partition", was ideal für PostgreSQL 8.4 und höher ist, da es den Planer dazu zwingt, Tabellen nur dann für die Berücksichtigung von Einschränkungen zu analysieren, wenn sie sich in einer vererbten Hierarchie befinden, und den Planer ansonsten nicht zu bestrafen.

shared_buffers

  • Standard: ~128MB in PostgreSQL 9.6

  • Setzen Sie den Wert auf etwa 25 % bis 40 % des verfügbaren RAM. Unter Windows können Sie diesen Wert möglicherweise nicht so hoch einstellen.

max_worker_processes Diese Einstellung ist nur für PostgreSQL 9.4+ verfügbar. Für PostgreSQL 9.6+ hat diese Einstellung zusätzliche Bedeutung, da sie die maximale Anzahl von Prozessen steuert, die Sie für parallele Abfragen haben können.

  • Voreinstellung: 8

  • Legt die maximale Anzahl von Hintergrundprozessen fest, die das System unterstützen kann. Dieser Parameter kann nur beim Start des Servers gesetzt werden.

3.1.2. Laufzeit

work_mem - legt die Größe des für Sortiervorgänge und komplexe Abfragen verwendeten Speichers fest

  • Standard: 1-4MB

  • Anpassung für große Datenbanken, komplexe Abfragen, viel RAM

  • Verringern Sie den Wert bei vielen gleichzeitigen Benutzern oder geringem RAM.

  • Wenn Sie viel RAM und wenig Entwickler haben:

    SET work_mem TO '256MB';

maintenance_work_mem - die Speichergröße, die für VACUUM, CREATE INDEX, etc. verwendet wird.

  • Standard: 16-64MB

  • Im Allgemeinen zu niedrig - bindet E/A, sperrt Objekte beim Auslagern von Speicher

  • Wir empfehlen 32 MB bis 1 GB auf Produktionsservern mit viel RAM, aber das hängt von der Anzahl der gleichzeitigen Benutzer ab. Wenn Sie viel RAM und wenige Entwickler haben:

    SET maintenance_work_mem TO '1GB';

max_parallel_Arbeiter_pro_Gruppe

Diese Einstellung ist nur für PostgreSQL 9.6+ verfügbar und wirkt sich nur auf PostGIS 2.3+ aus, da nur PostGIS 2.3+ parallele Abfragen unterstützt. Wenn sie auf einen Wert größer als 0 gesetzt wird, können einige Abfragen, z.B. solche, die Beziehungsfunktionen wie ST_Intersects beinhalten, mehrere Prozesse verwenden und können dabei mehr als doppelt so schnell laufen. Wenn Sie viele Prozessoren zur Verfügung haben, sollten Sie den Wert auf so viele Prozessoren ändern, wie Sie haben. Stellen Sie außerdem sicher, dass max_worker_processes mindestens so hoch ist wie diese Zahl.

  • Voreinstellung: 0

  • Legt die maximale Anzahl von Workern fest, die von einem einzelnen Gather Knoten gestartet werden können. Parallele Worker werden aus dem durch max_worker_processes festgelegten Pool von Prozessen genommen. Beachten Sie, dass die angeforderte Anzahl von Workern zur Laufzeit möglicherweise nicht verfügbar ist. Wenn dies der Fall ist, wird der Plan mit weniger Arbeitern als erwartet ausgeführt, was ineffizient sein kann. Wenn Sie diesen Wert auf 0 setzen, was der Standardwert ist, wird die parallele Abfrageausführung deaktiviert.

3.2. Konfigurieren der Rasterunterstützung

Wenn die Rasterunterstützung aktiviert ist, sollte diese wie folgt konfiguriert werden.

Ab PostGIS 2.1.3 sind out-of-db-Raster und alle Rastertreiber von vornherein deaktiviert. Um diese zu aktivieren, müssen Sie die folgenden Umgebungsvariablen POSTGIS_GDAL_ENABLED_DRIVERS und POSTGIS_ENABLE_OUTDB_RASTERS in der Serverumgebung setzen. Ab PostGIS 2.2 können Sie einen plattformübergreifenderen Ansatz mit Hilfe der entsprechenden Section 7.23, “PostGIS Grand Unified Custom Variables (GUCs)” verwenden.

Wenn Sie Offline-Raster aktivieren möchten:

POSTGIS_ENABLE_OUTDB_RASTERS=1

Jede andere und auch keine Einstellung deaktiviert die out-of-db Raster.

Um alle installierten GDAL-Treiber zu aktivieren, muss diese Umgebungsvariable wie folgt gesetzt werden

POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

Wenn nur bestimmte Treiber aktiviert werden sollen, muss diese Umgebungsvariable wie folgt gesetzt werden:

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

Unter Windows darf die Treiberliste nicht unter Hochkomma gestellt werden

Das Setzen von Umgebungsvariablen variiert je nach Betriebssystem. Für PostgreSQL, das unter Ubuntu oder Debian über apt-postgresql installiert wurde, ist der bevorzugte Weg, /etc/postgresql/10/main/environment zu editieren, wobei sich 10 auf die Version von PostgreSQL und main auf den Cluster bezieht.

Unter Windows können Sie, wenn Sie als Dienst ausgeführt werden, Systemvariablen festlegen, die Sie unter Windows 7 mit einem Rechtsklick auf Computer->Eigenschaften Erweiterte Systemeinstellungen oder im Explorer unter Systemsteuerung\Alle Systemsteuerungselemente\System erreichen. Klicken Sie dann auf Erweiterte Systemeinstellungen ->Erweitert->Umgebungsvariablen und fügen Sie neue Systemvariablen hinzu.

Nachdem Sie die Umgebungsvariablen gesetzt haben, müssen Sie Ihren PostgreSQL-Dienst neu starten, damit die Änderungen wirksam werden.

3.3. Erstellung räumlicher Datenbanken

3.3.1. Datenbank mit EXTENSION räumlich aktivieren

Wenn Sie PostgreSQL 9.1+ verwenden und die Extensions/Postgis-Module kompiliert und installiert haben, können Sie eine Datenbank mit Hilfe des EXTENSION-Mechanismus in eine räumliche Datenbank verwandeln.

Die Kern-Postgis-Erweiterung enthält Geometrie, Geographie, spatial_ref_sys und alle Funktionen und Kommentare. Raster und Topologie sind als separate Erweiterung verpackt.

Führen Sie das folgende SQL-Snippet in der Datenbank aus, die Sie räumlich aktivieren möchten:

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

3.3.2. Datenbank räumlich aktivieren, ohne EXTENSION zu verwenden (nicht empfohlen)

[Note]

Dies ist in der Regel nur notwendig, wenn Sie PostGIS nicht in das PostgreSQL-Erweiterungsverzeichnis installieren können oder wollen (z.B. beim Testen, bei der Entwicklung oder in einer eingeschränkten Umgebung).

Das Hinzufügen von PostGIS-Objekten und Funktionsdefinitionen in Ihre Datenbank erfolgt durch das Laden der verschiedenen sql-Dateien, die sich in [prefix]/share/contrib befinden, wie während der Erstellungsphase angegeben.

Die zentralen PostGIS-Objekte (Geometrie- und Geografietypen sowie deren Unterstützungsfunktionen) befinden sich im Skript postgis.sql. Rasterobjekte befinden sich im Skript rtpostgis.sql. Topologieobjekte befinden sich im Skript topology.sql.

Für einen vollständigen Satz von EPSG-Koordinatensystem-Definitionsbezeichnern können Sie auch die Definitionsdatei spatial_ref_sys.sql laden und die Tabelle spatial_ref_sys befüllen. Damit können Sie ST_Transform()-Operationen an Geometrien durchführen.

Wenn Sie Kommentare zu den PostGIS-Funktionen hinzufügen möchten, finden Sie diese im Skript postgis_comments.sql. Die Kommentare können einfach durch Eingabe von \dd [function_name] in einem psql Terminalfenster angezeigt werden.

Führen Sie die folgenden Shell-Befehle in Ihrem Terminal aus:

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

    # 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. Aktualisierung von Geodatenbanken

Die Aktualisierung bestehender räumlicher Datenbanken kann schwierig sein, da sie den Austausch oder die Einführung neuer PostGIS-Objektdefinitionen erfordert.

Leider können nicht alle Definitionen in einer aktiven Datenbank einfach ersetzt werden, so dass manchmal ein Dump/Reload-Prozess die beste Lösung ist.

PostGIS bietet ein SOFT UPGRADE-Verfahren für Minor- oder Bugfix-Versionen und ein HARD UPGRADE-Verfahren für Major-Versionen.

Bevor Sie versuchen, PostGIS zu aktualisieren, lohnt es sich immer, Ihre Daten zu sichern. Wenn Sie das Flag -Fc für pg_dump verwenden, können Sie den Dump bei einem HARD UPGRADE immer wiederherstellen.

3.4.1. Sanftes Upgrade

Wenn Sie Ihre Datenbank mithilfe von Erweiterungen installiert haben, müssen Sie das Upgrade auch mithilfe des Erweiterungsmodells durchführen. Wenn Sie mit dem alten SQL-Skript installiert haben, sollten Sie Ihre Installation auf Erweiterungen umstellen, da das Skript nicht mehr unterstützt wird.

3.4.1.1. Soft Upgrade 9.1+ mit Erweiterungen

Wenn Sie PostGIS ursprünglich mit Erweiterungen installiert haben, dann müssen Sie das Upgrade auch mit Erweiterungen durchführen. Ein kleines Upgrade mit Erweiterungen ist ziemlich schmerzlos.

Wenn Sie mit PostGIS 3 oder höher arbeiten, sollten Sie die Funktion PostGIS_Extensions_Upgrade verwenden, um auf die neueste Version zu aktualisieren, die Sie installiert haben.

SELECT postgis_extensions_upgrade();

Wenn Sie PostGIS 2.5 oder niedriger verwenden, gehen Sie wie folgt vor:

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

Wenn Sie mehrere Versionen von PostGIS installiert haben und nicht auf die neueste Version aktualisieren möchten, können Sie die Version wie folgt explizit angeben:

ALTER EXTENSION postgis UPDATE TO "3.5.0dev";
ALTER EXTENSION postgis_topology UPDATE TO "3.5.0dev";

Wenn Sie eine Fehlermeldung wie diese erhalten:

No migration path defined for … to 3.5.0dev

Dann müssen Sie eine Sicherungskopie Ihrer Datenbank anlegen, eine neue Datenbank erstellen, wie unter Section 3.3.1, “Datenbank mit EXTENSION räumlich aktivieren” beschrieben, und dann Ihre Sicherungskopie auf dieser neuen Datenbank wiederherstellen.

Wenn Sie eine Meldung wie diese erhalten:

Version "3.5.0dev" of extension "postgis" is already installed

Dann ist bereits alles auf dem neuesten Stand und Sie können es getrost ignorieren. Es sei denn, Sie versuchen, von einer Entwicklungsversion auf die nächste zu aktualisieren (die keine neue Versionsnummer erhält); in diesem Fall können Sie "next" an die Versionszeichenfolge anhängen, und beim nächsten Mal müssen Sie das Suffix "next" wieder weglassen:

ALTER EXTENSION postgis UPDATE TO "3.5.0devnext";
ALTER EXTENSION postgis_topology UPDATE TO "3.5.0devnext";
[Note]

Wenn Sie PostGIS ursprünglich ohne Versionsangabe installiert haben, können Sie die Neuinstallation der postgis-Erweiterung vor der Wiederherstellung oft überspringen, da das Backup nur CREATE EXTENSION postgis hat und somit die neueste Version bei der Wiederherstellung übernimmt.

[Note]

Wenn Sie die PostGIS-Erweiterung von einer Version vor 3.0.0 aktualisieren, erhalten Sie eine neue Erweiterung postgis_raster, die Sie getrost löschen können, wenn Sie die Rasterunterstützung nicht benötigen. Sie können sie wie folgt entfernen:

DROP EXTENSION postgis_raster;

3.4.1.2. Soft Upgrade Pre 9.1+ oder ohne Erweiterungen

Dieser Abschnitt gilt nur für diejenigen, die PostGIS ohne Erweiterungen installiert haben. Wenn Sie Erweiterungen haben und versuchen, mit diesem Ansatz zu aktualisieren, erhalten Sie Meldungen wie:

can't drop … because postgis extension depends on it

HINWEIS: Wenn Sie von PostGIS 1.* zu PostGIS 2.* oder von PostGIS 2.* vor r7409 wechseln, können Sie dieses Verfahren nicht verwenden, sondern müssen ein HARD UPGRADE durchführen.

Nach dem Kompilieren und Installieren (make install) sollten Sie eine Reihe von *_upgrade.sql Dateien in den Installationsordnern finden. Sie können sie alle mit auflisten:

ls `pg_config --sharedir`/contrib/postgis-3.5.0dev/*_upgrade.sql

Laden Sie sie alle nacheinander, beginnend mit postgis_upgrade.sql.

psql -f postgis_upgrade.sql -d your_spatial_database

Das gleiche Verfahren gilt für Raster-, Topologie- und sfcgal-Erweiterungen, mit Upgrade-Dateien namens rtpostgis_upgrade.sql, topology_upgrade.sql und sfcgal_upgrade.sql. Falls Sie sie benötigen:

psql -f rtpostgis_upgrade.sql -d your_spatial_database
psql -f topology_upgrade.sql -d your_spatial_database
psql -f sfcgal_upgrade.sql -d your_spatial_database

Wir empfehlen Ihnen, zu einer erweiterungsbasierten Installation zu wechseln, indem Sie

psql -c "SELECT postgis_extensions_upgrade();"
[Note]

Wenn Sie die postgis_upgrade.sql speziell für das Upgrade Ihrer Version nicht finden können, verwenden Sie eine Version, die zu früh für ein Soft-Upgrade ist und müssen ein HARD UPGRADE durchführen.

Die Funktion PostGIS_Full_Version sollte Sie mit der Meldung "procs need upgrade" über die Notwendigkeit eines solchen Upgrades informieren.

3.4.2. Hartes Upgrade

Unter HARD UPGRADE verstehen wir ein vollständiges Dump/Reload von PostGIS-aktivierten Datenbanken. Ein HARD UPGRADE ist erforderlich, wenn sich der interne Speicher von PostGIS-Objekten ändert oder wenn ein SOFT UPGRADE nicht möglich ist. Der Anhang Release Notes gibt für jede Version an, ob ein Dump/Reload (HARD UPGRADE) für ein Upgrade erforderlich ist.

Der Dump/Reload-Prozess wird durch das postgis_restore-Skript unterstützt, das dafür sorgt, dass alle Definitionen, die zu PostGIS gehören (einschließlich der alten), aus dem Dump ausgelassen werden. So können Sie Ihre Schemata und Daten in einer Datenbank mit installiertem PostGIS wiederherstellen, ohne dass es zu Fehlern bei doppelten Symbolen kommt oder veraltete Objekte mitgenommen werden.

Ergänzende Anleitungen für Windows-Benutzer finden Sie unter Windows Hard Upgrade.

Das Verfahren ist wie folgt:

  1. Erstellen Sie einen Dump im "benutzerdefinierten Format" der Datenbank, die Sie aktualisieren möchten (nennen wir ihn olddb), einschließlich binärer Blobs (-b) und ausführlicher (-v) Ausgabe. Der Benutzer kann der Eigentümer der Datenbank sein, er muss nicht das Postgres-Superkonto sein.

    pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/somepath/olddb.backup" olddb
  2. Führen Sie eine Neuinstallation von PostGIS in einer neuen Datenbank durch - wir bezeichnen diese Datenbank als newdb. Eine Anleitung dazu finden Sie unter Section 3.3.2, “Datenbank räumlich aktivieren, ohne EXTENSION zu verwenden (nicht empfohlen)” und Section 3.3.1, “Datenbank mit EXTENSION räumlich aktivieren”.

    Die spatial_ref_sys-Einträge, die Sie in Ihrem Dump gefunden haben, werden wiederhergestellt, überschreiben aber nicht die vorhandenen Einträge in spatial_ref_sys. Damit soll sichergestellt werden, dass die Korrekturen im offiziellen Satz ordnungsgemäß in die wiederhergestellten Datenbanken übertragen werden. Wenn Sie aus irgendeinem Grund eigene Überschreibungen von Standardeinträgen wünschen, laden Sie die Datei spatial_ref_sys.sql beim Erstellen der neuen Datenbank einfach nicht.

    Wenn Ihre Datenbank wirklich alt ist oder Sie wissen, dass Sie lange veraltete Funktionen in Ihren Ansichten und Funktionen verwendet haben, müssen Sie möglicherweise legacy.sql laden, damit alle Ihre Funktionen und Ansichten usw. wieder richtig funktionieren. Tun Sie dies nur, wenn es _wirklich_ notwendig ist. Erwägen Sie stattdessen, Ihre Ansichten und Funktionen vor dem Dumping zu aktualisieren, falls möglich. Die veralteten Funktionen können später durch Laden von uninstall_legacy.sql entfernt werden.

  3. Stellen Sie Ihre Sicherung mit postgis_restore in Ihre neue Datenbank newdb wieder her. Unerwartete Fehler werden, falls vorhanden, von psql in den Standardfehlerstrom ausgegeben. Führen Sie ein Protokoll über diese Fehler.

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

In den folgenden Fällen kann es zu Fehlern kommen:

  1. Einige Ihrer Ansichten oder Funktionen verwenden veraltete PostGIS-Objekte. Um dies zu beheben, können Sie versuchen, das Skript legacy.sql vor der Wiederherstellung zu laden, oder Sie müssen eine Version von PostGIS wiederherstellen, die diese Objekte noch enthält, und nach der Portierung Ihres Codes erneut eine Migration versuchen. Wenn der legacy.sql Weg für Sie funktioniert, vergessen Sie nicht, Ihren Code so zu korrigieren, dass er keine veralteten Funktionen mehr verwendet und sie durch Laden von uninstall_legacy.sql fallen lässt.

  2. Einige benutzerdefinierte Datensätze von spatial_ref_sys in der Dump-Datei haben einen ungültigen SRID-Wert. Gültige SRID-Werte sind größer als 0 und kleiner als 999000. Werte im Bereich 999000.999999 sind für den internen Gebrauch reserviert, während Werte > 999999 überhaupt nicht verwendet werden können. Alle benutzerdefinierten Datensätze mit ungültigen SRIDs werden beibehalten, wobei die Werte > 999999 in den reservierten Bereich verschoben werden, aber die Tabelle spatial_ref_sys würde eine Prüfbeschränkung verlieren, die dafür sorgt, dass diese Invariante beibehalten wird, und möglicherweise auch ihren Primärschlüssel (wenn mehrere ungültige SRIDS in denselben reservierten SRID-Wert umgewandelt werden).

    Um das Problem zu beheben, sollten Sie Ihre benutzerdefinierte SRS auf eine SRID mit einem gültigen Wert (vielleicht im Bereich 910000..910999) kopieren, alle Ihre Tabellen in die neue SRID konvertieren (siehe UpdateGeometrySRID), den ungültigen Eintrag aus spatial_ref_sys löschen und die Prüfung(en) mit neu konstruieren:

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

    Wenn Sie eine alte Datenbank aktualisieren, die französische IGN -Kartografie enthält, werden Sie wahrscheinlich SRIDs außerhalb des Bereichs haben und beim Importieren Ihrer Datenbank Probleme wie diese sehen:

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

    In diesem Fall können Sie die folgenden Schritte versuchen: Zuerst werfen Sie die IGN komplett aus der Sql, die aus postgis_restore resultiert. Also, nachdem Sie :

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

    führen Sie diesen Befehl aus:

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

    Erstellen Sie dann Ihre neue Datenbank, aktivieren Sie die erforderlichen Postgis-Erweiterungen und fügen Sie die französische System-IGN mit diesem Skript ein, um Ihre Daten zu importieren:

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

Chapter 4. Datenverwaltung

4.1. Räumliches Datenmodell

4.1.1. OGC-Geometrie

Das Open Geospatial Consortium (OGC) hat den Standard Simple Features Access (SFA) entwickelt, um ein Modell für Geodaten bereitzustellen. Er definiert den grundlegenden Raumtyp Geometrie sowie Operationen, die Geometriewerte manipulieren und transformieren, um räumliche Analyseaufgaben durchzuführen. PostGIS implementiert das OGC Geometry Modell als die PostgreSQL Datentypen Geometry und Geography.

Geometrie ist ein abstrakter Typ. Geometriewerte gehören zu einem seiner konkreten Untertypen, die verschiedene Arten und Dimensionen geometrischer Formen darstellen. Dazu gehören die atomaren Typen Point, LineString, LinearRing und Polygon, und die Sammlung Typen MultiPoint, MultiLineString, MultiPolygon und GeometryCollection. Der Simple Features Access - Part 1: Gemeinsame Architektur v1.2.1 fügt Subtypen für die Strukturen PolyhedralSurface, Triangle und TIN hinzu.

Geometry modelliert Formen in der 2-dimensionalen kartesischen Ebene. Die Typen PolyhedralSurface, Triangle und TIN können auch Formen im 3-dimensionalen Raum darstellen. Die Größe und Lage von Formen wird durch ihre Koordinaten angegeben. Jede Koordinate hat einen X- und Y Ordinatenwert, der ihre Lage in der Ebene bestimmt. Formen werden aus Punkten oder Liniensegmenten konstruiert, wobei Punkte durch eine einzelne Koordinate und Liniensegmente durch zwei Koordinaten angegeben werden.

Koordinaten können optionale Z- und M-Ordinatenwerte enthalten. Die Z-Ordinate wird häufig zur Darstellung der Höhe verwendet. Die M-Ordinate enthält einen Messwert, der Zeit oder Entfernung darstellen kann. Wenn Z- oder M-Werte in einem Geometriewert vorhanden sind, müssen sie für jeden Punkt in der Geometrie definiert werden. Wenn eine Geometrie Z- oder M-Ordinaten hat, ist die Koordinaten-Dimension 3D; wenn sie sowohl Z- als auch M-Werte hat, ist die Koordinaten-Dimension 4D.

Geometriewerte sind mit einem räumlichen Bezugssystem verbunden, das das Koordinatensystem angibt, in das sie eingebettet sind. Das räumliche Bezugssystem wird durch die SRID-Nummer der Geometrie identifiziert. Die Einheiten der X- und Y-Achsen werden durch das räumliche Bezugssystem bestimmt. In planaren Bezugssystemen stellen die X- und Y-Koordinaten typischerweise Ost- und Nordrichtung dar, während sie in geodätischen Systemen Längen- und Breitengrad darstellen. SRID 0 steht für eine unendliche kartesische Ebene, deren Achsen keine Einheiten zugewiesen sind. Siehe Section 4.5, “Räumliche Bezugssysteme”.

Die Geometrie Dimension ist eine Eigenschaft von Geometrietypen. Punkttypen haben die Dimension 0, lineare Typen haben die Dimension 1, und polygonale Typen haben die Dimension 2. Sammlungen haben die Dimension der maximalen Elementdimension.

Ein Geometriewert kann leer sein. Leere Werte enthalten keine Scheitelpunkte (bei atomaren Geometrietypen) oder keine Elemente (bei Sammlungen).

Eine wichtige Eigenschaft von Geometriewerten ist ihre räumliche Ausdehnung oder bounding box, die im OGC-Modell envelope genannt wird. Dies ist der 2- oder 3-dimensionale Rahmen, der die Koordinaten einer Geometrie umschließt. Es ist ein effizientes Mittel, um die Ausdehnung einer Geometrie im Koordinatenraum darzustellen und zu prüfen, ob zwei Geometrien interagieren.

Das Geometriemodell ermöglicht die Auswertung topologischer räumlicher Beziehungen, wie in Section 5.1.1, “Dimensionell erweitertes 9-Schnitte-Modell” beschrieben. Um dies zu unterstützen, werden für jeden Geometrietyp die Konzepte interior, boundary und exterior definiert. Geometrien sind topologisch geschlossen, sie enthalten also immer ihren Rand. Der Rand ist eine Geometrie der Dimension eins weniger als die der Geometrie selbst.

Das OGC-Geometriemodell definiert Gültigkeitsregeln für jeden Geometrietyp. Diese Regeln stellen sicher, dass die Geometriewerte realistische Situationen darstellen (z.B. ist es möglich, ein Polygon mit einem Loch außerhalb der Schale zu spezifizieren, was aber geometrisch keinen Sinn ergibt und daher ungültig ist). PostGIS erlaubt auch die Speicherung und Bearbeitung von ungültigen Geometriewerten. Dies ermöglicht es, sie zu erkennen und bei Bedarf zu korrigieren. Siehe Section 4.4, “Geometrievalidierung”

4.1.1.1. Punkt

Ein Punkt ist eine 0-dimensionale Geometrie, die einen einzelnen Ort im Koordinatenraum darstellt.

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

4.1.1.2. Linie

Ein LineString ist eine eindimensionale Linie, die aus einer zusammenhängenden Folge von Liniensegmenten besteht. Jedes Liniensegment wird durch zwei Punkte definiert, wobei der Endpunkt eines Segments den Startpunkt des nächsten Segments bildet. Ein OGC-konformer LineString hat entweder null oder zwei oder mehr Punkte, aber PostGIS erlaubt auch Ein-Punkt-LineStrings. LineStrings können sich selbst kreuzen (self-intersect). Ein LineString ist geschlossen wenn der Start- und Endpunkt gleich sind. Ein LineString ist einfach, wenn er sich nicht selbst schneidet.

LINESTRING (1 2, 3 4, 5 6)

4.1.1.3. LinearRing

Ein LinearRing ist ein LineString, der sowohl geschlossen als auch einfach ist. Der erste und der letzte Punkt müssen gleich sein, und die Linie darf sich nicht selbst schneiden.

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

4.1.1.4. Polygon

Ein Polygon ist ein 2-dimensionaler ebener Bereich, der durch eine äußere Begrenzung (die Schale) und null oder mehr innere Begrenzungen (Löcher) begrenzt wird. Jede Begrenzung ist ein 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

Ein MultiPoint ist eine Sammlung von Punkten.

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

4.1.1.6. MultiLineString

Ein MultiLineString ist eine Sammlung von LineStrings. Ein MultiLineString ist geschlossen, wenn jedes seiner Elemente geschlossen ist.

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

4.1.1.7. MultiPolygon

Ein MultiPolygon ist eine Sammlung von nicht überlappenden, nicht benachbarten Polygonen. Die Polygone der Sammlung dürfen sich nur an einer endlichen Anzahl von Punkten berühren.

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

4.1.1.8. GeometryCollection

Eine GeometryCollection ist eine heterogene (gemischte) Sammlung von Geometrien.

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

4.1.1.9. PolyhedralSurface

Eine PolyhedralSurface ist eine zusammenhängende Sammlung von Flächen oder Facetten, die einige Kanten gemeinsam haben. Jedes Feld ist ein planares Polygon. Wenn die Polygonkoordinaten Z-Ordinaten haben, ist die Fläche 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. Dreieck

Ein Dreieck ist ein Polygon, das durch drei verschiedene, nicht kollineare Scheitelpunkte definiert ist. Da ein Dreieck ein Polygon ist, wird es durch vier Koordinaten definiert, wobei die erste und die vierte gleich sind.

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

4.1.1.11. TIN

Ein TIN ist eine Sammlung von nicht überlappenden Dreiecken, die ein Trianguliertes unregelmäßiges Netz darstellen.

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 Teil 3 - Kurven

Der ISO/IEC 13249-3 SQL Multimedia - Spatial Standard (SQL/MM) erweitert den OGC SFA um die Definition von Geometrie-Subtypen, die Kurven mit Kreisbögen enthalten. Die SQL/MM-Typen unterstützen 3DM-, 3DZ- und 4D-Koordinaten.

[Note]

Alle Gleitpunkt Vergleiche der SQL-MM Implementierung werden mit einer bestimmten Toleranz ausgeführt, zurzeit 1E-8.

4.1.2.1. CircularString

CircularString ist der grundlegende Kurventyp, ähnlich einem LineString in der linearen Welt. Ein einzelnes Bogensegment wird durch drei Punkte spezifiziert: den Anfangs- und Endpunkt (erster und dritter Punkt) und einen weiteren Punkt auf dem Bogen. Zur Angabe eines geschlossenen Kreises sind der Anfangs- und der Endpunkt identisch, und der mittlere Punkt ist der gegenüberliegende Punkt auf dem Kreisdurchmesser (der den Mittelpunkt des Bogens bildet). In einer Folge von Bögen ist der Endpunkt des vorherigen Bogens der Startpunkt des nächsten Bogens, genau wie die Segmente eines LineString. Dies bedeutet, dass ein CircularString eine ungerade Anzahl von Punkten größer als 1 haben muss.

CIRCULARSTRING(0 0, 1 1, 1 0)

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

4.1.2.2. CompoundCurve

Eine CompoundCurve ist eine einzelne kontinuierliche Kurve, die sowohl Kreisbogensegmente als auch lineare Segmente enthalten kann. Das bedeutet, dass nicht nur wohlgeformte Komponenten vorhanden sein müssen, sondern auch der Endpunkt jeder Komponente (außer der letzten) mit dem Anfangspunkt der folgenden Komponente übereinstimmen muss.

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

4.1.2.3. KurvenPolygon

Ein CurvePolygon ist wie ein Polygon, mit einem äußeren Ring und null oder mehr inneren Ringen. Der Unterschied besteht darin, dass ein Ring sowohl ein CircularString oder CompoundCurve als auch ein LineString sein kann.

Ab PostGIS 1.4 werden zusammengesetzte Kurven/CompoundCurve in einem Kurvenpolygon/CurvePolygon unterstützt.

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

Beispiel: Ein CurvePolygon mit einer Hülle, die durch eine CompoundCurve definiert ist, die einen CircularString und einen LineString enthält, und einem Loch, das durch einen CircularString definiert ist

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

Eine MultiCurve ist eine Sammlung von Kurven, die LineStrings, CircularStrings oder CompoundCurves enthalten kann.

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

4.1.2.5. MultiSurface

Eine MultiSurface ist eine Sammlung von Flächen, die (lineare) Polygone oder CurvePolygone sein können.

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 und WKB

Die OGC SFA-Spezifikation definiert zwei Formate für die Darstellung von Geometriewerten zur externen Verwendung: Well-Known Text (WKT) und Well-Known Binary (WKB). Sowohl WKT als auch WKB enthalten Informationen über den Typ des Objekts und die Koordinaten, die es definieren.

Well-Known Text (WKT) bietet eine standardisierte textuelle Darstellung von räumlichen Daten. Beispiele für WKT-Darstellungen von räumlichen Objekten sind:

  • POINT(0 0)

  • PUNKT Z (0 0 0)

  • PUNKT ZM (0 0 0 0)

  • PUNKT LEER

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

  • ZEILENSTRING LEER

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

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

  • MULTIPOINT LEER

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

Die Ein- und Ausgabe des WKT erfolgt über die Funktionen ST_AsText und ST_GeomFromText:

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

Eine Anweisung zum Erstellen und Einfügen eines Geo-Objekts aus WKT und einer SRID lautet zum Beispiel so:

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

Well-Known Binary (WKB) bietet eine tragbare, hochpräzise Darstellung von Geodaten als Binärdaten (Arrays von Bytes). Beispiele für die WKB-Darstellung von Geo-Objekten sind:

  • WKT: PUNKT(1 1)

    WKB: 0101000000000000000000F03F000000000000F03

  • WKT: LINIENSTRING (2 2, 9 9)

    WKB: 0102000000020000000000000000000040000000000000004000000000000022400000000000002240

Die Ein- und Ausgabe von WKB erfolgt über die Funktionen ST_AsBinary und ST_GeomFromWKB:

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

Eine Anweisung zum Erstellen und Einfügen eines Geo-Objekts aus WKB lautet zum Beispiel so:

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

4.2. Geometrie Datentyp

PostGIS implementiert das OGC Simple Features Modell durch die Definition eines PostgreSQL Datentyps namens geometry. Er repräsentiert alle Geometrie-Subtypen durch Verwendung eines internen Typcodes (siehe GeometryType und ST_GeometryType). Dies ermöglicht die Modellierung von räumlichen Merkmalen als Zeilen von Tabellen, die mit einer Spalte vom Typ geometry definiert sind.

Der Geometrie Datentyp ist opaque, was bedeutet, dass der gesamte Zugriff über den Aufruf von Funktionen auf Geometriewerte erfolgt. Funktionen ermöglichen die Erstellung von Geometrieobjekten, den Zugriff auf alle internen Felder oder deren Aktualisierung sowie die Berechnung neuer Geometriewerte. PostGIS unterstützt alle Funktionen, die in der OGC Simple feature access - Part 2: SQL option (SFS) Spezifikation spezifiziert sind, sowie viele andere. Siehe Chapter 7, Referenz PostGIS für die vollständige Liste der Funktionen.

[Note]

PostGIS folgt dem SFA-Standard, indem es den räumlichen Funktionen das Kürzel "ST_" voranstellt. Dies sollte für "Spatial and Temporal" (räumlich und zeitlich) stehen, aber der zeitliche Teil des Standards wurde nie entwickelt. Stattdessen kann es als "Spatial Type" interpretiert werden.

Der SFA-Standard sieht vor, dass Geo-Objekte einen Spatial Reference System Identifier (SRID) enthalten. Der SRID ist erforderlich, wenn Geo-Objekte zum Einfügen in die Datenbank erstellt werden (er kann auf 0 voreingestellt sein). Siehe ST_SRID und Section 4.5, “Räumliche Bezugssysteme”

Um die Abfrage von Geometrien effizient zu gestalten, definiert PostGIS verschiedene Arten von räumlichen Indizes und räumliche Operatoren, um diese zu verwenden. Siehe Section 4.9, “Räumliche Indizes” und Section 5.2, “Räumliche Indizes verwenden” für Details.

4.2.1. PostGIS EWKB und EWKT

Die OGC SFA-Spezifikationen unterstützten ursprünglich nur 2D-Geometrien, und die Geometrie-SRID ist nicht in den Eingabe-/Ausgabedarstellungen enthalten. Die OGC-SFA-Spezifikation 1.2.1 (die mit der ISO-Norm 19125 übereinstimmt) unterstützt nun auch 3D- (ZYZ) und gemessene (XYM und XYZM) Koordinaten, enthält aber immer noch keinen SRID-Wert.

Aufgrund dieser Einschränkungen hat PostGIS erweiterte EWKB- und EWKT-Formate definiert. Sie bieten Unterstützung für 3D- (XYZ und XYM) und 4D-Koordinaten (XYZM) und enthalten SRID-Informationen. Durch die Einbeziehung aller Geometrieinformationen kann PostGIS EWKB als Datensatzformat verwenden (z. B. in DUMP-Dateien).

EWKB und EWKT werden für die "kanonischen Formen" von PostGIS-Datenobjekten verwendet. Für die Eingabe ist die kanonische Form für binäre Daten EWKB, und für Textdaten wird entweder EWKB oder EWKT akzeptiert. Dies ermöglicht die Erstellung von Geometriewerten durch Umwandlung eines Textwerts in HEXEWKB oder EWKT in einen Geometriewert unter Verwendung von ::geometry. Für die Ausgabe ist die kanonische Form für Binärdaten EWKB und für Textdaten HEXEWKB (hexkodiertes EWKB).

Diese Anweisung erzeugt zum Beispiel eine Geometrie durch Casting aus einem EWKT-Textwert und gibt sie in der kanonischen Form HEXEWKB aus:

SELECT 'SRID=4;POINT(0 0)'::geometry;
  geometry
  ----------------------------------------------------
  01010000200400000000000000000000000000000000000000

Die PostGIS EWKT-Ausgabe weist einige Unterschiede zur OGC WKT auf:

  • Bei 3DZ-Geometrien entfällt der Qualifier Z:

    OGC: PUNKT Z (1 2 3)

    EWKT: PUNKT (1 2 3)

  • Für 3DM-Geometrien ist der Qualifier M enthalten:

    OGC: PUNKT M (1 2 3)

    EWKT: POINTM (1 2 3)

  • Bei 4D-Geometrien entfällt der ZM-Bezeichner:

    OGC: PUNKT ZM (1 2 3 4)

    EWKT: PUNKT (1 2 3 4)

EWKT vermeidet eine übermäßige Spezifizierung der Dimensionalität und die Inkonsistenzen, die beim OGC/ISO-Format auftreten können, wie z. B.:

  • PUNKT ZM (1 1)

  • PUNKT ZM (1 1 1)

  • PUNKT (1 1 1 1)

[Caution]

Die erweiterten PostGIS-Formate sind derzeit eine Obermenge der OGC-Formate, so dass jedes gültige OGC-WKB/WKT auch ein gültiges EWKB/EWKT ist. Dies könnte sich jedoch in Zukunft ändern, wenn das OGC ein Format in einer Weise erweitert, die mit der PosGIS-Definition in Konflikt steht. Sie sollten sich also NICHT auf diese Kompatibilität verlassen!

Beispiele für die EWKT-Textdarstellung von räumlichen Objekten sind:

  • POINT(0 0 0) -- XYZ

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

  • POINTM(0 0 0) -- XYM

  • POINT(0 0 0 0) -- XYZM

  • SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM mit 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)) )

Die Ein- und Ausgabe in diesen Formaten ist über die folgenden Funktionen möglich:

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

Eine Anweisung zum Erstellen und Einfügen eines PostGIS-Gebietsobjekts unter Verwendung von EWKT lautet zum Beispiel so:

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

4.3. Geographie Datentyp

Der Datentyp PostGIS geography bietet native Unterstützung für räumliche Merkmale, die in "geografischen" Koordinaten (manchmal auch "geodätische" Koordinaten oder "lat/lon" oder "lon/lat" genannt) dargestellt werden. Geografische Koordinaten sind sphärische Koordinaten, die in Winkeleinheiten (Grad) ausgedrückt werden.

Die Grundlage für den PostGIS-Geometriedatentyp ist eine Ebene. Der kürzeste Weg zwischen zwei Punkten in der Ebene ist eine gerade Linie. Das bedeutet, dass Funktionen für Geometrien (Flächen, Abstände, Längen, Schnittpunkte usw.) mit Geradenvektoren und kartesischer Mathematik berechnet werden. Dadurch sind sie einfacher zu implementieren und schneller auszuführen, aber auch ungenau für Daten auf der sphäroidischen Oberfläche der Erde.

Der PostGIS-Geodatentyp basiert auf einem Kugelmodell. Der kürzeste Weg zwischen zwei Punkten auf der Kugel ist ein Großkreisbogen. Funktionen auf Geografien (Flächen, Entfernungen, Längen, Schnittpunkte usw.) werden mit Hilfe von Bögen auf der Kugel berechnet. Da die Funktionen die Kugelform der Welt berücksichtigen, liefern sie genauere Ergebnisse.

Da die zugrunde liegende Mathematik komplizierter ist, sind für den Typ Geografie weniger Funktionen definiert als für den Typ Geometrie. Im Laufe der Zeit, wenn neue Algorithmen hinzukommen, werden sich die Möglichkeiten des Typs Geografie erweitern. Als Abhilfe kann man zwischen den Typen Geometrie und Geografie hin- und herwechseln.

Wie der Datentyp Geometrie sind auch die Geodaten über einen Spatial Reference System Identifier (SRID) mit einem räumlichen Bezugssystem verbunden. Jedes in der Tabelle spatial_ref_sys definierte geodätische (long/lat-basierte) Raumbezugssystem kann verwendet werden. (Vor PostGIS 2.2 unterstützte der Geografietyp nur das geodätische WGS 84 (SRID:4326)). Sie können Ihr eigenes geodätisches Raumbezugssystem hinzufügen, wie in Section 4.5.2, “Benutzerdefinierte räumliche Bezugssysteme” beschrieben.

Für alle räumlichen Bezugssysteme sind die Einheiten, die von Messfunktionen (z. B. ST_Distance, ST_Length, ST_Perimeter, ST_Area) und für das Entfernungsargument von ST_DWithin zurückgegeben werden, in Metern.

4.3.1. Erstellen von Geografietabellen

Sie können eine Tabelle zum Speichern von geografischen Daten mit der SQL-Anweisung CREATE TABLE mit einer Spalte vom Typ Geografie erstellen. Das folgende Beispiel erstellt eine Tabelle mit einer Geografiespalte, die 2D LineStrings im geodätischen Koordinatensystem WGS84 (SRID 4326) speichert:

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

Der Geografietyp unterstützt zwei optionale Typmodifikatoren:

  • Der Modifikator für die Raumart schränkt die Art der in der Spalte zulässigen Formen und Abmessungen ein. Für die Raumart sind folgende Werte zulässig: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION. Der Geografietyp unterstützt keine Kurven, TINS oder POLYHEDRALSURFACEs. Der Modifikator unterstützt Einschränkungen der Koordinatendimensionalität durch Hinzufügen von Suffixen: Z, M und ZM. Ein Modifikator "LINESTRINGM" lässt beispielsweise nur Linienzüge mit drei Dimensionen zu und behandelt die dritte Dimension als Maß. In ähnlicher Weise erfordert 'POINTZM' vierdimensionale (XYZM) Daten.

  • Der Modifikator SRID schränkt das räumliche Bezugssystem SRID auf eine bestimmte Nummer ein. Wird dieser Modifikator weggelassen, so ist das SRID standardmäßig 4326 (WGS84 geodätisch), und alle Berechnungen werden mit WGS84 durchgeführt.

Beispiele für die Erstellung von Tabellen mit geografischen Spalten:

  • Erstellen Sie eine Tabelle mit 2D-Punktgeografie mit dem Standard-SRID 4326 (WGS84 long/lat):

    CREATE TABLE ptgeogwgs(gid serial PRIMARY KEY, geog geography(POINT) );
  • Erstellen Sie eine Tabelle mit 2D-Punktgeografie in NAD83 longlat:

    CREATE TABLE ptgeognad83(gid serial PRIMARY KEY, geog geography(POINT,4269) );
  • Erstellen Sie eine Tabelle mit 3D (XYZ) POINTs und einer expliziten SRID von 4326:

    CREATE TABLE ptzgeogwgs84(gid serial PRIMARY KEY, geog geography(POINTZ,4326) );
  • Erstellen Sie eine Tabelle mit der Geografie 2D LINESTRING mit dem Standard-SRID 4326:

    CREATE TABLE lgeog(gid serial PRIMARY KEY, geog geography(LINESTRING) );
  • Erstellen Sie eine Tabelle mit einer 2D POLYGON-Geografie mit dem SRID 4267 (NAD 1927 long lat):

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

Geografische Felder werden in der Systemansicht geography_columns registriert. Sie können die Ansicht geography_columns abfragen und sehen, dass die Tabelle aufgeführt ist:

SELECT * FROM geography_columns;

Das Erstellen eines räumlichen Indexes funktioniert genauso wie bei Geometriespalten. PostGIS stellt fest, dass der Spaltentyp GEOGRAPHIE ist und erstellt einen entsprechenden kugelbasierten Index anstelle des üblichen planaren Index für GEOMETRI.

-- Index the test table with a spherical index
CREATE INDEX global_points_gix ON global_points USING GIST ( location );

4.3.2. Verwendung von Geografietabellen

Sie können Daten in Geografietabellen auf dieselbe Weise wie Geometrie einfügen. Geometriedaten werden automatisch in den Geographietyp übertragen, wenn sie SRID 4326 haben. Die Formate EWKT und EWKB können auch zur Angabe von Geografiewerten verwendet werden.

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

Jedes in der Tabelle spatial_ref_sys aufgeführte geodätische (long/lat) Raumbezugssystem kann als Geografie-SRID angegeben werden. Nicht-geodätische Koordinatensysteme führen zu einem Fehler, wenn sie verwendet werden.

-- 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 - gives an error since it is a meter-based planar projection
SELECT 'SRID=26910;POINT(-123 34)'::geography;

ERROR:  Only lon/lat coordinate systems are supported in geography.

Anfrage und Messfunktionen verwenden die Einheit Meter. Daher sollten Entfernungsparameter in Metern ausgedrückt werden und die Rückgabewerte sollten ebenfalls in Meter (oder Quadratmeter für Flächen) erwartet werden.

-- A distance query using a 1000km tolerance
SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);

Sie können die Macht der Geografie in Aktion sehen, indem Sie berechnen, wie nahe ein Flugzeug, das eine Großkreisroute von Seattle nach London (LINESTRING(-122.33 47.606, 0.0 51.5)) fliegt, an Reykjavik (POINT(-21.96 64.15)) herankommt (Karte der Route).

Der Geographie-Typ berechnet die wahre kürzeste Entfernung von 122,235 km über die Kugel zwischen Reykjavik und der Großkreisfluglinie zwischen Seattle und 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

Der Geometrietyp berechnet eine bedeutungslose kartesische Entfernung zwischen Reykjavik und der geraden Strecke von Seattle nach London, die auf einer flachen Weltkarte eingezeichnet ist. Die nominale Einheit des Ergebnisses ist "Grad", aber das Ergebnis entspricht keiner echten Winkeldifferenz zwischen den Punkten, so dass selbst die Bezeichnung "Grad" ungenau ist.

-- 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. Wann wird der Datentyp Geografie verwendet?

Der Datentyp GEOGRAPHY ermöglicht die Speicherung von Daten in Längen- und Breitenkoordinaten, allerdings zu einem gewissen Preis: Für GEOGRAPHY sind weniger Funktionen definiert als für GEOMETRY; die definierten Funktionen benötigen mehr CPU-Zeit zur Ausführung.

Der von Ihnen gewählte Datentyp sollte sich nach dem voraussichtlichen Arbeitsbereich der Anwendung richten, die Sie erstellen. Erstrecken sich Ihre Daten über den gesamten Globus oder ein großes kontinentales Gebiet, oder sind sie auf ein Bundesland, einen Bezirk oder eine Gemeinde beschränkt?

  • Wenn sich Ihre Daten in einem kleinen Bereich befinden, werden Sie vermutlich eine passende Projektion wählen und den geometrischen Datentyp verwenden, da dies in Bezug auf die Rechenleistung und die verfügbare Funktionalität die bessere Lösung ist.

  • Wenn Ihre Daten global sind oder einen ganzen Kontinent bedecken, ermöglicht der geographische Datentyp ein System aufzubauen, bei dem Sie sich nicht um Projektionsdetails kümmern müssen. Sie speichern die Daten als Länge und Breite und verwenden dann jene Funktionen, die für den geographischen Datentyp definiert sind.

  • Wenn Sie keine Ahnung von Projektionen haben, sich nicht näher damit beschäftigen wollen und die Einschränkungen der verfügbaren Funktionalität für den geographischen Datentyp in Kauf nehmen können, ist es vermutlich einfacher für Sie, den geographischen anstatt des geometrischen Datentyps zu verwenden.

Für einen Vergleich, welche Funktionalität von Geography vs. Geometry unterstützt wird, siehe Section 13.11, “PostGIS Funktionsunterstützungsmatrix”. Für eine kurze Liste mit der Beschreibung der geographischen Funktionen, siehe Section 13.4, “PostGIS-Funktionen zur Unterstützung der Geografie”

4.3.4. Fortgeschrittene FAQ's zum geographischen Datentyp

4.3.4.1.

Werden die Berechnungen auf einer Kugel oder auf einem Rotationsellipsoid durchgeführt?

Standardmäßig werden alle Entfernungs- und Flächenberechnungen auf dem Referenzellipsoid ausgeführt. Das Ergebnis der Berechnung sollte in lokalen Gebieten gut mit dem planaren Ergebnis zusammenpassen - eine gut gewählte lokale Projektion vorausgesetzt. Bei größeren Gebieten ist die Berechnung über das Referenzellipsoid genauer als eine Berechnung die auf der projizierten Ebene ausgeführt wird.

Alle geographischen Funktionen verfügen über eine Option um die Berechnung auf einer Kugel durchzuführen. Dies erreicht man, indem der letzte boolesche Eingabewert auf 'FALSE' gesetzt wird. Dies beschleunigt die Berechnung einigermaßen, insbesondere wenn die Geometrie sehr einfach gestaltet ist.

4.3.4.2.

Wie schaut das mit der Datumsgrenze und den Polen aus?

Alle diese Berechnungen wissen weder über Datumsgrenzen noch über Pole Bescheid. Da es sich um sphärische Koordinaten handelt (Länge und Breite), unterscheidet sich eine Geometrie, die eine Datumsgrenze überschreitet vom Gesichtspunkt der Berechnung her nicht von irgendeiner anderen Geometrie.

4.3.4.3.

Wie lang kann ein Bogen sein, damit er noch verarbeitet werden kann?

Wir verwenden Großkreisbögen als "Interpolationslinie" zwischen zwei Punkten. Das bedeutet, dass es für den Join zwischen zwei Punkten zwei Möglichkeiten gibt, je nachdem, aus welcher Richtung man den Großkreis überquert. Unser gesamter Code setzt voraus, dass die Punkte von der "kürzeren" der beiden Strecken her durch den Großkreis verbunden werden. Als Konsequenz wird eine Geometrie, welche Bögen von mehr als 180 Grad aufweist nicht korrekt modelliert.

4.3.4.4.

Warum dauert es so lange, die Fläche von Europa / Russland / irgendeiner anderen großen geographischen Region zu berechnen?

Weil das Polygon so verdammt groß ist! Große Flächen sind aus zwei Gründen schlecht: ihre Begrenzung ist riesig, wodurch der Index dazu tendiert, das Geoobjekt herauszuholen, egal wie Sie die Anfrage ausführen; die Anzahl der Knoten ist riesig, und Tests (wie ST_Distance, ST_Contains) müssen alle Knoten zumindest einmal, manchmal sogar n-mal durchlaufen (wobei N die Anzahl der Knoten im beteiligten Geoobjekt bezeichnet).

Wenn es sich um sehr große Polygone handelt, die Abfragen aber nur in kleinen Gebieten stattfinden, empfehlen wir wie beim geometrischen Datentyp, dass Sie die Geometrie in kleinere Stücke "denormalisieren". Dadurch kann der Index effiziente Unterabfragen auf Teile des Geoobjekts ausführen, da eine Abfrage nicht jedesmal das gesamte Geoobjekt herausholen muss. Konsultieren Sie dazu bitte die Dokumentation der FunktionST_Subdivide. Nur weil Sie ganz Europa in einem Polygon speichern *können* heißt das nicht, dass Sie dies auch tun *sollten*.

4.4. Geometrievalidierung

PostGIS ist mit der Spezifikation Simple Features des Open Geospatial Consortium (OGC) konform. Dieser Standard definiert die Konzepte der Geometrie simple und valid. Diese Definitionen ermöglichen es dem Simple-Features-Geometriemodell, räumliche Objekte in einer konsistenten und eindeutigen Weise darzustellen, die effiziente Berechnungen unterstützt. (Anmerkung: OGC SF und SQL/MM haben die gleichen Definitionen für einfach und gültig).

4.4.1. Einfache Geometrie

Eine einfache Geometrie ist eine Geometrie, die keine anomalen geometrischen Punkte wie Selbstschnittpunkte oder Selbsttangenten aufweist.

Ein POINT ist von Natur aus einfach als ein 0-dimensionales Geometrieobjekt.

MULTIPOINTs sind simple, wenn sich keine zwei Koordinaten (POINTs) decken (keine identischen Koordinatenpaare aufweisen).

Ein LINESTRING ist einfach, wenn er, abgesehen von den Endpunkten, nicht zweimal durch denselben Punkt verläuft. Wenn die Endpunkte eines einfachen Linienstrangs identisch sind, wird er geschlossen und als linearer Ring bezeichnet.

(a) und (c) sind einfache LINESTRINGs. (b) und (d) sind nicht einfach. (c) ist ein geschlossener linearer Ring.

(a)

(b)

(c)

(d)

Ein MULTILINESTRING ist nur dann einfach, wenn alle seine Elemente einfach sind und der einzige Schnittpunkt zwischen zwei beliebigen Elementen an Punkten auftritt, die auf den Grenzen der beiden Elemente liegen.

(e) und (f) sind einfache MULTILINESTRINGs. (g) ist nicht einfach.

(e)

(f)

(g)

POLYGONs werden aus linearen Ringen gebildet, daher ist eine gültige polygonale Geometrie immer einfach.

Um zu prüfen, ob eine Geometrie einfach ist, verwenden Sie die Funktion ST_IsSimple:

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

Im Allgemeinen verlangen PostGIS-Funktionen nicht, dass geometrische Argumente einfach sind. Die Einfachheit wird in erster Linie als Grundlage für die Definition der geometrischen Gültigkeit verwendet. Sie ist auch eine Voraussetzung für einige Arten von Geodatenmodellen (z. B. lassen lineare Netze oft keine Linien zu, die sich kreuzen). Mehrpunkt- und lineare Geometrie kann mit ST_UnaryUnion vereinfacht werden.

4.4.2. Gültige Geometrie

Die Gültigkeit der Geometrie gilt in erster Linie für 2-dimensionale Geometrien (POLYGONs und MULTIPOLYGONs) . Die Gültigkeit wird durch Regeln definiert, die es der polygonalen Geometrie ermöglichen, ebene Flächen eindeutig zu modellieren.

Ein POLYGON ist gültig wenn:

  1. Die Begrenzungsringe des Polygons (der äußere Schalenring und die inneren Lochringe) sind einfach (kreuzen sich nicht und berühren sich nicht). Aus diesem Grund kann ein Polygon keine Schnittlinien, Zacken oder Schleifen haben. Dies bedeutet, dass Polygonlöcher als innere Ringe dargestellt werden müssen, anstatt dass der äußere Ring sich selbst berührt (ein sogenanntes "umgekehrtes Loch").

  2. Grenzringe kreuzen sich nicht

  3. Begrenzungsringe können sich in Punkten berühren, aber nur als Tangente (d. h. nicht in einer Linie)

  4. innere Ringe sind im äußeren Ring enthalten

  5. das Innere des Polygons ist einfach verbunden (d. h. die Ringe dürfen sich nicht so berühren, dass das Polygon in mehr als einen Teil zerfällt)

(h) und (i) sind gültig POLYGONs. (j-m) sind ungültig. (j) kann als gültiges MULTIPOLYGON dargestellt werden.

(h)

(i)

(j)

(k)

(l)

(m)

Ein MULTIPOLYGON ist gültig wenn:

  1. sein Element POLYGONs gültig sind

  2. die Elemente dürfen sich nicht überschneiden (d. h. ihre Innenräume dürfen sich nicht überschneiden)

  3. Elemente berühren sich nur an Punkten (d. h. nicht entlang einer Linie)

(n) ist ein gültiges MULTIPOLYGON. (o) und (p) sind ungültig.

(n)

(o)

(p)

Diese Regeln bedeuten, dass gültige polygonale Geometrie auch einfach ist.

Für die lineare Geometrie ist die einzige Gültigkeitsregel, dass LINESTRINGs mindestens zwei Punkte und eine Länge ungleich Null haben muss (oder äquivalent dazu mindestens zwei verschiedene Punkte.) Beachten Sie, dass nicht-einfache (sich selbst schneidende) Linien gültig sind.

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

Die Geometrien POINT und MULTIPOINT haben keine Gültigkeitsregeln.

4.4.3. Verwaltung der Gültigkeit

PostGIS ermöglicht die Erstellung und Speicherung von gültiger und ungültiger Geometrie. Dies ermöglicht es, ungültige Geometrie zu erkennen und zu markieren oder zu korrigieren. Es gibt auch Situationen, in denen die OGC-Gültigkeitsregeln strenger sind als erwünscht (Beispiele hierfür sind Linienstränge mit Nulllänge und Polygone mit invertierten Löchern).

Viele der von PostGIS bereitgestellten Funktionen beruhen auf der Annahme, dass die Geometrieargumente gültig sind. So ist es beispielsweise nicht sinnvoll, die Fläche eines Polygons zu berechnen, in dem ein Loch außerhalb des Polygons definiert ist, oder ein Polygon aus einer nicht einfachen Begrenzungslinie zu konstruieren. Durch die Annahme gültiger geometrischer Eingaben können die Funktionen effizienter arbeiten, da sie nicht auf topologische Korrektheit geprüft werden müssen. (Bemerkenswerte Ausnahmen sind Linien der Länge Null und Polygone mit Invertierungen, die im Allgemeinen korrekt behandelt werden). Außerdem erzeugen die meisten PostGIS-Funktionen eine gültige Geometrieausgabe, wenn die Eingaben gültig sind. Dadurch können PostGIS-Funktionen sicher miteinander verkettet werden.

Wenn Sie beim Aufruf von PostGIS-Funktionen unerwartete Fehlermeldungen erhalten (z. B. "GEOS Intersection() hat einen Fehler ausgelöst!"), sollten Sie sich zunächst vergewissern, dass die Argumente der Funktion gültig sind. Wenn dies nicht der Fall ist, sollten Sie eine der folgenden Techniken anwenden, um sicherzustellen, dass die zu verarbeitenden Daten gültig sind.

[Note]

Wenn eine Funktion bei gültigen Eingaben einen Fehler meldet, dann haben Sie möglicherweise einen Fehler in PostGIS oder in einer der verwendeten Bibliotheken gefunden und sollten dies dem PostGIS-Projekt melden. Dasselbe gilt, wenn eine PostGIS-Funktion bei gültiger Eingabe eine ungültige Geometrie zurückgibt.

Um zu prüfen, ob eine Geometrie gültig ist, verwenden Sie die Funktion ST_IsValid:

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

Informationen über die Art und den Ort einer geometrischen Ungültigkeit werden von der Funktion ST_IsValidDetail geliefert:

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

In manchen Situationen ist es wünschenswert, ungültige Geometrien automatisch zu korrigieren. Verwenden Sie dazu die Funktion ST_MakeValid. (ST_MakeValid ist ein Fall einer räumlichen Funktion, die ungültige Eingaben zulässt!)

Standardmäßig prüft PostGIS beim Laden von Geometrien nicht auf Gültigkeit, da die Gültigkeitsprüfung bei komplexen Geometrien viel CPU-Zeit in Anspruch nehmen kann. Wenn Sie Ihren Datenquellen nicht trauen, können Sie eine Gültigkeitsprüfung für Ihre Tabellen erzwingen, indem Sie eine Prüfbeschränkung hinzufügen:

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

4.5. Räumliche Bezugssysteme

Ein Raumbezugssystem (SRS) (auch Koordinatenreferenzsystem (CRS) genannt) definiert, wie die Geometrie auf Orte auf der Erdoberfläche bezogen wird. Es gibt drei Arten von SRS:

  • Ein geodätisches SRS verwendet Winkelkoordinaten (Längen- und Breitengrad), die direkt auf der Erdoberfläche abgebildet werden.

  • Eine projizierte SRS verwendet eine mathematische Projektionstransformation, um die Oberfläche der sphäroidischen Erde auf eine Ebene zu "glätten". Dabei werden Ortskoordinaten so zugewiesen, dass eine direkte Messung von Größen wie Entfernung, Fläche und Winkel möglich ist. Das Koordinatensystem ist kartesisch, d. h. es hat einen definierten Ursprungspunkt und zwei senkrecht zueinander stehende Achsen (in der Regel nach Norden und Osten ausgerichtet). Jede projizierte SRS verwendet eine bestimmte Längeneinheit (in der Regel Meter oder Fuß). Ein projiziertes SRS kann in seinem Anwendungsbereich begrenzt sein, um Verzerrungen zu vermeiden und in die definierten Koordinatengrenzen zu passen.

  • Ein local SRS ist ein kartesisches Koordinatensystem, das nicht auf die Erdoberfläche referenziert ist. In PostGIS wird dies durch einen SRID-Wert von 0 angegeben.

Es gibt viele verschiedene räumliche Bezugssysteme, die verwendet werden. Die gängigen SRS sind in der European Petroleum Survey Group EPSG-Datenbank standardisiert. Der Einfachheit halber bezieht sich PostGIS (und viele andere raumbezogene Systeme) auf SRS-Definitionen unter Verwendung eines ganzzahligen Bezeichners, der SRID genannt wird.

Eine Geometrie ist mit einem räumlichen Bezugssystem durch ihren SRID-Wert verbunden, auf den über ST_SRID zugegriffen wird. Der SRID für eine Geometrie kann mit ST_SetSRID zugewiesen werden. Einige Geometriekonstruktorfunktionen ermöglichen die Angabe eines SRID (z. B. ST_Point und ST_MakeEnvelope). Das Format EWKT unterstützt SRIDs mit dem Präfix SRID=n;.

Räumliche Funktionen, die Paare von Geometrien verarbeiten (z. B. die Funktionen overlay und relationship ), setzen voraus, dass die eingegebenen Geometrien im selben räumlichen Bezugssystem (mit demselben SRID) vorliegen. Geometriedaten können mit ST_Transform und ST_TransformPipeline in ein anderes räumliches Bezugssystem transformiert werden. Die von den Funktionen zurückgegebenen Geometrien haben dasselbe SRS wie die Eingabegeometrien.

4.5.1. SPATIAL_REF_SYS Tabelle

Die von PostGIS verwendete Tabelle SPATIAL_REF_SYS ist eine OGC-konforme Datenbanktabelle, die die verfügbaren räumlichen Bezugssysteme definiert. Sie enthält die numerischen SRIDs und textuelle Beschreibungen der Koordinatensysteme.

Die Definition der Tabelle spatial_ref_sys lautet:

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

Die Spalten sind:

srid

Ein ganzzahliger Code, der das Raumbezugssystem (SRS) innerhalb der Datenbank eindeutig identifiziert.

auth_name

Der Name der Norm oder des Normungsgremiums, das für dieses Referenzsystem zitiert wird. Zum Beispiel ist "EPSG" ein gültiger auth_name.

auth_srid

Die ID des räumlichen Bezugssystems, wie von der in auth_name genannten Behörde definiert. Im Falle der EPSG ist dies der EPSG-Code.

srtext

Die Well-Known-Text Darstellung des Koordinatenreferenzsystems. Ein Beispiel dazu:

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

Eine Diskussion über SRS WKT findet sich im OGC-Standard Well-known text representation of coordinate reference systems.

proj4text

PostGIS verwendet die PROJ-Bibliothek, um Koordinatentransformationen zu ermöglichen. Die Spalte proj4text enthält die PROJ-Koordinatendefinitionszeichenfolge für eine bestimmte SRID. Zum Beispiel:

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

Weitere Informationen finden Sie auf der PROJ-Website. Die Datei spatial_ref_sys.sql enthält sowohl srtext als auch proj4text Definitionen für alle EPSG-Projektionen.

Beim Abrufen von Definitionen für räumliche Bezugssysteme zur Verwendung in Transformationen verwendet PostGIS die folgende Strategie:

  • Wenn auth_name und auth_srid vorhanden sind (nicht NULL), verwenden Sie den PROJ SRS, der auf diesen Einträgen basiert (falls einer existiert).

  • Wenn srtext vorhanden ist, erstellen Sie, wenn möglich, ein SRS mit diesem Text.

  • Wenn proj4text vorhanden ist, erstellen Sie, wenn möglich, eine SRS mit diesem Text.

4.5.2. Benutzerdefinierte räumliche Bezugssysteme

Die PostGIS-Tabelle spatial_ref_sys enthält über 3000 der gebräuchlichsten Definitionen für räumliche Bezugssysteme, die von der Projektionsbibliothek PROJ verarbeitet werden. Es gibt jedoch viele Koordinatensysteme, die darin nicht enthalten sind. Sie können der Tabelle SRS-Definitionen hinzufügen, wenn Sie die erforderlichen Informationen über das räumliche Bezugssystem haben. Sie können aber auch Ihr eigenes räumliches Bezugssystem definieren, wenn Sie mit den PROJ-Konstruktionen vertraut sind. Denken Sie daran, dass die meisten räumlichen Bezugssysteme regional sind und keine Bedeutung haben, wenn sie außerhalb der Grenzen verwendet werden, für die sie bestimmt sind.

Eine Ressource zum Auffinden von nicht im Kernsatz definierten räumlichen Bezugssystemen ist http://spatialreference.org/

Einige häufig verwendete Raumbezugssysteme sind: 4326 - WGS 84 Long Lat, 4269 - NAD 83 Long Lat, 3395 - WGS 84 World Mercator, 2163 - US National Atlas Equal Area, und die 60 WGS84 UTM-Zonen. UTM-Zonen sind mit am besten für Messungen geeignet, decken aber nur 6-Grad-Regionen ab. (Um zu bestimmen, welche UTM-Zone für Ihr Gebiet von Interesse zu verwenden ist, siehe utmzone PostGIS plpgsql helper function).

Die US-Bundesstaaten verwenden State Plane-Raumbezugssysteme (meter- oder feet-basiert) - in der Regel gibt es ein oder zwei pro Staat. Die meisten der Meter-basierten Systeme sind im Kernsatz enthalten, aber viele der Fuß-basierten oder von ESRI erstellten Systeme müssen von spatialreference.org kopiert werden.

Sie können sogar Koordinatensysteme definieren, die nicht auf der Erde basieren, wie z.B. Mars 2000 Dieses Marskoordinatensystem ist nicht planar (es ist in Grad sphäroidisch), aber Sie können es mit dem Typ Geographie verwenden, um Längen- und Entfernungsmessungen in Metern statt in Grad zu erhalten.

Hier ein Beispiel für das Laden eines benutzerdefinierten Koordinatensystems unter Verwendung eines nicht zugewiesenen SRID und der PROJ-Definition für eine US-zentrische Lambert-konforme Projektion:

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. Räumliche Tabellen

4.6.1. Erstellung einer räumlichen Tabelle

Sie können eine Tabelle zur Speicherung von Geometriedaten mit der SQL-Anweisung CREATE TABLE mit einer Spalte vom Typ Geometrie erstellen. Das folgende Beispiel erstellt eine Tabelle mit einer Geometriespalte, die 2D (XY) LineStrings im BC-Albers-Koordinatensystem (SRID 3005) speichert:

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

Der Geometrietyp unterstützt zwei optionale Typmodifikatoren:

  • der spatial type modifier schränkt die Art der in der Spalte zulässigen Formen und Abmessungen ein. Der Wert kann einer der unterstützten Geometrie-Subtypen sein (z. B. POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, usw.). Der Modifikator unterstützt Einschränkungen der Koordinatendimensionalität durch Hinzufügen von Suffixen: Z, M und ZM. Ein Modifikator 'LINESTRINGM' lässt beispielsweise nur Linienzüge mit drei Dimensionen zu und behandelt die dritte Dimension als Maß. In ähnlicher Weise erfordert 'POINTZM' vierdimensionale (XYZM) Daten.

  • Der SRID-Modifikator schränkt das Raumbezugssystem SRID auf eine bestimmte Zahl ein. Wird der Modifikator weggelassen, ist das SRID standardmäßig auf 0 gesetzt.

Beispiele für die Erstellung von Tabellen mit Geometriespalten:

  • Erstellen Sie eine Tabelle, die jede Art von Geometrie mit dem Standard-SRID enthält:

    CREATE TABLE geoms(gid serial PRIMARY KEY, geom geometry );
  • Erstellen Sie eine Tabelle mit 2D-Punktgeometrie mit dem Standard-SRID:

    CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINT) );
  • Erstellen Sie eine Tabelle mit 3D (XYZ) POINTs und einer expliziten SRID von 3005:

    CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINTZ,3005) );
  • Erstellen Sie eine Tabelle mit 4D (XYZM) LINESTRING-Geometrie mit dem Standard-SRID:

    CREATE TABLE lines(gid serial PRIMARY KEY, geom geometry(LINESTRINGZM) );
  • Erstellen Sie eine Tabelle mit 2D POLYGON Geometrie mit dem SRID 4267 (NAD 1927 long lat):

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

Es ist möglich, mehr als eine Geometriespalte in einer Tabelle zu haben. Dies kann bei der Erstellung der Tabelle angegeben werden, oder eine Spalte kann mit der SQL-Anweisung ALTER TABLE hinzugefügt werden. In diesem Beispiel wird eine Spalte hinzugefügt, die 3D LineStrings enthalten kann:

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

4.6.2. GEOMETRY_COLUMNS Ansicht

Die OGC Simple Features Specification for SQL definiert die GEOMETRY_COLUMNS Metadatentabelle zur Beschreibung der Geometrietabellenstruktur. In PostGIS ist geometry_columns ein View, der aus Katalogtabellen des Datenbanksystems gelesen wird. Dadurch wird sichergestellt, dass die räumlichen Metadateninformationen immer mit den aktuell definierten Tabellen und Views konsistent sind. Die Struktur des Views ist:

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

Die Spalten sind:

f_table_catalog, f_table_schema, f_table_name

Der voll qualifizierte Name der Merkmalstabelle, die die Geometriespalte enthält. Es gibt kein PostgreSQL-Analogon für "catalog", daher wird diese Spalte leer gelassen. Für "schema" wird der Name des PostgreSQL-Schemas verwendet (public ist der Standard).

f_geometry_column

Der Name der Geometriespalte in der Feature-Tabelle.

coord_dimension

Die Koordinatenabmessung (2, 3 oder 4) der Spalte.

srid

Die ID des räumlichen Bezugssystems, das für die Koordinatengeometrie in dieser Tabelle verwendet wird. Es handelt sich um einen Fremdschlüsselverweis auf die Tabelle spatial_ref_sys (siehe Section 4.5.1, “SPATIAL_REF_SYS Tabelle”).

type

Der Datentyp des Geoobjekts. Um die räumliche Spalte auf einen einzelnen Datentyp zu beschränken, benutzen Sie bitte: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION oder die entsprechenden XYM Versionen POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM und GEOMETRYCOLLECTIONM. Für uneinheitliche Kollektionen (gemischete Datentypen) können Sie den Datentyp "GEOMETRY" verwenden.

4.6.3. Manuelles Registrieren von Geometriespalten

Zwei Fälle bei denen Sie dies benötigen könnten sind SQL-Views und Masseninserts. Beim Fall von Masseninserts können Sie die Registrierung in der Tabelle "geometry_columns" korrigieren, indem Sie auf die Spalte einen CONSTRAINT setzen oder ein "ALTER TABLE" durchführen. Falls Ihre Spalte Typmod basiert ist, geschieht die Registrierung beim Erstellungsprozess auf korrekte Weise, so dass Sie hier nichts tun müssen. Auch Views, bei denen keine räumliche Funktion auf die Geometrie angewendet wird, werden auf gleiche Weise wie die Geometrie der zugrunde liegenden Tabelle registriert.

-- Lets say 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;

-- For it to register correctly
-- You need to cast the 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 you know the geometry type for sure is a 2D POLYGON then you could do
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;
--Lets say you created a derivative table by doing a bulk insert
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 2D index on new table
CREATE INDEX idx_myschema_myspecialpois_geom_gist
  ON myschema.my_special_pois USING gist(geom);

-- If your points are 3D points or 3M points,
-- then you might want to create an nd index instead of a 2D index
CREATE INDEX my_special_pois_geom_gist_nd
        ON my_special_pois USING gist(geom gist_geometry_ops_nd);

-- To manually register this new table's geometry column in geometry_columns.
-- Note it will also change the underlying structure of the table to
-- to make the column typmod based.
SELECT populate_geometry_columns('myschema.my_special_pois'::regclass);

-- If you are using PostGIS 2.0 and for whatever reason, you
-- you need the constraint based definition behavior
-- (such as case of inherited tables where all children do not have the same type and srid)
-- set optional use_typmod argument to false
SELECT populate_geometry_columns('myschema.my_special_pois'::regclass, false); 

Obwohl die alte auf CONSTRAINTs basierte Methode immer noch unterstützt wird, wird eine auf Constraints basierende Geometriespalte, die direkt in einem View verwendet wird, nicht korrekt in geometry_columns registriert. Eine Typmod basierte wird korrekt registriert. Im folgenden Beispiel definieren wir eine Spalte mit Typmod und eine andere mit 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);

In psql:

\d pois_ny;

Wir sehen, das diese Spalten unterschiedlich definiert sind -- eine mittels Typmodifizierer, eine nutzt einen Constraint

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)

Beide registrieren sich korrekt in "geometry_columns"

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

Jedoch -- wenn wir einen View auf die folgende Weise erstellen

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

Die Typmod basierte geometrische Spalte eines View registriert sich korrekt, die auf Constraint basierende nicht.

f_table_name   | f_geometry_column | srid |   type
------------------+-------------------+------+----------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         |    0 | GEOMETRY

Dies kann sich in zukünftigen Versionen von PostGIS ändern, aber im Moment müssen Sie dies tun, um die korrekte Registrierung der einschränkungsbasierten Ansichtsspalte zu erzwingen:

DROP VIEW vw_pois_ny_parks;
CREATE VIEW vw_pois_ny_parks AS
SELECT gid, poi_name, cat,
  geom,
  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. Laden von Geodaten

Sobald Sie eine Geodatentabelle erstellt haben, können Sie Geodaten in die Datenbank hochladen. Es gibt zwei eingebaute Möglichkeiten, Geodaten in eine PostGIS/PostgreSQL-Datenbank zu übertragen: mit formatierten SQL-Anweisungen oder mit dem Shapefile-Loader.

4.7.1. SQL zum Laden von Daten verwenden

Wenn raumbezogene Daten in eine Textdarstellung konvertiert werden können (entweder als WKT oder WKB), dann ist die Verwendung von SQL möglicherweise der einfachste Weg, um Daten in PostGIS zu erhalten. Daten können in großem Umfang in PostGIS/PostgreSQL geladen werden, indem eine Textdatei mit SQL INSERT Anweisungen mit dem psql SQL-Dienstprogramm geladen wird.

Eine SQL-Ladedatei (z. B.roads.sql ) könnte wie folgt aussehen:

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;

Die SQL-Datei kann mit psql in PostgreSQL geladen werden:

psql -d [database] -f roads.sql

4.7.2. Verwendung des Shapefile Loaders

Der shp2pgsql Datenlader konvertiert Shapefiles in SQL, das zum Einfügen in eine PostGIS/PostgreSQL-Datenbank geeignet ist, entweder im Geometrie- oder im Geografieformat. Der Lader hat mehrere Betriebsmodi, die über Kommandozeilenflags ausgewählt werden können.

Es gibt auch eine grafische Schnittstelle shp2pgsql-gui mit den meisten Optionen des Befehlszeilen-Laders. Dies kann für einmaliges, nicht skriptgesteuertes Laden oder für PostGIS-Neulinge einfacher zu verwenden sein. Es kann auch als Plugin für PgAdminIII konfiguriert werden.

(c|a|d|p) Dies sind sich gegenseitig ausschließende Optionen:

-c

Erzeugt eine neue Tabelle und füllt sie aus dem Shapefile. Dies ist der Standardmodus.

-a

Fügt Daten aus dem Shapefile in die Datenbanktabelle ein. Beachten Sie, dass die Dateien die gleichen Attribute und Datentypen haben müssen, um mit dieser Option mehrere Dateien zu laden.

-d

Löscht die Datenbanktabelle, bevor eine neue Tabelle mit den Daten im Shapefile erstellt wird.

-p

Erzeugt nur den SQL-Code zur Erstellung der Tabelle, ohne irgendwelche Daten hinzuzufügen. Kann verwendet werden, um die Erstellung und das Laden einer Tabelle vollständig zu trennen.

-?

Zeigt die Hilfe an.

-D

Verwendung des PostgreSQL "dump" Formats für die Datenausgabe. Kann mit -a, -c und -d kombiniert werden. Ist wesentlich schneller als das standardmäßige SQL "insert" Format. Verwenden Sie diese Option wenn Sie sehr große Datensätze haben.

-s [<FROM_SRID>:]<SRID>

Erstellt und befüllt die Geometrietabelle mit der angegebenen SRID. Optional kann für das Shapefile eine FROM_SRID angegeben werden, worauf dann die Geometrie in die Ziel-SRID projiziert wird.

-k

Erhält die Groß- und Kleinschreibung (Spalte, Schema und Attribute). Beachten Sie bitte, dass die Attributnamen in Shapedateien immer Großbuchstaben haben.

-i

Wandeln Sie alle Ganzzahlen in standard 32-bit Integer um, erzeugen Sie keine 64-bit BigInteger, auch nicht dann wenn der DBF-Header dies unterstellt.

-I

Einen GIST Index auf die Geometriespalte anlegen.

-m

-m a_file_name bestimmt eine Datei, in welcher die Abbildungen der (langen) Spaltennamen in die 10 Zeichen langen DBF Spaltennamen festgelegt sind. Der Inhalt der Datei besteht aus einer oder mehreren Zeilen die jeweils zwei, durch Leerzeichen getrennte Namen enthalten, aber weder vorne noch hinten mit Leerzeichen versehen werden dürfen. Zum Beispiel:

COLUMNNAME DBFFIELD1
AVERYLONGCOLUMNNAME DBFFIELD2

-S

Erzeugt eine Einzel- anstatt einer Mehrfachgeometrie. Ist nur erfolgversprechend, wenn die Geometrie auch tatsächlich eine Einzelgeometrie ist (insbesondere gilt das für ein Mehrfachpolygon/MULTIPOLYGON, dass nur aus einer einzelnen Begrenzung besteht, oder für einen Mehrfachpunkt/MULTIPOINT, der nur einen einzigen Knoten aufweist).

-t <dimensionality>

Zwingt die Ausgabegeometrie eine bestimmte Dimension anzunehmen. Sie können die folgenden Zeichenfolgen verwenden, um die Dimensionalität anzugeben: 2D, 3DZ, 3DM, 4D.

Wenn die Eingabe weniger Dimensionen aufweist als angegeben, dann werden diese Dimensionen bei der Ausgabe mit Nullen gefüllt. Wenn die Eingabe mehr Dimensionen als angegeben aufweist werden diese abgestreift.

-w

Ausgabe im Format WKT anstatt WKB. Beachten Sie bitte, dass es hierbei zu Koordinatenverschiebungen infolge von Genauigkeitsverlusten kommen kann.

-e

Jede Anweisung einzeln und nicht in einer Transaktion ausführen. Dies erlaubt den Großteil auch dann zu laden, also die guten Daten, wenn eine Geometrie dabei ist die Fehler verursacht. Beachten Sie bitte das dies nicht gemeinsam mit der -D Flag angegeben werden kann, da das "dump" Format immer eine Transaktion verwendet.

-W <encoding>

Gibt die Codierung der Eingabedaten (dbf-Datei) an. Wird die Option verwendet, so werden alle Attribute der dbf-Datei von der angegebenen Codierung nach UTF8 konvertiert. Die resultierende SQL-Ausgabe enthält dann den Befehl SET CLIENT_ENCODING to UTF8, damit das Back-end wiederum die Möglichkeit hat, von UTF8 in die, für die interne Nutzung konfigurierte Datenbankcodierung zu decodieren.

-N <policy>

Umgang mit NULL-Geometrien (insert*, skip, abort)

-n

-n Es wird nur die *.dbf-Datei importiert. Wenn das Shapefile nicht Ihren Daten entspricht, wird automatisch auf diesen Modus geschaltet und nur die *.dbf-Datei geladen. Daher müssen Sie diese Flag nur dann setzen, wenn sie einen vollständigen Shapefile-Satz haben und lediglich die Attributdaten, und nicht die Geometrie, laden wollen.

-G

Verwendung des geographischen Datentyps in WGS84 (SRID=4326), anstelle des geometrischen Datentyps (benötigt Längen- und Breitenangaben).

-T <tablespace>

Den Tablespace für die neue Tabelle festlegen. Solange der -X Parameter nicht angegeben wird, benutzen die Indizes weiterhin den standardmäßig festgelegten Tablespace. Die PostgreSQL Dokumentation beinhaltet eine gute Beschreibung, wann es sinnvoll ist, eigene Tablespaces zu verwenden.

-X <tablespace>

Den Tablespace bestimmen, in dem die neuen Tabellenindizes angelegt werden sollen. Gilt für den Primärschlüsselindex und wenn "-l" verwendet wird, auch für den räumlichen GIST-Index.

-Z

Wenn dieses Flag verwendet wird, verhindert es die Erzeugung von ANALYZE Anweisungen. Ohne das Flag -Z (Standardverhalten) werden die Anweisungen ANALYZE erzeugt.

Eine Beispielsitzung, bei der der Loader eine Eingabedatei erstellt und diese lädt, könnte folgendermaßen aussehen:

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

Eine Konvertierung und das Laden können in einem Schritt über UNIX-Pipes durchgeführt werden:

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

4.8. Extrahieren von Geodaten

Geodaten können entweder mit SQL oder mit dem Shapefile-Dumper aus der Datenbank extrahiert werden. Im Abschnitt über SQL werden einige der Funktionen vorgestellt, die für Vergleiche und Abfragen von räumlichen Tabellen zur Verfügung stehen.

4.8.1. SQL zum Extrahieren von Daten verwenden

Die einfachste Möglichkeit, Geodaten aus der Datenbank zu extrahieren, ist die Verwendung einer SQL SELECT Abfrage, um den zu extrahierenden Datensatz zu definieren und die resultierenden Spalten in eine parsbare Textdatei zu übertragen:

db=# 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)

Es kann vorkommen, dass eine Art von Einschränkung erforderlich ist, um die Anzahl der zurückgegebenen Datensätze zu verringern. Im Falle von attributbasierten Einschränkungen verwenden Sie dieselbe SQL-Syntax wie bei einer nicht räumlichen Tabelle. Bei räumlichen Einschränkungen sind die folgenden Funktionen nützlich:

ST_Intersects

Diese Funktion bestimmt ob sich zwei geometrische Objekte einen gemeinsamen Raum teilen

=

Überprüft, ob zwei Geoobjekte geometrisch ident sind. Zum Beispiel, ob 'POLYGON((0 0,1 1,1 0,0 0))' ident mit 'POLYGON((0 0,1 1,1 0,0 0))' ist (ist es).

Außerdem können Sie diese Operatoren in Anfragen verwenden. Beachten Sie bitte, wenn Sie eine Geometrie oder eine Box auf der SQL-Befehlszeile eingeben, dass Sie die Zeichensatzdarstellung explizit in eine Geometrie umwandeln müssen. 312 ist ein fiktives Koordinatenreferenzsystem das zu unseren Daten passt. Also, zum Beispiel:

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

Die obere Abfrage würde einen einzelnen Datensatz aus der Tabelle "ROADS_GEOM" zurückgeben, in dem die Geometrie gleich dem angegebenen Wert ist.

Überprüfung ob einige der Strassen in die Polygonfläche hineinreichen:

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

Die häufigsten räumlichen Abfragen werden vermutlich in einem bestimmten Ausschnitt ausgeführt. Insbesondere von Client-Software, wie Datenbrowsern und Kartendiensten, die auf diese Weise die Daten für die Darstellung eines "Kartenausschnitts" erfassen.

Der Operator "&&" kann entweder mit einer BOX3D oder mit einer Geometrie verwendet werden. Allerdings wird auch bei einer Geometrie nur das Umgebungsrechteck für den Vergleich herangezogen.

Die Abfrage zur Verwendung des "BOX3D" Objekts für einen solchen Ausschnitt sieht folgendermaßen aus:

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

Achten Sie auf die Verwendung von SRID=312, welche die Projektion Einhüllenden/Enveloppe bestimmt.

4.8.2. Verwendung des Shapefile-Dumpers

Der pgsql2shp Tabellendumper verbindet sich mit der Datenbank und konvertiert eine Tabelle (möglicherweise durch eine Abfrage definiert) in eine Shape-Datei. Die grundlegende Syntax lautet:

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

Optionen auf der Befehlszeile:

-f <filename>

Ausgabe in eine bestimmte Datei.

-h <host>

Der Datenbankserver, mit dem eine Verbindung aufgebaut werden soll.

-p <port>

Der Port über den der Verbindungsaufbau mit dem Datenbank Server hergestellt werden soll.

-P <password>

Das Passwort, das zum Verbindungsaufbau mit der Datenbank verwendet werden soll.

-u <user>

Das Benutzername, der zum Verbindungsaufbau mit der Datenbank verwendet werden soll.

-g <geometry column>

Bei Tabellen mit mehreren Geometriespalten jene Geometriespalte, die ins Shapefile geschrieben werden soll.

-b

Die Verwendung eines binären Cursors macht die Berechnung schneller; funktioniert aber nur, wenn alle nicht-geometrischen Attribute in den Datentyp "text" umgewandelt werden können.

-r

RAW-Modus. Das Attribut gid wird nicht verworfen und Spaltennamen werden nicht maskiert.

-m filename

Bildet die Identifikatoren in Namen mit 10 Zeichen ab. Der Inhalt der Datei besteht aus Zeilen von jeweils zwei durch Leerzeichen getrennten Symbolen, jedoch ohne vor- oder nachgestellte Leerzeichen: VERYLONGSYMBOL SHORTONE ANOTHERVERYLONGSYMBOL SHORTER etc.

4.9. Räumliche Indizes

Räumliche Indizes ermöglichen die Verwendung einer räumlichen Datenbank für große Datensätze. Ohne Indizierung erfordert die Suche nach Merkmalen ein sequentielles Durchsuchen aller Datensätze in der Datenbank. Die Indizierung beschleunigt die Suche, indem die Daten in einer Struktur organisiert werden, die schnell durchlaufen werden kann, um passende Datensätze zu finden.

Die B-Baum-Index-Methode, die üblicherweise für Attributdaten verwendet wird, ist für räumliche Daten nicht sehr nützlich, da sie nur die Speicherung und Abfrage von Daten in einer einzigen Dimension unterstützt. Daten wie Geometrie (die 2 oder mehr Dimensionen haben) erfordern eine Indexmethode, die Bereichsabfragen über alle Datendimensionen unterstützt. Einer der Hauptvorteile von PostgreSQL für den Umgang mit räumlichen Daten ist, dass es mehrere Arten von Indexmethoden bietet, die gut für mehrdimensionale Daten funktionieren: GiST-, BRIN- und SP-GiST-Indizes.

  • GiST (Generalized Search Tree) Indizes unterteilen Daten in "Dinge, die auf einer Seite liegen", "Dinge, die sich überschneiden", "Dinge, die im Inneren liegen" und können für eine Vielzahl von Datentypen verwendet werden, einschließlich GIS-Daten. PostGIS verwendet einen R-Tree-Index, der auf GiST aufbaut, um räumliche Daten zu indizieren. GiST ist die am weitesten verbreitete und vielseitigste räumliche Indexmethode und bietet eine sehr gute Abfrageleistung.

  • BRIN (Block Range Index) Indizes fassen die räumliche Ausdehnung von Bereichen von Tabellendatensätzen zusammen. Die Suche erfolgt über einen Scan der Bereiche. BRIN ist nur für einige Arten von Daten geeignet (räumlich sortiert, mit seltenen oder keinen Aktualisierungen). Es ermöglicht jedoch eine wesentlich schnellere Indexerstellung und eine wesentlich geringere Indexgröße.

  • SP-GiST (Space-Partitioned Generalized Search Tree) ist eine generische Indexmethode, die partitionierte Suchbäume wie Quad-Bäume, k-d-Bäume und Radix-Bäume (Tries) unterstützt.

Räumliche Indizes speichern nur die Bounding Box von Geometrien. Räumliche Abfragen verwenden den Index als primären Filter, um schnell einen Satz von Geometrien zu ermitteln, die möglicherweise der Abfragebedingung entsprechen. Die meisten räumlichen Abfragen erfordern einen sekundären Filter, der eine räumliche Prädikatsfunktion verwendet, um eine spezifischere räumliche Bedingung zu testen. Weitere Informationen über Abfragen mit räumlichen Prädikaten finden Sie unter Section 5.2, “Räumliche Indizes verwenden”.

Siehe auch den PostGIS Workshop Abschnitt über räumliche Indizes, und das PostgreSQL Handbuch.

4.9.1. GiST-Indizes

GiST steht für "Generalized Search Tree" (verallgemeinerter Suchbaum) und ist eine generische Form der Indexierung für mehrdimensionale Daten. PostGIS verwendet einen R-Tree-Index, der auf GiST aufbaut, um räumliche Daten zu indizieren. GiST ist die am häufigsten verwendete und vielseitigste räumliche Indexmethode und bietet eine sehr gute Abfrageleistung. Andere GiST-Implementierungen werden verwendet, um die Suche in allen Arten von unregelmäßigen Datenstrukturen (Integer-Arrays, Spektraldaten usw.) zu beschleunigen, die für eine normale B-Tree-Indexierung nicht geeignet sind. Weitere Informationen finden Sie im PostgreSQL-Handbuch.

Sobald eine Geodatentabelle einige tausend Zeilen überschreitet, sollten Sie einen Index erstellen, um die räumliche Suche in den Daten zu beschleunigen (es sei denn, alle Ihre Suchvorgänge basieren auf Attributen; in diesem Fall sollten Sie einen normalen Index für die Attributfelder erstellen).

Die Syntax, mit der ein GIST-Index auf eine Geometriespalte gelegt wird, lautet:

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

Die obere Syntax erzeugt immer einen 2D-Index. Um einen n-dimensionalen Index für den geometrischen Datentyp zu erhalten, können Sie die folgende Syntax verwenden:

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

Die Erstellung eines räumlichen Indizes ist eine rechenintensive Aufgabe. Während der Erstellung wird auch der Schreibzugriff auf die Tabelle blockiert. Bei produktiven Systemen empfiehlt sich daher die langsamere Option CONCURRENTLY:

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

Nachdem ein Index aufgebaut wurde sollte PostgreSQL gezwungen werden die Tabellenstatistik zu sammeln, da diese zur Optmierung der Auswertungspläne verwendet wird:

VACUUM ANALYZE [table_name] [(column_name)];

4.9.2. BRIN Indizes

BRIN steht für "Block Range Index". Es handelt sich um eine allgemeine Indexmethode, die in PostgreSQL 9.5 eingeführt wurde. BRIN ist eine lossy Indexmethode, was bedeutet, dass eine sekundäre Prüfung erforderlich ist, um zu bestätigen, dass ein Datensatz mit einer bestimmten Suchbedingung übereinstimmt (was für alle bereitgestellten räumlichen Indizes der Fall ist). Sie ermöglicht eine viel schnellere Indexerstellung und eine viel geringere Indexgröße bei einer angemessenen Leseleistung. Sein Hauptzweck besteht darin, die Indizierung sehr großer Tabellen auf Spalten zu unterstützen, die eine Korrelation mit ihrer physischen Position innerhalb der Tabelle aufweisen. Zusätzlich zur räumlichen Indizierung kann BRIN die Suche auf verschiedenen Arten von Attributdatenstrukturen (Integer, Arrays usw.) beschleunigen. Weitere Informationen finden Sie im PostgreSQL-Handbuch.

Sobald eine räumliche Tabelle einige tausend Zeilen überschreitet, sollten Sie einen Index erstellen, um die räumliche Suche in den Daten zu beschleunigen. GiST-Indizes sind sehr leistungsfähig, solange ihre Größe den für die Datenbank verfügbaren Arbeitsspeicher nicht übersteigt und Sie sich die Größe des Indexspeichers und die Kosten der Indexaktualisierung beim Schreiben leisten können. Andernfalls kann für sehr große Tabellen der BRIN-Index als Alternative in Betracht gezogen werden.

Ein BRIN-Index speichert die Bounding Box, die alle in den Zeilen enthaltenen Geometrien in einem zusammenhängenden Satz von Tabellenblöcken einschließt, genannt block range. Bei der Ausführung einer Abfrage unter Verwendung des Indexes werden die Blockbereiche gescannt, um diejenigen zu finden, die den Abfragebereich überschneiden. Dies ist nur dann effizient, wenn die Daten physisch so geordnet sind, dass sich die Begrenzungsrahmen für die Blockbereiche minimal überschneiden (und sich im Idealfall gegenseitig ausschließen). Der daraus resultierende Index ist sehr klein, aber in der Regel weniger performant beim Lesen als ein GiST-Index über dieselben Daten.

Die Erstellung eines BRIN-Index ist wesentlich weniger rechenintensiv als die Erstellung eines GiST-Index. In der Regel ist ein BRIN-Index zehnmal schneller zu erstellen als ein GiST-Index für dieselben Daten. Und da ein BRIN-Index nur eine Bounding Box für jeden Bereich von Tabellenblöcken speichert, benötigt er in der Regel bis zu tausendmal weniger Plattenplatz als ein GiST-Index.

Sie können die Anzahl der Blöcke wählen, die in einem Bereich zusammengefasst werden sollen. Wenn Sie diese Zahl verringern, wird der Index größer, bietet aber wahrscheinlich eine bessere Leistung.

Damit BRIN effektiv ist, sollten die Tabellendaten in einer physischen Reihenfolge gespeichert werden, die die Überlappung der Blöcke minimiert. Es kann sein, daß die Daten bereits entsprechend sortiert sind (z.B. wenn sie aus einem anderen Datensatz geladen wurden, der bereits räumlich sortiert ist). Andernfalls kann dies durch Sortieren der Daten nach einem eindimensionalen räumlichen Schlüssel erreicht werden. Eine Möglichkeit, dies zu tun, besteht darin, eine neue Tabelle zu erstellen, die nach den Geometriewerten sortiert ist (was in neueren PostGIS-Versionen eine effiziente Hilbert-Kurvenordnung verwendet):

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

Alternativ können die Daten an Ort und Stelle sortiert werden, indem ein GeoHash als (temporärer) Index verwendet und anhand dieses Indexes eine Gruppierung vorgenommen wird:

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

Die Syntax für die Erstellung eines BRIN-Index für eine Spalte geometry lautet:

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

Mit der obigen Syntax wird ein 2D-Index erstellt. Um einen 3D-dimensionalen Index zu erstellen, verwenden Sie diese Syntax:

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

Sie können auch einen 4D-dimensionalen Index erhalten, indem Sie die 4D-Operatorklasse verwenden:

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

Die obigen Befehle verwenden die Standardanzahl von Blöcken in einem Bereich, die 128 beträgt. Um die Anzahl der zusammenzufassenden Blöcke in einem Bereich anzugeben, verwenden Sie folgende Syntax

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

Beachten Sie, dass ein BRIN-Index nur einen Indexeintrag für eine große Anzahl von Zeilen speichert. Wenn Ihre Tabelle Geometrien mit einer gemischten Anzahl von Dimensionen speichert, ist es wahrscheinlich, dass der resultierende Index eine schlechte Leistung hat. Sie können diese Leistungseinbußen vermeiden, indem Sie die Operatorklasse mit der geringsten Anzahl von Dimensionen der gespeicherten Geometrien wählen

Der Datentyp geography wird für die BRIN-Indizierung unterstützt. Die Syntax für die Erstellung eines BRIN-Index für eine Geografiespalte lautet:

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

Mit der obigen Syntax wird ein 2D-Index für geografische Objekte auf dem Sphäroid erstellt.

Derzeit wird nur "Einschlussunterstützung" geboten, d. h. nur die Operatoren && , ~ und @ können für die 2D-Fälle verwendet werden (sowohl für die Geometrie als auch für die Geographie ), und nur der Operator &&& für 3D-Geometrien. Derzeit gibt es keine Unterstützung für kNN-Suchen.

Ein wichtiger Unterschied zwischen BRIN und anderen Indexarten ist, daß die Datenbank den Index nicht dynamisch pflegt. Änderungen an räumlichen Daten in der Tabelle werden einfach an das Ende des Indexes angehängt. Dies führt dazu, daß die Leistung der Indexsuche mit der Zeit abnimmt. Der Index kann durch Ausführen eines VACUUM oder durch Verwendung einer speziellen Funktion brin_summarize_new_values(regclass) aktualisiert werden. Aus diesem Grund eignet sich BRIN vor allem für Daten, die nur gelesen werden oder sich nur selten ändern. Weitere Informationen finden Sie im Handbuch.

Zusammenfassung der Verwendung von BRIN für räumliche Daten:

  • Der Indexaufbau ist sehr schnell und die Indexgröße ist sehr klein.

  • Die Indexabfragezeit ist langsamer als bei GiST, kann aber immer noch sehr akzeptabel sein.

  • Erfordert, dass die Tabellendaten in einer räumlichen Reihenfolge sortiert werden.

  • Erfordert manuelle Indexpflege.

  • Am besten geeignet für sehr große Tabellen mit geringer oder gar keiner Überschneidung (z. B. Punkte), die statisch sind oder sich nur selten ändern.

  • Effektiver für Abfragen, die eine relativ große Anzahl von Datensätzen zurückgeben.

4.9.3. SP-GiST Indizes

SP-GiST steht für "Space-Partitioned Generalized Search Tree" und ist eine generische Form der Indizierung für mehrdimensionale Datentypen, die partitionierte Suchbäume wie Quad-Trees, K-D-Trees und Radix-Trees unterstützt (Tries). Das gemeinsame Merkmal dieser Datenstrukturen ist, dass sie den Suchraum wiederholt in Partitionen unterteilen, die nicht gleich groß sein müssen. Neben der räumlichen Indizierung wird SP-GiST zur Beschleunigung von Suchvorgängen bei vielen Arten von Daten verwendet, wie z. B. Telefon-Routing, IP-Routing, Teilstringsuche usw. Weitere Informationen finden Sie im PostgreSQL-Handbuch.

Wie GiST-Indizes sind auch SP-GiST-Indizes verlustbehaftet, da sie die Bounding Box speichern, die räumliche Objekte umschließt. SP-GiST-Indizes können als eine Alternative zu GiST-Indizes betrachtet werden.

Sobald eine Geodatentabelle einige tausend Zeilen überschreitet, kann es sinnvoll sein einen SP-GIST Index zu erzeugen, um die räumlichen Abfragen auf die Daten zu beschleunigen. Die Syntax zur Erstellung eines SP-GIST Index auf eine "Geometriespalte" lautet:

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

Die obere Syntax erzeugt einen 2D-Index. Ein 3-dimensionaler Index für den geometrischen Datentyp können Sie mit der 3D Operatorklasse erstellen:

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

Die Erstellung eines räumlichen Indizes ist eine rechenintensive Aufgabe. Während der Erstellung wird auch der Schreibzugriff auf die Tabelle blockiert. Bei produktiven Systemen empfiehlt sich daher die langsamere Option CONCURRENTLY:

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

Nachdem ein Index aufgebaut wurde sollte PostgreSQL gezwungen werden die Tabellenstatistik zu sammeln, da diese zur Optmierung der Auswertungspläne verwendet wird:

VACUUM ANALYZE [table_name] [(column_name)];

Ein SP-GiST Index kann Abfragen mit folgenden Operatoren beschleunigen:

  • <<, &<, &>, >>, <<|, &<|, |&>, |>>, &&, @>, <@, and ~=, für 2-dimensionale Iindices,

  • &/&, ~==, @>>, and <<@, für 3-dimensionale Indices.

kNN Suche wird zurzeit nicht unterstützt.

4.9.4. Abstimmung der Indexverwendung

Normalerweise beschleunigen Indizes unsichtbar den Datenzugriff: Sobald ein Index erstellt ist, entscheidet der PostgreSQL-Abfrageplaner automatisch, wann er verwendet wird, um die Abfrageleistung zu verbessern. Es gibt jedoch einige Situationen, in denen der Planer nicht entscheidet, vorhandene Indizes zu verwenden, so dass Abfragen am Ende langsame sequenzielle Scans anstelle eines räumlichen Indexes verwenden.

Wenn Sie feststellen, dass Ihre räumlichen Indizes nicht verwendet werden, können Sie einige Dinge tun:

  • Prüfen Sie den Abfrageplan und stellen Sie sicher, dass Ihre Abfrage tatsächlich das berechnet, was Sie brauchen. Ein fehlerhafter JOIN, der entweder vergessen wurde oder sich auf die falsche Tabelle bezieht, kann unerwartet mehrfach Tabellendatensätze abrufen. Um den Abfrageplan zu erhalten, führen Sie ihn mit EXPLAIN vor der Abfrage aus.

  • Stellen Sie sicher, dass Statistiken über die Anzahl und die Verteilungen der Werte in einer Tabelle gesammelt werden, um dem Abfrageplaner bessere Informationen für Entscheidungen über die Indexnutzung zu liefern. VACUUM ANALYZE berechnet beides.

    Sie sollten Ihre Datenbanken auf jeden Fall regelmäßig leeren. Viele PostgreSQL-DBAs lassen VACUUM regelmäßig als Cron-Job außerhalb der Spitzenzeiten laufen.

  • Wenn das Vakuumieren nicht hilft, können Sie den Planer vorübergehend zwingen, die Indexinformationen zu verwenden, indem Sie den Befehl SET ENABLE_SEQSCAN TO OFF; verwenden. Auf diese Weise können Sie überprüfen, ob der Planer überhaupt in der Lage ist, einen indexbeschleunigten Abfrageplan für Ihre Abfrage zu erstellen. Sie sollten diesen Befehl nur zur Fehlersuche verwenden; im Allgemeinen weiß der Planer besser als Sie, wann Indizes verwendet werden sollten. Nachdem Sie Ihre Abfrage ausgeführt haben, vergessen Sie nicht, SET ENABLE_SEQSCAN TO ON; auszuführen, damit der Planer bei anderen Abfragen normal arbeitet.

  • Wenn SET ENABLE_SEQSCAN TO OFF; Ihre Abfrage schneller laufen lässt, ist Ihr Postgres wahrscheinlich nicht auf Ihre Hardware abgestimmt. Wenn Sie feststellen, dass der Planer die Kosten für sequentielle und Index-Scans falsch einschätzt, versuchen Sie, den Wert von RANDOM_PAGE_COST in postgresql.conf zu reduzieren, oder verwenden Sie SET RANDOM_PAGE_COST TO 1.1;. Der Standardwert für RANDOM_PAGE_COST ist 4.0. Versuchen Sie, ihn auf 1,1 (für SSD) oder 2,0 (für schnelle Magnetplatten) zu setzen. Wenn Sie den Wert verringern, wird der Planer mit größerer Wahrscheinlichkeit Index-Scans verwenden.

  • Wenn SET ENABLE_SEQSCAN TO OFF; Ihrer Abfrage nicht hilft, verwendet die Abfrage möglicherweise ein SQL-Konstrukt, das der Postgres-Planer noch nicht optimieren kann. Es kann möglich sein, die Abfrage so umzuschreiben, dass der Planner sie verarbeiten kann. Zum Beispiel kann eine Subquery mit einem Inline-SELECT keinen effizienten Plan erzeugen, kann aber möglicherweise mit einem LATERAL JOIN umgeschrieben werden.

Weitere Informationen finden Sie im Postgres-Handbuch im Abschnitt Query Planning.

Chapter 5. Räumliche Abfrage

Der Sinn von räumlichen Datenbanken liegt darin Abfragen in der Datenbank ausführen zu können, die normalerweise Desktop-GIS-Funktionionalität verlangen würden. Um PostGIS effektiv verwenden zu können muss man die verfügbaren räumlichen Funktionen kennen, wissen wie sie in Abfragen verwendet werden und sicherstellen, dass für gute Performanz die passenden Indizes vorhanden sind.

5.1. Räumliche Beziehungen feststellen

Räumliche Beziehungen geben an wie zwei Geometrien miteinander interagieren. Sie sind die fundamentale Fähigkeit zum Abfragen von Geometrie.

5.1.1. Dimensionell erweitertes 9-Schnitte-Modell

Laut OpenGIS Simple Features Implementation Specification for SQL besteht der grundlegende Ansatz für den Vergleich zweier Geometrien darin, paarweise Tests der Schnittpunkte zwischen den Innen-, Rand- und Außenbereichen der beiden Geometrien durchzuführen und die Beziehung zwischen den beiden Geometrien auf der Grundlage der Einträge in der resultierenden 'Schnittpunkt'-Matrix zu klassifizieren".

In der Theorie der Punktmengentopologie werden die Punkte in einer Geometrie, die in den 2-dimensionalen Raum eingebettet ist, in drei Gruppen eingeteilt:

Grenze

Die Begrenzung einer Geometrie ist die Menge der Geometrien der nächstniedrigeren Dimension. Für POINTs, die eine Dimension von 0 haben, ist die Begrenzung die leere Menge. Die Begrenzung eines LINESTRING sind die beiden Endpunkte. Für POLYGONs ist die Begrenzung das Liniennetz der äußeren und inneren Ringe.

Innenbereich

Das Innere einer Geometrie sind die Punkte einer Geometrie, die nicht in der Begrenzung liegen. Für POINTs ist das Innere der Punkt selbst. Das Innere eines LINESTRING ist die Menge der Punkte zwischen den Endpunkten. Für POLYGONs ist das Innere die Fläche innerhalb des Polygons.

Äußeres

Das Äußere einer Geometrie ist der Rest des Raums, in den die Geometrie eingebettet ist; mit anderen Worten, alle Punkte, die sich nicht im Inneren oder auf dem Rand der Geometrie befinden. Es handelt sich um eine 2-dimensionale, nicht geschlossene Fläche.

Das Dimensionally Extended 9-Intersection Model (DE-9IM) beschreibt die räumliche Beziehung zwischen zwei Geometrien durch Angabe der Dimensionen der 9 Schnittpunkte zwischen den oben genannten Mengen für jede Geometrie. Die Schnittpunktdimensionen können formal in einer 3x3 Schnittpunktmatrix dargestellt werden.

Für eine Geometrie g werden Interior, Boundary, und Exterior mit den Bezeichnungen I(g), B(g), und E(g) bezeichnet. Außerdem bezeichnet dim(s) die Dimension einer Menge s mit dem Bereich {0,1,2,F}:

  • 0 => Punkt

  • 1 => Zeile

  • 2 => Fläche

  • F => leere Menge

Unter Verwendung dieser Notation lautet die Schnittpunktmatrix für zwei Geometrien a und b:

 InnenbereichGrenzeÄußeres
Innenbereichdim( I(a) ∩ I(b) )dim( I(a) ∩ B(b) )dim( I(a) ∩ E(b) )
Grenzedim( B(a) ∩ I(b) )dim( B(a) ∩ B(b) )dim( B(a) ∩ E(b) )
Äußeresdim( E(a) ∩ I(b) )dim( E(a) ∩ B(b) )dim( E(a) ∩ E(b) )

Für zwei sich überschneidende polygonale Geometrien sieht dies folgendermaßen aus:

 
 InnenbereichGrenzeÄußeres
Innenbereich

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

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

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

Grenze

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

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

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

Äußeres

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

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

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

Von links nach rechts und von oben nach unten gelesen, wird die Kreuzungsmatrix als Textstring '212101212' dargestellt.

Weitere Informationen finden Sie unter:

5.1.2. Benannte räumliche Beziehungen

Um die Bestimmung allgemeiner räumlicher Beziehungen zu erleichtern, definiert das OGC SFS eine Reihe von genannten räumlichen Beziehungsprädikaten. PostGIS stellt diese als die Funktionen ST_Contains, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within zur Verfügung. Es definiert auch die Nicht-Standard-Beziehungsprädikate ST_Covers, ST_CoveredBy und ST_ContainsProperly.

Räumliche Prädikate werden normalerweise als Bedingungen in SQL WHERE oder JOIN Klauseln verwendet. Die benannten räumlichen Prädikate verwenden automatisch einen räumlichen Index, wenn einer vorhanden ist, so dass es nicht notwendig ist, auch den Bounding-Box-Operator && zu verwenden. Zum Beispiel:

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

Weitere Einzelheiten und Abbildungen finden Sie im PostGIS Workshop.

5.1.3. Allgemeine räumliche Beziehungen

In manchen Fällen reichen die genannten räumlichen Beziehungen nicht aus, um die gewünschten räumlichen Filterbedingungen zu schaffen.

Nehmen wir zum Beispiel einen linearen Datensatz, der ein Straßennetz darstellt. Es kann erforderlich sein, alle Straßenabschnitte zu identifizieren, die sich nicht in einem Punkt, sondern in einer Linie kreuzen (vielleicht um eine Geschäftsregel zu validieren). In diesem Fall bietet ST_Crosses nicht den erforderlichen räumlichen Filter, da es für lineare Merkmale true nur dann zurückgibt, wenn sie sich in einem Punkt kreuzen.

Eine zweistufige Lösung würde darin bestehen, zunächst den tatsächlichen Schnittpunkt (ST_Intersection) von Paaren von Straßenlinien zu berechnen, die sich räumlich schneiden (ST_Intersects), und dann zu prüfen, ob der ST_GeometryType des Schnittpunkts 'LINESTRING' ist (wobei Fälle, die GEOMETRYCOLLECTIONs von [MULTI]POINTs, [MULTI]LINESTRINGs usw. zurückgeben, korrekt behandelt werden).

Es ist klar, dass eine einfachere und schnellere Lösung wünschenswert ist.

Ein zweites Beispiel ist das Auffinden von Anlegestellen, die die Grenze eines Sees auf einer Linie schneiden und bei denen ein Ende der Anlegestelle auf dem Ufer liegt. Mit anderen Worten, wenn ein Kai innerhalb eines Sees liegt, aber nicht vollständig von diesem umschlossen ist, die Grenze eines Sees auf einer Linie schneidet und genau einer der Endpunkte des Kais innerhalb oder auf der Grenze des Sees liegt. Es ist möglich, eine Kombination von räumlichen Prädikaten zu verwenden, um die gewünschten Merkmale zu finden:

Diese Anforderungen können erfüllt werden, indem die vollständige DE-9IM-Schnittpunktmatrix berechnet wird. PostGIS bietet hierfür die Funktion ST_Relate:

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

Um eine bestimmte räumliche Beziehung zu testen, wird ein Kreuzungsmatrixmuster verwendet. Dabei handelt es sich um die Matrixdarstellung, die um die zusätzlichen Symbole {T,*} erweitert wurde:

  • T => Schnittmenge ist nicht leer, d. h. sie liegt in {0,1,2}

  • * => ist mir egal

Mit Hilfe von Kreuzungsmatrixmustern können spezifische räumliche Beziehungen auf eine prägnantere Weise bewertet werden. Die Funktionen ST_Relate und ST_RelateMatch können zum Testen von Kreuzungsmatrixmustern verwendet werden. Für das erste obige Beispiel lautet das Schnittmatrixmuster, das zwei Linien angibt, die sich in einer Linie schneiden, '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**');

Für das zweite Beispiel lautet das Schnittmatrixmuster, das eine Linie teilweise innerhalb und teilweise außerhalb eines Polygons angibt, '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. Räumliche Indizes verwenden

Bei der Erstellung von Abfragen mit räumlichen Bedingungen ist es für eine optimale Leistung wichtig, dass ein räumlicher Index verwendet wird, sofern ein solcher existiert (siehe Section 4.9, “Räumliche Indizes”). Zu diesem Zweck muss ein räumlicher Operator oder eine indexfähige Funktion in einer WHERE oder ON Klausel der Abfrage verwendet werden.

Zu den räumlichen Operatoren gehören die Bounding-Box-Operatoren (von denen der am häufigsten verwendete && ist; eine vollständige Liste finden Sie unter Section 7.10.1, “Bounding-Box-Operatoren” ) und die Abstandsoperatoren, die bei Abfragen nach dem nächsten Nachbarn verwendet werden (der am häufigsten verwendete ist <->; eine vollständige Liste finden Sie unter Section 7.10.2, “Operatoren” ).

Indexgestützte Funktionen fügen der räumlichen Bedingung automatisch einen Begrenzungsrahmenoperator hinzu. Zu den indexbasierten Funktionen gehören die benannten räumlichen Beziehungsprädikate ST_Contains, ST_ContainsProperly, ST_CoveredBy, ST_Covers, ST_Crosses, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within, ST_Within und ST_3DIntersects sowie die Entfernungsprädikate ST_DWithin, ST_DFullyWithin, ST_3DDFullyWithin und ST_3DDWithin ).

Funktionen wie ST_Distance und nicht verwenden Indizes, um ihren Betrieb zu optimieren. Die folgende Abfrage wäre zum Beispiel bei einer großen Tabelle ziemlich langsam:

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

Diese Abfrage wählt alle Geometrien in geom_table aus, die innerhalb von 100 Einheiten des Punktes (100000, 200000) liegen. Sie ist langsam, weil sie den Abstand zwischen jedem Punkt in der Tabelle und dem angegebenen Punkt berechnet, d. h. eine ST_Distance() Berechnung wird für jede Zeile in der Tabelle berechnet.

Die Anzahl der zu verarbeitenden Zeilen kann durch die Verwendung der indexbasierten Funktion ST_DWithin erheblich reduziert werden:

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

Diese Abfrage wählt dieselben Geometrien aus, allerdings auf effizientere Weise. Dies wird durch ST_DWithin() ermöglicht, die den && Operator intern auf einem erweiterten Begrenzungsrahmen der Abfragegeometrie verwendet. Wenn es einen räumlichen Index auf geom gibt, erkennt der Abfrageplaner, dass er den Index verwenden kann, um die Anzahl der gescannten Zeilen zu reduzieren, bevor die Entfernung berechnet wird. Der räumliche Index ermöglicht es, nur Datensätze mit Geometrien abzurufen, deren Begrenzungsrahmen die erweiterte Ausdehnung überlappen und die daher innerhalb der erforderlichen Entfernung liegen könnten. Der tatsächliche Abstand wird dann berechnet, um zu bestätigen, ob der Datensatz in die Ergebnismenge aufgenommen werden soll.

Weitere Informationen und Beispiele finden Sie im PostGIS Workshop.

5.3. Beispiele für Spatial SQL

Die Beispiele in diesem Abschnitt verwenden eine Tabelle mit linearen Straßen und eine Tabelle mit polygonalen Gemeindegrenzen. Die Definition der Tabelle bc_roads lautet:

Column    | Type              | Description
----------+-------------------+-------------------
gid       | integer           | Unique ID
name      | character varying | Road Name
geom      | geometry          | Location Geometry (Linestring)

Die Definition der Tabelle bc_municipality lautet:

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.

Wie lang ist die Gesamtlänge aller Straßen, ausgedrückt in Kilometern?

Sie können diese Frage mit einem sehr einfachen SQL-Programm beantworten:

SELECT sum(ST_Length(geom))/1000 AS km_roads FROM bc_roads;

km_roads
------------------
70842.1243039643

5.3.2.

Wie groß ist die Stadt Prince George (in Hektar)?

Diese Abfrage kombiniert eine Attributbedingung (für den Gemeindenamen) mit einer räumlichen Berechnung (der Polygonfläche):

SELECT
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
WHERE name = 'PRINCE GEORGE';

hectares
------------------
32657.9103824927

5.3.3.

Welche ist die flächenmäßig größte Gemeinde der Provinz?

Diese Abfrage verwendet ein räumliches Maß als Ordnungswert. Es gibt mehrere Möglichkeiten, dieses Problem anzugehen, aber die effizienteste ist die folgende:

SELECT
  name,
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
ORDER BY hectares DESC
LIMIT 1;

name           | hectares
---------------+-----------------
TUMBLER RIDGE  | 155020.02556131

Beachten Sie, dass wir zur Beantwortung dieser Abfrage die Fläche jedes Polygons berechnen müssen. Wenn wir dies häufig tun würden, wäre es sinnvoll, der Tabelle eine Flächenspalte hinzuzufügen, die aus Leistungsgründen indiziert werden könnte. Indem wir die Ergebnisse absteigend sortieren und den PostgreSQL-Befehl "LIMIT" verwenden, können wir einfach nur den größten Wert auswählen, ohne eine Aggregatfunktion wie MAX() zu verwenden.

5.3.4.

Wie lang ist die Länge der Straßen, die vollständig in jeder Gemeinde liegen?

Dies ist ein Beispiel für eine "räumliche Verknüpfung", bei der Daten aus zwei Tabellen (mit einer Verknüpfung) unter Verwendung einer räumlichen Interaktion ("enthalten") als Verknüpfungsbedingung zusammengeführt werden (anstelle des üblichen relationalen Ansatzes der Verknüpfung über einen gemeinsamen Schlüssel):

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.47553551242
VANCOUVER                   | 1450.33093486576
LANGLEY DISTRICT            | 833.793392535662
BURNABY                     | 773.769091404338
PRINCE GEORGE               | 694.37554369147
...

Diese Abfrage dauert eine Weile, da jede Straße in der Tabelle im Endergebnis zusammengefasst wird (etwa 250K Straßen für die Beispieltabelle). Bei kleineren Datensätzen (mehrere tausend Datensätze auf mehrere hundert) kann die Antwort sehr schnell sein.

5.3.5.

Erstellen Sie eine neue Tabelle mit allen Straßen innerhalb der Stadt Prince George.

Dies ist ein Beispiel für eine "Überlagerung", die zwei Tabellen aufnimmt und eine neue Tabelle aus räumlich beschnittenen oder geschnittenen Ergebnisgrößen ausgibt. Anders als bei der oben gezeigten "räumlichen Verknüpfung" werden bei dieser Abfrage neue Geometrien erstellt. Ein Overlay ist eine Art "Turbo" für räumliche Verknüpfungen und eignet sich für genauere Analysen:

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.

Wie lang ist die "Douglas St" in Victoria in Kilometern?

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.

Welches ist das größte Gemeindepolygon, das ein Loch hat?

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

6.1. Kleine Tabellen mit großen Geometrien

6.1.1. Problembeschreibung

Aktuelle PostgreSQL Versionen (inklusive 9.6) haben eine Schwäche des Optimizers in Bezug auf TOAST Tabellen. TOAST Tabellen bieten eine Art "Erweiterungsraum", der benutzt wird um große Werte (im Sinne der Datengröße), welche nicht in die üblichen Datenspeicherseiten passen (wie lange Texte, Bilder oder eine komplexe Geometrie mit vielen Stützpunkten) auszulagern, siehe the PostgreSQL Documentation for TOAST für mehr Information).

Das Problem tritt bei Tabellen mit relativ großen Geometrien, aber wenigen Zeilen auf (z.B. eine Tabelle welche die europäischen Ländergrenzen in hoher Auflösung beinhaltet). Dann ist die Tabelle selbst klein, aber sie benützt eine Menge an TOAST Speicherplatz. In unserem Beispiel hat die Tabelle um die 80 Zeilen und nutzt dafür nur 3 Speicherseiten, während die TOAST Tabelle 8225 Speicherseiten benützt.

Stellen Sie sich nun eine Abfrage vor, die den geometrischen Operator && verwendet, um ein Umgebungsrechteck mit nur wenigen Zeilen zu ermitteln. Der Abfrageoptimierer stellt fest, dass die Tabelle nur 3 Speicherseiten und 80 Zeilen aufweist. Er nimmt an, das ein sequentieller Scan bei einer derart kleinen Tabelle wesentlich schneller abläuft als die Verwendung eines Indizes. Und so entscheidet er den GIST Index zu ignorieren. Normalerweise stimmt diese Annahme. Aber in unserem Fall, muss der && Operator die gesamte Geometrie von der Festplatte lesen um den BoundingBox-Vergleich durchführen zu können, wodurch auch alle TOAST-Speicherseiten gelesen werden.

Um zu sehen, ob dieses Problem auftritt, können Sie den "EXPLAIN ANALYZE" Befehl von PostgreSQL anwenden. Mehr Information und die technischen Feinheiten entnehmen Sie bitte dem Thread auf der Postgres Performance Mailing List: http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php

und einem neueren Thread über PostGIS https://lists.osgeo.org/pipermail/postgis-devel/2017-June/026209.html

6.1.2. Umgehungslösung

Die PostgreSQL Entwickler versuchen das Problem zu lösen, indem sie die Abschätzung der Abfragen TOAST-gewahr machen. Zur Überbrückung zwei Workarounds:

Der erste Workaround besteht darin den Query Planer zu zwingen, den Index zu nutzen. Setzen Sie "SET enable_seqscan TO off;" am Server bevor Sie die Abfrage ausführen. Dies zwingt den Query Planer grundsätzlich dazu sequentielle Scans, wann immer möglich, zu vermeiden. Womit der GIST Index wie üblich verwendet wird. Aber dieser Parameter muss bei jeder Verbindung neu gesetzt werden, und er verursacht das der Query Planer Fehleinschätzungen in anderen Fällen macht. Daher sollte "SET enable_seqscan TO on;" nach der Abfrage ausgeführt werden.

Der zweite Workaround besteht darin, den sequentiellen Scan so schnell zu machen wie der Query Planer annimmt. Dies kann durch eine zusätzliche Spalte, welche die BBOX "zwischenspeichert" und über die abgefragt wird, erreicht werden. In Unserem Beispiel sehen die Befehle dazu folgendermaßen aus:

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

Nun ändern Sie bitte Ihre Abfrage so, das der && Operator gegen die bbox anstelle der geom_column benutzt wird:

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

Selbstverständlich muss man die BBOX synchron halten. Die transparenteste Möglichkeit dies zu erreichen wäre über Trigger. Sie können Ihre Anwendung derart abändern, das die BBOX Spalte aktuell bleibt oder ein UPDATE nach jeder Änderung durchführen.

6.2. CLUSTER auf die geometrischen Indizes

Für Tabelle die hauptsächlich read-only sind und bei denen ein einzelner Index für die Mehrheit der Abfragen verwendet wird, bietet PostgreSQL den CLUSTER Befehl. Dieser Befehl ordnet alle Datenzeilen in derselben Reihenfolge an wie die Kriterien bei der Indexerstellung, was zu zwei Performance Vorteilen führt: Erstens wird für die Index Range Scans die Anzahl der Suchabfragen über die Datentabelle stark reduziert. Zweitens, wenn sich der Arbeitsbereich auf einige kleine Intervale des Index beschränkt ist das Caching effektiver, da die Datenzeilen über weniger data pages verteilt sind. (Sie dürfen sich nun eingeladen fühlen, die Dokumentation über den CLUSTER Befehl in der PostgreSQL Hilfe nachzulesen.)

Die aktuelle PostgreSQL Version erlaubt allerdings kein clustern an Hand von PostGIS GIST Indizes, da GIST Indizes NULL Werte einfach ignorieren. Sie erhalten eine Fehlermeldung wie:

lwgeom=# 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.

Wie die HINT Meldung mitteilt, kann man diesen Mangel umgehen indem man eine "NOT NULL" Bedingung auf die Tabelle setzt:

lwgeom=# ALTER TABLE my_table ALTER COLUMN geom SET not null;
ALTER TABLE

Dies funktioniert natürlich nicht, wenn Sie tatsächlich NULL Werte in Ihrer Geometriespalte benötigen. Außerdem müssen Sie die obere Methode zum Hinzufügen der Bedingung verwenden. Die Verwendung einer CHECK Bedingung wie "ALTER TABLE blubb ADD CHECK (geometry is not null);" wird nicht klappen.

6.3. Vermeidung von Dimensionsumrechnungen

Manchmal kann es vorkommen, das Sie 3D- oder 4D-Daten in Ihrer Tabelle haben, aber immer mit den OpenGIS compliant ST_AsText() oder ST_AsBinary() Funktionen, die lediglich 2D Geometrien ausgeben, zugreifen. Dies geschieht indem intern die ST_Force2D() Funktion aufgerufen wird, welche einen wesentlichen Overhead für große Geometrien aufweist. Um diesen Overhead zu vermeiden kann es praktikabel sein diese zusätzlichen Dimensionen ein für alle mal im Voraus zu löschen:

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

Beachten Sie bitte, falls Sie die Geometriespalte über AddGeometryColumn() hinzugefügt haben, das dadurch eine Bedingung auf die Dimension der Geometrie gesetzt ist. Um dies zu Überbrücken löschen Sie die Bedingung. Vergessen Sie bitte nicht den Eintrag in die geometry_columns Tabelle zu erneuern und die Bedingung anschließend erneut zu erzeugen.

Bei großen Tabellen kann es vernünftig sein, diese UPDATE in mehrere kleinere Portionen aufzuteilen, indem man das UPDATE mittels WHERE Klausel und eines Primärschlüssels, oder eines anderen passenden Kriteriums, beschränkt und ein einfaches "VACUUM;" zwischen den UPDATEs aufruft. Dies verringert den Bedarf an temporären Festplattenspeicher drastisch. Außerdem, falls die Datenbank gemischte Dimensionen der Geometrie aufweist, kann eine Einschränkung des UPDATES mittels "WHERE dimension(the_geom)>2" das wiederholte Schreiben von Geometrien, welche bereits in 2D sind, vermeiden.

Chapter 7. Referenz PostGIS

Nachfolgend sind jene Funktionen aufgeführt, die ein PostGIS Anwender am ehesten benötigt. Es gibt weitere Funktionen, die jedoch keinen Nutzen für den allgemeinen Anwender haben, da es sich um Hilfsfunktionen für PostGIS Objekte handelt.

[Note]

PostGIS hat begonnen die bestehende Namenskonvention in eine SQL-MM orientierte Konvention zu ändern. Daher wurden die meisten Funktionen, die Sie kennen und lieben gelernt haben, mit dem Standardpräfix (ST) für spatiale Datentypen umbenannt. Vorhergegangene Funktionen sind noch verfügbar; wenn es aber entsprechende aktualisierte Funktionen gibt, dann werden sie in diesem Dokument nicht mehr aufgeführt. Wenn Funktionen kein ST_ Präfix aufweisen und in dieser Dokumentation nicht mehr angeführt sind, dann gelten sie als überholt und werden in einer zukünftigen Release entfernt. Benutzten Sie diese daher BITTE NICHT MEHR.

7.1. PostgreSQL und PostGIS Datentypen - Geometry/Geography/Box

Abstract

Dieser Abschnitt listet die von PostGIS installierten PostgreSQL-Datentypen auf. Beachten Sie bitte die hier beschriebene Verhaltensweise bei der Typumwandlung. Diese ist insbesondere dann sehr wesentlich, wenn Sie Ihre eigenen Funktionen entwerfen.

Jeder Datentyp beschreibt sein Typ-Casting-Verhalten. Ein Typ-Cast konvertiert Werte eines Datentyps in einen anderen Typ. PostgreSQL erlaubt es, das Casting-Verhalten für benutzerdefinierte Typen zu definieren, zusammen mit den Funktionen, die zur Konvertierung von Typwerten verwendet werden. Casts können ein automatisches Verhalten haben, das eine automatische Konvertierung eines Funktionsarguments in einen von der Funktion unterstützten Typ erlaubt.

Einige Casts haben explizites Verhalten, d.h. der Cast muss mit der Syntax CAST(myval As sometype) oder myval::sometype angegeben werden. Durch explizites Casting wird das Problem mehrdeutiger Casts vermieden, das auftreten kann, wenn eine überladene Funktion verwendet wird, die einen bestimmten Typ nicht unterstützt. Zum Beispiel kann eine Funktion ein box2d oder ein box3d akzeptieren, aber keine Geometrie. Da geometry automatisch auf beide Box-Typen gecastet wird, führt dies zu einem "ambiguous function"-Fehler. Um diesen Fehler zu vermeiden, muss ein expliziter Cast auf den gewünschten Box-Typ durchgeführt werden.

Alle Datentypen können in text umgewandelt werden, so dass dies nicht explizit angegeben werden muss.

  • box2d — Der Typ, der einen 2-dimensionalen Begrenzungsrahmen darstellt.
  • box3d — Der Typ, der einen 3-dimensionalen Begrenzungsrahmen darstellt.
  • geometry — Der geographische Datentyp "Geography" wird zur Abbildung eines Geoobjektes im geographischen Kugelkoordinatensystem verwendet.
  • geometry_dump — Ein zusammengesetzter Typ, der zur Beschreibung der Teile einer komplexen Geometrie verwendet wird.
  • geography — Der Typ, der räumliche Merkmale mit geodätischen (ellipsoidischen) Koordinatensystemen darstellt.

Name

box2d — Der Typ, der einen 2-dimensionalen Begrenzungsrahmen darstellt.

Beschreibung

Box3D ist ein geometrischer Datentyp, der den umschreibenden Quader einer oder mehrerer geometrischer Objekte abbildet. ST_3DExtent gibt ein Box3D-Objekt zurück.

Die Darstellung enthält die Werte xmin, ymin, xmax, ymax. Dies sind die Mindest- und Höchstwerte der X- und Y-Ausdehnung.

box2d Objekte haben eine Textdarstellung, die wie folgt aussieht BOX(1 2,5 6).

Verhaltensweise bei der Typumwandlung

Dieser Abschnitt beschreibt sowohl die automatischen, als auch die expliziten Typumwandlungen, die für diesen Datentyp erlaubt sind.

Typumwandlung nachVerhaltensweise
box3dimplizit
geometryimplizit

Name

box3d — Der Typ, der einen 3-dimensionalen Begrenzungsrahmen darstellt.

Beschreibung

Box3D ist ein geometrischer Datentyp, der den umschreibenden Quader einer oder mehrerer geometrischer Objekte abbildet. ST_3DExtent gibt ein Box3D-Objekt zurück.

Die Darstellung enthält die Werte xmin, ymin, zmin, xmax, ymax, zmax. Dies sind die Minimal- und Maximalwerte der X-, Y- und Z-Ausdehnung.

box3d Objekte haben eine Textdarstellung, die wie folgt aussieht BOX3D(1 2 3,5 6 5).

Verhaltensweise bei der Typumwandlung

Dieser Abschnitt beschreibt sowohl die automatischen, als auch die expliziten Typumwandlungen, die für diesen Datentyp erlaubt sind.

Typumwandlung nachVerhaltensweise
boximplizit
box2dimplizit
geometryimplizit

Name

geometry — Der geographische Datentyp "Geography" wird zur Abbildung eines Geoobjektes im geographischen Kugelkoordinatensystem verwendet.

Beschreibung

Der Datentyp "geometry" ist der elementare räumliche Datentyp von PostGIS zur Abbildung eines Geoobjektes in das kartesische Koordinatensystem.

Alle räumlichen Operationen an einer Geometrie verwenden die Einheiten des Koordinatenreferenzsystems in dem die Geometrie vorliegt.

Verhaltensweise bei der Typumwandlung

Dieser Abschnitt beschreibt sowohl die automatischen, als auch die expliziten Typumwandlungen, die für diesen Datentyp erlaubt sind.

Typumwandlung nachVerhaltensweise
boximplizit
box2dimplizit
box3dimplizit
Byteaimplizit
geographyimplizit
Textimplizit

Name

geometry_dump — Ein zusammengesetzter Typ, der zur Beschreibung der Teile einer komplexen Geometrie verwendet wird.

Beschreibung

geometry_dump ist ein zusammengesetzter Datentyp, der die Felder enthält:

  • geom - eine Geometrie, die eine Komponente der ausgelagerten Geometrie darstellt. Der Geometrietyp hängt von der Ursprungsfunktion ab.

  • path[] - ein ganzzahliges Array, das den Navigationspfad innerhalb der ausgelagerten Geometrie zur Komponente geom definiert. Das Pfad-Array ist 1-basiert (d.h. path[1] ist das erste Element).

Er wird von der Funktionsfamilie ST_Dump* als Ausgabetyp verwendet, um eine komplexe Geometrie in ihre Bestandteile zu zerlegen.


Name

geography — Der Typ, der räumliche Merkmale mit geodätischen (ellipsoidischen) Koordinatensystemen darstellt.

Beschreibung

Der geographische Datentyp "Geography" wird zur Abbildung eines Geoobjektes im geographischen Kugelkoordinatensystem verwendet.

Räumliche Operationen am Geographietyp liefern genauere Ergebnisse, da das Ellipsoidmodell berücksichtigt wird.

Verhaltensweise bei der Typumwandlung

Dieser Abschnitt beschreibt sowohl die automatischen, als auch die expliziten Typumwandlungen, die für diesen Datentyp erlaubt sind.

Typumwandlung nachVerhaltensweise
geometryexplizit

7.2. Geometrische Managementfunktionen

Abstract

Diese Funktionen helfen bei der Definition von Tabellen mit Geometriespalten.

  • AddGeometryColumn — Entfernt eine Geometriespalte aus einer räumlichen Tabelle.
  • DropGeometryColumn — Entfernt eine Geometriespalte aus einer räumlichen Tabelle.
  • DropGeometryTable — Löscht eine Tabelle und alle Referenzen in dem geometry_columns View.
  • Find_SRID — Gibt die für eine Geometriespalte definierte SRID zurück.
  • Populate_Geometry_Columns — Stellt sicher, dass Geometriespalten mit Typmodifikatoren definiert sind oder geeignete räumliche Beschränkungen haben.
  • UpdateGeometrySRID — Aktualisiert die SRID aller Features in einer Geometriespalte und die Metadaten der Tabelle.

Name

AddGeometryColumn — Entfernt eine Geometriespalte aus einer räumlichen Tabelle.

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

Beschreibung

Fügt eine Geometriespalte zu den Attributen einer bestehende Tabelle hinzu. Der schema_name ist der Name des Schemas, in dem sich die Tabelle befindet. Bei der srid handelt es sich um eine Ganzzahl, welche auf einen entsprechenden Eintrag in der SPATIAL_REF_SYS Tabelle verweist. Beim type handelt es sich um eine Zeichenkette, welche dem Geometrietyp entsprechen muss, z.B.: 'POLYGON' oder 'MULTILINESTRING'. Falls der Name des Schemas nicht existiert (oder im aktuellen search_path nicht sichtbar ist), oder die angegebene SRID, der Geometrietyp, oder die Dimension ungültig sind, wird ein Fehler angezeigt.

[Note]

Änderung: 2.0.0 Diese Funktion aktualisiert die geometry_columns Tabelle nicht mehr, da geometry_columns jetzt ein View ist, welcher den Systemkatalog ausliest. Standardmäßig werden auch keine Bedingungen/constraints erzeugt, sondern es wird der in PostgreSQL integrierte Typmodifikaor verwendet. So entspricht zum Beispiel die Erzeugung einer wgs84 POINT Spalte mit dieser Funktion: ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);

Änderung: 2.0.0 Falls Sie das alte Verhalten mit Constraints wünschen, setzen Sie bitte use_typmod vom standardmäßigen true auf false.

[Note]

Änderung: 2.0.0 Views können nicht mehr händisch in "geometry_columns" registriert werden. Views auf eine Geometrie in Typmod-Tabellen, bei denen keine Adapterfunktion verwendet wird, registrieren sich selbst auf korrekte Weise, da sie die Typmod-Verhaltensweise von der Spalte der Stammtabelle erben. Views die ein geometrische Funktion ausführen die eine andere Geometrie ausgibt, benötigen die Umwandlung in eine Typmod-Geometrie, damit die Geometrie des Views korrekt in "geometry_columns" registriert wird. Siehe Section 4.6.3, “Manuelles Registrieren von Geometriespalten”.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Verbesserung: 2.0.0 use_typmod Argument eingeführt. Standardmäßig wird eine typmod Geometrie anstelle einer Constraint-basierten Geometrie erzeugt.

Beispiele

-- Create schema to hold data
CREATE SCHEMA my_schema;
-- Create a new simple PostgreSQL table
CREATE TABLE my_schema.my_spatial_table (id serial);

-- Describing the table shows a simple table with a single "id" column.
postgis=# \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 using the old constraint based behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false);

--Add a curvepolygon using old constraint behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false);

-- Describe the table again reveals the addition of a new geometry columns.
\d my_schema.my_spatial_table
                            addgeometrycolumn
-------------------------------------------------------------------------
 my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2
(1 row)

                                    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)

-- 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 — Entfernt eine Geometriespalte aus einer räumlichen Tabelle.

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

Beschreibung

Entfernt eine geometrische Spalte aus der Geometrietabelle. Der "schema_name" muss mit dem Feld "f_table_schema" in der Tabelle "geometry_columns" übereinstimmen.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

[Note]

Änderung: 2.0.0 Diese Funktion wurde zwecks Abwärtskompatibilität eingeführt. Seit geometry_columns ein View auf den Systemkatalog ist, können Sie die Geometriespalte, so wie jede andere Tabellenspalte, mit ALTER TABLE löschen.

Beispiele

SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');
                        ----RESULT output ---
                                          dropgeometrycolumn
------------------------------------------------------
 my_schema.my_spatial_table.geom effectively removed.

-- In PostGIS 2.0+ the above is also equivalent to the standard
-- the standard alter table.  Both will deregister from geometry_columns
ALTER TABLE my_schema.my_spatial_table DROP column geom;
                

Name

DropGeometryTable — Löscht eine Tabelle und alle Referenzen in dem geometry_columns View.

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

Beschreibung

Löscht eine Tabelle und deren Verweise in "geometry_columns". Anmerkung: verwendet current_schema() wenn kein Schema angegeben wird, eine Schema erkennende pgsql Installation vorausgesetzt.

[Note]

Änderung: 2.0.0 Diese Funktion wurde zwecks Abwärtskompatibilität eingeführt. Seit geometry_columns ein View auf den Systemkatalog ist, können Sie eine Tabelle mit einer Geometriespalte, so wie jede andere Tabelle, mit DROP TABLE löschen.

Beispiele

SELECT DropGeometryTable ('my_schema','my_spatial_table');
----RESULT output ---
my_schema.my_spatial_table dropped.

-- The above is now equivalent to --
DROP TABLE my_schema.my_spatial_table;
                

Name

Find_SRID — Gibt die für eine Geometriespalte definierte SRID zurück.

Synopsis

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

Beschreibung

Liefert die Integer-SRID der angegebenen Geometriespalte durch Suche in der Tabelle GEOMETRY_COLUMNS. Wenn die Geometriespalte nicht ordnungsgemäß hinzugefügt wurde (z. B. mit der Funktion AddGeometryColumn ), funktioniert diese Funktion nicht.

Beispiele

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

Siehe auch

ST_SRID


Name

Populate_Geometry_Columns — Stellt sicher, dass Geometriespalten mit Typmodifikatoren definiert sind oder geeignete räumliche Beschränkungen haben.

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

Beschreibung

Sorgt dafür, dass die Geometriespalten mit Typmodifikatoren oder mit passenden räumlichen Constraints versehen sind. Dadurch wird die korrekte Registrierung im View geometry_columns sichergestellt. Standardmäßig werden alle Geometriespalten, die keinen Typmodifikator aufweisen, mit Typmodifikatoren versehen. Für die alte Verhaltensweise setzen Sie bitte use_typmod=false

Aus Gründen der Abwärtskompatibilität und für räumliche Anwendungen, wie eine Tabellenvererbung bei denen jede Kindtabelle einen anderen geometrischen Datentyp aufweist, wird die alte Verhaltensweise mit Check-Constraints weiter unterstützt. Wenn Sie diese alte Verhaltensweise benötigen, können Sie den neuen Übergabewert auf FALSE setzen - use_typmod=false. Wenn Sie dies tun, so werden die Geometriespalten anstelle von Typmodifikatoren mit 3 Constraints erstellt. Insbesondere bedeutet dies, dass jede Geometriespalte, die zu einer Tabelle gehört, mindestens drei Constraints aufweist:

  • enforce_dims_the_geom - stellt sicher, dass jede Geometrie dieselbe Dimension hat (siehe ST_NDims)

  • enforce_geotype_the_geom - stellt sicher, dass jede Geometrie vom selben Datentyp ist (siehe GeometryType)

  • enforce_srid_the_geom - stellt sicher, dass jede Geometrie die selbe Projektion hat (siehe ST_SRID)

Wenn die oid einer Tabelle übergeben wird, so versucht diese Funktion, die SRID, die Dimension und den Datentyp der Geometrie in der Tabelle zu bestimmen und fügt, falls notwendig, Constraints hinzu. Bei Erfolg wird eine entsprechende Spalte in die Tabelle "geometry_columns" eingefügt, andernfalls wird der Fehler abgefangen und eine Fehlermeldung ausgegeben, die das Problem beschreibt.

Wenn die oid eines Views übergeben wird, so versucht diese Funktion, die SRID, die Dimension und den Datentyp der Geometrie in dem View zu bestimmen und die entsprechenden Einträge in die Tabelle geometry_columns vorzunehmen. Constraints werden allerdings nicht erzwungen.

Die parameterlose Variante ist ein einfacher Adapter für die parametrisierte Variante, welche die Tabelle "geometry_columns" zuerst entleert und dann für jede räumliche Tabelle oder View in der Datenbank wiederbefüllt. Wo es passend ist, werden räumliche Constraints auf die Tabellen gelegt. Es wird die Anzahl der in der Datenbank gefundenen Geometriespalten und die Anzahl der in die Tabelle geometry_columns eingefügten Zeilen ausgegeben. Die parametrisierte Version gibt lediglich die Anzahl der Zeilen aus, die in die Tabelle geometry_columns eingefügt wurden.

Verfügbarkeit: 1.4.0

Änderung: 2.0.0 Standardmäßig werden nun Typmodifikatoren anstelle von Check-Constraints für die Beschränkung des Geometrietyps verwendet. Sie können nach wie vor stattdessen die Verhaltensweise mit Check-Constraints verwenden, indem Sie die neu eingeführte Variable use_typmod auf FALSE setzen.

Erweiterung: 2.0.0 Der optionale Übergabewert use_typmod wurde eingeführt, um bestimmen zu können, ob die Spalten mit Typmodifikatoren oder mit Check-Constraints erstellt werden sollen.

Beispiele

CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
-- This will now use typ modifiers.  For this to work, there must exist data
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);

populate_geometry_columns
--------------------------
                        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 will change the geometry columns to use constraints if they are not typmod or have constraints already.
--For this to work, there must exist 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);
populate_geometry_columns
--------------------------
                        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 — Aktualisiert die SRID aller Features in einer Geometriespalte und die Metadaten der Tabelle.

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

Beschreibung

Erneuert die SRID aller Features in einer Geometriespalte; erneuert die Constraints und die Referenz in "geometry_columns". Anmerkung: verwendet current_schema() wenn kein Schema angegeben wird, eine Schema erkennende pgsql Installation vorausgesetzt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

Einfügen von Geometrien in eine Straßentabelle mit einem SRID-Satz, der bereits das EWKT-Format verwendet:

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

Ändert die SRID der Straßentabelle auf 4326

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

Das vorhergegangene Beispiel ist gleichbedeutend mit diesr DDL Anweisung

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

Falls Sie sich in der Projektion geirrt haben (oder sie als "unknown" importiert haben) und sie in einem Aufwaschen in die Web Mercator Projektion transformieren wollen, so können Sie dies mit DDL bewerkstelligen. Es gibt jedoch keine äquivalente PostGIS Managementfunktion, die dies in einem Schritt bewerkstelligen könnte.

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

7.3. Geometrische Konstruktoren

  • ST_Collect — Erzeugt eine GeometryCollection oder Multi*-Geometrie aus einer Reihe von Geometrien.
  • ST_LineFromMultiPoint — Erzeugt einen LineString aus einer MultiPoint Geometrie.
  • ST_MakeEnvelope — Erzeugt ein rechteckiges Polygon aus den gegebenen Minimum- und Maximumwerten. Die Eingabewerte müssen in dem Koordinatenreferenzsystem sein, welches durch die SRID angegeben wird.
  • ST_MakeLine — Erzeugt einen Linienzug aus einer Punkt-, Mehrfachpunkt- oder Liniengeometrie.
  • ST_MakePoint — Erzeugt eine 2D-, 3DZ- oder 4D-Punktgeometrie.
  • ST_MakePointM — Erzeugt einen Punkt mit x, y und measure/Kilometrierungs Koordinaten.
  • ST_MakePolygon — Erzeugt ein Polygon aus einer Schale und einer optionalen Liste von Löchern.
  • ST_Point — Erzeugt einen Punkt mit X-, Y- und SRID-Werten.
  • ST_PointZ — Erzeugt einen Punkt mit X-, Y-, Z- und SRID-Werten.
  • ST_PointM — Erzeugt einen Punkt mit den Werten X, Y, M und SRID.
  • ST_PointZM — Erzeugt einen Punkt mit den Werten X, Y, Z, M und SRID.
  • ST_Polygon — Erzeugt ein Polygon aus einem LineString mit einem angegebenen SRID.
  • ST_TileEnvelope — Erzeugt ein rechteckiges Polygon in Web Mercator (SRID:3857) unter Verwendung des XYZ-Kachelsystems.
  • ST_HexagonGrid — Gibt eine Menge von Sechsecken und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.
  • ST_Hexagon — Liefert ein einzelnes Sechseck unter Verwendung der angegebenen Kantengröße und Zellkoordinate innerhalb des Sechseck-Gitterraums.
  • ST_SquareGrid — Gibt eine Menge von Gitterquadraten und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.
  • ST_Square — Gibt ein einzelnes Quadrat mit der angegebenen Kantengröße und Zellkoordinate innerhalb des quadratischen Gitterraums zurück.
  • ST_Letters — Gibt die eingegebenen Buchstaben als Geometrie mit einer Standardstartposition am Ursprung und einer Standardtexthöhe von 100 zurück.

Name

ST_Collect — Erzeugt eine GeometryCollection oder Multi*-Geometrie aus einer Reihe von Geometrien.

Synopsis

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

geometry ST_Collect(geometry set g1field);

Beschreibung

Sammelt Geometrien in einer Geometriesammlung. Das Ergebnis ist entweder ein Multi* oder eine GeometryCollection, je nachdem, ob die Eingabegeometrien denselben oder einen unterschiedlichen Typ haben (homogen oder heterogen). Die Eingangsgeometrien bleiben in der Sammlung unverändert.

Variante 1: akzeptiert zwei Eingabegeometrien

Variante 2: akzeptiert eine Reihe von Geometrien

Variante 3: Aggregatfunktion, die ein Rowset von Geometrien akzeptiert.

[Note]

Handelt es sich bei einer der Eingabegeometrien um Sammlungen (Multi* oder GeometryCollection), gibt ST_Collect eine GeometryCollection zurück (da dies der einzige Typ ist, der verschachtelte Sammlungen enthalten kann). Um dies zu verhindern, verwenden Sie ST_Dump in einer Unterabfrage, um die Eingabekollektionen in ihre atomaren Elemente zu zerlegen (siehe Beispiel unten).

[Note]

ST_Collect und ST_Union scheinen ähnlich zu sein, funktionieren aber in Wirklichkeit ganz anders. ST_Collect fasst Geometrien in einer Sammlung zusammen, ohne sie in irgendeiner Weise zu verändern. ST_Union führt Geometrien dort zusammen, wo sie sich überschneiden, und teilt Linienstränge an Schnittpunkten. Es kann einzelne Geometrien zurückgeben, wenn es Grenzen auflöst.

Verfügbarkeit: 1.4.0 - ST_MakeLine(geomarray) wurde eingeführt. ST_MakeLine Aggregatfunktion wurde verbessert, um mehr Punkte schneller handhaben zu können.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele - Verwendung von XLink

Sammeln Sie 2D-Punkte.

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

st_astext
----------
MULTIPOINT((1 2),(-2 3))

Sammeln Sie 3D-Punkte.

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

                st_asewkt
-------------------------
 MULTIPOINT(1 2 3,1 2 4)
 

Kurven sammeln.

SELECT ST_AsText( ST_Collect( 'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)',
                'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));

                st_astext
------------------------------------------------------------------------------------
MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
 CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))

Beispiele: Verwendung der Feld-Version

Verwendung eines Array-Konstruktors für eine Subquery.

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

Verwendung eines Array-Konstruktors für Werte.

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

--wkt collect --
MULTILINESTRING((1 2,3 4),(3 4,4 5))

Beispiele: Spatiale Aggregatversion

Erstellen mehrerer Sammlungen durch Gruppierung von Geometrien in einer Tabelle.

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

Siehe auch

ST_Dump, ST_AsBinary


Name

ST_LineFromMultiPoint — Erzeugt einen LineString aus einer MultiPoint Geometrie.

Synopsis

geometry ST_LineFromMultiPoint(geometry aMultiPoint);

Beschreibung

Erzeugt einen LineString aus einer MultiPoint Geometrie.

Für Punkt mit X-, Y- und M-Koordinaten verwenden Sie bitte ST_MakePointM .

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Erzeugt einen LineString aus einer MultiPoint Geometrie.

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

--result--
LINESTRING(1 2 3,4 5 6,7 8 9)

Siehe auch

ST_AsEWKT, ST_AsKML


Name

ST_MakeEnvelope — Erzeugt ein rechteckiges Polygon aus den gegebenen Minimum- und Maximumwerten. Die Eingabewerte müssen in dem Koordinatenreferenzsystem sein, welches durch die SRID angegeben wird.

Synopsis

geometry ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax, integer srid=unknown);

Beschreibung

Erzeugt ein rechteckiges Polygon das durch die Minima und Maxima angegeben wird. durch die gegebene Hülle. Die Eingabewerte müssen in dem Koordinatenreferenzsystem sein, welches durch die SRID angegeben wird. Wenn keine SRID angegeben ist, so wird das Koordinatenreferenzsystem "unknown" angenommen

Verfügbarkeit: 1.5

Erweiterung: 2.0: es wurde die Möglichkeit eingeführt, eine Einhüllende/Envelope festzulegen, ohne dass die SRID spezifiziert ist.

Beispiel: Ein Umgebungsrechteck Polygon erzeugen

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

st_asewkt
-----------
POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))

Name

ST_MakeLine — Erzeugt einen Linienzug aus einer Punkt-, Mehrfachpunkt- oder Liniengeometrie.

Synopsis

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

Beschreibung

Erzeugt einen LineString, der die Punkte von Point-, MultiPoint- oder LineString-Geometrien enthält. Andere Geometrietypen verursachen einen Fehler.

Variante 1: akzeptiert zwei Eingabegeometrien

Variante 2: akzeptiert eine Reihe von Geometrien

Variante 3: Aggregatfunktion, die ein Rowset von Geometrien akzeptiert. Um die Reihenfolge der Eingabegeometrien sicherzustellen, verwenden Sie ORDER BY im Funktionsaufruf oder eine Unterabfrage mit einer ORDER BY Klausel.

Wiederholte Knoten am Anfang von Eingabe-LineStrings werden zu einem einzigen Punkt zusammengezogen. Wiederholte Punkte in Punkt- und Multipunkt-Eingaben werden nicht zusammengeklappt. ST_RemoveRepeatedPoints kann verwendet werden, um wiederholte Punkte aus dem Ausgabe-LineString zu klappen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung zur Eingabe von MultiPoint Elementen eingeführt

Verfügbarkeit: 2.0.0 - Unterstützung zur Eingabe von LineString Elementen eingeführt

Verfügbarkeit: 1.4.0 - ST_MakeLine(geomarray) wurde eingeführt. ST_MakeLine Aggregatfunktion wurde verbessert, um mehr Punkte schneller handhaben zu können.

Beispiele: Verwendung der Feld-Version

Erstellen Sie eine Linie, die aus zwei Punkten besteht.

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

          st_astext
---------------------
 LINESTRING(1 2,3 4)

Erzeugt eine BOX3D, die durch 2 geometrische 3D-Punkte definiert wird.

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

                st_asewkt
-------------------------
 LINESTRING(1 2 3,3 4 5)

Erzeugt einen Linienzug aus einer Punkt-, Mehrfachpunkt- oder Liniengeometrie.

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

          st_astext
-----------------------------
 LINESTRING(0 0,1 1,2 2,3 3)

Beispiele: Verwendung der Feld-Version

Erstellen Sie eine Zeile aus einem Array, das durch eine Unterabfrage mit Bestellung gebildet wird.

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

Erstellen einer 3D-Linie aus einem Array von 3D-Punkten

SELECT ST_AsEWKT( ST_MakeLine(
          ARRAY[ ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ]  ));

                st_asewkt
-------------------------
LINESTRING(1 2 3,3 4 5,6 6 6)

Beispiele: Spatiale Aggregatversion

Diese Beispiel nimmt eine Abfolge von GPS Punkten entgegen und erzeugt einen Datensatz für jeden GPS Pfad, wobei das Geometriefeld ein Linienzug ist, welcher in der Reihenfolge der Aufnahmeroute aus den GPS Punkten zusammengesetzt wird.

Die Verwendung des Aggregats ORDER BY liefert einen korrekt geordneten LineString.

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

Vor PostgreSQL 9 kann die Reihenfolge in einer Subquery verwendet werden. Allerdings kann es vorkommen, dass der Abfrageplan die Reihenfolge der Unterabfrage nicht berücksichtigt.

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 — Erzeugt eine 2D-, 3DZ- oder 4D-Punktgeometrie.

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

Beschreibung

Erzeugt eine 2D XY, 3D XYZ oder 4D XYZM Punktgeometrie. Verwenden Sie ST_MakePointM, um Punkte mit XYM-Koordinaten zu erstellen.

Verwenden Sie ST_SetSRID, um eine SRID für den erstellten Punkt anzugeben.

Erzeugt eine 2D-, 3DZ- oder 4D-Punktgeometrie (Geometrie mit Kilometrierung). ST_MakePoint ist zwar nicht OGC-konform, ist aber im Allgemeinen schneller und genauer als ST_GeomFromText oderST_PointFromText und auch leichter anzuwenden wenn Sie mit rohen Koordinaten anstatt mit WKT arbeiten.

[Note]

Bei geodätischen Koordinaten ist X der Längengrad und Y der Breitengrad.

[Note]

Die Funktionen ST_Point, ST_PointZ, ST_PointM und ST_PointZM können verwendet werden, um Punkte mit einer bestimmten SRID zu erstellen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

-- Create a point with unknown SRID
SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);

-- Create a point in the WGS 84 geodetic CRS
SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);

-- Create a 3D point (e.g. has altitude)
SELECT ST_MakePoint(1, 2,1.5);

-- Get z of point
SELECT ST_Z(ST_MakePoint(1, 2,1.5));
result
-------
1.5

Name

ST_MakePointM — Erzeugt einen Punkt mit x, y und measure/Kilometrierungs Koordinaten.

Synopsis

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

Beschreibung

Erstellt einen Punkt mit X-, Y- und M-Koordinaten (Maß). Verwenden Sie ST_MakePoint, um Punkte mit XY-, XYZ- oder XYZM-Koordinaten zu erstellen.

Verwenden Sie ST_SetSRID, um eine SRID für den erstellten Punkt anzugeben.

[Note]

Bei geodätischen Koordinaten ist X der Längengrad und Y der Breitengrad.

[Note]

Die Funktionen ST_PointM und ST_PointZM können verwendet werden, um Punkte mit einem M-Wert und einem bestimmten SRID zu erstellen.

Beispiele

[Note]

ST_AsEWKT wird für die Textausgabe verwendet, da ST_AsText keine M-Werte unterstützt.

Punkt mit unbekanntem SRID erstellen.

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

                                   st_asewkt
-----------------------------------------------
 POINTM(-71.1043443253471 42.3150676015829 10)

Erzeugt einen Punkt mit x, y und measure/Kilometrierungs Koordinaten.

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

                                                st_asewkt
---------------------------------------------------------
SRID=4326;POINTM(-71.104 42.315 10)

Ermittelt das Maß des erstellten Punktes.

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

result
-------
10

Name

ST_MakePolygon — Erzeugt ein Polygon aus einer Schale und einer optionalen Liste von Löchern.

Synopsis

geometry ST_MakePolygon(geometry linestring);

geometry ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);

Beschreibung

Erzeugt ein Polygon, das durch die gegebene Hülle gebildet wird. Die Eingabegeometrie muss aus geschlossenen Linienzügen bestehen.

Variante 1: Akzeptiert eine Shell LineString.

Variante 2: Akzeptiert einen Shell LineString und ein Array von inneren (Loch) LineStrings. Ein Geometrie-Array kann mit den PostgreSQL-Konstrukten array_agg(), ARRAY[] oder ARRAY() erstellt werden.

[Note]

Diese Funktion akzeptiert keine MULTILINESTRINGs. Verwenden Sie bitte ST_LineMerge oder ST_Dump um Linienzüge zu erzeugen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele: Verwendung der Feld-Version

Erzeugt einen LineString aus einem codierten Linienzug.

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

Erstellen Sie ein Polygon aus einem offenen LineString, indem Sie ST_StartPoint und ST_AddPoint verwenden, um es zu schließen.

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;

Erzeugt einen LineString aus einem codierten Linienzug.

SELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'));

st_asewkt
-----------
POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))

Erstellen eines Polygons aus einem LineString mit Maßen

SELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)' ));

st_asewkt
----------
POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))

Beispiele: Außenhülle mit inneren Ringen

Erzeugung eines Donuts mit einem Ameisenloch

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;

Erstellen Sie einen Satz von Provinzgrenzen mit Löchern, die Seen darstellen. Die Eingabe ist eine Tabelle mit Provinz-Polygonen/MultiPolygonen und eine Tabelle mit Wasserlinien. Die Linien, die Seen bilden, werden mit ST_IsClosed ermittelt. Das Provinzlinienwerk wird mit ST_Boundary extrahiert. Wie von ST_MakePolygon gefordert, wird die Begrenzung mit ST_LineMerge zu einem einzigen LineString gezwungen. (Beachten Sie jedoch, dass dies ein ungültiges Polygon ergibt, wenn eine Provinz mehr als eine Region oder Inseln hat). Die Verwendung eines LEFT JOIN stellt sicher, dass alle Provinzen einbezogen werden, auch wenn sie keine Seen haben.

[Note]

Das Konstrukt mit CASE wird verwendet, da die Übergabe eines NULL-Feldes an ST_MakePolygon NULL ergibt.

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;

Eine andere Technik besteht darin, eine korrelierte Unterabfrage und den ARRAY()-Konstruktor zu verwenden, der einen Zeilensatz in ein Array umwandelt.

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;

Name

ST_Point — Erzeugt einen Punkt mit X-, Y- und SRID-Werten.

Synopsis

geometry ST_Point(float x, float y);

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

Beschreibung

Gibt einen Punkt mit den angegebenen X- und Y-Koordinatenwerten zurück. Dies ist das SQL-MM-Äquivalent für ST_MakePoint, das nur X und Y benötigt.

[Note]

Bei geodätischen Koordinaten ist X der Längengrad und Y der Breitengrad.

Verbessert: 3.2.0 srid wurde als zusätzliches optionales Argument hinzugefügt. Ältere Installationen erfordern die Kombination mit ST_SetSRID, um das Raster auf der Geometrie zu markieren.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 6.1.2

Beispiele: Geometrie

SELECT ST_Point( -71.104, 42.315);

Erstellen eines Punktes mit angegebener SRID:

SELECT ST_Point( -71.104, 42.315, 4326);

Alternative Möglichkeit der Angabe von SRID:

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

Beispiele: Geographie

Erstellen Sie die Punkte geography mit der Syntax :: cast:

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

Pre-PostGIS 3.2 Code, mit CAST:

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

Wenn die Punktkoordinaten nicht in einem geodätischen Koordinatensystem (z. B. WGS84) vorliegen, müssen sie vor der Übertragung in eine Geografie neu projiziert werden. In diesem Beispiel wird ein Punkt in Pennsylvania State Plane feet (SRID 2273) auf WGS84 (SRID 4326) projiziert.

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

Name

ST_PointZ — Erzeugt einen Punkt mit X-, Y-, Z- und SRID-Werten.

Synopsis

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

Beschreibung

Gibt einen ST_Point mit den gegebenen Koordinatenwerten aus. Ein OGC-Alias für ST_MakePoint.

Verbessert: 3.2.0 srid wurde als zusätzliches optionales Argument hinzugefügt. Ältere Installationen erfordern die Kombination mit ST_SetSRID, um das Raster auf der Geometrie zu markieren.

Beispiele

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 — Erzeugt einen Punkt mit den Werten X, Y, M und SRID.

Synopsis

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

Beschreibung

Gibt einen ST_Point mit den gegebenen Koordinatenwerten aus. Ein OGC-Alias für ST_MakePoint.

Verbessert: 3.2.0 srid wurde als zusätzliches optionales Argument hinzugefügt. Ältere Installationen erfordern die Kombination mit ST_SetSRID, um das Raster auf der Geometrie zu markieren.

Beispiele

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 — Erzeugt einen Punkt mit den Werten X, Y, Z, M und SRID.

Synopsis

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

Beschreibung

Gibt einen ST_Point mit den gegebenen Koordinatenwerten aus. Ein OGC-Alias für ST_MakePoint.

Verbessert: 3.2.0 srid wurde als zusätzliches optionales Argument hinzugefügt. Ältere Installationen erfordern die Kombination mit ST_SetSRID, um das Raster auf der Geometrie zu markieren.

Beispiele

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 — Erzeugt ein Polygon aus einem LineString mit einem angegebenen SRID.

Synopsis

geometry ST_Polygon(geometry lineString, integer srid);

Beschreibung

Gibt ein Polygon aus dem angegebenen LineString zurück und setzt das räumliche Bezugssystem aus dem srid.

ST_Polygon ist ähnlich wie ST_MakePolygon Variante 1 mit dem Zusatz, dass der SRID gesetzt wird.

, ST_MakePoint, ST_SetSRID

[Note]

Diese Funktion akzeptiert keine MULTILINESTRINGs. Verwenden Sie bitte ST_LineMerge oder ST_Dump um Linienzüge zu erzeugen.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.3.2

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Erstellen Sie ein 2D-Polygon.

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

-- result --
POLYGON((75 29, 77 29, 77 29, 75 29))

Erstellen Sie ein 3D-Polygon.

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

-- result --
SRID=4326;POLYGON((75 29 1, 77 29 2, 77 29 3, 75 29 1))

Name

ST_TileEnvelope — Erzeugt ein rechteckiges Polygon in Web Mercator (SRID:3857) unter Verwendung des XYZ-Kachelsystems.

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

Beschreibung

Erzeugt ein rechteckiges Polygon, das die Ausdehnung einer Kachel im XYZ-Kachelsystem angibt. Die Kachel wird durch die Zoomstufe Z und den XY-Index der Kachel im Raster auf dieser Stufe angegeben. Kann verwendet werden, um die Kachelgrenzen zu definieren, die von ST_AsMVTGeom benötigt werden, um Geometrie in den MVT-Kachelkoordinatenraum zu konvertieren.

Standardmäßig ist die Kachelhülle im Web Mercator-Koordinatensystem (SRID:3857) unter Verwendung des Standardbereichs des Web Mercator-Systems (-20037508.342789, 20037508.342789). Dies ist das am häufigsten verwendete Koordinatensystem für MVT-Kacheln. Der optionale Parameter bounds kann verwendet werden, um Kacheln in einem beliebigen Koordinatensystem zu erzeugen. Es handelt sich um eine Geometrie, die den SRID und die Ausdehnung des Quadrats "Zoomstufe Null" hat, in das das XYZ-Kachelsystem eingeschrieben ist.

Der optionale Parameter margin kann verwendet werden, um eine Kachel um den angegebenen Prozentsatz zu vergrößern. Z.B. margin=0.125 vergrößert die Kachel um 12,5%, was bei einer Kachelgröße von 4096, wie sie in ST_AsMVTGeom verwendet wird, einem Puffer=512 entspricht. Dies ist nützlich, um einen Kachelpuffer zu erstellen, der Daten enthält, die außerhalb des sichtbaren Bereichs der Kachel liegen, deren Vorhandensein sich aber auf die Darstellung der Kachel auswirkt. Beispielsweise könnte ein Städtename (ein Punkt) in der Nähe eines Kachelrandes liegen, so dass seine Beschriftung auf zwei Kacheln gerendert werden sollte, obwohl sich der Punkt im sichtbaren Bereich nur einer Kachel befindet. Wenn Sie erweiterte Kacheln in einer Abfrage verwenden, wird der Stadtpunkt in beide Kacheln aufgenommen. Verwenden Sie stattdessen einen negativen Wert, um die Kachel zu verkleinern. Werte unter -0,5 sind unzulässig, da die Kachel dann vollständig verschwinden würde. Geben Sie keinen Rand an, wenn Sie ST_AsMVTGeom verwenden. Siehe das Beispiel für ST_AsMVT.

Erweiterung: 2.0.0 Standardwert für den optionalen Parameter SRID eingefügt.

Verfügbarkeit: 2.1.0

Beispiel: Ein Umgebungsrechteck Polygon erzeugen

SELECT ST_AsText( ST_TileEnvelope(2, 1, 1) );

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

                      st_astext
------------------------------------------------------
 POLYGON((-135 45,-135 67.5,-90 67.5,-90 45,-135 45))

Siehe auch

ST_MakeEnvelope


Name

ST_HexagonGrid — Gibt eine Menge von Sechsecken und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.

Synopsis

setof record ST_HexagonGrid(float8 size, geometry bounds);

Beschreibung

Beginnt mit dem Konzept einer Sechseckkachelung der Ebene. (Es handelt sich nicht um eine hexagonale Kachelung der Erdkugel, sondern um das H3 Kachelungsschema.) Für eine gegebene planare SRS und eine gegebene Kantengröße gibt es, ausgehend vom Ursprung der SRS, eine einzige hexagonale Kachelung der Ebene, Tiling(SRS, Size). Diese Funktion beantwortet die Frage, welche Sechsecke in einem gegebenen Tiling(SRS, Size) sich mit einer gegebenen Grenze überschneiden.

Die SRS für die Ausgangssechsecke ist die SRS, die durch die Begrenzungsgeometrie bereitgestellt wird.

Durch Verdoppelung oder Verdreifachung der Kantengröße des Sechsecks wird eine neue übergeordnete Kachel erzeugt, die zur ursprünglichen Kachel passt. Leider ist es nicht möglich, übergeordnete Sechseckkacheln zu erzeugen, in die die untergeordneten Kacheln perfekt hineinpassen.

Verfügbarkeit: 2.1.0

Beispiele: Verwendung der Feld-Version

Um eine Punktzusammenfassung anhand eines sechseckigen Kachels vorzunehmen, erstellen Sie ein Sechseckgitter, wobei Sie die Ausdehnung der Punkte als Grenzen verwenden, und verbinden Sie es dann räumlich mit diesem Gitter.

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;

Beispiel: Ein Umgebungsrechteck Polygon erzeugen

Wenn wir für jede Polygongrenze eine Reihe von Sechsecken erzeugen und diejenigen herausfiltern, die sich nicht mit ihren Sechsecken schneiden, erhalten wir ein Tiling für jedes Polygon.

Die Kachelung von Zuständen führt dazu, dass jeder Zustand von einem Sechseck abgedeckt wird und sich mehrere Sechsecke an den Grenzen zwischen den Zuständen überlappen.

[Note]

Das Schlüsselwort LATERAL wird für Funktionen mit Mengenrückgabe impliziert, wenn auf eine vorherige Tabelle in der FROM-Liste verwiesen wird. CROSS JOIN LATERAL, CROSS JOIN oder einfach nur , sind also gleichwertige Konstrukte für dieses Beispiel.

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 — Liefert ein einzelnes Sechseck unter Verwendung der angegebenen Kantengröße und Zellkoordinate innerhalb des Sechseck-Gitterraums.

Synopsis

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

Beschreibung

Verwendet dasselbe Sechseck-Kacheln-Konzept wie ST_HexagonGrid, erzeugt aber nur ein Sechseck an der gewünschten Zellkoordinate. Optional kann die Ursprungskoordinate der Kacheln angepasst werden, der Standardursprung liegt bei 0,0.

Sechsecke werden ohne SRID generiert. Verwenden Sie daher ST_SetSRID, um den SRID auf den von Ihnen erwarteten Wert zu setzen.

Verfügbarkeit: 2.1.0

Beispiel: Erstellen eines Sechsecks im Ursprung

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 — Gibt eine Menge von Gitterquadraten und Zellindizes zurück, die die Grenzen des Arguments Geometrie vollständig abdecken.

Synopsis

setof record ST_SquareGrid(float8 size, geometry bounds);

Beschreibung

Beginnt mit dem Konzept einer quadratischen Kachelung der Ebene. Für eine gegebene planare SRS und eine gegebene Kantengröße gibt es, ausgehend vom Ursprung der SRS, ein einziges quadratisches Tiling der Ebene, Tiling(SRS, Size). Diese Funktion beantwortet die Frage, welche Gitter in einem gegebenen Tiling(SRS, Size) sich mit einer gegebenen Grenze überlappen.

Die SRS für die Ausgangsquadrate ist die SRS, die durch die Begrenzungsgeometrie bereitgestellt wird.

Durch Verdoppelung der Größe des Quadrats oder der Kanten wird eine neue übergeordnete Kachel erzeugt, die perfekt zur ursprünglichen Kachel passt. Standard-Webmap-Kacheln in Mercator sind einfach Zweierpotenzen von quadratischen Gittern in der Mercator-Ebene.

Verfügbarkeit: 2.1.0

Beispiel: Ein Umgebungsrechteck Polygon erzeugen

Das Raster füllt die gesamten Grenzen des Landes aus. Wenn Sie also nur Quadrate haben wollen, die das Land berühren, müssen Sie anschließend mit ST_Intersects filtern.

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

Beispiel: Zählen von Punkten in Quadraten (unter Verwendung eines einfach geschnittenen Gitters)

Um eine Punktzusammenfassung anhand einer quadratischen Kachel zu erstellen, erzeugen Sie ein quadratisches Gitter, das die Ausdehnung der Punkte als Grenzen verwendet, und verbinden Sie es dann räumlich mit diesem Gitter. Beachten Sie, dass die geschätzte Ausdehnung von der tatsächlichen Ausdehnung abweichen kann, seien Sie also vorsichtig und stellen Sie zumindest sicher, dass Sie Ihre Tabelle analysiert haben.

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

Beispiel: Zählen von Punkten in Quadraten unter Verwendung eines Rasters pro Punkt

Dies führt zum gleichen Ergebnis wie das erste Beispiel, ist aber bei einer großen Anzahl von Punkten langsamer

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 — Gibt ein einzelnes Quadrat mit der angegebenen Kantengröße und Zellkoordinate innerhalb des quadratischen Gitterraums zurück.

Synopsis

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

Beschreibung

Verwendet dasselbe Konzept der quadratischen Kachelung wie ST_SquareGrid, erzeugt aber nur ein Quadrat an der gewünschten Zellkoordinate. Optional kann die Ursprungskoordinate der Kacheln angepasst werden, der Standardursprung liegt bei 0,0.

Es werden Quadrate erzeugt, ohne dass ein SRID gesetzt ist. Verwenden Sie daher ST_SetSRID, um den SRID auf den von Ihnen erwarteten Wert zu setzen.

Verfügbarkeit: 2.1.0

Beispiel: Erstellen eines Quadrats im Ursprung

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 — Gibt die eingegebenen Buchstaben als Geometrie mit einer Standardstartposition am Ursprung und einer Standardtexthöhe von 100 zurück.

Synopsis

geometry ST_Letters(text letters, json font);

Beschreibung

Verwendet eine eingebaute Schriftart, um eine Zeichenkette als Multipolygongeometrie darzustellen. Die Standard Texthöhe ist 100.0, der Abstand von der Unterkante einer Unterlänge bis zur Oberkante eines Großbuchstabens. Die Standard-Startposition setzt den Beginn der Grundlinie auf den Ursprung. Um die Schriftart zu überschreiben, muss eine json-Map mit einem Zeichen als Schlüssel und base64-kodierten TWKB für die Schriftform übergeben werden, wobei die Schriftarten eine Höhe von 1000 Einheiten von der Unterkante der Unterlängen bis zur Oberkante der Großbuchstaben haben.

Der Text wird standardmäßig am Ursprung erzeugt. Um den Text neu zu positionieren und in der Größe zu verändern, wenden Sie zuerst die Funktion ST_Scale und dann die Funktion ST_Translate an.

Verfügbarkeit: 3.3.0

Beispiel: Ein Umgebungsrechteck Polygon erzeugen

SELECT ST_AsText(ST_Letters('Yo'), 1);

Von ST_Letters erzeugte Briefe

Beispiel: Wörter skalieren und verschieben

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

7.4. Geometrische Zugriffsfunktionen

  • GeometryType — Gibt den Geometrietyp des ST_Geometry Wertes zurück.
  • ST_Boundary — Gibt die abgeschlossene Hülle aus der kombinierten Begrenzung der Geometrie zurück.
  • ST_BoundingDiagonal — Gibt die Diagonale des Umgebungsdreiecks der angegebenen Geometrie zurück.
  • ST_CoordDim — Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.
  • ST_Dimension — Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.
  • ST_Dump — Gibt einen Satz von geometry_dump Zeilen für die Komponenten einer Geometrie zurück.
  • ST_DumpPoints — Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.
  • ST_DumpSegments — Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.
  • ST_DumpRings — Gibt einen Satz von geometry_dump Zeilen für die äußeren und inneren Ringe eines Polygons zurück.
  • ST_EndPoint — Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.
  • ST_Envelope — Gibt eine Geometrie in doppelter Genauigkeit (float8) zurück, welche das Umgebungsrechteck der beigestellten Geometrie darstellt.
  • ST_ExteriorRing — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.
  • ST_GeometryN — Gibt den Geometrietyp des ST_Geometry Wertes zurück.
  • ST_GeometryType — Gibt den Geometrietyp des ST_Geometry Wertes zurück.
  • ST_HasArc — Prüft, ob eine Geometrie einen Kreisbogen enthält
  • ST_InteriorRingN — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.
  • ST_NumCurves — Return the number of component curves in a CompoundCurve.
  • ST_CurveN — Returns the Nth component curve geometry of a CompoundCurve.
  • ST_IsClosed — Gibt den Wert TRUE zurück, wenn die Anfangs- und Endpunkte des LINESTRING's zusammenfallen. Bei polyedrischen Oberflächen, wenn sie geschlossen (volumetrisch) sind.
  • ST_IsCollection — Gibt den Wert TRUE zurück, falls es sich bei der Geometrie um eine leere GeometryCollection, Polygon, Point etc. handelt.
  • ST_IsEmpty — Prüft, ob eine Geometrie leer ist.
  • ST_IsPolygonCCW — Gibt TRUE zurück, wenn alle äußeren Ringe gegen den Uhrzeigersinn orientiert sind und alle inneren Ringe im Uhrzeigersinn ausgerichtet sind.
  • ST_IsPolygonCW — Gibt den Wert TRUE zurück, wenn alle äußeren Ringe im Uhrzeigersinn und alle inneren Ringe gegen den Uhrzeigersinn ausgerichtet sind.
  • ST_IsRing — Prüft, ob ein LineString geschlossen und einfach ist.
  • ST_IsSimple — Gibt den Wert (TRUE) zurück, wenn die Geometrie keine irregulären Stellen, wie Selbstüberschneidungen oder Selbstberührungen, aufweist.
  • ST_M — Gibt die M-Koordinate eines Punktes zurück.
  • ST_MemSize — Gibt den Geometrietyp des ST_Geometry Wertes zurück.
  • ST_NDims — Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.
  • ST_NPoints — Gibt die Anzahl der Punkte (Knoten) einer Geometrie zurück.
  • ST_NRings — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.
  • ST_NumGeometries — Gibt die Anzahl der Punkte einer Geometrie zurück. Funktioniert für alle Geometrien.
  • ST_NumInteriorRings — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.
  • ST_NumInteriorRing — Gibt die Anzahl der inneren Ringe eines Polygons in der Geometrie aus. Ist ein Synonym für ST_NumInteriorRings.
  • ST_NumPatches — Gibt die Anzahl der Maschen einer polyedrischen Oberfläche aus. Gibt NULL zurück, wenn es sich nicht um polyedrische Geometrien handelt.
  • ST_NumPoints — Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.
  • ST_PatchN — Gibt den Geometrietyp des ST_Geometry Wertes zurück.
  • ST_PointN — Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.
  • ST_Points — Gibt einen MultiPoint zurück, welcher alle Koordinaten einer Geometrie enthält.
  • ST_StartPoint — Gibt den ersten Punkt eines LineString zurück.
  • ST_Summary — Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.
  • ST_X — Gibt die X-Koordinate eines Punktes zurück.
  • ST_Y — Gibt die Y-Koordinate eines Punktes zurück.
  • ST_Z — Gibt die Z-Koordinate eines Punktes zurück.
  • ST_Zmflag — Gibt die Dimension der Koordinaten von ST_Geometry zurück.
  • ST_HasZ — Prüft, ob eine Geometrie eine Z-Dimension hat.
  • ST_HasM — Prüft, ob eine Geometrie eine M-Dimension (Maß) hat.

Name

GeometryType — Gibt den Geometrietyp des ST_Geometry Wertes zurück.

Synopsis

text GeometryType(geometry geomA);

Beschreibung

Gibt den Geometrietyp als Zeichenkette zurück. z.B.: 'LINESTRING', 'POLYGON', 'MULTIPOINT', etc.

OGC SPEC s2.1.1.1 - Gibt den Namen des instanziierbaren Subtyps der Geometrie zurück, von dem die geometrische Instanz ein Mitglied ist. Der Name des instanziierbaren Subtyps der Geometrie wird als Zeichenkette ausgegeben.

[Note]

Die Funktion zeigt auch an ob die Geometrie eine Maßzahl aufweist, indem eine Zeichenkette wie 'POINTM' zurückgegeben wird.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
 geometrytype
--------------
 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)) )'));
                        --result
                        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;
 result
--------
 TIN    

Siehe auch

ST_GeometryType


Name

ST_Boundary — Gibt die abgeschlossene Hülle aus der kombinierten Begrenzung der Geometrie zurück.

Synopsis

geometry ST_Boundary(geometry geomA);

Beschreibung

Gibt die abgeschlossene Hülle aus der kombinierten Begrenzung der Geometrie zurück. Die Definition der kombinierte Begrenzung ist in Abschnitt 3.12.3.2 der OGC SPEC beschrieben. Da das Ergebnis dieser Funktion eine abgeschlossene Hülle und daher topologisch geschlossen ist, kann die resultierende Begrenzung durch geometrische Primitive, wie in Abschnitt 3.12.2. der OGC SPEC erörtert, dargestellt werden.

Wird durch das GEOS Modul ausgeführt

[Note]

Vor 2.0.0 meldete diese Funktion einen Fehler, falls sie auf eine GEOMETRYCOLLECTION angewandt wurde. Ab 2.0.0 wird stattdessen NULL (nicht unterstützte Eingabe) zurückgegeben.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. OGC SPEC s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM IEC 13249-3: 5.1.17

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Erweiterung: mit 2.1.0 wurde die Unterstützung von Dreiecken eingeführt

Geändert: 3.2.0 Unterstützung für TIN, verwendet keine Geos, linearisiert keine Kurven

Beispiele

Linienzug mit überlagerten Begrenzungspunkten

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


ST_AsText output

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

Polygon mit Lücke und der Abgrenzung/Boundary als Multilinestring

SELECT ST_Boundary(geom)
FROM (SELECT
'POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130 ),
        ( 70 40, 100 50, 120 80, 80 110, 50 90, 70 40 ))'::geometry As geom) As f;
                                


ST_AsText output

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)')));
st_astext
-----------
MULTIPOINT((1 1),(-1 1))

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

--Using a 3d polygon
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))')));

st_asewkt
-----------------------------------
LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)

--Using 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) )')));

st_asewkt
----------
MULTIPOINT((-1 1 1),(1 1 0.75))

Name

ST_BoundingDiagonal — Gibt die Diagonale des Umgebungsdreiecks der angegebenen Geometrie zurück.

Synopsis

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

Beschreibung

Gibt für eine angegebenen Geometrie die Diagonale des Umgebungsrechtecks als Linienzug zurück. Wenn die Geometrie leer ist, so ist auch die Diagonale Linie leer. Anderenfalls wird ein Linienzug aus 2 Punkten mit den kleinsten xy-Werten am Anfangspunkt und den größten xy-Werten am Endpunkt ausgegeben.

Der fits Parameter bestimmt ob die bestmögliche Anpassung notwendig ist. Wenn er FALSE ist, so kann auch die Diagonale eines etwas größeren Umgebungsrechtecks akzeptiert werden (dies ist für Geometrien mit vielen Knoten schneller). Auf jeden Fall wird immer die gesamte Eingabegeometrie durch das von der Diagonale bestimmten Umgebungsrechtecks abgedeckt.

Die zurückgegebene Linienzug-Geometrie beinhaltet immer die SRID und die Dimensionalität (Anwesenheit von Z und M) der eingegebenen Geometrie.

[Note]

Bei Spezialfällen (ein einzelner Knoten als Eingabewert) ist der zurückgegebene Linienzug topologisch ungültig (kein Inneres/Interior). Das Ergebnis ist dadurch jedoch nicht semantisch ungültig.

Verfügbarkeit: 2.2.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.

Beispiele

-- Get the minimum X in a buffer around a point
SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(
  ST_Buffer(ST_Point(0,0),10)
)));
 st_x
------
  -10
                

Name

ST_CoordDim — Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.

Synopsis

integer ST_CoordDim(geometry geomA);

Beschreibung

Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.

Dies ist der MM konforme Alias für ST_NDims

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.3

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

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

                                SELECT ST_CoordDim(ST_Point(1,2));
                        --result--
                                2

                

Siehe auch

ST_NDims


Name

ST_Dimension — Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.

Synopsis

integer ST_Dimension(geometry g);

Beschreibung

Die inhärente Dimension eines geometrischen Objektes, welche kleiner oder gleich der Dimension der Koordinaten sein muss. Nach OGC SPEC s2.1.1.1 wird 0 für POINT, 1 für LINESTRING, 2 for POLYGON, und die größte Dimension der Teile einer GEOMETRYCOLLECTION zurückgegeben. Wenn die Dimension nicht bekannt ist (leereGEOMETRYCOLLECTION) wird 0 zurückgegeben.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.2

Erweiterung: 2.0.0 - Unterstützung für polyedrische Oberflächen und TIN eingeführt.

[Note]

Vor 2.0.0 meldete diese Funktion einen Fehler, falls sie auf eine leere Geometrie angewandt wurde.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

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

Siehe auch

ST_NDims


Name

ST_Dump — Gibt einen Satz von geometry_dump Zeilen für die Komponenten einer Geometrie zurück.

Synopsis

geometry_dump[] ST_Dump(geometry g1);

Beschreibung

Eine Funktion, die eine Menge zurückgibt (SRF), die die Komponenten einer Geometrie extrahiert. Sie gibt einen Satz von geometry_dump Zeilen zurück, die jeweils eine Geometrie (geom Feld) und eine Reihe von Ganzzahlen (path Feld) enthalten.

Für einen atomaren Geometrietyp (POINT, LINESTRING, POLYGON) wird ein einzelner Datensatz mit einem leeren Array path und die Eingabegeometrie als geom zurückgegeben. Bei einer Sammlung oder Multi-Geometrie wird ein Datensatz für jede der Komponenten der Sammlung zurückgegeben, und der path bezeichnet die Position der Komponente innerhalb der Sammlung.

ST_Dump ist nützlich für die Erweiterung von Geometrien. Es ist die Umkehrung einer ST_Collect / GROUP BY, da es neue Zeilen erstellt. Zum Beispiel kann es verwendet werden, um MULTIPOLYGONS in POLYGONS zu erweitern.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Verfügbarkeit: PostGIS 1.0.0RC1. Benötigt PostgreSQL 7.3 oder höher.

[Note]

Vor 1.3.4 ist diese Funktion abgestürzt, wenn die Geometrien CURVES enthalten. Dies wurde mit 1.3.4+ behoben

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Standard Beispiele

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)

Beispiele für polyedrische Oberflächen, TIN und Dreieck

-- Polyhedral surface example
-- Break a Polyhedral surface 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))
-- TIN --
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;
-- result --
 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 — Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.

Synopsis

geometry_dump[] ST_DumpPoints(geometry geom);

Beschreibung

Eine Funktion, die eine Menge zurückliefert (SRF), die die Koordinaten (Eckpunkte) einer Geometrie extrahiert. Sie gibt einen Satz von geometry_dump Zeilen zurück, die jeweils eine Geometrie (geom Feld) und eine Reihe von Ganzzahlen (path Feld) enthalten.

  • das Feld geom POINTs stellt die Koordinaten der gelieferten Geometrie dar.

  • das Feld path (ein integer[]) ist ein Index, der die Koordinatenpositionen in den Elementen der gelieferten Geometrie aufzählt. Die Indizes sind 1-basiert. Für einen LINESTRING sind die Pfade beispielsweise {i} wobei i die n-te Koordinate im LINESTRING ist. Für ein POLYGON lauten die Pfade {i,j}, wobei i die Ringnummer ist (1 ist der äußere, die inneren Ringe folgen) und j die Koordinatenposition im Ring.

Um eine einzelne Geometrie zu erhalten, die die Koordinaten enthält, verwenden Sie ST_Points.

Verbessert: 2.1.0 Höhere Geschwindigkeit. Reimplementiert als natives C.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Verfügbarkeit: 1.5.0

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Klassisches Auflösen einer Tabelle von LineStrings in Knoten

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)

Standard Beispiele

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)

Beispiele für polyedrische Oberflächen, TIN und Dreieck

-- Polyhedral surface cube --
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;
-- result --
  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)
-- Triangle --
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;
-- result --
 path |    wkt
------+------------
 {1}  | POINT(0 0)
 {2}  | POINT(0 9)
 {3}  | POINT(9 0)
 {4}  | POINT(0 0)
-- TIN --
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;
-- result --
  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 — Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.

Synopsis

geometry_dump[] ST_DumpSegments(geometry geom);

Beschreibung

Eine Funktion, die eine Menge zurückgibt (SRF), die die Segmente einer Geometrie extrahiert. Sie gibt einen Satz von geometry_dump Zeilen zurück, die jeweils eine Geometrie (Feldgeom ) und eine Reihe von Ganzzahlen (Feldpath ) enthalten.

  • the geom field LINESTRINGs represent the linear segments of the supplied geometry, while the CIRCULARSTRINGs represent the arc segments.

  • Das Feld path (ein integer[]) ist ein Index, der die Positionen der Segmentstartpunkte in den Elementen der gelieferten Geometrie auflistet. Die Indizes sind 1-basiert. Zum Beispiel sind für einen LINESTRING die Pfade {i} wobei i der n-te Segmentstartpunkt im LINESTRING ist. Für ein POLYGON lauten die Pfade {i,j}, wobei i die Ringnummer ist (1 ist der äußere, die inneren Ringe folgen) und j die Position des Segment-Startpunkts im Ring.

Verfügbarkeit: 3.2.0

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Standard Beispiele

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)

Beispiele für polyedrische Oberflächen, TIN und Dreieck

-- Triangle --
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)
-- TIN --
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 — Gibt einen Satz von geometry_dump Zeilen für die äußeren und inneren Ringe eines Polygons zurück.

Synopsis

geometry_dump[] ST_DumpRings(geometry a_polygon);

Beschreibung

Eine Funktion, die eine Menge zurückgibt (SRF), die die Ringe eines Polygons extrahiert. Sie gibt einen Satz von geometry_dump Zeilen zurück, die jeweils eine Geometrie (geom Feld) und eine Reihe von Ganzzahlen (path Feld) enthalten.

Das Feld geom enthält jeden Ring als POLYGON. Das Feld path ist ein ganzzahliges Feld der Länge 1, das den Polygonringindex enthält. Der äußere Ring (Schale) hat den Index 0. Die inneren Ringe (Löcher) haben Indizes von 1 und höher.

[Note]

Dies funktioniert nicht mit MULTIPOLYGONen. Verwenden Sie die Funktion bitte in Zusammenhang mit ST_Dump um sie auf MULTIPOLYGONe anzuwenden.

Verfügbarkeit: PostGIS 1.1.3. Benötigt PostgreSQL 7.3 oder höher.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Allgemeine Form der Abfrage.

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

Ein Polygon mit einem einzigen Loch.

SELECT path, ST_AsEWKT(geom) As geom
        FROM ST_DumpRings(
                ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,
                -8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,
                -8150305 5132788 1,-8149064 5133092 1),
                (-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))')
                )  as foo;
 path |                                            geom
----------------------------------------------------------------------------------------------------------------
  {0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,
          |          -8148941 5132466 1,-8148924 5132394 1,
          |          -8148903 5132210 1,-8148930 5131967 1,
          |          -8148992 5131978 1,-8149237 5132093 1,
          |          -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1))
  {1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,
          |          -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))

Name

ST_EndPoint — Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.

Synopsis

geometry ST_EndPoint(geometry g);

Beschreibung

Gibt den Anfangspunkt einer LINESTRING oder CIRCULARLINESTRING Geometrie als POINT oder NULL zurück, falls es sich beim Eingabewert nicht um einen LINESTRING oder CIRCULARLINESTRING handelt.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.1.4

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

[Note]

Änderung: 2.0.0 unterstützt die Verarbeitung von MultiLinestring's die nur aus einer einzelnen Geometrie bestehen, nicht mehr. In früheren Versionen von PostGIS gab die Funktion bei einem aus einer einzelnen Linie bestehender MultiLinestring den Anfangspunkt zurück. Ab 2.0.0 gibt sie nur NULL zurück, so wie bei jedem anderen MultiLinestring. Die alte Verhaltensweise war undokumentiert, aber Anwender, die annahmen, dass Sie Ihre Daten als LINESTRING vorliegen haben, könnten in 2.0 dieses zurückgegebene NULL bemerken.

Beispiele

Einhüllende von Punkt und Linienzug.

postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));
 st_astext
------------
 POINT(3 3)

Endpunkt eines Nicht-LineString ist NULL

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

Einhüllende von Punkt und Linienzug.

--3d endpoint
SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));
  st_asewkt
--------------
 POINT(0 0 5)

Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.

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

Name

ST_Envelope — Gibt eine Geometrie in doppelter Genauigkeit (float8) zurück, welche das Umgebungsrechteck der beigestellten Geometrie darstellt.

Synopsis

geometry ST_Envelope(geometry g1);

Beschreibung

Gibt das kleinstmögliche Umgebungsrechteck der bereitgestellten Geometrie als Geometrie im Float8-Format zurück. Das Polygon wird durch die Eckpunkte des Umgebungsrechteckes beschrieben ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)). (PostGIS fügt auch die ZMIN/ZMAX Koordinaten hinzu).

Spezialfälle (vertikale Linien, Punkte) geben eine Geometrie geringerer Dimension zurück als POLYGON, insbesondere POINT oder LINESTRING.

Verfügbarkeit: 1.5.0 Änderung der Verhaltensweise insofern, das die Ausgabe in Double Precision anstelle von Float4 erfolgt

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.19

Beispiele

SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));
 st_astext
------------
 POINT(1 3)
(1 row)


SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));
                   st_astext
--------------------------------
 POLYGON((0 0,0 3,1 3,1 0,0 0))
(1 row)


SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry));
                                                  st_astext
--------------------------------------------------------------
 POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)
SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry));
                                                  st_astext
--------------------------------------------------------------
 POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)

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;


        

Einhüllende von Punkt und Linienzug.

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

Name

ST_ExteriorRing — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.

Synopsis

geometry ST_ExteriorRing(geometry a_polygon);

Beschreibung

Gibt einen Linienzug zurück, welcher den äußeren Ring der POLYGON Geometrie darstellt. Gibt NULL zurück wenn es sich bei der Geometrie um kein Polygon handelt.

[Note]

Dies funktioniert nicht mit MULTIPOLYGONen. Verwenden Sie die Funktion bitte in Zusammenhang mit ST_Dump um sie auf MULTIPOLYGONe anzuwenden.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.2.3, 8.3.3

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

--If you have 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))')
        )
);

st_asewkt
---------
LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)

Name

ST_GeometryN — Gibt den Geometrietyp des ST_Geometry Wertes zurück.

Synopsis

geometry ST_GeometryN(geometry geomA, integer n);

Beschreibung

Gibt die auf 1-basierende n-te Geometrie zurück, wenn es sich bei der Geometrie um eine GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE oder (MULTI)POLYGON, POLYHEDRALSURFACE handelt. Anderenfalls wird NULL zurückgegeben.

[Note]

Seit Version 0.8.0 basiert der Index auf 1, so wie in der OGC Spezifikation. Vorhergegangene Versionen waren 0-basiert.

[Note]

Falls Sie alle Geometrien einer Geometrie entnehmen wollen, so ist ST_Dump wesentlich leistungsfähiger und es funktioniert auch mit Einzelgeometrien.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Änderung: 2.0.0 Vorangegangene Versionen geben bei Einzelgeometrien NULL zurück. Dies wurde geändert um die Geometrie für den ST_GeometrieN(..,1) Fall zurückzugeben.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 9.1.5

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Standard Beispiele

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

Beispiele für polyedrische Oberflächen, TIN und Dreieck

-- Polyhedral surface example
-- Break a Polyhedral surface 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;

                geom_ewkt
------------------------------------------
 POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
-- TIN --
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;
-- result --
                 wkt
-------------------------------------
 TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

Name

ST_GeometryType — Gibt den Geometrietyp des ST_Geometry Wertes zurück.

Synopsis

text ST_GeometryType(geometry g1);

Beschreibung

Gibt den Geometrietyp als Zeichenkette zurück. Z.B.: 'ST_LineString', 'ST_Polygon','ST_MultiPolygon' etc. Diese Funktion unterscheidet sich von GeometryType(geometry) durch den Präfix ST_ und dadurch, das nicht angezeigt wird, ob die Geometrie eine Maßzahl besitzt.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.4

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                        --result
                        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)) )'));
                        --result
                        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)) )'));
                        --result
                        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;
 result
--------
 ST_Tin    

Siehe auch

GeometryType


Name

ST_HasArc — Prüft, ob eine Geometrie einen Kreisbogen enthält

Synopsis

boolean ST_HasArc(geometry geomA);

Beschreibung

Gibt den Wert TRUE zurück, falls es sich bei der Geometrie um eine leere GeometryCollection, Polygon, Point etc. handelt.

Verfügbarkeit: 1.2.2

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

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

Name

ST_InteriorRingN — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.

Synopsis

geometry ST_InteriorRingN(geometry a_polygon, integer n);

Beschreibung

Gibt den Nten innenliegenden Linienzug des Ringes der Polygongeometrie zurück. Gibt NULL zurück, falls es sich bei der Geometrie nicht um ein Polygon handelt, oder sich das angegebene N außerhalb des zulässigen Bereiches befindet.

[Note]

Dies funktioniert nicht mit MULTIPOLYGONen. Verwenden Sie die Funktion bitte in Zusammenhang mit ST_Dump um sie auf MULTIPOLYGONe anzuwenden.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.2.6, 8.3.5

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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 — Return the number of component curves in a CompoundCurve.

Synopsis

integer ST_NumCurves(geometry a_compoundcurve);

Beschreibung

Return the number of component curves in a CompoundCurve, zero for an empty CompoundCurve, or NULL for a non-CompoundCurve input.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.2.6, 8.3.5

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

-- 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 — Returns the Nth component curve geometry of a CompoundCurve.

Synopsis

geometry ST_CurveN(geometry a_compoundcurve, integer index);

Beschreibung

Returns the Nth component curve geometry of a CompoundCurve. The index starts at 1. Returns NULL if the geometry is not a CompoundCurve or the index is out of range.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.2.6, 8.3.5

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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 — Gibt den Wert TRUE zurück, wenn die Anfangs- und Endpunkte des LINESTRING's zusammenfallen. Bei polyedrischen Oberflächen, wenn sie geschlossen (volumetrisch) sind.

Synopsis

boolean ST_IsClosed(geometry g);

Beschreibung

Gibt den Wert TRUE zurück, wenn die Anfangs- und Endpunkte des LINESTRING's zusammenfallen. Bei polyedrischen Oberflächen wird angezeigt, ob die Oberfläche eine Fläche (offen) oder ein Volumen (geschlossen) beschreibt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.1.5, 9.3.3

[Note]

SQL-MM definiert das Ergebnis von ST_IsClosed(NULL) als 0, während PostGIS NULL zurückgibt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele für Linienzüge und Punkte

postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);
 st_isclosed
-------------
 f
(1 row)

postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);
 st_isclosed
-------------
 t
(1 row)

postgis=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);
 st_isclosed
-------------
 f
(1 row)

postgis=# SELECT ST_IsClosed('POINT(0 0)'::geometry);
 st_isclosed
-------------
 t
(1 row)

postgis=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);
 st_isclosed
-------------
 t
(1 row)

Beispiel für eine polyedrische Oberfläche

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

 st_isclosed
-------------
 t


 -- Same as cube but missing a side --
 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)) )'));

 st_isclosed
-------------
 f

Siehe auch

ST_IsRing


Name

ST_IsCollection — Gibt den Wert TRUE zurück, falls es sich bei der Geometrie um eine leere GeometryCollection, Polygon, Point etc. handelt.

Synopsis

boolean ST_IsCollection(geometry g);

Beschreibung

Gibt den Wert TRUE zurück, wenn der Geometrietyp einer der folgenden Gemetrietypen entspricht:

  • GEOMETRYCOLLECTION

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

  • COMPOUNDCURVE

[Note]

Diese Funktion wertet den Geometrietyp aus. D.h.: sie gibt den Wert TRUE für Geometriekollektionen zurück, wenn diese leer sind, oder nur ein einziges Element aufweisen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

postgis=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);
 st_iscollection
-------------
 f
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);
 st_iscollection
-------------
 t
(1 row)

Name

ST_IsEmpty — Prüft, ob eine Geometrie leer ist.

Synopsis

boolean ST_IsEmpty(geometry geomA);

Beschreibung

Gibt den Wert TRUE zurück, wenn es sich um eine leere Geometrie handelt. Falls TRUE, dann repräsentiert diese Geometrie eine leere GeometryCollection, Polygon, Point etc.

[Note]

SQL-MM gibt vor, daß das Ergebnis von ST_IsEmpty(NULL) der Wert 0 ist, während PostGIS den Wert NULL zurückgibt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.7

Diese Methode unterstützt kreisförmige Strings und Kurven.

[Warning]

Änderung: 2.0.0 - In Vorgängerversionen von PostGIS war ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') erlaubt. Um eine bessere Übereinstimmung mit der SQL/MM Norm zu erreichen, ist dies nun nicht mehr gestattet.

Beispiele

SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));
 st_isempty
------------
 t
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));
 st_isempty
------------
 t
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));

 st_isempty
------------
 f
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false;
 ?column?
----------
 t
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));
  st_isempty
------------
 t
(1 row)


                

Name

ST_IsPolygonCCW — Gibt TRUE zurück, wenn alle äußeren Ringe gegen den Uhrzeigersinn orientiert sind und alle inneren Ringe im Uhrzeigersinn ausgerichtet sind.

Synopsis

boolean ST_IsPolygonCCW ( geometry geom );

Beschreibung

Gibt TRUE zurück, wenn für alle Bestandteile der angegebenen Geometrie gilt: die äußeren Ringe sind gegen den Uhrzeigersinn und die inneren Ringe im Uhrzeigersinn ausgerichtet.

Gibt TRUE zurück, wenn die Geometrie keine Polygonbestandteile aufweist.

[Note]

Da geschlossene Linienzüge nicht als Polygonbestandteile betrachtet werden, erhalten Sie auch dann TRUE, wenn Sie einen einzelnen geschlossenen Linienzug eingeben und zwar unabhängig von dessen Ausrichtung.

[Note]

Wenn bei einer Polygongeometrie die inneren Ringe nicht entgegengesetzt orientiert sind (insbesondere, wenn einer oder mehrere innere Ringe die selbe Ausrichtung wie die äußeren Ringe haben), dann geben sowohl ST_IsPolygonCW als auch ST_IsPolygonCCW den Wert FALSE zurück.

Verfügbarkeit: 2.4.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.


Name

ST_IsPolygonCW — Gibt den Wert TRUE zurück, wenn alle äußeren Ringe im Uhrzeigersinn und alle inneren Ringe gegen den Uhrzeigersinn ausgerichtet sind.

Synopsis

boolean ST_IsPolygonCW ( geometry geom );

Beschreibung

Gibt den Wert TRUE zurück, wenn für alle Polygonbestandteile der eingegebenen Geometrie gilt: die äußeren Ringe sind im Uhrzeigersinn orientiert, die inneren Ringe entgegen dem Uhrzeigersinn.

Gibt TRUE zurück, wenn die Geometrie keine Polygonbestandteile aufweist.

[Note]

Da geschlossene Linienzüge nicht als Polygonbestandteile betrachtet werden, erhalten Sie auch dann TRUE, wenn Sie einen einzelnen geschlossenen Linienzug eingeben und zwar unabhängig von dessen Ausrichtung.

[Note]

Wenn bei einer Polygongeometrie die inneren Ringe nicht entgegengesetzt orientiert sind (insbesondere, wenn einer oder mehrere innere Ringe die selbe Ausrichtung wie die äußeren Ringe haben), dann geben sowohl ST_IsPolygonCW als auch ST_IsPolygonCCW den Wert FALSE zurück.

Verfügbarkeit: 2.4.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.


Name

ST_IsRing — Prüft, ob ein LineString geschlossen und einfach ist.

Synopsis

boolean ST_IsRing(geometry g);

Beschreibung

Liefert TRUE wenn dieser LINESTRING sowohl ST_IsClosed (ST_StartPoint(g) ~= ST_Endpoint(g)) als auch ST_IsSimple (schneidet sich nicht selbst) ist.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.1.6

[Note]

SQL-MM gibt vor, daß das Ergebnis vonST_IsRing(NULL) der Wert 0 sein soll, während PostGIS den Wert NULL zurückgibt.

Beispiele

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 — Gibt den Wert (TRUE) zurück, wenn die Geometrie keine irregulären Stellen, wie Selbstüberschneidungen oder Selbstberührungen, aufweist.

Synopsis

boolean ST_IsSimple(geometry geomA);

Beschreibung

Gibt TRUE zurück, wenn keine regelwidrigen geometrischen Merkmale, wie Geometrien die sich selbst kreuzen oder berühren, auftreten. Für weiterführende Information zur OGC-Definition von Simplizität und Gültigkeit von Geometrien, siehe "Ensuring OpenGIS compliancy of geometries"

[Note]

SQL-MM definiert das Ergebnis von ST_IsSimple(NULL) als 0, während PostGIS NULL zurückgibt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.8

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
 st_issimple
-------------
 t
(1 row)

 SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
 st_issimple
-------------
 f
(1 row)

Siehe auch

ST_IsValid


Name

ST_M — Gibt die M-Koordinate eines Punktes zurück.

Synopsis

float ST_M(geometry a_point);

Beschreibung

Gibt die M-Koordinate des Punktes zurück, oder NULL wenn keine vorhanden ist. Der Einabewert muss ein Punkt sein.

[Note]

Dies ist (noch) kein Teil der OGC Spezifikation, wird aber hier aufgeführt um die Liste von Funktionen zum Auslesen von Punktkoordinaten zu vervollständigen.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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

                

Name

ST_MemSize — Gibt den Geometrietyp des ST_Geometry Wertes zurück.

Synopsis

integer ST_MemSize(geometry geomA);

Beschreibung

Gibt den Geometrietyp des ST_Geometry Wertes zurück.

Dies ergänzt die in PostgreSQL eingebauten Datenbankobjektfunktionen pg_column_size, pg_size_pretty, pg_relation_size, pg_total_relation_size.

[Note]

pg_relation_size, das die Bytegröße einer Tabelle angibt, kann eine geringere Bytegröße als ST_MemSize zurückgeben. Der Grund dafür ist, dass pg_relation_size den Beitrag von TOAST-Tabellen nicht berücksichtigt und große Geometrien in TOAST-Tabellen gespeichert werden.

pg_total_relation_size - schließt die Tabelle, die TOAST-Tabellen und di Indizes mit ein.

pg_column_size gibt zurück, wie viel Platz eine Geometrie in einer Spalte unter Berücksichtigung der Komprimierung einnehmen würde, kann also niedriger sein als ST_MemSize

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Geändert: 2.2.0 Name geändert in ST_MemSize, um der Namenskonvention zu folgen.

Beispiele

--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 — Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.

Synopsis

integer ST_NDims(geometry g1);

Beschreibung

Gibt die Koordinatendimension der Geometrie zurück. PostGIS unterstützt 2- (x,y), 3- (x,y,z) oder 2D mit Kilometrierung - x,y,m, und 4- dimensionalen Raum - 3D mit Kilometrierung x,y,z,m .

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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 — Gibt die Anzahl der Punkte (Knoten) einer Geometrie zurück.

Synopsis

integer ST_NPoints(geometry g1);

Beschreibung

Gibt die Anzahl der Punkte einer Geometrie zurück. Funktioniert für alle Geometrien.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

[Note]

Vor 1.3.4 ist diese Funktion abgestürzt, wenn die Geometrien CURVES enthalten. Dies wurde mit 1.3.4+ behoben

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
--result
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)'))
--result
4

Siehe auch

ST_NumPoints


Name

ST_NRings — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.

Synopsis

integer ST_NRings(geometry geomA);

Beschreibung

Wenn es sich bei der Geometrie um ein Polygon oder um ein MultiPolygon handelt, wird die Anzahl der Ringe zurückgegeben. Anders als NumInteriorRings werden auch die äußeren Ringe gezählt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

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)

Name

ST_NumGeometries — Gibt die Anzahl der Punkte einer Geometrie zurück. Funktioniert für alle Geometrien.

Synopsis

integer ST_NumGeometries(geometry geom);

Beschreibung

Gibt die Anzahl der Elemente in einer Geometriesammlung (GEOMETRYCOLLECTION oder MULTI*) zurück. Für nicht leere atomare Geometrien wird 1 zurückgegeben. Für leere Geometrien wird 0 zurückgegeben.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Änderung: 2.0.0 Bei früheren Versionen wurde NULL zurückgegeben, wenn die Geometrie nicht vom Typ GEOMETRYCOLLECTION/MULTI war. 2.0.0+ gibt nun 1 für Einzelgeometrien, wie POLYGON, LINESTRING, POINT zurück.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 9.1.4

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

--Prior versions would have returned NULL for this -- in 2.0.0 this returns 1
SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
--result
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)))'));
--result
3

Name

ST_NumInteriorRings — Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus.

Synopsis

integer ST_NumInteriorRings(geometry a_polygon);

Beschreibung

Gibt die Anzahl der inneren Ringe einer Polygongeometrie aus. Gibt NULL zurück, wenn die Geometrie kein Polygon ist.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.2.5

Änderung: 2.0.0 - In füheren Versionen war ein MULTIPOLYGON als Eingabe erlaubt, wobei die Anzahl der inneren Ringe des ersten Polygons ausgegeben wurde.

Beispiele

--If you have a regular 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 — Gibt die Anzahl der inneren Ringe eines Polygons in der Geometrie aus. Ist ein Synonym für ST_NumInteriorRings.

Synopsis

integer ST_NumInteriorRing(geometry a_polygon);


Name

ST_NumPatches — Gibt die Anzahl der Maschen einer polyedrischen Oberfläche aus. Gibt NULL zurück, wenn es sich nicht um polyedrische Geometrien handelt.

Synopsis

integer ST_NumPatches(geometry g1);

Beschreibung

Gibt die Anzahl der Maschen einer polyedrischen Oberfläche aus. Gibt NULL zurück, wenn es sich um keine polyedrische Geometrie handelt. Ist ein Synonym für ST_NumGeometries zur Unterstützung der MM Namensgebung. Wenn Ihnen die MM-Konvention egal ist, so ist die Verwendung von ST_NumGeometries schneller.

Verfügbarkeit: 2.0.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM ISO/IEC 13249-3: 8.5

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

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)) )'));
                --result
                6
                

Name

ST_NumPoints — Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.

Synopsis

integer ST_NumPoints(geometry g1);

Beschreibung

Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück. Vor 1.4 funktionierte dies nur mit ST_LineString, wie von der Spezifikation festgelegt. Ab 1.4 aufwärts handelt es sich um einen Alias für ST_NPoints, das die Anzahl der Knoten nicht nur für Linienzüge ausgibt. Erwägen Sie stattdessen die Verwendung von ST_NPoints, das vielseitig ist und mit vielen Geometrietypen funktioniert.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.2.4

Beispiele

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

Siehe auch

ST_NPoints


Name

ST_PatchN — Gibt den Geometrietyp des ST_Geometry Wertes zurück.

Synopsis

geometry ST_PatchN(geometry geomA, integer n);

Beschreibung

>Gibt die auf 1-basierende n-te Geometrie (Masche) zurück, wenn es sich bei der Geometrie um ein POLYHEDRALSURFACE, oder ein POLYHEDRALSURFACEM handelt. Anderenfalls wird NULL zurückgegeben. Gibt bei polyedrischen Oberflächen das selbe Ergebnis wie ST_GeometryN. Die Verwendung von ST_GeometryN ist schneller.

[Note]

Der Index ist auf 1 basiert.

[Note]

Falls Sie alle Geometrien einer Geometrie entnehmen wollen, so ist ST_Dump wesentlich leistungsfähiger.

Verfügbarkeit: 2.0.0

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM ISO/IEC 13249-3: 8.5

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

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

              geomewkt
---+-----------------------------------------
 POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))

Name

ST_PointN — Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.

Synopsis

geometry ST_PointN(geometry a_linestring, integer n);

Beschreibung

Gibt den n-ten Punkt des ersten LineString's oder des kreisförmigen LineStrings's einer Geometrie zurück. Negative Werte werden rückwärts, vom Ende des LineString's her gezählt, sodass -1 der Endpunkt ist. Gibt NULL aus, wenn die Geometrie keinen LineString enthält.

[Note]

Seit Version 0.8.0 ist der Index 1-basiert, so wie in der OGC Spezifikation. Rückwärtiges Indizieren (negativer Index) findet sich nicht in der OGC Spezifikation. Vorhergegangene Versionen waren 0-basiert.

[Note]

Falls Sie den n-ten Punkt eines jeden LineString's in einem MultiLinestring wollen, nutzen Sie diese Funktion gemeinsam mit ST_Dump.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.2.5, 7.3.5

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

[Note]

Änderung: 2.0.0 arbeitet nicht mehr mit MultiLinestring's, die nur eine einzelne Geometrie enthalten. In früheren Versionen von PostGIS gab die Funktion bei einem, aus einer einzelnen Linie bestehender MultiLinestring, den Anfangspunkt zurück. Ab 2.0.0 wird, so wie bei jedem anderen MultiLinestring auch, NULL zurückgegeben.

Änderung: 2.3.0 : negatives Indizieren verfügbar (-1 entspricht dem Endpunkt)

Beispiele

-- Extract all POINTs 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;

 st_astext
------------
 POINT(0 0)
 POINT(1 1)
 POINT(2 2)
(3 rows)

--Example circular string
SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'), 2));

 st_astext
------------
 POINT(3 2)
(1 row)

SELECT ST_AsText(f)
FROM ST_GeomFromText('LINESTRING(0 0 0, 1 1 1, 2 2 2)') AS g
  ,ST_PointN(g, -2) AS f; -- 1 based index

    st_astext
-----------------
 POINT Z (1 1 1)
(1 row)

Siehe auch

ST_NPoints


Name

ST_Points — Gibt einen MultiPoint zurück, welcher alle Koordinaten einer Geometrie enthält.

Synopsis

geometry ST_Points( geometry geom );

Beschreibung

Gibt einen MultiPoint zurück, der alle Koordinaten einer Geometrie enthält. Doppelte Punkte werden beibehalten, einschließlich der Start- und Endpunkte von Ringgeometrien. (Falls gewünscht, können doppelte Punkte durch den Aufruf von ST_RemoveRepeatedPoints für das Ergebnis entfernt werden).

Um Informationen über die Position der einzelnen Koordinaten in der übergeordneten Geometrie zu erhalten, verwenden Sie ST_DumpPoints.

M- und Z-Koordinaten werden beibehalten, falls vorhanden.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Verfügbarkeit: 2.3.0

Beispiele

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

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

Name

ST_StartPoint — Gibt den ersten Punkt eines LineString zurück.

Synopsis

geometry ST_StartPoint(geometry geomA);

Beschreibung

Gibt den Anfangspunkt einer LINESTRING oder CIRCULARLINESTRING Geometrie als POINT oder NULL zurück, falls es sich beim Eingabewert nicht um einen LINESTRING oder CIRCULARLINESTRING handelt.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.1.3

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

[Note]

Verbessert: 3.2.0 gibt einen Punkt für alle Geometrien zurück. Vorheriges Verhalten gibt NULLs zurück, wenn die Eingabe kein LineString war.

Änderung: 2.0.0 unterstützt die Verarbeitung von MultiLinestring's die nur aus einer einzelnen Geometrie bestehen, nicht mehr. In früheren Versionen von PostGIS gab die Funktion bei einem aus einer einzelnen Linie bestehender MultiLinestring den Anfangspunkt zurück. Ab 2.0.0 gibt sie nur NULL zurück, so wie bei jedem anderen MultiLinestring. Die alte Verhaltensweise war undokumentiert, aber Anwender, die annahmen, dass Sie Ihre Daten als LINESTRING vorliegen haben, könnten in 2.0 dieses zurückgegebene NULL bemerken.

Beispiele

Startpunkt eines LineString

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

Startpunkt eines Nicht-LineString ist NULL

SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;
  is_null
----------
 t

Startpunkt einer 3D-LinieString

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

Gibt die Anzahl der Stützpunkte eines ST_LineString oder eines ST_CircularString zurück.

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

Name

ST_Summary — Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.

Synopsis

text ST_Summary(geometry g);

text ST_Summary(geography g);

Beschreibung

Gibt eine Zusammenfassung des Inhalts einer Geometrie wieder.

Die Bedeutung der Flags, welche in eckigen Klammern hinter dem Geometrietyp angezeigt werden, ist wie folgt:

  • M: besitzt eine M-Ordinate

  • Z: besitzt eine Z-Ordinate

  • B: besitzt ein zwischengespeichertes Umgebungsrechteck

  • G: ist geodätisch (Geographie)

  • S: besitzt ein räumliches Koordinatenreferenzsystem

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Verfügbarkeit: 1.2.2

Erweiterung: 2.0.0 Unterstützung für geographische Koordinaten hinzugefügt

Erweiterung: 2.1.0 S-Flag, diese zeigt an ob das Koordinatenreferenzsystem bekannt ist

Erweiterung: 2.2.0 Unterstützung für TIN und Kurven

Beispiele

=# 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 — Gibt die X-Koordinate eines Punktes zurück.

Synopsis

float ST_X(geometry a_point);

Beschreibung

Gibt die X-Koordinate eines Punktes, oder NULL wenn diese nicht vorhanden ist, zurück. Die Eingabe muss ein Punkt sein.

[Note]

Um den minimalen und maximalen X-Wert der Geometriekoordinaten zu ermitteln, verwenden Sie die Funktionen ST_XMin und ST_XMax.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 6.1.3

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_x
------
        1
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
 st_y
------
  1.5
(1 row)

                

Name

ST_Y — Gibt die Y-Koordinate eines Punktes zurück.

Synopsis

float ST_Y(geometry a_point);

Beschreibung

Gibt die Y-Koordinate eines Punktes, oder NULL wenn diese nicht vorhanden ist, zurück. Die Eingabe muss ein Punkt sein.

[Note]

Um den minimalen und maximalen Y-Wert der Geometriekoordinaten zu ermitteln, verwenden Sie die Funktionen ST_YMin und ST_YMax.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 6.1.4

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_y
------
        2
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
 st_y
------
  1.5
(1 row)


                

Name

ST_Z — Gibt die Z-Koordinate eines Punktes zurück.

Synopsis

float ST_Z(geometry a_point);

Beschreibung

Gibt die Z-Koordinate eines Punktes, oder NULL wenn diese nicht vorhanden ist, zurück. Die Eingabe muss ein Punkt sein.

[Note]

Um den minimalen und maximalen Z-Wert der Geometriekoordinaten zu ermitteln, verwenden Sie die Funktionen ST_ZMin und ST_ZMax.

Diese Methode setzt die SQL/MM-Spezifikation um.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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

                

Name

ST_Zmflag — Gibt die Dimension der Koordinaten von ST_Geometry zurück.

Synopsis

smallint ST_Zmflag(geometry geomA);

Beschreibung

Gibt die Dimension der Koordinaten für den Wert von ST_Geometry zurück.

Die Werte sind: 0 = 2D, 1 = 3D-M, 2 = 3D-Z, 3 = 4D.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));
 st_zmflag
-----------
                 0

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));
 st_zmflag
-----------
                 1

SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));
 st_zmflag
-----------
                 2
SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_zmflag
-----------
                 3

Name

ST_HasZ — Prüft, ob eine Geometrie eine Z-Dimension hat.

Synopsis

boolean ST_HasZ(geometry geom);

Beschreibung

Prüft, ob die Eingabegeometrie eine Z-Dimension hat und gibt einen booleschen Wert zurück. Wenn die Geometrie eine Z-Dimension hat, wird true zurückgegeben, andernfalls false.

Geometrieobjekte mit einer Z-Dimension stellen typischerweise dreidimensionale (3D) Geometrien dar, während solche ohne Z-Dimension zweidimensionale (2D) Geometrien sind.

Diese Funktion ist nützlich, um festzustellen, ob eine Geometrie Höhen- oder Breiteninformationen enthält.

Verfügbarkeit: 3.5.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.

Beispiele

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

Name

ST_HasM — Prüft, ob eine Geometrie eine M-Dimension (Maß) hat.

Synopsis

boolean ST_HasM(geometry geom);

Beschreibung

Prüft, ob die Eingabegeometrie eine M-Dimension (Maß) hat und gibt einen booleschen Wert zurück. Wenn die Geometrie ein M-Maß hat, wird true zurückgegeben, andernfalls false.

Geometrieobjekte mit einer M-Dimension stellen in der Regel Messungen oder zusätzliche Daten dar, die mit räumlichen Merkmalen verbunden sind.

Diese Funktion ist nützlich, um festzustellen, ob eine Geometrie Messinformationen enthält.

Verfügbarkeit: 3.5.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.

Beispiele

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

7.5. Geometrische Editoren

Abstract

Diese Funktionen erzeugen modifizierte Geometrien, indem sie den Typ, die Struktur oder die Scheitelpunkte ändern.

  • ST_AddPoint — Fügt einem Linienzug einen Punkt hinzu.
  • ST_CollectionExtract — Gibt bei einer Geometriesammlung eine Multi-Geometrie zurück, die nur Elemente eines bestimmten Typs enthält.
  • ST_CollectionHomogenize — Gibt die einfachste Darstellung einer Geometriesammlung zurück.
  • ST_CurveToLine — Konvertiert eine Geometrie mit Kurven in eine lineare Geometrie.
  • ST_Scroll — Startpunkt eines geschlossenen LineStrings ändern.
  • ST_FlipCoordinates — Gibt eine Version einer Geometrie mit gespiegelter X- und Y-Achse zurück.
  • ST_Force2D — Die Geometrien in einen "2-dimensionalen Modus" zwingen.
  • ST_Force3D — Zwingt die Geometrien in einen XYZ Modus. Dies ist ein Alias für ST_Force3DZ.
  • ST_Force3DZ — Zwingt die Geometrien in einen XYZ Modus.
  • ST_Force3DM — Zwingt die Geometrien in einen XYM Modus.
  • ST_Force4D — Zwingt die Geometrien in einen XYZM Modus.
  • ST_ForceCollection — Wandelt eine Geometrie in eine GEOMETRYCOLLECTION um.
  • ST_ForceCurve — Wandelt einen geometrischen in einen Kurven Datentyp um, soweit anwendbar.
  • ST_ForcePolygonCCW — Richtet alle äußeren Ringe gegen den Uhrzeigersinn und alle inneren Ringe mit dem Uhrzeigersinn aus.
  • ST_ForcePolygonCW — Richtet alle äußeren Ringe im Uhrzeigersinn und alle inneren Ringe gegen den Uhrzeigersinn aus.
  • ST_ForceSFS — Erzwingt, dass Geometrien nur vom Typ SFS 1.1 sind.
  • ST_ForceRHR — Orientiert die Knoten in einem Polygon so, dass sie der Drei-Finger-Regel folgen.
  • ST_LineExtend — Gibt eine Linie zurück, die um die angegebenen Abstände vorwärts und rückwärts verlängert wurde.
  • ST_LineToCurve — Konvertiert eine lineare Geometrie in eine gekrümmte Geometrie.
  • ST_Multi — Gibt die Geometrie als MULTI* Geometrie zurück.
  • ST_Normalize — Gibt die Geometrie in Normalform zurück.
  • ST_Project — Gibt einen Punkt zurück, der von einem Startpunkt um eine bestimmte Entfernung und Peilung (Azimut) projiziert wird.
  • ST_QuantizeCoordinates — Setzt die niedrigwertigsten Bits der Koordinaten auf Null
  • ST_RemovePoint — Einen Punkt aus einem Linienzug entfernen.
  • ST_RemoveRepeatedPoints — Gibt eine Version einer Geometrie zurück, bei der doppelte Punkte entfernt wurden.
  • ST_Reverse — Gibt die Geometrie in umgekehrter Knotenreihenfolge zurück.
  • ST_Segmentize — Gibt eine geänderte Geometrie/Geografie zurück, bei der kein Segment länger als eine bestimmte Entfernung ist.
  • ST_SetPoint — Einen Punkt eines Linienzuges durch einen gegebenen Punkt ersetzen.
  • ST_ShiftLongitude — Verschiebt die Längenkoordinaten einer Geometrie zwischen -180..180 und 0..360.
  • ST_WrapX — Versammelt eine Geometrie um einen X-Wert
  • ST_SnapToGrid — Fängt alle Punkte der Eingabegeometrie auf einem regelmäßigen Gitter.
  • ST_Snap — Fängt die Segmente und Knoten einer Eingabegeometrie an den Knoten einer Referenzgeometrie.
  • ST_SwapOrdinates — Gibt eine Version der Ausgangsgeometrie zurück, in der die angegebenen Ordinatenwerte ausgetauscht werden.

Name

ST_AddPoint — Fügt einem Linienzug einen Punkt hinzu.

Synopsis

geometry ST_AddPoint(geometry linestring, geometry point);

geometry ST_AddPoint(geometry linestring, geometry point, integer position = -1);

Beschreibung

Fügt einen Punkt zu einem LineString vor dem Index Position hinzu (unter Verwendung eines 0-basierten Index). Wenn der Parameter position weggelassen wird oder -1 ist, wird der Punkt an das Ende des LineString angehängt.

Verfügbarkeit: 1.1.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Hinzufügen eines Punktes am Ende einer 3D-Linie

SELECT ST_AsEWKT(ST_AddPoint('LINESTRING(0 0 1, 1 1 1)', ST_MakePoint(1, 2, 3)));

    st_asewkt
    ----------
    LINESTRING(0 0 1,1 1 1,1 2 3)

Garantiert, dass alle Zeilen einer Tabelle geschlossen sind, indem der Anfangspunkt jeder Zeile nur bei den nicht geschlossenen Zeilen an das Zeilenende angefügt wird.

UPDATE sometable
SET geom = ST_AddPoint(geom, ST_StartPoint(geom))
FROM sometable
WHERE ST_IsClosed(geom) = false;

Name

ST_CollectionExtract — Gibt bei einer Geometriesammlung eine Multi-Geometrie zurück, die nur Elemente eines bestimmten Typs enthält.

Synopsis

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

Beschreibung

Gibt bei einer Geometriesammlung eine homogene Multi-Geometrie zurück.

Wenn der Typ nicht angegeben ist, wird eine Multi-Geometrie zurückgegeben, die nur Geometrien der höchsten Dimension enthält. Polygone werden also gegenüber Linien bevorzugt, die wiederum gegenüber Punkten bevorzugt werden.

Wenn der Typ angegeben ist, wird eine Multi-Geometrie zurückgegeben, die nur diesen Typ enthält. Gibt es keine Untergeometrien des richtigen Typs, wird eine EMPTY-Geometrie zurückgegeben. Es werden nur Punkte, Linien und Polygone unterstützt. Die Typnummern sind:

  • 1 == PUNKT

  • 2 == ZEILENUMBRUCH

  • 3 == POLYGON

Bei atomaren Geometrieeingaben wird die Geometrie unverändert wiedergegeben, wenn der Eingabetyp mit dem angeforderten Typ übereinstimmt. Andernfalls ist das Ergebnis eine LEERE Geometrie des angegebenen Typs. Falls erforderlich, können diese mit ST_Multi in Multi-Geometrien umgewandelt werden.

[Warning]

MultiPolygon-Ergebnisse werden nicht auf ihre Gültigkeit geprüft. Wenn die Polygonkomponenten nebeneinander liegen oder sich überlappen, ist das Ergebnis ungültig. (Dies kann z.B. bei der Anwendung dieser Funktion auf ein ST_Split Ergebnis auftreten.) Diese Situation kann mit ST_IsValid überprüft und mit ST_MakeValid behoben werden.

Verfügbarkeit: 1.5.0

[Note]

Vor 1.5.3 gab diese Funktion atomare Eingaben unverändert zurück, unabhängig vom Typ. In 1.5.3 lieferten nicht übereinstimmende Einzelgeometrien ein NULL-Ergebnis. In 2.0.0 geben nicht übereinstimmende Einzelgeometrien ein LEERES Ergebnis des angeforderten Typs zurück.

Beispiele

Extrahieren Sie den Typ mit der höchsten Dimension:

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
    st_astext
    ---------------
    MULTILINESTRING((1 1, 2 2))

Punkte extrahieren (Typ 1 == POINT):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
        1 ));
    st_astext
    ---------------
    MULTIPOINT((0 0))

Zeilen extrahieren (Typ 2 == LINESTRING):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))',
        2 ));
    st_astext
    ---------------
    MULTILINESTRING((0 0, 1 1), (2 2, 3 3))

Name

ST_CollectionHomogenize — Gibt die einfachste Darstellung einer Geometriesammlung zurück.

Synopsis

geometry ST_CollectionHomogenize(geometry collection);

Beschreibung

Gibt bei einer Geometriesammlung die "einfachste" Darstellung des Inhalts zurück.

  • Homogene (einheitliche) Sammlungen werden als die entsprechende Multi-Geometrie zurückgegeben.

  • Heterogene (gemischte) Sammlungen werden zu einer einzigen GeometryCollection zusammengeführt.

  • Sammlungen, die ein einzelnes atomares Element enthalten, werden als dieses Element zurückgegeben.

  • Atomare Geometrien werden unverändert zurückgegeben. Bei Bedarf können diese mit ST_Multi in eine Multi-Geometrie umgewandelt werden.

[Warning]

Diese Funktion stellt nicht sicher, dass das Ergebnis gültig ist. Insbesondere wird eine Sammlung, die benachbarte oder überlappende Polygone enthält, ein ungültiges MultiPolygon erzeugen. Diese Situation kann mit ST_IsValid überprüft und mit ST_MakeValid behoben werden.

Verfügbarkeit: 2.0.0

Beispiele

In eine atomare Geometrie umgewandelte Einzelelementsammlung

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));

        st_astext
        ------------
        POINT(0 0)

Verschachtelte Einzelelementsammlung, die in eine atomare Geometrie umgewandelt wurde:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(MULTIPOINT((0 0)))'));

        st_astext
        ------------
        POINT(0 0)

Sammlung in eine Multi-Geometrie umgewandelt:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));

        st_astext
        ---------------------
        MULTIPOINT((0 0),(1 1))

Verschachtelte heterogene Sammlung, die zu einer GeometryCollection abgeflacht wurde:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0), GEOMETRYCOLLECTION( LINESTRING(1 1, 2 2)))'));

        st_astext
        ---------------------
        GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2))

Sammlung von Polygonen, die in ein (ungültiges) MultiPolygon umgewandelt wurden:

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

        st_astext
        ---------------------
        MULTIPOLYGON(((10 50,50 50,50 10,10 10,10 50)),((90 50,90 10,50 10,50 50,90 50)))

Name

ST_CurveToLine — Konvertiert eine Geometrie mit Kurven in eine lineare Geometrie.

Synopsis

geometry ST_CurveToLine(geometry curveGeom, float tolerance, integer tolerance_type, integer flags);

Beschreibung

Konvertiert einen CIRCULAR STRING in einen normalen LINESTRING, ein CURVEPOLYGON in ein POLYGON und ein MULTISURFACE in ein MULTIPOLYGON. Ist nützlich zur Ausgabe an Geräten, die keine Kreisbögen unterstützen.

Wandelt eine gegebene Geometrie in eine lineare Geometrie um. Jede Kurvengeometrie und jedes Kurvensegment wird in linearer Näherung mit der gegebenen Toleranz und Optionen konvertiert ( Standardmäßig 32 Segmenten pro Viertelkreis und keine Optionen).

Der Übergabewert 'tolerance_type' gibt den Toleranztyp an. Er kann die folgenden Werte annehmen:

  • 0 (default): die Toleranz wird über die maximale Anzahl der Segmente pro Viertelkreis angegeben.

  • 1: Die Toleranz wird als maximale Abweichung der Linie von der Kurve in der Einheit der Herkunftsdaten angegeben.

  • 2: Die Toleranz entspricht dem maximalen Winkel zwischen zwei erzeugten Radien.

Der Parameter 'flags' ist ein Bitfeld mit dem Standardwert 0. Es werden folgende Bits unterstützt:

  • 1: Symmetrische (orientierungsunabhängige) Ausgabe.

  • 2: Erhält den Winkel, vermeidet die Winkel (Segmentlängen) bei der symmetrischen Ausgabe zu reduzieren. Hat keine Auswirkung, wenn die Symmetrie-Flag nicht aktiviert ist.

Verfügbarkeit: 1.3.0

Erweiterung: ab 2.4.0 kann die Toleranz über die 'maximale Abweichung' und den 'maximalen Winkel' angegeben werden. Die symmetrische Ausgabe wurde hinzugefügt.

Erweiterung: 3.0.0 führte eine minimale Anzahl an Segmenten pro linearisierten Bogen ein, um einem topologischen Kollaps vorzubeugen.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.1.7

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

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

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

--3d example
SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')));
Output
------
 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));
st_astext
------------------------------
 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
));
st_astext
-------------------------------------------------------------------------------------------
 LINESTRING(0 0,50 -86.6025403784438,150 -86.6025403784439,200 -1.1331077795296e-13,200 0)


        

Siehe auch

ST_LineToCurve


Name

ST_Scroll — Startpunkt eines geschlossenen LineStrings ändern.

Synopsis

geometry ST_Scroll(geometry linestring, geometry point);

Beschreibung

Ändert den Start-/Endpunkt eines geschlossenen LineStrings auf den angegebenen Scheitelpunkt .

Verfügbarkeit: 3.2.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.

Beispiele

Eine geschlossene Linie soll an ihrem 3. Scheitelpunkt beginnen.

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

st_asewkt
----------
SRID=4326;LINESTRING(5 5 4 2,0 0 0 1,10 0 2 0,5 5 4 2)

Siehe auch

ST_Normalize


Name

ST_FlipCoordinates — Gibt eine Version einer Geometrie mit gespiegelter X- und Y-Achse zurück.

Synopsis

geometry ST_FlipCoordinates(geometry geom);

Beschreibung

Liefert eine Version der angegebenen Geometrie mit gespiegelter X- und Y-Achse. Nützlich zum Fixieren von Geometrien, die Koordinaten enthalten, die als Breitengrad/Längengrad (Y,X) ausgedrückt sind.

Verfügbarkeit: 2.0.0

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiel

SELECT ST_AsEWKT(ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)')));
 st_asewkt
------------
POINT(2 1)
         

Siehe auch

ST_SwapOrdinates


Name

ST_Force2D — Die Geometrien in einen "2-dimensionalen Modus" zwingen.

Synopsis

geometry ST_Force2D(geometry geomA);

Beschreibung

Zwingt die Geometrien in einen "2-dimensionalen Modus", sodass in der Ausgabe nur die X- und Y-Koordinaten dargestellt werden. Nützlich um eine OGC-konforme Ausgabe zu erhalten (da OGC nur 2-D Geometrien spezifiziert).

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Force_2D bezeichnet.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                st_asewkt
-------------------------------------
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))'));

                                  st_asewkt
----------------------------------------------
 POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))

                

Siehe auch

ST_Force3D


Name

ST_Force3D — Zwingt die Geometrien in einen XYZ Modus. Dies ist ein Alias für ST_Force3DZ.

Synopsis

geometry ST_Force3D(geometry geomA, float Zvalue = 0.0);

Beschreibung

Zwingt die Geometrien in den XYZ-Modus. Dies ist ein Alias für ST_Force3DZ. Wenn eine Geometrie keine Z-Komponente hat, wird ein Z-Wert Z-Koordinate angehängt.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Force_3D bezeichnet.

Geändert: 3.1.0. Unterstützung für die Angabe eines Z-Wertes ungleich Null wurde zugefügt.

Diese Funktion unterstützt polyedrische Flächen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

--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)')));
                                   st_asewkt
-----------------------------------------------
 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))'));

                                                 st_asewkt
--------------------------------------------------------------
 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 — Zwingt die Geometrien in einen XYZ Modus.

Synopsis

geometry ST_Force3DZ(geometry geomA, float Zvalue = 0.0);

Beschreibung

Zwingt die Geometrien in den XYZ-Modus. Wenn eine Geometrie keine Z-Komponente hat, wird ein Z-Wert Z-Koordinate angehängt.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Force_3DZ bezeichnet.

Geändert: 3.1.0. Unterstützung für die Angabe eines Z-Wertes ungleich Null wurde zugefügt.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

--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)')));
                                   st_asewkt
-----------------------------------------------
 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))'));

                                                 st_asewkt
--------------------------------------------------------------
 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 — Zwingt die Geometrien in einen XYM Modus.

Synopsis

geometry ST_Force3DM(geometry geomA, float Mvalue = 0.0);

Beschreibung

Zwingt die Geometrien in den XYM-Modus. Wenn eine Geometrie keine M-Komponente hat, wird ein M-Wert M-Koordinate angehängt. Wenn sie eine Z-Komponente hat, wird Z entfernt.

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Force_3DM bezeichnet.

Geändert: 3.1.0. Unterstützung für die Angabe eines M-Wertes ungleich Null wurde hinzugefügt.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

--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)')));
                                   st_asewkt
------------------------------------------------
 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))'));

                                                  st_asewkt
---------------------------------------------------------------
 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 — Zwingt die Geometrien in einen XYZM Modus.

Synopsis

geometry ST_Force4D(geometry geomA, float Zvalue = 0.0, float Mvalue = 0.0);

Beschreibung

Zwingt die Geometrien in den XYZM-Modus. Zvalue und Mvalue wird für fehlende Z- bzw. M-Dimensionen angehängt.

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Force_4D bezeichnet.

Geändert: 3.1.0. Unterstützung für die Angabe von Z- und M-Werten ungleich Null wurde hinzugefügt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

--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)')));
                                                st_asewkt
---------------------------------------------------------
 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))'));

                                                                          st_asewkt
--------------------------------------------------------------------------------------
 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 — Wandelt eine Geometrie in eine GEOMETRYCOLLECTION um.

Synopsis

geometry ST_ForceCollection(geometry geomA);

Beschreibung

Wandelt eine Geometrie in eine GEOMETRYCOLLECTION um. Nützlich um eine WKB-Darstellung zu vereinfachen.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Verfügbarkeit: 1.2.2, Vor 1.3.4 ist diese Funktion bei CURVES abgestürzt. Dies wurde mit 1.3.4+ behoben

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Force_Collection bezeichnet.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

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

                                                                   st_asewkt
----------------------------------------------------------------------------------
 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)'));
                                                                   st_astext
--------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
(1 row)

                
-- POLYHEDRAL example --
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)))'))

                                                                   st_asewkt
----------------------------------------------------------------------------------
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 — Wandelt einen geometrischen in einen Kurven Datentyp um, soweit anwendbar.

Synopsis

geometry ST_ForceCurve(geometry g);

Beschreibung

Wandelt eine Geometrie in eine Kurvendarstellung um, soweit anwendbar: Linien werden CompundCurves, MultiLines werden MultiCurves, Polygone werden zu CurvePolygons, Multipolygons werden MultiSurfaces. Wenn die Geometrie bereits in Kurvendarstellung vorliegt, wird sie unverändert zurückgegeben.

Verfügbarkeit: 2.2.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

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
  )
);
                              st_astext
----------------------------------------------------------------------
 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))
(1 row)

Siehe auch

ST_LineToCurve


Name

ST_ForcePolygonCCW — Richtet alle äußeren Ringe gegen den Uhrzeigersinn und alle inneren Ringe mit dem Uhrzeigersinn aus.

Synopsis

geometry ST_ForcePolygonCCW ( geometry geom );

Beschreibung

Zwingt (Multi)Polygone, den äusseren Ring gegen den Uhrzeigersinn und die inneren Ringe im Uhrzeigersinn zu orientieren. Andere Geometrien werden unverändert zurückgegeben.

Verfügbarkeit: 2.4.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.


Name

ST_ForcePolygonCW — Richtet alle äußeren Ringe im Uhrzeigersinn und alle inneren Ringe gegen den Uhrzeigersinn aus.

Synopsis

geometry ST_ForcePolygonCW ( geometry geom );

Beschreibung

Zwingt (Multi)Polygone, den äusseren Ring im Uhrzeigersinn und die inneren Ringe gegen den Uhrzeigersinn zu orientieren. Andere Geometrien werden unverändert zurückgegeben.

Verfügbarkeit: 2.4.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.


Name

ST_ForceSFS — Erzwingt, dass Geometrien nur vom Typ SFS 1.1 sind.

Synopsis

geometry ST_ForceSFS(geometry geomA);

geometry ST_ForceSFS(geometry geomA, text version);

Beschreibung

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.


Name

ST_ForceRHR — Orientiert die Knoten in einem Polygon so, dass sie der Drei-Finger-Regel folgen.

Synopsis

geometry ST_ForceRHR(geometry g);

Beschreibung

Orientiert die Knoten in einem Polygon so, dass sie der Drei-Finger-Regel folgen. Dadurch kommt die durch das Polygon begrenzte Fläche auf der rechten Seite der Begrenzung zu liegen. Insbesondere sind der äussere Ring im Uhrzeigersinn und die inneren Ringe gegen den Uhrzeigersinn orientiert. Diese Funktion ist ein Synonym für ST_ForcePolygonCW

[Note]

Die obere Definition mit der Drei-Finger-Regel widerspricht den Definitionen, die in anderen Zusammenhängen verwendet werden. Um Verwirrung zu vermeiden, wird die Verwendung von ST_ForcePolygonCW empfohlen.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

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))'
  )
);
                                                  st_asewkt
--------------------------------------------------------------
 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))
(1 row)

Name

ST_LineExtend — Gibt eine Linie zurück, die um die angegebenen Abstände vorwärts und rückwärts verlängert wurde.

Synopsis

geometry ST_LineExtend(geometry line, float distance_forward, float distance_backward=0.0);

Beschreibung

Gibt eine vorwärts und rückwärts verlängerte Linie zurück, indem neue Start- (und End-) Punkte in den angegebenen Abständen hinzugefügt werden. Bei einem Abstand von Null wird kein Punkt hinzugefügt. Nur nicht-negative Abstände sind erlaubt. Die Richtung des/der hinzugefügten Punkte(s) wird durch die ersten (und letzten) zwei unterschiedlichen Punkte der Linie bestimmt. Doppelte Punkte werden ignoriert.

Verfügbarkeit: 3.4.0

Beispiel: Erweitert eine Linie um 5 Einheiten vorwärts und 6 Einheiten rückwärts

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 — Konvertiert eine lineare Geometrie in eine gekrümmte Geometrie.

Synopsis

geometry ST_LineToCurve(geometry geomANoncircular);

Beschreibung

Wandelt einen einfachen LineString/Polygon in Kreisbögen/CIRCULARSTRINGs und Kurvenpolygone um. Beachten Sie, dass wesentlich weniger Punkte zur Beschreibung des Kurvenäquivalents benötigt werden.

[Note]

Wenn der gegebene LINESTRING/POLYGON nicht genug gekrümmt ist um eine deutliche Kurve zu repräsentieren, wird die Geometrie von der Funktion unverändert zurückgegeben.

Verfügbarkeit: 1.3.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

-- 2D Example
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))

--3D example
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 2.99999999999999 3,3 3 3) | LINESTRING Z (3 3 3,2.4142135623731 1.58578643762691 3,1 1 3,
                                                      | -0.414213562373092 1.5857864376269 3,-1 2.99999999999999 3,
                                                      | -0.414213562373101 4.41421356237309 3,
                                                      | 0.999999999999991 5 3,2.41421356237309 4.4142135623731 3,3 3 3)
(1 row)

Siehe auch

ST_CurveToLine


Name

ST_Multi — Gibt die Geometrie als MULTI* Geometrie zurück.

Synopsis

geometry ST_Multi(geometry geom);

Beschreibung

Gibt die Geometrie als MULTI*-Geometriesammlung zurück. Wenn die Geometrie bereits eine Sammlung ist, wird sie unverändert zurückgegeben.

Beispiele

SELECT ST_AsText(ST_Multi('POLYGON ((10 30, 30 30, 30 10, 10 10, 10 30))'));
                    st_astext
    -------------------------------------------------
    MULTIPOLYGON(((10 30,30 30,30 10,10 10,10 30)))

Siehe auch

ST_AsText


Name

ST_Normalize — Gibt die Geometrie in Normalform zurück.

Synopsis

geometry ST_Normalize(geometry geom);

Beschreibung

Gibt die Geometrie in Normalform aus. Möglicherweise werden die Knoten der Polygonringe, die Ringe eines Polygons oder die Elemente eines Komplexes von Mehrfachgeometrien neu gereiht.

Hauptsächlich für Testzwecke sinnvoll (zum Vergleich von erwarteten und erhaltenen Ergebnissen).

Verfügbarkeit: 2.3.0

Beispiele

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)
    )
  )'
)));
                                                                     st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------
 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))
(1 row)
                        

Siehe auch

ST_Equals,


Name

ST_Project — Gibt einen Punkt zurück, der von einem Startpunkt um eine bestimmte Entfernung und Peilung (Azimut) projiziert wird.

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

Beschreibung

Gibt einen Punkt zurück, der von einem Punkt entlang einer Geodäte projiziert wird, wobei eine bestimmte Entfernung und ein bestimmter Azimut (Peilung) verwendet werden. Dies ist bekannt als das direkte geodätische Problem.

Bei der Zweipunktversion wird der Weg vom ersten zum zweiten Punkt verwendet, um implizit den Azimut zu definieren, und die Entfernung wird wie zuvor verwendet.

Die Entfernung wird in Metern angegeben. Negative Werte werden unterstützt.

Der Azimut (auch als Kurs oder Peilung bezeichnet) wird im Bogenmaß angegeben. Er wird im Uhrzeigersinn vom geografischen Norden aus gemessen.

  • Norden ist Azimut Null (0 Grad)

  • Osten ist Azimut π/2 (90 Grad)

  • Süden ist Azimut π (180 Grad)

  • West ist Azimut 3π/2 (270 Grad)

Negative Azimutwerte und Werte größer als 2π (360 Grad) werden unterstützt.

Verfügbarkeit: 2.0.0

Verbessert: 2.4.0 Erlaubt negative Entfernungen und nicht-normierte Azimute.

Verbessert: 3.4.0 Erlaubt Geometrieargumente und Zweipunktform ohne Azimut.

Beispiel: Projizierter Punkt auf 100.000 Meter und Peilung 45 Grad

SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0)));
--------------------------------------------
 POINT(0.635231029125537 0.639472334729198)

Name

ST_QuantizeCoordinates — Setzt die niedrigwertigsten Bits der Koordinaten auf Null

Synopsis

geometry ST_QuantizeCoordinates ( geometry g , int prec_x , int prec_y , int prec_z , int prec_m );

Beschreibung

ST_QuantizeCoordinates ermittelt die Anzahl der Bits (N), die erforderlich sind, um einen Koordinatenwert mit einer bestimmten Anzahl von Nachkommastellen darzustellen, und setzt dann alle Bits bis auf die N höchstwertigen auf Null. Der resultierende Koordinatenwert wird immer noch auf den ursprünglichen Wert gerundet, hat aber eine verbesserte Kompressibilität. Dies kann zu einer erheblichen Verringerung der Festplattennutzung führen, vorausgesetzt, die Geometriespalte verwendet einen komprimierbaren Speichertyp. Die Funktion erlaubt die Angabe einer unterschiedlichen Anzahl von Nachkommastellen in jeder Dimension; bei nicht spezifizierten Dimensionen wird die Genauigkeit der x Dimension angenommen. Negative Ziffern werden so interpretiert, dass sie sich auf Ziffern links vom Dezimalpunkt beziehen (d.h. prec_x=-2 erhält Koordinatenwerte auf die nächsten 100.

Die von ST_QuantizeCoordinates erzeugten Koordinaten sind unabhängig von der Geometrie, die diese Koordinaten und die relative Position dieser Koordinaten in der Geometrie enthält. Daher sind vorhandene topologische Beziehungen zwischen Geometrien durch die Verwendung dieser Funktion nicht betroffen. Die Funktion erzeugt möglicherweise ungültige Geometrie, wenn sie mit einer Anzahl von Stellen aufgerufen wird, die Koordinaten innerhalb der Geometrie zusammenfallen lassen.

Verfügbarkeit: 2.5.0

Technischer Hintergrund

PostGIS speichert alle Koordinatenwerte als Gleitkommazahlen mit doppelter Genauigkeit, die 15 signifikante Stellen zuverlässig darstellen können. PostGIS kann jedoch verwendet werden, um Daten zu verwalten, die weniger als 15 signifikante Ziffern enthalten. Ein Beispiel sind TIGER-Daten, die als geografische Koordinaten mit sechs Nachkommastellen zur Verfügung gestellt werden (so dass nur neun signifikante Ziffern des Längengrads und acht signifikante Breitengrade erforderlich sind).

Wenn 15 signifikante Ziffern verfügbar sind, gibt es viele mögliche Darstellungen einer Zahl mit 9 signifikanten Ziffern. Eine Gleitkommazahl mit doppelter Genauigkeit verwendet 52 explizite Bits, um den Mantisse der Koordinate darzustellen. Nur 30 Bits werden benötigt, um eine Mantisse mit 9 signifikanten Ziffern darzustellen, wobei 22 unbedeutende Bits übrig bleiben; Wir können ihren Wert auf alles setzen, was wir wollen, und erhalten trotzdem eine zum Eingabewert passende Zahl. Beispielsweise kann der Wert 100.123456 durch die nächstliegenden Zahlen 100.123456000000, 100.123456000001 und 100.123456432199 dargestellt werden. Alle sind gleichermaßen gültig, da ST_AsText (geom, 6) bei allen dieser Eingaben das gleiche Ergebnis liefert. Da wir diese Bits auf einen beliebigen Wert setzen können, setzt ST_QuantizeCoordinates die 22 nicht signifikanten Bits auf Null. Für eine lange Koordinatensequenz wird dadurch ein Muster aus Blöcken von aufeinanderfolgenden Nullen erzeugt, das von PostgreSQL effizienter komprimiert wird.

[Note]

Von ST_QuantizeCoordinates ist möglicherweise nur die Größe der Geometrie auf der Festplatte betroffen. ST_MemSize, das die speicherinterne Verwendung der Geometrie meldet, gibt unabhängig vom von einer Geometrie belegten Speicherplatz den gleichen Wert zurück.

Beispiele

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));
st_astext
-------------------------
POINT(100.123455047607 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      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
12      | 01010000005c9a72083cdd5e405c9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
11      | 0101000000409a72083cdd5e40409a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
10      | 0101000000009a72083cdd5e40009a72083cdd5e40 | POINT(123.456789123455 123.456789123455)
9       | 0101000000009072083cdd5e40009072083cdd5e40 | POINT(123.456789123418 123.456789123418)
8       | 0101000000008072083cdd5e40008072083cdd5e40 | POINT(123.45678912336 123.45678912336)
7       | 0101000000000070083cdd5e40000070083cdd5e40 | POINT(123.456789121032 123.456789121032)
6       | 0101000000000040083cdd5e40000040083cdd5e40 | POINT(123.456789076328 123.456789076328)
5       | 0101000000000000083cdd5e40000000083cdd5e40 | POINT(123.456789016724 123.456789016724)
4       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
3       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
2       | 01010000000000000038dd5e400000000038dd5e40 | POINT(123.45654296875 123.45654296875)
1       | 01010000000000000000dd5e400000000000dd5e40 | POINT(123.453125 123.453125)
0       | 01010000000000000000dc5e400000000000dc5e40 | POINT(123.4375 123.4375)
-1      | 01010000000000000000c05e400000000000c05e40 | POINT(123 123)
-2      | 01010000000000000000005e400000000000005e40 | POINT(120 120)
-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)

Siehe auch

ST_SnapToGrid


Name

ST_RemovePoint — Einen Punkt aus einem Linienzug entfernen.

Synopsis

geometry ST_RemovePoint(geometry linestring, integer offset);

Beschreibung

Entfernt einen Punkt aus einem LineString unter Angabe seines Index (0-basiert). Nützlich, um eine geschlossene Linie (Ring) in einen offenen LineString zu verwandeln.

Verbessert: 3.2.0

Verfügbarkeit: 1.1.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Garantiert, dass keine Linien geschlossen sind, indem der Endpunkt von geschlossenen Linien (Ringen) entfernt wird. Setzt voraus, dass geom vom Typ LINESTRING ist

UPDATE sometable
        SET geom = ST_RemovePoint(geom, ST_NPoints(geom) - 1)
        FROM sometable
        WHERE ST_IsClosed(geom);

Name

ST_RemoveRepeatedPoints — Gibt eine Version einer Geometrie zurück, bei der doppelte Punkte entfernt wurden.

Synopsis

geometry ST_RemoveRepeatedPoints(geometry geom, float8 tolerance);

Beschreibung

Gibt eine Version der angegebenen Geometrie zurück, bei der doppelte aufeinanderfolgende Punkte entfernt wurden. Die Funktion verarbeitet nur (Multi)LineStrings, (Multi)Polygone und MultiPoints, kann aber mit jeder Art von Geometrie aufgerufen werden. Elemente von GeometryCollections werden einzeln verarbeitet. Die Endpunkte von LineStrings werden beibehalten.

Wenn der Parameter tolerance angegeben wird, werden Scheitelpunkte, die innerhalb des Toleranzabstands zueinander liegen, als Duplikate betrachtet.

Verbessert: 3.2.0

Verfügbarkeit: 2.2.0

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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)

Beispiel: Sammlungselemente werden einzeln bearbeitet.

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

Beispiel: Wiederholte Punktentfernung mit einer Abstandstoleranz.

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)

Siehe auch

ST_Simplify


Name

ST_Reverse — Gibt die Geometrie in umgekehrter Knotenreihenfolge zurück.

Synopsis

geometry ST_Reverse(geometry g1);

Beschreibung

Kann mit jedem geometrischen Datentyp verwendet werden; kehrt die Reihenfolge der Knoten um

Erweiterung: mit 2.4.0 wurde die Unterstützung für Kurven eingeführt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_AsText(geom) as line, ST_AsText(ST_Reverse(geom)) As reverseline
FROM
(SELECT ST_MakeLine(ST_Point(1,2),
                ST_Point(1,10)) As geom) as foo;
--result
                line         |     reverseline
---------------------+----------------------
LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)

Name

ST_Segmentize — Gibt eine geänderte Geometrie/Geografie zurück, bei der kein Segment länger als eine bestimmte Entfernung ist.

Synopsis

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

Beschreibung

Gibt eine geänderte Geometrie/Geografie zurück, bei der kein Segment länger ist als max_segment_length. Die Länge wird in 2D berechnet. Segmente werden immer in Untersegmente gleicher Länge aufgeteilt.

  • In der Geometrie wird die maximale Länge in den Einheiten des räumlichen Bezugssystems angegeben.

  • In der Geografie wird die maximale Länge in Metern angegeben. Die Entfernungen werden auf der Kugel berechnet. Hinzugefügte Scheitelpunkte werden entlang der sphärischen Großkreisbögen erstellt, die durch die Endpunkte der Segmente definiert sind.

[Note]

Dadurch werden nur lange Segmente verkürzt. Segmente, die kürzer als die maximale Länge sind, werden nicht verlängert.

[Warning]

Bei Eingaben, die lange Segmente enthalten, kann die Angabe einer relativ kurzen max_segment_length dazu führen, dass eine sehr große Anzahl von Scheitelpunkten hinzugefügt wird. Dies kann unbeabsichtigt geschehen, wenn das Argument versehentlich als Anzahl der Segmente und nicht als maximale Länge angegeben wird.

Verfügbarkeit: 1.2.2

Verbessert: 3.0.0 Segmentize-Geometrie erzeugt jetzt Teilsegmente gleicher Länge

Verbessert: 2.3.0 Die Segmentierung der Geografie erzeugt nun Teilsegmente gleicher Länge

Erweiterung: mit 2.1.0 wurde die Unterstützung des geographischen Datentyps eingeführt.

Geändert: 2.1.0 Infolge der Einführung der Geographie-Unterstützung verursacht die Verwendung ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5) einen mehrdeutigen Funktionsfehler. Die Eingabe muss korrekt als Geometrie oder Geografie eingegeben werden. Verwenden Sie ST_GeomFromText, ST_GeogFromText oder eine Umwandlung in den erforderlichen Typ (z.B. ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )

Beispiele

Segmentierung einer Zeile. Lange Segmente werden gleichmäßig aufgeteilt, kurze Segmente werden nicht aufgeteilt.

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

Segmentierung eines Polygons:

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

Segmentierung einer geografischen Linie unter Verwendung einer maximalen Segmentlänge von 2000 Kilometern. Scheitelpunkte werden entlang des Großkreisbogens hinzugefügt, der die Endpunkte verbindet.

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)

Eine geografische Linie, die entlang eines Großkreisbogens segmentiert ist


Name

ST_SetPoint — Einen Punkt eines Linienzuges durch einen gegebenen Punkt ersetzen.

Synopsis

geometry ST_SetPoint(geometry linestring, integer zerobasedposition, geometry point);

Beschreibung

Ersetzt den Punkt N eines Linienzuges mit dem gegebenen Punkt. Der Index beginnt mit 0. Negative Indizes werden rückwärts gezählt, sodasss -1 der letzte Punkt ist. Dies findet insbesondere bei Triggern verwendung, wenn man die Beziehung zwischen den Verbindungsstücken beim Verschieben von Knoten erhalten will

Verfügbarkeit: 1.1.0

Änderung: 2.3.0 : negatives Indizieren

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

--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)'));
           st_astext
-----------------------
 LINESTRING(-1 1,-1 3)

---Change last point in a line string (lets 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;
           st_asewkt
-----------------------
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
        , ST_PointN(g,1) as p;
           st_astext
-----------------------
LINESTRING(0 0,1 1,0 0,3 3,4 4)

                        

Name

ST_ShiftLongitude — Verschiebt die Längenkoordinaten einer Geometrie zwischen -180..180 und 0..360.

Synopsis

geometry ST_ShiftLongitude(geometry geom);

Beschreibung

Liest jeden Punkt/Vertex in einer Geometrie und verschiebt seine Längenkoordinate von -180..0 auf 180..360 und umgekehrt, wenn sie zwischen diesen Bereichen liegt. Diese Funktion ist symmetrisch, so dass das Ergebnis eine 0..360-Darstellung von -180..180-Daten und eine -180..180-Darstellung von 0..360-Daten ist.

[Note]

Dies ist nur für Daten mit Koordinaten in geografischer Länge/Breite nützlich, z. B. SRID 4326 (WGS 84 geografisch)

[Warning]

Pre-1.3.4 Aufgrund eines Bugs funktionierte dies für MULTIPOINT nicht. Mit 1.3.4+ funktioniert es auch mit MULTIPOINT.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen und TIN eingeführt.

Anmerkung: Vor 2.2.0 hieß diese Funktion "ST_Shift_Longitude"

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

--single point forward transformation
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(270 0)'::geometry))

st_astext
----------
POINT(-90 0)


--single point reverse transformation
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(-90 0)'::geometry))

st_astext
----------
POINT(270 0)


--for linestrings the functions affects only to the sufficient coordinates
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;LINESTRING(174 12, 182 13)'::geometry))

st_astext
----------
LINESTRING(174 12,-178 13)
        

Siehe auch

ST_WrapX


Name

ST_WrapX — Versammelt eine Geometrie um einen X-Wert

Synopsis

geometry ST_WrapX(geometry geom, float8 wrap, float8 move);

Beschreibung

Diese Funktion teilt die eingegebenen Geometrien auf und verschiebt dann jede resultierende Komponente, die rechts (bei negativem 'move') oder links (bei positivem 'move') von der gegebenen 'wrap'-Linie fällt, in die durch den 'move'-Parameter angegebene Richtung und fügt die Teile schließlich wieder zusammen.

[Note]

Nützlich, um eine Eingabe in Länge und Breite neu zu zentrieren, damit die wesentlichen Geoobjekte nicht von einer Seite bis zur anderen abgebildet werden.

Verfügbarkeit: 2.3.0 erfordert GEOS

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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

Name

ST_SnapToGrid — Fängt alle Punkte der Eingabegeometrie auf einem regelmäßigen Gitter.

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

Beschreibung

Variante 1, 2 und 3: Fängt alle Punkte der Eingabegeometrie auf den Gitterpunkten, die durch Ursprung und Gitterkästchengröße festgelegt sind. Aufeinanderfolgende Punkte, die in dasselbe Gitterkästchen fallen, werden gelöscht, wobei NULL zurückgegeben wird, wenn nicht mehr genug Punkte für den jeweiligen geometrischen Datentyp vorhanden sind. Collapsed geometries in a collection are stripped from it. Kollabierte Geometrien einer Kollektion werden von dieser entfernt. Nützlich um die Genauigkeit zu verringern.

Variante 4: wurde mit 1.1.0 eingeführt - Fängt alle Punkte der Eingabegeometrie auf den Gitterpunkten, welche durch den Ursprung des Gitters (der zweite Übergabewert muss ein Punkt sein) und die Gitterkästchengröße bestimmt sind. Geben Sie 0 als Größe für jene Dimension an, die nicht auf den Gitterpunkten gefangen werden soll.

[Note]

Die zurückgegebene Geometrie kann ihre Simplizität verlieren (siehe ST_IsSimple).

[Note]

Vor Release 1.1.0 gab diese Funktion immer eine 2D-Geometrie zurück. Ab 1.1.0 hat die zurückgegebene Geometrie dieselbe Dimensionalität wie die Eingabegemetrie, wobei höhere Dimensionen unangetastet bleiben. Verwenden Sie die Version, welche einen zweiten geometrischen Übergabewert annimmt, um sämtliche Grid-Dimensionen zu bestimmen.

Verfügbarkeit: 1.0.0RC1

Verfügbarkeit: 1.1.0, Unterstützung für Z und M

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

--Snap your 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)
                );
                          st_astext
-------------------------------------
 LINESTRING(1.112 2.123,4.111 3.237)
 --Snap 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) );
                                                                  st_asewkt
------------------------------------------------------------------------------
 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)      );
                                                st_asewkt
---------------------------------------------------------
 LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)

                

Name

ST_Snap — Fängt die Segmente und Knoten einer Eingabegeometrie an den Knoten einer Referenzgeometrie.

Synopsis

geometry ST_Snap(geometry input, geometry reference, float tolerance);

Beschreibung

Fängt die Knoten und Segmente einer Geometrie an den Knoten einer anderen Geometrie. Eine Entfernungstoleranz bestimmt, wo das Fangen durchgeführt wird. Die Ergebnisgeometrie ist die Eingabegeometrie mit gefangenen Knoten. Wenn kein Fangen auftritt, wird die Eingabegeometrie unverändert ausgegeben..

Eine Geometrie an einer anderen zu fangen, kann die Robustheit von Überlagerungs-Operationen verbessern, indem nahe zusammenfallende Kanten beseitigt werden (diese verursachen Probleme bei der Knoten- und Verschneidungsberechnung).

Übermäßiges Fangen kann zu einer invaliden Topologie führen. Die Anzahl und der Ort an dem Knoten sicher gefangen werden können wird mittels Heuristik bestimmt. Dies kann allerdings dazu führen, dass einige potentielle Knoten nicht gefangen werden.

[Note]

Die zurückgegebene Geometrie kann ihre Simplizität (see ST_IsSimple) und Valididät (see ST_IsValid) verlieren.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 2.0.0

Beispiele

Ein Mehrfachpolygon mit einem Linienzug (vor dem Fangen)

Ein Mehrfachpolygon das an einem Linienzug gefangen wird; die Toleranz beträgt 1.01 der Entfernung. Das neue Mehrfachpolygon wird mit dem betreffenden Linienzug angezeigt.

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;

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

Ein Mehrfachpolygon das an einem Linienzug gefangen wird; die Toleranz beträgt 1.25 der Entfernung. Das neue Mehrfachpolygon wird mit dem betreffenden Linienzug angezeigt.

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;

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

Ein Linienzug der an dem ursprünglichen Mehrfachpolygon gefangen wird; die Toleranz beträgt 1.01 der Entfernung. Das neue Linienzug wird mit dem betreffenden Mehrfachpolygon angezeigt.

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;

              linesnapped
----------------------------------------
 LINESTRING(5 107,26 125,54 84,101 100)
                                

Ein Linienzug der an dem ursprünglichen Mehrfachpolygon gefangen wird; die Toleranz beträgt 1.25 der Entfernung. Das neue Linienzug wird mit dem betreffenden Mehrfachpolygon angezeigt.

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;
              linesnapped
---------------------------------------
LINESTRING(26 125,54 84,101 100)
                                

Siehe auch

ST_SnapToGrid


Name

ST_SwapOrdinates — Gibt eine Version der Ausgangsgeometrie zurück, in der die angegebenen Ordinatenwerte ausgetauscht werden.

Synopsis

geometry ST_SwapOrdinates(geometry geom, cstring ords);

Beschreibung

Gibt eine Version der Ausgangsgeometrie zurück, in der die angegebenen Ordinaten ausgetauscht werden.

Der ords Parameter ist eine Zeichenkette aus 2 Zeichen, welche die Ordinate benennt die getauscht werden soll. Gültige Bezeichnungen sind: x,y,z und m.

Verfügbarkeit: 2.2.0

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt M-Koordinaten.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiel

-- Scale 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;
     st_astext
--------------------
 POINT ZM (0 0 0 4)
                 

Siehe auch

ST_FlipCoordinates

7.6. Geometrievalidierung

Abstract

Diese Funktionen prüfen, ob die Geometrien gemäß dem OGC SFS-Standard gültig sind. Sie liefern auch Informationen über die Art und den Ort der Ungültigkeit. Es gibt auch eine Funktion zur Erstellung einer gültigen Geometrie aus einer ungültigen.

  • ST_IsValid — Prüft, ob eine Geometrie in 2D wohlgeformt ist.
  • ST_IsValidDetail — Gibt eine Zeile valid_detail zurück, die angibt, ob eine Geometrie gültig ist oder, falls nicht, einen Grund und einen Ort.
  • ST_IsValidReason — Gibt einen Text zurück, der angibt, ob eine Geometrie gültig ist, oder einen Grund für die Ungültigkeit.
  • ST_MakeValid — Versucht, eine ungültige Geometrie gültig zu machen, ohne dass Scheitelpunkte verloren gehen.

Name

ST_IsValid — Prüft, ob eine Geometrie in 2D wohlgeformt ist.

Synopsis

boolean ST_IsValid(geometry g);

boolean ST_IsValid(geometry g, integer flags);

Beschreibung

Prüft, ob ein ST_Geometry-Wert wohlgeformt und in 2D gemäß den OGC-Regeln gültig ist. Bei Geometrien mit 3 und 4 Dimensionen wird die Gültigkeit weiterhin nur in 2 Dimensionen geprüft. Für Geometrien, die ungültig sind, wird ein PostgreSQL-NOTICE ausgegeben, der die Gründe für die Ungültigkeit angibt.

Für die Version mit dem Parameter flags sind die unterstützten Werte in ST_IsValidDetail dokumentiert. Diese Version druckt keinen HINWEIS, der die Ungültigkeit erklärt.

Weitere Informationen über die Definition der Geometriegültigkeit finden Sie unter Section 4.4, “Geometrievalidierung”

[Note]

SQL-MM definiert das Ergebnis von ST_IsValid(NULL) als 0, während PostGIS NULL zurückgibt.

Wird vom GEOS Modul ausgeführt

Die Version, die Flaggen akzeptiert, ist ab 2.0.0 verfügbar.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.9

[Note]

Weder die OGC-SFS- noch die SQL-MM-Spezifikationen enthalten ein Flag-Argument für ST_IsValid. Das Flag ist eine PostGIS-Erweiterung.

Beispiele

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
--results
NOTICE:  Self-intersection at or near point 0 0
 good_line | bad_poly
-----------+----------
 t         | f

Name

ST_IsValidDetail — Gibt eine Zeile valid_detail zurück, die angibt, ob eine Geometrie gültig ist oder, falls nicht, einen Grund und einen Ort.

Synopsis

valid_detail ST_IsValidDetail(geometry geom, integer flags);

Beschreibung

Gibt eine Zeile valid_detail zurück, die einen booleschen Wert (valid) enthält, der angibt, ob eine Geometrie gültig ist, einen varchar-Wert (reason), der einen Grund angibt, warum sie ungültig ist, und eine Geometrie (location), die angibt, wo sie ungültig ist.

Nützlich zur Verbesserung der Kombination von ST_IsValid und ST_IsValidReason, um einen detaillierten Bericht über ungültige Geometrien zu erstellen.

Der optionale Parameter flags ist ein Bitfeld. Er kann die folgenden Werte haben:

  • 0: Verwendung der üblichen OGC SFS-Gültigkeitssemantik.

  • 1: Bestimmte Arten von sich selbst berührenden Ringen (umgekehrte Schalen und umgekehrte Löcher) als gültig betrachten. Dies ist auch als "ESRI-Flagge" bekannt, da dies das von diesen Werkzeugen verwendete Gültigkeitsmodell ist. Beachten Sie, dass dies nach dem OGC-Modell ungültig ist.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 2.0.0

Beispiele


--First 3 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     |        |



Name

ST_IsValidReason — Gibt einen Text zurück, der angibt, ob eine Geometrie gültig ist, oder einen Grund für die Ungültigkeit.

Synopsis

text ST_IsValidReason(geometry geomA);

text ST_IsValidReason(geometry geomA, integer flags);

Beschreibung

Gibt einen Text zurück, der angibt, ob eine Geometrie gültig ist, oder, falls ungültig, einen Grund dafür.

Nützlich in Kombination mit ST_IsValid, um einen detaillierten Bericht über ungültige Geometrien und Gründe zu erstellen.

Erlaubte Flaggen sind in ST_IsValidDetail dokumentiert.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 1.4

Verfügbarkeit: Version 2.0 mit Flaggen.

Beispiele

-- invalid bow-tie polygon
SELECT ST_IsValidReason(
    'POLYGON ((100 200, 100 100, 200 200,
     200 100, 100 200))'::geometry) as validity_info;
validity_info
--------------------------
Self-intersection[150 150]
        

--First 3 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



Name

ST_MakeValid — Versucht, eine ungültige Geometrie gültig zu machen, ohne dass Scheitelpunkte verloren gehen.

Synopsis

geometry ST_MakeValid(geometry input);

geometry ST_MakeValid(geometry input, text params);

Beschreibung

Die Funktion versucht, eine gültige Darstellung einer gegebenen ungültigen Geometrie zu erstellen, ohne dass einer der Eingabepunkte verloren geht. Gültige Geometrien werden unverändert zurückgegeben.

Unterstützte Eingaben sind: PUNKTE, MEHRPUNKTE, LINIENSTRÄNGE, MEHRLINIENSTRÄNGE, POLYGONEN, MEHRPOLYGONEN und GEOMETRIESAMMLUNGEN, die eine beliebige Mischung dieser Elemente enthalten.

Bei vollständiger oder teilweiser Dimensionsreduzierung kann die Ausgangsgeometrie eine Sammlung von Geometrien mit geringerer bis gleicher Dimension oder eine Geometrie mit geringerer Dimension sein.

Einzelne Polygone können im Falle von Selbstüberschneidungen zu Multi-Geometrien werden.

Mit dem Argument params kann eine Optionszeichenfolge angegeben werden, mit der die Methode für die Erstellung gültiger Geometrien ausgewählt wird. Die Optionszeichenfolge hat das Format "method=linework|structure keepcollapsed=true|false". Wird kein "params"-Argument angegeben, wird standardmäßig der "linework"-Algorithmus verwendet.

Der Schlüssel "Methode" hat zwei Werte.

  • "linework" ist der ursprüngliche Algorithmus, der gültige Geometrien erstellt, indem er zunächst alle Linien extrahiert, diese Linien zusammen kodiert und dann einen Wert aus dem Linienwerk ausgibt.

  • "Struktur" ist ein Algorithmus, der zwischen inneren und äußeren Ringen unterscheidet und eine neue Geometrie erstellt, indem er äußere Ringe zusammenfasst und dann alle inneren Ringe differenziert.

Der Schlüssel "keepcollapsed" ist nur für den Algorithmus "structure" gültig und nimmt den Wert "true" oder "false" an. Wenn er auf "false" gesetzt ist, werden Geometriekomponenten, die auf eine niedrigere Dimensionalität kollabieren, z. B. ein Ein-Punkt-Linienzug, fallengelassen.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 2.0.0

Verbessert: 2.0.1, Geschwindigkeitsverbesserungen

Verbessert: 2.1.0, Unterstützung für GEOMETRYCOLLECTION und MULTIPOINT hinzugefügt.

Verbessert: 3.1.0, Entfernen von Koordinaten mit NaN-Werten hinzugefügt.

Verbessert: 3.2.0, zusätzliche Algorithmus-Optionen, 'Linienwerk' und 'Struktur', die GEOS >= 3.10.0 erfordern.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

vor_geom: MULTIPOLYGON aus 2 sich überlappenden Polygonen

nach_geom: MULTIPOLYGON aus 4 sich nicht überlappenden Polygonen

after_geom_structure: MULTIPOLYGON aus 1 nicht überlappenden 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;

vor_geom: MULTIPOLYGON aus 6 sich überschneidenden Polygonen

nach_geom: MULTIPOLYGON aus 14 nicht überlappenden Polygonen

after_geom_structure: MULTIPOLYGON aus 1 nicht überlappendem 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;

Beispiele

SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=true'
    ));

 st_astext
------------
 POINT(0 0)


SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=false'
    ));

    st_astext
------------------
 LINESTRING EMPTY

7.7. Funktionen des räumlichen Bezugssystems

Abstract

Diese Funktionen arbeiten mit dem räumlichen Bezugssystem der Geometrien, wie es in der Tabelle spatial_ref_sys definiert ist.

  • ST_InverseTransformPipeline — Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten unter Verwendung der Umkehrung einer definierten Koordinatentransformationspipeline.
  • ST_SetSRID — Legen Sie den SRID für eine Geometrie fest.
  • ST_SRID — Gibt die Raumbezugskennung für eine Geometrie zurück.
  • ST_Transform — Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten.
  • ST_TransformPipeline — Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten unter Verwendung einer definierten Koordinatentransformationspipeline.
  • postgis_srs_codes — Gibt die Liste der SRS-Codes zurück, die mit der angegebenen Behörde verbunden sind.
  • postgis_srs — Rückgabe eines Metadatensatzes für die angefragte Behörde und srid.
  • postgis_srs_all — Gibt Metadatensätze für jedes räumliche Bezugssystem in der zugrunde liegenden Proj-Datenbank zurück.
  • postgis_srs_search — Gibt Metadatensätze für projizierte Koordinatensysteme zurück, die Nutzungsbereiche haben, die den Parameter bounds vollständig enthalten.

Name

ST_InverseTransformPipeline — Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten unter Verwendung der Umkehrung einer definierten Koordinatentransformationspipeline.

Synopsis

geometry ST_InverseTransformPipeline(geometry geom, text pipeline, integer to_srid);

Beschreibung

Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten unter Verwendung einer definierten Koordinatentransformationspipeline, die in umgekehrter Richtung verläuft.

Einzelheiten zum Schreiben einer Transformationspipeline finden Sie unter ST_TransformPipeline.

Verfügbarkeit: 3.4.0

Die SRID der Eingabegeometrie wird ignoriert, und die SRID der Ausgabegeometrie wird auf Null gesetzt, sofern nicht über den optionalen Parameter to_srid ein Wert angegeben wird. Bei Verwendung von ST_TransformPipeline wird die Pipeline in Vorwärtsrichtung ausgeführt. Bei Verwendung von `ST_InverseTransformPipeline()` wird die Pipeline in umgekehrter Richtung ausgeführt.

Transformationen unter Verwendung von Pipelines sind eine spezialisierte Version von ST_Transform. In den meisten Fällen wählt "ST_Transform" die richtigen Operationen für die Konvertierung zwischen Koordinatensystemen und sollte daher bevorzugt werden.

Beispiele

Ändern Sie WGS 84 long lat in UTM 31N unter Verwendung der Konvertierung EPSG:16031

-- Inverse direction
SELECT ST_AsText(ST_InverseTransformPipeline('POINT(426857.9877165967 5427937.523342293)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::16031')) AS wgs_geom;

          wgs_geom
----------------------------
 POINT(2 48.99999999999999)
(1 row)
    

Beispiel GDA2020.

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

                 gda2020_auto
-----------------------------------------------
 POINT(143.00000635638918 -36.999986706128176)
(1 row)
    

Name

ST_SetSRID — Legen Sie den SRID für eine Geometrie fest.

Synopsis

geometry ST_SetSRID(geometry geom, integer srid);

Beschreibung

Setzt den SRID einer Geometrie auf einen bestimmten Integer-Wert. Nützlich bei der Erstellung von Begrenzungsrahmen für Abfragen.

[Note]

Diese Funktion transformiert die Geometriekoordinaten in keiner Weise - sie setzt lediglich die Metadaten, die das räumliche Bezugssystem definieren, in dem die Geometrie angenommen wird. Verwenden Sie ST_Transform, wenn Sie die Geometrie in eine neue Projektion transformieren möchten.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

-- Markieren Sie einen Punkt als WGS 84 long lat --

SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611),4326) As wgs84long_lat;
-- the ewkt representation (wrap with ST_AsEWKT) -
SRID=4326;POINT(-123.365556 48.428611)
      

-- Markieren Sie einen Punkt als WGS 84 long lat und transformieren Sie ihn dann in den Web-Mercator (Spherical Mercator).

SELECT ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326),3785) As spere_merc;
-- the ewkt representation (wrap with ST_AsEWKT) -
SRID=3785;POINT(-13732990.8753491 6178458.96425423)
      

Name

ST_SRID — Gibt die Raumbezugskennung für eine Geometrie zurück.

Synopsis

integer ST_SRID(geometry g1);

Beschreibung

Liefert die Kennung des Raumbezugs für die ST_Geometrie, wie in der Tabelle spatial_ref_sys definiert. Section 4.5, “Räumliche Bezugssysteme”

[Note]

Die Tabelle spatial_ref_sys ist eine Tabelle, die alle PostGIS bekannten räumlichen Bezugssysteme katalogisiert und für Transformationen von einem räumlichen Bezugssystem in ein anderes verwendet wird. Daher ist es wichtig, dass Sie die richtige Kennung für das räumliche Bezugssystem haben, wenn Sie Ihre Geometrien transformieren möchten.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.5

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));
    --result
    4326
    

Name

ST_Transform — Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten.

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

Beschreibung

Gibt eine neue Geometrie zurück, deren Koordinaten in ein anderes räumliches Bezugssystem transformiert wurden. Der Ziel-Raumbezug to_srid kann durch einen gültigen SRID-Integer-Parameter identifiziert werden (d. h. er muss in der Tabelle spatial_ref_sys vorhanden sein). Alternativ kann ein als PROJ.4-String definierter Raumbezug für to_proj und/oder from_proj verwendet werden, allerdings sind diese Methoden nicht optimiert. Wenn das Ziel-Raumbezugssystem durch einen PROJ.4-String anstelle eines SRID ausgedrückt wird, wird der SRID der Ausgangsgeometrie auf Null gesetzt. Mit Ausnahme der Funktionen mit from_proj müssen Eingabegeometrien einen definierten SRID haben.

ST_Transform wird oft mit ST_SetSRID verwechselt. ST_Transform ändert tatsächlich die Koordinaten einer Geometrie von einem räumlichen Bezugssystem in ein anderes, während ST_SetSRID() lediglich den SRID-Bezeichner der Geometrie ändert.

ST_Transform wählt automatisch eine geeignete Konvertierungspipeline für das Quell- und Ziel-Raumbezugssystem aus. Um eine bestimmte Konvertierungsmethode zu verwenden, verwenden Sie ST_TransformPipeline.

[Note]

Erfordert, dass PostGIS mit PROJ-Unterstützung kompiliert ist. Verwenden Sie PostGIS_Full_Version, um zu bestätigen, dass Sie PROJ-Unterstützung einkompiliert haben.

[Note]

Wenn mehr als eine Transformation verwendet wird, ist es sinnvoll, einen funktionalen Index für die am häufigsten verwendeten Transformationen zu haben, um die Vorteile der Indexnutzung zu nutzen.

[Note]

Vor 1.3.4 ist diese Funktion abgestürzt, wenn die Geometrien CURVES enthalten. Dies wurde mit 1.3.4+ behoben

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Verbessert: In Version 2.3.0 wurde die Unterstützung für direkten PROJ.4 Text eingeführt.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.6

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

Änderung der Geometrie der Ebene des Bundesstaates Massachusetts von US-Fuß auf WGS 84 long lat

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
  743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom;

 wgs_geom
---------------------------
 POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,
-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.177684
8522251 42.3902896512902));
(1 row)

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

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

    

Beispiel für die Erstellung eines partiellen funktionalen Indexes. Für Tabellen, bei denen Sie nicht sicher sind, dass alle Geometrien ausgefüllt werden, ist es am besten, einen partiellen Index zu verwenden, der Null-Geometrien auslässt, was sowohl Platz spart als auch Ihren Index kleiner und effizienter macht.

CREATE INDEX idx_geom_26986_parcels
  ON parcels
  USING gist
  (ST_Transform(geom, 26986))
  WHERE geom IS NOT NULL;
    

Beispiele für die Verwendung von PROJ.4 Text zur Transformation mit benutzerdefinierten räumlichen Bezügen.

-- 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;
                                          st_astext
 --------------------------------------------------------------------------------
  POLYGON((-170 74.053793645338,-141 73.4268621378904,-141 68,-170 68,-170 74.053793645338))
    

Konfigurieren des Transformationsverhaltens

Manchmal kann eine Koordinatentransformation, die eine Rasterverschiebung beinhaltet, fehlschlagen, z.B. wenn PROJ.4 nicht mit Rasterverschiebungsdateien erstellt wurde oder die Koordinate nicht innerhalb des Bereichs liegt, für den die Rasterverschiebung definiert ist. Standardmäßig gibt PostGIS einen Fehler aus, wenn keine Rasterverschiebungsdatei vorhanden ist, aber dieses Verhalten kann auf einer pro-SRID-Basis konfiguriert werden, indem entweder verschiedene to_proj Werte des PROJ.4-Textes getestet oder der proj4text Wert in der spatial_ref_sys Tabelle geändert wird.

Der proj4text-Parameter +datum=NAD87 ist zum Beispiel eine Kurzform für den folgenden +nadgrids-Parameter:

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat

Das Präfix @ bedeutet, dass kein Fehler gemeldet wird, wenn die Dateien nicht vorhanden sind, aber wenn das Ende der Liste erreicht wird, ohne dass eine Datei gefunden wurde (d. h. gefunden und überschneidend), wird ein Fehler ausgegeben.

Wenn Sie dagegen sicherstellen wollten, dass zumindest die Standarddateien vorhanden sind, aber wenn alle Dateien ohne Treffer durchsucht wurden, eine Nulltransformation angewendet wird, könnten Sie dies verwenden:

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null

Die Null-Rasterverschiebungsdatei ist eine gültige Rasterverschiebungsdatei, die die ganze Welt abdeckt und keine Verschiebung anwendet. Wenn Sie also PostGIS so ändern wollten, dass bei Transformationen zu SRID 4267, die nicht im korrekten Bereich liegen, kein ERROR ausgelöst wird, würden Sie das folgende Beispiel verwenden:

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 — Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten unter Verwendung einer definierten Koordinatentransformationspipeline.

Synopsis

geometry ST_TransformPipeline(geometry g1, text pipeline, integer to_srid);

Beschreibung

Rückgabe einer neuen Geometrie mit in ein anderes räumliches Bezugssystem transformierten Koordinaten unter Verwendung einer definierten Koordinatentransformationspipeline.

Transformations-Pipelines werden mit einem der folgenden String-Formate definiert:

  • urn:ogc:def:coordinateOperation:AUTHORITY::CODE. Beachten Sie, dass ein einfacher EPSG:CODE String eine Koordinatenoperation nicht eindeutig identifiziert: Der gleiche EPSG-Code kann für eine CRS-Definition verwendet werden.

  • Eine PROJ-Pipeline-Zeichenkette in der Form: +proj=pipeline .... Die automatische Achsennormalisierung wird nicht angewendet, und der Aufrufer muss gegebenenfalls einen zusätzlichen Pipelineschritt hinzufügen oder axisswap Schritte entfernen.

  • Verkettete Operationen der Form: urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618.

Verfügbarkeit: 3.4.0

Die SRID der Eingangsgeometrie wird ignoriert, und die SRID der Ausgangsgeometrie wird auf Null gesetzt, sofern nicht über den optionalen Parameter to_srid ein Wert angegeben wird. Bei Verwendung von `ST_TransformPipeline()` wird die Pipeline in Vorwärtsrichtung ausgeführt. Bei Verwendung von ST_InverseTransformPipeline wird die Pipeline in der umgekehrten Richtung ausgeführt.

Transformationen unter Verwendung von Pipelines sind eine spezialisierte Version von ST_Transform. In den meisten Fällen wählt "ST_Transform" die richtigen Operationen für die Konvertierung zwischen Koordinatensystemen und sollte daher bevorzugt werden.

Beispiele

Ändern Sie WGS 84 long lat in UTM 31N unter Verwendung der Konvertierung EPSG:16031

-- Forward direction
SELECT ST_AsText(ST_TransformPipeline('SRID=4326;POINT(2 49)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::16031') AS utm_geom);

                  utm_geom
--------------------------------------------
 POINT(426857.9877165967 5427937.523342293)
(1 row)

-- Inverse direction
SELECT ST_AsText(ST_InverseTransformPipeline('POINT(426857.9877165967 5427937.523342293)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::16031')) AS wgs_geom;

          wgs_geom
----------------------------
 POINT(2 48.99999999999999)
(1 row)
    

Beispiel GDA2020.

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

                 gda2020_auto
-----------------------------------------------
 POINT(143.00000635638918 -36.999986706128176)
(1 row)

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

                   gda2020_code
----------------------------------------------
 POINT(143.0000063280214 -36.999986718287545)
(1 row)

-- using a PROJ pipeline definition matching EPSG:8447, as returned from
-- 'projinfo -s EPSG:4939 -t EPSG:7844'.
-- NOTE: 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;

                   gda2020_pipeline
----------------------------------------------
 POINT(143.0000063280214 -36.999986718287545)
(1 row)
    

Name

postgis_srs_codes — Gibt die Liste der SRS-Codes zurück, die mit der angegebenen Behörde verbunden sind.

Synopsis

setof text postgis_srs_codes(text auth_name);

Beschreibung

Gibt eine Menge aller auth_srid für den angegebenen auth_name zurück.

Verfügbarkeit: 3.4.0

Proj Version 6+

Beispiele

Geben Sie die ersten zehn Codes für die EPSG-Behörde an.

SELECT * FROM postgis_srs_codes('EPSG') LIMIT 10;

 postgis_srs_codes
-------------------
 2000
 20004
 20005
 20006
 20007
 20008
 20009
 2001
 20010
 20011
    

Name

postgis_srs — Rückgabe eines Metadatensatzes für die angefragte Behörde und srid.

Synopsis

setof record postgis_srs(text auth_name, text auth_srid);

Beschreibung

Gibt einen Metadatensatz für den angeforderten auth_srid für den angegebenen auth_name zurück. Der Datensatz enthält den auth_name, auth_srid, srname, srtext, proj4text und die Ecken des Nutzungsbereichs, point_sw und point_ne.

Verfügbarkeit: 3.4.0

Proj Version 6+

Beispiele

Abrufen der Metadaten für 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 — Gibt Metadatensätze für jedes räumliche Bezugssystem in der zugrunde liegenden Proj-Datenbank zurück.

Synopsis

setof Datensatz postgis_srs_all(void);

Beschreibung

Gibt eine Menge aller Metadatensätze in der zugrunde liegenden Proj-Datenbank zurück. Die Datensätze haben die Bezeichnungen auth_name, auth_srid, srname, srtext, proj4text und die Ecken des Verwendungsbereichs, point_sw und point_ne.

Verfügbarkeit: 3.4.0

Proj Version 6+

Beispiele

Abruf der ersten 10 Metadatensätze aus der Proj-Datenbank.

SELECT auth_name, auth_srid, srname FROM postgis_srs_all() LIMIT 10;

 auth_name | auth_srid |                  srname
-----------+-----------+------------------------------------------
 EPSG      | 2000      | Anguilla 1957 / British West Indies Grid
 EPSG      | 20004     | Pulkovo 1995 / Gauss-Kruger zone 4
 EPSG      | 20005     | Pulkovo 1995 / Gauss-Kruger zone 5
 EPSG      | 20006     | Pulkovo 1995 / Gauss-Kruger zone 6
 EPSG      | 20007     | Pulkovo 1995 / Gauss-Kruger zone 7
 EPSG      | 20008     | Pulkovo 1995 / Gauss-Kruger zone 8
 EPSG      | 20009     | Pulkovo 1995 / Gauss-Kruger zone 9
 EPSG      | 2001      | Antigua 1943 / British West Indies Grid
 EPSG      | 20010     | Pulkovo 1995 / Gauss-Kruger zone 10
 EPSG      | 20011     | Pulkovo 1995 / Gauss-Kruger zone 11    

7.8. Geometrische Konstruktoren

Abstract

Diese Funktionen erstellen geometrische Objekte aus unterschiedlichen Text- oder Binärformaten.

7.8.1. Well-known-Text (WKT) Repräsentation

  • ST_BdPolyFromText — Konstruiert ein Polygon aus einer beliebigen Ansammlung von geschlossenen Linienzügen, welche als MultiLineString in der Well-Known Text Darstellung vorliegen müssen.
  • ST_BdMPolyFromText — Konstruiert ein MultiPolygon aus einer beliebigen Ansammlung von geschlossenen Linienzügen, welche als MultiLineString in der Well-Known Text Darstellung vorliegen müssen.
  • ST_GeogFromText — Gibt einen geographischen Datentyp aus einer Well-known-Text (WKT), oder einer erweiterten WKT (EWKT), Darstellung zurück.
  • ST_GeographyFromText — Gibt einen geographischen Datentyp aus einer Well-known-Text (WKT), oder einer erweiterten WKT (EWKT), Darstellung zurück.
  • ST_GeomCollFromText — Erzeugt eine Sammelgeometrie mit der gegebenen SRID aus einer WKT-Kollektion. Wenn keine SRID angegeben ist, wird diese standardmäßig auf 0 gesetzt.
  • ST_GeomFromEWKT — Gibt einen spezifizierten ST_Geometry-Wert von einer erweiterten Well-known-Text Darstellung (EWKT) zurück.
  • ST_GeomFromMARC21 — Nimmt MARC21/XML-Geodaten als Eingabe und gibt ein PostGIS-Geometrieobjekt zurück.
  • ST_GeometryFromText — Gibt einen spezifizierten ST_Geometry-Wert von einer Well-known-Text Darstellung (WKT) zurück. Die Bezeichnung ist ein Alias für ST_GeomFromText
  • ST_GeomFromText — Gibt einen spezifizierten ST_Geometry Wert aus einer Well-known-Text Darstellung (WKT) zurück.
  • ST_LineFromText — Erzeugt eine Geometrie aus einer WKT Darstellung mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.
  • ST_MLineFromText — Liest einen festgelegten ST_MultiLineString Wert von einer WKT-Darstellung aus.
  • ST_MPointFromText — Erzeugt eine Geometrie aus WKT mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.
  • ST_MPolyFromText — Erzeugt eine MultiPolygon Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt.
  • ST_PointFromText — Erzeugt eine Punktgeometrie mit gegebener SRID von WKT. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt.
  • ST_PolygonFromText — Erzeugt eine Geometrie aus WKT mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.
  • ST_WKTToSQL — Gibt einen spezifizierten ST_Geometry-Wert von einer Well-known-Text Darstellung (WKT) zurück. Die Bezeichnung ist ein Alias für ST_GeomFromText

Name

ST_BdPolyFromText — Konstruiert ein Polygon aus einer beliebigen Ansammlung von geschlossenen Linienzügen, welche als MultiLineString in der Well-Known Text Darstellung vorliegen müssen.

Synopsis

geometry ST_BdPolyFromText(text WKT, integer srid);

Beschreibung

Konstruiert ein Polygon aus einer beliebigen Ansammlung von geschlossenen Linienzügen, welche als MultiLineString in der Well-Known Text Darstellung vorliegen müssen.

[Note]

Meldet einen Fehler, wenn es sich bei dem WKT nicht um einen MULTILINESTRING handelt. Meldet einen Fehler, wenn die Ausgabe ein MULTIPOLYGON ist; in diesem Fall verwenden Sie bitte ST_BdMPolyFromText, oder vergleichen ST_BuildArea() für einen PostGIS orientierten Ansatz.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 1.1.0


Name

ST_BdMPolyFromText — Konstruiert ein MultiPolygon aus einer beliebigen Ansammlung von geschlossenen Linienzügen, welche als MultiLineString in der Well-Known Text Darstellung vorliegen müssen.

Synopsis

geometry ST_BdMPolyFromText(text WKT, integer srid);

Beschreibung

Konstruiert ein Polygon aus einer beliebigen Ansammlung von geschlossenen Linienzügen, Polygonen und MultiLineStrings, welche in der Well-Known Text Darstellung vorliegen müssen.

[Note]

Meldet einen Fehler wenn der WKT kein MULTILINESTRING ist. Erzwingt die MULTIPOLYGON Ausgabe sogar dann, wenn das Ergebnis nur aus einem einzelnen POLYGON besteht; verwenden Sie bitte ST_BdPolyFromText , wenn Sie sicher sind, daß nur ein einzelnes POLYGON entsteht, oder vegleichen Sie ST_BuildArea() für einen PostGIS orientierten Ansatz.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 1.1.0


Name

ST_GeogFromText — Gibt einen geographischen Datentyp aus einer Well-known-Text (WKT), oder einer erweiterten WKT (EWKT), Darstellung zurück.

Synopsis

geography ST_GeogFromText(text EWKT);

Beschreibung

Gibt ein geographisches Objekt in der Well-known-Text oder in der erweiterten Well-known-Text Darstellung zurück. Falls nicht angegeben, wird die SRID 4326 angenommen. Dies ist ein Alias für ST_GeographyFromText. Punkte werden immer in Form von Länge und Breite ausgedrückt.

Beispiele

--- converting lon lat coords 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)'));
                        

Name

ST_GeographyFromText — Gibt einen geographischen Datentyp aus einer Well-known-Text (WKT), oder einer erweiterten WKT (EWKT), Darstellung zurück.

Synopsis

geography ST_GeographyFromText(text EWKT);

Beschreibung

Gibt ein geographisches Objekt in der Well-known-Text Darstellung zurück. Falls nicht angegeben, wird die SRID 4326 angenommen.


Name

ST_GeomCollFromText — Erzeugt eine Sammelgeometrie mit der gegebenen SRID aus einer WKT-Kollektion. Wenn keine SRID angegeben ist, wird diese standardmäßig auf 0 gesetzt.

Synopsis

geometry ST_GeomCollFromText(text WKT, integer srid);

geometry ST_GeomCollFromText(text WKT);

Beschreibung

Erzeugt eine Sammelgeometrie mit der gegebenen SRID aus einer Well-known-Text (WKT) Darstellung. Wenn keine SRID angegeben ist, wird diese standardmäßig auf 0 gesetzt.

OGC SPEC 3.2.6.2 - Die Option SRID stammt aus dem Konformitätstest

Gibt NULL zurück, wenn der WKT keine GEOMETRYCOLLECTION ist

[Note]

Verwenden Sie diese Funktion nicht, wenn Sie sich vollkommen sicher sind, dass ihre WKT Geometrie eine Sammelgeometrie ist. Sie ist langsamer als ST_GeomFromText, da sie einen zusätzlicher Validierungsschritt ausführt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um.

Beispiele

SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))');

Name

ST_GeomFromEWKT — Gibt einen spezifizierten ST_Geometry-Wert von einer erweiterten Well-known-Text Darstellung (EWKT) zurück.

Synopsis

geometry ST_GeomFromEWKT(text EWKT);

Beschreibung

Erzeugt ein PostGIS ST_Geometry Objekt aus der erweiterten OGC Well-known-Text (EWKT) Darstellung.

[Note]

EWKT ist kein Format des OGC Standards, sondern ein PostGIS eigenes Format, welches den Identifikator (SRID) des räumlichen Koordinatenreferenzsystem mit einbindet

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen und TIN eingeführt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

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)');
--Polyhedral Surface example
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))
)');

Name

ST_GeomFromMARC21 — Nimmt MARC21/XML-Geodaten als Eingabe und gibt ein PostGIS-Geometrieobjekt zurück.

Synopsis

geometry ST_GeomFromMARC21 ( text marcxml );

Beschreibung

Diese Funktion erstellt eine PostGIS-Geometrie aus einem MARC21/XML-Datensatz, der einen POINT oder ein POLYGON enthalten kann. Bei mehreren geografischen Dateneinträgen im selben MARC21/XML-Datensatz wird ein MULTIPOINT oder MULTIPOLYGON zurückgegeben. Wenn der Datensatz gemischte Geometrietypen enthält, wird GEOMETRYCOLLECTION zurückgegeben. Es wird NULL zurückgegeben, wenn der MARC21/XML-Datensatz keine geografischen Daten enthält (Datenfeld:034).

LOC MARC21/XML-Versionen werden unterstützt:

Verfügbarkeit: 3.3.0, erfordert libxml2 2.6+

[Note]

MARC21/XML Coded Cartographic Mathematical Data bietet derzeit keine Möglichkeit, das räumliche Bezugssystem der kodierten Koordinaten zu beschreiben, so dass diese Funktion immer eine Geometrie mit SRID 0 zurückgibt.

[Note]

Die zurückgegebenen POLYGON Geometrien sind immer im Uhrzeigersinn ausgerichtet.

Beispiele

Konvertierung von MARC21/XML-Geodaten, die einen einzelnen POINT enthalten, kodiert als 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
>'));

                st_astext
                -------------------
                POINT(-4.5 54.25)
                (1 row)

            

Konvertierung von MARC21/XML-Geodaten, die eine einzelne POLYGON kodiert als 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
>'));

                st_astext
                -----------------------------------------------------------------------------------------------------------------------
                POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65))
                (1 row)

            

Konvertierung von MARC21/XML-Geodaten, die ein POLYGON und ein POINT enthalten:



                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
>'));
                                                                                        st_astext
                -------------------------------------------------------------------------------------------------------------------------------------------------------------
                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))
                (1 row)
            

Siehe auch

ST_AsMARC21


Name

ST_GeometryFromText — Gibt einen spezifizierten ST_Geometry-Wert von einer Well-known-Text Darstellung (WKT) zurück. Die Bezeichnung ist ein Alias für ST_GeomFromText

Synopsis

geometry ST_GeometryFromText(text WKT);

geometry ST_GeometryFromText(text WKT, integer srid);

Beschreibung

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.40

Siehe auch

ST_GeomFromText


Name

ST_GeomFromText — Gibt einen spezifizierten ST_Geometry Wert aus einer Well-known-Text Darstellung (WKT) zurück.

Synopsis

geometry ST_GeomFromText(text WKT);

geometry ST_GeomFromText(text WKT, integer srid);

Beschreibung

Erzeugt ein PostGIS ST_Geometry Objekt aus der OGC Well-known-Text Darstellung.

[Note]

Die Funktion ST_GeomFromText hat zwei Varianten. Die erste Variante nimmt keine SRID entgegen und gibt eine Geometrie ohne ein bestimmtes Koordinatenreferenzsystem aus (SRID=0) . Die zweite Variante nimmt eine SRID als zweiten Übergabewert entgegen und gibt eine Geometrie zurück, die diese SRID als Teil ihrer Metadaten beinhaltet.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2 - die Option SRID ist vom Konformitätstest.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.40

Diese Methode unterstützt kreisförmige Strings und Kurven.

[Note]

Obwohl nicht OGC-konform, ist ST_MakePoint schneller als ST_GeomFromText und ST_PointFromText. Es ist auch einfacher für numerische Koordinatenwerte zu verwenden. ST_Point ist eine weitere Option, die ähnlich schnell wie ST_MakePoint ist und OGC-konform ist, aber nur 2D-Punkte unterstützt.

[Warning]

Änderung: 2.0.0 - In Vorgängerversionen von PostGIS war ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') erlaubt. Um eine bessere Übereinstimmung mit der SQL/MM Norm zu erreichen, ist dies in PostGIS 2.0.0 nun nicht mehr gestattet. Hier sollte nun ST_GeomFromText('GEOMETRYCOLLECTION EMPTY') geschrieben werden.

Beispiele

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 — Erzeugt eine Geometrie aus einer WKT Darstellung mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.

Synopsis

geometry ST_LineFromText(text WKT);

geometry ST_LineFromText(text WKT, integer srid);

Beschreibung

Erzeugt eine Geometrie aus einer WKT Darstellung mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt. Wenn das übergebene WKT kein LineString ist, wird NULL zurückgegeben.

[Note]

OGC SPEC 3.2.6.2 - die Option SRID ist vom Konformitätstest.

[Note]

Wenn Sie wissen, dass die Geometrie nur aus LINESTRINGs besteht, ist es effizienter einfach ST_GeomFromText zu verwenden. Diese Funktion ruft auch nur ST_GeomFromText auf und fügt die Information hinzu, dass es sich um einen Linienzug handelt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.2.8

Beispiele

SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText('POINT(1 2)') AS null_return;
aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
                

Siehe auch

ST_GeomFromText


Name

ST_MLineFromText — Liest einen festgelegten ST_MultiLineString Wert von einer WKT-Darstellung aus.

Synopsis

geometry ST_MLineFromText(text WKT, integer srid);

geometry ST_MLineFromText(text WKT);

Beschreibung

Erzeugt eine Geometrie aus einer Well-known-Text (WKT) Darstellung mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.

OGC SPEC 3.2.6.2 - Die Option SRID stammt aus dem Konformitätstest

Gibt NULL zurück wenn der WKT kein MULTILINESTRING ist.

[Note]

Verwenden Sie diese Funktion nicht, wenn Sie sich vollkommen sicher sind, dass ihre WKT Geometrie nur aus Punkten besteht. Sie ist langsamer als ST_GeomFromText, da sie einen zusätzlichen Validierungsschritt hinzufügt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 9.4.4

Beispiele

SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');

Siehe auch

ST_GeomFromText


Name

ST_MPointFromText — Erzeugt eine Geometrie aus WKT mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.

Synopsis

geometry ST_MPointFromText(text WKT, integer srid);

geometry ST_MPointFromText(text WKT);

Beschreibung

Erzeugt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt.

OGC SPEC 3.2.6.2 - Die Option SRID stammt aus dem Konformitätstest

Gibt NULL zurück, wenn der WKT kein MULTIPOINT ist.

[Note]

Verwenden Sie diese Funktion nicht, wenn Sie sich vollkommen sicher sind, dass ihre WKT Geometrie nur aus Punkten besteht. Sie ist langsamer als ST_GeomFromText, da sie einen zusätzlichen Validierungsschritt hinzufügt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. 3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 9.2.4

Beispiele

SELECT ST_MPointFromText('MULTIPOINT((1 2),(3 4))');
SELECT ST_MPointFromText('MULTIPOINT((-70.9590 42.1180),(-70.9611 42.1223))', 4326);

Siehe auch

ST_GeomFromText


Name

ST_MPolyFromText — Erzeugt eine MultiPolygon Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt.

Synopsis

geometry ST_MPolyFromText(text WKT, integer srid);

geometry ST_MPolyFromText(text WKT);

Beschreibung

Erzeugt ein MultiPolygon von WKT mit der gegebenen SRID. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt.

OGC SPEC 3.2.6.2 - Die Option SRID stammt aus dem Konformitätstest

Meldet einen Fehler, wenn der WKT kein MULTIPOLYGON ist.

[Note]

Verwenden Sie diese Funktion nicht, wenn Sie sich vollkommen sicher sind, dass ihre WKT Geometrie nur aus MultiPolygonen besteht. Sie ist langsamer als ST_GeomFromText, da sie einen zusätzlichen Validierungsschritt hinzufügt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 9.6.4

Beispiele

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

Name

ST_PointFromText — Erzeugt eine Punktgeometrie mit gegebener SRID von WKT. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt.

Synopsis

geometry ST_PointFromText(text WKT);

geometry ST_PointFromText(text WKT, integer srid);

Beschreibung

Erzeugt ein PostGIS ST_Geometrie Punktobjekt von der OGC Well-known-Text Darstellung. Wenn die SRID nicht angegeben ist, wird sie standardmäßig auf "unknown" (zurzeit 0) gesetzt. Falls die Geometrie nicht in der WKT Punktdarstellung vorliegt, wird NULL zurückgegeben. Bei einer invaliden WKT Darstellung wird eine Fehlermeldung angezeigt.

[Note]

Die Funktion ST_PointFromText hat zwei Varianten. Die erste Variante nimmt keine SRID entgegen und gibt eine Geometrie ohne ein bestimmtes Koordinatenreferenzsystem aus. Die zweite Variante nimmt eine SRID als zweiten Übergabewert entgegen und gibt eine Geometrie zurück, die diese SRID als Teil ihrer Metadaten beinhaltet. Die SRID muss in der Tabelle "spatial_ref_sys" definiert sein.

[Note]

Verwenden Sie diese Funktion nicht, wenn Sie sich vollkommen sicher sind, dass ihre WKT Geometrie nur aus Punkten besteht. Sie ist langsamer als ST_GeomFromText, da sie einen zusätzlichen Validierungsschritt hinzufügt. Wenn Sie Punkte aus Koordinaten in Länge und Breite erstellen und mehr auf Rechenleistung und Genauigkeit wertlegen als auf OGC-Konformität, so verwenden Sie bitte ST_MakePoint oder den OGC-konformen Alias ST_Point.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2 - die Option SRID ist vom Konformitätstest.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 6.1.8

Beispiele

SELECT ST_PointFromText('POINT(-71.064544 42.28787)');
SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);
        

Name

ST_PolygonFromText — Erzeugt eine Geometrie aus WKT mit der angegebenen SRID. Wenn keine SRID angegeben wird, wird diese standardmäßig auf 0 gesetzt.

Synopsis

geometry ST_PolygonFromText(text WKT);

geometry ST_PolygonFromText(text WKT, integer srid);

Beschreibung

Erzeugt eine Geometrie mit gegebener SRID von WKT. Wenn SRID nicht angegeben ist, wird sie standardmäßig auf 0 gesetzt. Gibt NULL zurück, wenn WKT kein Polygon ist.

OGC SPEC 3.2.6.2 - Die Option SRID stammt aus dem Konformitätstest

[Note]

Verwenden Sie diese Funktion nicht, wenn Sie sich vollkommen sicher sind, dass ihre WKT Geometrie nur aus Polygonen besteht. Sie ist langsamer als ST_GeomFromText, da sie einen zusätzlichen Validierungsschritt hinzufügt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 8.3.6

Beispiele

SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');
st_polygonfromtext
------------------
010300000001000000050000006...


SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly;

point_is_not_poly
----------
t

Siehe auch

ST_GeomFromText


Name

ST_WKTToSQL — Gibt einen spezifizierten ST_Geometry-Wert von einer Well-known-Text Darstellung (WKT) zurück. Die Bezeichnung ist ein Alias für ST_GeomFromText

Synopsis

geometry ST_WKTToSQL(text WKT);

Beschreibung

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.34

Siehe auch

ST_GeomFromText

7.8.2. Well-known-Binary (WKB) Repräsentation

  • ST_GeogFromWKB — Erzeugt ein geographisches Objekt aus der Well-known-Binary (WKB) oder der erweiterten Well-known-Binary (EWKB) Darstellung.
  • ST_GeomFromEWKB — Gibt einen geometrischen Datentyp (ST_Geometry) aus einer Well-known-Binary (WKB) Darstellung zurück.
  • ST_GeomFromWKB — Erzeugt ein geometrisches Objekt aus der Well-known-Binary (WKB) Darstellung und einer optionalen SRID.
  • ST_LineFromWKB — Erzeugt einen LINESTRING mit gegebener SRID aus einer WKB-Darstellung
  • ST_LinestringFromWKB — Erzeugt eine Geometrie mit gegebener SRID aus einer WKB-Darstellung.
  • ST_PointFromWKB — Erzeugt eine Geometrie mit gegebener SRID von WKB.
  • ST_WKBToSQL — Gibt einen geometrischen Datentyp (ST_Geometry) aus einer Well-known-Binary (WKB) Darstellung zurück. Ein Synonym für ST_GeomFromWKB, welches jedoch keine SRID annimmt

Name

ST_GeogFromWKB — Erzeugt ein geographisches Objekt aus der Well-known-Binary (WKB) oder der erweiterten Well-known-Binary (EWKB) Darstellung.

Synopsis

geography ST_GeogFromWKB(bytea wkb);

Beschreibung

Die Funktion ST_GeogFromWKB empfängt eine Well-known-Binary (WKB) oder eine erweiterte PostGIS WKB (EWKB) Darstellung einer Geometrie und erzeugt eine Instanz des entsprechenden geographischen Datentyps. Diese Funktion übernimmt die Rolle der Geometrie-Factory/Fabrik in SQL.

Wenn die SRID nicht festgelegt ist, wird 4326 (WGS 84) angenommen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

--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@')
);
                                          st_astext
------------------------------------------------------
 LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)


Name

ST_GeomFromEWKB — Gibt einen geometrischen Datentyp (ST_Geometry) aus einer Well-known-Binary (WKB) Darstellung zurück.

Synopsis

geometry ST_GeomFromEWKB(bytea EWKB);

Beschreibung

Erzeugt ein PostGIS ST_Geometry Objekt aus der erweiterten OGC Well-known-Text (EWKT) Darstellung.

[Note]

EWKB ist kein Format des OGC Standards, sondern ein PostGIS eigenes Format, welches den Identifikator (SRID) des räumlichen Koordinatenreferenzsystem mit einbindet

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen und TIN eingeführt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

Binärdarstellung des Linienzuges LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) in NAD 83 (4269).

[Note]

ANMERKUNG: Obwohl die Bytefelder durch \ getrennt sind und auch ' aufweisen können, müssen wir beides mit \ maskieren; wenn "standard_conforming_strings" ausgeschaltet ist mit ''. Somit sieht diese Darstellung nicht genauso wie die AsEWKB Darstellung aus.

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]

Ab PostgreSQL 9.1 - ist standard_conforming_strings standardmäßig auf "on" gesetzt. Bei Vorgängerversionen war es "off". Sie können die Standardvorgaben für eine einzelne Abfrage ändern oder auf Datenbank- oder Serverebene setzen. Unterhalb steht, wie Sie dies mit standard_conforming_strings = on umsetzten können. In diesem Fall maskieren wir das ' mit dem ANSI Zeichen ', aber Schrägstriche werden nicht maskiert

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 — Erzeugt ein geometrisches Objekt aus der Well-known-Binary (WKB) Darstellung und einer optionalen SRID.

Synopsis

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

Beschreibung

Die Funktion ST_GeogFromWKB nimmt eine Well-known-Binary (WKB) Darstellung und eine Id für das Koordinatenreferenzsystem (SRID) entgegen und erzeugt eine Instanz des entsprechenden geometrischen Datentyps. Diese Funktion übernimmt die Rolle der Geometrie-Factory in SQL. Ist eine alternative Bezeichnung für ST_WKBToSQL.

Wenn die SRID nicht festgelegt ist, wird sie standardmäßig auf 0 (Unknown) gesetzt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2 - die optionale SRID kommt vom Konformitätstest.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.41

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

--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)
);
                                          st_asewkt
------------------------------------------------------
 SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)

SELECT
  ST_AsText(
        ST_GeomFromWKB(
          ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
 st_astext
------------
 POINT(2 5)
(1 row)

Name

ST_LineFromWKB — Erzeugt einen LINESTRING mit gegebener SRID aus einer WKB-Darstellung

Synopsis

geometry ST_LineFromWKB(bytea WKB);

geometry ST_LineFromWKB(bytea WKB, integer srid);

Beschreibung

Die Funktion ST_GeogFromWKB nimmt eine Well-known-Binary Darstellung der Geometrie und eine Id für das Koordinatenreferenzsystem (SRID) entgegen und erzeugt eine Instanz des entsprechenden geometrischen Datentyps - in diesem Fall eine Geometrie vom Typ LineString. Diese Funktion übernimmt die Rolle der Geometrie-Factory in SQL.

Wenn keine SRID angegeben ist, wird diese auf 0 gesetzt. NULL wird zurückgegeben, wenn die Eingabe bytea keinen LINESTRING darstellt.

[Note]

OGC SPEC 3.2.6.2 - die Option SRID ist vom Konformitätstest.

[Note]

Wenn Sie wissen, dass Ihre Geometrie nur aus LINESTRINGs besteht, ist es effizienter einfach ST_GeomFromWKB zu verwenden. Diese Funktion ruft auch nur ST_GeomFromWKB auf und fügt die Information hinzu, dass es sich um einen Linienzug handelt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.2.9

Beispiele

SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
                ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;
aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
                

Name

ST_LinestringFromWKB — Erzeugt eine Geometrie mit gegebener SRID aus einer WKB-Darstellung.

Synopsis

geometry ST_LinestringFromWKB(bytea WKB);

geometry ST_LinestringFromWKB(bytea WKB, integer srid);

Beschreibung

Die Funktion ST_LinestringFromWKB nimmt eine Well-known-Binary Darstellung der Geometrie und eine Id für das Koordinatenreferenzsystem (SRID) entgegen und erzeugt eine Instanz des entsprechenden geometrischen Datentyps - in diesem Fall eine Geometrie vom Typ LineString. Diese Funktion übernimmt die Rolle der Geometrie-Factory in SQL.

Wenn keine SRID angegeben ist, wird diese standardmäßig auf 0 gesetzt. NULL wird zurückgegeben, wenn die Eingabe bytea keinen LINESTRING darstellt. Ist ein Alias für ST_LineFromWKB.

[Note]

OGC SPEC 3.2.6.2 - optionale SRID ist vom Konformitätstest.

[Note]

Wenn Sie wissen, dass Ihre Geometrie nur aus LINESTRINGs besteht, ist es effizienter einfach ST_GeomFromWKB zu verwenden. Diese Funktion ruft auch nur ST_GeomFromWKB auf und fügt die Information hinzu, dass es sich um einen LINESTRING handelt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 7.2.9

Beispiele

SELECT
  ST_LineStringFromWKB(
        ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))
  ) AS aline,
  ST_LinestringFromWKB(
        ST_AsBinary(ST_GeomFromText('POINT(1 2)'))
  ) IS NULL AS null_return;
   aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t

Name

ST_PointFromWKB — Erzeugt eine Geometrie mit gegebener SRID von WKB.

Synopsis

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

Beschreibung

Die Funktion ST_PointFromWKB nimmt eine Well-known-Binary Darstellung der Geometrie und eine Id für das Koordinatenreferenzsystem (SRID) entgegen und erzeugt eine Instanz des entsprechenden geometrischen Datentyps - in diesem Fall eine Geometrie vom Typ POINT. Diese Funktion übernimmt die Rolle der Geometrie-Factory in SQL.

Wenn keine SRID angegeben ist, wird diese standardmäßig auf 0 gesetzt. NULL wird zurückgegeben, wenn die Eingabe bytea keinen POINT darstellt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 6.1.9

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT
  ST_AsText(
        ST_PointFromWKB(
          ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
 st_astext
------------
 POINT(2 5)
(1 row)

SELECT
  ST_AsText(
        ST_PointFromWKB(
          ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry)
        )
  );
 st_astext
-----------

(1 row)

Name

ST_WKBToSQL — Gibt einen geometrischen Datentyp (ST_Geometry) aus einer Well-known-Binary (WKB) Darstellung zurück. Ein Synonym für ST_GeomFromWKB, welches jedoch keine SRID annimmt

Synopsis

geometry ST_WKBToSQL(bytea WKB);

Beschreibung

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.36

Siehe auch

ST_GeomFromWKB

7.8.3. Weitere Formate

  • ST_Box2dFromGeoHash — Gibt die BOX2D einer GeoHash Zeichenkette zurück.
  • ST_GeomFromGeoHash — Gibt die Geometrie einer GeoHash Zeichenfolge zurück.
  • ST_GeomFromGML — Nimmt als Eingabe eine GML-Darstellung der Geometrie und gibt ein geometrisches PostGIS-Objekt aus.
  • ST_GeomFromGeoJSON — Nimmt als Eingabe eine GeoJSON-Darstellung der Geometrie und gibt ein geometrisches PostGIS-Objekt aus.
  • ST_GeomFromKML — Nimmt als Eingabe eine KML-Darstellung der Geometrie und gibt ein geometrisches PostGIS-Objekt aus.
  • ST_GeomFromTWKB — Erzeugt eine Geometrie aus einer TWKB ("Tiny Well-Known Binary") Darstellung.
  • ST_GMLToSQL — Gibt einen spezifizierten ST_Geometry Wert aus einer GML-Darstellung zurück. Dies ist ein Aliasname für ST_GeomFromGML
  • ST_LineFromEncodedPolyline — Erzeugt einen LineString aus einem codierten Linienzug.
  • ST_PointFromGeoHash — Gibt einen Punkt von einer GeoHash Zeichenfolge zurück.
  • ST_FromFlatGeobufToTable — Erstellt eine Tabelle auf der Grundlage der Struktur der FlatGeobuf-Daten.
  • ST_FromFlatGeobuf — Liest FlatGeobuf-Daten.

Name

ST_Box2dFromGeoHash — Gibt die BOX2D einer GeoHash Zeichenkette zurück.

Synopsis

box2d ST_Box2dFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Beschreibung

Gibt die BOX2D einer GeoHash Zeichenkette zurück.

Wenn keine Genauigkeit angegeben ist, gibt ST_Box2dFromGeoHash ein BOX2D zurück, das auf der vollen Genauigkeit des eingegebenen GeoHash-Strings basiert.

Wenn precision angegeben wird, verwendet ST_Box2dFromGeoHash entsprechend viele Zeichen des GeoHash um die BOX2D zu erzeugen. Niedrigere Werte erzeugen eine größere BOX2D und höhere Werte erhöhen die Genauigkeit.

Verfügbarkeit: 2.1.0

Beispiele

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0');

                st_geomfromgeohash
--------------------------------------------------
 BOX(-115.172816 36.114646,-115.172816 36.114646)

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0);

 st_box2dfromgeohash
----------------------
 BOX(-180 -90,180 90)

 SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10);
                            st_box2dfromgeohash
---------------------------------------------------------------------------
 BOX(-115.17282128334 36.1146408319473,-115.172810554504 36.1146461963654)

                

Name

ST_GeomFromGeoHash — Gibt die Geometrie einer GeoHash Zeichenfolge zurück.

Synopsis

geometry ST_GeomFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Beschreibung

Gibt die Geometrie einer GeoHash Zeichenfolge zurück. Der geometrische Datentyp ist ein Polygon, das den GeoHash begrenzt.

Wenn keine precision angegeben wird, dann gibt ST_GeomFromGeoHash ein Polygon zurück, das auf der vollständigen Genauigkeit der GeoHash Zeichenfolge beruht.

Wenn precision angegeben wird, verwendet ST_GeomFromGeoHash entsprechend viele Zeichen des GeoHash, um das Polygon zu erzeugen.

Verfügbarkeit: 2.1.0

Beispiele

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
                                                        st_astext
--------------------------------------------------------------------------------------------------------------------------
 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));
                                                          st_astext
------------------------------------------------------------------------------------------------------------------------------
 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));
                                                                                       st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.17282128334 36.1146408319473,-115.17282128334 36.1146461963654,-115.172810554504 36.1146461963654,-115.172810554504 36.1146408319473,-115.17282128334 36.1146408319473))

                

Name

ST_GeomFromGML — Nimmt als Eingabe eine GML-Darstellung der Geometrie und gibt ein geometrisches PostGIS-Objekt aus.

Synopsis

geometry ST_GeomFromGML(text geomgml);

geometry ST_GeomFromGML(text geomgml, integer srid);

Beschreibung

Erzeugt ein PostGIS ST_Geometry Objekt aus der OGC GML Darstellung.

ST_GeomFromGML funktioniert nur bei Fragmenten von GML-Geometrien. Auf das ganze GML-Dokument angewendet führt zu einer Fehlermeldung.

Unterstützte OGC GML Versionen:

  • GML 3.2.1 Namespace

  • GML 3.1.1 Simple Features profile SF-2 (inkl. GML 3.1.0 und 3.0.0 Rückwertskompatibilität)

  • GML 2.1.2

OGC GML Standards, vgl.: http://www.opengeospatial.org/standards/gml:

Verfügbarkeit: 1.5, benötigt libxml2 1.6+

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen und TIN eingeführt.

Erweiterung: 2.0.0 Standardwert für den optionalen Parameter SRID eingefügt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

GML erlaubt das Mischen von Dimensionen (z.B. 2D und 3D innerhalb der selben MultiGeometry). Da PostGIS Geometrien dies nicht zulassen, wandelt ST_GeomFromGML die gesamte Geometrie in 2D um, sobald eine fehlende Z-Dimension existiert.

GML unterstützt uneinheitliche Koordinatenreferenzsysteme innerhalb derselben Mehrfachgeometrie. Da dies der geometrische Datentyp von PostGIS nicht unterstützt, wird in diesem Fall die Subgeometrie in das Referenzsystem des Knotens, der die Wurzel darstellt, umprojiziert. Wenn kein Attribut "srsName" für den Knoten der GML-Wurzel vorhanden ist, gibt die Funktion eine Fehlermeldung aus.

Die Funktion ST_GeomFromGML ist nicht kleinlich, was die explizite Vergabe eines GML-Namensraums betrifft. Bei üblichen Anwendungen können Sie die explizite Vergabe weglassen. Wenn Sie aber das XLink Feature von GML verwenden wollen, müssen Sie den Namensraum explizit angeben.

[Note]

SQL/MM Kurvengeometrien werden von der Funktion ST_GeomFromGML nicht unterstützt

Beispiele - Eine Einzelgeometrie mit einem 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>
$$);

                

Beispiele - Verwendung von 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>
$$);

                

Beispiele - polyedische Oberfläche

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

-- result --
 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 — Nimmt als Eingabe eine GeoJSON-Darstellung der Geometrie und gibt ein geometrisches PostGIS-Objekt aus.

Synopsis

geometry ST_GeomFromGeoJSON(text geomjson);

geometry ST_GeomFromGeoJSON(json geomjson);

geometry ST_GeomFromGeoJSON(jsonb geomjson);

Beschreibung

Erzeugt ein geometrisches PostGIS Objekt aus der GeoJSON Darstellung.

ST_GeomFromGeoJSON funktioniert nur bei Fragmenten von JSON-Geometrien. Auf das ganze JSON-Dokument angewendet führt zu einer Fehlermeldung.

Verbessert: 3.0.0 Geometrie wird standardmäßig auf SRID=4326 gesetzt, wenn nicht anders angegeben.

Erweiterung: 2.5.0 unterstützt nun auch die Eingabe von json und jsonb.

Verfügbarkeit: 2.0.0 benötigt - JSON-C >= 0.9

[Note]

Wenn Sie die JSON-C Unterstützung nicht aktiviert haben, sehen Sie eine Fehlermeldung anstatt einer Ausgabe. Um JSON-C zu aktivieren, führen Sie bitte configure --with-jsondir=/path/to/json-c aus. Für Einzelheiten siehe Section 2.2.3, “Konfiguration”.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
wkt
------
POINT(-48.23456 20.12345)
-- a 3D linestring
SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}')) As wkt;

wkt
-------------------
LINESTRING(1 2,4 5,7 8)

Name

ST_GeomFromKML — Nimmt als Eingabe eine KML-Darstellung der Geometrie und gibt ein geometrisches PostGIS-Objekt aus.

Synopsis

geometry ST_GeomFromKML(text geomkml);

Beschreibung

Erzeugt ein PostGIS ST_Geometry Objekt aus der OGC KML Darstellung.

T_GeomFromKML funktioniert nur bei Fragmenten von KML-Geometrien. Auf das ganze KML-Dokument angewendet führt zu einer Fehlermeldung.

Unterstützte OGC KML Versionen:

  • KML 2.2.0 Namespace

OGC KML Standards, vgl.: http://www.opengeospatial.org/standards/kml:

Verfügbarkeit: 1.5, benötigt libxml2 2.6+

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

[Note]

SQL/MM Kurvengeometrien werden von der Funktion ST_GeomFromKML nicht unterstützt

Beispiele - Eine Einzelgeometrie mit einem srsName

SELECT ST_GeomFromKML($$
    <LineString>
        <coordinates
>-71.1663,42.2614
            -71.1667,42.2616</coordinates>
    </LineString>
$$);

        

Name

ST_GeomFromTWKB — Erzeugt eine Geometrie aus einer TWKB ("Tiny Well-Known Binary") Darstellung.

Synopsis

geometry ST_GeomFromTWKB(bytea twkb);

Beschreibung

Die Funktion ST_GeomFromTWKB nimmt eine TWKB ("Tiny Well-Known Binary") Darstellung und erzeugt ein Objekt mit dem entsprechenden geometrischen Datentyp.

Beispiele

SELECT ST_AsText(ST_GeomFromTWKB(ST_AsTWKB('LINESTRING(126 34, 127 35)'::geometry)));

         st_astext
-----------------------------
 LINESTRING(126 34, 127 35)
(1 row)


SELECT ST_AsEWKT(
  ST_GeomFromTWKB(E'\\x620002f7f40dbce4040105')
);
                                          st_asewkt
------------------------------------------------------
LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)

Siehe auch

ST_AsTWKB


Name

ST_GMLToSQL — Gibt einen spezifizierten ST_Geometry Wert aus einer GML-Darstellung zurück. Dies ist ein Aliasname für ST_GeomFromGML

Synopsis

geometry ST_GMLToSQL(text geomgml);

geometry ST_GMLToSQL(text geomgml, integer srid);

Beschreibung

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.50 (ausgenommen Unterstützung von Kurven).

Verfügbarkeit: 1.5, benötigt libxml2 1.6+

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen und TIN eingeführt.

Erweiterung: 2.0.0 Standardwert für den optionalen Parameter SRID eingefügt.


Name

ST_LineFromEncodedPolyline — Erzeugt einen LineString aus einem codierten Linienzug.

Synopsis

geometry ST_LineFromEncodedPolyline(text polyline, integer precision=5);

Beschreibung

Erzeugt einen LineString aus einem codierten Linienzug.

Der optionale Parameter precision gibt an wieviele Dezimalstellen der kodierten Polylinie erhalten bleiben. Dieser Wert sollte beim Dekodieren und beim Kodieren ident sein, sonst entstehen inkorrekte Koordinaten.

Siehe http://developers.google.com/maps/documentation/utilities/polylinealgorithm

Verfügbarkeit: 2.2.0

Beispiele

-- Create a line string from a polyline
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'));
-- result --
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)

-- Select different precision that was used for polyline encoding
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@',6));
-- result --
SRID=4326;LINESTRING(-12.02 3.85,-12.095 4.07,-12.6453 4.3252)

    

Name

ST_PointFromGeoHash — Gibt einen Punkt von einer GeoHash Zeichenfolge zurück.

Synopsis

point ST_PointFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Beschreibung

Gibt die Geometrie einer GeoHash Zeichenfolge zurück. Der Punkt entspricht dem Mittelpunkt des GeoHas.

Wenn keine precision angegeben wird, dann gibt ST_PointFromGeoHash einen Punkt zurück, der auf der vollständigen Genauigkeit der gegebenen GeoHash Zeichenfolge beruht.

Wenn precision angegeben wird, verwendet ST_PointFromGeoHash entsprechend viele Zeichen des GeoHash, um den Punkt zu erzeugen.

Verfügbarkeit: 2.1.0

Beispiele

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
          st_astext
------------------------------
 POINT(-115.172816 36.114646)

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
             st_astext
-----------------------------------
 POINT(-115.13671875 36.123046875)

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
                 st_astext
-------------------------------------------
 POINT(-115.172815918922 36.1146435141563)

                

Name

ST_FromFlatGeobufToTable — Erstellt eine Tabelle auf der Grundlage der Struktur der FlatGeobuf-Daten.

Synopsis

void ST_FromFlatGeobufToTable(text schemaname, text tablename, bytea FlatGeobuf input data);

Beschreibung

Erzeugt eine Tabelle auf der Grundlage der Struktur der FlatGeobuf-Daten. (http://flatgeobuf.org).

schema Name des Schemas.

Tabelle Tabellenname.

data Eingabe von FlatGeobuf-Daten.

Verfügbarkeit: 3.2.0


Name

ST_FromFlatGeobuf — Liest FlatGeobuf-Daten.

Synopsis

setof anyelement ST_FromFlatGeobuf(anyelement Table reference, bytea FlatGeobuf input data);

Beschreibung

Liest FlatGeobuf-Daten (http://flatgeobuf.org). HINWEIS: PostgreSQL bytea kann 1GB nicht überschreiten.

tabletype Verweis auf einen Tabellentyp.

data Eingabe FlatGeobuf-Daten.

Verfügbarkeit: 3.2.0

7.9. Geometrieausgabe

Abstract

Diese Funktionen konvertieren Geo-Objekte in unterschiedliche Text- oder Binärformate.

7.9.1. Well-known-Text (WKT) Repräsentation

  • ST_AsEWKT — Gibt die Well-known-Text(WKT) Darstellung der Geometrie mit den SRID-Metadaten zurück.
  • ST_AsText — Gibt die Well-known-Text(WKT) Darstellung der Geometrie/Geographie ohne die SRID Metadaten zurück.

Name

ST_AsEWKT — Gibt die Well-known-Text(WKT) Darstellung der Geometrie mit den SRID-Metadaten zurück.

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

Beschreibung

Gibt die Well-Known-Text-Darstellung der Geometrie mit dem Präfix SRID zurück. Das optionale Argument maxdecimaldigits kann verwendet werden, um die maximale Anzahl der in der Ausgabe verwendeten Dezimalstellen nach der Fließkommazahl zu verringern (Standardwert: 15).

Um die inverse Konvertierung der EWKT-Darstellung in eine PostGIS-Geometrie durchzuführen, verwenden Sie ST_GeomFromEWKT.

[Warning]

Die Verwendung des Parameters maxdecimaldigits kann dazu führen, dass die Ausgabegeometrie ungültig wird. Um dies zu vermeiden, verwenden Sie zuerst ST_ReducePrecision mit einer geeigneten Rastergröße.

[Note]

Die WKT-Spezifikation enthält keine SRID. Um das OGC-WKT-Format zu erhalten, verwenden Sie ST_AsText.

[Warning]

Im WKT-Format wird die Genauigkeit nicht beibehalten. Verwenden Sie daher für den Transport das Format ST_AsBinary oder ST_AsEWKB, um ein fließendes Abschneiden zu verhindern.

Verbessert: 3.1.0 Unterstützung für optionale Präzisionsparameter.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für den geographischen Datentyp, polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

SELECT ST_AsEWKT('0103000020E61000000100000005000000000000
                        000000000000000000000000000000000000000000000000000000
                        F03F000000000000F03F000000000000F03F000000000000F03
                        F000000000000000000000000000000000000000000000000'::geometry);

                   st_asewkt
--------------------------------
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
(1 row)

SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018
E20A4100000000485F024100000000000000400000000018
E20A4100000000305C02410000000000000840')

--st_asewkt---
CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)

Name

ST_AsText — Gibt die Well-known-Text(WKT) Darstellung der Geometrie/Geographie ohne die SRID Metadaten zurück.

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

Beschreibung

Liefert die OGC Well-Known Text (WKT) Darstellung der Geometrie/Geographie. Das optionale Argument maxdecimaldigits kann verwendet werden, um die Anzahl der Nachkommastellen in der Ausgabe von Ordinaten zu begrenzen (Standardwert: 15).

Um die umgekehrte Konvertierung der WKT-Darstellung in PostGIS-Geometrie durchzuführen, verwenden Sie ST_GeomFromText.

[Note]

Die standardmäßige OGC-WKT-Darstellung enthält den SRID nicht. Um den SRID als Teil der Ausgabedarstellung aufzunehmen, verwenden Sie die nicht standardisierte PostGIS-Funktion ST_AsEWKT

[Warning]

Bei der textuellen Darstellung von Zahlen in WKT wird möglicherweise nicht die volle Gleitkommagenauigkeit eingehalten. Um die volle Genauigkeit bei der Datenspeicherung oder beim Datentransport zu gewährleisten, ist es am besten, das Format Well-Known Binary (WKB) zu verwenden (siehe ST_AsBinary und maxdecimaldigits).

[Warning]

Die Verwendung des Parameters maxdecimaldigits kann dazu führen, dass die Ausgabegeometrie ungültig wird. Um dies zu vermeiden, verwenden Sie zuerst ST_ReducePrecision mit einer geeigneten Rastergröße.

Verfügbarkeit: 1.5 - Unterstützung von geograpischen Koordinaten.

Erweiterung: 2.5 - der optionale Parameter "precision" wurde eingeführt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.25

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT ST_AsText('01030000000100000005000000000000000000
000000000000000000000000000000000000000000000000
F03F000000000000F03F000000000000F03F000000000000F03
F000000000000000000000000000000000000000000000000');

    st_astext
--------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))

Die Standardeinstellung ist die Ausgabe mit voller Präzision.

SELECT ST_AsText('POINT(111.1111111 1.1111111)'));
    st_astext
------------------------------
 POINT(111.1111111 1.1111111)

Das Argument maxdecimaldigits kann verwendet werden, um die Ausgabegenauigkeit zu begrenzen.

SELECT ST_AsText('POINT(111.1111111 1.1111111)'), 2);
    st_astext
--------------------
 POINT(111.11 1.11)

7.9.2. Well-known-Binary (WKB) Repräsentation

  • ST_AsBinary — Rückgabe der OGC/ISO Well-Known Binary (WKB)-Darstellung der Geometrie/Geografie ohne SRID-Metadaten.
  • ST_AsEWKB — Rückgabe der Extended Well-Known Binary (EWKB) Darstellung der Geometrie mit SRID-Metadaten.
  • ST_AsHEXEWKB — Gibt eine Geometrie im HEXEWKB Format (als Text) aus; verwendet entweder die Little-Endian (NDR) oder die Big-Endian (XDR) Zeichenkodierung.

Name

ST_AsBinary — Rückgabe der OGC/ISO Well-Known Binary (WKB)-Darstellung der Geometrie/Geografie ohne SRID-Metadaten.

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

Beschreibung

Gibt die OGC/ISO Well-Known Binary (WKB) Darstellung der Geometrie zurück. Bei der ersten Funktionsvariante wird standardmäßig die Endian-Kodierung der Servermaschine verwendet. Die zweite Funktionsvariante nimmt ein Textargument entgegen, das die Endian-Kodierung angibt, entweder Little-Endian ('NDR') oder Big-Endian ('XDR').

Das WKB-Format ist nützlich, um Geometriedaten aus der Datenbank zu lesen und dabei die volle numerische Präzision beizubehalten. Dadurch wird die Präzisionsrundung vermieden, die bei Textformaten wie WKT auftreten kann.

Um die inverse Konvertierung von WKB in PostGIS-Geometrie durchzuführen, verwenden Sie ST_GeomFromWKB.

[Note]

Das OGC/ISO WKB-Format enthält keinen SRID. Um das EWKB-Format zu erhalten, das den SRID enthält, verwenden Sie ST_AsEWKB

[Note]

Das Standardverhalten in PostgreSQL 9.0 wurde geändert, um bytea in Hex-Kodierung auszugeben. Wenn Ihre GUI-Tools das alte Verhalten erfordern, dann setzen Sie SET bytea_output='escape' in Ihrer Datenbank.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Erweiterung: 2.0.0 - Unterstützung für höherdimensionale Koordinatensysteme eingeführt.

Erweiterung: 2.0.0 Unterstützung zum Festlegen des Endian beim geographischen Datentyp eingeführt.

Verfügbarkeit: 1.5.0 Unterstützung von geograpischen Koordinaten.

Änderung: 2.0.0 - Eingabewerte für diese Funktion dürfen nicht "unknown" sein -- es muss sich um eine Geometrie handeln. Konstrukte, wie ST_AsBinary('POINT(1 2)'), sind nicht länger gültig und geben folgende Fehlermeldung aus: n st_asbinary(unknown) is not unique error. Dieser Code muss in ST_AsBinary('POINT(1 2)'::geometry); geändert werden. Falls dies nicht möglich ist, so installieren Sie bitte legacy.sql.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.37

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                   st_asbinary
--------------------------------
\x01030000000100000005000000000000000000000000000000000000000000000000000000000000
000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000
00000000000000000000000000
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
                   st_asbinary
--------------------------------
\x000000000300000001000000050000000000000000000000000000000000000000000000003ff000
00000000003ff00000000000003ff00000000000003ff00000000000000000000000000000000000
00000000000000000000000000

Name

ST_AsEWKB — Rückgabe der Extended Well-Known Binary (EWKB) Darstellung der Geometrie mit SRID-Metadaten.

Synopsis

bytea ST_AsEWKB(geometry g1);

bytea ST_AsEWKB(geometry g1, text NDR_or_XDR);

Beschreibung

Gibt die Extended Well-Known Binary (EWKB) Darstellung der Geometrie mit SRID-Metadaten zurück. Bei der ersten Funktionsvariante wird standardmäßig die Endian-Kodierung der Servermaschine verwendet. Die zweite Funktionsvariante nimmt ein Textargument entgegen, das die Endian-Kodierung angibt, entweder Little-Endian ('NDR') oder Big-Endian ('XDR').

Das WKB-Format ist nützlich, um Geometriedaten aus der Datenbank zu lesen und dabei die volle numerische Präzision beizubehalten. Dadurch wird die Präzisionsrundung vermieden, die bei Textformaten wie WKT auftreten kann.

Um die inverse Konvertierung von EWKB in PostGIS-Geometrie durchzuführen, verwenden Sie ST_GeomFromEWKB.

[Note]

Um das OGC/ISO WKB-Format zu erhalten, verwenden Sie ST_AsBinary. Beachten Sie, dass das OGC/ISO WKB-Format nicht den SRID enthält.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen, Dreiecke und TIN eingeführt.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele

SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                   st_asewkb
--------------------------------
\x0103000020e610000001000000050000000000000000000000000000000000000000000000000000
00000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000
0000000000000000000000000000000000
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
                   st_asewkb
--------------------------------
\x0020000003000010e600000001000000050000000000000000000000000000000000000000000000
003ff00000000000003ff00000000000003ff00000000000003ff000000000000000000000000000
0000000000000000000000000000000000
                

Name

ST_AsHEXEWKB — Gibt eine Geometrie im HEXEWKB Format (als Text) aus; verwendet entweder die Little-Endian (NDR) oder die Big-Endian (XDR) Zeichenkodierung.

Synopsis

text ST_AsHEXEWKB(geometry g1, text NDRorXDR);

text ST_AsHEXEWKB(geometry g1);

Beschreibung

Gibt eine Geometrie im HEXEWKB Format (als Text) aus; verwendet entweder die Little-Endian (NDR) oder die Big-Endian (XDR) Zeichenkodierung. Wenn keine Zeichenkodierung angegeben wurde, wird NDR verwendet.

[Note]

Verfügbarkeit: 1.2.2

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
                which gives same answer as

                SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)::text;

                st_ashexewkb
                --------
                0103000020E6100000010000000500
                00000000000000000000000000000000
                00000000000000000000000000000000F03F
                000000000000F03F000000000000F03F000000000000F03
                F000000000000000000000000000000000000000000000000

7.9.3. Weitere Formate

  • ST_AsEncodedPolyline — Erzeugt eine codierte Polylinie aus einer LineString Geometrie.
  • ST_AsFlatGeobuf — Rückgabe einer FlatGeobuf-Darstellung einer Reihe von Zeilen.
  • ST_AsGeobuf — Gibt eine Menge an Zeilen in der Geobuf Darstellung aus.
  • ST_AsGeoJSON — Rückgabe einer Geometrie oder eines Merkmals im GeoJSON-Format.
  • ST_AsGML — Gibt die Geometrie als GML-Element - Version 2 oder 3 - zurück.
  • ST_AsKML — Gibt die Geometrie als GML-Element - Version 2 oder 3 - zurück.
  • ST_AsLatLonText — Gibt die "Grad, Minuten, Sekunden"-Darstellung für den angegebenen Punkt aus.
  • ST_AsMARC21 — Gibt die Geometrie als MARC21/XML-Datensatz mit einem geografischen Datenfeld (034) zurück.
  • ST_AsMVTGeom — Transformiert eine Geometrie in den Koordinatenraum einer MVT-Kachel.
  • ST_AsMVT — Aggregatfunktion, die eine MVT-Darstellung einer Reihe von Zeilen zurückgibt.
  • ST_AsSVG — Gibt eine Geometrie als SVG-Pfad aus.
  • ST_AsTWKB — Gibt die Geometrie als TWKB, aka "Tiny Well-known Binary" zurück
  • ST_AsX3D — Gibt eine Geometrie im X3D XML Knotenelement-Format zurück: ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_GeoHash — Gibt die Geometrie in der GeoHash Darstellung aus.

Name

ST_AsEncodedPolyline — Erzeugt eine codierte Polylinie aus einer LineString Geometrie.

Synopsis

text ST_AsEncodedPolyline(geometry geom, integer precision=5);

Beschreibung

Gibt die Geometrie als kodierte Polyline aus. Dieses Format wird von "Google Maps" mit precision=5 und von "Open Source Routing Machine" mit precision=5 oder 6 verwendet.

Der optionale Parameter precision gibt an wieviele Dezimalstellen der kodierten Polylinie erhalten bleiben. Dieser Wert sollte beim Dekodieren und beim Kodieren ident sein, sonst entstehen inkorrekte Koordinaten.

Verfügbarkeit: 2.2.0

Beispiele

Grundlegendes

SELECT ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
        --result--
        |_p~iF~ps|U_ulLnnqC_mqNvxq`@
        

Anwendung in Verbindung mit LINESTRING und ST_Segmentize für den geographischen Datentyp, und auf Google Maps stellen

-- the SQL for Boston to San Francisco, segments every 100 KM
        SELECT ST_AsEncodedPolyline(
                ST_Segmentize(
                        ST_GeogFromText('LINESTRING(-71.0519 42.4935,-122.4483 37.64)'),
                                100000)::geometry) As encodedFlightPath;

In JavaScript sieht dies ungefähr wie folgt aus, wobei die $ Variable durch das Abfrageergebnis ersetzt wird

<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 — Rückgabe einer FlatGeobuf-Darstellung einer Reihe von Zeilen.

Synopsis

bytea ST_AsFlatGeobuf(anyelement set row);

bytea ST_AsFlatGeobuf(anyelement row, bool index);

bytea ST_AsFlatGeobuf(anyelement row, bool index, text geom_name);

Beschreibung

Gibt eine FlatGeobuf-Darstellung (http://flatgeobuf.org) einer Reihe von Zeilen zurück, die einer FeatureCollection entsprechen. HINWEIS: PostgreSQL bytea kann 1GB nicht überschreiten.

row Datenzeilen mit zumindest einer Geometriespalte.

index schaltet die Erstellung von räumlichen Indizes ein. Die Voreinstellung ist false.

geom_name ist die Bezeichnung der Geometriespalte in den Datenzeilen. Wenn NULL, dann wird standardmäßig die erste aufgefundene Geometriespalte verwendet.

Verfügbarkeit: 3.2.0


Name

ST_AsGeobuf — Gibt eine Menge an Zeilen in der Geobuf Darstellung aus.

Synopsis

bytea ST_AsGeobuf(anyelement set row);

bytea ST_AsGeobuf(anyelement row, text geom_name);

Beschreibung

Gibt Zeilen einer FeatureCollection in der Geobuf Darstellung (https://github.com/mapbox/geobuf) aus. Von jeder Eingabegeometrie wird die maximale Genauigkeit analysiert, um eine optimale Speicherung zu erreichen. Anmerkung: In der jetzigen Form kann Geobuf nicht "gestreamt" werden, wodurch die gesamte Ausgabe im Arbeitsspeicher zusammengestellt wird.

row Datenzeilen mit zumindest einer Geometriespalte.

geom_name ist die Bezeichnung der Geometriespalte in den Datenzeilen. Wenn NULL, dann wird standardmäßig die erste aufgefundene Geometriespalte verwendet.

Verfügbarkeit: 2.4.0

Beispiele

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;
 st_asgeobuf
----------------------------------
 GAAiEAoOCgwIBBoIAAAAAgIAAAE=


                

Name

ST_AsGeoJSON — Rückgabe einer Geometrie oder eines Merkmals im GeoJSON-Format.

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

Beschreibung

Gibt eine Geometrie als GeoJSON "geometry"-Objekt oder eine Zeile als GeoJSON "feature"-Objekt zurück.

Die resultierenden GeoJSON-Geometrie- und Merkmalsdarstellungen entsprechen den GeoJSON-Spezifikationen RFC 7946, außer wenn die geparsten Geometrien mit einem anderen CRS als WGS84-Längen- und Breitengrad referenziert sind (EPSG:4326, urn:ogc:def:crs:OGC::CRS84); dem GeoJSON-Geometrieobjekt wird dann standardmäßig ein kurzer CRS-SRID-Bezeichner beigefügt. Es werden sowohl 2D- als auch 3D-Geometrien unterstützt. GeoJSON unterstützt nur SFS 1.1 Geometrietypen (z.B. keine Unterstützung für Kurven).

Der Parameter geom_column wird verwendet, um zwischen mehreren Geometriespalten zu unterscheiden. Wird er weggelassen, wird die erste Geometriespalte im Datensatz ermittelt. Umgekehrt erspart die Übergabe des Parameters die Suche nach dem Spaltentyp.

Der Parameter maxdecimaldigits kann zur Reduzierung der Nachkommastellen in der Ausgabe verwendet werden (standardmäßig 9). Wenn EPSG:4326 verwendet wird, kann maxdecimaldigits=6 eine gute Wahl für viele Karten bei der Bildschirmausgabe sein.

[Warning]

Die Verwendung des Parameters maxdecimaldigits kann dazu führen, dass die Ausgabegeometrie ungültig wird. Um dies zu vermeiden, verwenden Sie zuerst ST_ReducePrecision mit einer geeigneten Rastergröße.

Das Argument options kann verwendet werden, um BBOX oder CRS in der GeoJSON-Ausgabe hinzuzufügen:

  • 0: keine option

  • 1: GeoJSON BBOX

  • 2: GeoJSON CRS-Kurzform (z.B. EPSG:4326)

  • 4: GeoJSON CRS-Langform (z.B. urn:ogc:def:crs:EPSG::4326)

  • 8: GeoJSON CRS-Kurzform, außer bei EPSG:4326 (default)

Der Parameter id_column wird verwendet, um das Element "id" der zurückgegebenen GeoJSON-Features festzulegen. Gemäß GeoJSON RFC SOLLTE dies immer dann verwendet werden, wenn ein Feature einen häufig verwendeten Bezeichner hat, wie z.B. einen Primärschlüssel. Wenn dies nicht angegeben wird, erhalten die erzeugten Features kein "id"-Mitglied und alle anderen Spalten als die Geometrie, einschließlich potenzieller Schlüssel, landen einfach im "properties"-Mitglied des Features.

In der GeoJSON-Spezifikation ist festgelegt, dass Polygone nach der Rechts-Regel ausgerichtet werden, und einige Clients verlangen diese Ausrichtung. Dies kann durch die Verwendung von ST_ForcePolygonCCW sichergestellt werden. Die Spezifikation verlangt auch, dass die Geometrie im WGS84-Koordinatensystem (SRID = 4326) vorliegt. Bei Bedarf kann die Geometrie mit ST_Transform in WGS84 projiziert werden: ST_Transform( geom, 4326 ).

GeoJSON kann online getestet und angesehen werden unter geojson.io und geojsonlint.com. Es wird von vielen Web-Mapping-Frameworks unterstützt:

Verfügbarkeit: 1.3.4

Verfügbarkeit: 1.5.0 Unterstützung von geograpischen Koordinaten.

Änderung: 2.0.0 Unterstützung für Standardargumente und benannte Argumente.

Änderung: 3.0.0 Unterstützung von Datensätzen bei der Eingabe

Änderung: 3.0.0 Ausgabe der SRID wenn nicht EPSG:4326

Geändert: 3.5.0 erlaubt die Angabe der Spalte, die die Feature-ID enthält

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Erzeugen Sie eine FeatureCollection:

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"}}]}

Erzeugen Sie ein Feature:

SELECT ST_AsGeoJSON(t.*, id_column =
> 'id')
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
st_asgeojson
-----------------------------------------------------------------------------------------------------------------
 {"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}

Vergessen Sie nicht, Ihre Daten in WGS84 Längen- und Breitengrade umzuwandeln, um der GeoJSON-Spezifikation zu entsprechen:

SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) from fe_edges limit 1;
st_asgeojson
-----------------------------------------------------------------------------------------------------------

{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}

3D-Geometrien werden unterstützt:

SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

Name

ST_AsGML — Gibt die Geometrie als GML-Element - Version 2 oder 3 - zurück.

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

Beschreibung

Gibt die Geometrie als ein Geography Markup Language (GML) Element zurück. Ein Versionsparameter kann mit 2 oder 3 angegeben werden. Wenn kein Versionsparameter angegeben ist, wird dieser standardmäßig Version 2 angenommen. Der Parameter maxdecimaldigits kann verwendet werden, um die Anzahl der Nachkommastellen bei der Ausgabe zu reduzieren (standardmäßig 15).

[Warning]

Die Verwendung des Parameters maxdecimaldigits kann dazu führen, dass die Ausgabegeometrie ungültig wird. Um dies zu vermeiden, verwenden Sie zuerst ST_ReducePrecision mit einer geeigneten Rastergröße.

GML 2 verweist auf Version 2.1.2, GML 3 auf Version 3.1.1

Der Übergabewert "options" ist ein Bitfeld. Es kann verwendet werden um das Koordinatenreferenzsystem bei der GML Ausgabe zu bestimmen und um die Daten in Länge/Breite anzugeben.

  • 0: GML Kurzform für das CRS (z.B. EPSG:4326), Standardwert

  • 1: GML Langform für das CRS (z.B. urn:ogc:def:crs:EPSG::4326)

  • 2: Nur für GML 3, entfernt das srsDimension Attribut von der Ausgabe.

  • 4: Nur für GML 3, Für Linien verwenden Sie bitte den Tag <LineString> anstatt <Curve>.

  • 16: Deklarieren, dass die Daten in Breite/Länge (z.B. SRID=4326) vorliegen. Standardmäßig wird angenommen, dass die Daten planar sind. Diese Option ist nur bei Ausgabe in GML 3.1.1, in Bezug auf die Anordnung der Achsen sinnvoll. Falls Sie diese setzen, werden die Koordinaten von Länge/Breite auf Breite/Länge vertauscht.

  • 32: Ausgabe der BBox der Geometrie (Umhüllende/Envelope).

Der Übergabewert 'namespace prefix' kann verwendet werden, um ein benutzerdefiniertes Präfix für den Namensraum anzugeben, oder kein Präfix (wenn leer). Wenn Null oder weggelassen, so wird das Präfix "gml" verwendet.

Verfügbarkeit: 1.3.2

Verfügbarkeit: 1.5.0 Unterstützung von geograpischen Koordinaten.

Erweiterung: 2.0.0 Unterstützung durch Präfix eingeführt. Für GML3 wurde die Option 4 eingeführt, um die Verwendung von LineString anstatt von Kurven für Linien zu erlauben. Ebenfalls wurde die GML3 Unterstützung für polyedrische Oberflächen und TINS eingeführt, sowie die Option 32 zur Ausgabe der BBox.

Änderung: 2.0.0 verwendet standardmäßig benannte Argumente.

Erweiterung: 2.1.0 Für GML 3 wurde die Unterstützung einer ID eingeführt.

[Note]

Nur die Version 3+ von ST_AsGML unterstützt polyedrische Oberflächen und TINs.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM IEC 13249-3: 17.2

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiele: Version 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>

Beispiele: Version 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
>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">
                <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">
        <gml:lowerCorner
>2 1</gml:lowerCorner>
        <gml:upperCorner
>20 10</gml:upperCorner>
</gml:Envelope>

-- Polyhedral Example --
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>

Siehe auch

ST_GeomFromGML


Name

ST_AsKML — Gibt die Geometrie als GML-Element - Version 2 oder 3 - zurück.

Synopsis

text ST_AsKML(geometry geom, integer maxdecimaldigits=15, text nprefix=NULL);

text ST_AsKML(geography geog, integer maxdecimaldigits=15, text nprefix=NULL);

Beschreibung

Gibt die Geometrie als ein Keyhole Markup Language (KML) Element zurück. Diese Funktion verfügt über mehrere Varianten. Die maximale Anzahl der Dezimalstellen die bei der Ausgabe verwendet wird (standardmäßig 15), die Version ist standardmäßig 2 und der Standardnamensraum hat kein Präfix.

[Warning]

Die Verwendung des Parameters maxdecimaldigits kann dazu führen, dass die Ausgabegeometrie ungültig wird. Um dies zu vermeiden, verwenden Sie zuerst ST_ReducePrecision mit einer geeigneten Rastergröße.

[Note]

Setzt voraus, dass PostGIS mit Proj-Unterstützung kompiliert wurde. Verwenden Sie bitte PostGIS_Full_Version, um festzustellen ob mit proj kompiliert wurde.

[Note]

Verfügbarkeit: 1.2.2 - spätere Varianten ab 1.3.2 nehmen den Versionsparameter mit auf

[Note]

Erweiterung: 2.0.0 - Präfix Namensraum hinzugefügt. Standardmäßig kein Präfix

[Note]

Geändert: 3.0.0 - Die Signatur der "versionierten" Variante wurde entfernt.

[Note]

Die Ausgabe AsKML funktioniert nicht bei Geometrien ohne SRID

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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>


Siehe auch

ST_AsSVG, ST_AsGML


Name

ST_AsLatLonText — Gibt die "Grad, Minuten, Sekunden"-Darstellung für den angegebenen Punkt aus.

Synopsis

text ST_AsLatLonText(geometry pt, text format='');

Beschreibung

Gibt die "Grad, Minuten, Sekunden"-Darstellung des Punktes aus.

[Note]

Es wird angenommen, dass der Punkt in einer Breite/Länge-Projektion vorliegt. Die X (Länge) und Y (Breite) Koordinaten werden bei der Ausgabe in den "üblichen" Bereich (-180 to +180 für die Länge, -90 to +90 für die Breite) normalisiert.

Der Textparameter ist eine Zeichenkette für die Formatierung der Ausgabe, ähnlich wie die Zeichenkette für die Formatierung der Datumsausgabe. Gültige Zeichen sind "D" für Grad/Degrees, "M" für Minuten, "S" für Sekunden, und "C" für die Himmelsrichtung (NSEW). DMS Zeichen können wiederholt werden, um die gewünschte Zeichenbreite und Genauigkeit anzugeben ("SSS.SSSS" bedeutet z.B. " 1.0023").

"M", "S", und "C" sind optional. Wenn "C" weggelassen wird, werden Grad mit einem "-" Zeichen versehen, wenn Süd oder West. Wenn "S" weggelassen wird, werden die Minuten als Dezimalzahl mit der vorgegebenen Anzahl an Kommastellen angezeigt. Wenn "M" wegggelassen wird, werden die Grad als Dezimalzahl mit der vorgegebenen Anzahl an Kommastellen angezeigt.

Wenn die Zeichenkette für das Ausgabeformat weggelassen wird (oder leer ist) wird ein Standardformat verwendet.

Verfügbarkeit: 2.0

Beispiele

Standardformat.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));
      st_aslatlontext
----------------------------
 2°19'29.928"S 3°14'3.243"W

Ein Format angeben (identisch mit Standardformat).

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"C'));
      st_aslatlontext
----------------------------
 2°19'29.928"S 3°14'3.243"W

Andere Zeichen als D, M, S, C und "." werden lediglich durchgereicht.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C'));
                                   st_aslatlontext
--------------------------------------------------------------------------------------
 2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W

Grad mit einem Vorzeichen versehen - anstatt der Himmelsrichtung.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"'));
      st_aslatlontext
----------------------------
 -2°19'29.928" -3°14'3.243"

Dezimalgrad.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
          st_aslatlontext
-----------------------------------
 2.3250 degrees S 3.2342 degrees W

Überhöhte Werte werden normalisiert.

SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));
        st_aslatlontext
-------------------------------
 72°19'29.928"S 57°45'56.757"E

Name

ST_AsMARC21 — Gibt die Geometrie als MARC21/XML-Datensatz mit einem geografischen Datenfeld (034) zurück.

Synopsis

text ST_AsMARC21 ( geometry geom , text format='hdddmmss' );

Beschreibung

Diese Funktion gibt einen MARC21/XML-Datensatz mit Codierten kartographisch-mathematischen Daten zurück, der die Bounding Box einer bestimmten Geometrie darstellt. Der Parameter Format erlaubt die Codierung der Koordinaten in den Unterfeldern $d,$e,$f und $g in allen vom MARC21/XML-Standard unterstützten Formaten zu codieren. Gültige Formate sind:

  • Himmelsrichtung, Grad, Minuten und Sekunden (Standard): hdddmmss

  • Dezimalgrad mit Himmelsrichtung: hddd.dddddd

  • Dezimalgrad ohne Himmelsrichtung: ddd.dddddd

  • Dezimalminuten mit Himmelsrichtung: hdddmm.mmmm

  • Dezimalminuten ohne Himmelsrichtung: dddmm.mmmm

  • Dezimalsekunden mit Himmelsrichtung: hdddmmss.sss

Das Dezimalzeichen kann auch ein Komma sein, z.B. hdddmm,mmmm.

Die Genauigkeit von Dezimalformaten kann durch die Anzahl der Zeichen nach dem Dezimalzeichen begrenzt werden, z. B. hdddmm.mm für Dezimalminuten mit einer Genauigkeit von zwei Dezimalstellen.

Diese Funktion ignoriert die Dimensionen Z und M.

LOC MARC21/XML-Versionen werden unterstützt:

Verfügbarkeit: 3.3.0

[Note]

Diese Funktion unterstützt keine Geometrien, die nicht lon/lat sind, da diese nicht vom MARC21/XML-Standard (Coded Cartographic Mathematical Data) unterstützt werden.

[Note]

Der MARC21/XML-Standard bietet keine Möglichkeit, das räumliche Referenzsystem für kartografisch-mathematische Daten zu kommentieren, was bedeutet, dass diese Information nach der Konvertierung in MARC21/XML verloren geht.

Beispiele

Konvertierung eines POINT in MARC21/XML im Format hdddmmss (Standard)



                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>



Konvertierung eines POLYGON in MARC21/XML in dezimaler Form



                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>



Konvertierung einer GEOMETRYCOLLECTION in MARC21/XML im Dezimalminutenformat. Die Reihenfolge der Geometrien in der MARC21/XML-Ausgabe entspricht der Reihenfolge in der Sammlung.



                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>




Name

ST_AsMVTGeom — Transformiert eine Geometrie in den Koordinatenraum einer MVT-Kachel.

Synopsis

geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);

Beschreibung

Transformiert eine Geometrie in den Koordinatenraum einer MVT-Kachel (Mapbox Vector Tile) und beschneidet sie gegebenenfalls auf die Kachelgrenzen. Die Geometrie muss im Koordinatensystem der Zielkarte liegen (ggf. mit ST_Transform). Üblicherweise ist dies Web Mercator (SRID:3857).

Die Funktion versucht, die Gültigkeit der Geometrie zu erhalten, und korrigiert sie gegebenenfalls. Dies kann dazu führen, dass die Ergebnisgeometrie auf eine niedrigere Dimension kollabiert.

Die rechteckigen Grenzen der Kachel im Koordinatenraum der Zielkarte müssen angegeben werden, damit die Geometrie transformiert und bei Bedarf beschnitten werden kann. Die Begrenzungen können mit ST_TileEnvelope erzeugt werden.

Diese Funktion wird verwendet, um die Geometrie in den von ST_AsMVT benötigten Kachelkoordinatenraum zu konvertieren.

geom ist die zu transformierende Geometrie, im Koordinatensystem der Zielkarte.

bounds ist die rechteckige Begrenzung der Kachel im Kartenkoordinatenraum, ohne Puffer.

extent ist die Größe der Kachelausdehnung im Kachelkoordinatenraum, wie in der MVT-Spezifikation definiert. Der Standardwert ist 4096.

buffer ist die Puffergröße im Kachelkoordinatenraum für das Clipping der Geometrie. Der Standardwert ist 256.

clip_geom ist ein boolescher Wert, der bestimmt, ob Geometrien abgeschnitten oder unverändert kodiert werden. Der Standardwert ist true.

Verfügbarkeit: 2.4.0

[Note]

Ab 3.0 kann zum Ausschneiden und Validieren von MVT-Polygonen bei der Konfiguration Wagyu gewählt werden. Diese Bibliothek ist schneller und liefert genauere Ergebnisse als die standardmäßige GEOS-Bibliothek, sie kann aber kleine Polygone verwerfen.

Beispiele

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));
                              st_astext
--------------------------------------------------------------------
 MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))
                

Kanonisches Beispiel für eine Web-Mercator-Kachel unter Verwendung einer berechneten Kachelgrenze zur Abfrage und zum Ausschneiden von Geometrie.


SELECT ST_AsMVTGeom(
            ST_Transform( geom, 3857 ),
            ST_TileEnvelope(12, 513, 412), extent =
> 4096, buffer =
> 64) AS geom
  FROM data
  WHERE geom && ST_TileEnvelope(12, 513, 412, margin =
> (64.0 / 4096))



Name

ST_AsMVT — Aggregatfunktion, die eine MVT-Darstellung einer Reihe von Zeilen zurückgibt.

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

Beschreibung

Eine Aggregatfunktion, die eine binäre Mapbox Vector Tile-Darstellung eines Satzes von Zeilen zurückgibt, die einer Kachelebene entsprechen. Die Zeilen müssen eine Geometriespalte enthalten, die als Feature-Geometrie kodiert wird. Die Geometrie muss im Kachelkoordinatenraum vorliegen und gemäß der MVT-Spezifikation gültig sein. ST_AsMVTGeom kann zur Transformation der Geometrie in den Kachelkoordinatenraum verwendet werden. Andere Zeilenspalten werden als Feature-Attribute kodiert.

Das Mapbox Vector Tile Format kann Geoobjekte mit unterschiedlichen Attributen speichern. Um diese Möglichkeit zu nutzen, muss eine JSONB-Spalte in den Datensätzen mitgeliefert werden, welche in einer tieferen Ebene die JSON-Objekte enthält. Die Schlüssel und Werte im JSONB werden als Featureattribute kodiert.

Durch das Aneinanderhängen mehrerer Funktionsaufrufe mittels ||, können Tiles mit mehreren Ebenen erstellt werden.

[Important]

Darf nicht mit einer GEOMETRYCOLLECTION im Datensatz aufgerufen werden. Es kann aber ST_AsMVTGeom verwendet werden, um eine Sammelgeometrie einzubinden.

row Datenzeilen mit zumindest einer Geometriespalte.

name ist die Bezeichnung der Ebene. Standardmäßig die Zeichenkette "default".

extent ist die Ausdehnung der Tiles in Bildschirmeinheiten. Standardmäßig 4096.

geom_name ist der Name der Geometriespalte in den Zeilendaten. Standard ist die erste Geometriespalte. Beachten Sie, dass PostgreSQL standardmäßig automatisch unquotierte Bezeichner in Kleinbuchstaben umwandelt, was bedeutet, dass dieser Parameter in Kleinbuchstaben angegeben werden muss, es sei denn, die Geometriespalte ist in Anführungszeichen gesetzt, z. B. "MyMVTGeom".

feature_id_name ist die Bezeichnung der Feature-ID Spalte im Datensatz. Ist der Übergabewert NULL oder negativ, dann wird die Feature-ID nicht gesetzt. Die erste Spaltee mit einem passenden Namen und einem gültigen Datentyp (Smallint, Integer, Bigint) wird als Feature-ID verwendet, alle nachfolgenden Spalten werden als Eigenschaften hinzugefügt. JSON-Properties werden nicht unterstützt.

Erweiterung: 3.0 - Unterstützung für eine Feature-ID.

Erweiterung: 2.5.0 - Unterstützung von nebenläufigen Abfragen.

Verfügbarkeit: 2.4.0

Beispiele

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;


        

Name

ST_AsSVG — Gibt eine Geometrie als SVG-Pfad aus.

Synopsis

text ST_AsSVG(geometry geom, integer rel=0, integer maxdecimaldigits=15);

text ST_AsSVG(geography geog, integer rel=0, integer maxdecimaldigits=15);

Beschreibung

Gibt die Geometrie als Skalare Vektor Graphik (SVG-Pfadgeometrie) aus. Verwenden Sie 1 als zweiten Übergabewert um die Pfadgeometrie in relativen Schritten zu implementieren; Standardmäßig (oder 0) verwendet absolute Schritte. Der dritte Übergabewert kann verwendet werden, um die maximale Anzahl der Dezimalstellen bei der Ausgabe einzuschränken (standardmäßig 15). Punktgeometrie wird als cx/cy übersetzt wenn der Übergabewert 'rel' gleich 0 ist, x/y wenn 'rel' 1 ist. Mehrfachgeometrie wird durch Beistriche (",") getrennt, Sammelgeometrie wird durch Strichpunkt (";") getrennt.

Für die Arbeit mit PostGIS-SVG-Grafiken gibt es die pg_svg-Bibliothek, die plpgsql-Funktionen für die Arbeit mit Ausgaben von ST_AsSVG bereitstellt.

Verbessert: 3.4.0 zur Unterstützung aller Kurventypen

Änderung: 2.0.0 verwendet Standardargumente und unterstützt benannte Argumente.

[Note]

Verfügbarkeit: 1.2.2. Änderung: 1.4.0 L-Befehl beim absoluten Pfad aufgenommen, um mit http://www.w3.org/TR/SVG/paths.html#PathDataBNF konform zu sein.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT ST_AsSVG('POLYGON((0 0,0 1,1 1,1 0,0 0))'::geometry);

st_assvg
--------
M 0 0 L 0 -1 1 -1 1 0 Z

Kreisförmige Schnur

SELECT ST_AsSVG( ST_GeomFromText('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)') );

st_assvg
--------
M -2 0 A 2 2 0 0 1 2 0 A 2 2 0 0 1 2 -4

Multi-Kurve

SELECT ST_AsSVG('MULTICURVE((5 5,3 5,3 3,0 3),
 CIRCULARSTRING(0 0,2 1,2 2))'::geometry, 0, 0);
 st_assvg
------------------------------------------------
 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);

st_assvg
---------------------------------------------------------
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 — Gibt die Geometrie als TWKB, aka "Tiny Well-known Binary" zurück

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

Beschreibung

Gibt die Geometrie im TWKB ("Tiny Well-Known Binary") Format aus. TWKB ist ein komprimiertes binäres Format mit dem Schwerpunkt, die Ausgabegröße zu minimieren.

Der Parameter 'decimaldigits' bestimmt die Anzahl der Dezimalstellen bei der Ausgabe. Standardmäßig werden die Werte vor der Zeichenkodierung auf die Einserstelle gerundet. Wenn Sie die Daten mit höherer Genauigkeit übergeben wollen, erhöhen Sie bitte die Anzahl der Dezimalstellen. Zum Beispiel bedeutet ein Wert von 1, dass die erste Dezimalstelle erhalten bleibt.

Die Parameter "sizes" und "bounding_boxes" bestimmen ob zusätzliche Information über die kodierte Länge und die Abgrenzung des Objektes in der Ausgabe eingebunden werden. Standardmäßig passiert dies nicht. Drehen Sie diese bitte nicht auf, solange dies nicht von Ihrer Client-Software benötigt wird, da dies nur unnötig Speicherplatz verbraucht (Einsparen von Speicherplatz ist der Sinn von TWKB).

Das Feld-Eingabeformat dieser Funktion wird verwendet um eine Sammelgeometriee und eindeutige Identifikatoren in eine TWKB-Collection zu konvertieren, welche die Identifikatoren erhält. Dies ist nützlich für Clients, die davon ausgehen, eine Sammelgeometrie auszupacken, um so auf zusätzliche Information über die internen Objekte zuzugreifen. Sie können das Feld mit der Funktion array_agg erstellen. Die anderen Parameter bewirken dasselbe wie bei dem einfachen Format dieser Funktion.

[Note]

Die Formatspezifikation steht Online unter https://github.com/TWKB/Specification zur Verfügung, und Code zum Aufbau eines JavaScript Clints findet sich unter https://github.com/TWKB/twkb.js.

Erweiterung: 2.4.0 Hauptspeicher- und Geschwindigkeitsverbesserungen.

Verfügbarkeit: 2.2.0

Beispiele

SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
                 st_astwkb
--------------------------------------------
\x02000202020808

Um ein aggregiertes TWKB-Objekt inklusive Identifikatoren zu erzeugen, fassen Sie bitte die gewünschte Geometrie und Objekte zuerst mittels "array_agg()" zusammen und rufen anschließend die passende TWKB Funktion auf.

SELECT ST_AsTWKB(array_agg(geom), array_agg(gid)) FROM mytable;
                 st_astwkb
--------------------------------------------
\x040402020400000202

Name

ST_AsX3D — Gibt eine Geometrie im X3D XML Knotenelement-Format zurück: ISO-IEC-19776-1.2-X3DEncodings-XML

Synopsis

text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);

Beschreibung

Gibt eine Geometrie als X3D knotenformatiertes XML Element zurück http://www.web3d.org/standards/number/19776-1. Falls maxdecimaldigits (Genauigkeit) nicht angegeben ist, wird sie standardmäßig 15.

[Note]

Es gibt verschiedene Möglichkeiten eine PostGIS Geometrie in X3D zu übersetzen, da sich der X3D Geometrietyp nicht direkt in den geometrischen Datentyp von PostGIS abbilden lässt. Einige neuere X3D Datentypen, die sich besser abbilden lassen könnten haben wir vermieden, da diese von den meisten Rendering-Tools zurzeit nicht untestützt werden. Dies sind die Abbildungen für die wir uns entschieden haben. Falls Sie Ideen haben, wie wir es den Anwendern ermöglichen können ihre bevorzugten Abbildungen anzugeben, können Sie gerne ein Bug-Ticket senden.

Im Folgenden wird beschrieben, wie der PostGIS 2D/3D Datentyp derzeit in den X3D Datentyp abgebildet wird

Das Argument 'options' ist ein Bitfeld. Ab PostGIS 2.2+ wird dieses verwendet, um anzuzeigen ob die Koordinaten als X3D geospatiale Knoten in GeoKoordinaten dargestellt werden und auch ob X- und Y-Achse vertauscht werden sollen. Standardmäßig erfolgt die Ausgabe durch ST_AsX3D im Datenbankformat (Länge, Breite oder X,Y), aber es kann auch der X3D Standard mit Breite/Länge oder Y/X bevorzugt werden.

  • 0: X/Y in der Datenbankreihenfolge (z.B. ist Länge/Breite = X,Y die standardmäßige Datenbankreihenfolge), Standardwert, und nicht-spatiale Koordinaten (nur der normale alte Koordinaten-Tag).

  • 1: X und Y umdrehen. In Verbindung mit der Option für GeoKoordinaten wird bei der Standardausgabe die Breite zuerst/"latitude_first" ausgegeben und die Koordinaten umgedreht.

  • 2: Die Koordinaten werden als geospatiale GeoKoordinaten ausgegeben. Diese Option gibt eine Fehlermeldung aus, falls die Geometrie nicht in WGS 84 Länge/Breite (SRID: 4326) vorliegt. Dies ist zurzeit der einzige GeoKoordinaten-Typ der unterstützt wird.Siehe die X3D Spezifikation für Koordinatenreferenzsysteme. Die Standardausgabe ist GeoCoordinate geoSystem='"GD" "WE" "longitude_first"'. Wenn Sie den X3D Standard bevorzugen GeoCoordinate geoSystem='"GD" "WE" "latitude_first"' verwenden Sie bitte (2+1) = 3

PostGIS Datentyp2D X3D Datentyp3D X3D Datentyp
LINESTRINGzurzeit nicht implementiert - wird PolyLine2DLineSet
MULTILINESTRINGzurzeit nicht implementiert - wird PolyLine2DIndexedLineSet
MULTIPOINTPolypoint2DPointSet
POINTgibt leerzeichengetrennte Koordinaten ausgibt leerzeichengetrennte Koordinaten aus
(MULTI) POLYGON, POLYHEDRALSURFACEUngültiges X3D MarkupIndexedFaceSet (die inneren Ringe werden zurzeit als ein weiteres FaceSet abgebildet)
TINTriangleSet2D (zurzeit nicht implementiert)IndexedTriangleSet
[Note]

Die Unterstützung von 2D-Geometrie ist noch nicht vollständig. Die inneren Ringe werden zur Zeit lediglich als gesonderte Polygone abgebildet. Wir arbeiten daran.

Viele Fortschritte im 3D-Bereich, insbesondere mit X3D-Integration mit HTML5

Es gibt auch einen feinen OpenSource X3D Viewer, den Sie benützen können, um Geometrien darzustellen. Free Wrl http://freewrl.sourceforge.net/ Binärdateien sind für Mac, Linux und Windows verfügbar. Sie können den mitgelieferten FreeWRL_Launcher verwenden, um Gemetrien darzustellen.

Schauen Sie sich auch PostGIS minimalistischer X3D-Viewer an, der diese Funktion nutzt, und x3dDom html/js open source toolkit.

Verfügbarkeit: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML

Erweiterung: 2.2.0: Unterstützung für geographische Koordinaten und Vertauschen der Achsen (x/y, Länge/Breite). Für nähere Details siehe Optionen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Beispiel: Erzeugung eines voll funktionsfähigen X3D Dokuments - Dieses erzeugt einen Würfel, den man sich mit FreeWrl und anderen X3D-Viewern ansehen kann.

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-Gebäude

Kopieren Sie die Ausgabe dieser Abfrage und fügen Sie sie in x3d scene viewer ein und klicken Sie auf Anzeigen

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

Gebäude, die durch Unterteilung von PostGIS und Extrusion gebildet werden

Beispiel: Ein Achteck, um 3 Einheiten gehoben und mit einer dezimalen Genauigkeit von 6

SELECT ST_AsX3D(
ST_Translate(
    ST_Force_3d(
        ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,
    3)
  ,6) As x3dfrag;

x3dfrag
--------
<IndexedFaceSet 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>

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

Beispiel: Geschlossener MultiLinestring (die Begrenzung eines Polygons mit Lücken)

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 — Gibt die Geometrie in der GeoHash Darstellung aus.

Synopsis

text ST_GeoHash(geometry geom, integer maxchars=full_precision_of_point);

Beschreibung

Berechnet eine GeoHash-Darstellung einer Geometrie. Ein GeoHash kodiert einen geografischen Punkt in eine Textform, die auf der Grundlage von Präfixen sortierbar und durchsuchbar ist. Ein kürzerer GeoHash ist eine weniger präzise Darstellung eines Punktes. Man kann ihn sich als eine Box vorstellen, die den Punkt enthält.

Auch Nicht-Punkt-Geometriewerte mit einer Ausdehnung ungleich Null können auf GeoHash-Codes abgebildet werden. Die Genauigkeit des Codes hängt von der geografischen Ausdehnung der Geometrie ab.

Wenn maxchars nicht angegeben wird, ist der zurückgegebene GeoHash-Code für die kleinste Zelle, die die Eingabegeometrie enthält. Punkte geben einen GeoHash mit einer Genauigkeit von 20 Zeichen zurück (ungefähr genug, um die volle doppelte Genauigkeit der Eingabe zu speichern). Andere Geometrietypen können je nach Umfang der Geometrie einen GeoHash mit geringerer Genauigkeit zurückgeben. Größere Geometrien werden mit geringerer, kleinere mit höherer Genauigkeit dargestellt. Der durch den GeoHash-Code ermittelte Kasten enthält immer das eingegebene Merkmal.

Wenn maxchars angegeben ist, hat der zurückgegebene GeoHash-Code höchstens so viele Zeichen. Er entspricht einer (möglicherweise) weniger genauen Darstellung der Eingabegeometrie. Bei Nicht-Punkten ist der Ausgangspunkt der Berechnung der Mittelpunkt des Begrenzungsrahmens der Geometrie.

Verfügbarkeit: 1.4.0

[Note]

ST_GeoHash setzt voraus, dass die Eingabegeometrie in geografischen (Lon/Lat) Koordinaten vorliegt.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Beispiele

SELECT ST_GeoHash( ST_Point(-126,48) );

         st_geohash
----------------------
 c0w3hf1s70w3hf1s70w3

SELECT ST_GeoHash( ST_Point(-126,48), 5);

 st_geohash
------------
 c0w3h

-- This line contains the point, so the GeoHash is a prefix of the point code
SELECT ST_GeoHash('LINESTRING(-126 48, -126.1 48.1)'::geometry);

 st_geohash
------------
 c0w3

                

7.10. Operatoren

7.10.1. Bounding-Box-Operatoren

  • && — Gibt TRUE zurück, wenn die 2D Bounding Box von A die 2D Bounding Box von B schneidet.
  • &&(geometry,box2df) — Gibt TRUE zurück, wenn sich die 2D Bounding Box (cached) einer Geometrie mit einer 2D Bounding Box mit Gleitpunktgenauigkeit (BOX2DF) überschneidet.
  • &&(box2df,geometry) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) eine Geometrie (cached) 2D bounding box schneidet.
  • &&(box2df,box2df) — Gibt TRUE zurück, wenn sich zwei 2D float precision Bounding Boxes (BOX2DF) überschneiden.
  • &&& — Gibt TRUE zurück, wenn A's n-D bounding box B's n-D bounding box schneidet.
  • &&&(geometry,gidx) — Gibt TRUE zurück, wenn die (cached) n-D bounding box einer Geometrie eine n-D float precision bounding box (GIDX) schneidet.
  • &&&(gidx,geometry) — Gibt TRUE zurück, wenn eine n-D float precision bounding box (GIDX) eine (cached) n-D bounding box einer Geometrie schneidet.
  • &&&(gidx,gidx) — Gibt TRUE zurück, wenn sich zwei n-D float precision bounding boxes (GIDX) gegenseitig überschneiden.
  • &< — Gibt TRUE zurück, wenn die bounding box der Geometrie A, die bounding box der Geometrie B überlagert oder links davon liegt.
  • &<| — Gibt TRUE zurück, wenn die bounding box von A jene von B überlagert oder unterhalb liegt.
  • &> — Gibt TRUE zurück, wenn die Bounding Box von A jene von B überlagert oder rechts davon liegt.
  • << — Gibt TRUE zurück, wenn die Bounding Box von A zur Gänze links von der von B liegt.
  • <<| — Gibt TRUE zurück, wenn A's Bounding Box zur Gänze unterhalb von der von B liegt.
  • = — Gibt TRUE zurück, wenn die Koordinaten und die Reihenfolge der Koordinaten der Geometrie/Geographie A und der Geometrie/Geographie B ident sind.
  • >> — Gibt TRUE zurück, wenn A's bounding box zur Gänze rechts von der von B liegt.
  • @ — Gibt TRUE zurück, wenn die Bounding Box von A in jener von B enthalten ist.
  • @(geometry,box2df) — Gibt TRUE zurück, wenn die 2D Bounding Box einer Geometrie in einer 2D float precision Bbounding Box (BOX2DF) enthalten ist.
  • @(box2df,geometry) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) in der 2D Bounding Box einer Geometrie enthalten ist..
  • @(box2df,box2df) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) innerhalb einer anderen 2D float precision bounding box enthalten ist.
  • |&> — Gibt TRUE zurück, wenn A's bounding box diejenige von B überlagert oder oberhalb von B liegt.
  • |>> — Gibt TRUE zurück, wenn A's bounding box is zur Gänze oberhalb der von B liegt.
  • ~ — Gibt TRUE zurück, wenn A's bounding box die von B enthält.
  • ~(geometry,box2df) — Gibt TRUE zurück, wenn die 2D bounding box einer Geometrie eine 2D float precision bounding box (GIDX) enthält.
  • ~(box2df,geometry) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) die 2D Bounding Box einer Geometrie enthält.
  • ~(box2df,box2df) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) eine andere 2D float precision bounding box (BOX2DF) enthält.
  • ~= — Gibt TRUE zurück, wenn die bounding box von A ident mit jener von B ist.

Name

&& — Gibt TRUE zurück, wenn die 2D Bounding Box von A die 2D Bounding Box von B schneidet.

Synopsis

boolean &&( geometry A , geometry B );

boolean &&( geography A , geography B );

Beschreibung

Der && Operator gibt TRUE zurück, wenn die 2D Bounding Box von Geometrie A die 2D Bounding Box der Geometrie von B schneidet.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Erweiterung: Mit 2.0.0 wurde die Unterstützung für polyedrische Oberflächen eingeführt.

Verfügbarkeit: Mit 1.5.0 wurde die Unterstützung von geograpischen Koordinaten eingeführt

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

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)

Siehe auch

ST_Intersects, &>, &<|, &<, ~, @


Name

&&(geometry,box2df) — Gibt TRUE zurück, wenn sich die 2D Bounding Box (cached) einer Geometrie mit einer 2D Bounding Box mit Gleitpunktgenauigkeit (BOX2DF) überschneidet.

Synopsis

boolean &&( geometry A , box2df B );

Beschreibung

Der && Operator gibt TRUE zurück, wenn die im Cache befindliche 2D Bounding Box der Geometrie A sich mit der 2D Bounding Box von B, unter Verwendung von Gleitpunktgenauigkeit überschneidet. D.h.: falls B eine (double precision) box2d ist, wird diese intern in eine auf Gleitpunkt genaue 2D Bounding Box (BOX2DF) umgewandelt.

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_Point(1,1) && ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&(box2df,geometry) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) eine Geometrie (cached) 2D bounding box schneidet.

Synopsis

boolean &&( box2df A , geometry B );

Beschreibung

Der && Operator gibt TRUE zurück, wenn die 2D Bounding Box A die zwischengespeicherte 2D Bounding Box der Geometrie B, unter Benutzung von Fließpunktgenauigkeit, schneidet. D.h.: wenn A eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) umgewandelt.

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_Point(1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&(box2df,box2df) — Gibt TRUE zurück, wenn sich zwei 2D float precision Bounding Boxes (BOX2DF) überschneiden.

Synopsis

boolean &&( box2df A , box2df B );

Beschreibung

Der && Operator gibt TRUE zurück, wenn sich zwei 2D Bounding Boxes A und B, unter Benutzung von float precision, gegenseitig überschneiden. D.h.: Wenn A (oder B) eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) umgewandelt

[Note]

Dieser Operator ist für die interne Nutzung durch BRIN Indizes, und nicht so sehr durch Anwender, vorgesehen.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

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

&&& — Gibt TRUE zurück, wenn A's n-D bounding box B's n-D bounding box schneidet.

Synopsis

boolean &&&( geometry A , geometry B );

Beschreibung

Der &&& Operator gibt TRUE zurück, wenn die n-D bounding box der Geometrie A die n-D bounding box der Geometrie B schneidet.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Verfügbarkeit: 2.0.0

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele: 3D LineStrings

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

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

Siehe auch

&&


Name

&&&(geometry,gidx) — Gibt TRUE zurück, wenn die (cached) n-D bounding box einer Geometrie eine n-D float precision bounding box (GIDX) schneidet.

Synopsis

boolean &&&( geometry A , gidx B );

Beschreibung

Der &&& Operator gibt TRUE zurück, wenn die zwischengespeicherte n-D bounding box der Geometrie A die n-D bounding box B, unter Benutzung von float precision, schneidet. D.h.: Wenn B eine (double precision) box3d ist, wird diese intern in eine float precision 3D bounding box (GIDX) umgewandelt

[Note]

Dieser Operator ist für die interne Nutzung durch BRIN Indizes, und nicht so sehr durch Anwender, vorgesehen.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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) — Gibt TRUE zurück, wenn eine n-D float precision bounding box (GIDX) eine (cached) n-D bounding box einer Geometrie schneidet.

Synopsis

boolean &&&( gidx A , geometry B );

Beschreibung

Der &&& Operator gibt TRUE zurück, wenn die n-D bounding box A die cached n-D bounding box der Geometrie B, unter Benutzung von float precision, schneidet. D.h.: wenn A eine (double precision) box3d ist, wir diese intern in eine float precision 3D bounding box (GIDX) umgewandelt

[Note]

Dieser Operator ist für die interne Nutzung durch BRIN Indizes, und nicht so sehr durch Anwender, vorgesehen.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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) — Gibt TRUE zurück, wenn sich zwei n-D float precision bounding boxes (GIDX) gegenseitig überschneiden.

Synopsis

boolean &&&( gidx A , gidx B );

Beschreibung

Der &&& Operator gibt TRUE zurück, wenn sich zwei n-D bounding boxes A und B, unter Benutzung von float precision, gegenseitig überschneiden. D.h.: wenn A (oder B) eine (double precision) box3d ist, wird diese intern in eine float precision 3D bounding box (GIDX) umgewandelt

[Note]

Dieser Operator ist für die interne Nutzung durch BRIN Indizes, und nicht so sehr durch Anwender, vorgesehen.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

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

&< — Gibt TRUE zurück, wenn die bounding box der Geometrie A, die bounding box der Geometrie B überlagert oder links davon liegt.

Synopsis

boolean &<( geometry A , geometry B );

Beschreibung

Der &< Operator gibt TRUE zurück, wenn die bounding box der Geometrie A die bounding box der Geometrie B überlagert oder links davon liegt, oder präziser, überlagert und NICHT rechts von der bounding box der Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

&&, |&>, &>, &<|


Name

&<| — Gibt TRUE zurück, wenn die bounding box von A jene von B überlagert oder unterhalb liegt.

Synopsis

boolean &<|( geometry A , geometry B );

Beschreibung

Der &<| Operator gibt TRUE zurück, wenn die Bounding Box der Geometrie A die Bounding Box der Geometrie B überlagert oder unterhalb liegt, oder präziser, überlagert oder NICHT oberhalb der Bounding der Geometrie B liegt.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

&&, |&>, &>, &<


Name

&> — Gibt TRUE zurück, wenn die Bounding Box von A jene von B überlagert oder rechts davon liegt.

Synopsis

boolean &>( geometry A , geometry B );

Beschreibung

Der &> Operator gibt TRUE zurück, wenn die Bounding Box der Geometrie A die Bounding Box der Geometrie B überlagert oder rechts von ihr liegt, oder präziser, überlagert und NICHT links von der Bounding Box der Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

&&, |&>, &<|, &<


Name

<< — Gibt TRUE zurück, wenn die Bounding Box von A zur Gänze links von der von B liegt.

Synopsis

boolean <<( geometry A , geometry B );

Beschreibung

Der << Operator gibt TRUE zurück, wenn die Bounding Box der Geometrie A zur Gänze links der Bounding Box der Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

>>, |>>, <<|


Name

<<| — Gibt TRUE zurück, wenn A's Bounding Box zur Gänze unterhalb von der von B liegt.

Synopsis

boolean <<|( geometry A , geometry B );

Beschreibung

Der <<| Operator gibt TRUE zurück, wenn die Bounding Box der Geometrie A zur Gänze unterhalb der Bounding Box von Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

<<, >>, |>>


Name

= — Gibt TRUE zurück, wenn die Koordinaten und die Reihenfolge der Koordinaten der Geometrie/Geographie A und der Geometrie/Geographie B ident sind.

Synopsis

boolean =( geometry A , geometry B );

boolean =( geography A , geography B );

Beschreibung

Der Operator = gibt TRUE zurück, wenn die Koordinaten und die Reihenfolge der Koordinaten der Geometrie/Geographie A und der Geometrie/Geographie B ident sind. PostgreSQL verwendet die =, <, und > Operatoren um die interne Sortierung und den Vergleich von Geometrien durchzuführen (z.B.: in einer GROUP BY oder ORDER BY Klausel). 

[Note]

Nur die Geometrie/Geographie die in allen Gesichtspunkten übereinstimmt, d.h. mit den selben Koordinaten in der gleichen Reihenfolge, werden von diesem Operator als gleich betrachtet. Für "räumliche Gleichheit", bei der Dinge wie die Reihenfolge der Koordinaten außer Acht gelassen werden, und die es ermöglicht Geoobjekte zu erfassen, die denselben räumlichen Bereich mit unterschiedlicher Darstellung abdecken, verwenden Sie bitte ST_OrderingEquals oder ST_Equals

[Caution]

Dieser Operator verwendet NICHT die Indizes, welche für die Geometrien vorhanden sind. Um eine Überprüfung auf exakte Gleichheit indexgestützt durchzuführen, kombinieren Sie bitte = mit &&.

Änderung: 2.4.0, in Vorgängerversionen war dies die Gleichheit der umschreibenden Rechtecke, nicht die geometrische Gleichheit. Falls Sie auf Gleichheit der umschreibenden Rechtecke prüfen wollen, verwenden Sie stattdesse bitte ~=.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

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


Name

>> — Gibt TRUE zurück, wenn A's bounding box zur Gänze rechts von der von B liegt.

Synopsis

boolean >>( geometry A , geometry B );

Beschreibung

Der >> Operator gibt TRUE zurück, wenn die Bounding Box von Geometrie A zur Gänze rechts der Bounding Box von Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

<<, |>>, <<|


Name

@ — Gibt TRUE zurück, wenn die Bounding Box von A in jener von B enthalten ist.

Synopsis

boolean @( geometry A , geometry B );

Beschreibung

Der @ Operator gibt TRUE zurück, wenn die Bounding Box der Geometrie A vollstänig in der Bounding Box der Geometrie B enthalten ist.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

~, &&


Name

@(geometry,box2df) — Gibt TRUE zurück, wenn die 2D Bounding Box einer Geometrie in einer 2D float precision Bbounding Box (BOX2DF) enthalten ist.

Synopsis

boolean @( geometry A , box2df B );

Beschreibung

Der @ Operator gibt TRUE zurück, wenn die 2D Bounding Box der Geometrie A in der 2D Bounding Box der Geometrie B , unter Benutzung von float precision, enthalten ist. D.h.: wenn B eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) übersetzt.

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

@(box2df,geometry) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) in der 2D Bounding Box einer Geometrie enthalten ist..

Synopsis

boolean @( box2df A , geometry B );

Beschreibung

Der @ Operator gibt TRUE zurück, wenn die 2D bounding box A in der 2D bounding box der Geometrie B, unter Verwendung von float precision, enthalten ist. D.h.: wenn B eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) umgewandelt

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

@(box2df,box2df) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) innerhalb einer anderen 2D float precision bounding box enthalten ist.

Synopsis

boolean @( box2df A , box2df B );

Beschreibung

Der @ Operator gibt TRUE zurück, wenn die 2D bounding box A innerhalb der 2D bounding box B, unter Verwendung von float precision, enthalten ist. D.h.: wenn A (oder B) eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) umgewandelt.

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

|&> — Gibt TRUE zurück, wenn A's bounding box diejenige von B überlagert oder oberhalb von B liegt.

Synopsis

boolean |&>( geometry A , geometry B );

Beschreibung

Der |&> Operator gibt TRUE zurück, wenn die bounding box der Geometrie A die bounding box der Geometrie B überlagert oder oberhalb liegt, oder präziser, überlagert oder NICHT unterhalb der Bounding Box der Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

&&, &>, &<|, &<


Name

|>> — Gibt TRUE zurück, wenn A's bounding box is zur Gänze oberhalb der von B liegt.

Synopsis

boolean |>>( geometry A , geometry B );

Beschreibung

Der Operator |>> gibt TRUE zurück, wenn die Bounding Box der Geometrie A zur Gänze oberhalb der Bounding Box von Geometrie B liegt.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

<<, >>, <<|


Name

~ — Gibt TRUE zurück, wenn A's bounding box die von B enthält.

Synopsis

boolean ~( geometry A , geometry B );

Beschreibung

Der ~ Operator gibt TRUE zurück, wenn die bounding box der Geometrie A zur Gänze die bounding box der Geometrie B enthält.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Beispiele

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)

Siehe auch

@, &&


Name

~(geometry,box2df) — Gibt TRUE zurück, wenn die 2D bounding box einer Geometrie eine 2D float precision bounding box (GIDX) enthält.

Synopsis

boolean ~( geometry A , box2df B );

Beschreibung

Der ~ Operator gibt TRUE zurück, wenn die 2D bounding box einer Geometrie A die 2D bounding box B, unter Verwendung von float precision, enthält. D.h.: wenn B eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) übersetzt

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) ~ ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS contains;

 contains
----------
 t
(1 row)

Name

~(box2df,geometry) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) die 2D Bounding Box einer Geometrie enthält.

Synopsis

boolean ~( box2df A , geometry B );

Beschreibung

Der ~ Operator gibt TRUE zurück, wenn die 2D bounding box A die Bounding Box der Geometrie B, unter Verwendung von float precision, enthält. D.h.: wenn A eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) umgewandelt.

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) AS contains;

 contains
----------
 t
(1 row)

Name

~(box2df,box2df) — Gibt TRUE zurück, wenn eine 2D float precision bounding box (BOX2DF) eine andere 2D float precision bounding box (BOX2DF) enthält.

Synopsis

boolean ~( box2df A , box2df B );

Beschreibung

Der ~ Operator gibt TRUE zurück, wenn die 2D bounding box A die 2D bounding box B, unter Verwendung von float precision, enthält. D.h.: wenn A eine (double precision) box2d ist, wird diese intern in eine float precision 2D bounding box (BOX2DF) umgewandelt

[Note]

Dieser Operand ist eher für die interne Nutzung durch BRIN Indizes, als durch die Anwender, gedacht.

Verfügbarkeit: Mit 2.3.0 wurde die Unterstützung von Block Range INdexes (BRIN) eingeführt. Erfordert PostgreSQL 9.5+.

Diese Methode unterstützt kreisförmige Strings und Kurven.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) AS contains;

 contains
----------
 t
(1 row)

Name

~= — Gibt TRUE zurück, wenn die bounding box von A ident mit jener von B ist.

Synopsis

boolean ~=( geometry A , geometry B );

Beschreibung

Der ~= Operator gibt TRUE zurück, wenn die bounding box der Geometrie/Geographie A ident mit der bounding box der Geometrie/Geographie B ist.

[Note]

Dieser Operand benützt jeden Index, der für die Geometrie zur Verfügung stellt.

Verfügbarkeit: 1.5.0 "Verhaltensänderung"

Diese Funktion unterstützt polyedrische Flächen.

[Warning]

Dieser Operator verhält sich ab PostGIS 1.5 insofern anders, als er vom Prüfen der Übereinstimmung der tatsächlichen Geometrie auf eine ledigliche Überprüfung der Gleichheit der Bounding Boxes abgeändert wurde. Um die Sache noch weiter zu komplizieren, hängt dieses Verhalten der Datenbank davon ab, ob ein hard oder soft upgrade durchgeführt wurde. Um herauszufinden, wie sich die Datenbank in dieser Beziehung verhält, führen Sie bitte die untere Abfrage aus. Um auf exakte Gleichheit zu prüfen benutzen Sie bitte ST_OrderingEquals oder ST_Equals.

Beispiele

select 'LINESTRING(0 0, 1 1)'::geometry ~= 'LINESTRING(0 1, 1 0)'::geometry as equality;
 equality   |
-----------------+
          t    |
                        

7.10.2. Operatoren

  • <-> — Gibt die 2D Entfernung zwischen A und B zurück.
  • |=| — Gibt die Entfernung zwischen den Trajektorien A und B, am Ort der dichtesten Annäherung, an.
  • <#> — Gibt die 2D Entfernung zwischen den Bounding Boxes von A und B zurück
  • <<->> — Gibt den n-D-Abstand zwischen den Geometrien oder Begrenzungsrahmen von A und B zurück

Name

<-> — Gibt die 2D Entfernung zwischen A und B zurück.

Synopsis

double precision <->( geometry A , geometry B );

double precision <->( geography A , geography B );

Beschreibung

Der <-> Operator gibt die 2D Entfernung zwischen zwei Geometrien zurück. Wird er in einer "ORDER BY" Klausel verwendet, so liefert er Index-unterstützte nearest-neighbor Ergebnismengen. PostgreSQL Versionen unter 9.5 geben jedoch lediglich die Entfernung der Centroide der bounding boxes zurück, während PostgreSQL 9.5+ mittels KNN-Methode die tatsächliche Entfernung zwischen den Geometrien, bei geographischen Koordinaten die Entfernung auf der Späre, widergibt.

[Note]

Dieser Operand verwendet 2D GiST Indizes, falls diese für die Geometrien vorhanden sind. Er unterscheidet sich insofern von anderen Operatoren, die räumliche Indizes verwenden, indem der räumliche Index nur dann verwendet wird, wenn sich der Operator in einer ORDER BY Klausel befindet.

[Note]

Der Index kommt nur zum Tragen, wenn eine der Geometrien eine Konstante ist (sich nicht in einer Subquery/CTE befindet). Z.B. 'SRID=3005;POINT(1011102 450541)'::geometry und nicht a.geom

Siehe OpenGeo workshop: Nearest-Neighbour Searching für ein praxisbezogenes Anwendungsbeispiel.

Verbesserung: 2.2.0 -- Echtes KNN ("K nearest neighbor") Verhalten für Geometrie und Geographie ab PostgreSQL 9.5+. Beachten Sie bitte, das KNN für Geographie auf der Späre und nicht auf dem Sphäroid beruht. Für PostgreSQL 9.4 und darunter, wird die Berechnung nur auf Basis des Centroids der Box unterstützt.

Änderung: 2.2.0 -- Da für Anwender von PostgreSQL 9.5 der alte hybride Syntax langsamer sein kann, möchten sie diesen Hack eventuell loswerden, falls der Code nur auf PostGIS 2.2+ 9.5+ läuft. Siehe die unteren Beispiele.

Verfügbarkeit: 2.0.0 -- Weak KNN liefert nearest neighbors, welche sich auf die Entfernung der Centroide der Geometrien, anstatt auf den tatsächlichen Entfernungen, stützen. Genaue Ergebnisse für Punkte, ungenau für alle anderen Geometrietypen. Verfügbar ab PostgreSQL 9.1+.

Beispiele

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)

Then the KNN raw answer:

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)

Wenn Sie "EXPLAIN ANALYZE" an den zwei Abfragen ausführen, sollte eine Performance Verbesserung im Ausmaß von einer Sekunde auftreten.

Anwender von PostgreSQL < 9.5 können eine hybride Abfrage erstellen, um die echten nearest neighbors aufzufinden. Zuerst eine CTE-Abfrage, welche die Index-unterstützten KNN-Methode anwendet, dann eine exakte Abfrage um eine korrekte Sortierung zu erhalten:

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)



Name

|=| — Gibt die Entfernung zwischen den Trajektorien A und B, am Ort der dichtesten Annäherung, an.

Synopsis

double precision |=|( geometry A , geometry B );

Beschreibung

Der |=| Operator gibt die 3D Entfernung zwischen zwei Trajektorien (Siehe ST_IsValidTrajectory). Dieser entspricht ST_DistanceCPA, da es sich jedoch um einen Operator handelt, kann dieser für nearest neightbor searches mittels eines N-dimensionalen Index verwendet werden (verlangt PostgreSQL 9.5.0 oder höher).

[Note]

Dieser Operand verwendet die ND GiST Indizes, welche für Geometrien vorhanden sein können. Er unterscheidet sich insofern von anderen Operatoren, die ebenfalls räumliche Indizes verwenden, als der räumliche Index nur dann angewandt wird, wenn sich der Operand in einer ORDER BY Klausel befindet.

[Note]

Der Index kommt nur zum Tragen, wenn eine der Geometrien eine Konstante ist (sich nicht in einer Subquery/CTE befindet). Z.B. 'SRID=3005;LINESTRINGM(0 0 0,0 0 1)'::geometry und nicht a.geom

Verfügbarkeit: 2.2.0. Index-unterstützt steht erst ab PostgreSQL 9.5+ zur Verfügung.

Beispiele

-- Save a literal query trajectory in a psql variable...
\set qt 'ST_AddMeasure(ST_MakeLine(ST_MakePointM(-350,300,0),ST_MakePointM(-410,490,0)),10,20)'
-- Run the query !
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

<#> — Gibt die 2D Entfernung zwischen den Bounding Boxes von A und B zurück

Synopsis

double precision <#>( geometry A , geometry B );

Beschreibung

Der <#> Operator gibt die Entfernung zwischen zwei floating point bounding boxes zurück, wobei diese eventuell vom räumlichen Index ausgelesen wird (PostgreSQL 9.1+ vorausgesetzt). Praktikabel falls man eine nearest neighbor Abfrage approximate nach der Entfernung sortieren will.

[Note]

Dieser Operand verwendet sämtliche Indizes, welche für die Geometrien vorhanden sind. Er unterscheidet sich insofern von anderen Operatoren, welche ebenfalls räumliche Indizes verwenden, als der räumliche Index nur dann verwendet wird, falls sich der Operand in einer ORDER BY Klausel befindet.

[Note]

Der Index kommt nur zum Tragen, wenn eine der Geometrien eine Konstante ist; z.B.: ORDER BY (ST_GeomFromText('POINT(1 2)') <#> geom) anstatt g1.geom <#>.

Verfügbarkeit: 2.0.0 -- KNN steht erst ab PostgreSQL 9.1+ zur Verfügung

Beispiele

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)


Name

<<->> — Gibt den n-D-Abstand zwischen den Geometrien oder Begrenzungsrahmen von A und B zurück

Synopsis

double precision <<->>( geometry A , geometry B );

Beschreibung

Der <<->> Operator gibt die n-D (euklidische) Entfernung zwischen den geometrischen Schwerpunkten der Begrenzungsrechtecke zweier Geometrien zurück. Praktikabel für nearest neighbor approximate distance ordering.

[Note]

Dieser Operator verwendet n-D GiST Indizes, falls diese für die Geometrien vorhanden sind. Er unterscheidet sich insofern von anderen Operatoren, die räumliche Indizes verwenden, indem der räumliche Index nur dann verwendet wird, wenn sich der Operator in einer ORDER BY Klausel befindet.

[Note]

Der Index kommt nur zum Tragen, wenn eine der Geometrien eine Konstante ist (sich nicht in einer Subquery/CTE befindet). Z.B. 'SRID=3005;POINT(1011102 450541)'::geometry und nicht a.geom

Verfügbarkeit: 2.2.0 -- KNN steht erst ab PostgreSQL 9.1+ zur Verfügung.

Siehe auch

<->

7.11. Lagevergleiche

Abstract

Diese Funktionen bestimmen die räumlichen Beziehungen zwischen Geometrien.

7.11.1. Topologische Beziehungen

  • ST_3DIntersects — Prüft, ob sich zwei Geometrien in 3D räumlich schneiden - nur für Punkte, Linienzüge, Polygone, polyedrische Flächen (Bereich)
  • ST_Contains — Tests, wenn jeder Punkt von B in A liegt und ihre Innenräume einen gemeinsamen Punkt haben
  • ST_ContainsProperly — Prüft, ob jeder Punkt von B im Inneren von A liegt
  • ST_CoveredBy — Prüft, ob jeder Punkt von A in B liegt
  • ST_Covers — Prüft, ob jeder Punkt von B in A liegt
  • ST_Crosses — Prüft, ob zwei Geometrien einige, aber nicht alle, innere Punkte gemeinsam haben
  • ST_Disjoint — Prüft, ob zwei Geometrien keine gemeinsamen Punkte haben
  • ST_Equals — Prüft, ob zwei Geometrien dieselbe Menge von Punkten enthalten
  • ST_Intersects — Prüft, ob sich zwei Geometrien schneiden (sie haben mindestens einen Punkt gemeinsam)
  • ST_LineCrossingDirection — Gibt eine Zahl zurück, die das Kreuzungsverhalten von zwei LineStrings angibt
  • ST_OrderingEquals — Prüft, ob zwei Geometrien die gleiche Geometrie darstellen und Punkte in der gleichen Richtungsreihenfolge haben
  • ST_Overlaps — Prüft, ob zwei Geometrien die gleiche Abmessung haben und sich schneiden, aber jede mindestens einen Punkt hat, der nicht in der anderen liegt
  • ST_Relate — Prüft, ob zwei Geometrien eine topologische Beziehung haben, die einem Schnittpunktmatrixmuster entspricht, oder berechnet ihre Schnittpunktmatrix
  • ST_RelateMatch — Testet, ob eine DE-9IM Schnittpunktmatrix mit einem Schnittpunktmuster übereinstimmt
  • ST_Touches — Prüft, ob zwei Geometrien mindestens einen Punkt gemeinsam haben, aber ihre Innenräume sich nicht schneiden
  • ST_Within — Tests, wenn jeder Punkt von A in B liegt und ihre Innenräume einen gemeinsamen Punkt haben

Name

ST_3DIntersects — Prüft, ob sich zwei Geometrien in 3D räumlich schneiden - nur für Punkte, Linienzüge, Polygone, polyedrische Flächen (Bereich)

Synopsis

boolean ST_3DIntersects( geometry geomA , geometry geomB );

Beschreibung

Overlaps, Touches und Within implizieren räumliche Überschneidung. Wenn irgendeine dieser Eigenschaften TRUE zurückgibt, dann überschneiden sich die geometrischen Objekte auch. Disjoint impliziert FALSE für die räumliche Überschneidung.

[Note]

Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind.

[Note]

Aufgrund von Floating-Robustness-Fehlern überschneiden sich Geometrien nicht immer so, wie man es nach der geometrischen Bearbeitung erwarten würde. So liegt beispielsweise der Punkt, der einer Geometrie am nächsten liegt, nicht unbedingt auf dem Linienzug. Für diese Art von Problemen, bei denen ein Abstand von einem Zentimeter einfach als Schnittpunkt betrachtet werden soll, verwenden Sie ST_3DDWithin.

Änderung: 3.0.0 das SFCGAL Back-end wurde entfernt, das GEOS Back-end unterstützt TIN.

Verfügbarkeit: 2.0.0

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Diese Funktion unterstützt Dreiecke und dreieckige unregelmäßige Netzoberflächen (TIN).

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM IEC 13249-3: 5.1

Beispiele mit dem geometrischen Datentyp

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)
    

Beispiele mit dem Datentyp TIN

SELECT ST_3DIntersects('TIN(((0 0 0,1 0 0,0 1 0,0 0 0)))'::geometry, 'POINT(.1 .1 0)'::geometry);
 st_3dintersects
-----------------
 t

Name

ST_Contains — Tests, wenn jeder Punkt von B in A liegt und ihre Innenräume einen gemeinsamen Punkt haben

Synopsis

boolean ST_Contains(geometry geomA, geometry geomB);

Beschreibung

Gibt TRUE zurück, wenn die Geometrie A die Geometrie B enthält. A enthält B nur dann, wenn alle Punkte von B innerhalb von A liegen (d. h. im Inneren oder am Rand von A) (oder gleichwertig, wenn keine Punkte von B im Äußeren von A liegen) und die Innenräume von A und B mindestens einen Punkt gemeinsam haben.

Mathematisch ausgedrückt: ST_Contains(A, B) ⇔ (A ⋂ B = B) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

Die Enthält-Beziehung ist reflexiv: Jede Geometrie enthält sich selbst. (Im Gegensatz dazu enthält im Prädikat ST_ContainsProperly eine Geometrie nicht sich selbst.) Die Beziehung ist antisymmetrisch: Wenn ST_Contains(A,B) = true und ST_Contains(B,A) = true, dann müssen die beiden Geometrien topologisch gleich sein (ST_Equals(A,B) = true).

ST_Contains ist die Umkehrung von ST_Within. ST_Contains(A,B) = ST_Within(B,A).

[Note]

Da die Innenräume einen gemeinsamen Punkt haben müssen, besteht eine Feinheit der Definition darin, dass Polygone und Linien nicht Linien und Punkte enthalten, die vollständig in ihrer Begrenzung liegen. Für weitere Details siehe Subtleties of OGC Covers, Contains, Within. Das Prädikat ST_Covers bietet eine umfassendere Beziehung.

[Note]

Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung eines Indices zu vermeiden, kann die Funktion _ST_Contains verwendet werden.

Wird durch das GEOS Modul ausgeführt

Verbessert: 2.3.0 Verbesserung des PIP-Kurzschlusses erweitert um die Unterstützung von MultiPoints mit wenigen Punkten. Frühere Versionen unterstützten nur Punkte in Polygonen.

[Important]

Verbessert: 3.0.0 ermöglicht die Unterstützung von GEOMETRYCOLLECTION

[Important]

Verwenden Sie diese Funktion nicht mit ungültigen Geometrien. Sie werden unerwartete Ergebnisse erhalten.

HINWEIS: Dies ist die "zulässige" Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3 - dasselbe wie innerhalb (Geometrie B, Geometrie A)

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.31

Beispiele

ST_Contains gibt TRUE in den folgenden Situationen zurück:

LINESTRING / MULTIPOINT

POLYGON / PUNKT

POLYGON / LINESTRING

VIELECK / VIELECK

ST_Contains gibt FALSE in den folgenden Situationen zurück:

POLYGON / MULTIPOINT

POLYGON / LINESTRING

Aufgrund der inneren Schnittpunktbedingung ST_Contains liefert FALSE in den folgenden Situationen (während ST_Covers TRUE liefert):

LINESTRING / PUNKT

POLYGON / LINESTRING

-- A circle within a 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;

-- Result
  smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                | t                | t                | t          | t        | f

-- Example demonstrating difference between contains and contains properly
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 — Prüft, ob jeder Punkt von B im Inneren von A liegt

Synopsis

boolean ST_ContainsProperly(geometry geomA, geometry geomB);

Beschreibung

Gibt true zurück, wenn jeder Punkt von B im Inneren von A liegt (oder äquivalent dazu, kein Punkt von B liegt im Rand oder außerhalb von A).

Mathematisch ausgedrückt: ST_EnthältEcht(A, B) ⇔ Int(A) ⋂ B = B

A enthält B ordnungsgemäß, wenn die DE-9IM-Schnittpunktmatrix für die beiden Geometrien mit [T**FF*FF*]

A enthält sich selbst nicht richtig, aber es enthält sich selbst.

Eine Anwendung für dieses Prädikat ist die Berechnung der Schnittpunkte einer Menge von Geometrien mit einer großen polygonalen Geometrie. Da die Schnittmenge eine recht langsame Operation ist, kann es effizienter sein, containsProperly zu verwenden, um Testgeometrien herauszufiltern, die vollständig innerhalb des Bereichs liegen. In diesen Fällen ist von vornherein bekannt, dass der Schnittpunkt genau die ursprüngliche Testgeometrie ist.

[Note]

Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung von Indizes zu vermeiden, verwenden Sie die Funktion _ST_ContainsProperly.

[Note]

Der Vorteil dieses Prädikats gegenüber ST_Contains und ST_Intersects ist, dass es effizienter berechnet werden kann, ohne dass die Topologie an einzelnen Punkten berechnet werden muss.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 1.4.0

[Important]

Verbessert: 3.0.0 ermöglicht die Unterstützung von GEOMETRYCOLLECTION

[Important]

Verwenden Sie diese Funktion nicht mit ungültigen Geometrien. Sie werden unerwartete Ergebnisse erhalten.

Beispiele

--a circle within a 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;
  --Result
  smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                     | t                    | f                    | t          | t                 | f

 --example demonstrating difference between contains and contains properly
 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 — Prüft, ob jeder Punkt von A in B liegt

Synopsis

boolean ST_CoveredBy(geometry geomA, geometry geomB);

boolean ST_CoveredBy(geography geogA, geography geogB);

Beschreibung

Gibt true zurück, wenn jeder Punkt in Geometrie/Geografie A innerhalb von Geometrie/Geografie B liegt (d. h. das Innere oder die Grenze von B schneidet). Gleichbedeutend wird getestet, dass kein Punkt von A außerhalb von B liegt.

Mathematisch ausgedrückt: ST_CoveredBy(A, B) ⇔ A ⋂ B = A

ST_CoveredBy ist die Umkehrung von ST_Covers. ST_CoveredBy(A,B) = ST_Covers(B,A).

Im Allgemeinen sollte diese Funktion anstelle von ST_Within verwendet werden, da sie eine einfachere Definition hat, die nicht die Eigenart hat, dass "Grenzen nicht innerhalb ihrer Geometrie liegen".

[Note]

Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung von Indizes zu vermeiden, verwenden Sie die Funktion _ST_CoveredBy.

[Important]

Verbessert: 3.0.0 ermöglicht die Unterstützung von GEOMETRYCOLLECTION