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:
ogr2ogr
für alle gewählten DateienWobei 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.
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.
Für Windows steht sie zusammen mit allen notwendigen Abhängigkeiten in OSGeo4W zur Verfügung. Derzeit gibt für drei Varianten ein Paket:
alkis-import
: ist das Paket für GeoInfoDok (GID) 6alkis-import-gid7
: ist das Paket für GeoInfoDok 7alkis-import-gid7i
: ist auch für GeoInfoDok 7, jedoch baut es die Karte nach Importen nicht komplett neu auf, sondern inkrementell zur deren vorherigen Stand. Diese Variante ist leider nur wenig getestet, dass wir kaum über Fortführungsdaten für GID7 verfügen.Zu finden sind die Pakete in der fortgeschrittenen Installation unter Desktop. Nach der Installation ist die graphische Oberfläche über das OSGeo4W-Programmmenü zu starten.
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:
Unter Debian/Ubuntu GNU Linux entspricht das folgenden Paketen:
apt-get install python3-pyqt5 python3-future python3-lxml 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.
Es wird davon ausgegangen, dass PostgreSQL mit PostGIS installiert ist und eine PostGIS-Datenbank bereits angelegt wurde.
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.
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).
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
).
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
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 |
Das vordefinierte Skript postprocessing.d/postnas-keytables.sql
legt Sichten an, die die Codelisten-Tabellen von PostNAS auf den Tabellen von ALKIS-Import nachbilden.
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
./postprocessing.d/3_nas2alb.sql
./postprocessing.d/4_nas2alb/
./postprocessing.d/5_nas2alb.sql
./postinherit.d/nas2alb.sql