Mehr

Fehler bei der Installation von PostGIS 1.5?

Fehler bei der Installation von PostGIS 1.5?


Ich installiere PostGIS 1.5.

Nachdem Sie den Befehl ./configure eingegeben haben, wird Folgendes angezeigt:

pQserverversion in -lpq nicht gefunden. configure: Fehler: libpq konnte nicht gefunden werden.

Was bedeutet es?

Ich verwende Red Hat Linux (32 Bit) Version 5.3. PostgreSQL-Version 8.3.

Ich arbeite in der Regierung. Organisation und ich muss nur an dieser Version arbeiten, wenn ich die Datei configure.log angefragt habe.

configure:14876: Ergebnis: nein configure:14962: Ergebnis: Verwendung der benutzerdefinierten pg_config-Datei: /opt/PostgreSQL/8.3/bin/pg_config configure:14985: Ergebnis: Überprüfung der PostgreSQL-Version… PostgreSQL 8.3.23 configure:15027: Überprüfung der libpq -fe.h Benutzerfreundlichkeit configure:15027: gcc -c -g -O2 -I/opt/PostgreSQL/8.3/include conftest.c >&5 configure:15027: $? = 0 configure:15027: Ergebnis: ja configure:15027: Anwesenheit von libpq-fe.h prüfen configure:15027: gcc -E -I/opt/PostgreSQL/8.3/include conftest.c configure:15027: $? = 0 configure:15027: Ergebnis: ja configure:15027: Prüfung auf libpq-fe.h configure:15027: Ergebnis: ja configure:15039: Prüfung auf PQserverVersion in -lpq configure:15064: gcc -o conftest -g -O2 conftest .c -lpq -L/opt/PostgreSQL/8.3/lib -lpq >&5 /usr/bin/ld: Warnung: libssl.so.1.0.0, benötigt von /opt/PostgreSQL/8.3/lib/libpq.so, nicht gefunden (versuchen Sie es mit -rpath oder -rpath-link) /usr/bin/ld: Warnung: libcrypto.so.1.0.0, benötigt von /opt/PostgreSQL/8.3/lib/libpq.so, nicht gefunden (versuchen Sie es mit -rpath oder -rpath-link) /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf TLSv1_method' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufSSL_set_ex_data' /opt/PostgreSQL/8.3/ lib/libpq.so: undefinierter Verweis auf SSL_connect' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufX509_STORE_load_locations' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf BIO_free' /opt/PostgreSQL /8.3/lib/libpq.so: undefinierter Verweis auf BIO_ctrl' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf CRYPTO_s et_locking_callback' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufX509_NAME_oneline' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_CTX_set_verify' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf PEM_read_bio_PrivateKey' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_load_error_strings' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufX509_STORE_set_flags' /opt/PostgreSQL/8.3./lib/libpq also: undefinierter Verweis auf SSL_get_peer_certificate' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufX509_get_subject_name' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_free' /opt/PostgreSQL/8.3/lib /libpq.so: undefinierter Verweis auf PEM_read_bio_X509' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf X509_NAME_get_text_by_NID' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufSSL_CTX_new' /opt ./PostgreSQL/ /lib/libpq.so: undefinierter Verweis auf SSL_read' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_set _fd' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_pending' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_CTX_set_client_cert_cb' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf ENGINE_load_private_key' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufCRYPTO_num_locks' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf ERR_pop_to_mark' /opt/PostgreSQL/8.3/lib/libpq .so: undefinierter Verweis auf SSL_CTX_load_verify_locations' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf ERR_get_error' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufERR_reason_error_string' /opt/PostgreSQL/8.3/lib /libpq.so: undefinierter Verweis auf SSL_library_init' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufCRYPTO_set_id_callback' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_get_ex_data' /opt/PostgreSQL/ 8.3/lib/libpq.so: undefinierter Verweis auf SSL_new' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_write' /opt/Post greSQL/8.3/lib/libpq.so: undefinierter Verweis auf OPENSSL_config' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_CTX_get_cert_store' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufX509_check_private_key' / opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf X509_free' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf ERR_set_mark' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_shutdown' /opt/PostgreSQL/8.3/lib/libpq.so: undefined reference toBIO_new_file' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_CTX_ctrl' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf SSL_get_error' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis auf ENGINE_by_id' /opt/PostgreSQL/8.3/lib/libpq.so: undefinierter Verweis aufSSL_CTX_free' Collect2: ld hat 1 Exit-Status zurückgegeben configure:15064: $? = 1 configure: fehlgeschlagenes Programm war: | /* confdefs.h / | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define POSTGIS_MAJOR_VERSION "1" | #define POSTGIS_MINOR_VERSION "5" | #define POSTGIS_MICRO_VERSION "2" | #define YYTEXT_POINTER 1 | #define HAVE_IEEEFP_H 0 | #define PWDREGRESS 1 | #define HAVE_ICONV 1 | / confdefs.h beenden. / | | / Überschreiben Sie alle GCC-internen Prototypen, um Fehler zu vermeiden. | Verwenden Sie char, da int dem Rückgabetyp eines GCC entsprechen könnte | builtin und dann würde sein Argument-Prototyp immer noch gelten. */ | #ifdef __cplusplus | extern "C" | #endif | char PQserverVersion(); | int | main() | { | PQserverVersion zurückgeben (); | ; | 0 zurückgeben; | } configure:15073: Ergebnis: nein configure:15083: Fehler: libpq konnte nicht gefunden werden

Kann mir jemand sagen welche Datei mir fehlt?


Das Problem ist, dass Sie das Paket libpq-dev installieren müssen.

Versuche dies:

yum installiere libpq-dev

Installieren Sie mehrere PostgreSQL-Versionen mit verschiedenen PostGIS-Plugin-Versionen auf Ubuntu 12.04

Ich habe einen Server mit Ubuntu 12.04.5 (genau), auf dem zwei verschiedene PostgreSQL-Versionen (8.3 & 9.1) auf zwei verschiedenen Ports (5432 & 5433) laufen. Ich habe sie von den Standardpaketquellen installiert. Alles läuft schön und sauber.

Das 8.3 Setup verwendet das PostGIS Plugin (Version 1.5.3-2). Für das 9.1 Setup möchte ich PostGIS in einer Version > 2.0 installieren. Ich befürchte, dass ich das (wichtige) laufende 8.3-Setup abbreche, wenn ich eine neue PostGIS-Version manuell installiere. Der Präfix-Parameter des ./configure-Skripts scheint defekt zu sein und ich weiß nicht, wie ich verhindern kann, dass die neue Version die alte überschreibt.

Gibt es eine sichere Möglichkeit, die neue Erweiterungsversion im 9.1-Setup zu aktivieren?

Bitte lassen Sie es mich wissen, wenn Sie weitere Informationen zum System benötigen, um dies zu beantworten.


Willkommen im PostGIS-Wiki für Benutzer!

PostGIS ist eine Erweiterung des objektrelationalen Datenbanksystems PostgreSQL, mit der GIS-Objekte (Geographic Information System) in der Datenbank gespeichert werden können. PostGIS macht für PostgreSQL, was Oracle Spatial für Oracle tut, ArcSDE für Microsoft SQL Server/Oracle.

PostGIS verwendet ​ GEOS, um viele räumliche Funktionen zu implementieren. GEOS ist eine C++-Portierung der JTS Topology Suite.

    Paul Ramsey ​ Video Paul Ramsey ​ Video Regina Obe und Leo Hsu Pierre Racine Regina Obe und Leo Hsu von Paul Ramsey von Olivier Courtin von Paul Ramsey PGDay EU 2010 Vortrag von Mark Cave-Ayland und Olivier Coutin skizziert die technischen Details der kommenden PostGIS 2.0 - - das neue Disc-Format, neue Geometrietypen usw. PGDay EU 2010 Talk (eher aus Benutzerperspektive) von Vincent Picavet und Olivier Courtin

Die folgenden Beispiel-SQL-Anweisungen erstellen Nicht-OpenGIS-Tabellen und -Geometrien.

Die folgenden Beispiel-SQL-Anweisungen erstellen eine Tabelle und fügen der Tabelle eine Geometriespalte mit einem ganzzahligen SRID-Wert hinzu, der auf einen Eintrag in der Tabelle SPATIAL_REF_SYS verweist. Die INSERT-Anweisungen fügen der Tabelle Geopunkte hinzu.

Räumliche Indizes

PostgreSQL bietet Unterstützung für die räumliche Indexierung von GiST. Das GiST-Schema bietet eine Indizierung auch bei großen Objekten. Es verwendet ein System der verlustbehafteten Indizierung, bei dem kleinere Objekte als Stellvertreter für größere im Index fungieren. Im PostGIS-Indexierungssystem verwenden alle Objekte ihre Bounding Boxes als Stellvertreter im Index.

Erstellen eines räumlichen Index

Sie können einen GiST-Index wie folgt erstellen:


2 Antworten 2

Die meisten der notwendigen fehlenden Bibliotheken scheinen sich im EPEL-Repository zu befinden. Ich habe keine Ahnung, warum PostgreSQL sie separat bereitstellen möchte, und zwar ältere Versionen.

Darüber hinaus scheint es, dass mit Ihren CentOS-Basis-Repositorys wahrscheinlich etwas nicht stimmt. Zum Beispiel befindet sich perl-DBD-Pg im Basisrepo, aber Ihre Kopie von yum hat es aus irgendeinem Grund nicht gefunden. Ich vermute, dass cPanel sie wahrscheinlich kaputt gemacht hat, zusammen mit all den anderen Sachen, die es kaputt macht.

Also würde ich damit beginnen, das EPEL-Repository zu installieren und die anderen Repositorys zu überprüfen, um sicherzustellen, dass Sie tatsächlich CentOS-Basis und -Updates erhalten. Danach würde ich sehen, was noch kaputt ist, und dann weitermachen.


Fehler bei der Installation von PostGIS 1.5? - Geografisches Informationssystem

PostGIS hat folgende Voraussetzungen für den Aufbau und die Nutzung:

GNU-C-Compiler (gcc). Einige andere ANSI-C-Compiler können zum Kompilieren von PostGIS verwendet werden, aber wir finden viel weniger Probleme beim Kompilieren mit gcc .

GNU-Make ( gmake oder make ). Für viele Systeme ist GNU make die Standardversion von make. Überprüfen Sie die Version, indem Sie make -v aufrufen. Andere Versionen von make verarbeiten das PostGIS Makefile möglicherweise nicht richtig.

PostGIS @@[email protected]@ kann mit PostgreSQL-Versionen 7.2.0 oder höher erstellt werden. Frühere Versionen von PostgreSQL werden nicht unterstützt.

Bevor Sie die PostGIS-Servermodule kompilieren können, müssen Sie das PostgreSQL-Paket kompilieren und installieren.

Wenn Sie die GEOS-Funktionalität verwenden möchten, müssen Sie PostgreSQL möglicherweise explizit mit der Standard-C++-Bibliothek verknüpfen:

LDFLAGS=-lstdc++ ./configure [IHRE OPTIONEN HIER]

Dies ist eine Problemumgehung für die gefälschte Interaktion von C++-Ausnahmen mit älteren Entwicklungstools. Wenn Sie seltsame Probleme haben (Backend unerwartet geschlossen oder ähnliches), versuchen Sie diesen Trick. Dazu müssen Sie Ihr PostgreSQL natürlich von Grund auf neu kompilieren.

# gzip -d -c [email protected]@[email protected]@.tar.gz | tar xvf -

Geben Sie das Verzeichnis [email protected]@[email protected]@ ein und führen Sie Folgendes aus:

Wenn Sie Unterstützung für die Neuprojektion von Koordinaten wünschen, muss die Proj4-Bibliothek installiert sein. Wenn ./configure es nicht gefunden hat, versuchen Sie es mit dem Schalter --with-proj=PATH und geben Sie ein bestimmtes Proj4-Installationsverzeichnis an.

Wenn Sie die GEOS-Funktionalität verwenden möchten, muss die GEOS-Bibliothek installiert sein. Wenn ./configure es nicht gefunden hat, versuchen Sie es mit --with-geos=PATH, um den vollständigen Pfad zum vollständigen Pfad des Programms geos-config anzugeben.

Führen Sie die Befehle zum Kompilieren und Installieren aus.

Alle Dateien werden mit den von pg_config bereitgestellten Informationen installiert

Bibliotheken werden installiert [pkglibdir]/lib/contrib .

Wichtige Unterstützungsdateien wie lwpostgis.sql werden in [prefix]/share/contrib installiert.

Loader- und Dumper-Binärdateien werden in [bindir]/ installiert.

PostGIS erfordert die prozedurale Spracherweiterung PL/pgSQL. Bevor Sie die Datei lwpostgis.sql laden, müssen Sie zuerst PL/pgSQL aktivieren. Sie sollten den Befehl createlang verwenden. Das PostgreSQL-Programmierhandbuch enthält die Details, wenn Sie dies aus irgendeinem Grund manuell tun möchten.

# createlang plpgsql [IhreDatenbank]

Laden Sie nun die PostGIS-Objekt- und Funktionsdefinitionen in Ihre Datenbank, indem Sie die Definitionsdatei lwpostgis.sql laden.

# psql -d [IhreDatenbank] -f lwpostgis.sql

Die PostGIS-Servererweiterungen sind nun geladen und können verwendet werden.

Um einen vollständigen Satz von EPSG-Koordinatensystemdefinitions-IDs zu erhalten, können Sie auch die räumlich_ref_sys.sql-Definitionsdatei laden und die Tabelle SPATIAL_REF_SYS füllen.

# psql -d [IhreDatenbank] -f Spatial_ref_sys.sql

Erstellen von räumlich aktivierten PostGIS-Datenbanken aus einer integrierten Vorlage

Einige Paketdistributionen von PostGIS (insbesondere die Win32-Installationsprogramme für PostGIS >= 1.1.5) laden die PostGIS-Funktionen in eine Vorlagendatenbank namens template_postgis . Wenn die Datenbank template_postgis in Ihrer PostgreSQL-Installation vorhanden ist, können Benutzer und/oder Anwendungen mit einem einzigen Befehl räumlich aktivierte Datenbanken erstellen. Beachten Sie, dass dem Datenbankbenutzer in beiden Fällen die Berechtigung zum Erstellen neuer Datenbanken erteilt werden muss.

# createdb -T template_postgis my_spatial_db

postgres=# DATENBANK ERSTELLEN my_spatial_db TEMPLATE=template_postgis

Das Aktualisieren vorhandener räumlicher Datenbanken kann schwierig sein, da es den Austausch oder die Einführung neuer PostGIS-Objektdefinitionen erfordert.

Leider können nicht alle Definitionen in einer Live-Datenbank einfach ersetzt werden, daher ist manchmal ein Dump/Reload-Prozess die beste Wahl.

PostGIS bietet eine SOFT-UPGRADE-Prozedur für Neben- oder Bugfix-Releases und eine HARD-UPGRADE-Prozedur für Major-Releases.

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 immer mit einem HARD UPGRADE wiederherstellen.

Das Soft-Upgrade besteht darin, das Skript lwpostgis_upgrade.sql in Ihrer räumlichen Datenbank zu beziehen:

$ psql -f lwpostgis_upgrade.sql -d your_spatial_database

Wenn ein Soft-Upgrade nicht möglich ist, wird das Skript abgebrochen und Sie werden gewarnt, dass HARD UPGRADE erforderlich ist. Zögern Sie also nicht, zuerst ein Soft-Upgrade zu versuchen.

Wenn Sie die Datei lwpostgis_upgrade.sql nicht finden können, verwenden Sie wahrscheinlich eine Version vor 1.1 und müssen diese Datei selbst generieren. Dies geschieht mit dem folgenden Befehl:

$ utils/postgis_proc_upgrade.pl lwpostgis.sql > lwpostgis_upgrade.sql

PostGIS bietet ein Utility-Skript zum Wiederherstellen eines mit dem Befehl pg_dump -Fc erstellten Dumps. Es ist experimentell, daher hilft es bei Problemen, die Ausgabe in eine Datei umzuleiten. Das Verfahren ist wie folgt:

Erstellen Sie einen "Custom-Format"-Dump der Datenbank, die Sie aktualisieren möchten (nennen wir es "olddb").

$ pg_dump -Fc olddb > olddb.dump

Stellen Sie den Dump wieder her, indem Sie postgis kontextabhängig in eine neue Datenbank aktualisieren. Die neue Datenbank muss nicht vorhanden sein. postgis_restore akzeptiert Createdb-Parameter nach dem Dump-Dateinamen, und das kann zum Beispiel verwendet werden, wenn Sie eine nicht standardmäßige Zeichencodierung für Ihre Datenbank verwenden. Nennen wir es "newdb" mit UNICODE als Zeichencodierung:

$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump -E=UNICODE > restore.log

Überprüfen Sie, ob alle wiederhergestellten Dump-Objekte wirklich aus dem Dump wiederhergestellt werden mussten und nicht mit den in lwpostgis.sql definierten in Konflikt stehen

$ grep ^KEEPING restore.log | weniger

Wenn Sie von PostgreSQL < 8.0 auf >= 8.0 aktualisieren, möchten Sie möglicherweise die Spalten attrelid, varattnum und stats in der Tabelle "geometry_columns" löschen, die nicht mehr benötigt werden. Sie zu behalten wird nicht schaden. SIE FALLEN ZU LASSEN, WENN WIRKLICH BENÖTIGT, WIRD SCHÄTZEN!

$ psql newdb -c "ALTER TABLE Geometrie_Spalten DROP attrelid" $ psql newdb -c "ALTER TABLE Geometrie_Spalten DROP varattnum" $ psql newdb -c "ALTER TABLE Geometrie_Spalten DROP stats"

Die Tabelle Spatial_ref_sys wird aus dem Dump zurückgeschrieben, um sicherzustellen, dass Ihre benutzerdefinierten Ergänzungen beibehalten werden, aber die verteilte Tabelle kann Änderungen enthalten, daher sollten Sie Ihre Einträge sichern, die Tabelle löschen und die neue Quelle als Quelle verwenden. Wenn Sie Ergänzungen vorgenommen haben, gehen wir davon aus, dass Sie wissen, wie Sie diese sichern, bevor Sie die Tabelle aktualisieren. Das Ersetzen durch das neue geschieht wie folgt:

$ psql newdb newdb=> aus Spatial_ref_sys löschen DROP newdb=> i Spatial_ref_sys.sql

Es gibt mehrere Dinge zu überprüfen, wenn Ihre Installation oder Ihr Upgrade nicht wie erwartet verläuft.

Am einfachsten ist es, wenn Sie die PostGIS-Distribution in das contrib-Verzeichnis unter dem PostgreSQL-Quellbaum entpacken. Wenn dies jedoch aus irgendeinem Grund nicht möglich ist, können Sie die Umgebungsvariable PGSQL_SRC auf den Pfad zum PostgreSQL-Quellverzeichnis setzen. Dadurch können Sie PostGIS kompilieren, aber make install funktioniert möglicherweise nicht. Seien Sie also darauf vorbereitet, die PostGIS-Bibliothek und die ausführbaren Dateien selbst an die entsprechenden Speicherorte zu kopieren.

Überprüfen Sie, ob Sie PostgreSQL 7.2 oder höher installiert haben und mit derselben Version der PostgreSQL-Quelle kompilieren wie die ausgeführte Version von PostgreSQL. Verwechslungen können auftreten, wenn Ihre (Linux-)Distribution bereits PostgreSQL installiert hat oder Sie PostgreSQL anderweitig bereits installiert und vergessen haben. PostGIS funktioniert nur mit PostgreSQL 7.2 oder neuer und es werden seltsame, unerwartete Fehlermeldungen ausgegeben, wenn Sie eine ältere Version verwenden. Um die laufende Version von PostgreSQL zu überprüfen, verbinden Sie sich mit psql mit der Datenbank und führen Sie diese Abfrage aus:

Wenn Sie eine RPM-basierte Distribution ausführen, können Sie mit dem Befehl rpm wie folgt prüfen, ob vorinstallierte Pakete vorhanden sind: rpm -qa | grep postgresql

Überprüfen Sie auch, ob Sie alle erforderlichen Änderungen am Anfang der Makefile.config vorgenommen haben. Das beinhaltet:

Wenn Sie Koordinatenreprojektionen durchführen möchten, müssen Sie die Proj4-Bibliothek auf Ihrem System installieren, die Variable USE_PROJ auf 1 und PROJ_DIR auf Ihr Installationspräfix in der Makefile.config setzen.

Wenn Sie GEOS-Funktionen verwenden möchten, müssen Sie die GEOS-Bibliothek auf Ihrem System installieren und in der Makefile.config USE_GEOS auf 1 und GEOS_DIR auf Ihr Installationspräfix setzen

Die JDBC-Erweiterungen stellen Java-Objekte bereit, die den internen PostGIS-Typen entsprechen. Diese Objekte können verwendet werden, um Java-Clients zu schreiben, die die PostGIS-Datenbank abfragen und die GIS-Daten in PostGIS zeichnen oder berechnen.

Geben Sie das jdbc-Unterverzeichnis der PostGIS-Distribution ein.

Bearbeiten Sie das Makefile, um die korrekten Pfade Ihres Java-Compilers ( JAVAC ) und Interpreters ( JAVA ) bereitzustellen.

Führen Sie den Befehl make aus. Kopieren Sie die Datei postgis.jar dorthin, wo Sie Ihre Java-Bibliotheken aufbewahren.

Der Data Loader und Dumper werden automatisch als Teil des PostGIS-Builds erstellt und installiert. So erstellen und installieren Sie sie manuell:

# cd [email protected]@[email protected]@/loader # make # make install

Der Loader heißt shp2pgsql und konvertiert ESRI Shape-Dateien in SQL, das zum Laden in PostGIS/PostgreSQL geeignet ist. Der Dumper heißt pgsql2shp und konvertiert PostGIS-Tabellen (oder Abfragen) in ESRI-Shape-Dateien. Eine ausführlichere Dokumentation finden Sie in der Online-Hilfe und auf den Handbuchseiten.

Häufig gestellte Fragen

Welche geometrischen Objekte kann ich speichern?

Sie können Punkt-, Linien-, Polygon-, Multipoint-, Multiline-, Multipolygon- und Geometriesammlungen speichern. Diese werden im Open GIS Well Known Text Format (mit den Erweiterungen XYZ,XYM,XYZM) angegeben.

Wie füge ich ein GIS-Objekt in die Datenbank ein?

Zuerst müssen Sie eine Tabelle mit einer Spalte vom Typ "geometry" erstellen, um Ihre GIS-Daten aufzunehmen. Verbinden Sie sich mit psql mit Ihrer Datenbank und versuchen Sie die folgende SQL:

CREATE TABLE gtest ( ID int4, NAME varchar(20) ) SELECT AddGeometryColumn('', 'gtest','geom',-1,'LINESTRING',2)

Anschließend können Sie mithilfe einer SQL-Einfügeanweisung eine Geometrie in die Tabelle einfügen. Das GIS-Objekt selbst wird mit dem OpenGIS Consortium "well-known text"-Format formatiert:

INSERT INTO gtest (ID, NAME, GEOM) VALUES (1, 'First Geometry', GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)', -1))

So zeigen Sie Ihre GIS-Daten in der Tabelle an:

SELECT id, name, AsText(geom) AS geom FROM gtest

Der Rückgabewert sollte etwa so aussehen:

id | Name | Geom ----+----------------+-------------------------------------- -- 1 | Erste Geometrie | LINESTRING(2 3,4 5,6 5,7 8) (1 Reihe)

Wie konstruiere ich eine räumliche Abfrage?

Auf die gleiche Weise erstellen Sie jede andere Datenbankabfrage als SQL-Kombination aus Rückgabewerten, Funktionen und booleschen Tests.

Bei räumlichen Abfragen sind beim Erstellen der Abfrage zwei Aspekte zu beachten: Gibt es einen räumlichen Index, den Sie verwenden können, und führen Sie teure Berechnungen für eine große Anzahl von Geometrien durch?

Im Allgemeinen sollten Sie den "intersects-Operator" (&&) verwenden, der testet, ob sich die Begrenzungsrahmen von Features schneiden. Der &&-Operator ist deshalb nützlich, weil der &&-Operator diesen verwendet, wenn ein räumlicher Index zur Beschleunigung des Tests verfügbar ist. Dies kann Abfragen viel schneller machen.

Sie verwenden auch räumliche Funktionen wie Distance(), ST_Intersects(), ST_Contains() und ST_Within(), um die Ergebnisse Ihrer Suche einzugrenzen. Die meisten räumlichen Abfragen umfassen sowohl einen indizierten Test als auch einen räumlichen Funktionstest. Der Indextest dient dazu, die Anzahl der Rückgabetupel auf Tupel zu beschränken, die die interessierende Bedingung erfüllen könnten. Die räumlichen Funktionen werden dann verwendet, um die Bedingung genau zu testen.

SELECT id, the_geom FROM thetable WHERE the_geom && 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))' AND Enthält(the_geom,'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'

Wie beschleunige ich räumliche Abfragen für große Tabellen?

Schnelle Abfragen in großen Tabellen sind die Daseinsberechtigung räumlicher Datenbanken (zusammen mit Transaktionsunterstützung), daher ist ein guter Index wichtig.

Um einen räumlichen Index für eine Tabelle mit einer Geometriespalte zu erstellen, verwenden Sie die Funktion "CREATE INDEX" wie folgt:

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] )

Die Option "USING GIST" weist den Server an, einen GiST-Index (Generalized Search Tree) zu verwenden.

Es wird davon ausgegangen, dass GiST-Indizes verlustbehaftet sind. Verlustbehaftete Indizes verwenden ein Proxy-Objekt (im räumlichen Fall eine Begrenzungsbox) zum Erstellen des Indexes.

Sie sollten auch sicherstellen, dass der PostgreSQL-Abfrageplaner über genügend Informationen über Ihren Index verfügt, um rationale Entscheidungen über seine Verwendung zu treffen. Dazu müssen Sie in Ihren Geometrietabellen "Statistiken sammeln".

Führen Sie für PostgreSQL 8.0.x und höher einfach den Befehl VACUUM ANALYZE aus.

Führen Sie für PostgreSQL 7.4.x und niedriger den Befehl SELECT UPDATE_GEOMETRY_STATS() aus.

Warum werden PostgreSQL R-Tree-Indizes nicht unterstützt?

Frühe Versionen von PostGIS verwendeten die PostgreSQL R-Tree-Indizes. PostgreSQL R-Trees wurden jedoch seit Version 0.6 vollständig verworfen und die räumliche Indexierung wird mit einem R-Tree-over-GiST-Schema bereitgestellt.

Unsere Tests haben gezeigt, dass die Suchgeschwindigkeit für nativen R-Tree und GiST vergleichbar ist. Native PostgreSQL-R-Trees haben zwei Einschränkungen, die sie für die Verwendung mit GIS-Funktionen unerwünscht machen (beachten Sie, dass diese Einschränkungen auf die aktuelle native PostgreSQL-R-Tree-Implementierung zurückzuführen sind, nicht auf das R-Tree-Konzept im Allgemeinen):

R-Tree-Indizes in PostgreSQL können keine Funktionen verarbeiten, die größer als 8 KB sind. GiST-Indizes können dies mit dem "lossy"-Trick, den Begrenzungsrahmen für das Feature selbst zu ersetzen.

R-Tree-Indizes in PostgreSQL sind nicht "null-safe" daher schlägt das Erstellen eines Indexes für eine Geometriespalte, die Null-Geometrien enthält, fehl.

Warum sollte ich die Funktion AddGeometryColumn() und all das andere OpenGIS-Zeug verwenden?

Wenn Sie die OpenGIS-Unterstützungsfunktionen nicht nutzen möchten, müssen Sie dies nicht. Erstellen Sie einfach Tabellen wie in älteren Versionen und definieren Sie Ihre Geometriespalten in der CREATE-Anweisung. Alle Ihre Geometrien haben SRIDs von -1 und die OpenGIS-Metadatentabellen werden nicht richtig ausgefüllt. Dies führt jedoch dazu, dass die meisten auf PostGIS basierenden Anwendungen fehlschlagen, und es wird allgemein empfohlen, AddGeometryColumn() zum Erstellen von Geometrietabellen zu verwenden.

Mapserver ist eine Anwendung, die die Metadaten vongeometrie_columns verwendet. Insbesondere kann Mapserver die SRID der Geometriespalte verwenden, um eine On-the-Fly-Reprojektion von Features in die richtige Kartenprojektion durchzuführen.

Wie findet man am besten alle Objekte im Umkreis eines anderen Objekts?

Um die Datenbank am effizientesten zu nutzen, ist es am besten, Radius-Abfragen durchzuführen, die den Radius-Test mit einem Bounding-Box-Test kombinieren: Der Bounding-Box-Test verwendet den räumlichen Index, was einen schnellen Zugriff auf eine Teilmenge von Daten ermöglicht, auf die der Radius-Test dann angewendet wird .

Die Funktion Expand() ist eine praktische Möglichkeit, einen Begrenzungsrahmen zu vergrößern, um eine Indexsuche in einem interessierenden Bereich zu ermöglichen. Die Kombination aus einer Indexklausel für schnellen Zugriff und einem langsameren genauen Entfernungstest bietet die beste Kombination aus Geschwindigkeit und Präzision für diese Abfrage.

Um beispielsweise alle Objekte mit 100 Metern POINT(1000 1000) zu finden, würde die folgende Abfrage gut funktionieren:

SELECT * FROM GEOTABLE WHERE GEOCOLUMN && Expand(GeomFromText('POINT(1000 1000)',-1),100) AND Distance(GeomFromText('POINT(1000 1000)',-1 ),GEOSÄULE) < 100

Wie führe ich eine Koordinatenneuprojektion als Teil einer Abfrage durch?

Um eine Neuprojektion durchzuführen, müssen sowohl das Quell- als auch das Zielkoordinatensystem in der Tabelle SPATIAL_REF_SYS definiert sein und auf den neu projizierten Geometrien muss bereits eine SRID festgelegt sein. Sobald dies erledigt ist, ist eine Neuprojektion so einfach wie das Verweisen auf die gewünschte Ziel-SRID.

AUSWÄHLEN Transformieren(GEOM,4269) VON GEOTABLE

Verwenden von PostGIS GIS-Objekten

Die von PostGIS unterstützten GIS-Objekte sind eine Obermenge der "Simple Features", die vom OpenGIS Consortium (OGC) definiert wurden. Ab Version 0.9 unterstützt PostGIS alle Objekte und Funktionen, die in der OGC "Simple Features for SQL"-Spezifikation spezifiziert sind.

PostGIS erweitert den Standard um die Unterstützung von 3DZ-, 3DM- und 4D-Koordinaten.

Die OpenGIS-Spezifikation definiert zwei Standardmethoden, um räumliche Objekte auszudrücken: die Form Well-Known Text (WKT) und die Form Well-Known Binary (WKB). Sowohl WKT als auch WKB enthalten Informationen über den Typ des Objekts und die Koordinaten, die das Objekt bilden.

Beispiele für die Textdarstellungen (WKT) der räumlichen Objekte der Features sind wie folgt:

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

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

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

Die OpenGIS-Spezifikation verlangt auch, dass das interne Speicherformat von Geo-Objekten einen Spatial Reference System Identifier (SRID) enthält. Die SRID wird benötigt, wenn räumliche Objekte zum Einfügen in die Datenbank erstellt werden.

Die Ein-/Ausgabe dieser Formate ist über die folgenden Schnittstellen verfügbar:

bytea WKB = asBinary(Geometrie) Text WKT = asText(Geometrie) Geometrie = GeomFromWKB(bytea WKB, SRID) Geometrie = GeometryFromText(Text WKT, SRID)

Eine gültige Insert-Anweisung zum Erstellen und Einfügen eines OGC-Raumobjekts wäre beispielsweise:

INSERT IN TO SPATIALTABLE ( THE_GEOM, THE_NAME ) VALUES ( GeomFromText('POINT(-126.4 45.32)', 312), 'A Place' )

PostGIS EWKB, EWKT und kanonische Formulare

OGC-Formate unterstützen nur 2D-Geometrien und die zugehörige SRID ist *nie* in die Eingabe-/Ausgabedarstellungen eingebettet.

Die erweiterten PostGIS-Formate sind derzeit eine Obermenge von OGC (jede gültige WKB/WKT ist eine gültige EWKB/EWKT), aber dies kann sich in Zukunft ändern, insbesondere wenn OGC ein neues Format herausbringt, das mit unseren Erweiterungen in Konflikt steht. Daher sollten Sie sich NICHT auf diese Funktion verlassen!

PostGIS EWKB/EWKT fügt Unterstützung für 3dm,3dz,4d-Koordinaten und eingebettete SRID-Informationen hinzu.

Beispiele für die Textdarstellungen (EWKT) der erweiterten räumlichen Objekte der Features sind wie folgt:

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

SRID=4326MULTIPOINTM(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))

Die Ein-/Ausgabe dieser Formate ist über die folgenden Schnittstellen verfügbar:

bytea EWKB = asEWKB(Geometrie) Text EWKT = asEWKT(Geometrie) Geometrie = GeomFromEWKB(bytea EWKB) Geometrie = GeomFromEWKT(Text EWKT)

Eine gültige Insert-Anweisung zum Erstellen und Einfügen eines PostGIS-Raumobjekts wäre beispielsweise:

INSERT IN TO SPATIALTABLE ( THE_GEOM, THE_NAME ) VALUES ( GeomFromEWKT('SRID=312POINTM(-126.4 45.32 15)'), 'A Place' )

Die "kanonischen Formen" eines PostgreSQL-Typs sind die Darstellungen, die Sie mit einer einfachen Abfrage (ohne Funktionsaufruf) erhalten und die, die mit einem einfachen Einfügen, Aktualisieren oder Kopieren garantiert akzeptiert wird. Für den postgis-Typ 'geometry' sind dies:

- Ausgabe - Binär: EWKB ASCII: HEXEWKB (EWKB in Hex-Form) - Eingabe - Binär: EWKB ASCII: HEXEWKB|EWKT

Zum Beispiel liest diese Anweisung EWKT und gibt HEXEWKB im Prozess der kanonischen ASCII-Ein-/Ausgabe zurück:

=# SELECT 'SRID=4POINT(0 0)'::Geometrie Geometrie ------------------------------------------ --------------------- 010100002004000000000000000000000000000000000000000 (1 Reihe)

Die Spatial-Spezifikation von SQL Multimedia Applications erweitert die einfachen Funktionen der SQL-Spezifikation, indem sie eine Reihe von kreisförmig interpolierten Kurven definiert.

Die SQL-MM-Definitionen umfassen 3dm-, 3dz- und 4d-Koordinaten, erlauben jedoch keine Einbettung von SRID-Informationen.

Die bekannten Texterweiterungen werden noch nicht vollständig unterstützt. Beispiele für einige einfache gekrümmte Geometrien sind unten aufgeführt:

KREISSTRING(0 0, 1 1, 1 0)

VERBUNDKURVE(KREISSTRING(0 0, 1 1, 1 0),(1 0, 0 1))

KURVEPOLYGON(KREISSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))

MEHRKURVE((0 0, 5 5),KREISSTRING(4 0, 4 4, 8 4))

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

Derzeit kann PostGIS die Verwendung von zusammengesetzten Kurven in einem Kurvenpolygon nicht unterstützen.

Alle Gleitkommavergleiche innerhalb der SQL-MM-Implementierung werden mit einer angegebenen Toleranz durchgeführt, derzeit 1E-8.

Die OpenGIS "Simple Features Specification for SQL" definiert Standard-GIS-Objekttypen, die zu ihrer Bearbeitung erforderlichen Funktionen und eine Reihe von Metadatentabellen. Um sicherzustellen, dass die Metadaten konsistent bleiben, werden Operationen wie das Erstellen und Entfernen einer räumlichen Spalte durch spezielle, von OpenGIS definierte Verfahren ausgeführt.

Es gibt zwei OpenGIS-Metadatentabellen: SPATIAL_REF_SYS und GEOMETRY_COLUMNS . Die Tabelle SPATIAL_REF_SYS enthält die numerischen IDs und Textbeschreibungen der Koordinatensysteme, die in der räumlichen Datenbank verwendet werden.

Die SPATIAL_REF_SYS-Tabelle

Die Tabellendefinition SPATIAL_REF_SYS lautet wie folgt:

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 SPATIAL_REF_SYS lauten wie folgt:

Ein ganzzahliger Wert, der das Spatial Referencing System (SRS) innerhalb der Datenbank eindeutig identifiziert.

Der Name der Norm oder Normungsorganisation, die für dieses Referenzsystem zitiert wird. "EPSG" wäre beispielsweise ein gültiger AUTH_NAME .

Die ID des Raumbezugssystems, wie von der in AUTH_NAME zitierten Behörde definiert. Im Fall von EPSG würde hier der EPSG-Projektionscode hingehen.

Die bekannte Textdarstellung des räumlichen Bezugssystems. Ein Beispiel für eine WKT-SRS-Darstellung ist:

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

PostGIS verwendet die Proj4-Bibliothek, um Funktionen zur Koordinatentransformation bereitzustellen. Die Spalte PROJ4TEXT enthält die Proj4-Koordinatendefinitionszeichenfolge für eine bestimmte SRID. Beispielsweise:

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

Die GEOMETRY_COLUMNS-Tabelle

Die Tabellendefinition GEOMETRY_COLUMNS lautet wie folgt:

CREATE TABLE GEOMETRY_COLUMNS ( F_TABLE_CATALOG VARCHAR(256) NOT NULL, F_TABLE_SCHEMA VARCHAR(256) NOT NULL, F_TABLE_NAME VARCHAR(256) NOT NULL, F_GEOMETRY_COLUMN VARCHAR(256) NOT NULL, COORD_DIMENSION INTEGER INTEGER NICHT NULL, NULL ) NICHT NULL )

Die Spalten sind wie folgt:

F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAME

Der vollständig qualifizierte Name der Feature-Tabelle, die die Geometriespalte enthält. Beachten Sie, dass die Begriffe "catalog" und "schema" Oracle-ähnlich sind. Es gibt kein PostgreSQL-Analogon von "catalog", so dass die Spalte leer bleibt – für "schema" wird der PostgreSQL-Schemaname verwendet (public ist die Standardeinstellung).

Der Name der Geometriespalte in der Feature-Tabelle.

Die räumliche Dimension (2-, 3- oder 4-dimensional) der Spalte.

Die ID des räumlichen Bezugssystems, das für die Koordinatengeometrie in dieser Tabelle verwendet wird. Es ist eine Fremdschlüsselreferenz auf SPATIAL_REF_SYS .

Der Typ des räumlichen Objekts. Um die räumliche Spalte auf einen einzelnen Typ zu beschränken, verwenden Sie eine der folgenden Optionen: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION oder entsprechende XYM-Versionen POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTION Für heterogene (gemischte) Sammlungen können Sie "GEOMETRY" als Typ verwenden.

Dieses Attribut ist (wahrscheinlich) nicht Teil der OpenGIS-Spezifikation, wird aber zur Gewährleistung der Typhomogenität benötigt.

Das Erstellen einer Tabelle mit räumlichen Daten erfolgt in zwei Schritten:

Erstellen Sie eine normale nicht-räumliche Tabelle.

Beispiel: CREATE TABLE ROADS_GEOM ( ID int4, NAME varchar(25) )

Fügen Sie der Tabelle mithilfe der OpenGIS-Funktion "AddGeometryColumn" eine räumliche Spalte hinzu.

AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>)

AddGeometryColumn(<table_name>, <column_name>, <srid>, <type>, <dimension>)

Beispiel 1: SELECT AddGeometryColumn('public', 'roads_geom', 'geom', 423, 'LINESTRING', 2)

Beispiel 2: SELECT AddGeometryColumn( 'roads_geom', 'geom', 423, 'LINESTRING', 2)

Hier ist ein Beispiel für SQL, das verwendet wird, um eine Tabelle zu erstellen und eine räumliche Spalte hinzuzufügen (vorausgesetzt, dass bereits eine SRID von 128 vorhanden ist):

CREATE TABLE parks ( PARK_ID int4, PARK_NAME varchar(128), PARK_DATE date, PARK_TYPE varchar(2) ) SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 )

Hier ist ein weiteres Beispiel mit dem generischen Typ "geometry" und dem undefinierten SRID-Wert von -1:

CREATE TABLE Straßen ( ROAD_ID int4, ROAD_NAME varchar(128) ) SELECT AddGeometryColumn( 'roads', 'roads_geom', -1, 'GEOMETRY', 3 )

Sicherstellung der OpenGIS-Konformität von Geometrien

gisdb=# select isvalid('LINESTRING(0 0, 1 1)'), isvalid('LINESTRING(0 0,0 0)') isvalid | ist gültig ---------+--------- t | F

Standardmäßig wendet PostGIS diese Gültigkeitsprüfung nicht auf Geometrieeingaben an, da das Testen der Gültigkeit bei komplexen Geometrien, insbesondere Polygonen, viel CPU-Zeit benötigt. Wenn Sie Ihren Datenquellen nicht vertrauen, können Sie eine solche Überprüfung Ihrer Tabellen manuell erzwingen, indem Sie eine Überprüfungsbeschränkung hinzufügen:

ALTER TABLE mytable ADD CONSTRAINTgeometrie_valid_check CHECK (isvalid(the_geom))

Wenn Sie beim Aufrufen von PostGIS-Funktionen mit gültigen Eingabegeometrien auf seltsame Fehlermeldungen wie "GEOS Intersection() warf einen Fehler!" oder "JTS Intersection() gab einen Fehler!" stoßen, haben Sie wahrscheinlich einen Fehler gefunden entweder in PostGIS oder einer der verwendeten Bibliotheken, und Sie sollten sich an die PostGIS-Entwickler wenden. Das gleiche gilt, wenn eine PostGIS-Funktion eine ungültige Geometrie für eine gültige Eingabe zurückgibt.

Nachdem Sie eine räumliche Tabelle erstellt haben, können Sie GIS-Daten in die Datenbank hochladen. Derzeit gibt es zwei Möglichkeiten, Daten in eine PostGIS/PostgreSQL-Datenbank zu übertragen: mit formatierten SQL-Anweisungen oder mit dem Shape-Datei-Loader/Dumper.

Wenn Sie Ihre Daten in eine Textdarstellung konvertieren können, ist die Verwendung von formatiertem SQL möglicherweise der einfachste Weg, um Ihre Daten in PostGIS zu übertragen. Wie bei Oracle und anderen SQL-Datenbanken können Daten massenweise geladen werden, indem eine große Textdatei voller SQL-Anweisungen "INSERT" in den SQL-Terminalmonitor geleitet wird.

Eine Datei zum Hochladen von Daten (z. B. road.sql) könnte so aussehen:

BEGIN INSERT INTO ROADS_GEOM (ID,GEOM,NAME ) VALUES (1,GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd') INTO ROADS_GEOM (ID,GEOM, NAME ) WERTE (2,GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd') INSERT IN TO ROADS_GEOM (ID,GEOM,NAME ) WERTE (3,GeomFromText(& #39LINESTRING(192783 228138,192612 229814)',-1),'Paul St') INTO ROADS_GEOM (ID,GEOM,NAME ) WERTE (4,GeomFromText('LINESTRING(189412 252431,189631 259122) ',-1),'Graeme Ave') INTO ROADS_GEOM (ID,GEOM,NAME ) VALUES (5,GeomFromText('LINESTRING(190131 224148,190871 228134)',-1) einfügen #39Phil Tce') INSERT INTO ROADS_GEOM (ID,GEOM,NAME ) VALUES (6,GeomFromText('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres') COMMIT

Die Datendatei kann sehr einfach mit dem SQL-Terminalmonitor von "psql" an PostgreSQL übergeben werden:

psql -d [Datenbank] -f road.sql

Der Datenlader shp2pgsql konvertiert ESRI Shape-Dateien in SQL, die zum Einfügen in eine PostGIS/PostgreSQL-Datenbank geeignet sind. Der Loader verfügt über mehrere Betriebsmodi, die durch Befehlszeilen-Flags unterschieden werden:

Löscht die Datenbanktabelle, bevor eine neue Tabelle mit den Daten in der Shape-Datei erstellt wird.

Fügt Daten aus der Shape-Datei in die Datenbanktabelle ein. Beachten Sie, dass zum Verwenden dieser Option zum Laden mehrerer Dateien die Dateien dieselben Attribute und denselben Datentyp aufweisen müssen.

Erstellt eine neue Tabelle und füllt sie aus der Shape-Datei. Dies ist der Standardmodus.

Erzeugt nur den SQL-Code zur Tabellenerstellung, ohne tatsächliche Daten hinzuzufügen. Dies kann verwendet werden, wenn Sie die Schritte zum Erstellen von Tabellen und zum Laden von Daten vollständig trennen müssen.

Verwenden Sie das PostgreSQL-Format "dump" für die Ausgabedaten. Dies kann mit -a, -c und -d kombiniert werden. Es ist viel schneller zu laden als das standardmäßige "insert"-SQL-Format. Verwenden Sie dies für sehr große Datensätze.

Erstellt und füllt die Geometrietabellen mit der angegebenen SRID.

Behalten Sie die Groß-/Kleinschreibung von Bezeichnern bei (Spalte, Schema und Attribute). Beachten Sie, dass Attribute in Shapefile alle GROSSBUCHSTABEN sind.

Erzwingen Sie alle Ganzzahlen in standardmäßige 32-Bit-Ganzzahlen, erstellen Sie keine 64-Bit-Bigints, selbst wenn die DBF-Header-Signatur dies zu rechtfertigen scheint.

Erstellen Sie einen GiST-Index für die Geometriespalte.

Ausgabe-WKT-Format zur Verwendung mit älteren (0.x) Versionen von PostGIS. Beachten Sie, dass dies zu Koordinatenabweichungen führt und M-Werte aus Shapefiles entfernt.

Geben Sie die Kodierung der Eingabedaten (dbf-Datei) an. Bei Verwendung werden alle Attribute der dbf von der angegebenen Codierung in UTF8 konvertiert. Die resultierende SQL-Ausgabe enthält einen SET CLIENT_ENCODING to UTF8-Befehl, damit das Back-End von UTF8 in die Codierung zurückkonvertieren kann, für die die Datenbank intern konfiguriert ist.

Beachten Sie, dass -a, -c, -d und -p sich gegenseitig ausschließen.

Eine Beispielsitzung, die den Loader verwendet, um eine Eingabedatei zu erstellen und diese hochzuladen, könnte so aussehen:

# shp2pgsql shaperoads myschema.roadstable > road.sql # psql -d roaddb -f road.sql

Eine Konvertierung und ein Upload können mit UNIX-Pipes in einem Schritt durchgeführt werden:

# shp2pgsql shaperoads myschema.roadstable | psql -d roaddb

Daten können entweder mit SQL oder dem Shape-Datei-Loader/Dumper aus der Datenbank extrahiert werden. Im Abschnitt über SQL werden wir einige der Operatoren diskutieren, die für Vergleiche und Abfragen von räumlichen Tabellen verfügbar sind.

Die einfachste Möglichkeit, Daten aus der Datenbank zu ziehen, besteht darin, eine SQL-Auswahlabfrage zu verwenden und die resultierenden Spalten in eine parsbare Textdatei zu speichern:

db=# SELECT id, AsText(geom) AS geom, name FROM ROADS_GEOM id | Geom | Name ---+--------------------------------------+--- -------- 1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd 2 | LINIENSTRING(189141 244158,189265 244817) | Georgie Straße 3 | LINESTRING(192783 228138,192612 229814) | Paul Str. 4 | LINESTRING(189412 252431,189631 259122) | Graeme Avenue 5 | LINIENSTRING(190131 224148,190871 228134) | Phil Tce 6 | LINESTRING(198231 263418,198213 268322) | Dave Cres 7 | LINESTRING(218421 284121,224123 241231) | Chris Way (6 Reihen)

Es kann jedoch vorkommen, dass eine Einschränkung erforderlich ist, um die Anzahl der zurückgegebenen Felder zu reduzieren. Bei attributbasierten Einschränkungen verwenden Sie einfach dieselbe SQL-Syntax wie bei einer nicht-räumlichen Tabelle. Bei räumlichen Einschränkungen stehen folgende Operatoren zur Verfügung/nützlich:

Dieser Operator gibt an, ob die Bounding Box einer Geometrie die Bounding Box einer anderen schneidet.

Dieser Operator testet, ob zwei Geometrien geometrisch identisch sind. Wenn beispielsweise 'POLYGON((0 0,1 1,1 0,0 0))' mit 'POLYGON((0 0,1 1,1 0,0 0))' . identisch ist (es ist).

Dieser Operator ist etwas naiver, er testet nur, ob die Bounding Boxes von to Geometrien gleich sind.

Als Nächstes können Sie diese Operatoren in Abfragen verwenden. Beachten Sie, dass Sie beim Angeben von Geometrien und Boxen in der SQL-Befehlszeile die Zeichenfolgendarstellungen mithilfe der Funktion "GeomFromText()" explizit in Geometrien umwandeln müssen. Also zum Beispiel:

SELECT ID, NAME FROM ROADS_GEOM WHERE GEOM

= GeomFromText('LINESTRING(191232 243118,191108 243242)',-1)

Die obige Abfrage würde den einzelnen Datensatz aus der Tabelle "ROADS_GEOM" zurückgeben, in dem die Geometrie diesem Wert entspricht.

Bei Verwendung des Operators "&&"34 können Sie entweder eine BOX3D als Vergleichsfunktion oder eine GEOMETRIE angeben. Wenn Sie jedoch eine GEOMETRIE angeben, wird deren Begrenzungsrahmen für den Vergleich verwendet.

SELECT ID, NAME FROM ROADS_GEOM WHERE GEOM && GeomFromText('POLYGON(((191232 243117,191232 243119,191234 243117,191232 243117))',-1)

Die obige Abfrage verwendet den Begrenzungsrahmen des Polygons zu Vergleichszwecken.

Die häufigste räumliche Abfrage wird wahrscheinlich eine "frame-basierte"-Abfrage sein, die von Client-Software wie Datenbrowsern und Web-Mappern verwendet wird, um Daten im Wert von "Kartenrahmen" zur Anzeige zu erfassen. Bei Verwendung eines "BOX3D"-Objekts für den Rahmen sieht eine solche Abfrage wie folgt aus:

SELECT AsText(GEOM) AS GEOM FROM ROADS_GEOM WHERE GEOM && SetSRID('BOX3D(191232 243117,191232 243119)'::box3d,-1)

Beachten Sie die Verwendung der SRID, um die Projektion der BOX3D anzugeben. Der Wert -1 wird verwendet, um anzugeben, dass keine SRID angegeben ist.

Der Tabellen-Dumper pgsql2shp verbindet sich direkt mit der Datenbank und konvertiert eine Tabelle (eventuell durch eine Abfrage definiert) in eine Shape-Datei. Die grundlegende Syntax lautet:

Die Befehlszeilenoptionen sind:

Schreiben Sie die Ausgabe in einen bestimmten Dateinamen.

Der Datenbankhost, zu dem eine Verbindung hergestellt werden soll.

Der Port, mit dem eine Verbindung auf dem Datenbankhost hergestellt werden soll.

Das Kennwort, das beim Herstellen einer Verbindung mit der Datenbank verwendet werden soll.

Der Benutzername, der beim Herstellen einer Verbindung mit der Datenbank verwendet werden soll.

Bei Tabellen mit mehreren Geometriespalten die beim Schreiben der Shape-Datei zu verwendende Geometriespalte.

Verwenden Sie einen binären Cursor. Dadurch wird der Vorgang schneller, funktioniert jedoch nicht, wenn einem NICHT-Geometrie-Attribut in der Tabelle eine Textumwandlung fehlt.

Raw-Modus. Lassen Sie das gid-Feld nicht fallen, und lassen Sie keine Spaltennamen mit Escape-Elementen zu.

Aus Gründen der Abwärtskompatibilität: Schreiben Sie eine 3-dimensionale Shape-Datei, wenn Sie aus alten Postgis-Datenbanken (vor 1.0.0) einen Dump erstellen (die Standardeinstellung ist in diesem Fall, eine 2-dimensionale Shape-Datei zu schreiben). Ab postgis-1.0.0+ sind Dimensionen vollständig kodiert.

Indizes machen die Verwendung einer räumlichen Datenbank für große Datensätze möglich. Ohne Indizierung würde jede Suche nach einem Merkmal einen "sequentiellen Scan" von jedem Datensatz in der Datenbank erfordern. Die Indizierung beschleunigt die Suche, indem die Daten in einem Suchbaum organisiert werden, der schnell durchlaufen werden kann, um einen bestimmten Datensatz zu finden. PostgreSQL unterstützt standardmäßig drei Arten von Indizes: B-Tree-Indizes, R-Tree-Indizes und GiST-Indizes.

B-Trees werden für Daten verwendet, die entlang einer Achse sortiert werden können, zB Zahlen, Buchstaben, Datumsangaben. GIS-Daten können nicht rational entlang einer Achse sortiert werden (was ist größer, (0,0) oder (0,1) oder (1,0)?), so dass die B-Tree-Indexierung für uns nutzlos ist.

R-Bäume unterteilen Daten in Rechtecke und Unterrechtecke und Unter-Unterrechtecke usw. R-Bäume werden von einigen räumlichen Datenbanken verwendet, um GIS-Daten zu indizieren, aber die PostgreSQL R-Tree-Implementierung ist nicht so robust wie die GiST Implementierung.

GiST-Indizes (Generalized Search Trees) unterteilen Daten in "Dinge auf einer Seite", "Dinge, die sich überlappen", "Dinge, die sich im Inneren befinden" und können für eine Vielzahl von Datentypen verwendet werden, einschließlich GIS-Daten. PostGIS verwendet einen R-Tree-Index, der auf GiST implementiert ist, um GIS-Daten zu indizieren.

GiST steht für "Generalized Search Tree" und ist eine generische Form der Indizierung. Zusätzlich zur GIS-Indizierung wird GiST verwendet, um die Suche nach allen Arten von unregelmäßigen Datenstrukturen (Integer-Arrays, Spektraldaten usw.) zu beschleunigen, die einer normalen B-Tree-Indizierung nicht zugänglich sind.

Sobald eine GIS-Datentabelle einige tausend Zeilen überschreitet, sollten Sie einen Index erstellen, um die räumliche Suche der Daten zu beschleunigen (es sei denn, alle Ihre Suchen basieren auf Attributen. In diesem Fall möchten Sie einen normalen Index für die Daten erstellen Attributfelder).

Die Syntax zum Erstellen eines GiST-Index für eine Spalte "geometry" lautet wie folgt:

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

Die Erstellung eines räumlichen Indexes ist eine rechenintensive Aufgabe: Bei Tabellen mit etwa 1 Million Zeilen auf einem 300-MHz-Solaris-Rechner haben wir festgestellt, dass die Erstellung eines GiST-Index etwa 1 Stunde dauert. Nach dem Erstellen eines Indexes ist es wichtig, PostgreSQL zu zwingen, Tabellenstatistiken zu sammeln, die zur Optimierung von Abfrageplänen verwendet werden:

VACUUM ANALYZE [table_name] [column_name] -- Dies wird nur für PostgreSQL 7.4-Installationen und darunter benötigt SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name])

GiST-Indizes haben gegenüber R-Tree-Indizes in PostgreSQL zwei Vorteile. Erstens sind GiST-Indizes "null-sicher", das heißt, sie können Spalten mit Nullwerten indizieren. Zweitens unterstützen GiST-Indizes das Konzept der ‚Verlust‘, das bei GIS-Objekten wichtig ist, die größer als die PostgreSQL 8K-Seitengröße sind. Lossiness ermöglicht PostgreSQL, nur den "wichtigen" Teil eines Objekts in einem Index zu speichern – im Fall von GIS-Objekten nur den Begrenzungsrahmen. GIS-Objekte, die größer als 8 KB sind, führen dazu, dass R-Tree-Indizes beim Erstellen fehlschlagen.

Normalerweise beschleunigen Indizes den Datenzugriff unsichtbar: Sobald der Index erstellt wurde, entscheidet der Abfrageplaner transparent, wann Indexinformationen verwendet werden sollen, um einen Abfrageplan zu beschleunigen. Leider optimiert der PostgreSQL-Abfrageplaner die Verwendung von GiST-Indizes nicht gut, so dass manchmal Suchvorgänge, die stattdessen einen räumlichen Index verwenden sollten, standardmäßig einen Sequenzscan der gesamten Tabelle verwenden.

Wenn Sie feststellen, dass Ihre räumlichen Indizes (oder Ihre Attributindizes) nicht verwendet werden, können Sie Folgendes tun:

Stellen Sie zunächst sicher, dass Statistiken über die Anzahl und Verteilung von Werten in einer Tabelle gesammelt werden, um dem Abfrageplaner bessere Informationen zur Verfügung zu stellen, um Entscheidungen über die Indexverwendung zu treffen. Bei PostgreSQL 7.4-Installationen und darunter erfolgt dies durch Ausführen von update_geometry_stats([table_name, column_name]) (Berechnung der Verteilung) und VACUUM ANALYZE [table_name] [column_name] (Berechnung der Anzahl der Werte). Ab PostgreSQL 8.0 führt VACUUM ANALYZE beide Operationen aus. Sie sollten Ihre Datenbanken sowieso regelmäßig saugen – bei vielen PostgreSQL-DBAs wird VACUUM regelmäßig als Cron-Job außerhalb der Spitzenzeiten ausgeführt.

Wenn das Vakuumieren nicht funktioniert, können Sie den Planer zwingen, die Indexinformationen zu verwenden, indem Sie den Befehl SET ENABLE_SEQSCAN=OFF verwenden. Sie sollten diesen Befehl nur sparsam und nur bei räumlich indizierten Abfragen verwenden: Im Allgemeinen weiß der Planer besser als Sie, wann er normale B-Tree-Indizes verwenden sollte. Nachdem Sie Ihre Abfrage ausgeführt haben, sollten Sie in Erwägung ziehen, ENABLE_SEQSCAN wieder zu aktivieren, damit andere Abfragen den Planer wie gewohnt verwenden.

Ab Version 0.6 sollte es nicht mehr nötig sein, den Planer mit ENABLE_SEQSCAN zur Verwendung des Index zu zwingen.

Wenn Sie der Meinung sind, dass der Planer bezüglich der Kosten von sequenziellen Scans im Vergleich zu Index-Scans falsch liegt, versuchen Sie, den Wert von random_page_cost in postgresql.conf zu reduzieren oder verwenden Sie SET random_page_cost=#. Der Standardwert für den Parameter ist 4, versuchen Sie, ihn auf 1 oder 2 zu setzen. Wenn Sie den Wert verringern, neigt der Planer dazu, Index-Scans zu verwenden.

Die Daseinsberechtigung der räumlichen Datenbankfunktionalität besteht darin, Abfragen innerhalb der Datenbank durchzuführen, die normalerweise eine Desktop-GIS-Funktionalität erfordern würden. Die effektive Verwendung von PostGIS erfordert die Kenntnis der verfügbaren räumlichen Funktionen und die Sicherstellung, dass geeignete Indizes vorhanden sind, um eine gute Leistung zu erzielen.

Nutzen von Indizes

Beachten Sie beim Erstellen einer Abfrage, dass nur die Bounding-Box-basierten Operatoren wie && den räumlichen Index von GiST nutzen können. Funktionen wie distance() können den Index nicht verwenden, um ihren Betrieb zu optimieren. Die folgende Abfrage wäre beispielsweise für eine große Tabelle ziemlich langsam:

SELECT the_geom FROM geom_table WHERE distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) < 100

Diese Abfrage wählt alle Geometrien in geom_table aus, die sich innerhalb von 100 Einheiten des Punktes (100000, 200000) befinden. Es wird langsam sein, weil es den Abstand zwischen jedem Punkt in der Tabelle und unserem angegebenen Punkt berechnet, dh. eine distance()-Berechnung für jede Zeile in der Tabelle. Wir können dies vermeiden, indem wir den Operator && verwenden, um die Anzahl der erforderlichen Entfernungsberechnungen zu reduzieren:

SELECT the_geom FROM geom_table WHERE the_geom && 'BOX3D(90900 190900, 100100 200100)'::box3d AND distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) & #60 100

Diese Abfrage wählt dieselben Geometrien aus, jedoch auf effizientere Weise. Angenommen, es gibt einen GiST-Index für the_geom, erkennt der Abfrageplaner, dass er den Index verwenden kann, um die Anzahl der Zeilen zu reduzieren, bevor das Ergebnis der Funktion distance() berechnet wird. Beachten Sie, dass die BOX3D-Geometrie, die in der Operation && verwendet wird, eine quadratische Box mit 200 Einheiten ist, die auf dem ursprünglichen Punkt zentriert ist - dies ist unsere "Query-Box". Der Operator && verwendet den Index, um die Ergebnismenge schnell auf die Geometrien zu reduzieren, die Begrenzungsrahmen haben, die den "Abfragerahmen" überlappen. Unter der Annahme, dass unsere Abfragebox viel kleiner ist als die Ausdehnungen der gesamten Geometrietabelle, reduziert dies die Anzahl der durchzuführenden Entfernungsberechnungen drastisch.

Ab PostGIS 1.3.0 enthalten die meisten Geometriebeziehungsfunktionen mit Ausnahme von ST_Disjoint und ST_Relate implizite Bounding-Box-Überlappungsoperatoren. Beispiele für räumliches SQL

In den Beispielen in diesem Abschnitt werden zwei Tabellen verwendet, eine Tabelle mit linearen Straßen und eine Tabelle mit polygonalen Gemeindegrenzen. Die Tabellendefinitionen für die Tabelle bc_roads sind:

Spalte | Typ | Beschreibung ------------+------------------+---------------- --- gid | ganze Zahl | Eindeutiger ID-Name | Zeichen variierend | Straßenname the_geom | Geometrie | Standortgeometrie (Linienfolge)

Die Tabellendefinition für die Tabelle bc_municipality lautet:

Spalte | Typ | Beschreibung -----------+------------------+----------------- -- gid | ganze Zahl | Eindeutiger ID-Code | ganze Zahl | Eindeutiger ID-Name | Zeichen variierend | Stadt / Ortsname the_geom | Geometrie | Standortgeometrie (Polygon)

Wie lang ist die Gesamtlänge aller Straßen in Kilometern?

Sie können diese Frage mit einem sehr einfachen Stück SQL beantworten:

postgis=# SELECT sum(length(the_geom))/1000 AS km_roads FROM bc_roads km_roads ------------------ 70842.1243039643 (1 Zeile)

Wie groß ist die Stadt von Prinz George in Hektar?

Diese Abfrage kombiniert eine Attributbedingung (auf den Gemeindenamen) mit einer räumlichen Berechnung (der Fläche):

postgis=# SELECT area(the_geom)/10000 AS Hektar FROM bc_municipality WHERE name = 'PRINCE GEORGE' Hektar ------------------ 32657.9103824927 (1 Zeile)

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

Diese Abfrage bringt eine räumliche Messung in die Abfragebedingung. Es gibt mehrere Möglichkeiten, dieses Problem anzugehen, aber die effizienteste ist unten:

postgis=# SELECT name, area(the_geom)/10000 AS Hektar FROM bc_municipality ORDER BY Hektar DESC LIMIT 1 Name | Hektar ---------------+---------------- TUMBLER RIDGE | 155020.02556131 (1 Reihe)

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 Bereichsspalte hinzuzufügen, die wir separat für die Leistung indizieren könnten. Indem wir die Ergebnisse in absteigender Richtung ordnen und den PostgreSQL-Befehl "LIMIT" verwenden, können wir leicht den größten Wert auswählen, ohne eine Aggregatfunktion wie max() zu verwenden.

Wie lang sind die Straßen in jeder Gemeinde vollständig?

Dies ist ein Beispiel für eine "räumliche Verknüpfung", da wir Daten aus zwei Tabellen zusammenführen (eine Verknüpfung durchführen), aber eine räumliche Interaktionsbedingung ("enthalten") als Verknüpfungsbedingung anstelle des üblichen relationalen Ansatzes verwenden auf einem gemeinsamen Schlüssel zu verbinden:

postgis=# SELECT m.name, sum(length(r.the_geom))/1000 as road_km FROM bc_roads AS r,bc_municipality AS m WHERE r.the_geom && & m.the_geom AND enthält(m.the_geom,r. the_geom) GRUPPE NACH m.name ORDER NACH straßen_km name | road_km ----------------------------+----------------- SURREY | 1539.47553551242 VANCOUVER | 1450.33093486576 LANGLEY DISTRICT | 833.793392535662 BURNABY | 773.769091404338 PRINZ GEORGE | 694.37554369147 .

Diese Abfrage dauert eine Weile, da jede Straße in der Tabelle zum Endergebnis zusammengefasst wird (ca. 250.000 Straßen für unsere spezielle Beispieltabelle). Bei kleineren Überlagerungen (mehrere tausend Datensätze auf mehreren hundert) kann die Reaktion sehr schnell sein.

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

Dies ist ein Beispiel für ein "Overlay", das zwei Tabellen aufnimmt und eine neue Tabelle ausgibt, die aus räumlich abgeschnittenen oder ausgeschnittenen Ergebnissen besteht. Im Gegensatz zu der oben gezeigten "räumlichen Verknüpfung" erstellt diese Abfrage tatsächlich neue Geometrien. Ein Overlay ist wie eine turbogeladene räumliche Verknüpfung und für genauere Analysearbeiten nützlich:

postgis=# CREATE TABLE pg_roads as SELECT Kreuzung(r.the_geom, m.the_geom) AS Kreuzung_geom, length(r.the_geom) AS rd_orig_length, r.* FROM bc_roads AS r, bc_municipality AS m WO r.the_geom && m.the_geom UND schneidet(r.the_geom, m.the_geom) UND m.name = 'PRINCE GEORGE'

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

postgis=# SELECT sum(length(r.the_geom))/1000 AS Kilometer FROM bc_roads r, bc_municipality m WHERE r.the_geom && m.the_geom AND r.name = 'Douglas St' AND m.name = "VICTORIA" Kilometer ------------------ 4,89151904172838 (1 Reihe)

Welches ist das größte Gemeindepolygon mit einem Loch?

postgis=# SELECT gid, name, area(the_geom) AS area FROM bc_municipality WHERE nrings(the_geom) > 1 ORDER BY area DESC LIMIT 1 gid | Name | Bereich ---+--------------+------------------ 12 | SPALLUMCHEEN | 257374619.430216 (1 Reihe)

Der Minnesota Mapserver ist ein Internet-Web-Mapping-Server, der der OpenGIS-Web-Mapping-Server-Spezifikation entspricht.

Um PostGIS mit Mapserver zu verwenden, müssen Sie wissen, wie Mapserver konfiguriert wird, was den Rahmen dieser Dokumentation sprengen würde. In diesem Abschnitt werden spezifische PostGIS-Probleme und Konfigurationsdetails behandelt.

Um PostGIS mit Mapserver zu verwenden, benötigen Sie:

Version 0.6 oder neuer von PostGIS.

Version 3.5 oder neuer von Mapserver.

Mapserver greift wie jeder andere PostgreSQL-Client auf PostGIS/PostgreSQL-Daten zu – mit libpq. Das bedeutet, dass Mapserver auf jedem Computer mit Netzwerkzugriff auf den PostGIS-Server installiert werden kann, solange das System über die libpq PostgreSQL-Clientbibliotheken verfügt.

Kompilieren und installieren Sie Mapserver mit allen gewünschten Optionen, einschließlich der Konfigurationsoption "--with-postgis".

Fügen Sie in Ihrer Mapserver-Kartendatei einen PostGIS-Layer hinzu. Beispielsweise:

LAYER CONNECTIONTYPE postgis NAME "widehighways" # Herstellen einer Verbindung zu einer entfernten räumlichen Datenbank CONNECTION "user=dbuser dbname=gisdatabase host=bigserver" # Holen Sie sich die Zeilen aus der Spalte 'geom' der Tabelle 'roads' DATEN "geom from road" STATUS ON TYPE LINE # Rendern Sie von den Linien in der Ausdehnung nur die breiten Highways FILTER "type = 'highway' und numlanes >= 4" CLASS # Die Superhighways heller machen und 2 Pixel breit AUSDRUCK ([numlanes] >= 6) FARBE 255 22 22 SYMBOL "solid" SIZE 2 END CLASS # Alle anderen sind dunkler und nur 1 Pixel breit AUSDRUCK ([numlanes] < 6) FARBE 205 92 82 ENDE ENDE

Im obigen Beispiel lauten die PostGIS-spezifischen Direktiven wie folgt:

Bei PostGIS-Layern ist dies immer "postgis".

Die Datenbankverbindung wird durch eine 'Verbindungszeichenfolge' gesteuert, die einen Standardsatz von Schlüsseln und Werten wie folgt darstellt (mit den Standardwerten in <>):

user=<username> password=<password> dbname=<username> hostname=<server> port=򓳸>

Eine leere Verbindungszeichenfolge ist immer noch gültig und jedes der Schlüssel/Wert-Paare kann weggelassen werden. Sie geben im Allgemeinen mindestens den Datenbanknamen und den Benutzernamen an, mit dem Sie sich verbinden möchten.

Die Form dieses Parameters ist "<column> von <tablename>", wobei die Spalte die räumliche Spalte ist, die auf der Karte gerendert werden soll.

Der Filter muss eine gültige SQL-Zeichenfolge sein, die der Logik entspricht, die normalerweise dem Schlüsselwort "WHERE" in einer SQL-Abfrage folgt. Um beispielsweise nur Straßen mit 6 oder mehr Fahrspuren zu rendern, verwenden Sie den Filter "num_lanes >= 6".

Stellen Sie in Ihrer räumlichen Datenbank sicher, dass für alle Layer, die Sie zeichnen möchten, räumliche Indizes (GiST) erstellt wurden.

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] GIST_GEOMETRY_OPS )

Wenn Sie Ihre Layer mit Mapserver abfragen, benötigen Sie außerdem einen "oiden Index".

Mapserver erfordert beim Ausführen von Abfragen für jeden Geodatensatz eindeutige Kennungen, und das PostGIS-Modul von Mapserver verwendet den PostgreSQL-oid-Wert, um diese eindeutigen Kennungen bereitzustellen. Ein Nebeneffekt davon ist, dass für einen schnellen wahlfreien Zugriff auf Datensätze während Abfragen ein Index auf dem oid benötigt wird.

Um einen "oiden Index" zu erstellen, verwenden Sie die folgende SQL:

CREATE INDEX [indexname] ON [tablename] (oid)

Häufig gestellte Fragen

Wenn ich einen AUSDRUCK in meiner Map-Datei verwende, wird die Bedingung nie als true zurückgegeben, obwohl ich weiß, dass die Werte in meiner Tabelle vorhanden sind.

Im Gegensatz zu Shape-Dateien müssen PostGIS-Feldnamen in EXPRESSIONS mit Kleinbuchstaben referenziert werden.

Der FILTER, den ich für meine Shape-Dateien verwende, funktioniert nicht für meine PostGIS-Tabelle mit den gleichen Daten.

Im Gegensatz zu Shape-Dateien verwenden Filter für PostGIS-Layer die SQL-Syntax (sie werden an die SQL-Anweisung angehängt, die der PostGIS-Connector zum Zeichnen von Layern in Mapserver generiert).

FILTER "type = 'highway' und numlanes >= 4"

Mein PostGIS-Layer zeichnet viel langsamer als mein Shape-Datei-Layer, ist das normal?

Im Allgemeinen ist zu erwarten, dass PostGIS-Layer 10 % langsamer sind als vergleichbare Shape-Datei-Layer, aufgrund des zusätzlichen Overheads, der mit Datenbankverbindungen, Datentransformationen und Datentransfer zwischen der Datenbank und dem Mapserver verbunden ist.

Wenn Sie erhebliche Leistungsprobleme beim Zeichnen feststellen, haben Sie wahrscheinlich keinen räumlichen Index für Ihre Tabelle erstellt.

postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn ) postgis# SELECT update_geometry_stats() -- Für PGSQL < 8.0 postgis# VACUUM ANALYZE -- Für PGSQL >= 8.0

Mein PostGIS-Layer zeichnet gut, aber Abfragen sind wirklich langsam. Was ist falsch?

Für schnelle Abfragen benötigen Sie einen eindeutigen Schlüssel für Ihre räumliche Tabelle und einen Index für diesen eindeutigen Schlüssel.

Sie können mit der USING UNIQUE-Klausel in Ihrer DATA-Zeile angeben, welchen eindeutigen Schlüssel Mapserver verwenden soll:

DATEN "the_geom FROM geotable USING UNIQUE gid"

Wenn Ihre Tabelle keine explizite eindeutige Spalte hat, können Sie eine eindeutige Spalte "fälschen", indem Sie die PostgreSQL-Zeile "oid" für Ihre eindeutige Spalte verwenden. "oid" ist die standardmäßige eindeutige Spalte, wenn Sie keine deklarieren. Um die Abfragegeschwindigkeit zu erhöhen, müssen Sie also einen Index für den oid-Wert Ihrer räumlichen Tabelle erstellen.

postgis# CREATE INDEX geotable_oid_idx ON geotable (oid)

Die Pseudo-SQL-Klausel USING wird verwendet, um einige Informationen hinzuzufügen, die dem Mapserver helfen, die Ergebnisse komplexerer Abfragen zu verstehen. Genauer gesagt, wenn entweder ein View oder ein Subselect als Quelltabelle verwendet wird (das Ding rechts von "FROM" in einer DATA-Definition), ist es für Mapserver schwieriger, automatisch einen eindeutigen Bezeichner für jede Zeile zu ermitteln und auch die SRID für die Tabelle. Die USING-Klausel kann mapserver wie folgt mit diesen beiden Informationen versorgen:

DATA "the_geom FROM (SELECT table1.the_geom AS the_geom, table1.oid AS oid, table2.data AS data FROM table1 LEFT JOIN table2 ON table1.id = table2.id) AS new_table USING UNIQUE oid USING SRID=-1"

Mapserver benötigt für jede Zeile eine eindeutige ID, um die Zeile bei Kartenabfragen zu identifizieren. Normalerweise wird das oid als eindeutige Kennung verwendet, aber Ansichten und Unterauswahlen haben nicht automatisch eine oid-Spalte. Wenn Sie die Abfragefunktionalität von Mapserver verwenden möchten, müssen Sie Ihrer Ansicht oder Unterauswahl eine eindeutige Spalte hinzufügen und diese mit USING UNIQUE deklarieren. Sie können zu diesem Zweck beispielsweise explizit einen der oid-Werte der Tabelle oder eine beliebige andere Spalte auswählen, die für die Ergebnismenge garantiert eindeutig ist.

Die USING-Anweisung kann auch für einfache DATA-Anweisungen nützlich sein, wenn Sie Map-Abfragen durchführen. Zuvor wurde empfohlen, einen Index für die oid-Spalte von Tabellen hinzuzufügen, die in abfragefähigen Layern verwendet werden, um die Leistung von Kartenabfragen zu beschleunigen. Mit der USING-Klausel ist es jedoch möglich, mapserver anzuweisen, den Primärschlüssel Ihrer Tabelle als Kennung für Kartenabfragen zu verwenden, und dann ist kein zusätzlicher Index mehr erforderlich.

Beim "Abfragen einer Karte" wird auf eine Karte geklickt, um Informationen zu den Kartenmerkmalen an diesem Standort abzufragen. Verwechseln Sie in einer DATA-Definition "Map-Abfragen" nicht mit der SQL-Abfrage.

PostGIS muss wissen, welches Raumbezugssystem von den Geometrien verwendet wird, um die korrekten Daten an den Mapserver zurückzugeben. Normalerweise ist es möglich, diese Informationen in der Tabelle "geometry_columns" in der PostGIS-Datenbank zu finden, jedoch nicht für Tabellen, die im laufenden Betrieb erstellt werden, wie z. B. Subselects und Views. Mit der Option USING SRID= kann also die richtige SRID in der DATA-Definition angegeben werden.

Der Parser für Mapserver PostGIS-Layer ist ziemlich primitiv und berücksichtigt in einigen Bereichen die Groß-/Kleinschreibung. Achten Sie darauf, dass alle SQL-Schlüsselwörter und alle Ihre USING-Klauseln in Großbuchstaben geschrieben sind und dass Ihre USING UNIQUE-Klausel vor Ihrer USING SRID-Klausel steht.

Beginnen wir mit einem einfachen Beispiel und arbeiten uns nach oben. Betrachten Sie die folgende Mapserver-Layer-Definition:

LAYER VERBINDUNGSTYP postgis NAME "roads" VERBINDUNG "user=theuser password=thepass dbname=thedb host=theserver" DATEN "the_geom FROM road" STATUS ON TYPE LINE CLASS COLOR 0 0 0 END END

Dieser Layer zeigt alle Straßengeometrien in der Straßentabelle als schwarze Linien an.

Nehmen wir nun an, wir wollen nur die Autobahnen anzeigen, bis wir mindestens auf einen Maßstab von 1:100000 gezoomt haben - die nächsten beiden Ebenen werden diesen Effekt erzielen:

LAYER-VERBINDUNG "user=theuser password=thepass dbname=thedb host=theserver" DATEN "the_geom FROM road" MINSCALE 100000 STATUS ON TYPE LINE FILTER "road_type = 'highway'" KLASSENFARBE 0 0 0 END END LAYER VERBINDUNG "user=theuser password=thepass dbname=thedb host=theserver" DATEN "the_geom FROM road" MAXSCALE 100000 STATUS ON TYPE LINE CLASSITEM road_type CLASS AUSDRUCK "highway" GRÖSSE 2 FARBE 255 0 0 END CLASS FARBE 0 0 0 ENDE ENDE

Die erste Ebene wird verwendet, wenn der Maßstab größer als 1:100000 ist, und zeigt nur die Straßen des Typs "Autobahn" als schwarze Linien an. Die Option FILTER bewirkt, dass nur Straßen des Typs "highway" angezeigt werden.

Die zweite Ebene wird verwendet, wenn der Maßstab weniger als 1:100000 beträgt, und zeigt Autobahnen als doppelt dicke rote Linien und andere Straßen als normale schwarze Linien an.

Wir haben also ein paar interessante Dinge getan, indem wir nur die Mapserver-Funktionalität verwendet haben, aber unsere DATA-SQL-Anweisung ist einfach geblieben. Angenommen, der Name der Straße ist in einer anderen Tabelle gespeichert (aus welchem ​​Grund auch immer) und wir müssen einen Join durchführen, um ihn abzurufen und unsere Straßen zu beschriften.

LAYER-VERBINDUNG "user=theuser password=thepass dbname=thedb host=theserver" DATA "the_geom FROM (SELECT Straßen.oid AS oid, road.the_geom AS the_geom, road_names.name als Name FROM Straßen LEFT JOIN road_names ON Straßen. road_name_id = road_names.road_name_id) AS named_roads USING UNIQUE oid USING SRID=-1" MAXSCALE 20000 STATUS ON TYPE ANNOTATION LABELITEM name KLASSE LABEL ANGLE auto SIZE 8 COLOR 0 192 0 TYPE truetype FONT Arial END END END

Dieser Annotation-Layer fügt allen Straßen grüne Beschriftungen hinzu, wenn der Maßstab auf 1:20000 oder weniger sinkt. Es zeigt auch, wie Sie einen SQL-Join in einer DATA-Definition verwenden.

Java-Clients können auf PostGIS-"geometry"-Objekte in der PostgreSQL-Datenbank entweder direkt als Textdarstellungen oder mithilfe der mit PostGIS gebündelten JDBC-Erweiterungsobjekte zugreifen. Um die Erweiterungsobjekte verwenden zu können, muss sich die Datei "postgis.jar" zusammen mit dem JDBC-Treiberpaket "postgresql.jar" in Ihrem CLASSPATH befinden.

Das "PGgeometry"-Objekt ist ein Wrapper-Objekt, das je nach Typ ein bestimmtes topologisches Geometrieobjekt (Unterklassen der abstrakten Klasse "Geometry") enthält: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon.

Das JavaDoc für die Erweiterungsobjekte bietet eine Referenz für die verschiedenen Datenzugriffsfunktionen in den geometrischen Objekten.

Leistungstipps Kleine Tabellen mit großen Geometrien Problembeschreibung

Aktuelle PostgreSQL-Versionen (einschließlich 8.0) leiden an einer Schwäche des Abfrageoptimierers in Bezug auf TOAST-Tabellen. TOAST-Tabellen sind eine Art "Erweiterungsraum", der verwendet wird, um große (im Sinne der Datengröße) Werte zu speichern, die nicht in normale Datenseiten passen (wie lange Texte, Bilder oder komplexe Geometrien mit vielen Scheitelpunkten), siehe http ://www.postgresql.org/docs/8.0/static/storage-toast.html für weitere Informationen).

Das Problem tritt auf, wenn Sie eine Tabelle mit ziemlich großen Geometrien haben, aber nicht zu viele Zeilen davon (wie eine Tabelle, die die Grenzen aller europäischen Länder in hoher Auflösung enthält). Dann ist der Tisch selbst klein, verbraucht aber viel TOAST-Platz. In unserem Beispielfall hatte die Tabelle selbst etwa 80 Zeilen und verwendet nur 3 Datenseiten, aber die Tabelle TOAST verwendet 8225 Seiten.

Geben Sie nun eine Abfrage aus, bei der Sie den Geometrieoperator && verwenden, um nach einem Begrenzungsrahmen zu suchen, der nur sehr wenigen dieser Zeilen entspricht. Jetzt sieht der Abfrageoptimierer, dass die Tabelle nur 3 Seiten und 80 Zeilen hat. Er schätzt, dass ein sequenzieller Scan auf einer so kleinen Tabelle viel schneller ist als die Verwendung eines Index. Und so beschließt er, den GIST-Index zu ignorieren. Normalerweise ist diese Einschätzung richtig. In unserem Fall muss der Operator && jedoch jede Geometrie von der Festplatte holen, um die Bounding Boxes zu vergleichen und somit auch alle TOAST-Seiten zu lesen.

Um zu sehen, ob Sie an diesem Fehler leiden, verwenden Sie den postgresql-Befehl "EXPLAIN ANALYZE". Für weitere Informationen und die technischen Details können Sie den Thread auf der Postgres Performance Mailingliste lesen: http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php

Die PostgreSQL-Leute versuchen, dieses Problem zu lösen, indem sie die Abfrageschätzung TOAST-fähig machen. Hier sind vorerst zwei Problemumgehungen:

Die erste Problemumgehung besteht darin, den Abfrageplaner zu zwingen, den Index zu verwenden. Senden Sie "SET enable_seqscan TO off" an den Server, bevor Sie die Abfrage ausgeben. Dies zwingt den Abfrageplaner grundsätzlich, sequentielle Scans nach Möglichkeit zu vermeiden. Es verwendet also wie gewohnt den GIST-Index. Dieses Flag muss jedoch bei jeder Verbindung gesetzt werden und führt in anderen Fällen dazu, dass der Abfrageplaner falsche Schätzungen vornimmt.

Die zweite Problemumgehung besteht darin, den sequenziellen Scan so schnell zu gestalten, wie der Abfrageplaner denkt. Dies kann erreicht werden, indem eine zusätzliche Spalte erstellt wird, die die Bbox "cachet, und mit dieser abgleicht. In unserem Beispiel lauten die Befehle wie folgt:

SELECT addGeometryColumn('myschema','mytable','bbox',񠑖','GEOMETRY',ƈ') UPDATE mytable set bbox = Envelope(Force_2d(the_geom) )

Ändern Sie nun Ihre Abfrage, um den Operator && für bbox anstelle von geom_column zu verwenden, wie zum Beispiel:

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

Wenn Sie mytable Zeilen ändern oder hinzufügen, müssen Sie natürlich die bbox "in sync" halten. Der transparenteste Weg, dies zu tun, wären Trigger, aber Sie können Ihre Anwendung auch ändern, um die Bbox-Spalte aktuell zu halten, oder die obige UPDATE-Abfrage nach jeder Änderung ausführen.

CLUSTERing auf Geometrieindizes

Für Tabellen, die meist schreibgeschützt sind und bei denen ein einzelner Index für die meisten Abfragen verwendet wird, bietet PostgreSQL den Befehl CLUSTER. Dieser Befehl ordnet alle Datenzeilen physisch in der gleichen Reihenfolge wie die Indexkriterien neu an, was zwei Leistungsvorteile ergibt: Erstens wird bei Indexbereichsscans die Anzahl der Suchvorgänge in der Datentabelle drastisch reduziert. Zweitens, wenn sich Ihr Arbeitsset auf einige kleine Intervalle auf die Indizes konzentriert, haben Sie ein effizienteres Caching, da die Datenzeilen auf weniger Datenseiten verteilt sind. (Fühlen Sie sich eingeladen, an dieser Stelle die CLUSTER-Befehlsdokumentation aus dem PostgreSQL-Handbuch zu lesen.)

Derzeit lässt PostgreSQL jedoch kein Clustering auf PostGIS-GIST-Indizes zu, da GIST-Indizes einfach NULL-Werte ignorieren. Sie erhalten eine Fehlermeldung wie:

lwgeom=# CLUSTER my_geom_index ON my_table FEHLER: Cluster nicht möglich, wenn die Indexzugriffsmethode keine Nullwerte verarbeitet HINWEIS: Sie können dies möglicherweise umgehen, indem Sie die Spalte "the_geom" NOT NULL markieren.

Wie die HINT-Meldung Ihnen sagt, kann man diesen Mangel umgehen, indem man der Tabelle eine "not null"-Einschränkung hinzufügt:

lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null ALTER TABLE

Dies funktioniert natürlich nicht, wenn Sie tatsächlich NULL-Werte in Ihrer Geometriespalte benötigen. Darüber hinaus müssen Sie die obige Methode verwenden, um die Einschränkung hinzuzufügen. Die Verwendung einer CHECK-Einschränkung wie "ALTER TABLE blubb ADD CHECK (Geometrie ist nicht null)" funktioniert nicht.

Dimensionskonvertierung vermeiden

Manchmal haben Sie 3D- oder 4D-Daten in Ihrer Tabelle, greifen aber immer mit den OpenGIS-kompatiblen asText()- oder asBinary()-Funktionen darauf zu, die nur 2D-Geometrien ausgeben. Sie tun dies, indem sie intern die Funktion force_2d() aufrufen, was bei großen Geometrien einen erheblichen Overhead mit sich bringt. Um diesen Overhead zu vermeiden, kann es möglich sein, diese zusätzlichen Dimensionen ein für alle Mal vorab zu löschen:

UPDATE mytable SET the_geom = force_2d(the_geom) VAKUUM VOLL ANALYZE mytable

Beachten Sie, dass beim Hinzufügen Ihrer Geometriespalte mit AddGeometryColumn() eine Einschränkung für die Geometriebemaßung besteht. Um es zu umgehen, müssen Sie die Einschränkung löschen. Denken Sie daran, den Eintrag in der Tabelle "geometry_columns" zu aktualisieren und anschließend die Abhängigkeit neu zu erstellen.

Bei großen Tabellen kann es sinnvoll sein, dieses UPDATE in kleinere Teile aufzuteilen, indem Sie das UPDATE über eine WHERE-Klausel und Ihren Primärschlüssel oder ein anderes zulässiges Kriterium auf einen Teil der Tabelle beschränken und ein einfaches "VACUUM" zwischendurch ausführen Ihre UPDATEs. Dadurch wird der Bedarf an temporärem Speicherplatz drastisch reduziert. Wenn Sie Geometrien mit gemischten Dimensionen haben, wird außerdem das erneute Schreiben von Geometrien, die bereits in 2D vorliegen, durch das Einschränken des UPDATE durch "WHERE dimension(the_geom)ɮ" übersprungen.

Die unten aufgeführten Funktionen sind diejenigen, die ein Benutzer von PostGIS wahrscheinlich benötigen wird. Es gibt andere Funktionen, die benötigt werden, um die PostGIS-Objekte zu unterstützen, die für einen allgemeinen Benutzer nicht von Nutzen sind.

PostGIS hat mit dem Übergang von der bestehenden Namenskonvention zu einer SQL-MM-zentrierten Konvention begonnen. Aus diesem Grund wurden die meisten Funktionen, die Sie kennen und lieben, in das Standardpräfix für räumliche Typen (ST) umbenannt. Frühere Funktionen sind weiterhin verfügbar, werden jedoch in diesem Dokument nicht aufgeführt, wenn aktualisierte Funktionen gleichwertig sind. Diese werden in einer zukünftigen Version eingestellt.

OpenGIS-Funktionen Verwaltungsfunktionen AddGeometryColumn(varchar, varchar, varchar, integer, varchar, integer)

Syntax: AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>). Fügt einer vorhandenen Attributtabelle eine Geometriespalte hinzu. Der schema_name ist der Name des Tabellenschemas (wird für PostgreSQL-Installationen vor dem Schema nicht verwendet). Das srid muss ein ganzzahliger Verweis auf einen Eintrag in der Tabelle SPATIAL_REF_SYS sein. Der Typ muss eine Zeichenfolge in Großbuchstaben sein, die dem Geometrietyp entspricht, z. B. 'POLYGON' oder 'MULTILINESTRING'.

Syntax: DropGeometryColumn(<schema_name>, <table_name>, <column_name>). Entfernen einer Geometriespalte aus einer räumlichen Tabelle. Beachten Sie, dass schema_name mit dem Feld f_schema_name der Tabellenzeile in der Tabelle "geometry_columns" übereinstimmen muss.

Legen Sie die SRID für eine Geometrie auf einen bestimmten ganzzahligen Wert fest. Nützlich beim Erstellen von Begrenzungsrahmen für Abfragen.

Gibt den kartesischen Abstand zwischen zwei Geometrien in projizierten Einheiten zurück. Verwendet keine Indizes.

Gibt true zurück, wenn Geometrien innerhalb des angegebenen Abstands zueinander liegen. Verwendet Indizes, falls verfügbar.

Gibt 1 (TRUE) zurück, wenn die angegebenen Geometrien "räumlich gleich" sind. Verwenden Sie dies für eine 'bessere'-Antwort als '='. equals('LINESTRING(0 0, 10 10)','LINESTRING(0 0, 5 5, 10 10)') ist wahr.

Durchgeführt vom GEOS-Modul

Gibt 1 (TRUE) zurück, wenn die Geometrien "räumlich disjunkt" sind.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 //s2.1.13.3 - a.Relate(b, 'FF*FF****')

Gibt 1 (TRUE) zurück, wenn sich die Geometrien "räumlich überschneiden".

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung von Indexen zu vermeiden, verwenden Sie die Funktion _ST_Intersects.

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 //s2.1.13.3 - Intersects(g1, g2 ) --> Not (Disjoint(g1, g2 ))

Gibt 1 (TRUE) zurück, wenn sich die Geometrien "räumlich berühren".

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung des Index zu vermeiden, verwenden Sie die Funktion _ST_Touches.

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 // s2.1.13.3- a.Touches(b) -> (I(a) Schnittpunkt I(b) = ) und (ein Schnittpunkt b) nicht leer

Gibt 1 (TRUE) zurück, wenn sich die Geometrien "räumlich kreuzen".

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Indexverwendung zu vermeiden, verwenden Sie die Funktion _ST_Crosses.

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*T******')

Gibt 1 (TRUE) zurück, wenn Geometrie A "räumlich innerhalb" Geometrie B liegt.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Indexverwendung zu vermeiden, verwenden Sie die Funktion _ST_Within.

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')

Gibt 1 (TRUE) zurück, wenn sich die Geometrien "räumlich überlappen".

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Indexverwendung zu vermeiden, verwenden Sie die Funktion _ST_Overlaps.

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

Gibt 1 (TRUE) zurück, wenn Geometrie A "räumlich enthält" Geometrie B.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung des Index zu vermeiden, verwenden Sie die Funktion _ST_Contains.

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 // s2.1.13.3 - wie innerhalb (Geometrie B, Geometrie A)

Gibt 1 (TRUE) zurück, wenn kein Punkt in Geometrie B außerhalb von Geometrie A liegt

Eine Erläuterung der Notwendigkeit dieser Funktion finden Sie unter http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html.

Dieser Funktionsaufruf enthält automatisch einen Begrenzungsrahmenvergleich, der alle Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung des Index zu vermeiden, verwenden Sie die Funktion _ST_Covers.

Gibt 1 (TRUE) zurück, wenn kein Punkt in Geometrie A außerhalb von Geometrie B liegt

Eine Erläuterung der Notwendigkeit dieser Funktion finden Sie unter http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html.

Gibt 1 (TRUE) zurück, wenn sich die Geometrien "räumlich überschneiden".

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

OGC SPEC s2.1.1.2 // s2.1.13.3 - NICHT disjunkt(Geometrie, Geometrie)

Gibt 1 (TRUE) zurück, wenn diese Geometrie räumlich mit einer anderen Geometrie verbunden ist, indem auf Schnittpunkte zwischen der Innen-, Grenz- und Außenfläche der beiden Geometrien getestet wird, wie durch die Werte in der KreuzungPatternMatrix angegeben.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

HINWEIS: Dies ist die "allowable"-Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

gibt das DE-9IM (dimensional erweiterte Neun-Kreuzungsmatrix) zurück

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

nicht in OGC-Spezifikation, aber impliziert. siehe s2.1.13.2

Gibt den Schwerpunkt der Geometrie als Punkt zurück.

Die Berechnung wird genauer, wenn sie vom GEOS-Modul durchgeführt wird (zur Kompilierzeit aktiviert).

Gibt den Bereich der Geometrie zurück, wenn es sich um ein Polygon oder Multi-Polygon handelt.

Die Länge dieser Kurve in ihrem zugeordneten Raumbezug.

Gib einen Punkt zurück, der garantiert auf der Oberfläche liegt

Gibt den Abschluss der kombinatorischen Grenze dieser Geometrie zurück. Die kombinatorische Grenze wird wie in Abschnitt 3.12.3.2 der OGC SPEC beschrieben definiert. Da das Ergebnis dieser Funktion eine Schließung und damit topologisch geschlossen ist, kann die resultierende Grenze mit Darstellungsgeometrie-Primitiven dargestellt werden, wie in der OGC SPEC, Abschnitt 3.12.2 diskutiert.

Durchgeführt vom GEOS-Modul

Gibt eine Geometrie zurück, die alle Punkte darstellt, deren Entfernung von dieser Geometrie kleiner oder gleich der Entfernung ist. Die Berechnungen erfolgen im räumlichen Bezugssystem dieser Geometrie. Der optionale dritte Parameter legt die Anzahl der Segmente fest, die verwendet werden, um einen Viertelkreis anzunähern (Standardeinstellung 8).

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Gibt eine Geometrie zurück, die die konvexe Hülle dieser Geometrie darstellt.

Durchgeführt vom GEOS-Modul

Gibt eine Geometrie zurück, die den Punktsatzschnittpunkt der Geometries darstellt.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Gibt eine Geometrie zurück, die die symmetrische Punktmengendifferenz von Geometrie A und Geometrie B darstellt.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Gibt eine Geometrie zurück, die die Punktmengendifferenz von Geometrie A und Geometrie B darstellt.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

Gibt eine Geometrie zurück, die die Punktmengenvereinigung der Geometries darstellt.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection als Argument auf

HINWEIS: Dies wurde in "union" umbenannt, da union ein für SQL reserviertes Wort ist

Gibt eine Geometrie zurück, die die Punktmengenvereinigung aller Geometrien in der angegebenen Menge darstellt.

Durchgeführt vom GEOS-Modul

Rufen Sie nicht mit einer GeometryCollection im Argumentsatz auf

Nicht explizit in OGC SPEC definiert

Wie oben, nur speicherfreundlich (verbraucht weniger Speicher und mehr Prozessorzeit).

Gibt die bekannte Textdarstellung der Geometrie zurück. Zum Beispiel: POLYGON(0 0,0 1,1 1,1 0,0 0)

Gibt die Geometrie im OGC-Format "well-known-binary" zurück, wobei die Endian-Codierung des Servers verwendet wird, auf dem die Datenbank ausgeführt wird. Dies ist in binären Cursorn nützlich, um Daten aus der Datenbank zu ziehen, ohne sie in eine Zeichenfolgendarstellung zu konvertieren.

OGC SPEC s2.1.1.1 - siehe auch alsBinary(<geometry>,'XDR') und asBinary(<geometry>,'NDR')

Gibt die ganzzahlige SRID-Nummer des räumlichen Bezugssystems der Geometrie zurück.

Die inhärente Bemaßung dieses Geometrieobjekts, die kleiner oder gleich der Koordinatenbemaßung sein muss. OGC SPEC s2.1.1.1 - gibt 0 für Punkte, 1 für Linien, 2 für Polygone und die größte Dimension der Komponenten einer GEOMETRYCOLLECTION zurück.

Dimension auswählen('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0)') Dimension ------------ 1

Gibt ein POLYGON zurück, das den Begrenzungsrahmen der Geometrie darstellt.

OGC SPEC s2.1.1.1 - Der minimale Begrenzungsrahmen für diese Geometrie, der als Geometrie zurückgegeben wird. Das Polygon wird durch die Eckpunkte der Bounding Box ((MINX, MINY), (MAXX, MINY), (MAXX, MAXY), (MINX, MAXY), (MINX, MINY)) definiert.

HINWEIS: PostGIS fügt auch eine Zmin/Zmax-Koordinate hinzu.

Gibt 1 (TRUE) zurück, wenn diese Geometrie die leere Geometrie ist. Wenn wahr, dann stellt diese Geometrie die leere Punktmenge dar - d. h. GEOMETRYCOLLECTION(LEER).

Gibt 1 (TRUE) zurück, wenn diese Geometrie keine anomalen geometrischen Punkte hat, wie z. B. Selbstschnittpunkt oder Selbsttangential.

Durchgeführt vom GEOS-Modul

Gibt true zurück, wenn die Anfangs- und Endpunkte der Geometrie übereinstimmen.

Gibt 1 (TRUE) zurück, wenn diese Kurve geschlossen ist (StartPoint ( ) = EndPoint ( )) und diese Kurve einfach ist (durchläuft denselben Punkt nicht mehr als einmal).

Wenn die Geometrie eine GEOMETRYCOLLECTION (oder MULTI*) ist, geben Sie die Anzahl der Geometrien zurück, andernfalls geben Sie NULL zurück.

Gibt die N'. Geometrie zurück, wenn die Geometrie eine GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING oder MULTIPOLYGON ist. Andernfalls NULL zurückgeben.

Index ist 1-basiert wie für OGC-Spezifikationen seit Version 0.8.0. Frühere Versionen haben dies stattdessen als 0-basiert implementiert.

Suchen Sie die Anzahl der Punkte in der ersten Linienfolge in der Geometrie und geben Sie sie zurück. Gibt NULL zurück, wenn die Geometrie keine Linienfolge enthält.

Gibt den N'ten Punkt in der ersten Linienfolge in der Geometrie zurück. Gibt NULL zurück, wenn die Geometrie keine Linienfolge enthält.

Index ist 1-basiert wie für OGC-Spezifikationen seit Version 0.8.0. Frühere Versionen haben dies stattdessen als 0-basiert implementiert.

Gibt den äußeren Ring der Polygongeometrie zurück. Gibt NULL zurück, wenn die Geometrie kein Polygon ist.

Gibt die Anzahl der inneren Ringe des ersten Polygons in der Geometrie zurück. Gibt NULL zurück, wenn die Geometrie kein Polygon enthält.

Synonym für NumInteriorRings(Geometrie). Die OpenGIS-Spezifikationen sind bezüglich der genauen Funktionsbenennung nicht eindeutig, daher bieten wir beide Schreibweisen an.

Gibt den N'. Innenring der Polygongeometrie zurück. Gibt NULL zurück, wenn die Geometrie kein Polygon ist oder das angegebene N außerhalb des zulässigen Bereichs liegt.

Index ist 1-basiert wie für OGC-Spezifikationen seit Version 0.8.0. Frühere Versionen haben dies stattdessen als 0-basiert implementiert.

Gibt den letzten Punkt der LineString-Geometrie als Punkt zurück.

Gibt den ersten Punkt der LineString-Geometrie als Punkt zurück.

Gibt den Typ der Geometrie als String zurück. Beispiel: 'LINESTRING', 'POLYGON', 'MULTIPOINT' usw.

OGC SPEC s2.1.1.1 - Gibt den Namen des instanziierbaren Untertyps von Geometry zurück, zu dem diese Geometry-Instanz gehört. Der Name des instanziierbaren Untertyps von Geometry wird als String zurückgegeben.

Diese Funktion zeigt auch an, ob die Geometrie gemessen wird, indem sie eine Zeichenfolge der Form 'POINTM' zurückgibt.

Gibt den Typ der Geometrie als String zurück. ZB: 'Linestring', 'Polygon' usw. Diese Funktion unterscheidet sich von GeometryType(geometry) im Fall des zurückgegebenen Strings sowie der Tatsache, dass sie nicht angibt, ob die Geometrie gemessen wird.

Gibt die X-Koordinate des Punkts zurück. Die Eingabe muss ein Punkt sein.

Gibt die Y-Koordinate des Punkts zurück. Die Eingabe muss ein Punkt sein.

Gibt die Z-Koordinate des Punkts zurück oder NULL, wenn nicht verfügbar. Die Eingabe muss ein Punkt sein.

Gibt die M-Koordinate des Punkts zurück oder NULL, wenn nicht verfügbar. Die Eingabe muss ein Punkt sein.

Dies ist (noch) nicht Teil der OGC-Spezifikation, wird aber hier aufgeführt, um die Liste der Punktkoordinatenextraktorfunktionen zu vervollständigen.

Erstellt eine Geometrie aus WKT mit der angegebenen SRID.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Wirft einen Fehler aus, wenn der WKT kein Punkt ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Gibt einen Fehler aus, wenn die WKT keine Linie ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

aus der Konformitätssuite

Gibt einen Fehler aus, wenn die WKT keine Linie ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Gibt einen Fehler aus, wenn das WKT kein Polygon ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

aus der Konformitätssuite

Gibt einen Fehler aus, wenn das WKT kein Polygon ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Gibt einen Fehler aus, wenn der WKT kein MULTIPOINT ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Gibt einen Fehler aus, wenn die WKT kein MULTILINESTRING ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Gibt einen Fehler aus, wenn das WKT kein MULTIPOLYGON ist

Erstellt eine Geometrie aus WKT mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Gibt einen Fehler aus, wenn die WKT keine GEOMETRYCOLLECTION ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.6.2 - Option SRID stammt aus der Konformitätssuite

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein POINT ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein LINESTRING ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein LINESTRING ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein POLYGON ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein POLYGON ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein MULTIPOINT ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein MULTILINESTRING ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB kein MULTIPOLYGON ist

Erstellt eine Geometrie aus WKB mit der angegebenen SRID. Wenn SRID nicht angegeben ist, wird standardmäßig -1 verwendet.

OGC SPEC 3.2.7.2 - Option SRID stammt aus der Konformitätssuite

gibt einen Fehler aus, wenn WKB keine GEOMETRYCOLLECTION ist

Konstruieren Sie ein Polygon mit einer beliebigen Sammlung geschlossener Linienfolgen als MultiLineString-Textdarstellung.

Verfügbarkeit: 1.1.0 - erfordert GEOS >= 2.1.0.

Konstruieren Sie ein MultiPolygon mit einer beliebigen Sammlung geschlossener Linienfolgen als MultiLineString-Textdarstellung.

Verfügbarkeit: 1.1.0 - erfordert GEOS >= 2.1.0.

Löscht eine Tabelle und alle ihre Referenzen in Geometrie_Spalten. Hinweis: verwendet current_schema() bei schemafähigen pgsql-Installationen, wenn kein Schema bereitgestellt wird.

Aktualisieren Sie die SRID aller Features in einer Geometriespalte, indem Sie Abhängigkeiten und Referenzen in "geometry_columns" aktualisieren. Hinweis: verwendet current_schema() bei schemafähigen pgsql-Installationen, wenn kein Schema bereitgestellt wird.

Aktualisieren Sie Statistiken zu räumlichen Tabellen zur Verwendung durch den Abfrageplaner. Außerdem müssen Sie "VACUUM ANALYZE [table_name] [column_name]" ausführen, damit die Statistikerfassung abgeschlossen ist. HINWEIS: Ab PostgreSQL 8.0 wird die Statistikerfassung automatisch ausgeführt, indem "VACUUM ANALYZE" ausgeführt wird.

Gibt die PostGIS-Versionsnummer und die Kompilierzeitoptionen zurück

Vor Version 1.1.0 war dies eine prozedurale Funktion, die möglicherweise ungenaue Informationen zurückgab (bei unvollständigen Datenbank-Upgrades).

Gibt die Versionsnummer der PostGIS-Bibliothek zurück.

Gibt das Erstellungsdatum der PostGIS-Bibliothek zurück.

Gibt das Erstellungsdatum der PostGIS-Skripte zurück.

Gibt die Version der in dieser Datenbank installierten Postgis-Skripte zurück.

Gibt die Versionsnummer des lwpostgis.sql-Skripts zurück, das mit der installierten postgis-Bibliothek veröffentlicht wurde.

Gibt die Versionsnummer der GEOS-Bibliothek oder NULL zurück, wenn die GEOS-Unterstützung nicht aktiviert ist.

Gibt die Versionsnummer der JTS-Bibliothek oder NULL zurück, wenn die JTS-Unterstützung nicht aktiviert ist.

Gibt die Versionsnummer der PROJ4-Bibliothek oder NULL zurück, wenn die PROJ4-Unterstützung nicht aktiviert ist.

Gibt true zurück, wenn die STATS-Nutzung aktiviert wurde, andernfalls false.

Meldet die vollständige Postgis-Version und Build-Konfigurationsinformationen.

Der Operator "&<" gibt true zurück, wenn der Begrenzungsrahmen von A überlappt oder sich links von dem Begrenzungsrahmen von B befindet.

Der Operator "&>" gibt true zurück, wenn der Begrenzungsrahmen von A überlappt oder sich rechts von dem Begrenzungsrahmen von B befindet.

Der Operator "<<" gibt true zurück, wenn der Begrenzungsrahmen von A strikt links von dem Begrenzungsrahmen von B liegt.

Der Operator ">>" gibt true zurück, wenn der Begrenzungsrahmen von A genau rechts von dem Begrenzungsrahmen von B liegt.

Der Operator "&<|" gibt true zurück, wenn der Begrenzungsrahmen von A überlappt oder unter dem Begrenzungsrahmen von B liegt.

Der Operator "|&>" gibt true zurück, wenn der Begrenzungsrahmen von A überlappt oder über dem Begrenzungsrahmen von B liegt.

Der Operator "<<|" gibt true zurück, wenn der Begrenzungsrahmen von A genau unter dem Begrenzungsrahmen von B liegt.

Der "|>>"-Operator gibt true zurück, wenn der Begrenzungsrahmen von A genau über dem Begrenzungsrahmen von B liegt.

="-Operator ist der "gleiche wie"-Operator. Es testet die tatsächliche geometrische Gleichheit zweier Features. Wenn A und B also das gleiche Merkmal sind, gibt der Operator „True“ zurück.

Der Operator &#[email protected]" gibt true zurück, wenn der Begrenzungsrahmen von A vollständig von dem Begrenzungsrahmen von B enthalten ist.

Der Operator " gibt true zurück, wenn der Begrenzungsrahmen von A vollständig den Begrenzungsrahmen von B enthält.

Der Operator "&&"34 ist der Operator "overlaps". Wenn der Begrenzungsrahmen von A den Begrenzungsrahmen von B überlappt, gibt der Operator true zurück.

Gibt den Bereich der Geometrie zurück, wenn es sich um ein Polygon oder Multi-Polygon handelt.

Gibt die zweidimensionale Länge der Geometrie zurück, wenn es sich um eine Linienfolge oder Mehrfachlinienfolge handelt.

Gibt die dreidimensionale Länge der Geometrie zurück, wenn es sich um eine Linienfolge oder Mehrfachlinienfolge handelt.

Berechnet die Länge einer Geometrie auf einem Ellipsoid. Dies ist nützlich, wenn die Koordinaten der Geometrie in Breitengrad/Längengrad angegeben sind und eine Länge ohne Neuprojektion gewünscht wird. Das Ellipsoid ist ein eigener Datenbanktyp und kann wie folgt aufgebaut werden:

Eine Beispielrechnung könnte so aussehen:

Berechnet die Länge einer Geometrie auf einem Ellipsoid unter Berücksichtigung der Höhe. Dies ist genau wie length_spheroid, außer dass vertikale Koordinaten (ausgedrückt in den gleichen Einheiten wie die Sphäroidachsen) verwendet werden, um die zusätzliche vertikale Distanzverschiebung zu berechnen.

Gibt den kleineren Abstand zwischen zwei Geometrien zurück.

Gibt den größten Abstand zwischen zwei Linienfolgen zurück.

Gibt den 2-dimensionalen Umfang der Geometrie zurück, wenn es sich um ein Polygon oder Multi-Polygon handelt.

Gibt den 2-dimensionalen Umfang der Geometrie zurück, wenn es sich um ein Polygon oder Multi-Polygon handelt.

Gibt den dreidimensionalen Umfang der Geometrie zurück, wenn es sich um ein Polygon oder Multipolygon handelt.

Gibt den Azimut des Segments zurück, das durch die angegebenen Punktgeometrien definiert ist, oder NULL, wenn die beiden Punkte zusammenfallen. Der Rückgabewert wird im Bogenmaß angegeben.

Gibt die Geometrie im OGC-Format "well-known-binary" als Byte zurück, wobei die Kodierung Little-Endian (NDR) oder Big-Endian (XDR) verwendet wird. Dies ist in binären Cursorn nützlich, um Daten aus der Datenbank zu ziehen, ohne sie in eine Zeichenfolgendarstellung zu konvertieren.

Gibt eine Geometrie im EWKT-Format (als Text) zurück.

Gibt eine Geometrie im EWKB-Format (als Bytea) zurück, die entweder Little-Endian- (NDR) oder Big-Endian-Codierung (XDR) verwendet.

Gibt eine Geometrie im HEXEWKB-Format (als Text) mit der Kodierung Little-Endian (NDR) oder Big-Endian (XDR) zurück.

Gibt die Geometrie als SVG-Pfaddaten zurück. Verwenden Sie 1 als zweites Argument, um die Pfaddaten in Bezug auf relative Bewegungen zu implementieren, der Standard (oder 0) verwendet absolute Bewegungen. Das dritte Argument kann verwendet werden, um die maximale Anzahl von Dezimalstellen in der Ausgabe zu reduzieren (Standardeinstellung auf 15). Punktgeometrien werden als cx/cy gerendert, wenn 'rel' arg 0 ist, x/y, wenn 'rel' 1 ist.

Gibt die Geometrie als GML-Element zurück. Das zweite Argument kann verwendet werden, um die maximale Anzahl signifikanter Stellen in der Ausgabe zu reduzieren (Standardeinstellung auf 15).

Gibt die Geometrie als KML-Element zurück. Das zweite Argument kann verwendet werden, um die maximale Anzahl signifikanter Stellen in der Ausgabe zu reduzieren (Standardeinstellung auf 15).

Erstellt eine Geometrie von EWKT.

Erstellt eine Geometrie von EWKB.

Erstellt eine 2d-, 3dz- oder 4d-Punktgeometrie.

Erstellt eine 3dm-Punktgeometrie.

Erstellt ein BOX2D, das durch die gegebenen Punktgeometrien definiert ist.

Erstellt eine BOX3D, die durch die gegebenen Punktgeometrien definiert ist.

Erstellt eine Linienfolge aus einem Satz von Punktgeometrien. Möglicherweise möchten Sie eine Unterauswahl verwenden, um Punkte zu ordnen, bevor Sie sie diesem Aggregat zuführen.

Erstellt eine Linienfolge aus den beiden angegebenen Punktgeometrien.

Erstellt einen LineString aus einer MultiPoint-Geometrie.

Erstellt eine Flächengeometrie, die durch die konstituierenden Linien der gegebenen Geometrie gebildet wird. Der Rückgabetyp kann je nach Eingabe ein Polygon oder MultiPolygon sein. Wenn die Eingabelinien keine Polygone bilden, wird NULL zurückgegeben.

Verfügbarkeit: 1.1.0 - erfordert GEOS >= 2.1.0.

Aggregat. Erstellt eine GeometryCollection, die mögliche Polygone enthält, die aus den konstituierenden Liniengrafiken eines Satzes von Geometrien gebildet werden.

Verfügbarkeit: 1.0.0RC1 - erfordert GEOS >= 2.1.0.

Diese Funktion gibt ein GEOMETRYCOLLECTION- oder ein MULTI-Objekt aus einem Satz von Geometrien zurück. Die Funktion collect() ist eine "aggregate"-Funktion in der Terminologie von PostgreSQL. Das bedeutet, dass es auf Datenlisten genauso operiert, wie es die Funktionen sum() und mean() tun. Beispielsweise gibt "SELECT COLLECT(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN" für jeden eindeutigen Wert von ATTRCOLUMN eine separate GEOMETRYCOLLECTION zurück.

Diese Funktion gibt eine Geometrie zurück, die eine Sammlung von zwei Eingabegeometrien ist. Der Ausgabetyp kann ein MULTI* oder eine GEOMETRYCOLLECTION sein.

Dies ist eine Set-Returning-Funktion (SRF). Es gibt einen Satz von Geometrie_Dump-Zeilen zurück, die aus einer Geometrie (geom) und einem Array von ganzen Zahlen (Pfad) bestehen. Wenn die Eingabegeometrie ein einfacher Typ ist (POINT,LINESTRING,POLYGON), wird ein einzelner Datensatz mit einem leeren Pfadarray und der Eingabegeometrie als Geom zurückgegeben. Wenn die Eingabegeometrie eine Sammlung oder ein Multi ist, wird ein Datensatz für jede der Sammlungskomponenten zurückgegeben, und der Pfad drückt die Position der Komponente innerhalb der Sammlung aus.

Verfügbarkeit: PostGIS 1.0.0RC1. Erfordert PostgreSQL 7.3 oder höher.

Dies ist eine Set-Returning-Funktion (SRF). Es gibt einen Satz von Geometrie_Dump-Zeilen zurück, die aus einer Geometrie (geom) und einem Array von ganzen Zahlen (Pfad) bestehen. Das Feld 'path' enthält den Polygonringindex, enthält ein einzelnes Element: 0 für die Schale, Lochnummer für Löcher. Das Feld 'geom' enthält den entsprechenden Ring als Polygon.

Verfügbarkeit: PostGIS 1.1.3. Erfordert PostgreSQL 7.3 oder höher.

Fügen Sie der Geometrie einen Begrenzungsrahmen hinzu. Dies würde Bounding-Box-basierte Abfragen beschleunigen, aber die Größe der Geometrie erhöhen.

Löschen Sie den Bounding-Box-Cache aus der Geometrie. Dadurch wird die Geometriegröße verringert, jedoch werden Bounding-Box-basierte Abfragen langsamer.

Fügt einem LineString vor dem Punkt <pos> (0-basierter Index) einen Punkt hinzu. Der dritte Parameter kann weggelassen oder zum Anhängen auf -1 gesetzt werden.

Entfernt einen Punkt aus einer Linienfolge. Offset ist 0-basiert.

Ersetze Punkt N der Linienfolge durch den gegebenen Punkt. Index ist 0-basiert.

Wandelt die Geometrie in eine GEOMETRYCOLLECTION um. Dies ist nützlich, um die WKB-Darstellung zu vereinfachen.

Erzwingt die Geometrien in einen Ŗ-dimensionalen Modus", sodass alle Ausgabedarstellungen nur die X- und Y-Koordinaten aufweisen. Dies ist nützlich, um eine OGC-konforme Ausgabe zu erzwingen (da OGC nur 2D-Geometrien spezifiziert).

Erzwingt die Geometrien in den XYZ-Modus.

Erzwingt die Geometrien in den XYM-Modus.

Erzwingt die Geometrien in den XYZM-Modus.

Gibt die Geometrie als MULTI*-Geometrie zurück. Wenn die Geometrie bereits ein MULTI* ist, wird sie unverändert zurückgegeben.

Gibt eine neue Geometrie zurück, deren Koordinaten in die SRID transformiert wurden, auf die der Integer-Parameter verweist. Die Ziel-SRID muss in der Tabelle SPATIAL_REF_SYS vorhanden sein.

Wendet eine affine 3D-Transformation auf die Geometrie an. Der Anruf

Affin(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)

repräsentiert die Transformationsmatrix

/ a b c xoff | d e f yoff | | g h ich zoff | 0 0 0 1 /

und die Eckpunkte werden wie folgt transformiert:

x' = a*x + b*y + c*z + xoff y' = d*x + e*y + f*z + yoff z' = g*x + h*y + i*z + zoff

Alle der folgenden Übersetzungs-/Skalierungsfunktionen werden über eine solche affine Transformation ausgedrückt.

Wendet eine 2D-affine Transformation auf die Geometrie an. Der Anruf

Affin(geom, a, b, d, e, xoff, yoff)

repräsentiert die Transformationsmatrix

/ a b 0 xoff / a b xoff | d e 0 yoff | bzw. | d e yoff | | 0 0 1 0 | 0 0 1 / 0 0 0 1 /

und die Eckpunkte werden wie folgt transformiert:

x' = a*x + b*y + xoff y' = d*x + e*y + yoff z' = z

Diese Methode ist ein Unterfall der obigen 3D-Methode.

Verschiebt die Geometrie unter Verwendung der numerischen Parameter als Versätze an eine neue Position. Dh: translate(geom, X, Y, Z).

skaliert die Geometrie auf eine neue Größe, indem die Ordinaten mit den Parametern multipliziert werden. Dh: scale(geom, Xfactor, Yfactor, Zfactor).

Drehen Sie die Geometrie um die Z-, X- oder Y-Achse um den angegebenen Winkel im Bogenmaß. Folgt der Rechte-Hand-Regel.

Übersetzt zuerst die Geometrie mit den ersten beiden Gleitkommazahlen und skaliert sie dann mit den zweiten beiden Gleitkommazahlen, wobei nur in 2D gearbeitet wird. Die Verwendung von transscale(geom, X, Y, XFactor, YFactor) ruft intern affine(geom, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, X*XFactor, Y*YFactor, 0) auf.

Gibt die Geometrie mit umgekehrter Scheitelpunktreihenfolge zurück.

Erzwingt Polygone der Sammlung, der Right-Hand-Rule zu gehorchen.

Fangen Sie alle Punkte der Eingabegeometrie am Raster, das durch seinen Ursprung und die Zellengröße definiert ist. Entfernen Sie aufeinanderfolgende Punkte, die auf dieselbe Zelle fallen, und geben Sie schließlich NULL zurück, wenn die Ausgabepunkte nicht ausreichen, um eine Geometrie des angegebenen Typs zu definieren. Eingeklappte Geometrien in einer Sammlung werden daraus entfernt.

Vor Release 1.1.0 hat diese Funktion immer eine 2D-Geometrie zurückgegeben. Ab 1.1.0 hat die zurückgegebene Geometrie dieselbe Dimensionalität wie die Eingabe, wobei höhere Dimensionswerte unverändert bleiben. Verwenden Sie die Version, die ein zweites Geometrieargument verwendet, um alle Rastermaße zu definieren.

Alle Punkte der Eingabegeometrie am Raster ausrichten, das durch seinen Ursprung (das zweite Argument, muss ein Punkt sein) und die Zellengröße definiert ist. Geben Sie 0 als Größe für jede Bemaßung an, die Sie nicht an einem Raster ausrichten möchten.

Gibt eine geänderte Geometrie zurück, bei der kein Segment länger als die angegebene Distanz ist. Bei interpolierten Punkten werden die Z- und M-Werte (falls erforderlich) auf 0 gesetzt. Die Entfernungsberechnung wird nur in 2d durchgeführt.

Gibt einen (Satz von) LineString(s) zurück, der durch Zusammennähen von konstituierenden Linien der Eingabe gebildet wird.

Verfügbarkeit: 1.1.0 - erfordert GEOS >= 2.1.0

Seit Version 1.1.1 interpoliert diese Funktion auch M- und Z-Werte (sofern vorhanden), während frühere Versionen sie auf 0.0 gesetzt haben.

Gibt eine Linienfolge zurück, die eine Teilfolge der Eingabe ist, die bei den angegebenen Bruchteilen der gesamten 2d-Länge beginnt und endet. Zweites und drittes Argument sind float8-Werte zwischen 0 und 1.

Seit Release 1.1.1 interpoliert diese Funktion auch M- und Z-Werte (sofern vorhanden), während frühere Releases sie auf nicht spezifizierte Werte setzen.

Gibt einen abgeleiteten Geometriesammlungswert mit Elementen zurück, die der angegebenen Kennzahl entsprechen. Polygonale Elemente werden nicht unterstützt.

Semantik wird spezifiziert durch: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting

Gibt einen abgeleiteten Geometriesammlungswert mit Elementen zurück, die dem angegebenen Maßbereich einschließlich entsprechen. Polygonale Elemente werden nicht unterstützt.

Semantik wird spezifiziert durch: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting

Gibt eine Textzusammenfassung des Inhalts der Geometrie zurück.

Gibt ein BOX2D zurück, das die maximalen Ausdehnungen der Geometrie darstellt.

Gibt ein BOX3D zurück, das die maximalen Ausdehnungen der Geometrie darstellt.

Die Extent()-Funktion ist eine "Aggregate"-Funktion in der Terminologie von PostgreSQL. Das bedeutet, dass es auf Datenlisten genauso operiert, wie es die Funktionen sum() und mean() tun. Beispielsweise gibt "SELECT EXTENT(GEOM) FROM GEOMTABLE" eine BOX3D zurück, die die maximale Ausdehnung aller Features in der Tabelle angibt. Ebenso gibt "SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORY" ein Ausdehnungsergebnis für jede Kategorie zurück.

Gibt das ZM-Flag (Dimensionssemantik) der Geometrien als kleines Int zurück. Werte sind: 0=2d, 1=3dm, 2=3dz, 3=4d.

Gibt die Anzahl der Dimensionen der Geometrie als kleines Int zurück. Werte sind: 2,3 oder 4.

Wenn die Geometrie ein Polygon oder Multipolygon ist, wird die Anzahl der Ringe zurückgegeben.

Gibt die Anzahl der Punkte in der Geometrie zurück.

gibt true zurück, wenn diese Geometrie gültig ist.

Diese Funktion gibt einen in alle Richtungen erweiterten Begrenzungsrahmen aus dem Begrenzungsrahmen der Eingabegeometrie um einen im zweiten Argument angegebenen Betrag zurück. Sehr nützlich für Distance()-Abfragen, um der Abfrage einen Indexfilter hinzuzufügen.

Gibt die "geschätzte" Ausdehnung der angegebenen räumlichen Tabelle zurück. Die Schätzung stammt aus den Statistiken der Geometriespalte. Wenn nicht angegeben, wird das aktuelle Schema verwendet.

Für PostgreSQL>=8.0.0 werden Statistiken von VACUUM ANALYZE gesammelt und der resultierende Umfang beträgt etwa 95 % des tatsächlichen.

Für PostgreSQLɠ.0.0 werden Statistiken von update_geometry_stats() gesammelt und der resultierende Umfang ist genau.

Die Syntax lautet find_srid(<db/schema>, <table>, <column>) und die Funktion gibt die ganzzahlige SRID der angegebenen Spalte zurück, indem sie die Tabelle GEOMETRY_COLUMNS durchsucht. Wenn die Geometriespalte mit der Funktion AddGeometryColumns() nicht richtig hinzugefügt wurde, funktioniert auch diese Funktion nicht.

Gibt den Speicherplatz (in Bytes) zurück, den die Geometrie benötigt.

Die Syntax für diese Funktion ist point_inside_circle(<geometry>,<circle_center_x>,<circle_center_y>,<radius>). Gibt true zurück, wenn die Geometrie ein Punkt ist und sich innerhalb des Kreises befindet. Gibt andernfalls false zurück.

Gibt die angeforderten Minima eines Begrenzungsrahmens zurück.

Gibt die angeforderten Maxima eines Begrenzungsrahmens zurück.

Aggregat. Konstruiert ein Array von Geometrien.

Dies ist eine Auflistung der SQL-MM-definierten Funktionen, die PostGIS derzeit unterstützt. Die Implementierungen dieser Funktionen folgen der ArcSDE-Implementierung und weichen daher etwas von der Spezifikation ab. Diese Abweichungen werden vermerkt.

Ab Version 1.2.0 wurden diese Funktionen durch Umschließen bestehender PostGIS-Funktionen implementiert. Infolgedessen ist für viele Funktionen möglicherweise keine vollständige Unterstützung für gekrümmte Geometrien vorhanden.

SQL-MM definiert die Standard-SRID aller Geometriekonstruktoren als 0. PostGIS verwendet eine Standard-SRID von -1.

Gibt die Flächenmessung eines ST_Surface- oder ST_MultiSurface-Werts zurück.

Gibt die bekannte binäre Darstellung eines ST_Geometry-Werts zurück.

Gibt die bekannte Textdarstellung eines ST_Geometry-Werts zurück.

Gibt die Grenze des ST_Geometry-Werts zurück.

Gibt einen Puffer um den ST_Geometry-Wert zurück.

Gibt den mathematischen Schwerpunkt des ST_Surface- oder ST_MultiSurface-Werts zurück.

Testen Sie, ob ein ST_Geometry-Wert räumlich einen anderen ST_Geometry-Wert enthält.

Gibt die konvexe Hülle des ST_Geometry-Werts zurück.

Gibt die Koordinatendimension des ST_Geometry-Werts zurück.

Testen Sie, ob ein ST_Geometry-Wert einen anderen ST_Geometry-Wert räumlich schneidet.

Gibt einen ST_Geometry-Wert zurück, der die Punktmengendifferenz zweier ST_Geometry-Werte darstellt.

Gibt die Dimension des ST_Geometry-Werts zurück.

Testen Sie, ob ein ST_Geometry-Wert räumlich von einem anderen ST_Geometry-Wert getrennt ist.

Gibt den Abstand zwischen zwei Geometrien zurück.

Gibt einen ST_Point-Wert zurück, der der Endpunkt eines ST_Curve-Werts ist.

Gibt das umschließende Rechteck für den ST_Geometry-Wert zurück.

Testen Sie, ob ein ST_Geometry-Wert räumlich gleich einem anderen ST_Geometry-Wert ist.

Gibt den äußeren Ring einer ST_Surface zurück

Gibt den angegebenen ST_Geometry-Wert aus einer ST_GeomCollection zurück.

Gibt den Geometrietyp des ST_Geometry-Werts zurück.

Gibt einen angegebenen ST_Geometry-Wert zurück.

Gibt einen angegebenen ST_Geometry-Wert zurück.

Gibt den angegebenen inneren Ring eines ST_Surface-Werts zurück.

Gibt einen ST_Geometry-Wert zurück, der den Punktsatz-Schnittpunkt zweier ST_Geometry-Werte darstellt.

Testen Sie, ob ein ST_Geometry-Wert einen anderen ST_Geometry-Wert räumlich schneidet.

Testen Sie, ob ein ST_Curve- oder ST_MultiCurve-Wert geschlossen ist.

SQL-MM definiert das Ergebnis von ST_IsClosed(NULL) als 0, während PostGIS NULL zurückgibt.

Testen Sie, ob ein ST_Geometry-Wert dem leeren Satz entspricht.

SQL-MM definiert das Ergebnis von ST_IsEmpty(NULL) als 0, während PostGIS NULL zurückgibt.

Testen Sie, ob ein ST_Curve-Wert ein Ring ist.

SQL-MM definiert das Ergebnis von ST_IsRing(NULL) als 0, während PostGIS NULL zurückgibt.

Testen Sie, ob ein ST_Geometry-Wert keine anomalen geometrischen Punkte hat, wie z. B. Selbstschnittpunkt oder Selbsttangential.

SQL-MM definiert das Ergebnis von ST_IsSimple(NULL) als 0, während PostGIS NULL zurückgibt.

Testen Sie, ob ein ST_Geometry-Wert wohlgeformt ist.

SQL-MM definiert das Ergebnis von ST_IsValid(NULL) als 0, während PostGIS NULL zurückgibt.

SQL-MM definiert das Ergebnis von ST_IsValid(NULL) als 1

Gibt die Längenmessung eines ST_Curve- oder ST_MultiCurve-Werts zurück.

Gibt einen angegebenen ST_LineString-Wert zurück.

Gibt einen angegebenen ST_LineString-Wert zurück.

Gibt einen angegebenen ST_MultiLineString-Wert zurück.

Gibt einen angegebenen ST_MultiLineString-Wert zurück.

Gibt einen angegebenen ST_MultiPoint-Wert zurück.

Gibt einen angegebenen ST_MultiPoint-Wert zurück.

Gibt einen angegebenen ST_MultiPolygon-Wert zurück.

Gibt einen angegebenen ST_MultiPolygon-Wert zurück.

Gibt die Anzahl der Geometrien in einer ST_GeomCollection zurück.

Gibt die Anzahl der inneren Ringe in einer ST_Surface zurück.

Gibt die Anzahl der Punkte in einem ST_LineString- oder ST_CircularString-Wert zurück.

ST_OrderingEquals vergleicht zwei Geometrien und t (TRUE), wenn die Geometrien gleich sind und die Koordinaten in der gleichen Reihenfolge liegen, andernfalls gibt es f (FALSE) zurück.

Diese Funktion wird gemäß der ArcSDE-SQL-Spezifikation und nicht gemäß SQL-MM implementiert. http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals

Testen Sie, ob ein ST_Geometry-Wert einen anderen ST_Geometry-Wert räumlich überlagert.

Gibt die Längenmessung der Grenze eines ST_Surface- oder ST_MultiRSurface-Werts zurück.

Gibt einen ST_Point mit den angegebenen Koordinatenwerten zurück.

Gibt einen angegebenen ST_Point-Wert zurück.

Gibt einen angegebenen ST_Point-Wert zurück.

Gibt den angegebenen ST_Point-Wert in einem ST_LineString oder ST_CircularString zurück

Gibt einen ST_Point-Wert zurück, der garantiert den ST_Surface- oder ST_MultiSurface-Wert räumlich schneidet.

Gibt einen angegebenen ST_Polygon-Wert zurück.

Gibt einen angegebenen ST_Polygon-Wert zurück.

Gibt einen Polygon-Build aus der angegebenen Linienfolge und SRID zurück.

Testen Sie, ob ein ST_Geometry-Wert einen räumlichen Bezug zu einem anderen ST_Geometry-Wert hat.

Gibt die Kennung des räumlichen Bezugssystems des ST_Geometry-Werts zurück.

Gibt einen ST_Point-Wert zurück, der der Startpunkt eines ST_Curve-Werts ist.

Gibt einen ST_Geometry-Wert zurück, der die symmetrische Punktsatzdifferenz von zwei ST_Geometry-Werten darstellt.

Testen Sie, ob ein ST_Geometry-Wert einen anderen ST_Geometry-Wert räumlich berührt.

Gibt einen ST_Geometry-Wert zurück, der in das angegebene räumliche Bezugssystem umgewandelt wurde.

Gibt einen ST_Geometry-Wert zurück, der die Punktmengenvereinigung zweier ST_Geometry-Werte darstellt.

Testen Sie, ob ein ST_Geometry-Wert räumlich innerhalb eines anderen ST_Geometry-Werts liegt.

Gibt einen ST_Geometry-Wert für eine bestimmte bekannte Binärdarstellung zurück.

Gibt einen ST_Geometry-Wert für eine bestimmte bekannte Textdarstellung zurück.

Gibt den x-Koordinatenwert eines ST_Point-Werts zurück.

Gibt den y-Koordinatenwert eines ST_Point-Werts zurück.

Es wurden zusätzliche Funktionen hinzugefügt, um die Unterstützung für eine Benutzeroberfläche im ArcSDE-Stil zu verbessern.

Gibt t (TRUE) zurück, wenn sich die Hüllkurven zweier Geometrien andernfalls schneiden, wird f (FALSE) zurückgegeben.

Testen Sie, ob ein Geometriewert Z-Koordinatenwerte hat.

Testen Sie, ob ein Geometriewert m Koordinatenwerte hat.

Gibt einen abgeleiteten Geometriesammlungswert mit Elementen zurück, die dem angegebenen Messwert entsprechen.

Gibt einen abgeleiteten Geometriesammlungswert mit Elementen zurück, die dem angegebenen Maßbereich einschließlich entsprechen.

Gibt den m-Koordinatenwert eines ST_Point-Werts zurück.

Gibt den Z-Koordinatenwert eines ST_Point-Werts zurück

Das effektive Melden von Fehlern ist eine grundlegende Möglichkeit, die PostGIS-Entwicklung zu unterstützen. Der effektivste Fehlerbericht besteht darin, dass er PostGIS-Entwicklern ermöglicht, ihn zu reproduzieren, sodass er idealerweise ein Skript enthält, das ihn auslöst, und alle Informationen über die Umgebung, in der es erkannt wurde. Ausreichende Informationen können mit SELECT postgis_full_version() [für postgis] und SELECT version() [für postgresql] extrahiert werden.

Diese Version behebt einige Versäumnisse in der vorherigen Version in Bezug auf Versionsnummerierung, Dokumentation und Tagging.

Diese Version bietet Leistungsverbesserungen für die relationalen Funktionen, fügt neue relationale Funktionen hinzu und beginnt mit der Migration unserer Funktionsnamen zur SQL-MM-Konvention unter Verwendung des Spatial Type (SP)-Präfixes.

JDBC: Hibernate-Dialekt hinzugefügt (Dank an Norman Barker)

Die relationalen Funktionen ST_Covers und ST_CoveredBy wurden hinzugefügt. Beschreibung und Begründung dieser Funktionen finden Sie unter http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html

Die relationale Funktion ST_DWithin wurde hinzugefügt.

Zwischengespeicherte und indizierte Point-in-Polygon-Kurzschlüsse für die Funktionen ST_Contains, ST_Intersects, ST_Within und ST_Disjoint hinzugefügt

Inline-Indexunterstützung für relationale Funktionen hinzugefügt (außer ST_Disjoint)

Erweiterte Unterstützung für gekrümmte Geometrie im Geometrie-Accessor und einige Verarbeitungsfunktionen

Beginn der Migration von Funktionen zur SQL-MM-Namenskonvention unter Verwendung eines räumlichen Typpräfixes (ST).

Erste Unterstützung für PostgreSQL 8.3 hinzugefügt

Diese Version bietet Fehlerbehebungen bei der Unterstützung von PostgreSQL 8.2 und einige kleine Leistungsverbesserungen.

Fehler bei der Point-in-Polygon-Verknüpfung in Within() behoben.

PostgreSQL 8.2 NULL-Behandlung für Indizes behoben.

Kurzschluss für Transform() im No-Op-Fall hinzugefügt.

JDBC: JTS-Handling für mehrdimensionale Geometrien korrigiert (Danke an Thomas Marti für Hinweis und Teilpatch). Außerdem wird JavaDoc jetzt kompiliert und gepackt. Klassenpfadprobleme mit GCJ behoben. Kompatibilität mit pgjdbc 8.2 behoben, Unterstützung für jdk 1.3 und älter verloren.

Diese Version bietet Typdefinitionen zusammen mit Serialisierungs-/Deserialisierungsfunktionen für SQL-MM-definierte gekrümmte Geometrien sowie Leistungsverbesserungen.

Unterstützung für gekrümmte Geometrietypen für Serialisierung/Deserialisierung hinzugefügt

Punkt-in-Polygon-Kurzschluss zu den Funktionen Enthält und Innerhalb hinzugefügt, um die Leistung für diese Fälle zu verbessern.

Dies ist eine Bugfix-Version, die insbesondere einen kritischen Fehler mit der GEOS-Schnittstelle in 64-Bit-Systemen behebt. Beinhaltet eine Aktualisierung der SRS-Parameter und eine Verbesserung der Reprojektionen (berücksichtigen Sie Z). Upgrade wird empfohlen.

CAPI-Änderung behoben, die 64-Bit-Plattformen zerstörte

Loader/Dumper: Regressionstests und Nutzungsausgabe korrigiert

SetSRID()-Bug in JDBC behoben, dank Thomas Marti

Z-Ordinate in Reprojektionen verwenden

Spatial_ref_sys.sql aktualisiert auf EPSG 6.11.1

Vereinfachte Version.config-Infrastruktur, um für alles ein einziges Paket von Versionsvariablen zu verwenden.

Integrieren Sie die Version.config in Loader/Dumper USAGE-Nachrichten

Ersetzen Sie den handgefertigten, fragilen Parser der JDBC-Version durch Eigenschaften

Dies ist ein Bugfix-Release, einschließlich eines kritischen Segfault auf win32. Upgrade wird empfohlen.

MingW-Link-Fehler behoben, der dazu führte, dass pgsql2shp unter Win32 einen Segfault hatte, wenn es für PostgreSQL 8.2 kompiliert wurde

Nullpointer-Ausnahme in der Methode Geometry.equals() in Java behoben

EJB3Spatial.odt hinzugefügt, um die GPL-Anforderung zur Verteilung der "bevorzugten Form der Änderung" zu erfüllen

Veraltete Synchronisation aus JDBC Jts-Code entfernt.

Stark veraltete README-Dateien für shp2pgsql/pgsql2shp aktualisiert, indem sie mit den Manpages zusammengeführt wurden.

Versions-Tag im jdbc-Code behoben, der in der Version ŕ.1.4" noch ŕ.1.3" sagte.

Option -S für Nicht-Multi-Geometrien zu shp2pgsql . hinzugefügt

Dies ist ein Bugfix-Release mit einigen Verbesserungen in der Java-Schnittstelle. Upgrade wird empfohlen.

Unterstützung für PostgreSQL 8.2 behoben

Fehler in der Funktion collect() behoben, die die SRID der Eingabe verwerfen

SRID-Übereinstimmungsprüfung in MakeBox2d und MakeBox3d hinzugefügt

Regress-Tests behoben, die mit GEOS-3.0.0 . bestanden werden müssen

Verbesserte gleichzeitige Ausführung von pgsql2shp.

JTS-Unterstützung überarbeitet, um die neue Einstellung der Upstream-JTS-Entwickler zur SRID-Handhabung widerzuspiegeln. Vereinfacht den Code und lässt den Build abhängig von GNU trove fallen.

EJB2-Unterstützung hinzugefügt, großzügig gespendet von der "Geodetix s.r.l. Unternehmen" http://www.geodetix.it/

EJB3-Tutorial / Beispiele hinzugefügt von Norman Barker &#[email protected]>

Java-Verzeichnis-Layout etwas umorganisiert.

Dies ist eine Bugfix-Version, die auch einige neue Funktionalitäten (vor allem lange Transaktionsunterstützung) und Portabilitätsverbesserungen enthält. Upgrade wird empfohlen.

BUGFIX in distance(poly,poly) führt zu falschen Ergebnissen.

BUGFIX in pgsql2shp erfolgreicher Rückkehrcode.

BUGFIX im shp2pgsql-Handling von MultiLine WKT.

BUGFIX in affine() konnte den Begrenzungsrahmen nicht aktualisieren.

WKT-Parser: Verbotene Konstruktion von Multigeometrien mit EMPTY-Elementen (wird weiterhin für GEOMETRYCOLLECTION unterstützt).

NEU Unterstützung für lange Transaktionen.

NEU AsHEXEWKB(geom, XDR|NDR) Funktion.

Verbesserte Regressionstests: MultiPoint und wissenschaftliche Ordinaten

Einige kleinere Fehler im jdbc-Code behoben

Passende Accessor-Funktionen für alle Felder hinzugefügt, um diese Felder später privat zu machen

NEU Regress-Test-Unterstützung für Lader/Dumper.

--with-proj-libdir und --with-geos-libdir Konfigurationsschalter hinzugefügt.

Unterstützung für Build Tru64-Build.

Verwenden Sie Jade zum Erstellen von Dokumentationen.

Verknüpfen Sie pgsql2shp nicht mit mehr Bibliotheken als erforderlich.

Erste Unterstützung für PostgreSQL 8.2.

Dies ist ein Bugfix-Release mit einigen neuen Funktionen und Portabilitätsverbesserungen. Upgrade wird empfohlen.

BUGFIX in SnapToGrid() Berechnung des Ausgabebegrenzungsrahmens

jdbc2 SRID-Handhabungskorrekturen im JTS-Code

Behobene Unterstützung für 64-Bit-Bögen

Regress-Tests können jetzt *vor* der Postgis-Installation ausgeführt werden

Neue affine() Matrixtransformationsfunktionen

Alte Übersetzungs- und Skalierungsfunktionen verwenden jetzt intern affine()

Eingebettete Zugriffskontrolle in geschätzt_extent() für Builds gegen pgsql >= 8.0.0

Portableres ./configure-Skript

./run_test-Skript geändert, um ein vernünftigeres Standardverhalten zu haben

Ein vorzeitiges Beenden in postgis_restore.pl . behoben

BUGFIX im Umgang mit Geometriesammlungen des GEOS-CAPI-Konnektors

Solaris 2.7 und MingW unterstützen Verbesserungen

BUGFIX in line_locate_point()

Behobene Behandlung von Postgresql-Pfade

Unterstützung für lokalisierte Cluster im Regresstester hinzugefügt

Neue Z- und M-Interpolation in line_substring()

Neue Z- und M-Interpolation in line_interpolate_point()

Alias ​​NumInteriorRing() aufgrund von OpenGIS-Mehrdeutigkeiten hinzugefügt

Dies ist ein Minor-Release, das viele Verbesserungen und neue Dinge enthält. Vor allem: Build-Verfahren stark vereinfacht transform()-Performance drastisch verbesserte stabilere GEOS-Konnektivität (CAPI-Unterstützung) viele neue Funktionen Unterstützung für Entwurfstopologie.

Es wird dringend empfohlen, vor der Installation von PostGIS auf GEOS-2.2.x zu aktualisieren, um sicherzustellen, dass zukünftige GEOS-Upgrades keinen Neuaufbau der PostGIS-Bibliothek erfordern.

scale() und transscale() Companion-Methoden für translate()

Locate_between_measures(Geometrie, float8, float8)

SnapToGrid nach Punktversatz (bis zu 4D-Unterstützung)

OGC BdPolyFromText(linestring_wkt, srid)

OGC BdMPolyFromText(linestring_wkt, srid)

ReplacePoint(Linienfolge, Offset, Punkt)

Speicherleck in polygonize() behoben

Fehler in den Cast-Funktionen von lwgeom_as_anytype behoben

Die Elemente USE_GEOS, USE_PROJ und USE_STATS der Ausgabe von postgis_version() wurden korrigiert, um immer den Bibliotheksstatus widerzuspiegeln.

Semantische Änderungen der Funktion

SnapToGrid verwirft keine höheren Dimensionen

Die Funktion Z() wurde so geändert, dass sie NULL zurückgibt, wenn die angeforderte Dimension nicht verfügbar ist

Viel schnellere transform()-Funktion, die proj4-Objekte zwischenspeichert

Automatischer Aufruf von fix_geometry_columns() in AddGeometryColumns() und update_geometry_stats() entfernt

Verbessertes Regressionstestsystem

Grundlegende Konsistenzprüfungsmethode für Geometriesammlungen

Autoprobing DriverWrapper für HexWKB / EWKT-Umschaltung

Behebung von Kompilierungsproblemen in ValueSetter für alte jdk-Versionen.

EWKT-Konstruktoren so korrigiert, dass sie die SRID=4711-Darstellung akzeptieren

Vorläufige schreibgeschützte Unterstützung für Java2D-Geometrien hinzugefügt

Vollständig auf Autoconf basierende Konfiguration mit Entlastung der PostgreSQL-Quellenabhängigkeit

GEOS C-API-Unterstützung (2.2.0 und höher)

Erste Unterstützung für die Topologiemodellierung

Neues lwpostgis_upgrade.sql-Skript

Strengere Zuordnung zwischen DBF- und SQL-Integer- und String-Attributen

Breitere und sauberere Regressionstestsuite

alter jdbc-Code aus Release entfernt

veraltete direkte Verwendung von postgis_proc_upgrade.pl

Skriptversion mit Release-Version vereinheitlicht

Enthält einige Fehlerbehebungen und Verbesserungen.

Wenn Sie ein Upgrade von Version 1.0.3 oder höher durchführen, benötigen Sie KEIN Dump/Reload.

palloc(0)-Aufruf im Sammlungs-Deserializer behoben (gibt nur Probleme mit --enable-cassert)

Fehler bei der Handhabung des Bbox-Cache behoben

geom_accum(NULL, NULL) Segfault behoben

Segfault in addPoint() behoben

Kurze Zuweisung in lwcollection_clone() behoben

Bbox-Berechnung der SnapToGrid-Ausgabe behoben

Erste Unterstützung für postgresql 8.2

Fehlende SRID-Nichtübereinstimmungsprüfungen in GEOS-Operationen hinzugefügt

Enthält Korrekturen bei der Speicherausrichtung in der Bibliothek, einen Segfault-Fix bei der Handhabung von UTF8-Attributen durch den Loader und einige Verbesserungen und Bereinigungen.

Der Rückgabecode von shp2pgsql wurde gegenüber früheren Versionen geändert, um den Unix-Standards zu entsprechen (bei Erfolg 0 zurückgeben).

Wenn Sie ein Upgrade von Version 1.0.3 oder höher durchführen, benötigen Sie KEIN Dump/Reload.

Probleme mit der Speicherausrichtung behoben

Behobene Berechnung des Nullwertanteils im Analysator

Ein kleiner Fehler in der Low-Level-Funktion getPoint4d_p() behoben

Beschleunigung der Serializer-Funktionen

Fehler in force_3dm(), force_3dz() und force_4d() behoben

Behobener Rückgabecode von shp2pgsql

Problem mit der Rückkompatibilität im Loader behoben (Laden von Null-Shapefiles)

Behandlung von nachgestellten Punkten in numerischen dbf-Attributen behoben

Segfault-Fix in shp2pgsql (utf8-Kodierung)

Schema-bewusst postgis_proc_upgrade.pl, Unterstützung für pgsql 7.2+

Neues Kapitel "Bugs melden" im Handbuch

Enthält wichtige Fehlerbehebungen und einige Verbesserungen. Insbesondere behebt es ein Speicherleck, das den erfolgreichen Aufbau von GiST-Indizes für große räumliche Tabellen verhindert.

Wenn Sie ein Upgrade von Version 1.0.3 durchführen, benötigen Sie KEIN Dump/Reload.

Speicherleck bei GiST-Indizierung stecken

Segfault Fix in transform() Behandlung von proj4-Fehlern

Einige proj4-Texte in Spatial_ref_sys behoben (fehlendes +proj)

Loader: Verwendung von String-Funktionen korrigiert, Überprüfung von NULL-Objekten überarbeitet, Segfault bei MULTILINESTRING-Eingabe behoben.

Fehler bei der Handhabung von MakeLine-Bemaßungen behoben

Fehler in translate() behoben, der die Begrenzungsbox der Ausgabe beschädigte

Robusterer Selektivitätsschätzer

Geringe Beschleunigung in der Entfernung ()

Lockere Syntaxakzeptanz im box3d-Parser

Enthält einige Fehlerbehebungen – darunter einen schwerwiegenden, der die Korrektheit gespeicherter Geometrien beeinträchtigt – und einige Verbesserungen.

Aufgrund eines Fehlers in einer Berechnungsroutine für Begrenzungsrahmen erfordert die Aktualisierungsprozedur besondere Aufmerksamkeit, da in der Datenbank zwischengespeicherte Begrenzungsrahmen falsch sein können.

Schwerwiegender Bugfix in der 2D-Begrenzungsbox-Berechnung von Lwgeom

Bugfix in WKT (-w) POINT-Handling im Loader

Bugfix im Dumper auf 64-Bit-Rechnern

Bugfix in Dumper-Behandlung von benutzerdefinierten Abfragen

Bugfix im Skript create_undef.pl

Kleine Leistungsverbesserung in der kanonischen Eingabefunktion

Unterstützung für Multibyte-Feldnamen im Loader

Verbesserung im Skript postgis_restore.pl

Neues Util-Skript rebuild_bbox_caches.pl

Enthält einige Fehlerbehebungen und Verbesserungen.

Wenn Sie ein Upgrade von Version 1.0.0RC6 oder höher durchführen, benötigen Sie KEIN Dump/Reload.

Speicherleck eingesteckt pg_error

Sauberere Build-Skripte (vermiedene Mischung aus CFLAGS und CXXFLAGS)

Neue Funktionen zur Indexerstellung im Loader (-I-Switch)

Erste Unterstützung für postgresql 8.1dev

Enthält einige Fehlerbehebungen und einige Verbesserungen.

Wenn Sie ein Upgrade von Version 1.0.0RC6 oder höher durchführen, benötigen Sie KEIN Dump/Reload.

BUGFIX in der 3D-Berechnung von length_spheroid()

BUGFIX im Join-Selektivitätsschätzer

BUGFIX in shp2pgsql-Escape-Funktionen

bessere Unterstützung für gleichzeitige Postgis in mehreren Schemata

jdbc2: standardmäßig mit "-target 1.2 -source 1.2" kompilieren

NEU -k Schalter für pgsql2shp

NEU Unterstützung für benutzerdefinierte Createdb-Optionen in postgis_restore.pl

BUGFIX in pgsql2shp Attributnamen Unicity Enforcement

BUGFIX in Paris Projektionsdefinitionen

Endgültige Version 1.0.0. Enthält ein paar Fehlerbehebungen, einige Verbesserungen im Loader (vor allem Unterstützung für ältere Postgis-Versionen) und weitere Dokumente.

Wenn Sie ein Upgrade von Version 1.0.0RC6 durchführen, benötigen Sie KEIN Dump/Reload.

BUGFIX in transform(), das zufällige Speicheradressen freigibt

BUGFIX in force_3dm() weist weniger Speicher zu als erforderlich

BUGFIX im Join-Selektivitätsschätzer (Standardwerte, Lecks, Tuplecount, sd)

BUGFIX in shp2pgsql Escape von Werten, die mit Tabulator oder einfachem Anführungszeichen beginnen

NEUE Handbuchseiten für Lader/Dumper

NEU shp2pgsql-Unterstützung für alte (HWGEOM) Postgis-Versionen

NEU -p (vorbereiten) Flag für shp2pgsql

NEUES Handbuchkapitel zur Durchsetzung der OGC-Compliance

NEU Autoconf-Unterstützung für JTS-Lib

BUGFIX in Estimator-Testern (Unterstützung für LWGEOM und Schema-Parsing)

Sechster Release Candidate für 1.0.0. Enthält einige Fehlerbehebungen und Bereinigungen.

frühe Rückkehr [wenn noop] von multi()

BUGFIX in postgis_restore.pl Scrip

BUGFIX in der 64-Bit-Unterstützung des Dumpers

Fünfter Release-Kandidat für 1.0.0. Enthält ein paar Fehlerbehebungen und Verbesserungen.

Wenn Sie ein Upgrade von Version 1.0.0RC4 durchführen, benötigen Sie KEIN Dump/Reload.

BUGFIX (segfaulting) in box3d-Berechnung (ja, noch ein!).

BUGFIX (segfaulting) in geschätzt_extent().

Kleine Build-Skripte und Verfeinerungen von Dienstprogrammen.

Zusätzliche Leistungstipps dokumentiert.

Vierter Release-Kandidat für 1.0.0. Enthält Fehlerbehebungen und einige Verbesserungen.

BUGFIX (segfaulting) in geom_accum().

BUGFIX in 64-Bit-Architekturen unterstützt.

BUGFIX in box3d-Berechnungsfunktion mit Sammlungen.

Unterstützung für NEW-Unterauswahlen im Selektivitätsschätzer.

Vorzeitige Rückkehr von force_collection.

Korrektur der Konsistenzprüfung in SnapToGrid().

Die Ausgabe von Box2d wurde auf 15 signifikante Stellen zurückgesetzt.

NEU distance_sphere() Funktion.

Die get_proj4_from_srid-Implementierung wurde geändert, um PL/PGSQL anstelle von SQL zu verwenden.

BUGFIX beim Lader- und Dumper-Handling von MultiLine-Formen

BUGFIX im Loader, alle bis auf das erste Loch von Polygonen werden übersprungen.

jdbc2: Code-Bereinigungen, Makefile-Verbesserungen

FLEX- und YACC-Variablen gesetzt *nach* pgsql Makefile.global ist enthalten und nur, wenn die *stripped*-Version von pgsql zu einem leeren String ausgewertet wird

Bereits generierter Parser in Release hinzugefügt

Build-Skript-Verfeinerungen

verbessertes Versionshandling, zentrale Version.config

Verbesserungen in postgis_restore.pl

Dritter Release Candidate für 1.0.0. Enthält viele Fehlerbehebungen und Verbesserungen.

BUGFIX in transform(): fehlende SRID, bessere Fehlerbehandlung.

BUGFIX bei der Handhabung der Speicherausrichtung

BUGFIX in force_collection() verursacht Mapserver-Connector-Fehler bei einfachen (einzelnen) Geometrietypen.

BUGFIX in GeometryFromText() fehlt, um einen Bbox-Cache hinzuzufügen.

reduzierte Genauigkeit der Box2D-Ausgabe.

DEBUG-Makros mit PGIS_ vorangestellt, um Konflikte mit pgsql one zu vermeiden

ein Leck im GEOS2POSTGIS-Konverter verstopft

Reduzierte Speichernutzung durch frühzeitiges Freigeben von Abfragekontext-pallocated.

BUGFIX in 72 Indexbindungen.

BUGFIX in probe_geometry_columns(), um mit PG72 zu arbeiten und mehrere Geometriespalten in einer einzigen Tabelle zu unterstützen

Einige Funktionen wurden aus STABLE IMMUTABLE gemacht, um die Leistung zu verbessern.

jdbc2: kleine Patches, Box2d/3d-Tests, überarbeitete Dokumentation und Lizenz.

jdbc2: Fehlerkorrektur und Testfall für die automatische Registrierung des Typs pgjdbc 8.0

jdbc2: Die Verwendung der reinen jdk1.4-Funktionen wurde entfernt, um das Erstellen mit älteren jdk-Releases zu ermöglichen.

jdbc2: Unterstützung für das Erstellen gegen pg72jdbc2.jar hinzugefügt

jdbc2: Makefile aktualisiert und bereinigt

jdbc2: BETA-Unterstützung für jts-Geometrieklassen hinzugefügt

jdbc2: Überspringe Tests mit bekannten Fehlern für ältere PostGIS-Server.

jdbc2: Behandlung von gemessenen Geometrien in EWKT korrigiert.

neues Kapitel mit Leistungstipps im Handbuch

Dokumentationsaktualisierungen: pgsql72-Anforderung, lwpostgis.sql

BUILDDATE-Extraktion wird tragbarer

Spatial_ref_sys.sql behoben, um zu vermeiden, dass die gesamte Datenbank evakuiert wird.

Spatial_ref_sys: Paris-Einträge geändert, damit sie mit denen übereinstimmen, die mit 0.x verteilt wurden.

Zweiter Release Candidate für 1.0.0 mit Bugfixes und einigen Verbesserungen.

BUGFIX in Pointarray Box3D-Berechnung

BUGFIX in der Distance_Spheroid-Definition

BUGFIX in transform() fehlt, um den Bbox-Cache zu aktualisieren

GEOMETRYCOLLECTION(EMPTY) Syntaxunterstützung für Abwärtskompatibilität

Strengere OGC WKB/WKT-Konstruktoren

Richtigere STABLE, IMMUTABLE, STRICT-Verwendungen in lwpostgis.sql

strengere OGC WKB/WKT-Konstruktoren

Schnellerer und robusterer Lader (sowohl i18n als auch nicht)

Dies ist der erste Kandidat für ein größeres Postgis-Release, bei dem der interne Speicher von Postgis-Typen neu gestaltet wurde, um bei indizierten Abfragen kleiner und schneller zu sein.

Schnelleres kanonisches Eingabeparsing.

Verlustfreie kanonische Ausgabe.

EWKB Canonical Binary IO mit PGᢁ.

Unterstützung für bis zu 4D-Koordinaten und bietet verlustfreie Shapefile->Postgis->Shapefile-Konvertierung.

Neue Funktion: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), geschätzt_extent(), accum().


Ubuntu 12.04 Hängt ab: postgresql-9.1-postgis

Ich installiere LocalWiki auf einer von 1&1.com gehosteten virtuellen Maschine Es ist Ubuntu 12.04.

Wenn ich sudo apt-get install localwiki gemäß den Anweisungen von http://localwiki.org/install/ ausführe,

Ich erhalte folgenden Fehler

Ich habe selbst versucht, postgresql zu installieren, aber am Ende habe ich es noch schlimmer gemacht. Ich habe gerade am 12.04 eine Neuinstallation durchgeführt und habe mich gefragt, ob mir hier jemand weiterhelfen könnte.

bearbeiten: Ich habe sogar sudo apt-get install postgresql erfolgreich ausgeführt und erhalte immer noch den gleichen Fehler.
bearbeiten: Ich möchte auch darauf hinweisen, dass es meiner Meinung nach an meinem Server liegen könnte. Es sagt, dass 1&1 das Betriebssystem mit minimalem Betriebssystem installiert. Als ich die Anweisungen von localwiki auf einer VM auf meinem lokalen Computer mit 12.04 ausprobiert habe, funktionierten sie perfekt. Also muss ich wahrscheinlich etwas auf meiner VM aktualisieren, die ich von 1and1 miete?
bearbeiten: Ich habe auf 9.1.5 herabgestuft, da in anderen Fragen hier das zu funktionieren schien. Bei mir hat es nicht funktioniert :(


3 Antworten 3

Sie müssen die AppImage-Datei als ausführbares Programm markieren, bevor Sie sie ausführen können.

  1. Rechtsklick auf die Datei
  2. Aktivieren Sie auf der Registerkarte "Berechtigungen" das Kontrollkästchen "Datei als Programm ausführen zulassen".
  3. Doppelklick zum Ausführen
  4. Nehmen Sie optional das Angebot zur Integration an und erstellen Sie eine Verknüpfung.

Öffnen Sie das Terminal und geben Sie die folgenden Befehle ein,

Ich hoffe, dies wird dir helfen.

Der einfachste Weg, Ganache auf dem Ubuntu zu installieren, besteht darin, die Ganache von dem unten angegebenen Link herunterzuladen

dann ändern Sie Ihr Verzeichnis in die Datei, in die Sie heruntergeladen haben

Kopieren Sie dann den Dateinamen der heruntergeladenen Datei. und machen Sie dann die Datei mit dem Terminalbefehl chmod ausführbar, indem Sie den folgenden Befehl eingeben

Terminal :- chmod 777 Ganache-2.1.0.AppImage und dann dieser andere Befehl ./Ganache-2.1.0.AppImage

Warten Sie einige Minuten, bis das Popup erscheint und klicken Sie dann auf OK und Gananche ist installiert.


Fehler: Das Tool konnte die Anwendungsserverrolle, die Webserverrolle (IIS) nicht installieren

Versuchen Sie, auf Windows Server 2016 zu installieren? Dies wird offiziell nicht unterstützt, ist aber problemlos möglich:

*Windows und SQL Server vorbereiten, AD DS einrichten

*Wie bereits erwähnt, installieren Sie .NET 3.5 mit dem Server-Manager

*Funktionen manuell mit Powershell hinzufügen:

Mein Problem wurde durch die Installation der .Net 3.5-Funktion auf meinem Server gelöst

indem Sie zum Server-Manager Funktionen hinzufügen/entfernen

dann führe ich das Voraussetzungsinstallationsprogramm erneut aus und es hat funktioniert

Ich hoffe, dies wird anderen Leuten helfen, die mit dem gleichen Problem konfrontiert sind

Folgen Sie diesem Beitrag. Es funktioniert gut, indem Sie die ServerManager.exe in ServerManagerCMD.exe umbenennen

versucht, Prereqs für SP 2013 und 2016 auszuführen, gaben beide den gleichen Hickup.

In beiden Fällen die oben angegebene Lösung: Es funktioniert gut, indem Sie die ServerManager.exe in ServerManagerCMD.exe umbenennen

Aber ich habe das anders gelöst. Ich habe gerade Servermanager.exe in system32 kopiert, die Kopie wieder eingefügt und diese ServerManagerCMD.exe genannt

Dies ist wiederum der Beweis, dass Microsoft nicht erreichbar ist, um ihnen Lösungen aus der Praxis zu präsentieren, damit sie diesen Skriptfehler in der prequisites.exe für zukünftige Releases korrigieren, denn in der aktuellen offiziellen iso von Sharepoint 2016 ist sie noch vorhanden. Was für eine Verschwendung unserer Zeit!

Du wirst brauchen Installieren das .Net 3.5-Framework Funktion mit der Servermanager Werkzeug. In einigen Szenarien wie in WS2012 R2. Installation des .net 3.5 Frameworks wird einen Fehler geben.

In Ordnung um das zu beheben, du wirst brauchen "Geben Sie einen alternativen Quellpfad an". Legen Sie ein WS2012-Installationsmedium in den Computer ein (es kann ein USB oder ein ISO sein)

Suchen Sie dann in den Installationsmedien nach dem Ordner "sourcessxs" und legen Sie dies als Quelle für die Feature-Installation fest und klicken Sie auf Installieren. Die Installation wird erfolgreich sein, wenn Sie dieses Verfahren verwenden.


SPFx gulp-Paketlösung schlägt fehl

Wenn ich gulp package-solution --ship ausführe, erhalte ich die folgende Fehlermeldung:

Die Sache ist, ich habe gulp build --ship , gulp Bundle und gulp build viele Male erfolgreich ausgeführt. Also, ich weiß nicht, warum ich diese spezielle Fehlermeldung erhalte.

Der yeoman-Generator hat das temp-Verzeichnis erstellt, aber nicht temp/deploy .

In der Fehlermeldung wird erwähnt, dass "Ihre Konfigurationsdatei auf den richtigen Ordner verweist". Was bedeutet das? Bezieht es sich auf Bundles.webpart-bundle.components.entrypoint ? Oder Bundles.webpart-bundle.components.manifest ? Oder andere?

Für manifest Dateien, sehe ich config/write-manifests.json .

Es gibt auch src/webparts/SpfxRestApiWebPart/SpfxRestApiWebPart.manifest.json , das yeoman erstellt hat und das 'schema', 'id', 'alias', 'componentType', 'version, 'manifestVersion', 'requiresCustomScript' und ' Die Felder von preconfiguredEntries sind sowohl definiert als auch zugewiesen (also nicht das, was ich "leer" nennen würde, wie in der Fehlermeldung angegeben. ).

Dann gibt es temp/manifests.json , die 620 Zeilen lang ist. Sieht aus wie eine Datei, die von mir nicht geändert werden sollte, also werde ich sie nicht berühren.

Irgendwelche Ideen? Würde gerne ein Paket für unsere On-Prem-Installation bereitstellen.


Schau das Video: Fehler bei der Windows Installation - EFI- Systemen GPT - Datenträger