source: trunk/import/konv_batch.sh @ 327

Revision 327, 7.0 KB checked in by frank.jaeger, 7 years ago (diff)
Line 
1#!/bin/bash
2## -------------------------------------------------
3## Konvertierung von ALKIS NAS-Format nach PostGIS -
4## NAS-Daten in einem Ordner konvertieren          -
5## Batch-Teil, Aufruf mit geprueften Parametern    -
6## -------------------------------------------------
7##
8## Ordner-Struktur:
9##   /mandant/
10##           /0001/*.xml.zip
11##           /0002/*.xml.zip
12##          usw.
13##           /temp/
14##   Auf der gleichen Ebene wie die Datenordner muss ein Ordner /temp/ existieren.
15##   Dort werden die NAS-Daten temporaer ausgepackt.
16##   Relativ zum mitgegebenen Parameter ist das: '../temp/'
17##   Parallel laufende Konvertierungen zum gleichen Mandanten
18##   wuerden hier durcheinander geraten. Vermeiden!
19##
20## Stand:
21##   2012-02-10 Umbennung nach 0.7
22##   2012-02-17 Optimierung
23##   2012-02-28 Neuer Parameter 4 um Post-Prozessing zu unterdruecken
24##   2012-04-25 Durch GDAL Patch #5444 werden die Loeschungen als Trigger auf Tabelle 'delete' verarbeitet
25##   2012-05-18 Umzug neue GDI, GDAL-Trunk unter Pfad
26##   2012-06-04 SQL-Skripte in deren Verzeichnis ausfuehren (Voraussetzung fuer \i Includes)
27##   2012-10-30 Umgebungsvariable setzen, delete-Tabelle am Ende fuer Analyse gefuellt lassen.
28##              Test als 0.7a mit gepatchter gdal-Version (noch 2.0dev)
29##   2013-10-16 F.J. krz: Neues Script "pp_praesentation_action.sql" fÃŒr Reparatur der
30##              PrÀsentationsobjekte Straßenname im Post-Processing
31##   2013-10-24 F.J. krz: Zwischenlösung "praesentation_action.sql" wieder deaktiviert.
32##   2014-01-31 F.J. krz: Import Eintrag erzeugen (nach Vorschlag Marvin Brandt, Unna)
33##   2014-02-13 A.Emde WhereGroup: EinfÃŒhrung DBUSER, damit im Skript der Datenbankbenutzer angegeben werden kann
34##
35## ToDo: Option "-skipfailures" nach Test entfernen ?
36##
37## Koordinaten: EPSG:25832  UTM, Zone 32
38##              -a_srs EPSG:25832   - bleibt im UTM-System (korrigierte Werte)
39##
40
41POSTNAS_HOME=$(dirname $0)
42
43# Konverterpfad
44PATH=/opt/gdal-2.0/bin:$PATH
45EPSG=25832
46DBUSER=postgres
47
48if [ $DBUSER == "" ]
49then
50  echo "kein DBUSER gesetzt"
51else
52  PGUSER=" -U ${DBUSER} "
53fi
54
55if [ $DBUSER == "" ]
56then
57  echo "kein DBUSER gesetzt"
58else
59  OGRPGUSER=" user=${DBUSER}"
60fi
61
62echo "**************************************************"
63echo "**   K o n v e r t i e r u n g     PostNAS 0.7a **"
64echo "**************************************************"
65## Parameter:
66ORDNER=$1
67DBNAME=$2
68UPD=$3
69PP=$4
70if [ $ORDNER == "" ]
71then
72        echo "Parameter 1 'Ordner' ist leer"
73        exit 1
74fi
75if [ $DBNAME == "" ]
76then
77        echo "Parameter 2 'Datenbank' ist leer"
78        exit 2
79fi
80if [ $UPD == "a" ]
81then
82        verarb="NBA-Aktualisierung"
83        update=" -update "
84else
85        if [ $UPD == "e" ]
86        then
87                verarb="Erstladen"
88                update=""
89        else
90                echo "Parameter 3 'Aktualisierung' ist weder e noch a"
91                exit 3
92        fi
93fi
94if [ $PP == "nopp" ]
95then
96        echo "KEIN Post-Processing nach dieser Konvertierung."
97else
98        if [ $PP == "pp" ]
99        then
100                echo "normales Post-Processing."
101        else
102                echo "FEHLER: Parameter 4 'Post-Proscessing' ist weder 'nopp' noch 'pp'"
103                exit 4
104        fi
105fi
106# Fehlerprotokoll:
107  errprot=${POSTNAS_HOME}'/log/postnas_err_'$DBNAME'.prot'
108#
109# DB-Connection
110  con="${PGUSER} -p 5432 -d ${DBNAME} "
111  echo "Datenbank-Name . . = ${DBNAME}"
112  echo "DBUSER ${DBUSER}"
113  echo "PGUSER ${PGUSER}"
114  echo "OGRPGUSER ${OGRPGUSER}"
115  echo "Ordner NAS-Daten . = ${ORDNER}"
116  echo "Verarbeitungs-Modus= ${verarb}"
117  echo " "
118  echo "POSTNAS_HOME ${POSTNAS_HOME}"
119  echo " "
120# noch alte delete-Eintraege in DB?
121  echo "Leeren der delete-Tabelle"
122  echo 'TRUNCATE table "delete";' | psql $con
123
124#
125# Import Eintrag erzeugen
126#
127# Die dadurch erzeugte Import-ID dient zur Steuerung des Löschens alter Relationen im Trigger.
128# Wird die Datenbank MIT Historie geladen, muss die folgende Zeile auskommentiert werden.
129echo "INSERT INTO import (datum,verzeichnis,importart) VALUES ('"$(date '+%Y-%m-%d %H:%M:%S')"','"${ORDNER}"','"${verarb}"');" | psql $con
130
131#
132# Ordner abarbeiten
133#
134  cd ${ORDNER}
135  rm ../temp/*.gfs
136  echo "Dateien in " ${ORDNER} " (ls) :"
137  ls
138  for zipfile in *.zip ; do
139    echo " "
140    rm ../temp/*.xml
141    echo "*********"
142   #echo "* Archiv: " $zipfile
143    unzip ${zipfile}  -d ../temp
144    # Es sollte nur ein XML-File in jedem ZIP-File stecken, aber es geht auch anders.
145    for nasdatei in ../temp/*.xml ; do
146      # echo "* Datei:  " $nasdatei
147      # Zwischenueberschrift im Fehlerprotokoll
148      echo "* Datei: " $nasdatei >> $errprot
149      #
150      # Umgebungsvariable setzen:
151        export GML_FIELDTYPES=ALWAYS_STRINGS    # PostNAS behandelt Zahlen wie Strings, PostgreSQL-Treiber macht daraus Zahlen
152        export OGR_SETFIELD_NUMERIC_WARNING=YES # Meldung abgeschnittene Zahlen?
153       #export CPL_DEBUG=ON                     # Meldung, wenn Attribute ueberschrieben werden
154      #
155      # PostNAS Konverter-Aufruf
156      #
157      # -skipfailures    #
158      # -overwrite       #
159      ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures \
160         PG:"dbname=${DBNAME} host=localhost port=5432 ${OGRPGUSER}" -a_srs EPSG:$EPSG ${nasdatei} 2>> $errprot
161      nasresult=$?
162      echo "* Resultat: " $nasresult " fuer " ${nasdatei} | tee -a $errprot
163    done # Ende Zipfile
164  done # Ende Ordner
165  rm ../temp/*.xml
166  echo " "
167  echo "** Ende Konvertierung Ordner ${ORDNER}"
168#
169# Post-Processing / Nacharbeiten
170#
171  if [ $PP == "nopp" ]
172  then
173    echo "** KEIN Post-Processing - Dies spaeter nachholen."
174    # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem grossen Bestand laufen
175    # Der Aufwand fuer das Post-Processing ist dann nur bei der LETZTEN Aktualisierung notwendig.
176  else
177    echo "** Post-Processing (Nacharbeiten zur Konvertierung)"
178
179    echo "** - Optimierte Nutzungsarten neu Laden:"
180    (cd $POSTNAS_HOME; psql $con -f nutzungsart_laden.sql)
181    echo "-----------"
182
183    echo "** - Fluren / Gemarkungen / Gemeinden neu Laden:"
184    (cd $POSTNAS_HOME; psql $con -f pp_laden.sql)
185
186
187    # echo "** - PrÀsentationsobjekte generieren:"
188    # (cd $POSTNAS_HOME; psql $con -f pp_praesentation_action.sql)
189
190  fi
191#
192  if [ "$(readlink $POSTNAS_HOME/alkis-trigger.sql)" = "alkis-trigger-kill.sql" ]; then
193# Durch Einfuegen in Tabelle 'delete' werden Loeschungen anderer Tabellen getriggert
194    echo "** delete-Tabelle enthaelt:"
195    echo 'SELECT COUNT(featureid) AS delete_zeilen FROM "delete";' | psql $con
196    #echo "   delete-Tabelle loeschen:"
197    #echo 'TRUNCATE table "delete";' | psql $con
198 # Fuer Analyse-Zwecke sollten die Delete-Eintraege erhalten bleiben bis zum naechsten Lauf.
199 # TRUNCATE erfolgt VOR der Konnvertierung.
200#
201# Wenn die Datenbank MIT Historie angelegt wurde, man diese aber gar nicht braucht,
202# dann hinterher aufraeumen der historischen Objekte
203    #echo "** geendete Objekte entfernen:"
204# Function:
205    #echo 'SELECT alkis_delete_all_endet();' | psql $con
206    #echo "  ... geendete Objekte entfernen wurde fuer Test dektiviert."
207    #echo "  Bitte manuell ausfuehren:  SELECT alkis_delete_all_endet(); "
208  fi
209  echo "Das Fehler-Protokoll wurde ausgegeben in die Datei $errprot"
210  #echo "HINWEIS: -skipfailures  fuer Produktion wieder einschalten."
Note: See TracBrowser for help on using the repository browser.