Chapter 13. PostGIS Extras

Table of Contents
13.1. Tiger Geokoder

Dieses Kapitel beschreibt Funktionen, die sich in dem Verzeichnis "extras" des PostGIS Quellcodes (Tarball oder Repository) befinden. Diese sind nicht immer mit der binären PostGIS Release paketiert, es handelt sich dabei aber üblicherweise um Pl/Pgsql- oder Shell-Skripts, die direkt aufgerufen werden können.

13.1. Tiger Geokoder

Abstract

Ein auf PL/pgSQL basierender Geokodierer, der für das vom United States Census Bureau herausgegebene TIGER (Topologically Integrated Geographic Encoding and Referencing system ) / Line and Master Address database export geschrieben wurde.

Der Geokodierer besteht aus vier Komponenten: Funktionen zum Laden von Daten, der Adressennormierer, der Adressengeokodierer und der inverse Geokodierer.

Obwohl speziell für die US entworfen, können viele Konzepte und Funktionen übernommen und an die Adressen und Straßennetze anderer Länder angepasst werden.

Das Skript erstellt ein Schema mit der Bezeichnung tiger, in dem sich alle auf TIGER bezogenen Funktionen befinden, sowie wiederverwendbare Daten, wie Präfixe für Straßentypen, Suffixe, Länder, verschiedene Kontrolltabellen zum Bewerkstelligen des Ladens von Daten, und Schablonen für die Basistabellen von denen alle geladenen TIGER-Tabellen erben.

Eine weiteres Schema mit der Bezeichnung tiger_data enthält die Volkszählungsdaten aller Länder, die der Loader von der Census Seite in die Datenbank lädt. Im aktuellen Datenmodell erhalten die Tabellen eines Landes den Ländercode als Präfix - z.B. ma_addr, ma_edges etc. - und werden mit Constraints versehen, welche die Daten auf das jeweilige Land beschränken. Diese Tabellen erben alle von den Tabellen addr, faces, edges, etc., die sich in dem Schema tiger befinden.

Da die Funktionen zur Geokodierung nur auf die Basistabellen verweisen, muss das Datenschema nicht notwendigerweise tiger_data heissen. Solange alle Tabellen von den Tabellen im Schema tiger erben, können die Daten auch auf andere Schemata weiter aufgeteilt werden -- z.B. ein anderes Schema für jedes Land.

Anweisungen wie Sie die EXTENSION in Ihrer Datenbank aktivieren und mit ihr Daten laden können, finden Sie unter Section 2.9.1, “Aktivierung des Tiger Geokodierer in Ihrer PostGIS Datenbank: Verwendung von Extension”.

[Note]

Wenn Sie den Tiger Geokodierer (tiger_2010) verwenden, können Sie die Skripts mit den beigefügten Shell-Skripts "upgrade_geocoder.bat" unter "extras/tiger" aktualisieren. Eine wesentliche Änderung zwischen tiger_2010 und tiger_2011+ ist, dass die Tabellen county und state nicht länger nach den Bundesstaaten gegliedert sind. Wenn Sie Daten von tiger_2010 haben und diese mit tiger_2015 ersetzen wollen, siehe Section 2.9.5, “Upgrade Ihrer Tiger Geokodierer Installation”

[Note]

Neu in der PostGIS 2.2.0 Release ist die Unterstützung von Tiger 2015 Daten und die Einbindung des Adressennormierers als Teil von PostGIS.

Falls Sie mit PostgreSQL 9.1+ arbeiten, haben Sie mit der PostGIS 2.1.0 Release die neue Möglichkeit, den Tiger Geokodierer mittels dem PostgreSQL Extension Modell zu installieren. Siehe Section 2.9.1, “Aktivierung des Tiger Geokodierer in Ihrer PostGIS Datenbank: Verwendung von Extension” für Details.

Die Funktion Pagc_Normalize_Address kann direkt gegen die eingebaute Funktion Normalize_Address ausgetauscht werden. Siehe Section 2.8, “Installation und Verwendung des Adressennormierers” für Anweisungen zur Kompilation und Installation.

Entwurf:

Das Ziel des Projektes ist einen voll funktionsfähigen Geokodierer zu erstellen, der eine beliebige Adresszeile der USA verarbeiten kann. Mittels normalisierter TIGER Census Daten wird eine Punktgeomtrie und eine Wertung erstellt, welche die Lage einer gegebenen Adresse mit einer bestimmten Wahrscheinlichkeit darstellen. Umso höher die Wertung ist, umso schlechter ist das Ergebnis.

Mit der Funktion reverse_geocode, die in PostGIS 2.0.0 eingeführt wurde, können mittels Geokoordinaten textuelle Lokationsangaben, wie Adressen und Straßenkreuzungen bestimmt werden.

Der Geokodierer sollte von jedem, der mit PostGIS vertraut ist, leicht zu installieren und zu benutzen sein. Er sollte auch auf allen von PostGIS unterstützten Plattformen installierbar und benutzbar sein.

Abgesehen von Formatierungs- und Rechtschreibfehlern, sollte der Geokodierer stabil genug sein um einwandfrei zu funktionieren.

Er sollte auch ausreichend erweiterbar sein, um zukünftige Datenaktualisierungen durchzuführen und alternativen Datenquellen mit geringen Änderungen des Codes zu nutzen.

[Note]

Damit die Funktionen ordnugsgemäß arbeiten, muss das tiger Schema zum Suchpfad der Datenbank hinzugefügt werden.

Drop_Indexes_Generate_Script — Erzeugt ein Skript, welches alle Indizes aus dem Datenbankschema "Tiger" oder aus einem vom Anwender angegebenen Schema löscht, wenn die Indizes nicht auf den Primärschlüssel gelegt und nicht "unique" sind. Wenn kein Schema angegeben ist wird standardmäßig auf das tiger_data Schema zugegriffen.
Drop_Nation_Tables_Generate_Script — Erzeugt ein Skript, welches alle Tabellen in dem angegebenen Schema löscht, die mit county_all, state_all oder dem Ländercode gefolgt von county oder state beginnen.
Drop_State_Tables_Generate_Script — Erzeugt ein Skript, dass alle Tabellen in dem angegebenen Schema löscht, die als Präfix einen Ländercode haben. Wenn kein Schema angegeben ist wird standardmäßig auf das tiger_data Schema zugegriffen.
Geocode — Nimmt eine Adresse als Zeichenkette (oder eine bereits standardisierte Adresse) entgegen und gibt die möglichen Punktlagen zurück. Die Ausgabe beinhaltet eine Punktgeometrie in NAD 83 Länge/Breite, eine standardisierte Adresse und eine Rangfolge (Rating) für jede Punktlage. Umso niedriger die Rangfolge ist, um so wahrscheinlicher ist die Übereinstimmung. Die Ergebnisse werden mit aufsteigender Rangfolge sortiert - dar niedrigste Rang zuerst. Optional kann die maximale Anzahl der Ergebnisse angegeben werden (Standardeinstellung ist 10) und der Bereich mit restrict_region beschränkt werden (Standardeinstellung ist NULL)
Geocode_Intersection — Nimmt 2 sich kreuzende Straßen, einen Bundesstaat, eine Stadt und einen ZIP-Code entgegen und gibt die möglichen Punktlagen an der ersten Querstraße an der Kreuzung zurück. Die Ausgabe beinhaltet auch die Geometrie "geomout" in NAD 83 Länge/Breite, eine standardisierte Adresse normalized_address (addy) für jede Punktage, sowie die Rangfolge. Umso niedriger die Rangfolge ist, um so wahrscheinlicher ist die Übereinstimmung. Die Ergebnisse werden mit aufsteigender Rangfolge sortiert - dar niedrigste Rang zuerst. Optional kann die maximale Anzahl der Ergebnisse angegeben werden (Standardeinstellung ist 10). Verwendet TIGER Daten (Kanten, Maschen, Adressen) und Fuzzy String Matching (soundex, levenshtein) von PostgreSQL.
Get_Geocode_Setting — Gibt die in der Tabelle "tiger.geocode_settings" gespeicherten Einstellungen zurück.
Get_Tract — Gibt für die Lage einer Geometrie die Census Area oder ein Feld der tract-Tabelle zurück. Standardmäßig wird die Kurzbezeichnung der Census Area ausgegeben.
Install_Missing_Indexes — Findet alle Tabellen mit Schlüsselspalten, die für JOINs und Filterbedingungen vom Geokodierer verwendet werden und keinen Index aufweisen; die fehlenden Indizes werden hinzugefügt.
Loader_Generate_Census_Script — Erzeugt für gegebene Plattform und Bundesstaaten ein Shellskript, das die TIGER Datentabellen "tract", "bg" und "tabblocks" herunterlädt, bereitstellt und in das Schema tiger_data importiert. Jedes Bundesstaat-Skript wird in einem eigenen Datensatz ausgegeben.
Loader_Generate_Script — Erzeugt für gegebene Plattform und Bundesstaaten ein Shellskript, das die TIGER Daten herunterlädt, bereitstellt und in das Schema tiger_data importiert. Jedes Bundesstaat-Skript wird in einem eigenen Datensatz ausgegeben. Die neueste Version unterstützt die geänderte Struktur von Tiger 2010 und lädt ebenfalls die Census Tract, Block Groups und Blocks Tabellen.
Loader_Generate_Nation_Script — Erzeugt für die angegebene Plattform ein Shell-Skript, welches die County und State Lookup Tabellen ladet.
Missing_Indexes_Generate_Script — Findet alle Tabellen mit Schlüsselspalten, die für JOINs vom Geokodierer verwendet werden und keinen Index aufweisen; gibt ein DDL (SQL) aus, dass die Indizes für diese Tabellen festlegt.
Normalize_Address — Für einen gegebenen Adressentext wird der zusammengesetzte Datentyp norm_addy zurückgeben, der ein Suffix und ein Präfix für die Straße, einen normierten Datentyp, die Straße, den Straßennamen etc. enthält und diese einzelnen Attributen zuweist. Diese Funktion benötigt lediglich die "lookup data", die mit dem Tiger Geokodierer paketiert sind (Tiger Census Daten werden nicht benötigt).
Pagc_Normalize_Address — Für einen gegebenen Adressentext wird der zusammengesetzte Datentyp norm_addy zurückgeben, der ein Suffix und ein Präfix für die Straße, einen normierten Datentyp, die Straße, den Straßennamen etc. enthält und diese einzelnen Attributen zuweist. Diese Funktion benötigt lediglich die "lookup data", die mit dem Tiger Geokodierer paketiert sind (Tiger Census Daten werden nicht benötigt). Benötigt die Erweiterung "address_standardizer".
Pprint_Addy — Für einen zusammengesetzten Objekttyp norm_addy wird eine formatierte Darstellung zurückgegeben. Wird üblicherweise in Verbindung mit normalize_address verwendet.
Reverse_Geocode — Nimmt einen geometrischen Punkt in einem bekannten Koordinatenreferenzsystem entgegen und gibt einen Datensatz zurück, das ein Feld mit theoretisch möglichen Adressen und ein Feld mit Straßenkreuzungen beinhaltet. Wenn include_strnum_range = true, dann beinhalten die Straßenkreuzungen den "Street Range" (Kennung des Straßenabschnitts).
Topology_Load_Tiger — Lädt die Tiger-Daten einer bestimmte Region in die PostGIS Topologie, transformiert sie in das Koordinatenreferenzsystem der Topologie und fängt sie entsprechend der Genauigkeitstoleranz der Topologie.
Set_Geocode_Setting — Setzt die Einstellungen, welche das Verhalten der Funktionen des Geokodierers beeinflussen.

Es existieren eine Reihe weiterer Open Source Geokodierer füf PostGIS, welche im Gegensatz zu dem Tiger Geokodierer den Vorteil haben, dass sie mehrere Länder unterstützen

  • Nominatim verwendet Daten von OpenStreetMap, die mittels Gazetteer formatiert werden. Es benötigt osm2pgsql zum Laden der Daten, PostgreSQL 8.4+ und PostGIS 1.5+ um zu funktionieren. Es ist als Webinterface paketiert und wird vermutlich als Webservice aufgerufen. So wie der Tiger Geokodierer besteht es aus einem Geokodierer und einer inversen Komponente des Geokodierers. Aus der Dokumentation ist nicht ersichtlich, ob es wie der Tiger Geokodierer auch eine reine SQL Schnittstelle aufweist, oder ob ein größerer Anteil der Logik in das Webinterface implementiert wurde.

  • GIS Graphy nützt ebenfalls PostGIS und arbeitet so wie Nominatim ebenfalls mit Daten von OpenStreetMap (OSM). Es beinhaltet einen Loader, um OSM-Daten zu importieren. Ähnlich wie Nominatim kann es auch für die Geokodierung außerhalb der USA verwendet werden. So wie Nominatim läuft es als Webservice und benötigt Java 1.5, Servlet Apps und Solr. GisGraphy kann plattformübergreifend genutzt werden und hat ebenfalls einen invertierten Geokodierer zusammen mit anderen geschickten Funktionen.