Die topologischen Datentypen und Funktionen von PostGIS werden für die Verwaltung von topologischen Objekten wie Maschen, Kanten und Knoten verwendet.
Sandro Santilli's Vortrag auf der Tagung "PostGIS Day Paris 2011" liefert eine gute Übersicht über die PostGIS Topologie und deren Perspektiven Topology with PostGIS 2.0 slide deck.
Vincent Picavet gibt in PostGIS Topology PGConf EU 2012 einen guten Überblick darüber, was Topologie ist, wie sie verwendet wird und welche FOSS4G-Tools sie unterstützen.
Ein Beispiel für eine topologische Geodatenbank ist die US Census Topologically Integrated Geographic Encoding and Referencing System (TIGER) Datenbank. Zum Experimentieren mit der PostGIS Topologie stehen unter Topology_Load_Tiger Daten zur Verfügung.
Das PostGIS Modul "Topologie" gab es auch schon in früheren Versionen von PostGIS, es war aber nie Teil der offiziellen PostGIS Dokumentation. In PostGIS 2.0.0 fand eine umfangreiche Überarbeitung statt, um überholte Funktionen zu entfernen, bekannte Probleme mit der Bedienbarkeit zu bereinigen, bessere Dokumentation der Funktionalität, Einführung neuer Funktionen, und eine bessere Übereinstimmung mit den SQL-MM Normen zu erreichen.
Genauere Angaben zu diesem Projekt finden sich unter PostGIS Topology Wiki
Alle Funktionen und Tabellen, die zu diesem Modul gehören, sind im Schema mit der Bezeichnung topology
installiert.
Funktionen die im SQL/MM Standard definiert sind erhalten das Präfix ST_, PostGIS eigene Funktionen erhalten kein Präfix.
Ab PostGIS 2.0 wird die Topologie Unterstützung standardmäßig mitkompiliert und kann bei der Konfiguration mittels der Konfigurationsoption "--without-topology", wie in Chapter 2, PostGIS Installation beschrieben, deaktiviert werden.
Dieser Abschnitt beschreibt die PostgreSQL Datentypen die mit der PostGIS Topologie installiert werden. Besonders wichtig ist deren Verhaltensweise bei der Typumwandlung, insbesonderen wenn Sie Ihre eigenen Funktionen schreiben.
ValidateTopology
zurückgegebene Datentyp.
Dieser Abschnitt beschreibt die PostgreSQL Domänen/domains die von PostGIS Topology installiert werden. Domänen können, ähnlich wie Objekttypen, als Rückgabeobjekte von Funktionen oder als Tabellenspalten verwendet werden. Der Unterschied zwischen einer Domäne und einem Datentyp ist, dass eine Domäne ein bestehender Datentyp mit einer an diesen gebundenen Check-Constraint ist.
Dieser Abschnitt beschreibt die topologischen Funktionen zum Erstellen von neuen topologischen Schemata, zum Validieren von Topologien und zur Verwaltung von TopoGeometry Attributen
table_name
im Schema schema_name
und entfernt die Registrierung der Attribute aus der Tabelle "topology.layer".
In diesem Abschnitt wird die Verwaltung der Datenbankstatistiken während der Topologieerstellung behandelt.
Das Hinzufügen von Elementen zu einer Topologie löst viele Datenbankabfragen aus, um bestehende Kanten zu finden, die geteilt werden, Knoten hinzuzufügen und Kanten zu aktualisieren, die mit dem neuen Liniennetz verknotet werden. Aus diesem Grund ist es sinnvoll, dass die Statistiken über die Daten in den Topologietabellen aktuell sind.
Die PostGIS-Topologiebevölkerungs- und -bearbeitungsfunktionen aktualisieren die Statistiken nicht automatisch, da eine Aktualisierung der Statistiken nach jeder einzelnen Änderung in einer Topologie zu viel Aufwand wäre.
Die von Autovacuum aktualisierten Statistiken sind für Transaktionen, die vor Beendigung des Autovacuum-Prozesses gestartet wurden, NICHT sichtbar, so dass lang laufende Transaktionen selbst ANALYZE ausführen müssen, um aktualisierte Statistiken zu verwenden. |
Dieser Abschnitt behandelt Funktionen zum Erzeugen neuer Topologien.
Dieser Abschnitt behandelt topologische Funktionen zum Hinzufügen, Verschieben, Löschen und Teilen von Kanten, Maschen und Knoten. Sämtliche dieser Funktionen sind über die ISO SQL/MM definiert.
alinestring
festgelegt wird zu einer Topologie hinzu, indem zwei bestehende isolierte Knoten anode
und anothernode
verbunden werden. Gibt die "edgeid" der neuen Kante aus.
apoint
bereits als Knoten existiert, wird eine Fehlermeldung ausgegeben. Gibt eine Beschreibung der Verschiebung aus.
aface
begrenzen, sortiert aus.
Dieser Abschnitt behandelt Funktionen zur Verarbeitung von Topologien mit nicht standardmäßigen Methoden.
Dieser Abschnitt behandelt topologische Funktionen zur Erstellung einer neuen TopoGeometry.
topoelementarray
zurück.
Dieser Abschnitt behandelt topologische Funktionen zur Bearbeitung einer bestehenden TopoGeometry.
topoelementarray
(ein Feld von topoelements) zurück, das die topologischen Elemente und den Datentyp der gegebenen TopoGeometry (die Elementarstrukturen) enthält.
topoelement
Objekten zurück, welche die topologische element_id und den element_type beinhalten.
Dieser Abschnitt behandelt topologische Funktionen zur Überprüfung der Beziehungen von TopoGeometry Objekten und topologischen Elementarstrukturen
Nachdem Sie Topologien und eventuell zugehörige topologische Ebenen erstellt haben, möchten Sie diese vielleicht in ein dateibasiertes Format exportieren, um sie zu sichern oder in eine andere Datenbank zu übertragen.
Die Verwendung der Standard-Dump/Restore-Tools von PostgreSQL ist problematisch, da Topologien aus einer Reihe von Tabellen (4 für Primitive, eine beliebige Anzahl für Layer) und Datensätzen in Metadatentabellen (topology.topology und topology.layer) bestehen. Außerdem sind die Topologiebezeichner nicht datenbankübergreifend einheitlich, so dass die Parameter Ihrer Topologie bei der Wiederherstellung geändert werden müssen.
Um das Exportieren/Wiederherstellen von Topologien zu vereinfachen, werden zwei ausführbare Dateien bereitgestellt: pgtopo_export
und pgtopo_import
. Beispiel für die Verwendung:
pgtopo_export dev_db topo1 | pgtopo_import topo1 | psql staging_db
Das Skript pgtopo_export
nimmt den Namen einer Datenbank und eine Topologie und gibt eine Dump-Datei aus, die zum Importieren der Topologie (und der zugehörigen Ebenen) in eine neue Datenbank verwendet werden kann.
Standardmäßig schreibt pgtopo_export
die Speicherauszugsdatei in die Standardausgabe, so dass sie an pgtopo_import
weitergeleitet oder in eine Datei umgeleitet werden kann (Ablehnung des Schreibens ins Terminal). Sie können optional einen Ausgabedateinamen mit der Befehlszeilenoption -f
angeben.
Standardmäßig enthält pgtopo_export
einen Speicherauszug aller für die angegebene Topologie definierten Ebenen. Dies können mehr Daten sein, als Sie benötigen, oder sie können nicht funktionieren (falls Ihre Ebenentabellen komplexe Abhängigkeiten haben). In diesem Fall können Sie mit dem Schalter --skip-layers
verlangen, dass die Ebenen übersprungen werden, und diese separat behandeln.
Der Aufruf von pgtopo_export
mit dem Schalter --help
(oder kurz -h
) gibt immer einen kurzen Verwendungsstring aus.
Das Format der Dump-Datei ist ein komprimiertes tar-Archiv eines pgtopo_export
Verzeichnisses, das mindestens eine pgtopo_dump_version
Datei mit Informationen zur Formatversion enthält. Ab Version 1
enthält das Verzeichnis tabulatorgetrennte CSV-Dateien mit den Daten der Topologie-Primitivtabellen (node, edge_data, face, relation), den damit verbundenen Topologie- und Ebenendatensätzen und (sofern nicht --skip-layers
angegeben ist) einem PostgreSQL-Dump im benutzerdefinierten Format der Tabellen, die als Ebenen der angegebenen Topologie gemeldet werden.
Das Skript pgtopo_import
nimmt einen Topologie-Dump im Format pgtopo_export
und einen Namen für die zu erstellende Topologie und gibt ein SQL-Skript aus, das die Topologie und die zugehörigen Ebenen rekonstruiert.
Die generierte SQL-Datei enthält Anweisungen, die eine Topologie mit dem angegebenen Namen erstellen, Primitivdaten in sie laden, alle Topologieebenen wiederherstellen und registrieren, indem sie alle TopoGeometry-Werte ordnungsgemäß mit der richtigen Topologie verknüpfen.
Standardmäßig liest pgtopo_import
den Speicherauszug von der Standardeingabe, so dass er in Verbindung mit pgtopo_export
in einer Pipeline verwendet werden kann. Sie können optional einen Eingabedateinamen mit der Befehlszeilenoption -f
angeben.
Standardmäßig enthält pgtopo_import
in der SQL-Ausgabedatei den Code zur Wiederherstellung aller im Dump gefundenen Ebenen.
Dies kann unerwünscht sein oder nicht funktionieren, wenn Ihre Zieldatenbank bereits Tabellen mit dem gleichen Namen wie die im Dump hat. In diesem Fall können Sie das Überspringen der Ebenen mit dem Schalter --skip-layers
anfordern und diese separat (oder später) bearbeiten.
SQL, um nur Ebenen zu laden und mit einer benannten Topologie zu verknüpfen, kann mit dem Schalter --only-layers
erzeugt werden. Dies kann nützlich sein, um Ebenen zu laden, NACHDEM die Benennungskonflikte gelöst wurden, oder um Ebenen mit einer anderen Topologie zu verknüpfen (z. B. einer räumlich vereinfachten Version der Ausgangstopologie).