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)
 
(21 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
  
 +
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.
  
== Erstellung eines PostNAS-Schemas ==
 
  
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.
+
=== Migration von kvwmap Version 2.7 auf Version 2.8 ===
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.  
+
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/1_complete_alkis_schema.sql 1_complete_alkis_schema.sql]     das mit xmi2db erstellte Basisschema - Stand: 17.01.2017
+
Damit die Umstellung eines Produktivsystems möglichst ohne große Ausfallzeit erfolgen kann, wird folgende Vorgehensweise empfohlen:
  
:*[http://www.kvwmap.de/alkis/complete/2_alkis_indizes.sql 2_alkis_indizes.sql]     Indizes für die performante Abfrage der Daten - Stand: 20.01.2017
 
  
:*[http://www.kvwmap.de/alkis/complete/3_alkis-functions.sql 3_alkis-functions.sql]     Funktionen - Stand: 23.01.2017
+
'''1. Erstellung einer Testumgebung durch Kopieren der kvwmap-Installation'''
  
:*[http://www.kvwmap.de/alkis/complete/4_weitere_keytables.sql 4_weitere_keytables.sql]     weitere Schlüsseltabellen - 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/5_weitere_tables.sql 5_weitere_tables.sql]     weitere 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/6_pp_definition.sql 6_pp_definition.sql] &nbsp;&nbsp;&nbsp; Postprocessing-Tabellen - Stand: 23.01.2017
 
  
:*[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"'''
  
 +
In der Test-DB "'''kvwmapsp_test'''" wird das vorhandene Schema "'''alkis'''" in "'''alkis_alt'''" (oder ähnliches) umbenannt.
  
: Sichten todo
 
  
 +
'''3. In kvwmap_test: Update des Quellcodes und der Datenbanken'''
  
== Einspielen der NAS-Daten ==
+
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.
  
=== Umbenennungsskript ===
+
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 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.
 
  
=== GFS-Template ===
+
'''4. In kvwmapsp_test: Einlesen eines neuen Grunddatenbestandes'''
  
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.
+
Das neue Schema "alkis" wird mit einem neuen Grunddatenbestand befüllt. Siehe [[ALKIS-Daten einlesen]].
  
:[http://www.kvwmap.de/alkis/complete/alkis_template.gfs alkis_template.gfs] &nbsp;&nbsp;&nbsp; GFS-Template - Stand: 02.02.2017
 
  
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.ä.
+
'''5. In kvwmapsp_test: Anpassung der Sichten, Funktionen, Regeln, usw.'''
  
=== Einleseskript ===
+
Alle Sichten, Funktionen, Regeln, usw., die auf das alte Schema "alkis" zugegriffen haben, müssen angepasst werden.
  
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.
+
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.
  
:[http://www.kvwmap.de/alkis/complete/import_nas.sh import_nas.sh] &nbsp;&nbsp;&nbsp; Einleseskript - Stand: 02.02.2017
+
Auch Triggerfunktionen, Funktionen und Regeln müssen auf die Struktur des neuen Schemas "alkis" 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.
+
'''!!! 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. !!!'''
*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 ===
 
  
Nach dem Einlesen der Daten müssen die folgenden beiden Postprocessing-Skripte ausgeführt werden:
+
'''6. In kvwmapdb_test: Anpassung der Layerdefinitionen'''
  
:*[http://www.kvwmap.de/alkis/complete/pp_laden.sql pp_laden.sql] &nbsp;&nbsp;&nbsp; Postprocessing - Stand: 26.01.2017
+
Im Test-System müssen alle Layerdefinitionen, die auf das Schema "alkis" zugreifen, auf die neue Datenstruktur angepasst werden.
:*[http://www.kvwmap.de/alkis/complete/nutzungsart_laden.sql nutzungsart_laden.sql] &nbsp;&nbsp;&nbsp; Postprocessing Nutzungen - Stand: 23.01.2017
+
  
 +
'''!!! 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. !!!'''
  
== Prüfung von NAS-Dateien auf Validität mit xmllint ==
 
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
+
'''7. Umstellung des Produktivsystems'''
  
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>
+
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.
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!
+
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.
  
== Zugriff mit kvwmap ==
+
Da bei dem restore des alkis-Schemas in kvwmapsp Probleme auftreten können wegen Abhängigkeiten haben wir eine 4 Stufige Lösung:
  
=== Layerdefinitionen ===
+
* Neue Datenbank kvwmapsp_neu anlegen und darin CREATE EXTENSION postgis
 
+
* Dann in kvwmapsp_neu alkis Schema aus kvwmapsp_test einlesen mit pg_restore
[[Gruppen_und_Themen_für_ALKIS|Hier findet man die Gruppen und Themen für ALKIS]]
+
* 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
== Mapdatei ==
+
 
+
:*[http://www.kvwmap.de/alkis/alkis.map alkis.map] &nbsp;&nbsp;&nbsp; Stand 15.08.2014
+
 
+
== 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, 16: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