norGIS-ALKIS-Import - norBIT GmbH

  • norGIS-ALKIS-Import

Überblick

norGIS-ALKIS-Import ist ein freies Werkzeug zum Import von ALKIS-Daten im NAS-Format in eine PostgreSQL/PostGIS Datenbank.

Der eigentliche Import erfolgt über GDAL/OGR (mit dem NAS-Treiber). Die darüber hinausgehende Leistung der Software besteht aus:

  • Bereitstellung einer graphische Oberfläche und eines Shellskript zur Steuerung des Imports
  • Anlegen des Datenmodells
  • Aufruf von ogr2ogr für alle gewählten Dateien
  • Fortschrittsanzeige und Protokollierung während des Imports
  • Aufbereitung der eingelesenen Daten nach GeoInfoDok.

Wobei der letzte Punkt der wesentlichste ist: Es wurden die Ableitungsregeln aus dem ALKIS-Signaturkatalog, Teil C: Präsentation, die die Darstellung regeln, annähernd vollständig umgesetzt. Dazu ist zu bemerken, dass sich die Darstellung vornehmlich aus diesen Regeln ergibt und die eigentliche Daten nur dann Informationen zur Art und Weise der Darstellung enthalten, wenn sie von den Ableitungsregeln abweichen - dies wirkt sich insbesondere auf Beschriftungen, Flächensignaturierungen und Punktsymbolik aus.

Ergebnis der Ableitungsregeln sind gesonderte Tabelle in der ALKIS-Datenbank, die zur nahezu unmittelbar zur Darstellung verwenden können. Die eigentlich Darstellung findet auf Clientseite statt. Client-Implementationen existieren derzeit für QGIS, UMN-Mapserver und AutoCAD/BricsCAD. Dort sind auch die Signaturen zu finden.

Download & Installation

Die Software wird derzeit unter Windows und Linux verwendet. Es ist freie Software. Der Code wird auf GitHub unter https://github.com/norBIT/alkisimport vorgehalten.

Windows

Für Windows steht sie zusammen mit allen notwendigen Abhängigkeiten in OSGeo4W zur Verfügung. Das Paket heißt alkis-import und ist in der fortgeschrittenen Installation unter Desktop zu finden. Nach der Installation ist die graphische Oberfläche über das OSGeo4W-Programmmenü zu starten.

Linux

Für Linux sind derzeit keine gesonderten installierbare Pakete vorhanden. Die Skripte alkisImport.py und alkis-import.sh aus dem github-Repository laufen dort allerdings direkt, sodaß hier nur sichergestellt sein muss, dass die notwendigen Abhängigkeiten verfügbar sind.

Dies sind:

  • python (2 oder 3) & PyQt4/5 (inkl. dem QtSql-PostgreSQL-Treiber; i.d.R. ein gesondertes Plugin)
  • psql (PostgreSQL-Kommandointerface)
  • GDAL/OGR ab 1.11.1
  • Für das Shellscript: GNU parallel & procmail (für lockfile)

Unter Debian/Ubuntu GNU Linux entspricht das folgenden Paketen:

apt-get install python3-pyqt5 python3-future libqt5sql5-psql \
  postgresql-client gdal-bin parallel procmail

Aktuelle Distributionen verfügen über ausreichend aktuelle GDAL-Versionen.

Alternativ dazu kann GDAL selbst kompiliert werden. Eine Beschreibung ist unter BuildingOgrPostNASDriver zu finden.  

Nutzung

Es wird davon ausgegangen, dass PostgreSQL mit PostGIS installiert ist und eine PostGIS-Datenbank bereits angelegt wurde.

Graphische Benutzeroberfläche

In der Oberfläche sind die Zugangsdaten zur PostGIS-Datenbank einzugeben und beim Erstbestand noch Datenbestand (neu)anlegen zu aktivieren und ein Koordinatensystem festzulegen (i.d.R. UTM32N; in Baden-Württemberg 2GK2 oder 3GK3 und in Bayern 3GK4 - außer für UTM32N muß der Datenbankbenutzer auch das INSERT-Privileg auf die Tabelle spatial_ref_sys haben). Außerdem kann unter Flurstücksnummerndarstellung gewählt werden, ob Flurstücksnummern ohne explizite Angabe in Bruchstrich- oder Schrägstrichdarstellung angezeigt werden sollen.

Danach kann man über Datei hinzufügen... einzelne Dateien bzw. Verzeichnis hinzufügen ganze Verzeichnisse (inkl. Unterverzeichnissen) angeben und so die Dateiliste mit den einzulesenden NAS-Daten füllen. Danach Starten, um den Import auszulösen.

Dadurch wird dann das Datenmodell angelegt, die Dateien einzeln per ogr2ogr eingelesen, danach die Ableitungsregeln ausgeführt und im Anschluss die Liegenschaftsbuchdaten aufbereitet (postprocessing.d/nas2alb.sql für unser ursprüngliches ALB-Modell; das Skript kann ggf. entfernt und/oder im Verzeichnis andere Skripte ergänzt werden).  Startet man den Import ohne Dateien in der Liste werden nur die nachverarbeiteten Schritte durchgeführt.

In der graphischen Oberfläche gibt es außerdem noch die Optionen Importfehler überspringen und COPY benutzen. Ist die erste aktiviert wird ogr2ogr mit der Option -skipfailures ausgeführt. Dies sollte nur nötig sein, wenn man Datenbestände mit doppelten Datensätzen importiert (etwa Datensätzen für verschiedenen Gemeinden bei denen sich die Katalogeinträge überschneiden). COPY benutzen dient dazu den PostgreSQL-Import mit der Option --config PG_USE_COPY YES aufzurufen. Dies kann den Import deutlich beschleunigen (vorgegeben seit GDAL 2).

Der Import wird in der Datenbank protokolliert. Mit Protokoll löschen wird es beim Import gelöscht. Zur Ansicht kann man nachträglich die Protokolltabelle laden, um sie anzusehen.

Shellscript

Alternativ kann man auch alkis-import.sh ausführen, um das Gleiche zu erreichen. Das Shellskript wird über eine Datei gesteuert, die dem Skript als Argument übergeben wird.

Die Steuerdatei kann folgende Zeilen enthalten:

Der ALKIS-Import wird durch eine Datei gesteuert, die alkis-import.sh als Parameter übergeben wird. Die Steuerdatei kann folgende Zeilen enthalten:

 

  • PG:connectioninfo

    Angabe der Verbindungsdaten zur Zieldatenbank (z.B. PG:dbname=alkis user=alkis password=alkis)

  • epsg srid

    Angabe des Koordinatensystems für die ALKIS-Daten (Vorgabe: 28532)

    Für Bayern und Baden-Württemberg auch 131466/131467/131468 für sechstelliges DHDN 3/4/5 (ohne die führende Stelle). Hierzu wird auch in der Datenbank ggf. das entsprechende Koordinatensystem ergänzt (hierzu braucht der importierende Benutzer INSERT-Recht auf die PostGIS-Tabelle spatial_ref_sys).

  • pgschema schema

    Schema in dem sich PostGIS befindet (Vorgabe public)

  • schema schema

    Schema in dem die ALKIS-Daten abgelegt werden sollen (Vorgabe public)

  • historie {on|off}

    Untergegangene Objekte erhalten oder löschen (Vorgabe on)

  • jobs n

    Anzahl der parallelen Importe/Skriptläufe (Vorgabe: CPU-Anzahl-1)

  • avoiddupes {on|off}

    Doppelte Objekte ignorieren. Wenn Elemente mit gleichem gml_id und beginnt vorkommen, wird dies nicht mehr als Fehler aufgefasst, sondern einfach übergangen.

  • quittierung {on|off}

    Zu den importierten NBA-Dateien eine Quittierungsdatei zur Rückübermittlung an den Lieferanten erzeugen.

  • create

    Datenbankmodell neuanlegen (beim Erstbestand)

  • clean

    Datenbankmodell leeren (bei Erstbestand um z.B. bestehende Sichten und Berechtigungen auf ALKIS-Tabellen zu erhalten

  • update

    Datenbankmodell aktualisieren (bei Fortführungen)

  • temp dir

    Angabe des temporären Verzeichnisses (Vorgabe: /tmp)

  • debug {on|off}

    CPL_DEBUG setzen, die GDALs Debugausgaben steuert

  • skipfailuresregex re

    Angabe eines regulären Ausdrucks, der festlegt welche Dateien mit der Option -skipfailures importiert werden sollen. -skipfailures bremst den Import und sollte daher nur aktiviert werden, wenn Fehler zu erwarten sind (z.B. bei doppelten Katalogeinträgen oder sich überschneidenen Gebieten)

  • options opts

    Setzen von weiteren Optionen für ogr2ogr (z.B. options --config PG_USE_COPY NO)

  • execute sql

    SQL-Anweisung auf der ALKIS-Datenbank ausführen (z.B. TRUNCATE alkis_importlog um die Protokolltabelle zu leeren)

  • shell statement

    Shellbefehl ausführen (wird per eval ausgewertet)

  • log [file]

    Dateinamen für das Protokoll festlegen.

    Ohne Namensangabe wird eine Logdatei angelegt, die wie die Steuerdatei allerdings versehen mit dem aktuellen Zeitstempel und der Erweiterung .log heißt.

    Parallel dazu findet auch eine Protokollierung in der Tabelle alkis_importlog in der Datenbank statt.

  • dump [file]

    Dump der ALKIS-Datenbank anfertigen (ohne Namensangabe erhält der Dump den Namen alkis mit dem aktuellen Zeitstempel und der Erweiterung .cpgdmp)

  • restore name

    Den gegebenen Dump importieren (name wird um .cpgdmp erweitert und die Datenbank vorab geleert; d.h. pg_restore -c)

  • exit

    Import beenden ohne die Ableitungsregeln auszuführen.

  • postprocess

    Import beenden und Postprocessing beginnen (Ableitungsregeln)

  • datei.xml

    Unkomprimierte Datei importieren

  • datei.xml.gz

    Komprimierte GZIP-Datei entpacken und importieren

  • datei.zip

    ZIP-Datei datei.zip entpacken und importieren. Es wird erwartet, dass das Archiv nur eine Datei enthält, die so heißt wie da Archiv nur mit der Erweiterung .xml statt .zip.

Nach dem Import der letzten Datei werden die Ableitungsregeln ausgeführt (falls nicht exit angegeben wurde).

Optionen für die Ableitungsregeln

  • fnbruch {an|on|true|aus|off|false}

    Voreinstellung für Flurstücksnummer in Bruchdarstellung (Vorgabe: an). In Bayern auf aus zu setzen.

  • pgverdraengen {an|on|true|aus|off|false}

    Jeweils nur die höchstwertige übereinanderliegender politische Grenzen darstellen (Vorgabe: aus).

Beispiel

Steuerdatei nas.lst:

PG:dbname=alkis user=alkis password=alkis
epsg 25832
create
log
1.xml
2.xml
3.xml

Aufruf: alkis-import.sh nas.lst

Verzeichnisse für benutzerdefinierte Skripte

Es besteht die Möglichkeit in bestimmten Phasen des Imports benutzerdefinierte SQL-Skripte auszuführen, die in folgenden Verzeichnissen abgelegt werden können:

Verzeichnis Wann
prepare.d Vor Anlegen/Leeren des Schema
precreate.d vor dem Anlegen des Schemas
postcreate.d nach dem Anlegen des Schemas
preclean.d vor dem Leeren des Schemas
postclean.d nach dem Leeren des Schemas
preupdate.d vor der Aktualisierung des Schemas
postupdate.d nach der Aktualisierung des Schemas
preprocessing.d vor dem Import der ersten Datei
postprocessing.d nach den Ableitungsregeln

PostNAS-Kompatibilitätssichten

Das vordefinierte Skript postprocessing.d/postnas-keytables.sql legt Sichten an, die die Codelisten-Tabellen von PostNAS auf den Tabellen von ALKIS-Import nachbilden.

QGIS-Flurstücksnachweise/norGIS Liegenschaftsbuch

Für den Flurstücksnachweis in QGIS als auch für die norGIS Liegenschaftsbuch-Anwendung sind in den obigen Verzeichnissen Skripte enthalten, die die Tabellen dafür füllen:

  • postcreate.d/nas2alb.sql
  • postupdate.d/nas2alb.sql
  • postprocessing.d/nas2alb.sql