source: trunk/import/konv_batch.sh @ 331

Revision 331, 7.0 KB checked in by frank.jaeger, 10 years ago (diff)

Kleinere Korrekturen an den Import-Scripten.

RevLine 
[190]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)
[330]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.
[314]32##   2014-01-31 F.J. krz: Import Eintrag erzeugen (nach Vorschlag Marvin Brandt, Unna)
[330]33##   2014-02-13 A.Emde WhereGroup: EinfÃŒhrung DBUSER, damit im Skript der Datenbankbenutzer angegeben werden kann
[328]34##   2014-05-12 F.J. krz: Unterschiedliche Pfade in Test (TRUNK) und Produktion (Rel. 1.11.0)
35##   2014-06-18 F.J. DB-User nicht "postgres" (in $con).
36##                   Konverter ind Nacharbeiten sonst mit unterschiedlichem User.
[330]37##                   Abgleich Test/Prod-Version.
[328]38##                   Entfernen der historischen Objekte nach Konvertierung.
[330]39##   2014-09-09 F.J. krz: Parameter "--config PG_USE_COPY YES" zur Beschleunigung. Ausgabe import-Tabelle.
[331]40##   2014-09-11 F.J. krz: Eintrag in import-Tabelle repariert.
41##                   Keine Abfrage des Symlinks auf kill/hist. Enstscheidend ist die aktuelle DB, nicht der Symlink
[328]42
[330]43POSTNAS_HOME=$(dirname $0)
[190]44
[330]45# Konverterpfad. TRUNK-Version (immer letzter Stand der Entwicklung)
46PATH=/opt/gdal-2.0/bin:$PATH
[190]47EPSG=25832
[328]48DBUSER=b600352
[190]49
[317]50if [ $DBUSER == "" ]
51then
[318]52  echo "kein DBUSER gesetzt"
[317]53else
[318]54  PGUSER=" -U ${DBUSER} "
[317]55fi
[190]56
[317]57if [ $DBUSER == "" ]
58then
[318]59  echo "kein DBUSER gesetzt"
60else
[317]61  OGRPGUSER=" user=${DBUSER}"
62fi
[328]63 
64echo "
65**********************************************
66**   K o n v e r t i e r u n g     PostNAS  **
[330]67**********************************************"
[190]68## Parameter:
69ORDNER=$1
70DBNAME=$2
71UPD=$3
72PP=$4
[330]73
[190]74if [ $ORDNER == "" ]
75then
76        echo "Parameter 1 'Ordner' ist leer"
77        exit 1
78fi
79if [ $DBNAME == "" ]
80then
81        echo "Parameter 2 'Datenbank' ist leer"
82        exit 2
83fi
[330]84
[190]85if [ $UPD == "a" ]
86then
87        verarb="NBA-Aktualisierung"
88        update=" -update "
89else
90        if [ $UPD == "e" ]
91        then
92                verarb="Erstladen"
93                update=""
94        else
95                echo "Parameter 3 'Aktualisierung' ist weder e noch a"
96                exit 3
97        fi
98fi
[330]99
[190]100if [ $PP == "nopp" ]
101then
102        echo "KEIN Post-Processing nach dieser Konvertierung."
103else
104        if [ $PP == "pp" ]
105        then
106                echo "normales Post-Processing."
107        else
108                echo "FEHLER: Parameter 4 'Post-Proscessing' ist weder 'nopp' noch 'pp'"
109                exit 4
110        fi
111fi
[328]112
[190]113# Fehlerprotokoll:
[330]114  errprot=${POSTNAS_HOME}'/log/postnas_err_'$DBNAME'.prot'
[328]115
[330]116  echo "GDAL/PostNAS Konverter-Version:" >> $errprot
117  ogr2ogr --version >> $errprot
118
[190]119# DB-Connection
[330]120  con="${PGUSER} -p 5432 -d ${DBNAME} "
121  echo "Datenbank-Name . . = ${DBNAME}"
122  echo "DBUSER ${DBUSER}"
123  echo "PGUSER ${PGUSER}"
124  echo "OGRPGUSER ${OGRPGUSER}"
125  echo "Ordner NAS-Daten . = ${ORDNER}"
126  echo "Verarbeitungs-Modus= ${verarb}"
127  echo "POSTNAS_HOME ${POSTNAS_HOME}"
[328]128
[330]129  # noch alte delete-Eintraege?
130  echo "Leeren der delete-Tabelle"
131  psql $con -c 'TRUNCATE table "delete";'
[328]132
[330]133  echo "Bisherige Konvertierungen (Import-Tabelle):"
134  psql $con -c "SELECT * FROM import;"
[314]135
136# Import Eintrag erzeugen
[331]137# UrsprÌnglich fÌr Trigger-Steuerung benötigt. Nun als Metadaten nÌtzlich.
138  echo "INSERT INTO import (datum,verzeichnis,importart) VALUES ('"$(date '+%Y-%m-%d %H:%M:%S')"','"${ORDNER}"','"${verarb}"');" | psql $con
[314]139
[190]140# Ordner abarbeiten
[328]141
[190]142  cd ${ORDNER}
143  rm ../temp/*.gfs
144  echo "Dateien in " ${ORDNER} " (ls) :"
145  ls
146  for zipfile in *.zip ; do
147    echo " "
148    rm ../temp/*.xml
149    echo "*********"
150   #echo "* Archiv: " $zipfile
151    unzip ${zipfile}  -d ../temp
152    # Es sollte nur ein XML-File in jedem ZIP-File stecken, aber es geht auch anders.
153    for nasdatei in ../temp/*.xml ; do
154      # echo "* Datei:  " $nasdatei
155      # Zwischenueberschrift im Fehlerprotokoll
156      echo "* Datei: " $nasdatei >> $errprot
[328]157
[190]158      # Umgebungsvariable setzen:
159        export GML_FIELDTYPES=ALWAYS_STRINGS    # PostNAS behandelt Zahlen wie Strings, PostgreSQL-Treiber macht daraus Zahlen
160        export OGR_SETFIELD_NUMERIC_WARNING=YES # Meldung abgeschnittene Zahlen?
161       #export CPL_DEBUG=ON                     # Meldung, wenn Attribute ueberschrieben werden
[330]162 
[190]163      # PostNAS Konverter-Aufruf
[330]164      ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures --config PG_USE_COPY YES \
[317]165         PG:"dbname=${DBNAME} host=localhost port=5432 ${OGRPGUSER}" -a_srs EPSG:$EPSG ${nasdatei} 2>> $errprot
[190]166      nasresult=$?
167      echo "* Resultat: " $nasresult " fuer " ${nasdatei} | tee -a $errprot
168    done # Ende Zipfile
169  done # Ende Ordner
170  rm ../temp/*.xml
171  echo " "
[330]172  echo "** Ende Konvertierung Ordner ${ORDNER}"
[328]173
[330]174#
[190]175# Post-Processing / Nacharbeiten
[330]176#
[190]177  if [ $PP == "nopp" ]
178  then
179    echo "** KEIN Post-Processing - Dies spaeter nachholen."
180    # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem grossen Bestand laufen
[330]181    # Der Aufwand fÃŒr das Post-Processing ist dann nur bei der LETZTEN Aktualisierung notwendig.
[328]182
[190]183  else
[328]184
[190]185    echo "** Post-Processing (Nacharbeiten zur Konvertierung)"
[294]186
[190]187    echo "** - Optimierte Nutzungsarten neu Laden:"
[317]188    (cd $POSTNAS_HOME; psql $con -f nutzungsart_laden.sql)
[328]189 
[330]190    echo "-----------"
191 
192    echo "** - Fluren, Gemarkungen, Gemeinden und Straßen-Namen neu Laden:"
[317]193    (cd $POSTNAS_HOME; psql $con -f pp_laden.sql)
[294]194
[328]195  fi
[294]196
[331]197  # Durch EinfÃŒgen in Tabelle 'delete' werden Löschungen und Aktualisierungen anderer Tabellen getriggert
198  echo "** delete-Tabelle enthaelt:"
199  psql $con -c 'SELECT COUNT(featureid) AS delete_zeilen FROM "delete";'
[294]200
[331]201  echo "   delete-Tabelle loeschen:"
202  psql $con -c 'TRUNCATE table "delete";'
[328]203
[331]204  #if [ "$(readlink $POSTNAS_HOME/alkis-trigger.sql)" = "alkis-trigger-kill.sql" ]; then
205    # AufrÀumen der historischen Objekte
206  #  echo "** geendete Objekte entfernen:"
207  #  psql $con -c "SELECT alkis_delete_all_endet();"
208  #fi
[328]209
[294]210  echo "Das Fehler-Protokoll wurde ausgegeben in die Datei $errprot"
[330]211  echo "** ENDE PostNAS 0.8-Konvertierung  DB='$DBNAME'  Ordner='$ORDNER' "
[328]212 
Note: See TracBrowser for help on using the repository browser.