source: trunk/import/konv_batch.sh @ 215

Revision 215, 5.7 KB checked in by astrid.emde, 11 years ago (diff)

Dateien in das neue Verzeichnis /import für die Importskripte verschoben, vorher unter /data/postnas_0.7

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