source: trunk/data/konvert/postnas_0.7/konv_batch.sh @ 183

Revision 183, 5.7 KB checked in by frank.jaeger, 11 years ago (diff)

Trigger fuer NAS-Replace-Sätze repariert (Quick 'n Dirty).

Line 
1#!/bin/bash
2## -------------------------------------------------
3## Konvertierung von ALKIS NAS-Format nach PosGIS  -
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 temporär ausgepackt.
16##   Relativ zum mitgegebenen Parameter ist das: '../temp/'
17##   Parallel laufende Konvertierungen zum gleichen Mandanten
18##   würden 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 unterdrücken
24##   2012-04-25 Durch GDAL Patch #5444 werden die Löschungen als Trigger auf Tabelle 'delete' verarbeitet
25##   2012-05-18 Umzug neue GDI, GDAL-Trunk unter Pfad
26##   2012-10-30 Umgebungsvariable setzen, delete-Tabelle am Ende für Analyse gefüllt lassen.
27##              Test als 0.7a mit gepatchter gdal-Version (noch 2.0dev)
28##
29## Konverter:   /opt/gdal-2.0/bin/ = GDAL 2.0-DEV / PostNAS 0.7
30## Koordinaten: EPSG:25832  UTM, Zone 32
31##              -a_srs EPSG:25832   - bleibt im UTM-System (korrigierte Werte)
32##
33echo "**************************************************"
34echo "**   K o n v e r t i e r u n g     PostNAS 0.7a **"
35echo "**************************************************"
36## Parameter:
37ORDNER=$1
38DBNAME=$2
39UPD=$3
40PP=$4
41if [ $ORDNER == "" ]
42then
43        echo "Parameter 1 'Ordner' ist leer"
44        exit 1
45fi
46if [ $DBNAME == "" ]
47then
48        echo "Parameter 2 'Datenbank' ist leer"
49        exit 2
50fi
51if [ $UPD == "a" ]
52then
53        verarb="NBA-Aktualisierung"
54        update=" -update "
55else
56        if [ $UPD == "e" ]
57        then
58                verarb="Erstladen"
59                update=""
60        else
61                echo "Parameter 3 'Aktualisierung' ist weder e noch a"
62                exit 3
63        fi
64fi
65if [ $PP == "nopp" ]
66then
67        echo "KEIN Post-Processing nach dieser Konvertierung."
68else
69        if [ $PP == "pp" ]
70        then
71                echo "normales Post-Processing."
72        else
73                echo "FEHLER: Parameter 4 'Post-Proscessing' ist weder 'nopp' noch 'pp'"
74                exit 4
75        fi
76fi
77# Fehlerprotokoll:
78  errprot='/data/konvert/postnas_0.7a/log/postnas_err_'$DBNAME'.prot'
79#
80# DB-Connection
81  con="-p 5432 -d ${DBNAME} "
82  echo "Datenbank-Name . . = ${DBNAME}"
83  echo "Ordner NAS-Daten . = ${ORDNER}"
84  echo "Verarbeitungs-Modus= ${verarb}"
85  echo " "
86# noch alte delete-Eintraege in DB?
87  echo "Leeren der delete-Tabelle"
88  echo 'TRUNCATE table "delete";' | psql $con
89#
90# Ordner abarbeiten
91#
92  cd ${ORDNER}
93  rm ../temp/*.gfs
94  echo "Dateien in " ${ORDNER} " (ls) :"
95  ls
96  for zipfile in *.zip ; do
97    echo " "
98    rm ../temp/*.xml
99    echo "*********"
100   #echo "* Archiv: " $zipfile
101    unzip ${zipfile}  -d ../temp
102    # Es sollte nur ein XML-File in jedem ZIP-File stecken, aber es geht auch anders.
103    for nasdatei in ../temp/*.xml ; do
104      # echo "* Datei:  " $nasdatei
105      # Zwischenueberschrift im Fehlerprotokoll
106      echo "* Datei: " $nasdatei >> $errprot
107      #
108      # Umgebungsvariable setzen:
109        export GML_FIELDTYPES=ALWAYS_STRINGS    # PostNAS behandelt Zahlen wie Strings, PostgreSQL-Treiber macht daraus Zahlen
110        export OGR_SETFIELD_NUMERIC_WARNING=YES # Meldung abgeschnittene Zahlen?
111       #export CPL_DEBUG=ON                     # Meldung, wenn Attribute überschrieben werden
112      #
113      # PostNAS Konverter-Aufruf
114      #
115      # -skipfailures    #
116      # -overwrite       #
117      /opt/gdal-2.0/bin/ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures  \
118         PG:"dbname=${DBNAME} host=localhost port=5432" -a_srs EPSG:25832 ${nasdatei} 2>> $errprot
119      nasresult=$?
120      echo "* Resultat: " $nasresult " fuer " ${nasdatei}
121          echo "* Resultat: " $nasresult " fuer " ${nasdatei}  >> $errprot
122    done # Ende Zipfile
123  done # Ende Ordner
124  rm ../temp/*.xml
125  echo " "
126  echo "** Ende Konvertierung Ordner ${ORDNER}"
127#
128# Post-Processing / Nacharbeiten
129#
130  if [ $PP == "nopp" ]
131  then
132    echo "** KEIN Post-Processing - Dies Spaeter nachholen."
133    # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem großen Bestand laufen
134    # Der Aufwand für das Post-Processing ist dann nur bei der LETZTEN Aktualisierung notwendig.
135  else
136    echo "** Post-Processing (Nacharbeiten zur Konvertierung)"
137    echo "** - Optimierte Nutzungsarten neu Laden:"
138    psql -p 5432 -d ${DBNAME} < /data/konvert/postnas_0.7a/nutzungsart_laden.sql
139    ##
140    echo "** - Fluren / Gemarkungen / Gemeinden neu Laden:"
141    psql -p 5432 -d ${DBNAME} < /data/konvert/postnas_0.7a/pp_laden.sql
142  fi
143# Durch Einfuegen in Tabelle 'delete' werden Loeschungen anderer Tabellen getriggert
144  echo "** delete-Tabelle enthält:"
145  echo 'SELECT COUNT(featureid) AS delete_zeilen FROM "delete";' | psql $con
146 #echo "   delete-Tabelle loeschen:"
147 #echo 'TRUNCATE table "delete";' | psql $con
148 # Fuer Analyse-Zwecke sollten die Delete-Eintraege erhalten bleiben bis zum naechsten Lauf.
149 # TRUNCATE erfolgt VOR der Konnvertierung.
150#
151# Wenn die Datenbank MIT Historie angelegt wurde, man diese aber gar nicht braucht,
152# dann hinterher aufräumen der historischen Objekte
153 #echo "** geendete Objekte entfernen:"
154# Function :
155 #echo 'SELECT alkis_delete_all_endet();' | psql $con
156 #echo "  ... geendete Objekte entfernen wurde fuer Test dektiviert."
157 #echo "  Bitte manuell ausfuehren:  SELECT alkis_delete_all_endet(); "
158#
159  echo "Das Fehler-Protokoll wurde ausgegeben in die Datei $errprot"
160 #echo "HINWEIS: -skipfailures  fuer Produktion wieder einschalten."
161#
Note: See TracBrowser for help on using the repository browser.