das vollständige PostNAS-Datenmodell: Unterschied zwischen den Versionen

Aus kvwmap
Wechseln zu: Navigation, Suche
(Migration von kvwmap Version 2.7 auf Version 2.8)
 
(18 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Auf dieser Seite wird beschrieben, wie man das vollständige PostNAS-Datenmodell erzeugt und einrichtet, NAS-Daten einspielt und mit kvwmap darauf zugreifen kann.
 
  
==Voraussetzungen==
+
Das von kvwmap verwendete PostNAS-Datenmodell wurde mit dem Tool [https://github.com/pkorduan/xmi2db xmi2db] auf Basis des [http://gdi-service.de/xmi2db/xmis/2016-04-01_ImplModell_AAA-xmi12-uml14.xmi AAA-Implementierungsmodells] erzeugt und bildet das ALKIS-Datenmodell vollständig ab.
 +
Bei der Erstellung des alkis-Schemas für kvwmap wurden folgende Konstanten eingestellt:
 +
* GEOMETRY_COLUMN_NAME = wkb_geometry
 +
* GEOMETRY_EPSG_CODE = 25833
 +
* LINESTRING_AS_GEOMETRY = true
 +
* WITH_UUID_OSSP = true
 +
* RENAME_OPTIONAL_FIRST = true
 +
* RENAME_ZEIGT_AUF_EXTERNES = false
 +
* WITH_CODE_LISTS = true
  
* ein aktuelles GDAL ([http://trac.wheregroup.com/PostNAS/wiki/BuildingOgrPostNASDriver Anleitung])
+
Das in kvwmap verwendete alkis-Schema und die gfs-Datei entspricht der Ausgabe von xmi2db vom 16.11.2017.
* libxml-ruby
+
  
== Erstellung eines PostNAS-Schemas ==
+
Das Datenbankschema heißt "alkis" und wird bei Aktivierung des Plugins ALKIS durch Ausführung von Migrationsdateien bei der Aktualisierung der Datenbank automatisch angelegt.
 +
Bei dieser DB-Aktualiserung werden neben dem Basisschema außerdem weitere Tabellen, Sichten und Indizes angelegt, die von kvwmap benötigt werden.
  
Das in dieser Anleitung verwendete PostNAS-Basisschema wurde mit dem Tool [https://github.com/pkorduan/xmi2db xmi2db] auf Basis des [http://gdi-service.de/xmi2db/xmis/2016-04-01_ImplModell_AAA-xmi12-uml14.xmi AAA-Implementierungsmodells] erzeugt. Bei Bedarf kann mit xmi2db auch selbst ein Schema erzeugt und verwendet werden.
 
Für die Verwendung mit kvwmap muss das Schema "alkis" heißen.
 
  
* Das Datenbankschema wird erstellt, indem die nachfolgenden SQL-Dateien ausgeführt werden. Diese sind in der nachstehenden Reihenfolge auszuführen.  
+
=== Migration von kvwmap Version 2.7 auf Version 2.8 ===
  
:*[http://www.kvwmap.de/alkis/complete/1_complete_alkis_schema.sql 1_complete_alkis_schema.sql]     das mit xmi2db erstellte Basisschema - Stand: 02.02.2017
+
Wenn ein kvwmap-Server von Version 2.7 auf Version 2.8 umgestellt werden soll und bisher auch schon das alte PostNAS-Schema verwendet wurde, sind mehrere Schritte für die Umstellung notwendig.  
  
:*[http://www.kvwmap.de/alkis/complete/2_alkis_indizes.sql 2_alkis_indizes.sql]     Indizes für die performante Abfrage der Daten - Stand: 22.03.2017
+
Damit die Umstellung eines Produktivsystems möglichst ohne große Ausfallzeit erfolgen kann, wird folgende Vorgehensweise empfohlen:
  
:*[http://www.kvwmap.de/alkis/complete/3_alkis-functions.sql 3_alkis-functions.sql]     Funktionen - Stand: 23.01.2017
 
  
:*[http://www.kvwmap.de/alkis/complete/4_weitere_keytables.sql 4_weitere_keytables.sql]     weitere Schlüsseltabellen - Stand: 23.01.2017
+
'''1. Erstellung einer Testumgebung durch Kopieren der kvwmap-Installation'''
  
:*[http://www.kvwmap.de/alkis/complete/5_weitere_tables.sql 5_weitere_tables.sql]     weitere Tabellen - Stand: 23.01.2017
+
Die vorhandene kvwmap-Installation wird kopiert. D.h. das kvwmap-Webverzeichnis, die MySQL-DB und die PostGIS-DB. Diese Kopie wird lauffähig gemacht (Anpassen der config.php, Web-Verzeichnis freigeben). In der weiteren Beschreibung wird von folgendem Beispiel ausgegangen:
  
:*[http://www.kvwmap.de/alkis/complete/6_pp_definition.sql 6_pp_definition.sql]     Postprocessing-Tabellen - Stand: 23.01.2017
+
<table cellpadding="4" border="1" style="border-collapse:collapse">
 +
<tr>
 +
  <td></td><td>'''Produktivsystem'''</td><td>'''Testsystem'''</td>
 +
</tr>
 +
<tr>
 +
  <td>'''Webverzeichnis'''</td><td>kvwmap</td><td>kvwmap_test</td>
 +
</tr>
 +
<tr>
 +
  <td>'''MySQL-DB'''</td><td>kvwmapdb</td><td>kvwmapdb_test</td>
 +
</tr>
 +
<tr>
 +
  <td>'''PostGIS-DB'''</td><td>kvwmapsp</td><td>kvwmapsp_test</td>
 +
</tr>
 +
</table>
  
:*[http://www.kvwmap.de/alkis/complete/7_nutzungsart_definition.sql 7_nutzungsart_definition.sql] &nbsp;&nbsp;&nbsp; Postprocessing-Tabellen für die Nutzungen - Stand: 02.10.2015
 
  
 +
'''2. In kvwmapsp_test: Umbenennung des Schemas "alkis" in "alkis_alt"'''
  
: Sichten todo
+
In der Test-DB "'''kvwmapsp_test'''" wird das vorhandene Schema "'''alkis'''" in "'''alkis_alt'''" (oder ähnliches) umbenannt.
  
== Einspielen der NAS-Daten ==
 
  
=== Umbenennungsskript ===
+
'''3. In kvwmap_test: Update des Quellcodes und der Datenbanken'''
  
Damit die NAS-Daten mit OGR korrekt in das vollständige PostNAS-Schema eingelesen werden können, müssen vorher bestimmte Attribute in den NAS-Dateien umbenannt werden. Diese Umbenennung erfolgt mit dem Ruby-Skript [https://raw.githubusercontent.com/pkorduan/xmi2db/master/converter/rename_nas.rb rename_nas.rb] aus dem xmi2db-Projekt. Welche Attribute wie umbenannt werden sollen, wird durch eine Umbenennungsliste definiert. Die zum aktuellen Schema passende Umbennungsliste befindet sich in conf/samples/umbenenn_conf.json. Damit das Umbenennungsskript diese Liste verwenden kann, muss sie einfach einen Ordner höher in conf/ abgelegt werden.
+
In "'''kvwmap_test'''" wird in den develop-Branch gewechselt (git checkout develop). Dieser Branch beinhaltet die Unterstützung für das vollständige PostNAS-Schema.
  
=== GFS-Template ===
+
Danach werden über die Administratoroberfläche zunächst der Quellcode und danach die Datenbanken aktualisiert. Dadurch wird das neue, vollständige Schema "'''alkis'''" in der PostGIS-DB angelegt.
  
Damit OGR die Daten aus den NAS-Dateien mit dem korrekten Datentyp in die Datenbank einliest, wird eine gfs-Datei verwendet, die das komplette ALKIS-Schema abbildet. Diese gfs-Datei wurde auch mit xmi2db auf Basis des AAA-Implementierungsmodells erzeugt.
 
  
:[http://www.kvwmap.de/alkis/complete/alkis_template.gfs alkis_template.gfs] &nbsp;&nbsp;&nbsp; GFS-Template - Stand: 02.02.2017
+
'''4. In kvwmapsp_test: Einlesen eines neuen Grunddatenbestandes'''
  
Wenn diese GFS-Datei nicht verwendet wird, ermittelt OGR den Datentyp automatisch an Hand der NAS-Daten. Dabei kann es vorkommen, dass z.B. führende Nullen abgeschnitten werden o.ä.
+
Das neue Schema "alkis" wird mit einem neuen Grunddatenbestand befüllt. Siehe [[ALKIS-Daten einlesen]].
  
=== Einleseskript ===
 
  
Hat man das Umbenennungsskript, die Umbenennungsliste und das GFS-Template auf seinem Server abgelegt, kann der Einlesevorgang beginnen. Folgendes einfaches Einleseskript kann dafür verwendet werden.
+
'''5. In kvwmapsp_test: Anpassung der Sichten, Funktionen, Regeln, usw.'''
  
:[http://www.kvwmap.de/alkis/complete/import_nas.sh import_nas.sh] &nbsp;&nbsp;&nbsp; Einleseskript - Stand: 02.02.2017
+
Alle Sichten, Funktionen, Regeln, usw., die auf das alte Schema "alkis" zugegriffen haben, müssen angepasst werden.  
  
*Das Einleseskript durchläuft alle NAS-Dateien im angegebenen Ordner und benennt sie mit Hilfe des Umbenennungsskripts um. Die umbenannte Version der NAS-Datei wird als ..._renamed.xml neben der originalen NAS-Datei abgelegt.
+
Bei Sichten ist es so, dass diese durch die Umbenennung vom alten Schema "alkis" in "alkis_alt" jetzt auch auf "alkis_alt" zugreifen. Dies muss angepasst werden, so dass sie wieder auf das neue Schema "alkis" zugreifen. Außerdem muss die andere Struktur des neuen Schemas "alkis" berücksichtigt werden.
*Dann wird eine Kopie des GFS-Templates dort abgelegt. Sie heißt genauso, wie die umbenannte NAS-Datei (..._renamed.gfs).
+
*Anschliessend wird ogr2ogr aufgerufen, um die umbenannte NAS-Datei einzulesen.
+
*Danach wird die umbenannte NAS-Datei wieder gelöscht.
+
  
=== Postprocessing ===
+
Auch Triggerfunktionen, Funktionen und Regeln müssen auf die Struktur des neuen Schemas "alkis" angepasst werden.
  
Nach dem Einlesen der Daten müssen die folgenden beiden Postprocessing-Skripte ausgeführt werden:
+
'''!!! WICHTIG: Alle diese Anpassungen müssen in einem SQL-Skript festgehalten werden, welches man dann später auf der PostGIS-DB "kvwmapsp" des Produktivsystems ausführen kann. !!!'''
  
:*[http://www.kvwmap.de/alkis/complete/pp_laden.sql pp_laden.sql] &nbsp;&nbsp;&nbsp; Postprocessing - Stand: 26.01.2017
 
:*[http://www.kvwmap.de/alkis/complete/nutzungsart_laden.sql nutzungsart_laden.sql] &nbsp;&nbsp;&nbsp; Postprocessing Nutzungen - Stand: 23.01.2017
 
  
 +
'''6. In kvwmapdb_test: Anpassung der Layerdefinitionen'''
  
== Prüfung von NAS-Dateien auf Validität mit xmllint ==
+
Im Test-System müssen alle Layerdefinitionen, die auf das Schema "alkis" zugreifen, auf die neue Datenstruktur angepasst werden.
Vor dem Einlesen der Daten ist eine Prüfung der NAS-Dateien mit '''xmllint''' auf Validität gegen das Schema NAS 6.0.1 der ADV zu empfehlen.<br>
+
Beispiel:
+
  
xmllint --nowarning --noout --schema pfad_zum_schema/NAS_6.0.1/schema/NAS-Operationen.xsd pfad_zu_nas/beispiel.xml
+
'''!!! WICHTIG: Auch diese Anpassungen müssen in einem SQL-Skript festgehalten werden, welches man dann später auf der MySQL-DB "kvwmapdb" des Produktivsystems ausführen kann. !!!'''
  
Das Tool '''xmllint''' wird über das Paket libxml2-utils unter linux zur Verfügung gestellt. Es ist eine aktuelle Version ab 2.9 erforderlich.<br>
 
Das Ergebnis der Prüfung wird mit "validates" oder eine detailierte Fehlermeldung und "fails to validate" ausgegeben.<br>
 
Das notwendige Schema kann auf den Seiten der ADV als ZIP heruntergeladen und dann lokal entpackt installiert werden.<br>
 
Link zum Schema: [http://www.adv-online.de/icc/extdeu/med/704/70425220-0746-2210-3ca0-c0608a438ad1,11111111-1111-1111-1111-111111111111 NAS 6.0.1]
 
  
Wichtig: Es sollten nur valide Daten eingespielt werden!
+
'''7. Umstellung des Produktivsystems'''
  
 +
Wenn alle Anpassungen in der PostGIS-DB "kvwmapsp_test" und der MySQL-DB "kvwmapdb_test" vorgenommen worden sind und das Testsystem mit dem neuen Schema gründlich getestet wurde, kann das Produktivsystem umgestellt werden.
  
== Zugriff mit kvwmap ==
+
Dazu werden die Schritte 2 - 4 nun auf dem Produktivsystem in kvmwapsp ausgeführt. Schritt 4 kann auch erfolgen in dem man vom ALKIS-Schema in kvwmapsp_test ein dump ausführt und ein restore in kvwmapsp einspielt oder durch Ausführen der Transaktionsdateien.
  
=== Layerdefinitionen ===
+
Danach werden die beiden Änderungsskripte auf der MySQL-DB "kvwmapdb" und der PostGIS-DB "kvwmapsp" ausgeführt.
  
[[Gruppen_und_Themen_für_ALKIS|Hier findet man die Gruppen und Themen für ALKIS]]
+
Da bei dem restore des alkis-Schemas in kvwmapsp Probleme auftreten können wegen Abhängigkeiten haben wir eine 4 Stufige Lösung:
  
== Mapdatei ==
+
* Neue Datenbank kvwmapsp_neu anlegen und darin CREATE EXTENSION postgis
 
+
* Dann in kvwmapsp_neu alkis Schema aus kvwmapsp_test einlesen mit pg_restore
:*[http://www.kvwmap.de/alkis/alkis.map alkis.map] &nbsp;&nbsp;&nbsp; Stand 15.08.2014
+
* Dump aller Schemata außer alkis (-N alkis) von kvwmapsp und einspielen mit pg_restore in kvwmapsp_neu
 
+
* Umbenennen kvwmapsp nach kvwmapsp_alt und kvwmapsp_neu nach kvwmapsp
== Testdaten ==
+
 
+
Zum Testen eigenen sich NAS-Daten aus der DHK, die aus einem NBA-Verfahren stammen. Wer noch keine eigenen NBA-Daten hat, kann zunächst mit Testdaten arbeiten. Erfolgreich getestet wurden Daten aus MV vom LAiV und Daten aus Brandenburg, die auch in EPSG 25833 liegen.
+
 
+
'''Testdaten:'''
+
*ALKIS®-Beispieldaten Brandenburg: [http://www.geobasis-bb.de/GeoPortal1/produkte/aaa-testdaten.html]
+
 
+
*ALKIS®-Beispieldaten Mecklenburg-Vorpommern vom LAiV: [http://www.laiv-mv.de/land-mv/LAiV_prod/LAiV/AfGVK/Projekt_AAA/ALKIS/index.jsp]
+
: Hier findet man Beispieldaten zum Testen (kostenlos).
+

Aktuelle Version vom 29. November 2017, 17:26 Uhr

Das von kvwmap verwendete PostNAS-Datenmodell wurde mit dem Tool xmi2db auf Basis des AAA-Implementierungsmodells erzeugt und bildet das ALKIS-Datenmodell vollständig ab. Bei der Erstellung des alkis-Schemas für kvwmap wurden folgende Konstanten eingestellt:

  • GEOMETRY_COLUMN_NAME = wkb_geometry
  • GEOMETRY_EPSG_CODE = 25833
  • LINESTRING_AS_GEOMETRY = true
  • WITH_UUID_OSSP = true
  • RENAME_OPTIONAL_FIRST = true
  • RENAME_ZEIGT_AUF_EXTERNES = false
  • WITH_CODE_LISTS = true

Das in kvwmap verwendete alkis-Schema und die gfs-Datei entspricht der Ausgabe von xmi2db vom 16.11.2017.

Das Datenbankschema heißt "alkis" und wird bei Aktivierung des Plugins ALKIS durch Ausführung von Migrationsdateien bei der Aktualisierung der Datenbank automatisch angelegt. Bei dieser DB-Aktualiserung werden neben dem Basisschema außerdem weitere Tabellen, Sichten und Indizes angelegt, die von kvwmap benötigt werden.


Migration von kvwmap Version 2.7 auf Version 2.8

Wenn ein kvwmap-Server von Version 2.7 auf Version 2.8 umgestellt werden soll und bisher auch schon das alte PostNAS-Schema verwendet wurde, sind mehrere Schritte für die Umstellung notwendig.

Damit die Umstellung eines Produktivsystems möglichst ohne große Ausfallzeit erfolgen kann, wird folgende Vorgehensweise empfohlen:


1. Erstellung einer Testumgebung durch Kopieren der kvwmap-Installation

Die vorhandene kvwmap-Installation wird kopiert. D.h. das kvwmap-Webverzeichnis, die MySQL-DB und die PostGIS-DB. Diese Kopie wird lauffähig gemacht (Anpassen der config.php, Web-Verzeichnis freigeben). In der weiteren Beschreibung wird von folgendem Beispiel ausgegangen:

ProduktivsystemTestsystem
Webverzeichniskvwmapkvwmap_test
MySQL-DBkvwmapdbkvwmapdb_test
PostGIS-DBkvwmapspkvwmapsp_test


2. In kvwmapsp_test: Umbenennung des Schemas "alkis" in "alkis_alt"

In der Test-DB "kvwmapsp_test" wird das vorhandene Schema "alkis" in "alkis_alt" (oder ähnliches) umbenannt.


3. In kvwmap_test: Update des Quellcodes und der Datenbanken

In "kvwmap_test" wird in den develop-Branch gewechselt (git checkout develop). Dieser Branch beinhaltet die Unterstützung für das vollständige PostNAS-Schema.

Danach werden über die Administratoroberfläche zunächst der Quellcode und danach die Datenbanken aktualisiert. Dadurch wird das neue, vollständige Schema "alkis" in der PostGIS-DB angelegt.


4. In kvwmapsp_test: Einlesen eines neuen Grunddatenbestandes

Das neue Schema "alkis" wird mit einem neuen Grunddatenbestand befüllt. Siehe ALKIS-Daten einlesen.


5. In kvwmapsp_test: Anpassung der Sichten, Funktionen, Regeln, usw.

Alle Sichten, Funktionen, Regeln, usw., die auf das alte Schema "alkis" zugegriffen haben, müssen angepasst werden.

Bei Sichten ist es so, dass diese durch die Umbenennung vom alten Schema "alkis" in "alkis_alt" jetzt auch auf "alkis_alt" zugreifen. Dies muss angepasst werden, so dass sie wieder auf das neue Schema "alkis" zugreifen. Außerdem muss die andere Struktur des neuen Schemas "alkis" berücksichtigt werden.

Auch Triggerfunktionen, Funktionen und Regeln müssen auf die Struktur des neuen Schemas "alkis" angepasst werden.

!!! WICHTIG: Alle diese Anpassungen müssen in einem SQL-Skript festgehalten werden, welches man dann später auf der PostGIS-DB "kvwmapsp" des Produktivsystems ausführen kann. !!!


6. In kvwmapdb_test: Anpassung der Layerdefinitionen

Im Test-System müssen alle Layerdefinitionen, die auf das Schema "alkis" zugreifen, auf die neue Datenstruktur angepasst werden.

!!! WICHTIG: Auch diese Anpassungen müssen in einem SQL-Skript festgehalten werden, welches man dann später auf der MySQL-DB "kvwmapdb" des Produktivsystems ausführen kann. !!!


7. Umstellung des Produktivsystems

Wenn alle Anpassungen in der PostGIS-DB "kvwmapsp_test" und der MySQL-DB "kvwmapdb_test" vorgenommen worden sind und das Testsystem mit dem neuen Schema gründlich getestet wurde, kann das Produktivsystem umgestellt werden.

Dazu werden die Schritte 2 - 4 nun auf dem Produktivsystem in kvmwapsp ausgeführt. Schritt 4 kann auch erfolgen in dem man vom ALKIS-Schema in kvwmapsp_test ein dump ausführt und ein restore in kvwmapsp einspielt oder durch Ausführen der Transaktionsdateien.

Danach werden die beiden Änderungsskripte auf der MySQL-DB "kvwmapdb" und der PostGIS-DB "kvwmapsp" ausgeführt.

Da bei dem restore des alkis-Schemas in kvwmapsp Probleme auftreten können wegen Abhängigkeiten haben wir eine 4 Stufige Lösung:

  • Neue Datenbank kvwmapsp_neu anlegen und darin CREATE EXTENSION postgis
  • Dann in kvwmapsp_neu alkis Schema aus kvwmapsp_test einlesen mit pg_restore
  • Dump aller Schemata außer alkis (-N alkis) von kvwmapsp und einspielen mit pg_restore in kvwmapsp_neu
  • Umbenennen kvwmapsp nach kvwmapsp_alt und kvwmapsp_neu nach kvwmapsp