From d405666960d4d76ee2ce04c0326fad54ba1ae7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20E=2E=20Fischer?= Date: Wed, 13 Dec 2017 08:47:04 +0100 Subject: [PATCH] =?UTF-8?q?*=20Alle=20SQL-Skripte=20mit=20ON=5FERROR=5FSTO?= =?UTF-8?q?P=3D1=20ausf=C3=BChren=20*=20Exception=20beim=20Anlagen=20des?= =?UTF-8?q?=20Schemas=20abfangen,=20statt=20Existenz=20pr=C3=BCfen.=20*=20?= =?UTF-8?q?GDAL1-Unterst=C3=BCtzung=20entfernen=20*=20Ausgabe=20der=20Jobs?= =?UTF-8?q?=20nicht=20mehr=20gruppieren=20*=20Fehlerhafte=20Jobs=20melden,?= =?UTF-8?q?=20statt=20abzubrechen=20*=20Unkomprimierte=20Gesamtgr=C3=B6?= =?UTF-8?q?=C3=9Fe=20mitprotokollieren=20*=20alkis-compat.sql=20&=20alkis-?= =?UTF-8?q?po-tables.sql=20in=20alkis-init.sql=20statt=20separat=20laden.?= =?UTF-8?q?=20*=20alkis-schema.sql:=20in=20Transaktion=20anlegen=20und=20:?= =?UTF-8?q?postgis=5Fschema=20in=20Suchpfad=20=20=20einf=C3=BCgen=20*=20Po?= =?UTF-8?q?stGIS-Schema=20in=20active=5Fschema=20beim=20ogr2ogr=20einbezie?= =?UTF-8?q?hen=20(hacky)=20*=20nas2alb.sql:=20strassen.hausnr:=20character?= =?UTF-8?q?(8)=20=3D>=20varchar=20*=20ANALYZE=20bei=20Ableitungsregeln=20*?= =?UTF-8?q?=20Fortschrittmeldung=20vereinheitlicht=20(bearbeitet=20=3D>=20?= =?UTF-8?q?verarbeitet).=20*=20Mehrere=20Lagebezeichnungen=20f=C3=BCr=20ei?= =?UTF-8?q?nen=20Turm/ein=20Geb=C3=A4ude=20*=20B=C3=B6schungserzeugung=20v?= =?UTF-8?q?erbessert=20(s.=202cf043924)=20*=20Tempor=C3=A4res=20Verzeichni?= =?UTF-8?q?s=20statt=20tempor=C3=A4re=20Dateien=20verwenden=20*=203=5Fnas2?= =?UTF-8?q?alb.sql=20parallelisiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO | 0 alkis-clean.sql | 3 - alkis-compat.sql | 6 + alkis-functions.sql | 27 +- alkis-import.sh | 133 ++-- alkis-inherit.sql | 3 - alkis-init.sql | 28 +- alkis-po-tables.sql | 10 +- alkis-schema.sql | 9 +- alkis-trigger.sql | 3 - alkis-update.sql | 3 +- alkis-wertearten.sql | 1 - alkisImport.py | 30 +- postcreate.d/nas2alb.sql | 2 +- postprocessing.d/0_ableitungsregeln.sql | 10 + postprocessing.d/1_ableitungsregeln/11002.sql | 4 +- postprocessing.d/1_ableitungsregeln/11003.sql | 2 +- postprocessing.d/1_ableitungsregeln/12002.sql | 12 +- postprocessing.d/1_ableitungsregeln/41002.sql | 2 +- postprocessing.d/1_ableitungsregeln/41003.sql | 2 +- postprocessing.d/1_ableitungsregeln/41004.sql | 2 +- postprocessing.d/1_ableitungsregeln/41005.sql | 2 +- postprocessing.d/1_ableitungsregeln/41006.sql | 2 +- postprocessing.d/1_ableitungsregeln/41007.sql | 2 +- postprocessing.d/1_ableitungsregeln/41008.sql | 2 +- postprocessing.d/1_ableitungsregeln/41009.sql | 2 +- postprocessing.d/1_ableitungsregeln/42006.sql | 2 +- postprocessing.d/1_ableitungsregeln/42009.sql | 2 +- postprocessing.d/1_ableitungsregeln/42010.sql | 2 +- postprocessing.d/1_ableitungsregeln/42015.sql | 2 +- postprocessing.d/1_ableitungsregeln/42016.sql | 2 +- postprocessing.d/1_ableitungsregeln/43001.sql | 2 +- postprocessing.d/1_ableitungsregeln/43002.sql | 2 +- postprocessing.d/1_ableitungsregeln/43003.sql | 2 +- postprocessing.d/1_ableitungsregeln/43004.sql | 2 +- postprocessing.d/1_ableitungsregeln/43005.sql | 2 +- postprocessing.d/1_ableitungsregeln/43006.sql | 2 +- postprocessing.d/1_ableitungsregeln/43007.sql | 2 +- postprocessing.d/1_ableitungsregeln/44001.sql | 2 +- postprocessing.d/1_ableitungsregeln/44005.sql | 2 +- postprocessing.d/1_ableitungsregeln/44006.sql | 2 +- postprocessing.d/1_ableitungsregeln/44007.sql | 2 +- postprocessing.d/1_ableitungsregeln/51002.sql | 2 +- postprocessing.d/1_ableitungsregeln/51003.sql | 2 +- postprocessing.d/1_ableitungsregeln/51004.sql | 2 +- postprocessing.d/1_ableitungsregeln/51005.sql | 2 +- postprocessing.d/1_ableitungsregeln/51006.sql | 2 +- postprocessing.d/1_ableitungsregeln/51007.sql | 2 +- postprocessing.d/1_ableitungsregeln/51008.sql | 2 +- postprocessing.d/1_ableitungsregeln/51009.sql | 2 +- postprocessing.d/1_ableitungsregeln/51010.sql | 2 +- postprocessing.d/1_ableitungsregeln/53001.sql | 2 +- postprocessing.d/1_ableitungsregeln/53002.sql | 2 +- postprocessing.d/1_ableitungsregeln/53003.sql | 2 +- postprocessing.d/1_ableitungsregeln/53004.sql | 2 +- postprocessing.d/1_ableitungsregeln/53005.sql | 2 +- postprocessing.d/1_ableitungsregeln/53007.sql | 2 +- postprocessing.d/1_ableitungsregeln/53008.sql | 2 +- postprocessing.d/1_ableitungsregeln/53009.sql | 2 +- postprocessing.d/1_ableitungsregeln/55001.sql | 2 +- postprocessing.d/1_ableitungsregeln/55006.sql | 2 +- postprocessing.d/1_ableitungsregeln/59102.sql | 2 +- postprocessing.d/1_ableitungsregeln/59103.sql | 2 +- postprocessing.d/1_ableitungsregeln/59109.sql | 2 +- postprocessing.d/1_ableitungsregeln/59201.sql | 2 +- postprocessing.d/1_ableitungsregeln/59202.sql | 2 +- postprocessing.d/1_ableitungsregeln/59206.sql | 2 +- postprocessing.d/1_ableitungsregeln/59207.sql | 2 +- postprocessing.d/1_ableitungsregeln/59301.sql | 2 +- postprocessing.d/1_ableitungsregeln/59401.sql | 2 +- postprocessing.d/1_ableitungsregeln/59402.sql | 2 +- postprocessing.d/1_ableitungsregeln/61001.sql | 169 +++- postprocessing.d/3_nas2alb.sql | 736 +----------------- postprocessing.d/4_nas2alb/1_flurst.sql | 78 ++ postprocessing.d/4_nas2alb/2_strassen.sql | 46 ++ postprocessing.d/4_nas2alb/3_eignerart.sql | 42 + postprocessing.d/4_nas2alb/4_bestand.sql | 112 +++ .../4_nas2alb/5_klassifizierung.sql | 123 +++ postprocessing.d/4_nas2alb/6_nutzung.sql | 142 ++++ postprocessing.d/4_nas2alb/7_stellen.sql | 120 +++ postprocessing.d/4_postnas-keytables.sql | 1 - postprocessing.d/5_nas2alb.sql | 96 +++ postupdate.d/nas2alb.sql | 2 + preprocessing.d/0_alkis-signaturen.sql | 1 - re | 8 +- 85 files changed, 1115 insertions(+), 953 deletions(-) delete mode 100644 TODO mode change 100755 => 100644 alkis-import.sh create mode 100644 postprocessing.d/4_nas2alb/1_flurst.sql create mode 100644 postprocessing.d/4_nas2alb/2_strassen.sql create mode 100644 postprocessing.d/4_nas2alb/3_eignerart.sql create mode 100644 postprocessing.d/4_nas2alb/4_bestand.sql create mode 100644 postprocessing.d/4_nas2alb/5_klassifizierung.sql create mode 100644 postprocessing.d/4_nas2alb/6_nutzung.sql create mode 100644 postprocessing.d/4_nas2alb/7_stellen.sql create mode 100644 postprocessing.d/5_nas2alb.sql diff --git a/TODO b/TODO deleted file mode 100644 index e69de29..0000000 diff --git a/alkis-clean.sql b/alkis-clean.sql index 6c15984..b0fefa6 100644 --- a/alkis-clean.sql +++ b/alkis-clean.sql @@ -17,9 +17,6 @@ SET client_encoding = 'UTF8'; SET search_path = :"postgis_schema", public; --- Abbruch bei Fehlern -\set ON_ERROR_STOP - -- Stored Procedures laden \i alkis-functions.sql diff --git a/alkis-compat.sql b/alkis-compat.sql index 92d364f..c05876e 100644 --- a/alkis-compat.sql +++ b/alkis-compat.sql @@ -14,6 +14,9 @@ * * ***************************************************************************/ +\unset ON_ERROR_STOP +\unset ECHO + SET search_path = public; CREATE FUNCTION unnest(anyarray) RETURNS SETOF anyelement AS $$ @@ -421,3 +424,6 @@ BEGIN RETURN res; END; $$ LANGUAGE plpgsql IMMUTABLE; + +\set ON_ERROR_STOP +\set ECHO errors diff --git a/alkis-functions.sql b/alkis-functions.sql index 160bf73..6adbd12 100644 --- a/alkis-functions.sql +++ b/alkis-functions.sql @@ -18,11 +18,12 @@ CREATE FUNCTION pg_temp.alkis_set_schema(t TEXT) RETURNS varchar AS $$ DECLARE i integer; BEGIN - SELECT count(*) INTO i FROM pg_catalog.pg_namespace WHERE nspname=t; - IF i = 0 THEN - EXECUTE 'CREATE SCHEMA '|| quote_ident(t); + BEGIN + EXECUTE 'CREATE SCHEMA ' || quote_ident(t); RAISE NOTICE 'Schema % angelegt.', t; - END IF; + EXCEPTION WHEN duplicate_schema OR unique_violation THEN + -- skip + END; PERFORM set_config('search_path', quote_ident(t) || ', ' || current_setting('search_path'), false); @@ -16457,6 +16458,24 @@ Erholung von Reisenden.'), COMMENT ON TABLE po_labels IS 'BASE: Beschriftungsobjekte'; UPDATE alkis_po_version SET version=2; + END IF; + + IF ver<3 THEN + RAISE NOTICE 'Migriere auf Schema-Version 3'; + + ALTER TABLE po_points DROP CONSTRAINT po_points_pkey; + ALTER TABLE po_points ADD CONSTRAINT po_points_pkey PRIMARY KEY(ogc_fid) DEFERRABLE INITIALLY DEFERRED; + + ALTER TABLE po_lines DROP CONSTRAINT po_lines_pkey; + ALTER TABLE po_lines ADD CONSTRAINT po_lines_pkey PRIMARY KEY(ogc_fid) DEFERRABLE INITIALLY DEFERRED; + + ALTER TABLE po_polygons DROP CONSTRAINT po_polygons_pkey; + ALTER TABLE po_polygons ADD CONSTRAINT po_polygons_pkey PRIMARY KEY(ogc_fid) DEFERRABLE INITIALLY DEFERRED; + + ALTER TABLE po_labels DROP CONSTRAINT po_labels_pkey; + ALTER TABLE po_labels ADD CONSTRAINT po_labels_pkey PRIMARY KEY(ogc_fid) DEFERRABLE INITIALLY DEFERRED; + + UPDATE alkis_po_version SET version=3; r := coalesce(r||E'\n','') || 'ALKIS-PO-Schema migriert'; END IF; diff --git a/alkis-import.sh b/alkis-import.sh old mode 100755 new mode 100644 index b45225f..54b8936 --- a/alkis-import.sh +++ b/alkis-import.sh @@ -42,15 +42,14 @@ export CRS="-a_srs EPSG:$EPSG" export FNBRUCH=true export PGVERDRAENGEN=false export SCHEMA=public +export PARENTSCHEMA= export PGSCHEMA=public -export PARENTSCHEMA=$PGSCHEMA -export PG_USE_COPY=YES B=${0%/*} # BASEDIR if [ "$0" = "$B" ]; then B=. fi -P=${0##*/} # PROGNAME +export P=${0##*/} # PROGNAME export NAS_GFS_TEMPLATE=$B/alkis-schema.gfs export NAS_NO_RELATION_LAYER=YES @@ -108,7 +107,7 @@ rund() { if [ -d "$dir.d" ]; then for i in $(ls -1d ${dir}.d/* | sort); do if [ -d "$i" ]; then - ls -1 $i/*.sql | sort | parallel --jobs=$JOBS sql + ls -1 $i/*.sql | sort | parallel --ungroup --jobs=$JOBS sql elif [ -r "$i" ]; then sql $i fi @@ -128,28 +127,36 @@ import() { case $src in *.zip) - dst="$TEMP/$(basename "$src" .zip).xml" + dst="$tmpdir/$(basename "$src" .zip).xml" echo "DECOMPRESS $(bdate): $src" - zcat "$src" >"$dst" + if ! zcat "$src" >"$dst"; then + rm -v "$dst" + echo "$P: $src konnte nicht extrahiert werden." >&2 + return 1 + fi rm=1 ;; *.xml.gz) if ! [ -r "$src" ]; then echo "$P: $src nicht gefunden oder nicht lesbar." >&2 - exit 1 + return 1 fi - dst="$TEMP/$(basename "$src" .gz)" + dst="$tmpdir/$(basename "$src" .gz)" echo "DECOMPRESS $(bdate): $src" - zcat "$src" >"$dst" + if ! zcat "$src" >"$dst"; then + rm -v "$dst" + echo "$P: $src konnte nicht extrahiert werden." >&2 + return 1 + fi rm=1 ;; *.xml) if ! [ -r "$src" ]; then echo "$P: $src nicht gefunden oder nicht lesbar." >&2 - exit 1 + return 1 fi dst="$src" @@ -157,7 +164,7 @@ import() { ;; *) echo "UNKNOWN FILE $src" - exit 1 + return 1 ;; esac @@ -165,7 +172,7 @@ import() { if ! [ -r "$dst" ]; then echo "$src => $dst" - exit 1 + return 1 fi trap "echo '$P: Fehler bei $src' >&2; src=error" EXIT @@ -174,27 +181,31 @@ import() { echo "IMPORT $(bdate): $dst $(memunits $s)" - sf_opt= if [ -n "$sfre" ] && eval [[ "$src" =~ "$sfre" ]]; then - sf_opt=-skipfailures + opt="$opt -skipfailures" fi + opt="$opt -ds_transaction --config PG_USE_COPY YES -nlt CONVERT_TO_LINEAR" - echo RUNNING: ogr2ogr -f $DRIVER $opt $sf_opt -update -append "$DST" $CRS "$dst" | sed -Ee 's/password=\S+/password=*removed*/' + echo RUNNING: ogr2ogr -f $DRIVER $opt -update -append "$DST" $CRS "$dst" | sed -Ee 's/password=\S+/password=*removed*/' ogr2ogr -f $DRIVER $opt $sf_opt -update -append "$DST" $CRS "$dst" + local r=$? t1=$(bdate +%s) progress $dst $s $t0 $t1 [ $rm == 1 ] && rm -v "$dst" trap "" EXIT + + return $r } export -f import process() { + local r=0 if [ -f "$job" ]; then if [ -z "$DST" ]; then echo "$P: Keine Datenbankverbindungsdaten angegeben" >&2 - exit 1 + return 1 fi if (( preprocessed == 0 )); then @@ -206,9 +217,11 @@ process() { export job export progress - parallel --jobs=$JOBS import <$job + parallel --ungroup --jobs=$JOBS import <$job + r=$? rm $job fi + return $r } progress() { @@ -253,7 +266,7 @@ remaining_size=$remaining_size last_time=$t1 EOF - rm $lock + rm -f $lock } export -f progress @@ -266,11 +279,12 @@ final() { if (( total_elapsed > 0 )); then echo "FINAL: $(memunits $total_size) in $(timeunits $start_time $last_time) ($(memunits $(( total_size / total_elapsed )))/s)" fi - rm -f $progress $lock + rm -rf $tmpdir } export LC_CTYPE=de_DE.UTF-8 export TEMP=${TEMP:-/tmp} +export TMPDIR=$TEMP if [ "$#" -ne 1 ]; then echo "usage: $P file" >&2 @@ -301,7 +315,6 @@ export B export DRIVER export DST export JOBS=-1 -export GDAL2_OPTS export opt opt= @@ -309,16 +322,6 @@ log= preprocessed=0 sfre= -case "$GDAL_VERSION" in -"GDAL 2."*) - GDAL2_OPTS=" -nlt CONVERT_TO_LINEAR -ds_transaction" - opt="$opt$GDAL2_OPTS" - ;; -*) - GDAL2_OPTS="" - ;; -esac - S=0 while read src do @@ -336,7 +339,7 @@ do ;; *.xml.gz) - s=$(gzip -ql "$src" | tr -s " " | cut -d" " -f3) + s=$(zcat "$src" | wc -c) ;; *.xml) @@ -352,27 +355,28 @@ do (( S += s )) done <$F -if (( S > 0 )); then - echo "$P: Unkomprimierte Gesamtgröße: $(memunits $S)" -fi - - export job= -export lock=$(mktemp -t nasXXXXXX.lock) -export progress=$(mktemp -t nasXXXXXX.progress) +export tmpdir=$(mktemp -d) +export lock=$tmpdir/nas.lock +export progress=$tmpdir/nas.progress +export jobi=0 cat <$progress total_size=$S remaining_size=$S EOF -rm $lock +rm -f $lock while read src do case $src in *.zip|*.xml.gz|*.xml) if [ -z "$job" ]; then - export job=$(mktemp -t nasXXXXXX.lst) + if (( S > 0 )); then + echo "$P: Unkomprimierte Gesamtgröße: $(memunits $S)" + fi + + export job=$tmpdir/$(( ++jobi )).lst fi echo $src >>$job continue @@ -403,10 +407,16 @@ do -v alkis_schema=$SCHEMA \ -v postgis_schema=$PGSCHEMA \ -v parent_schema=${PARENTSCHEMA:-$SCHEMA} \ - -q -f "$file" "$DB" + -v ON_ERROR_STOP=1 \ + -v ECHO=errors \ + --quiet \ + -f "$file" \ + "$DB" + local r=$? local t1=$(bdate +%s) - echo "SQL DONE: $file $(bdate) in $(timeunits $t0 $t1)" + echo "SQL DONE[$r]: $file $(bdate) in $(timeunits $t0 $t1)" popd >/dev/null + return $r } export -f sql runsql() { @@ -419,16 +429,29 @@ do restore() { if ! [ -r "$1.cpgdmp" ]; then echo "$P: $1.cpgdmp nicht gefunden oder nicht lesbar." >&2 - exit 1 + return 1 fi pg_restore -Fc -c "$1.cpgdmp" | psql "$DB" } export DB log() { - n=$(psql -t -c "SELECT count(*) FROM information_schema.tables WHERE table_schema='$SCHEMA' AND table_name='alkis_importlog'" "$DB") + n=$(psql -t -c "SELECT count(*) FROM pg_catalog.pg_namespace WHERE nspname='${SCHEMA//\'/\'\'}'" "$DB") + n=${n//[ ]/} + if [ $n -eq 0 ]; then + psql -q -c "CREATE SCHEMA \"${SCHEMA//\"/\"\"}\"" "$DB" + fi + + n=$(psql -t -c "SELECT count(*) FROM pg_catalog.pg_namespace WHERE nspname='${SCHEMA//\'/\'\'}'" "$DB") + n=${n//[ ]/} + if [ $n -eq 0 ]; then + echo "Schema $SCHEMA nicht erzeugt" >&2 + exit 1 + fi + + n=$(psql -t -c "SELECT count(*) FROM pg_catalog.pg_tables WHERE schemaname='${SCHEMA//\'/\'\'}' AND tablename='alkis_importlog'" "$DB") n=${n//[ ]/} if [ $n -eq 0 ]; then - psql -q -c "CREATE TABLE $SCHEMA.alkis_importlog(n SERIAL PRIMARY KEY, ts timestamp default now(), msg text)" "$DB" + psql -q -c "CREATE TABLE \"${SCHEMA//\"/\"\"}\".alkis_importlog(n SERIAL PRIMARY KEY, ts timestamp default now(), msg text)" "$DB" fi tee $1 | @@ -438,7 +461,7 @@ do while read m; do echo "$m" >&5 m=${m//\'/\'\'} - echo "INSERT INTO $SCHEMA.alkis_importlog(msg) VALUES (E'${m//\'/\'\'}');" + echo "INSERT INTO \"${SCHEMA//\"/\"\"}\".alkis_importlog(msg) VALUES (E'${m//\'/\'\'}');" done echo "\\q" ) | @@ -453,14 +476,17 @@ do user=${DB%%/*} DRIVER=OCI sql() { + local r pushd "$B/oci" >/dev/null if [ -f "$1" ]; then sqlplus "$DB" @$1 $EPSG + r=$? else echo "$1 not found" - exit 1 + return 1 fi popd >/dev/null + return $? } export -f sql runsql() { @@ -478,7 +504,7 @@ EOF restore() { if ! [ -r "$1.dmp" ]; then echo "$P: $1.dmp nicht gefunden oder nicht lesbar." >&2 - exit 1 + return 1 fi imp "$DB" file=$1.dmp log=$1-import.log fromuser=$user touser=$user @@ -488,12 +514,13 @@ EOF "pgschema "*) PGSCHEMA=${src#pgschema } + DST="${DST/ active_schema=*/} active_schema=$SCHEMA','$PGSCHEMA" continue ;; "schema "*) SCHEMA=${src#schema } - DST="${DST% active_schema=*} active_schema=$SCHEMA" + DST="${DST/ active_schema=*/} active_schema=$SCHEMA','$PGSCHEMA" continue ;; @@ -578,7 +605,7 @@ EOF exit 1 fi if [ -n "$PARENTSCHEMA" ]; then - echo "$P: Parentschema gesetzt!?" >&2 + echo "$P: Elterschema $PARENTSCHEMA gesetzt!?" >&2 exit 1 fi @@ -586,8 +613,6 @@ EOF pushd "$B" >/dev/null rund precreate sql alkis-init.sql - sql alkis-compat.sql - sql alkis-po-tables.sql rund postcreate popd >/dev/null @@ -616,13 +641,12 @@ EOF exit 1 fi if [ -n "$PARENTSCHEMA" ]; then - echo "$P: Parentschema gesetzt!?" >&2 + echo "$P: Elterschema $PARENTSCHEMA gesetzt!?" >&2 exit 1 fi echo "UPDATE $(bdate)" pushd "$B" >/dev/null - sql alkis-compat.sql rund preupdate sql alkis-update.sql rund postupdate @@ -660,7 +684,6 @@ EOF if [ "$DRIVER" = OCI ]; then opt="$opt -relaxedFieldNameMatch" fi - opt="$opt$GDAL2_OPTS" continue ;; diff --git a/alkis-inherit.sql b/alkis-inherit.sql index 672f270..aebd946 100644 --- a/alkis-inherit.sql +++ b/alkis-inherit.sql @@ -10,9 +10,6 @@ SET client_encoding = 'UTF8'; SET default_with_oids = false; SET search_path = :"alkis_schema", public; --- Abbruch bei Fehlern -\set ON_ERROR_STOP - -- Stored Procedures laden \i alkis-functions.sql diff --git a/alkis-init.sql b/alkis-init.sql index af22706..08bb768 100644 --- a/alkis-init.sql +++ b/alkis-init.sql @@ -1,10 +1,18 @@ -/****************************************************************************** - * - * Projekt: norGIS ALKIS Import - * Zweck: Initialisierung des ALKIS-Schema - * Author: Jürgen E. Fischer - * - ******************************************************************************/ +/*************************************************************************** + * * + * Projekt: norGIS ALKIS Import * + * Zweck: Initialisierung des ALKIS-Schema * + * Author: Jürgen E. Fischer * + * * + *************************************************************************** + * Copyright (c) 2012-2017, Jürgen E. Fischer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ -- Damit die Includes (\i) funktionieren muß psql im Verzeichnis ausgeführt -- werden in dem das Skript liegt. Z.B. per @@ -16,9 +24,6 @@ SET client_encoding = 'UTF8'; SET default_with_oids = false; SET search_path = :"alkis_schema", public; --- Abbruch bei Fehlern -\set ON_ERROR_STOP - -- Stored Procedures laden \i alkis-functions.sql @@ -36,3 +41,6 @@ SELECT alkis_create_bsrs(:alkis_epsg); \i alkis-schema.sql \i alkis-wertearten.sql -- \i alkis-wertearten-nrw.sql + +\i alkis-compat.sql +\i alkis-po-tables.sql diff --git a/alkis-po-tables.sql b/alkis-po-tables.sql index ef01133..38dad5c 100644 --- a/alkis-po-tables.sql +++ b/alkis-po-tables.sql @@ -14,8 +14,6 @@ * * ***************************************************************************/ --- Abbruch bei Fehlern -\set ON_ERROR_STOP SET search_path = :"alkis_schema", :"postgis_schema", public; SELECT 'Präsentationstabellen werden erzeugt.'; @@ -31,7 +29,7 @@ INSERT INTO alkis_po_version(version) VALUES (2); -- Punkte SELECT alkis_dropobject('po_points'); CREATE TABLE po_points( - ogc_fid serial PRIMARY KEY, + ogc_fid serial PRIMARY KEY DEFERRABLE INITIALLY DEFERRED, gml_id character(16) NOT NULL, thema varchar NOT NULL, layer varchar NOT NULL, @@ -47,7 +45,7 @@ SELECT AddGeometryColumn('po_points','point', :alkis_epsg, 'MULTIPOINT', 2); -- Linien SELECT alkis_dropobject('po_lines'); CREATE TABLE po_lines( - ogc_fid serial PRIMARY KEY, + ogc_fid serial PRIMARY KEY DEFERRABLE INITIALLY DEFERRED, gml_id character(16) NOT NULL, thema varchar NOT NULL, layer varchar NOT NULL, @@ -61,7 +59,7 @@ SELECT AddGeometryColumn('po_lines','line', :alkis_epsg, 'MULTILINESTRING', 2); -- Polygone SELECT alkis_dropobject('po_polygons'); CREATE TABLE po_polygons( - ogc_fid serial PRIMARY KEY, + ogc_fid serial PRIMARY KEY DEFERRABLE INITIALLY DEFERRED, gml_id character(16) NOT NULL, thema varchar NOT NULL, layer varchar NOT NULL, @@ -77,7 +75,7 @@ SELECT AddGeometryColumn('po_polygons','polygon', :alkis_epsg, 'MULTIPOLYGON', 2 --- Beschriftungen SELECT alkis_dropobject('po_labels'); CREATE TABLE po_labels( - ogc_fid serial PRIMARY KEY, + ogc_fid serial PRIMARY KEY DEFERRABLE INITIALLY DEFERRED, gml_id character(16) NOT NULL, thema varchar NOT NULL, layer varchar NOT NULL, diff --git a/alkis-schema.sql b/alkis-schema.sql index bc9d74a..c1781e6 100644 --- a/alkis-schema.sql +++ b/alkis-schema.sql @@ -1,7 +1,10 @@ -- Version vom 27.07.2017 21:41 -- gewählte Pakete: 'AFIS-ALKIS-ATKIS Anwendungsschema', 'AAA Basisschema', 'AAA_Basisklassen', 'AAA_GemeinsameGeometrie', 'AAA_Nutzerprofile', 'AAA_Operationen', 'AAA_Praesentationsobjekte', 'AAA_Praesentationsobjekte 3D', 'AAA_Projektsteuerung', 'AAA_Punktmengenobjekte', 'AAA_Spatial Schema', 'AAA_Spatial Schema 3D', 'AAA_Unabhaengige Geometrie', 'AAA_Unabhaengige Geometrie 3D', 'Codelisten', 'AFIS-ALKIS-ATKIS Fachschema', 'Bauwerke, Einrichtungen und sonstige Angaben', 'Bauwerke und Einrichtungen in Siedlungsflächen', 'Bauwerke, Anlagen und Einrichtungen für den Verkehr', 'Besondere Angaben zum Gewässer', 'Besondere Angaben zum Verkehr', 'Besondere Anlagen auf Siedlungsflächen', 'Besondere Eigenschaften von Gewässern', 'Besondere Vegetationsmerkmale', 'Eigentümer', 'Personen- und Bestandsdaten', 'Flurstücke, Lage, Punkte', 'Angaben zu Festpunkten der Landesvermessung', 'Angaben zum Flurstück', 'Angaben zum Netzpunkt', 'Angaben zum Punktort', 'Angaben zur Historie', 'Angaben zur Lage', 'Angaben zur Reservierung', 'Fortführungsnachweis', 'Gebäude', 'Angaben zum Gebäude', 'Gesetzliche Festlegungen, Gebietseinheiten, Kataloge', 'Administrative Gebietseinheiten', 'Bodenschätzung, Bewertung', 'Geographische Gebietseinheiten', 'Kataloge', 'Öffentlich-rechtliche und sonstige Festlegungen', 'Migration', 'Migrationsobjekte', 'Nutzerprofile', 'Angaben zu Nutzerprofilen', 'Relief', 'Primäres DGM', 'Reliefformen', 'Sekundäres DGM', 'Tatsächliche Nutzung', 'Gewässer', 'Siedlung', 'Vegetation', 'Verkehr', 'NAS-Operationen', 'AFIS-ALKIS-ATKIS-Ausgabekatalog', 'AFIS-ALKIS-ATKIS-Ausgaben', 'AFIS-Einzelpunktnachweise', 'AFIS-Punktlisten', 'ALKIS-Ausgaben', 'Komplexe Datentypen für Ausgaben', 'ALKIS-Auswertungen', 'Angaben im Kopf der Ausgaben', 'Externe Datentypen', 'Flurstücksangaben', 'Fortführungsfälle', 'Gebäudeangaben', 'Personen- und Bestandsangaben', 'Punktangaben', 'Reservierungen' -- gewählte Filter: FILTER_INFO -SET search_path = :"alkis_schema", public; + +BEGIN; + +SET search_path = :"alkis_schema", :"postgis_schema", public; CREATE TABLE aa_advstandardmodell ( wert character varying, @@ -21400,7 +21403,7 @@ CREATE TABLE ks_einrichtunginoeffentlichenbereichen ( zustand integer, PRIMARY KEY (ogc_fid) ); -COMMENT ON ks_einrichtunginoeffentlichenbereichen IS 'BASE: ks_einrichtunginoeffentlichenbereichen'; +COMMENT ON TABLE ks_einrichtunginoeffentlichenbereichen IS 'BASE: ks_einrichtunginoeffentlichenbereichen'; SELECT AddGeometryColumn('ks_einrichtunginoeffentlichenbereichen','wkb_geometry',:alkis_epsg,'GEOMETRY',2); @@ -21569,3 +21572,5 @@ CREATE TABLE ks_kommunalerbesitz ( SELECT AddGeometryColumn('ks_kommunalerbesitz','wkb_geometry',:alkis_epsg,'GEOMETRY',2); CREATE INDEX ks_kommunalerbesitz_geom_idx ON ks_kommunalerbesitz USING gist (wkb_geometry); + +END; diff --git a/alkis-trigger.sql b/alkis-trigger.sql index cc77cce..c0c303f 100644 --- a/alkis-trigger.sql +++ b/alkis-trigger.sql @@ -10,9 +10,6 @@ SET client_encoding = 'UTF8'; SET default_with_oids = false; SET search_path = :"alkis_schema", public; --- Abbruch bei Fehlern -\set ON_ERROR_STOP - --- Tabelle "delete" für Lösch- und Fortführungsdatensätze CREATE TABLE "delete" ( ogc_fid serial NOT NULL, diff --git a/alkis-update.sql b/alkis-update.sql index 68e0736..4edbf5b 100644 --- a/alkis-update.sql +++ b/alkis-update.sql @@ -17,8 +17,7 @@ SET client_encoding = 'UTF8'; SET search_path = :"postgis_schema", public; --- Abbruch bei Fehlern -\set ON_ERROR_STOP +\i alkis-compat.sql -- Stored Procedures laden \i alkis-functions.sql diff --git a/alkis-wertearten.sql b/alkis-wertearten.sql index 11968da..947347e 100644 --- a/alkis-wertearten.sql +++ b/alkis-wertearten.sql @@ -14,7 +14,6 @@ * * ***************************************************************************/ -\set ON_ERROR_STOP BEGIN; SELECT alkis_dropobject('alkis_methode'); SELECT alkis_dropobject('alkis_attributart'); diff --git a/alkisImport.py b/alkisImport.py index 8c72ac6..9e32c94 100755 --- a/alkisImport.py +++ b/alkisImport.py @@ -598,26 +598,29 @@ def runSQLScript(self, conn, fn, parallel=False): return self.runProcess([ self.psql, "-v", "alkis_epsg={}".format(self.epsg), - "-v", "alkis_schema={}".format(self.schema), - "-v", "postgis_schema={}".format(self.pgschema), - "-v", "parent_schema={}".format(self.parentschema if self.parentschema else self.schema), + "-v", u"alkis_schema={}".format(self.schema), + "-v", u"postgis_schema={}".format(self.pgschema), + "-v", u"parent_schema={}".format(self.parentschema if self.parentschema else self.schema), "-v", "alkis_fnbruch={}".format("true" if self.fnbruch else "false"), "-v", "alkis_pgverdraengen={}".format("true" if self.pgverdraengen else "false"), - "-q", "-f", fn, conn]) + "-v", "ON_ERROR_STOP=1", + "-v", "ECHO=errors", + "--quiet", + "-f", fn, conn]) def run(self): self.importALKIS() def connectDb(self): if self.leSERVICE.text() != '': - conn = "service={} ".format(self.leSERVICE.text()) + conn = u"service={} ".format(self.leSERVICE.text()) else: if self.leHOST.text() != '': conn = "host={} port={} ".format(self.leHOST.text(), self.lePORT.text()) else: conn = "" - conn += "dbname={} user='{}' password='{}'".format(self.leDBNAME.text(), self.leUID.text(), self.lePWD.text()) + conn += u"dbname={} user='{}' password='{}'".format(self.leDBNAME.text(), self.leUID.text(), self.lePWD.text()) self.db = QSqlDatabase.addDatabase("QPSQL") self.db.setConnectOptions(conn) @@ -897,13 +900,6 @@ def importALKIS(self): self.pbProgress.setRange(0, 10000) self.pbProgress.setValue(0) - self.status(u"Kompatibilitätsfunktionen werden importiert...") - if not self.runSQLScript(conn, "alkis-compat.sql"): - self.log(u"Import der Kompatibilitätsfunktionen schlug fehl.") - break - - self.log(u"Kompatibilitätsfunktionen importiert.") - if self.cbxCreate.isChecked(): if self.parentschema != "": if not self.rund(conn, "precreate"): @@ -915,12 +911,6 @@ def importALKIS(self): break self.log(u"Datenbestand angelegt.") - self.status(u"Präsentationstabellen werden erzeugt...") - if not self.runSQLScript(conn, "alkis-po-tables.sql"): - self.log(u"Anlegen der Präsentationstabellen schlug fehl.") - break - self.log(u"Präsentationstabellen angelegt.") - if not self.rund(conn, "postcreate"): break else: @@ -1045,7 +1035,7 @@ def importALKIS(self): "-update", "-append", "-progress", - u"PG:{} active_schema={}".format(conn,self.schema), + u"PG:{} active_schema={}','{}".format(conn,self.schema,self.pgschema), ] if int(self.leGT.text() or '0') >= 1: diff --git a/postcreate.d/nas2alb.sql b/postcreate.d/nas2alb.sql index b5f7b1e..a91e3d3 100644 --- a/postcreate.d/nas2alb.sql +++ b/postcreate.d/nas2alb.sql @@ -99,7 +99,7 @@ CREATE TABLE strassen ( flsnr character(21), pk character(8) NOT NULL, strshl character(32), - hausnr character(8), + hausnr varchar, ff_entst integer, ff_stand integer, primary key (pk) diff --git a/postprocessing.d/0_ableitungsregeln.sql b/postprocessing.d/0_ableitungsregeln.sql index c898ae2..bef694b 100644 --- a/postprocessing.d/0_ableitungsregeln.sql +++ b/postprocessing.d/0_ableitungsregeln.sql @@ -379,3 +379,13 @@ UPDATE ap_pto SET art='Strasse' WHERE art='Straße'; -- Straße wird z.B. in TH -- Leere Geschosszahlen korrigieren (sonst to_char(0,'RN') => '###############') UPDATE ax_gebaeude SET anzahlderoberirdischengeschosse=NULL WHERE anzahlderoberirdischengeschosse=0; UPDATE ax_gebaeude SET anzahlderunterirdischengeschosse=NULL WHERE anzahlderunterirdischengeschosse=0; + +ANALYZE ax_flurstueck; +ANALYZE ax_gebaeude; +ANALYZE ax_turm; + +ANALYZE ap_ppo; +ANALYZE ap_lpo; +ANALYZE ap_pto; +ANALYZE ap_lto; +ANALYZE ap_darstellung; diff --git a/postprocessing.d/1_ableitungsregeln/11002.sql b/postprocessing.d/1_ableitungsregeln/11002.sql index 195130f..adc1ac7 100644 --- a/postprocessing.d/1_ableitungsregeln/11002.sql +++ b/postprocessing.d/1_ableitungsregeln/11002.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Besondere Flurstücksgrenzen (11002) -- -SELECT 'Besondere Flurstücksgrenzen werden bearbeitet.'; +SELECT 'Besondere Flurstücksgrenzen werden verarbeitet.'; SELECT alkis_dropobject('alkis_politischegrenzen'); CREATE TEMPORARY TABLE alkis_politischegrenzen(i INTEGER, sn VARCHAR, adfs INTEGER[]); @@ -157,7 +157,7 @@ BEGIN END; $$ LANGUAGE plpgsql; -SELECT 'Besondere Flurstücksgrenzen werden verarbeitet.'; +SELECT 'Strittige Flurstücksgrenzen werden verarbeitet.'; -- Strittige Grenze INSERT INTO po_lines(gml_id,thema,layer,line,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/11003.sql b/postprocessing.d/1_ableitungsregeln/11003.sql index a9fa5bc..c87ffb5 100644 --- a/postprocessing.d/1_ableitungsregeln/11003.sql +++ b/postprocessing.d/1_ableitungsregeln/11003.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Grenzpunkte (11003) -- -SELECT 'Grenzpunkte werden bearbeitet.'; +SELECT 'Grenzpunkte werden verarbeitet.'; CREATE TEMPORARY TABLE po_punktortta_istteilvon(gml_id character(16), istteilvon character(16)); INSERT INTO po_punktortta_istteilvon(gml_id, istteilvon) diff --git a/postprocessing.d/1_ableitungsregeln/12002.sql b/postprocessing.d/1_ableitungsregeln/12002.sql index 267467a..819f66e 100644 --- a/postprocessing.d/1_ableitungsregeln/12002.sql +++ b/postprocessing.d/1_ableitungsregeln/12002.sql @@ -23,20 +23,24 @@ FROM ax_lagebezeichnungmithausnummer o JOIN ap_pto t ON ARRAY[o.gml_id] <@ t.dientzurdarstellungvon AND t.endet IS NULL AND t.art='Ort' WHERE coalesce(schriftinhalt,'')<>'' AND o.endet IS NULL; +ANALYZE ax_lagebezeichnungmithausnummer; +ANALYZE ax_lagebezeichnungohnehausnummer; + -- mit Hausnummer (bezieht sich auf Gebäude, Turm oder Flurstück) -SELECT ' Gebäudehausnummern.'; +SELECT ' Gebäudehausnummern werden verarbeitet.'; CREATE TEMPORARY TABLE po_zeigtauf_hausnummer( - zeigtauf character(16) PRIMARY KEY, + zeigtauf character(16), wkb_geometry GEOMETRY, prefix varchar ); +CREATE INDEX po_zeigtauf_hausnummer_zeigtauf ON po_zeigtauf_hausnummer(zeigtauf); INSERT INTO po_zeigtauf_hausnummer SELECT zeigtauf, wkb_geometry, prefix FROM ( - SELECT DISTINCT + SELECT unnest(zeigtauf) AS zeigtauf, wkb_geometry, '' AS prefix FROM ax_turm z JOIN ax_lagebezeichnungmithausnummer lmh ON ARRAY[lmh.gml_id] <@ z.zeigtAuf AND lmh.endet IS NULL @@ -49,7 +53,7 @@ INSERT INTO po_zeigtauf_hausnummer SELECT zeigtauf, wkb_geometry, prefix FROM ( - SELECT DISTINCT + SELECT unnest(zeigtauf) AS zeigtauf, wkb_geometry, '' AS prefix FROM ax_gebaeude z JOIN ax_lagebezeichnungmithausnummer lmh ON ARRAY[lmh.gml_id] <@ z.zeigtAuf AND lmh.endet IS NULL diff --git a/postprocessing.d/1_ableitungsregeln/41002.sql b/postprocessing.d/1_ableitungsregeln/41002.sql index 5b5dfa5..299a68b 100644 --- a/postprocessing.d/1_ableitungsregeln/41002.sql +++ b/postprocessing.d/1_ableitungsregeln/41002.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Industrie- und Gewerbefläche (41002) -- -SELECT 'Industrie- und Gewerbeflächen werden bearbeitet.'; +SELECT 'Industrie- und Gewerbeflächen werden verarbeitet.'; -- Industrie- und Gewerbefläche, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41003.sql b/postprocessing.d/1_ableitungsregeln/41003.sql index 77acb77..5bd3f17 100644 --- a/postprocessing.d/1_ableitungsregeln/41003.sql +++ b/postprocessing.d/1_ableitungsregeln/41003.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Halde (41003) -- -SELECT 'Halden werden bearbeitet.'; +SELECT 'Halden werden verarbeitet.'; -- Halde, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41004.sql b/postprocessing.d/1_ableitungsregeln/41004.sql index ff51b78..4e41f0b 100644 --- a/postprocessing.d/1_ableitungsregeln/41004.sql +++ b/postprocessing.d/1_ableitungsregeln/41004.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bergbaubetrieb (41004) -- -SELECT 'Bergbaubetriebe werden bearbeitet.'; +SELECT 'Bergbaubetriebe werden verarbeitet.'; -- Bergbaubetrieb, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41005.sql b/postprocessing.d/1_ableitungsregeln/41005.sql index 1009d24..2ec03db 100644 --- a/postprocessing.d/1_ableitungsregeln/41005.sql +++ b/postprocessing.d/1_ableitungsregeln/41005.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Tagebau (41005) -- -SELECT 'Tagebaue werden bearbeitet.'; +SELECT 'Tagebaue werden verarbeitet.'; -- Tagebau, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41006.sql b/postprocessing.d/1_ableitungsregeln/41006.sql index 67fb7f5..75b6c18 100644 --- a/postprocessing.d/1_ableitungsregeln/41006.sql +++ b/postprocessing.d/1_ableitungsregeln/41006.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Fläche gemischter Nutzung (41006) -- -SELECT 'Flächen gemischter Nutzung werden bearbeitet.'; +SELECT 'Flächen gemischter Nutzung werden verarbeitet.'; -- Fläche gemischter Nutzung INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41007.sql b/postprocessing.d/1_ableitungsregeln/41007.sql index 85055bc..ac96352 100644 --- a/postprocessing.d/1_ableitungsregeln/41007.sql +++ b/postprocessing.d/1_ableitungsregeln/41007.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Fläche besonderer funktionaler Prägung (41007) -- -SELECT 'Flächen besonderer funktionaler Prägung werden bearbeitet.'; +SELECT 'Flächen besonderer funktionaler Prägung werden verarbeitet.'; -- Fläche besonderer funktionaler Prägung INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41008.sql b/postprocessing.d/1_ableitungsregeln/41008.sql index f98b31d..234888a 100644 --- a/postprocessing.d/1_ableitungsregeln/41008.sql +++ b/postprocessing.d/1_ableitungsregeln/41008.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Sport-, Freizeit- und Erholungsfläche (41008) -- -SELECT 'Sport-, Freizeit- und Erholungsflächen werden bearbeitet.'; +SELECT 'Sport-, Freizeit- und Erholungsflächen werden verarbeitet.'; -- Sport-, Freizeit- und Erholungsfläche INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/41009.sql b/postprocessing.d/1_ableitungsregeln/41009.sql index e2e6191..51915b5 100644 --- a/postprocessing.d/1_ableitungsregeln/41009.sql +++ b/postprocessing.d/1_ableitungsregeln/41009.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Friedhof (41009) -- -SELECT 'Friedhöfe werden bearbeitet.'; +SELECT 'Friedhöfe werden verarbeitet.'; -- Fläche, Friedhof INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/42006.sql b/postprocessing.d/1_ableitungsregeln/42006.sql index 499d2b4..362ca56 100644 --- a/postprocessing.d/1_ableitungsregeln/42006.sql +++ b/postprocessing.d/1_ableitungsregeln/42006.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Weg (42006) -- -SELECT 'Wege werden bearbeitet.'; +SELECT 'Wege werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/42009.sql b/postprocessing.d/1_ableitungsregeln/42009.sql index 5ecd25c..5742bb4 100644 --- a/postprocessing.d/1_ableitungsregeln/42009.sql +++ b/postprocessing.d/1_ableitungsregeln/42009.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Platz (42009) -- -SELECT 'Plätze werden bearbeitet.'; +SELECT 'Plätze werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/42010.sql b/postprocessing.d/1_ableitungsregeln/42010.sql index 55f5a8a..db66827 100644 --- a/postprocessing.d/1_ableitungsregeln/42010.sql +++ b/postprocessing.d/1_ableitungsregeln/42010.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bahnverkehr (42010) -- -SELECT 'Bahnverkehr wird bearbeitet.'; +SELECT 'Bahnverkehr wird verarbeitet.'; -- Bahnverkehr, Fläche INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/42015.sql b/postprocessing.d/1_ableitungsregeln/42015.sql index 972fbef..39f202c 100644 --- a/postprocessing.d/1_ableitungsregeln/42015.sql +++ b/postprocessing.d/1_ableitungsregeln/42015.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Flugverkehr (42015) -- -SELECT 'Flugverkehr wird bearbeitet.'; +SELECT 'Flugverkehr wird verarbeitet.'; -- Flugverkehr, Fläche INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/42016.sql b/postprocessing.d/1_ableitungsregeln/42016.sql index cd3cc84..db1b764 100644 --- a/postprocessing.d/1_ableitungsregeln/42016.sql +++ b/postprocessing.d/1_ableitungsregeln/42016.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Schiffsverkehr (42016) -- -SELECT 'Schiffsverkehr wird bearbeitet.'; +SELECT 'Schiffsverkehr wird verarbeitet.'; -- Schiffsverkehr, Fläche INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43001.sql b/postprocessing.d/1_ableitungsregeln/43001.sql index f1e265e..dc43659 100644 --- a/postprocessing.d/1_ableitungsregeln/43001.sql +++ b/postprocessing.d/1_ableitungsregeln/43001.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Landwirtschaft (43001) -- -SELECT 'Landwirtschaft wird bearbeitet.'; +SELECT 'Landwirtschaft wird verarbeitet.'; -- Landwirtschaft, Fläche INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43002.sql b/postprocessing.d/1_ableitungsregeln/43002.sql index 51bfe82..6ba1484 100644 --- a/postprocessing.d/1_ableitungsregeln/43002.sql +++ b/postprocessing.d/1_ableitungsregeln/43002.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Wald (43002) -- -SELECT 'Wald wird bearbeitet.'; +SELECT 'Wald wird verarbeitet.'; -- Wald, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43003.sql b/postprocessing.d/1_ableitungsregeln/43003.sql index 08a2bbc..375c19a 100644 --- a/postprocessing.d/1_ableitungsregeln/43003.sql +++ b/postprocessing.d/1_ableitungsregeln/43003.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Gehölz (43003) -- -SELECT 'Gehölze werden bearbeitet.'; +SELECT 'Gehölze werden verarbeitet.'; -- Gehölz, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43004.sql b/postprocessing.d/1_ableitungsregeln/43004.sql index de9892a..3b450ca 100644 --- a/postprocessing.d/1_ableitungsregeln/43004.sql +++ b/postprocessing.d/1_ableitungsregeln/43004.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Heide (43004) -- -SELECT 'Heide wird bearbeitet.'; +SELECT 'Heide wird verarbeitet.'; -- Heide, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43005.sql b/postprocessing.d/1_ableitungsregeln/43005.sql index 3129457..1f6acb8 100644 --- a/postprocessing.d/1_ableitungsregeln/43005.sql +++ b/postprocessing.d/1_ableitungsregeln/43005.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Moor (43005) -- -SELECT 'Moor wird bearbeitet.'; +SELECT 'Moor wird verarbeitet.'; -- Moor, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43006.sql b/postprocessing.d/1_ableitungsregeln/43006.sql index 8fe2841..153e7d2 100644 --- a/postprocessing.d/1_ableitungsregeln/43006.sql +++ b/postprocessing.d/1_ableitungsregeln/43006.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Sumpf (43006) -- -SELECT 'Sumpf wird bearbeitet.'; +SELECT 'Sumpf wird verarbeitet.'; -- Sumpf, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/43007.sql b/postprocessing.d/1_ableitungsregeln/43007.sql index 8fb17b1..0e64d02 100644 --- a/postprocessing.d/1_ableitungsregeln/43007.sql +++ b/postprocessing.d/1_ableitungsregeln/43007.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Unland/vegetationslose Fläche (43007) -- -SELECT 'Unland/vegetationslose Flächen werden bearbeitet.'; +SELECT 'Unland/vegetationslose Flächen werden verarbeitet.'; -- Unland, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/44001.sql b/postprocessing.d/1_ableitungsregeln/44001.sql index 7607312..ccdc713 100644 --- a/postprocessing.d/1_ableitungsregeln/44001.sql +++ b/postprocessing.d/1_ableitungsregeln/44001.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Fließgewässer (44001) -- -SELECT 'Fließgewässer werden bearbeitet.'; +SELECT 'Fließgewässer werden verarbeitet.'; -- Fließgewässer, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/44005.sql b/postprocessing.d/1_ableitungsregeln/44005.sql index c54159a..e021a66 100644 --- a/postprocessing.d/1_ableitungsregeln/44005.sql +++ b/postprocessing.d/1_ableitungsregeln/44005.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Hafenbecken (44005) -- -SELECT 'Hafenbecken werden bearbeitet.'; +SELECT 'Hafenbecken werden verarbeitet.'; -- Hafenbecken, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/44006.sql b/postprocessing.d/1_ableitungsregeln/44006.sql index c743b1c..233ffc8 100644 --- a/postprocessing.d/1_ableitungsregeln/44006.sql +++ b/postprocessing.d/1_ableitungsregeln/44006.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Stehendes Gewässer (44006) -- -SELECT 'Stehende Gewässer werden bearbeitet.'; +SELECT 'Stehende Gewässer werden verarbeitet.'; -- Stehendes Gewässer, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/44007.sql b/postprocessing.d/1_ableitungsregeln/44007.sql index 025000b..548a096 100644 --- a/postprocessing.d/1_ableitungsregeln/44007.sql +++ b/postprocessing.d/1_ableitungsregeln/44007.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Meer (44007) -- -SELECT 'Meere werden bearbeitet.'; +SELECT 'Meere werden verarbeitet.'; -- Meer, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51002.sql b/postprocessing.d/1_ableitungsregeln/51002.sql index 64d95f9..d855ec3 100644 --- a/postprocessing.d/1_ableitungsregeln/51002.sql +++ b/postprocessing.d/1_ableitungsregeln/51002.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bauwerk oder Anlage für Industrie und Gewerbe (51002) -- -SELECT 'Bauwerke oder Anlagen für Industrie und Gewerbe werden bearbeitet.'; +SELECT 'Bauwerke oder Anlagen für Industrie und Gewerbe werden verarbeitet.'; -- Bauwerk- oder Anlage für Industrie und Gewerbe, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51003.sql b/postprocessing.d/1_ableitungsregeln/51003.sql index 300849a..6a89e00 100644 --- a/postprocessing.d/1_ableitungsregeln/51003.sql +++ b/postprocessing.d/1_ableitungsregeln/51003.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Vorratsbehälter, Speicherbauwerk (51003) -- -SELECT 'Vorratsbehälter, Speicherbauwerke werden bearbeitet.'; +SELECT 'Vorratsbehälter, Speicherbauwerke werden verarbeitet.'; -- Vorratsbehälter, Speicherbauwerk, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51004.sql b/postprocessing.d/1_ableitungsregeln/51004.sql index c2d5b48..aa39f55 100644 --- a/postprocessing.d/1_ableitungsregeln/51004.sql +++ b/postprocessing.d/1_ableitungsregeln/51004.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Transportanlage (51004) -- -SELECT 'Transportanlagen werden bearbeitet.'; +SELECT 'Transportanlagen werden verarbeitet.'; -- Transportanlage, Linie INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51005.sql b/postprocessing.d/1_ableitungsregeln/51005.sql index 354b73b..5069108 100644 --- a/postprocessing.d/1_ableitungsregeln/51005.sql +++ b/postprocessing.d/1_ableitungsregeln/51005.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Leitung (51005) -- -SELECT 'Leitungen werden bearbeitet.'; +SELECT 'Leitungen werden verarbeitet.'; -- Leitungsverlauf INSERT INTO po_lines(gml_id,thema,layer,line,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51006.sql b/postprocessing.d/1_ableitungsregeln/51006.sql index f7b2dc1..bcb733b 100644 --- a/postprocessing.d/1_ableitungsregeln/51006.sql +++ b/postprocessing.d/1_ableitungsregeln/51006.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bauwerk oder Anlage für Sport, Freizeit und Erholung (51006) -- -SELECT 'Bauwerke oder Anlagen für Sport, Freizeit und Erholung werden bearbeitet.'; +SELECT 'Bauwerke oder Anlagen für Sport, Freizeit und Erholung werden verarbeitet.'; -- Bauwerk oder Anlage für Sport, Freizeit und Erholung, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51007.sql b/postprocessing.d/1_ableitungsregeln/51007.sql index 3a83256..226a4e6 100644 --- a/postprocessing.d/1_ableitungsregeln/51007.sql +++ b/postprocessing.d/1_ableitungsregeln/51007.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Historisches Bauwerk oder historische Einrichtung (51007) -- -SELECT 'Historische Bauwerke oder Einrichtungen werden bearbeitet.'; +SELECT 'Historische Bauwerke oder Einrichtungen werden verarbeitet.'; -- Historisches Bauwerk oder historische Einrichtung, Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51008.sql b/postprocessing.d/1_ableitungsregeln/51008.sql index 048064a..5cd36b3 100644 --- a/postprocessing.d/1_ableitungsregeln/51008.sql +++ b/postprocessing.d/1_ableitungsregeln/51008.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Heilquelle (51008) -- -SELECT 'Heilquellen werden bearbeitet.'; +SELECT 'Heilquellen werden verarbeitet.'; -- Symbole INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51009.sql b/postprocessing.d/1_ableitungsregeln/51009.sql index 7cfe043..a25b304 100644 --- a/postprocessing.d/1_ableitungsregeln/51009.sql +++ b/postprocessing.d/1_ableitungsregeln/51009.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Sonstiges Bauwerk oder sonstige Einrichtung (51009) -- -SELECT 'Sonstige Bauwerke oder Einrichtungen werden bearbeitet.'; +SELECT 'Sonstige Bauwerke oder Einrichtungen werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/51010.sql b/postprocessing.d/1_ableitungsregeln/51010.sql index a2f8c18..d7be64d 100644 --- a/postprocessing.d/1_ableitungsregeln/51010.sql +++ b/postprocessing.d/1_ableitungsregeln/51010.sql @@ -6,7 +6,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- TODO: 1500 Bahnschranke? -- -SELECT 'Einrichtungen in öffentlichen Bereichen werden bearbeitet.'; +SELECT 'Einrichtungen in öffentlichen Bereichen werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53001.sql b/postprocessing.d/1_ableitungsregeln/53001.sql index 9c1969e..0e70d7a 100644 --- a/postprocessing.d/1_ableitungsregeln/53001.sql +++ b/postprocessing.d/1_ableitungsregeln/53001.sql @@ -6,7 +6,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- TODO: Ausrichtung Symbol am Steg 1820? -- -SELECT 'Bauwerke in Verkehrsbereich werden bearbeitet.'; +SELECT 'Bauwerke in Verkehrsbereich werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53002.sql b/postprocessing.d/1_ableitungsregeln/53002.sql index 8baadf0..d8b819a 100644 --- a/postprocessing.d/1_ableitungsregeln/53002.sql +++ b/postprocessing.d/1_ableitungsregeln/53002.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Straßenverkehrsanlage (53002) -- -SELECT 'Straßenverkehrsanlagen werden bearbeitet.'; +SELECT 'Straßenverkehrsanlagen werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53003.sql b/postprocessing.d/1_ableitungsregeln/53003.sql index 07fa6b4..f301990 100644 --- a/postprocessing.d/1_ableitungsregeln/53003.sql +++ b/postprocessing.d/1_ableitungsregeln/53003.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Weg, Pfad, Steig (53003) -- -SELECT 'Wege, Pfade und Steige werden bearbeitet.'; +SELECT 'Wege, Pfade und Steige werden verarbeitet.'; -- Linien INSERT INTO po_lines(gml_id,thema,layer,line,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53004.sql b/postprocessing.d/1_ableitungsregeln/53004.sql index 1e3ff86..fd2c751 100644 --- a/postprocessing.d/1_ableitungsregeln/53004.sql +++ b/postprocessing.d/1_ableitungsregeln/53004.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bahnverkehrsanlage (53004) -- -SELECT 'Bahnverkehrsanlagen werden bearbeitet.'; +SELECT 'Bahnverkehrsanlagen werden verarbeitet.'; -- Bauwerksfunktion, Anschrieb INSERT INTO po_labels(gml_id,thema,layer,point,text,signaturnummer,drehwinkel,horizontaleausrichtung,vertikaleausrichtung,skalierung,fontsperrung,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53005.sql b/postprocessing.d/1_ableitungsregeln/53005.sql index f10c5ca..1ea4056 100644 --- a/postprocessing.d/1_ableitungsregeln/53005.sql +++ b/postprocessing.d/1_ableitungsregeln/53005.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Seilbahn, Schwebebahn (53005) -- -SELECT 'Seil- und Schwebebahnen werden bearbeitet.'; +SELECT 'Seil- und Schwebebahnen werden verarbeitet.'; INSERT INTO po_lines(gml_id,thema,layer,line,signaturnummer,modell) SELECT diff --git a/postprocessing.d/1_ableitungsregeln/53007.sql b/postprocessing.d/1_ableitungsregeln/53007.sql index 2424f95..82d3a47 100644 --- a/postprocessing.d/1_ableitungsregeln/53007.sql +++ b/postprocessing.d/1_ableitungsregeln/53007.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Flugverkehrsanlage (53007) -- -SELECT 'Flugverkehrsanlagen werden bearbeitet.'; +SELECT 'Flugverkehrsanlagen werden verarbeitet.'; -- Flächen INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53008.sql b/postprocessing.d/1_ableitungsregeln/53008.sql index 54848a1..a84bdec 100644 --- a/postprocessing.d/1_ableitungsregeln/53008.sql +++ b/postprocessing.d/1_ableitungsregeln/53008.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Einrichtungen für den Schiffsverkehr (53008) -- -SELECT 'Einrichtungen für den Schiffsverkehr werden bearbeitet.'; +SELECT 'Einrichtungen für den Schiffsverkehr werden verarbeitet.'; -- Symbole INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/53009.sql b/postprocessing.d/1_ableitungsregeln/53009.sql index 9c27719..39fd0b9 100644 --- a/postprocessing.d/1_ableitungsregeln/53009.sql +++ b/postprocessing.d/1_ableitungsregeln/53009.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bauwerk im Gewässerbereich (53009) -- -SELECT 'Bauwerke im Gewässerbereich werden bearbeitet.'; +SELECT 'Bauwerke im Gewässerbereich werden verarbeitet.'; -- Linien INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/55001.sql b/postprocessing.d/1_ableitungsregeln/55001.sql index ffc355b..e032542 100644 --- a/postprocessing.d/1_ableitungsregeln/55001.sql +++ b/postprocessing.d/1_ableitungsregeln/55001.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Turm (55001) -- -SELECT 'Türme werden bearbeitet.'; +SELECT 'Türme werden verarbeitet.'; -- Turm, Flächen -- TODO: Punkte? diff --git a/postprocessing.d/1_ableitungsregeln/55006.sql b/postprocessing.d/1_ableitungsregeln/55006.sql index 7b6cdee..87d45ac 100644 --- a/postprocessing.d/1_ableitungsregeln/55006.sql +++ b/postprocessing.d/1_ableitungsregeln/55006.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Gleis (55006) -- -SELECT 'Gleise werden bearbeitet.'; +SELECT 'Gleise werden verarbeitet.'; -- Drehscheibe, Fläche INSERT INTO po_polygons(gml_id,thema,layer,polygon,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59102.sql b/postprocessing.d/1_ableitungsregeln/59102.sql index 9856265..af91975 100644 --- a/postprocessing.d/1_ableitungsregeln/59102.sql +++ b/postprocessing.d/1_ableitungsregeln/59102.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Einrichtungen im öffentlichen Bereichen (59102; NRW) -- -SELECT 'Einrichtungen im öffentlichen Bereichen (NRW) werden bearbeitet.'; +SELECT 'Einrichtungen im öffentlichen Bereichen (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59103.sql b/postprocessing.d/1_ableitungsregeln/59103.sql index 27ce925..dda9282 100644 --- a/postprocessing.d/1_ableitungsregeln/59103.sql +++ b/postprocessing.d/1_ableitungsregeln/59103.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bauwerk, Anlagen für Ver- und Entsorgen (59103; NRW) -- -SELECT 'Bauwerke und Anlagen für Ver- und Entsorgen (NRW) werden bearbeitet.'; +SELECT 'Bauwerke und Anlagen für Ver- und Entsorgen (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59109.sql b/postprocessing.d/1_ableitungsregeln/59109.sql index 40260be..ad9967b 100644 --- a/postprocessing.d/1_ableitungsregeln/59109.sql +++ b/postprocessing.d/1_ableitungsregeln/59109.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Sonstiges Bauwerk (59109; NRW) -- -SELECT 'Sonstige Bauwerke (NRW) werden bearbeitet.'; +SELECT 'Sonstige Bauwerke (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59201.sql b/postprocessing.d/1_ableitungsregeln/59201.sql index 4048948..12e156d 100644 --- a/postprocessing.d/1_ableitungsregeln/59201.sql +++ b/postprocessing.d/1_ableitungsregeln/59201.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Einrichtung im Straßenverkehr (59201; NRW) -- -SELECT 'Einrichtung im Straßenverkehr (NRW) werden bearbeitet.'; +SELECT 'Einrichtung im Straßenverkehr (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59202.sql b/postprocessing.d/1_ableitungsregeln/59202.sql index 13f199d..43db22e 100644 --- a/postprocessing.d/1_ableitungsregeln/59202.sql +++ b/postprocessing.d/1_ableitungsregeln/59202.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Verkehrszeichen (59202; NRW) -- -SELECT 'Verkehrszeichen (NRW) werden bearbeitet.'; +SELECT 'Verkehrszeichen (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59206.sql b/postprocessing.d/1_ableitungsregeln/59206.sql index c40e209..9d29b10 100644 --- a/postprocessing.d/1_ableitungsregeln/59206.sql +++ b/postprocessing.d/1_ableitungsregeln/59206.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Einrichtung im Bahnverkehr (59206; NRW) -- -SELECT 'Einrichtungen im Bahnverkehr (NRW) werden bearbeitet.'; +SELECT 'Einrichtungen im Bahnverkehr (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59207.sql b/postprocessing.d/1_ableitungsregeln/59207.sql index e52d45a..b60e83b 100644 --- a/postprocessing.d/1_ableitungsregeln/59207.sql +++ b/postprocessing.d/1_ableitungsregeln/59207.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bauwerk im Gewässerbereich (59207; NRW) -- -SELECT 'Bauwerke im Gewässerbereich (NRW) werden bearbeitet.'; +SELECT 'Bauwerke im Gewässerbereich (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59301.sql b/postprocessing.d/1_ableitungsregeln/59301.sql index 8f8efe6..19234aa 100644 --- a/postprocessing.d/1_ableitungsregeln/59301.sql +++ b/postprocessing.d/1_ableitungsregeln/59301.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Vegetationsmerkmal (59301; NRW) -- -SELECT 'Vegetationsmerkmale (NRW) werden bearbeitet.'; +SELECT 'Vegetationsmerkmale (NRW) werden verarbeitet.'; -- Punkte INSERT INTO po_points(gml_id,thema,layer,point,drehwinkel,signaturnummer,modell) diff --git a/postprocessing.d/1_ableitungsregeln/59401.sql b/postprocessing.d/1_ableitungsregeln/59401.sql index 22f94cc..d507202 100644 --- a/postprocessing.d/1_ableitungsregeln/59401.sql +++ b/postprocessing.d/1_ableitungsregeln/59401.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Bau-, Raum- oder Bodenordnungsrecht (59401; NRW) -- -SELECT 'Bau-, Raum- oder Bodenordnungsrecht (NRW) wird bearbeitet.'; +SELECT 'Bau-, Raum- oder Bodenordnungsrecht (NRW) wird verarbeitet.'; INSERT INTO po_lines(gml_id,thema,layer,line,signaturnummer,modell) SELECT diff --git a/postprocessing.d/1_ableitungsregeln/59402.sql b/postprocessing.d/1_ableitungsregeln/59402.sql index 25bdad3..7347f44 100644 --- a/postprocessing.d/1_ableitungsregeln/59402.sql +++ b/postprocessing.d/1_ableitungsregeln/59402.sql @@ -5,7 +5,7 @@ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -- Kommunaler Besitz (59402; NRW) -- -SELECT 'Kommunaler Besitz (NRW) wird bearbeitet.'; +SELECT 'Kommunaler Besitz (NRW) wird verarbeitet.'; INSERT INTO po_lines(gml_id,thema,layer,line,signaturnummer,modell) SELECT diff --git a/postprocessing.d/1_ableitungsregeln/61001.sql b/postprocessing.d/1_ableitungsregeln/61001.sql index f5cf41f..632acd9 100644 --- a/postprocessing.d/1_ableitungsregeln/61001.sql +++ b/postprocessing.d/1_ableitungsregeln/61001.sql @@ -13,6 +13,7 @@ DECLARE ok GEOMETRY; uk GEOMETRY; sk GEOMETRY; + fk GEOMETRY; maxdistance DOUBLE PRECISION; p0 GEOMETRY; p1 GEOMETRY; @@ -26,34 +27,42 @@ DECLARE int GEOMETRY; b GEOMETRY; b1 GEOMETRY[]; + b1o DOUBLE PRECISION[]; b1l DOUBLE PRECISION[]; r0 RECORD; r1 RECORD; + r2 RECORD; + n INTEGER; + kokn INTEGER; + bgln INTEGER; + kskn INTEGER; BEGIN DELETE FROM po_lines WHERE layer='ax_boeschungkliff'; + kokn := 0; + bgln := 0; + kskn := 0; + n := 0; FOR r0 IN SELECT gml_id, advstandardmodell||sonstigesmodell AS modell FROM ax_boeschungkliff WHERE endet IS NULL LOOP - -- RAISE NOTICE 'gml_id:%', r0.gml_id; + n := n + 1; + -- RAISE NOTICE 'gml_id:% %', r0.gml_id, n; SELECT st_linemerge(st_collect(wkb_geometry)) INTO uk FROM ax_gelaendekante WHERE ARRAY[r0.gml_id] <@ istteilvon AND artdergelaendekante=1230 AND endet IS NULL; -- RAISE NOTICE 'Unterkante:%', st_astext(uk); - SELECT st_union(wkb_geometry) INTO sk FROM ax_gelaendekante WHERE ARRAY[r0.gml_id] <@ istteilvon AND artdergelaendekante=1240 AND endet IS NULL; - IF uk IS NOT NULL AND sk IS NOT NULL THEN - sk := st_union(uk, sk); - END IF; - + -- Alle Kanten sind Schnittkanten + SELECT st_union(wkb_geometry) INTO sk FROM ax_gelaendekante WHERE ARRAY[r0.gml_id] <@ istteilvon AND endet IS NULL; IF sk IS NULL THEN - RAISE NOTICE '%: Keine Schnittkante', r0.gml_id; + kskn := kskn + 1; + -- RAISE NOTICE '%: Keine Schnittkante', r0.gml_id; CONTINUE; END IF; - SELECT st_maxdistance(sk, ok)*1.1 INTO maxdistance; - -- RAISE NOTICE 'Schnittkanten:%', st_astext(sk); + -- Oberkante(n) iterieren (MULTILINESTRINGs ggf. zerlegen) FOR r1 IN SELECT (st_dump(st_multi(st_linemerge(st_collect(wkb_geometry))))).geom FROM ax_gelaendekante @@ -73,13 +82,71 @@ BEGIN CONTINUE; END IF; + ol := st_length(ok); + IF ol < 6.0 THEN + -- RAISE NOTICE '%: Oberkante %m < 6m: %', r0.gml_id, ol, st_astext(ok); + kokn := kokn + 1; + CONTINUE; + END IF; + + fk := sk; + + -- st_maxdistance braucht mind. 3 Punkte + IF st_npoints(ok) = 2 THEN + ok := st_makeline(ARRAY[ + st_startpoint(ok), + st_lineinterpolatepoint(ok, 0.5), + st_endpoint(ok) + ]); + END IF; + + IF st_npoints(fk) = 2 THEN + fk := st_makeline(ARRAY[ + st_startpoint(fk), + st_lineinterpolatepoint(fk, 0.5), + st_endpoint(fk) + ]); + END IF; + + SELECT st_maxdistance(fk, ok)*1.1 INTO maxdistance; + IF maxdistance IS NULL THEN + maxdistance := 0; + FOR r2 IN SELECT (st_dump(st_multi(fk))).geom + LOOP + maxdistance := greatest( + maxdistance, + st_distance(st_startpoint(r2.geom), st_startpoint(ok))*1.1, + st_distance(st_endpoint(r2.geom), st_startpoint(ok))*1.1, + st_distance(st_startpoint(r2.geom), st_endpoint(ok))*1.1, + st_distance(st_endpoint(r2.geom), st_endpoint(ok))*1.1 + ); + END LOOP; + + IF maxdistance = 0 THEN + RAISE NOTICE '%: Maximalabstand leer [ok:%; fk:%]', r0.gml_id, st_astext(ok), st_astext(fk); + CONTINUE; + END IF; + END IF; + s := CASE WHEN st_distance( alkis_safe_offsetcurve(ok, -0.001, ''::text), uk ) > st_distance( alkis_safe_offsetcurve(ok, 0.001, ''::text), uk ) THEN -1 ELSE 1 END; - o := 0.0; - ol := st_length(ok); - WHILE o < ol-3 LOOP - -- RAISE NOTICE '1 %: %', r0.gml_id, o; + -- Schnittkante auf Oberkante verlängern + p0 := st_startpoint(ok); + p1 := (SELECT p FROM (SELECT st_pointn(uk,generate_series(1, st_npoints(uk))) AS p) AS p ORDER BY st_distance(p0,p) ASC LIMIT 1); + IF NOT st_equals(p0, p1) THEN + -- RAISE NOTICE '%: Verlängerung Anfang:% [snap % to %]', r0.gml_id, st_astext(st_makeline(p0, p1)), st_astext(st_startpoint(ok)), st_astext(uk); + fk := st_union(fk, st_makeline(p0, p1)); + END IF; + p0 := st_endpoint(ok); + p1 := (SELECT p FROM (SELECT st_pointn(uk,generate_series(1, st_npoints(uk))) AS p) AS p ORDER BY st_distance(p0,p) ASC LIMIT 1); + IF NOT st_equals(p0, p1) THEN + -- RAISE NOTICE '%: Verlängerung Ende:% [snap % to %]', r0.gml_id, st_astext(st_makeline(p0, p1)), st_astext(st_endpoint(ok)), st_astext(uk); + fk := st_union(fk, st_makeline(p0, p1)); + END IF; + + o := greatest((ol::numeric % 6.0) / 2.0, 0.01); + WHILE o < ol-3 LOOP p0 := st_lineinterpolatepoint(ok, o/ol); p1 := st_lineinterpolatepoint(ok, (o+0.001)/ol); l := st_distance(p0, p1); @@ -92,17 +159,18 @@ BEGIN st_translate(p0, s * dy * maxdistance, -s * dx * maxdistance) ); - int := st_intersection(b, sk); + int := st_intersection(b, fk); IF int IS NOT NULL AND NOT st_isempty(int) THEN - IF geometrytype(int) = 'POINT' THEN - b := st_makeline(p0, int); - ELSE - b := (SELECT st_makeline(p0, (SELECT * FROM (SELECT (st_dump(int)).geom AS pi) AS pi ORDER BY st_distance(p0, pi) LIMIT 1))); + -- RAISE NOTICE '%: % : int % [%:%]', r0.gml_id, o, st_astext(int), st_astext(b), st_astext(fk); + b := st_makeline(p0, (SELECT * FROM (SELECT (st_dump(st_multi(int))).geom AS pi) AS pi WHERE st_distance(p0, pi)>0.01 ORDER BY st_distance(p0, pi) ASC LIMIT 1)); + IF b IS NOT NULL THEN + b1 := array_append(b1, b); + b1l := array_append(b1l, st_length(b)); + b1o := array_append(b1o, o); + -- INSERT INTO po_lines(gml_id, thema, layer, line, signaturnummer, modell) VALUES (r0.gml_id, 'Topographie', 'ax_boeschungkliff-t'||array_length(b1,1)||'-'||o, st_multi(b), '2531', r0.modell); + -- RAISE NOTICE '%: % : % : %', r0.gml_id, o, array_length(b1,1), st_astext(b); END IF; - - b1 := array_append(b1, b); - b1l := array_append(b1l, st_length(b)); END IF; o := o + 6.0; @@ -137,12 +205,12 @@ BEGIN p0 := st_startpoint(b1[i]); int := st_intersection(b1[i], b); - IF int IS NULL OR st_isempty(int) THEN + IF int IS NULL OR st_isempty(int) OR st_equals(int,p0) THEN CONTINUE; ELSIF geometrytype(int) = 'POINT' THEN b := st_makeline(p0, int); ELSE - b := (SELECT st_makeline(p0, (SELECT * FROM (SELECT (st_dump(int)).geom AS pi) AS pi ORDER BY st_distance(p0, pi) LIMIT 1))); + b := (SELECT st_makeline(p0, (SELECT * FROM (SELECT (st_dump(int)).geom AS pi) AS pi WHERE st_distance(p0,pi)>0.01 ORDER BY st_distance(p0, pi) LIMIT 1))); END IF; b1[i] := b; @@ -151,29 +219,28 @@ BEGIN END; END IF; - i := 2; - o := 3.0; - WHILE o < ol-3 LOOP - p0 := st_lineinterpolatepoint(ok, o/ol); - p1 := st_lineinterpolatepoint(ok, (o+0.001)/ol); - l := st_distance(p0, p1); + IF array_length(b1o, 1) > 0 THEN + FOR i IN 2..array_upper(b1o, 1) LOOP + o := (b1o[i-1] + b1o[i]) / 2.0; - dx := (st_x(p1) - st_x(p0)) / l; - dy := (st_y(p1) - st_y(p0)) / l; + p0 := st_lineinterpolatepoint(ok, o/ol); + p1 := st_lineinterpolatepoint(ok, (o+0.001)/ol); + l := st_distance(p0, p1); - l := (b1l[i-1]+b1l[i])/4; + dx := (st_x(p1) - st_x(p0)) / l; + dy := (st_y(p1) - st_y(p0)) / l; - b1 := array_append( - b1, - st_makeline( - p0, - st_translate(p0, s * dy * l, -s * dx * l) - ) - ); + l := (b1l[i-1]+b1l[i])/4; - o := o + 6.0; - i := i + 1; - END LOOP; + b1 := array_append( + b1, + st_makeline( + p0, + st_translate(p0, s * dy * l, -s * dx * l) + ) + ); + END LOOP; + END IF; IF b1 IS NOT NULL AND array_length(b1,1)>0 THEN INSERT INTO po_lines( @@ -182,15 +249,31 @@ BEGIN r0.gml_id, 'Topographie', 'ax_boeschungkliff', st_multi(st_collect(b1)), '2531', r0.modell ); ELSE - RAISE NOTICE '%: Böschungsgeometrie leer', r0.gml_id; + bgln := bgln + 1; + -- RAISE NOTICE '%: Böschungsgeometrie leer [ol:%; md:% ok:%; fk:%]', r0.gml_id, ol, maxdistance, st_astext(ok), st_astext(fk); END IF; + b1o := ARRAY[]::double precision[]; b1l := ARRAY[]::double precision[]; b1 := ARRAY[]::GEOMETRY[]; END LOOP; END LOOP; + RAISE NOTICE '% Böschungen', n; + + IF kokn > 0 THEN + RAISE NOTICE '% Böschungen mit Oberkantelänge < 6m', bgln; + END IF; + + IF bgln > 0 THEN + RAISE NOTICE '% Böschungen mit leerer Geometrie', bgln; + END IF; + + IF kskn > 0 THEN + RAISE NOTICE '% Böschungen ohne Schnittkanten', kskn; + END IF; + RETURN 'Böschungen berechnet.'; END; $$ LANGUAGE plpgsql; diff --git a/postprocessing.d/3_nas2alb.sql b/postprocessing.d/3_nas2alb.sql index 34a8cf1..eabb36e 100644 --- a/postprocessing.d/3_nas2alb.sql +++ b/postprocessing.d/3_nas2alb.sql @@ -23,30 +23,6 @@ SET client_min_messages TO notice; SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; --- --- ALKIS: --- ax_gebaeudeausgestaltung | zeigtAuf | ax_gebaeude | 43882 --- ax_gebaeude | zeigtAuf | ax_lagebezeichnungmithausnummer | 19229 --- ax_flurstueck | weistAuf | ax_lagebezeichnungmithausnummer | 20481 --- ax_flurstueck | zeigtAuf | ax_lagebezeichnungohnehausnummer | 11596 --- ax_flurstueck | istGebucht | ax_buchungsstelle | 27128 --- ax_buchungsstelle | an | ax_buchungsstelle | 13832 --- ax_buchungsstelle | istBestandteilVon | ax_buchungsblatt | 33633 --- ax_namensnummer | istBestandteilVon | ax_buchungsblatt | 43780 --- ax_namensnummer | benennt | ax_person | 42681 --- ax_person | hat | ax_anschrift | 42616 - --- ALKIS => ALB --- ax_flurstueck => FLURST --- ax_lagebezeichnungmithausnummer => STRASSEN --- ax_lagebezeichnungohnehausnummer => STRASSEN --- ax_lagebezeichnungkatalogeintrag => STR_SHL --- ax_buchungsstelle => EIGNERART --- ax_buchungsblatt => BESTAND --- ax_namensnummer & ax_person & ax_anschrift => EIGNER - --- ax_flurstueck => flurst - SELECT alkis_dropobject('alkis_intersects'); CREATE FUNCTION alkis_intersects(g0 GEOMETRY, g1 GEOMETRY, error TEXT) RETURNS BOOLEAN AS $$ DECLARE @@ -86,8 +62,9 @@ EXCEPTION WHEN OTHERS THEN END; $$ LANGUAGE plpgsql IMMUTABLE; + SELECT alkis_dropobject('alkis_fixareas'); -CREATE FUNCTION pg_temp.alkis_fixareas(t TEXT) RETURNS VARCHAR AS $$ +CREATE FUNCTION alkis_fixareas(t TEXT) RETURNS VARCHAR AS $$ DECLARE n INTEGER; m TEXT; @@ -127,712 +104,3 @@ BEGIN END; END; $$ LANGUAGE plpgsql; - -SELECT alkis_dropobject('alkis_nutzungen'); -CREATE TABLE alkis_nutzungen( - element VARCHAR PRIMARY KEY, - funktionsfeld VARCHAR, - relationstext VARCHAR, - elementtext VARCHAR, - enumeration VARCHAR -); - -INSERT INTO alkis_nutzungen(element, funktionsfeld, relationstext, elementtext, enumeration) VALUES - ('ax_bahnverkehr', 'funktion', ', ', 'Bahnverkehr', 'ax_funktion_bahnverkehr'), - ('ax_bergbaubetrieb', 'abbaugut', ' von ', 'Bergbaubetrieb', 'ax_abbaugut_bergbaubetrieb'), - ('ax_flaechebesondererfunktionalerpraegung', 'funktion', ', ', 'Fläche besonderer funktionaler Prägung', 'ax_funktion_flaechebesondererfunktionalerpraegung'), - ('ax_flaechegemischternutzung', 'funktion', ', ', 'Fläche gemischter Nutzung', 'ax_funktion_flaechegemischternutzung'), - ('ax_fliessgewaesser', 'funktion', ', ', 'Fließgewässer', 'ax_funktion_fliessgewaesser'), - ('ax_flugverkehr', 'funktion', ', ', 'Flugverkehr', 'ax_funktion_flugverkehr'), - ('ax_friedhof', 'funktion', ', ', 'Friedhof', 'ax_funktion_friedhof'), - ('ax_gehoelz', 'funktion', ', ', 'Gehölz', 'ax_funktion_gehoelz'), - ('ax_hafenbecken', 'funktion', ', ', 'Hafenbecken', 'ax_funktion_hafenbecken'), - ('ax_halde', 'lagergut', ', ', 'Halde', 'ax_lagergut_halde'), - ('ax_heide', 'NULL', '', 'Heide', NULL), - ('ax_industrieundgewerbeflaeche', 'funktion', ', ', 'Industrie- und Gewerbefläche', 'ax_funktion_industrieundgewerbeflaeche'), - ('ax_landwirtschaft', 'vegetationsmerkmal', ', ', 'Landwirtschaft', 'ax_vegetationsmerkmal_landwirtschaft'), - ('ax_meer', 'funktion', ', ', 'Meer', 'ax_funktion_meer'), - ('ax_moor', 'NULL', '', 'Moor', NULL), - ('ax_platz', 'funktion', ', ', 'Platz', 'ax_funktion_platz'), - ('ax_schiffsverkehr', 'funktion', ', ', 'Schiffsverkehr', 'ax_funktion_schiffsverkehr'), - ('ax_sportfreizeitunderholungsflaeche', 'funktion', ', ', 'Sport-, Freizeit- und Erholungsfläche', 'ax_funktion_sportfreizeitunderholungsflaeche'), - ('ax_stehendesgewaesser', 'funktion', ', ', 'Stehendes Gewässer', 'ax_funktion_stehendesgewaesser'), - ('ax_strassenverkehr', 'funktion', ', ', 'Straßenverkehr', 'ax_funktion_strasse'), - ('ax_sumpf', 'NULL', '', 'Sumpf', NULL), - ('ax_tagebaugrubesteinbruch', 'abbaugut', ' von ', 'Tagebau, Grube, Steinbruch', 'ax_abbaugut_tagebaugrubesteinbruch'), - ('ax_unlandvegetationsloseflaeche', 'funktion', ', ', 'Unland, vegetationslose Fläche', 'ax_funktion_unlandvegetationsloseflaeche'), - ('ax_wald', 'vegetationsmerkmal', ', ', 'Wald', 'ax_vegetationsmerkmal_wald'), - ('ax_weg', 'funktion', ', ', 'Weg', 'ax_funktion_weg'), - ('ax_wohnbauflaeche', 'artderbebauung', ' mit Art der Bebauung ', 'Wohnbaufläche', 'ax_artderbebauung_wohnbauflaeche'); - -SELECT alkis_dropobject('alkis_createnutzung'); -CREATE OR REPLACE FUNCTION pg_temp.alkis_createnutzung() RETURNS varchar AS $$ -DECLARE - r RECORD; - nv VARCHAR; - kv VARCHAR; - d VARCHAR; - i INTEGER; - res VARCHAR; - invalid INTEGER; -BEGIN - nv := E'CREATE VIEW ax_tatsaechlichenutzung AS\n '; - kv := E'CREATE VIEW ax_tatsaechlichenutzungsschluessel AS\n '; - d := ''; - - i := 0; - FOR r IN - SELECT - name, - kennung, - funktionsfeld, - relationstext, - elementtext, - enumeration - FROM alkis_elemente e - JOIN alkis_nutzungen n ON e.name=n.element - WHERE 'ax_tatsaechlichenutzung' = ANY (abgeleitet_aus) - LOOP - res := alkis_string_append(res, pg_temp.alkis_fixareas(r.name)); - - nv := nv - || d - || 'SELECT ' - || 'ogc_fid*32+' || i ||' AS ogc_fid,' - || '''' || r.name || '''::text AS name,' - || 'gml_id,' - || alkis_toint(r.kennung) || ' AS kennung,' - || r.funktionsfeld || '::text AS funktion,' - || '''' || r.kennung || '''||coalesce('':''||' || r.funktionsfeld || ','''')::text AS nutzung,' - || 'wkb_geometry' - || ' FROM ' || r.name - || ' WHERE endet IS NULL AND hatdirektunten IS NULL' - ; - - kv := kv - || d - || 'SELECT ''' || r.kennung || ''' AS nutzung,''' || r.elementtext ||''' AS name' - ; - - IF r.funktionsfeld<>'NULL' THEN - kv := kv - || ' UNION SELECT ''' || r.kennung || ':''|| wert AS nutzung,''' - || coalesce(r.elementtext,'') || coalesce(r.relationstext,'') || '''|| beschreibung AS name' - || ' FROM ' || r.enumeration - ; - END IF; - - d := E' UNION ALL\n '; - i := i + 1; - END LOOP; - - PERFORM alkis_dropobject('ax_tatsaechlichenutzung'); - EXECUTE nv; - - PERFORM alkis_dropobject('ax_tatsaechlichenutzungsschluessel'); - EXECUTE kv; - - RETURN alkis_string_append(res, 'ax_tatsaechlichenutzung und ax_tatsaechlichenutzungsschluessel erzeugt.'); -END; -$$ LANGUAGE plpgsql; - -SELECT alkis_dropobject('alkis_klassifizierungen'); -CREATE TABLE alkis_klassifizierungen( - element VARCHAR PRIMARY KEY, - funktionsfeld VARCHAR, - prefix VARCHAR, - ackerzahl VARCHAR, - bodenzahl VARCHAR, - enumeration VARCHAR -); - -INSERT INTO alkis_klassifizierungen(element, prefix, funktionsfeld, bodenzahl, ackerzahl, enumeration) VALUES - ('ax_bodenschaetzung', 'b', 'kulturart', 'bodenzahlodergruenlandgrundzahl', 'ackerzahlodergruenlandzahl', 'ax_kulturart_bodenschaetzung'), - ('ax_bewertung', 'B', 'klassifizierung', 'NULL::varchar', 'NULL::varchar', 'ax_klassifizierung_bewertung'), - ('ax_klassifizierungnachwasserrecht', 'W', 'artderfestlegung', 'NULL::varchar', 'NULL::varchar', 'ax_artderfestlegung_klassifizierungnachwasserrecht'), - ('ax_klassifizierungnachstrassenrecht', 'S', 'artderfestlegung', 'NULL::varchar', 'NULL::varchar', 'ax_artderfestlegung_klassifizierungnachstrassenrecht'); - -SELECT alkis_dropobject('alkis_createklassifizierung'); -CREATE FUNCTION pg_temp.alkis_createklassifizierung() RETURNS varchar AS $$ -DECLARE - r RECORD; - nv VARCHAR; - kv VARCHAR; - d VARCHAR; - i INTEGER; - res VARCHAR; - invalid INTEGER; -BEGIN - nv := E'CREATE VIEW ax_klassifizierung AS\n '; - kv := E'CREATE VIEW ax_klassifizierungsschluessel AS\n '; - d := ''; - - i := 0; - FOR r IN - SELECT - name, - kennung, - funktionsfeld, - prefix, - bodenzahl, - ackerzahl, - enumeration - FROM alkis_elemente e - JOIN alkis_klassifizierungen ON e.name=alkis_klassifizierungen.element - LOOP - res := alkis_string_append(res, pg_temp.alkis_fixareas(r.name)); - - nv := nv - || d - || 'SELECT ' - || 'ogc_fid*4+' || i || ' AS ogc_fid,' - || '''' || r.name || '''::text AS name,' - || 'gml_id,' - || alkis_toint(r.kennung) || ' AS kennung,' - || r.funktionsfeld || ' AS artderfestlegung,' - || r.bodenzahl || ' AS bodenzahl,' - || r.ackerzahl || ' AS ackerzahl,' - || '''' || r.prefix || ':''||' || r.funktionsfeld || ' AS klassifizierung,' - || 'wkb_geometry' - || ' FROM ' || r.name - || ' WHERE endet IS NULL' - ; - - IF r.enumeration IS NOT NULL THEN - kv := kv - || d - || 'SELECT ' - || '''' || r.prefix || ':''|| wert AS klassifizierung, beschreibung AS name' - || ' FROM ' || r.enumeration - ; - END IF; - - d := E' UNION\n '; - i := i + 1; - END LOOP; - - PERFORM alkis_dropobject('ax_klassifizierung'); - EXECUTE nv; - - PERFORM alkis_dropobject('ax_klassifizierungsschluessel'); - EXECUTE kv; - - RETURN alkis_string_append(res, 'ax_klassifizierung und ax_klassifizierungsschluessel erzeugt.'); -END; -$$ LANGUAGE plpgsql; - -SELECT alkis_dropobject('alkis_createausfuehrendestellen'); -CREATE FUNCTION pg_temp.alkis_createausfuehrendestellen() RETURNS varchar AS $$ -DECLARE - c RECORD; - r VARCHAR[]; - v VARCHAR; - d VARCHAR; - f VARCHAR; - p VARCHAR; - i INTEGER; - res VARCHAR; - invalid INTEGER; -BEGIN - PERFORM alkis_dropobject('ax_ausfuehrendestellen'); - - PERFORM alkis_dropobject('v_schutzgebietnachwasserrecht'); - CREATE TABLE v_schutzgebietnachwasserrecht AS - SELECT z.ogc_fid,z.gml_id,'ax_schutzzone'::varchar AS name,s.land,s.stelle,z.wkb_geometry,NULL::text AS endet, hatdirektunten - FROM ax_schutzgebietnachwasserrecht s - JOIN ax_schutzzone z ON ARRAY[s.gml_id] <@ z.istteilvon AND z.endet IS NULL - WHERE false; - CREATE INDEX v_schutzgebietnachwasserrecht_wkb_geometry_idx ON v_schutzgebietnachwasserrecht USING gist(wkb_geometry); - - PERFORM alkis_dropobject('v_schutzgebietnachnaturumweltoderbodenschutzrecht'); - CREATE TABLE v_schutzgebietnachnaturumweltoderbodenschutzrecht AS - SELECT z.ogc_fid,z.gml_id,'ax_schutzzone'::varchar AS name,s.land,s.stelle,z.wkb_geometry,NULL::text AS endet, hatdirektunten - FROM ax_schutzgebietnachnaturumweltoderbodenschutzrecht s - JOIN ax_schutzzone z ON ARRAY[s.gml_id] <@ z.istteilvon AND z.endet IS NULL - WHERE false; - CREATE INDEX v_schutzgebietnachnuobr_wkb_geometry_idx ON v_schutzgebietnachnaturumweltoderbodenschutzrecht USING gist(wkb_geometry); - - v := E'CREATE VIEW ax_ausfuehrendestellen AS\n '; - d := ''; - - i := 1; - FOR c IN SELECT table_name FROM information_schema.tables WHERE table_schema=current_schema() AND table_name IN ( - 'v_schutzgebietnachwasserrecht', - 'v_schutzgebietnachnaturumweltoderbodenschutzrecht', - 'ax_naturumweltoderbodenschutzrecht', - 'ax_forstrecht', - 'ax_bauraumoderbodenordnungsrecht', - 'ax_klassifizierungnachstrassenrecht', - 'ax_denkmalschutzrecht', - 'ax_anderefestlegungnachwasserrecht', - 'ax_anderefestlegungnachstrassenrecht', - 'ax_sonstigesrecht', - 'ax_klassifizierungnachwasserrecht' - ) - LOOP - res := alkis_string_append(res, pg_temp.alkis_fixareas(c.table_name)); - - v := v - || d - || 'SELECT ' - || 'ogc_fid*16+' || i || ' AS ogc_fid,' - || '''' || c.table_name || '''::text AS name,' - || 'gml_id,' - || 'to_char(alkis_toint(land),''fm00'') || stelle AS ausfuehrendestelle,' - || 'wkb_geometry' - || ' FROM ' || c.table_name - || ' WHERE endet IS NULL AND hatdirektunten IS NULL' - ; - - d := E' UNION ALL\n '; - i := i + 1; - END LOOP; - - EXECUTE v; - - RETURN alkis_string_append(res, 'ax_ausfuehrendestellen erzeugt.'); -END; -$$ LANGUAGE plpgsql; - -SELECT 'Prüfe Flurstücksgeometrien...'; -SELECT pg_temp.alkis_fixareas('ax_flurstueck'); - -SELECT 'Übertrage Flurstücke...'; - -DELETE FROM flurst; -INSERT INTO flurst(flsnr,flsnrk,gemashl,flr,entst,fortf,flsfl,amtlflsfl,gemflsfl,af,flurknr,baublock,flskoord,fora,fina,h1shl,h2shl,hinwshl,strshl,gemshl,hausnr,lagebez,k_anlverm,anl_verm,blbnr,n_flst,ff_entst,ff_stand,ff_datum) - SELECT - alkis_flsnr(a) AS flsnr, - alkis_flsnrk(a) AS flsnrk, - to_char(alkis_toint(a.land),'fm00') || to_char(alkis_toint(a.gemarkungsnummer),'fm0000') AS gemashl, - to_char(coalesce(a.flurnummer,0),'fm000') AS flr, - to_char(date_part('year', a.zeitpunktderentstehung), 'fm0000') || '/ - ' AS entst, - NULL AS fortf, - amtlicheflaeche::int AS flsfl, - amtlicheflaeche AS amtlflsfl, - st_area(wkb_geometry) AS gemflsfl, - '01' AS af, - NULL AS flurknr, - NULL AS baublock, - alkis_flskoord(a) AS flskoord, - NULL AS fora, - NULL AS fina, - NULL AS h1shl, - NULL AS h2shl, - NULL AS hinwshl, - NULL AS strshl, - to_char(alkis_toint(a.gemeindezugehoerigkeit_land),'fm00')||a.gemeindezugehoerigkeit_regierungsbezirk||to_char(alkis_toint(a.gemeindezugehoerigkeit_kreis),'fm00')||to_char(alkis_toint(a.gemeindezugehoerigkeit_gemeinde),'fm000') AS gemshl, - NULL AS hausnr, - ( - SELECT array_to_string(array_agg(DISTINCT unverschluesselt),E'\n') - FROM ax_lagebezeichnungohnehausnummer l - WHERE l.endet IS NULL AND l.gml_id=ANY(a.zeigtauf) - ) AS lagebez, - NULL AS k_anlverm, - NULL AS anl_verm, - NULL AS blbnr, - NULL AS n_flst, - 0 AS ff_entst, - 0 AS ff_stand, - NULL AS ff_datum - FROM ax_flurstueck a - WHERE a.endet IS NULL - -- Workaround für gleiche Bestände von mehrere Katasterämtern - AND NOT EXISTS ( - SELECT * - FROM ax_flurstueck b - WHERE b.endet IS NULL - AND alkis_flsnr(a)=alkis_flsnr(b) - AND b.beginntb.ogc_fid - ) - ; - -SELECT 'Erzeuge Straßenzuordnungen...'; - -DELETE FROM str_shl; -INSERT INTO str_shl(strshl,strname,gemshl) - SELECT DISTINCT - to_char(alkis_toint(land),'fm00')||regierungsbezirk||to_char(alkis_toint(kreis),'fm00')||to_char(alkis_toint(gemeinde),'fm000')||' '||trim(lage) AS strshl, - regexp_replace(bezeichnung,' H$','') AS strname, -- RP: Historische Straßennamen mit H am Ende - to_char(alkis_toint(land),'fm00')||regierungsbezirk||to_char(alkis_toint(kreis),'fm00')||to_char(alkis_toint(gemeinde),'fm000') AS gemshl - FROM ax_lagebezeichnungkatalogeintrag a - WHERE endet IS NULL - -- Nur nötig, weil Kataloge nicht vernünfigt geführt werden und doppelte Einträge vorkommen - AND NOT EXISTS (SELECT * FROM ax_lagebezeichnungkatalogeintrag b WHERE b.endet IS NULL AND a.schluesselgesamt=b.schluesselgesamt AND b.beginntbb.ogc_fid - ) - ; - -SELECT 'Übernehme Eigentümer...'; - -SELECT alkis_dropobject('eigner_pk_seq'); -CREATE SEQUENCE eigner_pk_seq; - -DELETE FROM eigner; -INSERT INTO eigner(bestdnr,pk,ab,namensnr,ea,antverh,name,name1,name2,name3,name4,name5,name6,name7,name8,anrede,vorname,nachname,namensteile,ak_grade,geb_name,geb_datum,str_hnr,plz_pf,postfach,plz,ort,land,ff_entst,ff_stand) - SELECT - to_char(alkis_toint(bb.land),'fm00') || to_char(alkis_toint(bb.bezirk),'fm0000') || '-' || trim(bb.buchungsblattnummermitbuchstabenerweiterung) AS bestdnr, - to_hex(nextval('eigner_pk_seq'::regclass)) AS pk, - NULL AS ab, - laufendenummernachdin1421 AS namensnr, - NULL AS ea, - zaehler||'/'||nenner AS antverh, - substr( coalesce( p.nachnameoderfirma, '(' || (SELECT beschreibung FROM ax_artderrechtsgemeinschaft_namensnummer WHERE wert=artderrechtsgemeinschaft) || ')' ), 1, 4 ) AS name, - coalesce( p.nachnameoderfirma || coalesce(', ' || p.vorname, ''), '(' || (SELECT beschreibung FROM ax_artderrechtsgemeinschaft_namensnummer WHERE wert=artderrechtsgemeinschaft) || ')', '(Verschiedene)' ) AS name1, - coalesce('geb. '||p.geburtsname||', ','') || '* ' || p.geburtsdatum AS name2, - an.strasse || coalesce(' ' || an.hausnummer,'') AS name3, - coalesce(an.postleitzahlpostzustellung||' ','')||an.ort_post AS name4, - bestimmungsland AS name5, - NULL AS name6, - NULL AS name7, - NULL AS name8, - (SELECT beschreibung FROM ax_anrede_person WHERE wert=p.anrede) AS anrede, - p.vorname AS vorname, - p.nachnameoderfirma AS nachname, - p.namensbestandteil AS namensteile, - p.akademischergrad AS ak_grade, - p.geburtsname AS geb_name, - p.geburtsdatum AS geb_datum, - an.strasse || coalesce(' ' || an.hausnummer,'') AS str_hnr, - NULL AS plz_pf, - NULL AS postfach, - an.postleitzahlpostzustellung AS plz, - an.ort_post AS ort, - bestimmungsland AS land, - 0 AS ff_entst, - 0 AS ff_fortf - FROM ax_namensnummer nn - JOIN ax_buchungsblatt bb ON bb.gml_id=nn.istbestandteilvon AND bb.endet IS NULL - LEFT OUTER JOIN ax_person p ON p.gml_id=nn.benennt AND p.endet IS NULL - LEFT OUTER JOIN ax_anschrift an ON an.gml_id = ANY (p.hat) AND an.endet IS NULL - WHERE nn.endet IS NULL; - -UPDATE eigner SET name1=regexp_replace(name1, E'\\s\\s+', ' '); - -INSERT INTO eigner(bestdnr,pk,name1,ff_entst,ff_stand) - SELECT - bestdnr, - to_hex(nextval('eigner_pk_seq'::regclass)) AS pk, - '(mehrere)' AS name1, - 0 AS ff_entst, - 0 AS ff_fortf - FROM bestand - WHERE NOT EXISTS (SELECT * FROM eigner WHERE eigner.bestdnr=bestand.bestdnr); - -DELETE FROM str_shl WHERE NOT EXISTS (SELECT * FROM strassen WHERE str_shl.strshl=strassen.strshl); -DELETE FROM gema_shl - WHERE NOT EXISTS (SELECT * FROM flurst WHERE flurst.gemashl=gema_shl.gemashl) - AND NOT EXISTS (SELECT * FROM bestand WHERE substr(bestdnr,1,6)=gema_shl.gemashl); - -UPDATE gema_shl SET gemshl=(SELECT gemshl FROM flurst WHERE flurst.gemashl=gema_shl.gemashl LIMIT 1); - -DELETE FROM gem_shl - WHERE NOT EXISTS (SELECT * FROM gema_shl WHERE gema_shl.gemshl=gem_shl.gemshl) - AND NOT EXISTS (SELECT * FROM str_shl WHERE str_shl.gemshl=gem_shl.gemshl) - AND NOT EXISTS (SELECT * FROM flurst WHERE flurst.gemshl=gem_shl.gemshl); - -UPDATE str_shl SET strname=trim(regexp_replace(strname,' H$','')) WHERE strshl LIKE '07%'; -- RP: H-Suffix für historische Straßen entfernen - --- --- --- - -DELETE FROM eign_shl; -INSERT INTO eign_shl(b,eignerart) - SELECT - wert AS b, - beschreibung AS eignerart - FROM ax_buchungsart_buchungsstelle; - -DELETE FROM fortf; -INSERT INTO fortf(ffnr,beschreibung) VALUES (1, 'Aus ALKIS übernommen: '||to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC','YYYY-MM-DD"T"HH24:MI:SS"Z"')); - -DELETE FROM fs; -INSERT INTO fs(fs_key,fs_obj,alb_key) - SELECT ogc_fid,gml_id,alkis_flsnr(ax_flurstueck) FROM ax_flurstueck WHERE endet IS NULL; - -CREATE TEMPORARY TABLE amtlbestfl AS - SELECT - bestdnr, - SUM( - amtlflsfl* - CASE - WHEN anteil IS NULL OR split_part(anteil,'/',2)::float8=0 THEN 1.0 - ELSE split_part(anteil,'/',1)::float8 / split_part(anteil,'/',2)::float8 - END - ) AS amtlbestfl - FROM flurst - JOIN eignerart ON flurst.flsnr=eignerart.flsnr - GROUP BY bestdnr; - -CREATE UNIQUE INDEX amtlbestfl_idx ON amtlbestfl(bestdnr); - -UPDATE bestand SET amtlbestfl=(SELECT amtlbestfl FROM amtlbestfl WHERE amtlbestfl.bestdnr=bestand.bestdnr); - -UPDATE bestand SET bestfl=amtlbestfl::int WHERE amtlbestfl<=2147483647; -- maxint - -SELECT "Buchdaten","Anzahl" FROM ( - SELECT 1 AS o, 'Bestände' AS "Buchdaten", count(*) AS "Anzahl" FROM bestand UNION - SELECT 2, 'Bestände ohne Eigentümerart', count(*) FROM bestand WHERE NOT EXISTS (SELECT * FROM eignerart WHERE eignerart.bestdnr=bestand.bestdnr) UNION - SELECT 3, 'Bestände ohne Eigentümer', count(*) FROM bestand WHERE NOT EXISTS (SELECT * FROM eigner WHERE eigner.bestdnr=bestand.bestdnr) UNION - SELECT 4, 'Flurstücke', count(*) FROM flurst UNION - SELECT 5, 'Flurstücke ohne Eigentümerart', count(*) FROM flurst WHERE NOT EXISTS (SELECT * FROM eignerart WHERE eignerart.flsnr=flurst.flsnr) -) AS stat ORDER BY o; - -SELECT 'Erzeuge Sicht für Klassifizierungen...'; -SELECT pg_temp.alkis_createklassifizierung(); - -DELETE FROM kls_shl; -INSERT INTO kls_shl(klf,klf_text) - SELECT klassifizierung,name FROM ax_klassifizierungsschluessel; - -SELECT 'Bestimme Flurstücksklassifizierungen...'; - -SELECT alkis_dropobject('klas_3x_pk_seq'); -CREATE SEQUENCE klas_3x_pk_seq; - -DELETE FROM klas_3x; -INSERT INTO klas_3x(flsnr,pk,klf,wertz1,wertz2,gemfl,fl,ff_entst,ff_stand) - SELECT - alkis_flsnr(f) AS flsnr, - to_hex(nextval('klas_3x_pk_seq'::regclass)) AS pk, - k.klassifizierung AS klf, - k.bodenzahl, - k.ackerzahl, - sum(st_area(alkis_intersection(f.wkb_geometry,k.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||k.name||':'||k.gml_id))) AS gemfl, - (sum(st_area(alkis_intersection(f.wkb_geometry,k.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||k.name||':'||k.gml_id)))*amtlicheflaeche/st_area(f.wkb_geometry))::int AS fl, - 0 AS ff_entst, - 0 AS ff_stand - FROM ax_flurstueck f - JOIN ax_klassifizierung k - ON f.wkb_geometry && k.wkb_geometry - AND alkis_relate(f.wkb_geometry,k.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>'||k.name||':'||k.gml_id) - WHERE f.endet IS NULL - GROUP BY alkis_flsnr(f), f.amtlicheflaeche, f.wkb_geometry, k.klassifizierung, k.bodenzahl, k.ackerzahl; - -SELECT 'Erzeuge Sicht für Nutzungen...'; -SELECT pg_temp.alkis_createnutzung(); - -DELETE FROM nutz_shl; -INSERT INTO nutz_shl(nutzshl,nutzung) - SELECT nutzung,name FROM ax_tatsaechlichenutzungsschluessel; - -SELECT 'Bestimme Flurstücksnutzungen...'; - -SELECT alkis_dropobject('nutz_shl_pk_seq'); -CREATE SEQUENCE nutz_shl_pk_seq; - -DELETE FROM nutz_21; -INSERT INTO nutz_21(flsnr,pk,nutzsl,gemfl,fl,ff_entst,ff_stand) - SELECT - alkis_flsnr(f) AS flsnr, - to_hex(nextval('nutz_shl_pk_seq'::regclass)) AS pk, - n.nutzung AS nutzsl, - sum(st_area(alkis_intersection(f.wkb_geometry,n.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||n.name||':'||n.gml_id))) AS gemfl, - (sum(st_area(alkis_intersection(f.wkb_geometry,n.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||n.name||':'||n.gml_id))*amtlicheflaeche/st_area(f.wkb_geometry)))::int AS fl, - 0 AS ff_entst, - 0 AS ff_stand - FROM ax_flurstueck f - JOIN ax_tatsaechlichenutzung n - ON f.wkb_geometry && n.wkb_geometry - AND alkis_relate(f.wkb_geometry,n.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>'||n.name||':'||n.gml_id) - WHERE f.endet IS NULL - GROUP BY alkis_flsnr(f), f.wkb_geometry, n.nutzung; - -SELECT 'Erzeuge Sicht für ausführende Stellen...'; -SELECT pg_temp.alkis_createausfuehrendestellen(); - -DELETE FROM v_schutzgebietnachwasserrecht; -INSERT INTO v_schutzgebietnachwasserrecht - SELECT z.ogc_fid,z.gml_id,'ax_schutzzone'::varchar AS name,s.land,s.stelle,z.wkb_geometry,NULL::text AS endet - FROM ax_schutzgebietnachwasserrecht s - JOIN ax_schutzzone z ON ARRAY[s.gml_id] <@ z.istteilvon AND z.endet IS NULL - WHERE s.endet IS NULL; -CREATE TEMP SEQUENCE a; -UPDATE v_schutzgebietnachwasserrecht SET ogc_fid=nextval('a'); - -DELETE FROM v_schutzgebietnachnaturumweltoderbodenschutzrecht; -INSERT INTO v_schutzgebietnachnaturumweltoderbodenschutzrecht - SELECT z.ogc_fid,z.gml_id,'ax_schutzzone'::varchar AS name,s.land,s.stelle,z.wkb_geometry,NULL::text AS endet - FROM ax_schutzgebietnachnaturumweltoderbodenschutzrecht s - JOIN ax_schutzzone z ON ARRAY[s.gml_id] <@ z.istteilvon AND z.endet IS NULL - WHERE s.endet IS NULL; -DROP SEQUENCE a; -CREATE TEMP SEQUENCE a; -UPDATE v_schutzgebietnachwasserrecht SET ogc_fid=nextval('a'); - -SELECT 'Bestimme ausführende Stellen für Flurstücke...'; - -SELECT alkis_dropobject('ausfst_pk_seq'); -CREATE SEQUENCE ausfst_pk_seq; - -DELETE FROM ausfst; -INSERT INTO ausfst(flsnr,pk,ausf_st,verfnr,verfshl,ff_entst,ff_stand) - SELECT - alkis_flsnr(f) AS flsnr, - to_hex(nextval('ausfst_pk_seq'::regclass)) AS pk, - s.ausfuehrendestelle AS ausf_st, - NULL AS verfnr, - NULL AS verfshl, - 0 AS ff_entst, - 0 AS ff_stand - FROM ax_flurstueck f - JOIN ax_ausfuehrendestellen s - ON f.wkb_geometry && s.wkb_geometry - AND alkis_relate(f.wkb_geometry,s.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>'||s.name||':'||s.gml_id) - WHERE f.endet IS NULL - GROUP BY alkis_flsnr(f), s.ausfuehrendestelle; - -DELETE FROM afst_shl; -INSERT INTO afst_shl(ausf_st,afst_txt) - SELECT - schluesselgesamt, - MIN(bezeichnung) - FROM ax_dienststelle d - JOIN ausfst ON ausf_st=schluesselgesamt - GROUP BY schluesselgesamt; - -SELECT 'Belege Baulastenblattnummer...'; - -SELECT alkis_dropobject('bblnr_temp'); -CREATE TEMPORARY TABLE bblnr_temp AS - SELECT - alkis_flsnr(f) AS flsnr, - b.bezeichnung - FROM ax_flurstueck f - JOIN ax_bauraumoderbodenordnungsrecht b - ON b.endet IS NULL - AND b.artderfestlegung=2610 - AND f.wkb_geometry && b.wkb_geometry - AND alkis_relate(f.wkb_geometry,b.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>ax_bauraumoderbodenordnungsrecht:'||b.gml_id) - WHERE f.endet IS NULL; - -CREATE INDEX bblnr_temp_flsnr ON bblnr_temp(flsnr); - -UPDATE flurst SET blbnr=(SELECT regexp_replace(array_to_string(array_agg(DISTINCT b.bezeichnung),','),E'\(.{196}\).+',E'\\1 ...') FROM bblnr_temp b WHERE flurst.flsnr=b.flsnr); diff --git a/postprocessing.d/4_nas2alb/1_flurst.sql b/postprocessing.d/4_nas2alb/1_flurst.sql new file mode 100644 index 0000000..fd34dbf --- /dev/null +++ b/postprocessing.d/4_nas2alb/1_flurst.sql @@ -0,0 +1,78 @@ +SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; + +--- +--- Flurstücke +--- + +SELECT 'Prüfe Flurstücksgeometrien...'; +SELECT alkis_fixareas('ax_flurstueck'); + +SELECT 'Übertrage Flurstücke...'; + +DELETE FROM flurst; +INSERT INTO flurst(flsnr,flsnrk,gemashl,flr,entst,fortf,flsfl,amtlflsfl,gemflsfl,af,flurknr,baublock,flskoord,fora,fina,h1shl,h2shl,hinwshl,strshl,gemshl,hausnr,lagebez,k_anlverm,anl_verm,blbnr,n_flst,ff_entst,ff_stand,ff_datum) + SELECT + alkis_flsnr(a) AS flsnr, + alkis_flsnrk(a) AS flsnrk, + to_char(alkis_toint(a.land),'fm00') || to_char(alkis_toint(a.gemarkungsnummer),'fm0000') AS gemashl, + to_char(coalesce(a.flurnummer,0),'fm000') AS flr, + to_char(date_part('year', a.zeitpunktderentstehung), 'fm0000') || '/ - ' AS entst, + NULL AS fortf, + amtlicheflaeche::int AS flsfl, + amtlicheflaeche AS amtlflsfl, + st_area(wkb_geometry) AS gemflsfl, + '01' AS af, + NULL AS flurknr, + NULL AS baublock, + alkis_flskoord(a) AS flskoord, + NULL AS fora, + NULL AS fina, + NULL AS h1shl, + NULL AS h2shl, + NULL AS hinwshl, + NULL AS strshl, + to_char(alkis_toint(a.gemeindezugehoerigkeit_land),'fm00')||a.gemeindezugehoerigkeit_regierungsbezirk||to_char(alkis_toint(a.gemeindezugehoerigkeit_kreis),'fm00')||to_char(alkis_toint(a.gemeindezugehoerigkeit_gemeinde),'fm000') AS gemshl, + NULL AS hausnr, + ( + SELECT array_to_string(array_agg(DISTINCT unverschluesselt),E'\n') + FROM ax_lagebezeichnungohnehausnummer l + WHERE l.endet IS NULL AND l.gml_id=ANY(a.zeigtauf) + ) AS lagebez, + NULL AS k_anlverm, + NULL AS anl_verm, + NULL AS blbnr, + NULL AS n_flst, + 0 AS ff_entst, + 0 AS ff_stand, + NULL AS ff_datum + FROM ax_flurstueck a + WHERE a.endet IS NULL + -- Workaround für gleiche Bestände von mehreren Katasterämtern + AND NOT EXISTS ( + SELECT * + FROM ax_flurstueck b + WHERE b.endet IS NULL + AND alkis_flsnr(a)=alkis_flsnr(b) + AND b.beginntb.ogc_fid + ) + ; + +SELECT 'Belege Baulastenblattnummer...'; + +SELECT alkis_dropobject('bblnr_temp'); +CREATE TEMPORARY TABLE bblnr_temp AS + SELECT + alkis_flsnr(f) AS flsnr, + b.bezeichnung + FROM ax_flurstueck f + JOIN ax_bauraumoderbodenordnungsrecht b + ON b.endet IS NULL + AND b.artderfestlegung=2610 + AND f.wkb_geometry && b.wkb_geometry + AND alkis_relate(f.wkb_geometry,b.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>ax_bauraumoderbodenordnungsrecht:'||b.gml_id) + WHERE f.endet IS NULL; + +CREATE INDEX bblnr_temp_flsnr ON bblnr_temp(flsnr); + +UPDATE flurst SET blbnr=(SELECT regexp_replace(array_to_string(array_agg(DISTINCT b.bezeichnung),','),E'\(.{196}\).+',E'\\1 ...') FROM bblnr_temp b WHERE flurst.flsnr=b.flsnr); diff --git a/postprocessing.d/4_nas2alb/2_strassen.sql b/postprocessing.d/4_nas2alb/2_strassen.sql new file mode 100644 index 0000000..73b13a6 --- /dev/null +++ b/postprocessing.d/4_nas2alb/2_strassen.sql @@ -0,0 +1,46 @@ +SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; + +--- +--- Straßenzuordnungen +--- + +SELECT 'Erzeuge Straßenzuordnungen...'; + +DELETE FROM str_shl; +INSERT INTO str_shl(strshl,strname,gemshl) + SELECT DISTINCT + to_char(alkis_toint(land),'fm00')||regierungsbezirk||to_char(alkis_toint(kreis),'fm00')||to_char(alkis_toint(gemeinde),'fm000')||' '||trim(lage) AS strshl, + regexp_replace(bezeichnung,' H$','') AS strname, -- RP: Historische Straßennamen mit H am Ende + to_char(alkis_toint(land),'fm00')||regierungsbezirk||to_char(alkis_toint(kreis),'fm00')||to_char(alkis_toint(gemeinde),'fm000') AS gemshl + FROM ax_lagebezeichnungkatalogeintrag a + WHERE endet IS NULL + -- Nur nötig, weil im Katalog doppelte Einträge vorkommen + AND NOT EXISTS (SELECT * FROM ax_lagebezeichnungkatalogeintrag b WHERE b.endet IS NULL AND a.schluesselgesamt=b.schluesselgesamt AND b.beginntbb.ogc_fid + ) + ; + +--- +--- Eigentümer +--- + +SELECT 'Übernehme Eigentümer...'; + +SELECT alkis_dropobject('eigner_pk_seq'); +CREATE SEQUENCE eigner_pk_seq; + +DELETE FROM eigner; +INSERT INTO eigner(bestdnr,pk,ab,namensnr,ea,antverh,name,name1,name2,name3,name4,name5,name6,name7,name8,anrede,vorname,nachname,namensteile,ak_grade,geb_name,geb_datum,str_hnr,plz_pf,postfach,plz,ort,land,ff_entst,ff_stand) + SELECT + to_char(alkis_toint(bb.land),'fm00') || to_char(alkis_toint(bb.bezirk),'fm0000') || '-' || trim(bb.buchungsblattnummermitbuchstabenerweiterung) AS bestdnr, + to_hex(nextval('eigner_pk_seq'::regclass)) AS pk, + NULL AS ab, + laufendenummernachdin1421 AS namensnr, + NULL AS ea, + zaehler||'/'||nenner AS antverh, + substr( coalesce( p.nachnameoderfirma, '(' || (SELECT beschreibung FROM ax_artderrechtsgemeinschaft_namensnummer WHERE wert=artderrechtsgemeinschaft) || ')' ), 1, 4 ) AS name, + coalesce( p.nachnameoderfirma || coalesce(', ' || p.vorname, ''), '(' || (SELECT beschreibung FROM ax_artderrechtsgemeinschaft_namensnummer WHERE wert=artderrechtsgemeinschaft) || ')', '(Verschiedene)' ) AS name1, + coalesce('geb. '||p.geburtsname||', ','') || '* ' || p.geburtsdatum AS name2, + an.strasse || coalesce(' ' || an.hausnummer,'') AS name3, + coalesce(an.postleitzahlpostzustellung||' ','')||an.ort_post AS name4, + bestimmungsland AS name5, + NULL AS name6, + NULL AS name7, + NULL AS name8, + (SELECT beschreibung FROM ax_anrede_person WHERE wert=p.anrede) AS anrede, + p.vorname AS vorname, + p.nachnameoderfirma AS nachname, + p.namensbestandteil AS namensteile, + p.akademischergrad AS ak_grade, + p.geburtsname AS geb_name, + p.geburtsdatum AS geb_datum, + an.strasse || coalesce(' ' || an.hausnummer,'') AS str_hnr, + NULL AS plz_pf, + NULL AS postfach, + an.postleitzahlpostzustellung AS plz, + an.ort_post AS ort, + bestimmungsland AS land, + 0 AS ff_entst, + 0 AS ff_fortf + FROM ax_namensnummer nn + JOIN ax_buchungsblatt bb ON bb.gml_id=nn.istbestandteilvon AND bb.endet IS NULL + LEFT OUTER JOIN ax_person p ON p.gml_id=nn.benennt AND p.endet IS NULL + LEFT OUTER JOIN ax_anschrift an ON an.gml_id = ANY (p.hat) AND an.endet IS NULL + WHERE nn.endet IS NULL; + +UPDATE eigner SET name1=regexp_replace(name1, E'\\s\\s+', ' '); + +INSERT INTO eigner(bestdnr,pk,name1,ff_entst,ff_stand) + SELECT + bestdnr, + to_hex(nextval('eigner_pk_seq'::regclass)) AS pk, + '(mehrere)' AS name1, + 0 AS ff_entst, + 0 AS ff_fortf + FROM bestand + WHERE NOT EXISTS (SELECT * FROM eigner WHERE eigner.bestdnr=bestand.bestdnr); diff --git a/postprocessing.d/4_nas2alb/5_klassifizierung.sql b/postprocessing.d/4_nas2alb/5_klassifizierung.sql new file mode 100644 index 0000000..634b3d8 --- /dev/null +++ b/postprocessing.d/4_nas2alb/5_klassifizierung.sql @@ -0,0 +1,123 @@ +SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; + +--- +--- Klassifizierungen +--- + +SELECT alkis_dropobject('alkis_klassifizierungen'); +CREATE TABLE alkis_klassifizierungen( + element VARCHAR PRIMARY KEY, + funktionsfeld VARCHAR, + prefix VARCHAR, + ackerzahl VARCHAR, + bodenzahl VARCHAR, + enumeration VARCHAR +); + +INSERT INTO alkis_klassifizierungen(element, prefix, funktionsfeld, bodenzahl, ackerzahl, enumeration) VALUES + ('ax_bodenschaetzung', 'b', 'kulturart', 'bodenzahlodergruenlandgrundzahl', 'ackerzahlodergruenlandzahl', 'ax_kulturart_bodenschaetzung'), + ('ax_bewertung', 'B', 'klassifizierung', 'NULL::varchar', 'NULL::varchar', 'ax_klassifizierung_bewertung'), + ('ax_klassifizierungnachwasserrecht', 'W', 'artderfestlegung', 'NULL::varchar', 'NULL::varchar', 'ax_artderfestlegung_klassifizierungnachwasserrecht'), + ('ax_klassifizierungnachstrassenrecht', 'S', 'artderfestlegung', 'NULL::varchar', 'NULL::varchar', 'ax_artderfestlegung_klassifizierungnachstrassenrecht'); + +SELECT alkis_dropobject('alkis_createklassifizierung'); +CREATE FUNCTION pg_temp.alkis_createklassifizierung() RETURNS varchar AS $$ +DECLARE + r RECORD; + nv VARCHAR; + kv VARCHAR; + d VARCHAR; + i INTEGER; + res VARCHAR; + invalid INTEGER; +BEGIN + nv := E'CREATE VIEW ax_klassifizierung AS\n '; + kv := E'CREATE VIEW ax_klassifizierungsschluessel AS\n '; + d := ''; + + i := 0; + FOR r IN + SELECT + name, + kennung, + funktionsfeld, + prefix, + bodenzahl, + ackerzahl, + enumeration + FROM alkis_elemente e + JOIN alkis_klassifizierungen ON e.name=alkis_klassifizierungen.element + LOOP + res := alkis_string_append(res, alkis_fixareas(r.name)); + + nv := nv + || d + || 'SELECT ' + || 'ogc_fid*4+' || i || ' AS ogc_fid,' + || '''' || r.name || '''::text AS name,' + || 'gml_id,' + || alkis_toint(r.kennung) || ' AS kennung,' + || r.funktionsfeld || ' AS artderfestlegung,' + || r.bodenzahl || ' AS bodenzahl,' + || r.ackerzahl || ' AS ackerzahl,' + || '''' || r.prefix || ':''||' || r.funktionsfeld || ' AS klassifizierung,' + || 'wkb_geometry' + || ' FROM ' || r.name + || ' WHERE endet IS NULL' + ; + + IF r.enumeration IS NOT NULL THEN + kv := kv + || d + || 'SELECT ' + || '''' || r.prefix || ':''|| wert AS klassifizierung, beschreibung AS name' + || ' FROM ' || r.enumeration + ; + END IF; + + d := E' UNION\n '; + i := i + 1; + END LOOP; + + PERFORM alkis_dropobject('ax_klassifizierung'); + EXECUTE nv; + + PERFORM alkis_dropobject('ax_klassifizierungsschluessel'); + EXECUTE kv; + + RETURN alkis_string_append(res, 'ax_klassifizierung und ax_klassifizierungsschluessel erzeugt.'); +END; +$$ LANGUAGE plpgsql; + +SELECT 'Erzeuge Sicht für Klassifizierungen...'; +SELECT pg_temp.alkis_createklassifizierung(); + +DELETE FROM kls_shl; +INSERT INTO kls_shl(klf,klf_text) + SELECT klassifizierung,name FROM ax_klassifizierungsschluessel; + +SELECT 'Bestimme Flurstücksklassifizierungen...'; + +SELECT alkis_dropobject('klas_3x_pk_seq'); +CREATE SEQUENCE klas_3x_pk_seq; + +UPDATE ax_bodenschaetzung SET bodenzahlodergruenlandgrundzahl=NULL WHERE bodenzahlodergruenlandgrundzahl IN ('nicht belegt',''); + +DELETE FROM klas_3x; +INSERT INTO klas_3x(flsnr,pk,klf,wertz1,wertz2,gemfl,fl,ff_entst,ff_stand) + SELECT + alkis_flsnr(f) AS flsnr, + to_hex(nextval('klas_3x_pk_seq'::regclass)) AS pk, + k.klassifizierung AS klf, + k.bodenzahl, + k.ackerzahl, + sum(st_area(alkis_intersection(f.wkb_geometry,k.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||k.name||':'||k.gml_id))) AS gemfl, + (sum(st_area(alkis_intersection(f.wkb_geometry,k.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||k.name||':'||k.gml_id)))*amtlicheflaeche/st_area(f.wkb_geometry))::int AS fl, + 0 AS ff_entst, + 0 AS ff_stand + FROM ax_flurstueck f + JOIN ax_klassifizierung k + ON f.wkb_geometry && k.wkb_geometry + AND alkis_relate(f.wkb_geometry,k.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>'||k.name||':'||k.gml_id) + WHERE f.endet IS NULL + GROUP BY alkis_flsnr(f), f.amtlicheflaeche, f.wkb_geometry, k.klassifizierung, k.bodenzahl, k.ackerzahl; diff --git a/postprocessing.d/4_nas2alb/6_nutzung.sql b/postprocessing.d/4_nas2alb/6_nutzung.sql new file mode 100644 index 0000000..c0c7189 --- /dev/null +++ b/postprocessing.d/4_nas2alb/6_nutzung.sql @@ -0,0 +1,142 @@ +SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; + +--- +--- Nutzungen +--- + +SELECT alkis_dropobject('alkis_nutzungen'); +CREATE TABLE alkis_nutzungen( + element VARCHAR PRIMARY KEY, + funktionsfeld VARCHAR, + relationstext VARCHAR, + elementtext VARCHAR, + enumeration VARCHAR +); + +INSERT INTO alkis_nutzungen(element, funktionsfeld, relationstext, elementtext, enumeration) VALUES + ('ax_bahnverkehr', 'funktion', ', ', 'Bahnverkehr', 'ax_funktion_bahnverkehr'), + ('ax_bergbaubetrieb', 'abbaugut', ' von ', 'Bergbaubetrieb', 'ax_abbaugut_bergbaubetrieb'), + ('ax_flaechebesondererfunktionalerpraegung', 'funktion', ', ', 'Fläche besonderer funktionaler Prägung', 'ax_funktion_flaechebesondererfunktionalerpraegung'), + ('ax_flaechegemischternutzung', 'funktion', ', ', 'Fläche gemischter Nutzung', 'ax_funktion_flaechegemischternutzung'), + ('ax_fliessgewaesser', 'funktion', ', ', 'Fließgewässer', 'ax_funktion_fliessgewaesser'), + ('ax_flugverkehr', 'funktion', ', ', 'Flugverkehr', 'ax_funktion_flugverkehr'), + ('ax_friedhof', 'funktion', ', ', 'Friedhof', 'ax_funktion_friedhof'), + ('ax_gehoelz', 'funktion', ', ', 'Gehölz', 'ax_funktion_gehoelz'), + ('ax_hafenbecken', 'funktion', ', ', 'Hafenbecken', 'ax_funktion_hafenbecken'), + ('ax_halde', 'lagergut', ', ', 'Halde', 'ax_lagergut_halde'), + ('ax_heide', 'NULL', '', 'Heide', NULL), + ('ax_industrieundgewerbeflaeche', 'funktion', ', ', 'Industrie- und Gewerbefläche', 'ax_funktion_industrieundgewerbeflaeche'), + ('ax_landwirtschaft', 'vegetationsmerkmal', ', ', 'Landwirtschaft', 'ax_vegetationsmerkmal_landwirtschaft'), + ('ax_meer', 'funktion', ', ', 'Meer', 'ax_funktion_meer'), + ('ax_moor', 'NULL', '', 'Moor', NULL), + ('ax_platz', 'funktion', ', ', 'Platz', 'ax_funktion_platz'), + ('ax_schiffsverkehr', 'funktion', ', ', 'Schiffsverkehr', 'ax_funktion_schiffsverkehr'), + ('ax_sportfreizeitunderholungsflaeche', 'funktion', ', ', 'Sport-, Freizeit- und Erholungsfläche', 'ax_funktion_sportfreizeitunderholungsflaeche'), + ('ax_stehendesgewaesser', 'funktion', ', ', 'Stehendes Gewässer', 'ax_funktion_stehendesgewaesser'), + ('ax_strassenverkehr', 'funktion', ', ', 'Straßenverkehr', 'ax_funktion_strasse'), + ('ax_sumpf', 'NULL', '', 'Sumpf', NULL), + ('ax_tagebaugrubesteinbruch', 'abbaugut', ' von ', 'Tagebau, Grube, Steinbruch', 'ax_abbaugut_tagebaugrubesteinbruch'), + ('ax_unlandvegetationsloseflaeche', 'funktion', ', ', 'Unland, vegetationslose Fläche', 'ax_funktion_unlandvegetationsloseflaeche'), + ('ax_wald', 'vegetationsmerkmal', ', ', 'Wald', 'ax_vegetationsmerkmal_wald'), + ('ax_weg', 'funktion', ', ', 'Weg', 'ax_funktion_weg'), + ('ax_wohnbauflaeche', 'artderbebauung', ' mit Art der Bebauung ', 'Wohnbaufläche', 'ax_artderbebauung_wohnbauflaeche'); + +SELECT alkis_dropobject('alkis_createnutzung'); +CREATE OR REPLACE FUNCTION pg_temp.alkis_createnutzung() RETURNS varchar AS $$ +DECLARE + r RECORD; + nv VARCHAR; + kv VARCHAR; + d VARCHAR; + i INTEGER; + res VARCHAR; + invalid INTEGER; +BEGIN + nv := E'CREATE VIEW ax_tatsaechlichenutzung AS\n '; + kv := E'CREATE VIEW ax_tatsaechlichenutzungsschluessel AS\n '; + d := ''; + + i := 0; + FOR r IN + SELECT + name, + kennung, + funktionsfeld, + relationstext, + elementtext, + enumeration + FROM alkis_elemente e + JOIN alkis_nutzungen n ON e.name=n.element + WHERE 'ax_tatsaechlichenutzung' = ANY (abgeleitet_aus) + LOOP + res := alkis_string_append(res, alkis_fixareas(r.name)); + + nv := nv + || d + || 'SELECT ' + || 'ogc_fid*32+' || i ||' AS ogc_fid,' + || '''' || r.name || '''::text AS name,' + || 'gml_id,' + || alkis_toint(r.kennung) || ' AS kennung,' + || r.funktionsfeld || '::text AS funktion,' + || '''' || r.kennung || '''||coalesce('':''||' || r.funktionsfeld || ','''')::text AS nutzung,' + || 'wkb_geometry' + || ' FROM ' || r.name + || ' WHERE endet IS NULL AND hatdirektunten IS NULL' + ; + + kv := kv + || d + || 'SELECT ''' || r.kennung || ''' AS nutzung,''' || r.elementtext ||''' AS name' + ; + + IF r.funktionsfeld<>'NULL' THEN + kv := kv + || ' UNION SELECT ''' || r.kennung || ':''|| wert AS nutzung,''' + || coalesce(r.elementtext,'') || coalesce(r.relationstext,'') || '''|| beschreibung AS name' + || ' FROM ' || r.enumeration + ; + END IF; + + d := E' UNION ALL\n '; + i := i + 1; + END LOOP; + + PERFORM alkis_dropobject('ax_tatsaechlichenutzung'); + EXECUTE nv; + + PERFORM alkis_dropobject('ax_tatsaechlichenutzungsschluessel'); + EXECUTE kv; + + RETURN alkis_string_append(res, 'ax_tatsaechlichenutzung und ax_tatsaechlichenutzungsschluessel erzeugt.'); +END; +$$ LANGUAGE plpgsql; + +SELECT 'Erzeuge Sicht für Nutzungen...'; +SELECT pg_temp.alkis_createnutzung(); + +DELETE FROM nutz_shl; +INSERT INTO nutz_shl(nutzshl,nutzung) + SELECT nutzung,name FROM ax_tatsaechlichenutzungsschluessel; + +SELECT 'Bestimme Flurstücksnutzungen...'; + +SELECT alkis_dropobject('nutz_shl_pk_seq'); +CREATE SEQUENCE nutz_shl_pk_seq; + +DELETE FROM nutz_21; +INSERT INTO nutz_21(flsnr,pk,nutzsl,gemfl,fl,ff_entst,ff_stand) + SELECT + alkis_flsnr(f) AS flsnr, + to_hex(nextval('nutz_shl_pk_seq'::regclass)) AS pk, + n.nutzung AS nutzsl, + sum(st_area(alkis_intersection(f.wkb_geometry,n.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||n.name||':'||n.gml_id))) AS gemfl, + (sum(st_area(alkis_intersection(f.wkb_geometry,n.wkb_geometry,'ax_flurstueck:'||f.gml_id||'<=>'||n.name||':'||n.gml_id))*amtlicheflaeche/st_area(f.wkb_geometry)))::int AS fl, + 0 AS ff_entst, + 0 AS ff_stand + FROM ax_flurstueck f + JOIN ax_tatsaechlichenutzung n + ON f.wkb_geometry && n.wkb_geometry + AND alkis_relate(f.wkb_geometry,n.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>'||n.name||':'||n.gml_id) + WHERE f.endet IS NULL + GROUP BY alkis_flsnr(f), f.wkb_geometry, n.nutzung; diff --git a/postprocessing.d/4_nas2alb/7_stellen.sql b/postprocessing.d/4_nas2alb/7_stellen.sql new file mode 100644 index 0000000..95128fb --- /dev/null +++ b/postprocessing.d/4_nas2alb/7_stellen.sql @@ -0,0 +1,120 @@ +SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; + +--- Ausführende Stellen +--- + +SELECT alkis_dropobject('alkis_createausfuehrendestellen'); +CREATE FUNCTION pg_temp.alkis_createausfuehrendestellen() RETURNS varchar AS $$ +DECLARE + c RECORD; + r VARCHAR[]; + v VARCHAR; + d VARCHAR; + f VARCHAR; + p VARCHAR; + i INTEGER; + res VARCHAR; + invalid INTEGER; +BEGIN + PERFORM alkis_dropobject('ax_ausfuehrendestellen'); + + res := alkis_string_append(res, alkis_fixareas('ax_schutzzone')); + + CREATE TEMP SEQUENCE a; + + PERFORM alkis_dropobject('v_schutzgebietnachwasserrecht'); + CREATE TABLE v_schutzgebietnachwasserrecht AS + SELECT nextval('a') AS ogc_fid,z.gml_id,'ax_schutzzone'::varchar AS name,s.land,s.stelle,z.wkb_geometry,NULL::text AS endet, hatdirektunten + FROM ax_schutzgebietnachwasserrecht s + JOIN ax_schutzzone z ON ARRAY[s.gml_id] <@ z.istteilvon AND z.endet IS NULL + WHERE s.endet IS NULL; + CREATE INDEX v_schutzgebietnachwasserrecht_wkb_geometry_idx ON v_schutzgebietnachwasserrecht USING gist(wkb_geometry); + + DROP SEQUENCE a; + CREATE TEMP SEQUENCE a; + + PERFORM alkis_dropobject('v_schutzgebietnachnaturumweltoderbodenschutzrecht'); + CREATE TABLE v_schutzgebietnachnaturumweltoderbodenschutzrecht AS + SELECT nextval('a') AS ogc_fid,z.gml_id,'ax_schutzzone'::varchar AS name,s.land,s.stelle,z.wkb_geometry,NULL::text AS endet, hatdirektunten + FROM ax_schutzgebietnachnaturumweltoderbodenschutzrecht s + JOIN ax_schutzzone z ON ARRAY[s.gml_id] <@ z.istteilvon AND z.endet IS NULL + WHERE s.endet IS NULL; + CREATE INDEX v_schutzgebietnachnuobr_wkb_geometry_idx ON v_schutzgebietnachnaturumweltoderbodenschutzrecht USING gist(wkb_geometry); + + v := E'CREATE VIEW ax_ausfuehrendestellen AS\n '; + d := ''; + + i := 1; + FOR c IN SELECT table_name FROM information_schema.tables WHERE table_schema=current_schema() AND table_name IN ( + 'v_schutzgebietnachwasserrecht', + 'v_schutzgebietnachnaturumweltoderbodenschutzrecht', + 'ax_naturumweltoderbodenschutzrecht', + 'ax_forstrecht', + 'ax_bauraumoderbodenordnungsrecht', + 'ax_klassifizierungnachstrassenrecht', + 'ax_denkmalschutzrecht', + 'ax_anderefestlegungnachwasserrecht', + 'ax_anderefestlegungnachstrassenrecht', + 'ax_sonstigesrecht', + 'ax_klassifizierungnachwasserrecht' + ) + LOOP + IF c.table_name LIKE 'ax_%' THEN + res := alkis_string_append(res, alkis_fixareas(c.table_name)); + END IF; + + v := v + || d + || 'SELECT ' + || 'ogc_fid*16+' || i || ' AS ogc_fid,' + || '''' || c.table_name || '''::text AS name,' + || 'gml_id,' + || 'to_char(alkis_toint(land),''fm00'') || stelle AS ausfuehrendestelle,' + || 'wkb_geometry' + || ' FROM ' || c.table_name + || ' WHERE endet IS NULL AND hatdirektunten IS NULL' + ; + + d := E' UNION ALL\n '; + i := i + 1; + END LOOP; + + EXECUTE v; + + RETURN alkis_string_append(res, 'ax_ausfuehrendestellen erzeugt.'); +END; +$$ LANGUAGE plpgsql; + +SELECT 'Erzeuge Sicht für ausführende Stellen...'; +SELECT pg_temp.alkis_createausfuehrendestellen(); + +SELECT 'Bestimme ausführende Stellen für Flurstücke...'; + +SELECT alkis_dropobject('ausfst_pk_seq'); +CREATE SEQUENCE ausfst_pk_seq; + +DELETE FROM ausfst; +INSERT INTO ausfst(flsnr,pk,ausf_st,verfnr,verfshl,ff_entst,ff_stand) + SELECT + alkis_flsnr(f) AS flsnr, + to_hex(nextval('ausfst_pk_seq'::regclass)) AS pk, + s.ausfuehrendestelle AS ausf_st, + NULL AS verfnr, + NULL AS verfshl, + 0 AS ff_entst, + 0 AS ff_stand + FROM ax_flurstueck f + JOIN ax_ausfuehrendestellen s + ON f.wkb_geometry && s.wkb_geometry + AND alkis_relate(f.wkb_geometry,s.wkb_geometry,'2********','ax_flurstueck:'||f.gml_id||'<=>'||s.name||':'||s.gml_id) + WHERE f.endet IS NULL + GROUP BY alkis_flsnr(f), s.ausfuehrendestelle; + +DELETE FROM afst_shl; +INSERT INTO afst_shl(ausf_st,afst_txt) + SELECT + schluesselgesamt, + MIN(bezeichnung) + FROM ax_dienststelle d + JOIN ausfst ON ausf_st=schluesselgesamt + GROUP BY schluesselgesamt; diff --git a/postprocessing.d/4_postnas-keytables.sql b/postprocessing.d/4_postnas-keytables.sql index 93b18bb..9f9b413 100644 --- a/postprocessing.d/4_postnas-keytables.sql +++ b/postprocessing.d/4_postnas-keytables.sql @@ -15,7 +15,6 @@ ***************************************************************************/ SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; -\set ON_ERROR_STOP -- TODO: Sichten mit Nutzungdaten (nutzung*) diff --git a/postprocessing.d/5_nas2alb.sql b/postprocessing.d/5_nas2alb.sql new file mode 100644 index 0000000..6204130 --- /dev/null +++ b/postprocessing.d/5_nas2alb.sql @@ -0,0 +1,96 @@ +SET search_path = :"alkis_schema", :"parent_schema", :"postgis_schema", public; + +--- +--- Gemeinden +--- + +DELETE FROM gem_shl; +INSERT INTO gem_shl(gemshl,gemname) + SELECT + to_char(alkis_toint(schluesselgesamt),'fm00000000') AS gemshl, + min(bezeichnung) AS gemname + FROM ax_gemeinde a + WHERE endet IS NULL + GROUP BY to_char(alkis_toint(schluesselgesamt),'fm00000000'); + +--- +--- Gemarkungen +--- + +DELETE FROM gema_shl; +INSERT INTO gema_shl(gemashl,gemarkung) + SELECT + to_char(alkis_toint(land),'fm00')||to_char(alkis_toint(gemarkungsnummer),'fm0000') AS gemashl, + MIN(bezeichnung) AS gemarkung + FROM ax_gemarkung + WHERE endet IS NULL + GROUP BY to_char(alkis_toint(land),'fm00')||to_char(alkis_toint(gemarkungsnummer),'fm0000'); + +--- +--- Ungenutzte Straßen-, Gemarkungs- und Gemeindeschlüssel entfernen +--- + +DELETE FROM str_shl WHERE NOT EXISTS (SELECT * FROM strassen WHERE str_shl.strshl=strassen.strshl); +DELETE FROM gema_shl + WHERE NOT EXISTS (SELECT * FROM flurst WHERE flurst.gemashl=gema_shl.gemashl) + AND NOT EXISTS (SELECT * FROM bestand WHERE substr(bestdnr,1,6)=gema_shl.gemashl); + +UPDATE gema_shl SET gemshl=(SELECT gemshl FROM flurst WHERE flurst.gemashl=gema_shl.gemashl LIMIT 1); + +DELETE FROM gem_shl + WHERE NOT EXISTS (SELECT * FROM gema_shl WHERE gema_shl.gemshl=gem_shl.gemshl) + AND NOT EXISTS (SELECT * FROM str_shl WHERE str_shl.gemshl=gem_shl.gemshl) + AND NOT EXISTS (SELECT * FROM flurst WHERE flurst.gemshl=gem_shl.gemshl); + +UPDATE str_shl SET strname=trim(regexp_replace(strname,' H$','')) WHERE strshl LIKE '07%'; -- RP: H-Suffix für historische Straßen entfernen + +-- +-- Eigentümerschlüssel +-- + +DELETE FROM eign_shl; +INSERT INTO eign_shl(b,eignerart) + SELECT + wert AS b, + beschreibung AS eignerart + FROM ax_buchungsart_buchungsstelle; + +--- +--- Fortführungsdatum +--- + +DELETE FROM fortf; +INSERT INTO fortf(ffnr,beschreibung) VALUES (1, 'Aus ALKIS übernommen: '||to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC','YYYY-MM-DD"T"HH24:MI:SS"Z"')); + +--- Flurstückszuordnungen +DELETE FROM fs; +INSERT INTO fs(fs_key,fs_obj,alb_key) + SELECT ogc_fid,gml_id,alkis_flsnr(ax_flurstueck) FROM ax_flurstueck WHERE endet IS NULL; + +CREATE TEMPORARY TABLE amtlbestfl AS + SELECT + bestdnr, + SUM( + amtlflsfl* + CASE + WHEN anteil IS NULL OR split_part(anteil,'/',2)::float8=0 THEN 1.0 + ELSE split_part(anteil,'/',1)::float8 / split_part(anteil,'/',2)::float8 + END + ) AS amtlbestfl + FROM flurst + JOIN eignerart ON flurst.flsnr=eignerart.flsnr + GROUP BY bestdnr; + +CREATE UNIQUE INDEX amtlbestfl_idx ON amtlbestfl(bestdnr); + +UPDATE bestand SET amtlbestfl=(SELECT amtlbestfl FROM amtlbestfl WHERE amtlbestfl.bestdnr=bestand.bestdnr); + +UPDATE bestand SET bestfl=amtlbestfl::int WHERE amtlbestfl<=2147483647; -- maxint + +SELECT "Buchdaten","Anzahl" FROM ( + SELECT 1 AS o, 'Bestände' AS "Buchdaten", count(*) AS "Anzahl" FROM bestand UNION + SELECT 2, 'Bestände ohne Eigentümerart', count(*) FROM bestand WHERE NOT EXISTS (SELECT * FROM eignerart WHERE eignerart.bestdnr=bestand.bestdnr) UNION + SELECT 3, 'Bestände ohne Eigentümer', count(*) FROM bestand WHERE NOT EXISTS (SELECT * FROM eigner WHERE eigner.bestdnr=bestand.bestdnr) UNION + SELECT 4, 'Flurstücke', count(*) FROM flurst UNION + SELECT 5, 'Flurstücke ohne Eigentümerart', count(*) FROM flurst WHERE NOT EXISTS (SELECT * FROM eignerart WHERE eignerart.flsnr=flurst.flsnr) +) AS stat ORDER BY o; diff --git a/postupdate.d/nas2alb.sql b/postupdate.d/nas2alb.sql index e534fbd..6833b30 100644 --- a/postupdate.d/nas2alb.sql +++ b/postupdate.d/nas2alb.sql @@ -82,6 +82,8 @@ BEGIN COMMENT ON TABLE str_shl IS 'BASE: Straßenschlüssel'; COMMENT ON TABLE kls_shl IS 'BASE: Klassifiziersschlüssel'; + ALTER TABLE strassen ALTER hausnr TYPE varchar; + UPDATE alb_version SET version=3; r := coalesce(r||E'\n','') || 'ALB-Schema migriert'; diff --git a/preprocessing.d/0_alkis-signaturen.sql b/preprocessing.d/0_alkis-signaturen.sql index c8b9453..d0da126 100644 --- a/preprocessing.d/0_alkis-signaturen.sql +++ b/preprocessing.d/0_alkis-signaturen.sql @@ -18,7 +18,6 @@ -- Automatisch erzeugt mit alkis-parse-sigs.pl -- Änderungen werden überschrieben -- -\set ON_ERROR_STOP SET search_path = :"alkis_schema", :"postgis_schema", public; SELECT 'Lade Signaturen...'; diff --git a/re b/re index 52648ea..db3f615 100644 --- a/re +++ b/re @@ -14,16 +14,14 @@ ^OGR: OGROpen\(.*\) succeeded as NAS\.\s*$ ^OGR: OGROpen\(PG:.*\) succeeded as PostgreSQL\.\s*$ ^GDAL: In GDALDestroy - unloading GDAL shared library\.\s*$ -^psql:.*: (NOTICE|HINWEIS): (function|aggregate|Funktion|Aggregatfunktion) alkis_accum\(anyarray\) (does not exist, skipping|existiert nicht, wird \S+bersprungen) -^psql:.*: (NOTICE|HINWEIS): (function|Funktion) alkis_(drop\(\)|dropobject\(text\)|delete\(\)|mviews\(\)|update_schema\(\)|set_schema\(text\)) (does not exist, skipping|existiert nicht, wird \S+bersprungen)$ +^psql:.*: (NOTICE|HINWEIS): (function|aggregate|Funktion|Aggregatfunktion) ([^.]+\.)?alkis_accum\(anyarray\) (does not exist, skipping|existiert nicht, wird \S+bersprungen) +^psql:.*: (NOTICE|HINWEIS): (function|Funktion) ([^.]+\.)?alkis_(drop\(\)|dropobject\(text\)|delete\(\)|mviews\(\)|update_schema\(\)|set_schema\(text\)) (does not exist, skipping|existiert nicht, wird \S+bersprungen)$ ^psql:.*: (NOTICE|HINWEIS): Dropping (table|view|sequence) ^psql:.*: (NOTICE|HINWEIS): gserialized_gist_joinsel: jointype 4 not supported\s*$ ^psql:.*: (NOTICE|HINWEIS): (geometry|LWGEOM)_gist_joinsel called with incorrect join type\s*$ ^CONTEXT: PL\/pgSQL-Funktion (alkis|alb)_.* Zeile \d+ bei RAISE ^CONTEXT: SQL statement in PL\/PgSQL function "alkis_(update_schema|set_comments)" near line \d+\s*$ ^CONTEXT: SQL statement "ALTER TABLE alkis_(flaechen|linien|schriften) ADD PRIMARY KEY \(katalog,signaturnummer\)" -psql:alkis-functions.sql:.*: ERROR: syntax error at or near "WITH RECURSIVE"\s*$ -^(LINE 1|QUERY):\s+WITH RECURSIVE element\(name,base\) AS ^\s+\^\s*$ ^.*: (NOTICE|HINWEIS): CREATE TABLE ^NOTICE: CREATE TABLE @@ -38,6 +36,8 @@ psql:alkis-functions.sql:.*: ERROR: syntax error at or near "WITH RECURSIVE"\s* ^psql:alkis-compat.sql:.*: FEHLER: Berechtigung nur f\S+r Eigent\S+mer der Funktion st_dump\s*$ ^psql:alkis-compat.sql:.*: ERROR: aggregate ([^.]+\.)?array_agg\(any(element|array)\) does not exist ^psql:alkis-compat.sql:.*: FEHLER: Aggregatfunktion ([^.]\.)?array_agg\(any(element|array)\) existiert nicht +^psql:alkis-compat.sql:.*: ERROR: cannot drop function array_agg\(anyelement\) because it is required by the database system +^psql:alkis-compat.sql:.*: FEHLER: kann .* nicht löschen, wird vom Datenbanksystem benötigt ^psql:alkis-update.sql:.*: NOTICE: ALTER TABLE \/ ADD PRIMARY KEY will create implicit index "alkis_(flaechen|linien|schriften)_pkey" for table "alkis_(flaechen|linien|schriften)" ^.*(Tabelle|Sicht|Sequenz|Funktion|Constraint|Index).*gel\S+scht\..*$ ^\s+(addgeometrycolumn|alkis_clean|alkis_drop|alkis_dropobject|alkis_create_bsrs|alkis_set_comments|alkis_update_schema|alkis_besondereflurstuecksgrenze|alkis_fixareas|alkis_inherit|version|postgis_version|\?column\?|alkis_set_schema)\s*$