Index: trunk/import/konv_batch.sh
===================================================================
--- trunk/import/konv_batch.sh	(revision 353)
+++ trunk/import/konv_batch.sh	(revision 354)
@@ -1,4 +1,5 @@
 #!/bin/bash
 ## -------------------------------------------------
+## DB-Server - Produktion                          -
 ## Konvertierung von ALKIS NAS-Format nach PostGIS -
 ## NAS-Daten in einem Ordner konvertieren          -
@@ -8,6 +9,6 @@
 ## Ordner-Struktur:
 ##   /mandant/
-##           /0001/*.xml.zip
-##           /0002/*.xml.zip
+##           /01/*.xml.zip
+##           /02/*.xml.zip
 ##          usw.
 ##           /temp/
@@ -19,66 +20,63 @@
 ##
 ## Stand: 
-##   2012-02-10 Umbennung nach 0.7
-##   2012-02-17 Optimierung
-##   2012-02-28 Neuer Parameter 4 um Post-Prozessing zu unterdruecken
-##   2012-04-25 Durch GDAL Patch #5444 werden die Loeschungen als Trigger auf Tabelle 'delete' verarbeitet
-##   2012-05-18 Umzug neue GDI, GDAL-Trunk unter Pfad 
 ##   2012-06-04 SQL-Skripte in deren Verzeichnis ausfuehren (Voraussetzung fuer \i Includes)
-##   2012-10-30 Umgebungsvariable setzen, delete-Tabelle am Ende fuer Analyse gefuellt lassen.
-##              Test als 0.7a mit gepatchter gdal-Version (noch 2.0dev)
-##   2013-10-16 F.J. krz: Neues Script "pp_praesentation_action.sql" fÃŒr Reparatur der 
-##              PrÃ€sentationsobjekte StraÃenname im Post-Processing
-##   2013-10-24 F.J. krz: ZwischenlÃ¶sung "praesentation_action.sql" wieder deaktiviert.
 ##   2014-01-31 F.J. krz: Import Eintrag erzeugen (nach Vorschlag Marvin Brandt, Unna)
 ##   2014-02-13 A.Emde WhereGroup: EinfÃŒhrung DBUSER, damit im Skript der Datenbankbenutzer angegeben werden kann
-##   2014-05-12 F.J. krz: Unterschiedliche Pfade in Test (TRUNK) und Produktion (Rel. 1.11.0)
 ##   2014-06-18 F.J. DB-User nicht "postgres" (in $con). 
 ##                   Konverter ind Nacharbeiten sonst mit unterschiedlichem User.
-##                   Abgleich Test/Prod-Version.
 ##                   Entfernen der historischen Objekte nach Konvertierung.
-##   2014-09-09 F.J. krz: Parameter "--config PG_USE_COPY YES" zur Beschleunigung. Ausgabe import-Tabelle.
-##   2014-09-11 F.J. krz: Eintrag in import-Tabelle repariert.
-##                   Keine Abfrage des Symlinks auf kill/hist. Enstscheidend ist die aktuelle DB, nicht der Symlink
 ##   2014-09-23 F.J. krz: ZÃ€hlung der Funktionen in delete, dies in import-Tabelle eintragen (Metadaten)
-##   2015-02-17 F.J. krz: OGR_SKIP=GML ?
 ##   2015-03-16 F.J. krz: "-nlt CONVERT_TO_LINEAR" ersetzt "ST_CurvePolygon" nÃ€herungsweise durch "ST_Polygon"
 ##   2015-03-24 F.J. krz: export NAS_INDICATOR
+##   2015-05-26 F.J. krz: Pfad auf Version 1.11 geÃ€ndert (Parameter -append wird bei TRUNK 2.0 ignoriert)
+##                        Dazu "-nlt CONVERT_TO_LINEAR" vorÃŒbergehend deaktiviert (erst ab 2.0 notwendig)
+##                        gdal-Version in Import-Tabelle schreiben. Zwischenfrage vor Konvertierung.
+##                        DB-Dump vor Aktualisierungslauf, auf Nachfrage.
+##   2015-10-27 F.J. krz: Teile von "pp_laden.sql" ausgelegert nach "pp_gebiete.sql".
+##                        Dies wird bei Parameter "pp" (mit Post-Processing) nur beim Erstladen mit ausgefÃŒhrt.
+##                        Bei Aktualisierungen mÃŒssen die Gebiete (Ãbersichten) nicht jedes Mal neu generiert werden. 
 
 ## ToDo: 
-## - Vor der Konvertierung: Sicherung der DB als SQL-Dump
 ## - Unterscheidung e/a noch sinnvoll? Immer "a" = Aktualisierung = -update ?
 ## - PostProcessing: Aufruf Script, sonst redundant zu pflegen
 
-POSTNAS_HOME=$(dirname $0)
-
-# Konverterpfad. TRUNK-Version (immer letzter Stand der Entwicklung)
-PATH=/opt/gdal-2.0/bin:$PATH
-EPSG=25832
-DBUSER=b600352
-
-if [ $DBUSER == "" ]
-then
-  echo "kein DBUSER gesetzt"
-else
-  PGUSER=" -U ${DBUSER} "
-fi
-
-if [ $DBUSER == "" ]
-then
-  echo "kein DBUSER gesetzt"
-else
-  OGRPGUSER=" user=${DBUSER}"
-fi
+# Speicher-Ort dieses Scriptes legt den Pfad fuer Logging fest
+  POSTNAS_HOME=$(dirname $0)
+
+# Konverterpfad. 
+  # TRUNK-Version 2.0.0Beta1 (selbst gebaut)
+  # Dabei: "-nlt CONVERT_TO_LINEAR" verwenden
+# PATH=/opt/gdal-2.0/bin:$PATH
+
+  # Stabile-Version 1.11.2 (selbst gebaut)
+  # Dabei: "-nlt CONVERT_TO_LINEAR" NICHT verwenden
+  PATH=/opt/gdal-1.11/bin:$PATH
+
+# Konfiguration:
+  EPSG=25832
+  DBUSER=b600352
+
+  if [ $DBUSER == "" ]
+  then
+    echo "kein DBUSER gesetzt"
+  else
+    PGUSER=" -U ${DBUSER} "
+    OGRPGUSER=" user=${DBUSER}"
+  fi
  
-echo " 
+  echo " 
+ 
 **********************************************
 **   K o n v e r t i e r u n g     PostNAS  **
-**********************************************"
-## Parameter:
-ORDNER=$1
-DBNAME=$2
-UPD=$3
-PP=$4
-
+**********************************************
+ "
+
+# Aufruf-Parameter:
+  ORDNER=$1
+  DBNAME=$2
+  UPD=$3
+  PP=$4
+
+# Parameter plausibilisieren
 if [ $ORDNER == "" ]
 then
@@ -109,9 +107,9 @@
 if [ $PP == "nopp" ]
 then
-	echo "KEIN Post-Processing nach dieser Konvertierung."
+	echo "KEIN Post-Processing nach dieser Konvertierung"
 else
 	if [ $PP == "pp" ]
 	then
-		echo "normales Post-Processing."
+		echo "mit Post-Processing"
 	else
 		echo "FEHLER: Parameter 4 'Post-Proscessing' ist weder 'nopp' noch 'pp'"
@@ -120,33 +118,74 @@
 fi
 
+# DB-Connection (User, Port, Datenbank-Name)
+  con="${PGUSER} -p 5432 -d ${DBNAME} "
+
+# Anzeige Historie
+  echo "vorangegangene Konvertierung:"
+  psql $con -c "SELECT id, datum, verzeichnis, importart FROM import ORDER BY id DESC LIMIT 1;"
+
+# Anzeige Parameter
+  echo "Datenbank: ${DBNAME}"
+  echo "DBUSER: ${DBUSER}"
+ #echo "PGUSER: ${PGUSER}"
+ #echo "OGRPGUSER: ${OGRPGUSER}"
+  echo "Ordner NAS-Daten: ${ORDNER}"
+  echo "Verarbeitungs-Modus: ${verarb}"
+  echo "POSTNAS_HOME: ${POSTNAS_HOME}"
+  echo "Programm-Version: `ogr2ogr --version` "
+
+# Kontrolle der Parameter
+  echo " 
+  AbschlieÃende Bestaetigung:"
+  until [ "$JEIN" = "j" -o "$JEIN" = "n" ]
+  do
+    echo "Mit diesen Parametern konvertieren?  -  j oder n"
+    read JEIN
+  done
+  if test $JEIN != "j"
+  then
+    echo " ####  Abbruch"
+    exit 1
+  fi
+
 # Fehlerprotokoll:
   errprot=${POSTNAS_HOME}'/log/postnas_err_'$DBNAME'.prot'
-
   echo "GDAL/PostNAS Konverter-Version:" >> $errprot
   ogr2ogr --version >> $errprot
 
-# DB-Connection
-  con="${PGUSER} -p 5432 -d ${DBNAME} "
-  echo "Datenbank-Name . . = ${DBNAME}"
-  echo "DBUSER ${DBUSER}"
-  echo "PGUSER ${PGUSER}"
-  echo "OGRPGUSER ${OGRPGUSER}"
-  echo "Ordner NAS-Daten . = ${ORDNER}"
-  echo "Verarbeitungs-Modus= ${verarb}"
-  echo "POSTNAS_HOME ${POSTNAS_HOME}"
-
-  # noch alte delete-Eintraege?
-  echo "Leeren der delete-Tabelle"
+# Sicherung der Datenbank VOR der Aktualisierung
+  if [ $UPD == "a" ]
+  then
+
+    until [ "$DUMP" = "j" -o "$DUMP" = "n" ]
+    do
+      echo "Datenbank-Sicherung?  -  j oder n"
+      read DUMP
+    done
+
+    if test $DUMP = "j"
+    then
+      echo "DB Dump wird ausgefuehrt"
+      echo "Datenbank-Dump in /data/bkup/${DBNAME}_vor_update.sql.gz" >> $errprot
+      pg_dump -U ${DBUSER} -o -C ${DBNAME} | gzip > /data/bkup/${DBNAME}_vor_update.sql.gz
+      echo "DB Dump wurde ausgefuehrt"
+      sleep 1
+    fi
+  fi
+
+# Import Eintrag schreiben
+  # Urspruenglich wurde die Tabelle "import" fuer die Trigger-Steuerung benoetigt. 
+  # Nun als Metadaten zur Datenbank-Historie nuetzlich.
+  echo "INSERT INTO import (datum, verzeichnis, importart, gdalvers) 
+    VALUES ('"$(date '+%Y-%m-%d %H:%M:%S')"','"${ORDNER}"','"${verarb}"', '`ogr2ogr --version`');" | psql $con
+
+# Alte delete-Eintraege loeschen
+  # Beim Eintrag in die delete-Tabelle wird ein Trigger ausgeloest. 
+  # Danach werden die Eintraege nicht mehr benoetigt.
+  echo " 
+  Leeren der delete-Tabelle"
   psql $con -c 'TRUNCATE table "delete";'
 
-  #echo "Bisherige Konvertierungen (Import-Tabelle):"
-  #psql $con -c "SELECT * FROM import ORDER by id;"
-
-# Import Eintrag erzeugen
-# UrsprÃŒnglich fÃŒr Trigger-Steuerung benÃ¶tigt. Nun als Metadaten nÃŒtzlich.
-  echo "INSERT INTO import (datum,verzeichnis,importart) VALUES ('"$(date '+%Y-%m-%d %H:%M:%S')"','"${ORDNER}"','"${verarb}"');" | psql $con
-
 # Ordner abarbeiten
-
   cd ${ORDNER}
   rm ../temp/*.gfs
@@ -172,5 +211,5 @@
 	#	export OGR_SKIP=GML  	# NAS-Daten auch mit "falschen Header" nicht wie GML konvertieren - NEIN!
 								# http://lists.osgeo.org/pipermail/nas/2014-December/000740.html
-       #export CPL_DEBUG=ON                     # Meldung, wenn Attribute ueberschrieben werden
+       #export CPL_DEBUG=ON     # Meldung, wenn Attribute ueberschrieben werden
 
         # Headerkennungen die NAS-Daten identifizieren
@@ -179,6 +218,7 @@
       # PostNAS Konverter-Aufruf
       #   --config PG_USE_COPY YES
-      #   -nlt CONVERT_TO_LINEAR  # 2015-03-16 ersetzt "ST_CurvePolygon" nÃ€herungsweise durch "ST_Polygon" 
-      ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures  -nlt CONVERT_TO_LINEAR \
+      #   -nlt CONVERT_TO_LINEAR  # ersetzt "ST_CurvePolygon" nÃ€herungsweise durch "ST_Polygon", ab Vers. 2.0
+   #  ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures  -nlt CONVERT_TO_LINEAR 
+      ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures \
          PG:"dbname=${DBNAME} host=localhost port=5432 ${OGRPGUSER}" -a_srs EPSG:$EPSG ${nasdatei} 2>> $errprot
       nasresult=$?
@@ -192,5 +232,5 @@
         echo -e "\e[32m${nasdatei} verarbeitet\e[0m" # grÃŒn
       else
-        echo -e "\e[31m${nasdatei} fehlerhaft\e[0m" # rot
+        echo -e "\e[31m${nasdatei} fehlerhaft\e[0m"  # rot
       fi
 
@@ -199,6 +239,6 @@
   done # Ende Ordner
   rm ../temp/*.xml
-  echo " "
-  echo "** Ende Konvertierung Ordner ${ORDNER}"
+  echo " 
+  ** Ende Konvertierung Ordner ${ORDNER}"
 
   # Durch EinfÃŒgen in Tabelle 'delete' werden LÃ¶schungen und Aktualisierungen anderer Tabellen getriggert
@@ -209,5 +249,5 @@
   psql $con -c 'SELECT context, COUNT(featureid) AS anzahl FROM "delete" GROUP BY context ORDER BY context;' 
 
-  # Kontext-Funktionen zÃ€hlen und dei Anzahl als Metadaten zum aktuellen Konvertierungslauf speichern
+  # Kontext-Funktionen zÃ€hlen und die Anzahl als Metadaten zum aktuellen Konvertierungslauf speichern
   psql $con -c "
    UPDATE import SET anz_delete=(SELECT count(*) FROM \"delete\" WHERE context='delete') 
@@ -222,5 +262,5 @@
   then
     echo "** KEIN Post-Processing - Dies spaeter nachholen."
-    # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem grossen Bestand laufen
+    # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem grossen Bestand laufen.
     # Der Aufwand fÃŒr das Post-Processing ist dann nur bei der LETZTEN Aktualisierung notwendig.
   else
@@ -230,8 +270,20 @@
     (cd $POSTNAS_HOME; psql $con -f nutzungsart_laden.sql)
  
-    echo "** - Fluren, Gemarkungen, Gemeinden und StraÃen-Namen neu Laden (Script pp_laden.sql):"
-    (cd $POSTNAS_HOME; psql $con -f pp_laden.sql)
+	echo "** - StraÃen-Namen neu Laden (Script pp_laden.sql):"
+	(cd $POSTNAS_HOME; psql $con -f pp_laden.sql)
+
+	if [ $UPD == "e" ]
+	then
+		# Erstladen: Gebiete erstmalig befuellen.
+		echo "** - Fluren, Gemarkungen, Gemeinden neu Laden (Script pp_gebiete.sql):"
+		(cd $POSTNAS_HOME; psql $con -f pp_gebiete.sql)
+	else
+		# Aktualisierung: Gebiete brauchen nicht bei jeder Aktualisierung neu generiert werden. Die aendern sich kaum. 
+		echo "Die Uebersichten fÃŒr Flur, Gemarkung und Gemeinde werden nicht neu generiert. Bei Bedarf das SQL-Script pp_gebiete.sql ausfuehren."
+	fi
   fi
 
   echo "Das Fehler-Protokoll wurde ausgegeben in die Datei $errprot"
-  echo "** ENDE PostNAS 0.8-Konvertierung  DB='$DBNAME'  Ordner='$ORDNER' "
+  echo "
+  ** ENDE PostNAS 0.8-Konvertierung  DB='$DBNAME'  Ordner='$ORDNER'
+  "
