GLE-Postgis-Eigentümer landw Betriebe: Unterschied zwischen den Versionen

Aus kvwmap
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „ == Datenmodell == CREATE TABLE geodaten_dritter.landwirtschaft_flurstuecke ( oid oid, gemarkung character varying, gemkg_nr integer, flur integer,…“)
 
(Script für Postprocessing)
 
(Eine dazwischenliegende Version des gleichen Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
  
== Datenmodell ==
+
== Datenmodell Tabelle ==
  
  
Zeile 88: Zeile 88:
 
  ###################################################################  
 
  ###################################################################  
 
  # Flurstücke im Besitz oder angrenzend pro Stelle
 
  # Flurstücke im Besitz oder angrenzend pro Stelle
  # Mehrere Stellen = Mehrere INSERTS
+
  # Für jede Stelle => Jeweils ein INSERT
 
   
 
   
 
  # Stelle 'Wöpkendorfer Agrar GmbH'
 
  # Stelle 'Wöpkendorfer Agrar GmbH'
Zeile 128: Zeile 128:
 
  if test $? -eq 0
 
  if test $? -eq 0
 
     then
 
     then
       echo "    >> Tabelle ${TABELLE} erfolgreich erneuert" >> $LOGFILE 2>&1
+
       echo "    >> Tabelle ${TABELLE} erfolgreich erneuert: ${STELLE}" >> $LOGFILE 2>&1
 
     else
 
     else
 
       echo "!!!!!! Beim Erneuern von ${TABELLE} um ${STELLE} ist ein Fehler aufgetreten!!!" >> $LOGFILE 2>&1
 
       echo "!!!!!! Beim Erneuern von ${TABELLE} um ${STELLE} ist ein Fehler aufgetreten!!!" >> $LOGFILE 2>&1

Aktuelle Version vom 4. August 2015, 11:40 Uhr

Datenmodell Tabelle

CREATE TABLE geodaten_dritter.landwirtschaft_flurstuecke
(
 oid oid,
 gemarkung character varying,
 gemkg_nr integer,
 flur integer,
 fs_zaehler integer,
 fs_nenner integer,
 flurstueckskennzeichen character varying,
 flaeche double precision,
 bezirkname character varying,
 gb_blatt character varying,
 blattart integer,
 bvnr character varying,
 buchgsart character varying,
 name_num character varying,
 eigentuemerart integer,
 bezeichner character varying,
 akademischergrad character varying,
 namensbestandteil character varying,
 nachname character varying,
 vorname character varying,
 geburtsname character varying,
 geburtsdatum character varying,
 anschrift character varying,
 plz character varying,
 stelle character varying,
 anrainer character varying,
 bemerkung character varying
)
WITH (
 OIDS=FALSE
);
SELECT AddGeometryColumn('geodaten_dritter', 'landwirtschaft_flurstuecke','the_geom',25833,'MULTIPOLYGON', 2);
COMMENT ON TABLE geodaten_dritter.landwirtschaft_flurstuecke
IS 'Enthält alle Flurstücke mit Eigentümer der Landwirstschaftsbetriebe und deren unmittelbare Nachbarflurstücke. Wird durch ein Script gefüllt!!!';
COMMENT ON COLUMN geodaten_dritter.landwirtschaft_flurstuecke.bemerkung 
IS 'Hinweis bei Erbengemeinschaft oder Teileigentum';
CREATE INDEX landwirtschaft_flurstuecke_geometrie_idx
ON geodaten_dritter.landwirtschaft_flurstuecke
USING gist (the_geom);
CREATE INDEX landwirtschaft_flurstuecke_flurstueckskennzeichen_idx
ON geodaten_dritter.landwirtschaft_flurstuecke
USING btree (flurstueckskennzeichen);


Script für Postprocessing

Das Script erzeugt pro Eigentümer eines Flurstücks eine Zeile. Bei der Abfrage im GLE erhält man also u.U. mehrere Treffer. Bei Erbengemeinschaften oder Teileigentum stehen entsprechende Hinweise im Attribut Bemerkung.


#!/bin/sh

###################################################################
# Script lkvr_landwirtschaft_flurstuecke.sh
###################################################################

### Variablen ###
PSQLPATH=/usr/lib/postgresql/9.1/bin; export PSQLPATH
PGUSERNAME=kvwmap; export PGUSERNAME
PGDBNAME=kvwmapsp; export PGDBNAME
LOGFILE=/home/gisadmin/scripte/logs/lkvr_landwirtschaft_flurstuecke.log; export LOGFILE

SCHEMA=geodaten_dritter; export SCHEMA
TABELLE=landwirtschaft_flurstuecke; export TABELLE

echo "  ##############     `date +%c`    ################" >> $LOGFILE 2>&1

# Leert die Tabelle vor dem erneuten Fuellen
#
$PSQLPATH/psql -U $PGUSERNAME -d $PGDBNAME -c "
TRUNCATE ${SCHEMA}.${TABELLE};
DROP INDEX ${SCHEMA}.${TABELLE}_geometrie_idx;
DROP INDEX ${SCHEMA}.${TABELLE}_flurstueckskennzeichen_idx;
"

if test $? -eq 0
    then
       echo "    >> Tabelle ${TABELLE} geleert" >> $LOGFILE 2>&1
    else
       echo "!!!!!! Beim Leeren der Tabelle ist ein Fehler aufgetreten!!!" >> $LOGFILE 2>&1
fi

################################################################### 
# Flurstücke im Besitz oder angrenzend pro Stelle
# Für jede Stelle => Jeweils ein INSERT

# Stelle 'Wöpkendorfer Agrar GmbH'
STELLE="Wöda"; export STELLE
NACHNAMEODERFIRMA="WöDA Wöpkendorfer Agrar GmbH"; export NACHNAMEODERFIRMA

$PSQLPATH/psql -U $PGUSERNAME -d $PGDBNAME -c "

INSERT INTO ${SCHEMA}.${TABELLE} ( 
SELECT foo.oid, k.bezeichnung AS gemarkung, k.gemarkungsnummer AS gemkg_nr, foo.flurnummer AS flur, foo.zaehler AS fs_zaehler, foo.nenner AS fs_nenner, foo.flurstueckskennzeichen, foo.amtlicheflaeche AS flaeche, b.bezeichnung AS bezirkname, g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt, g.blattart, foo.laufendenummer AS bvnr, art.bezeichner AS buchgsart, n.laufendenummernachdin1421 AS name_num, n.eigentuemerart, w.bezeichner, p.akademischergrad, p.namensbestandteil, p.nachnameoderfirma AS nachname, p.vorname, p.geburtsname, p.geburtsdatum, (ap.strasse::text || ' '::text) || ap.hausnummer::text AS anschrift, (ap.postleitzahlpostzustellung::text || ' '::text) || ap.ort_post::text AS plz, '${STELLE}' AS stelle, CASE WHEN p.nachnameoderfirma = '${NACHNAMEODERFIRMA}' then 'FALSE' ELSE 'TRUE' END as anrainer, NULL as bemerkung, foo.wkb_geometry AS the_geom 
FROM ( 
  SELECT f.oid, s.buchungsart, s.gml_id AS sgml_id, f.istgebucht, s.verweistauf, f.gml_id AS fgml_id, f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner, f.flurstueckskennzeichen, s.istbestandteilvon, f.land, f.amtlicheflaeche, s.laufendenummer, f.wkb_geometry, f.endet AS fendet, s.endet AS sendet
  FROM alkis.ax_buchungsstelle s, alkis.ax_flurstueck f
  WHERE (f.gml_id::text = ANY (s.verweistauf::text[])) OR s.gml_id::text = f.istgebucht::text) foo
  LEFT JOIN alkis.ax_buchungsstelle_buchungsart art ON foo.buchungsart = art.wert
  LEFT JOIN alkis.ax_buchungsblatt g ON g.gml_id::text = foo.istbestandteilvon::text
  LEFT JOIN alkis.ax_buchungsblattbezirk b ON g.land = b.land AND g.bezirk = b.bezirk
  LEFT JOIN alkis.ax_namensnummer n ON n.istbestandteilvon::text = g.gml_id::text
  LEFT JOIN alkis.ax_namensnummer_eigentuemerart w ON w.wert = n.eigentuemerart
  LEFT JOIN alkis.ax_person p ON p.gml_id::text = n.benennt::text
  LEFT JOIN alkis.ax_gemarkung k ON foo.land = k.land AND foo.gemarkungsnummer = k.gemarkungsnummer
  LEFT JOIN alkis.ax_anschrift ap ON ap.gml_id::text = ANY (p.hat::text[])
WHERE p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL AND foo.sendet IS NULL AND foo.fendet IS NULL AND k.endet IS NULL
AND st_intersects((SELECT st_buffer(st_union(wkb_geometry), 1)
   FROM (SELECT wkb_geometry FROM alkis.ax_person p
     JOIN alkis.ax_namensnummer n ON p.gml_id = n.benennt
     JOIN alkis.ax_buchungsblatt b ON n.istbestandteilvon = b.gml_id
     JOIN alkis.ax_buchungsstelle s ON s.istbestandteilvon = b.gml_id
     JOIN alkis.ax_flurstueck f ON f.istgebucht = s.gml_id
   WHERE p.nachnameoderfirma = '${NACHNAMEODERFIRMA}' 
   AND p.endet IS NULL 
   AND n.endet IS NULL 
   AND b.endet IS NULL 
   AND s.endet IS NULL 
   AND f.endet IS NULL) as woeda_geometrie), foo.wkb_geometry)
GROUP BY foo.oid, k.bezeichnung, k.gemarkungsnummer, foo.flurnummer, foo.zaehler, foo.nenner, foo.flurstueckskennzeichen, foo.amtlicheflaeche, foo.wkb_geometry, b.bezeichnung, g.buchungsblattnummermitbuchstabenerweiterung, g.blattart, foo.laufendenummer, art.bezeichner, n.laufendenummernachdin1421, n.eigentuemerart, w.bezeichner, p.akademischergrad, p.namensbestandteil, p.nachnameoderfirma, p.vorname, p.geburtsname, p.geburtsdatum, ap.strasse, ap.hausnummer, ap.postleitzahlpostzustellung, ap.ort_post);
"

if test $? -eq 0
   then
      echo "    >> Tabelle ${TABELLE} erfolgreich erneuert: ${STELLE}" >> $LOGFILE 2>&1
   else
      echo "!!!!!! Beim Erneuern von ${TABELLE} um ${STELLE} ist ein Fehler aufgetreten!!!" >> $LOGFILE 2>&1
fi


###################################################################
# Nachbearbeitung: Füllen der Spalte bemerkung mit den Anteilen am Eigentum und Löschen leerer Einträge
# (Flurstücke mit dem Hinweis auf Erbengemeinschaft oder Wohn- /Teileigentum geben ansonsten einen Datensatz mit leeren Zeilen zurück)

$PSQLPATH/psql -U $PGUSERNAME -d $PGDBNAME -c "

UPDATE ${SCHEMA}.${TABELLE} lf
SET bemerkung = foo.beschriebderrechtsgemeinschaft
FROM (SELECT f.flurstueckskennzeichen, nm.beschriebderrechtsgemeinschaft FROM alkis.ax_namensnummer nm, alkis.ax_flurstueck f , alkis.ax_buchungsstelle bs, geodaten_dritter.landwirtschaft_flurstuecke lf
WHERE f.flurstueckskennzeichen = lf.flurstueckskennzeichen AND f.istgebucht = bs.gml_id AND bs.istbestandteilvon = nm.istbestandteilvon
AND nm.beschriebderrechtsgemeinschaft IS NOT NULL ) as foo 
WHERE lf.flurstueckskennzeichen = foo.flurstueckskennzeichen;

INSERT INTO ${SCHEMA}.${TABELLE} ( 
SELECT foo.oid, k.bezeichnung AS gemarkung, k.gemarkungsnummer AS gemkg_nr, foo.flurnummer AS flur, foo.zaehler AS fs_zaehler, foo.nenner AS fs_nenner, foo.flurstueckskennzeichen, foo.amtlicheflaeche AS flaeche, b.bezeichnung AS bezirkname, g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt, g.blattart, foo.laufendenummer AS bvnr, art.bezeichner AS buchgsart, n.laufendenummernachdin1421 AS name_num, n.eigentuemerart, w.bezeichner, p.akademischergrad, p.namensbestandteil, p.nachnameoderfirma AS nachname, p.vorname, p.geburtsname, p.geburtsdatum, (ap.strasse::text || ' '::text) || ap.hausnummer::text AS anschrift, (ap.postleitzahlpostzustellung::text || ' '::text) || ap.ort_post::text AS plz, lf.stelle as stelle, lf.anrainer as anrainer, 'Wohnungs-/Teileigentum, Anteil'||' '||bszaehler||'/'||bsnenner as bemerkung
FROM geodaten_dritter.landwirtschaft_flurstuecke lf, 
 (SELECT f.oid, bs.buchungsart, bs.gml_id AS bsgml_id, f.istgebucht, bs.verweistauf, f.gml_id AS fgml_id, f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner, f.flurstueckskennzeichen, bs.istbestandteilvon, bs.an, f.land, f.amtlicheflaeche, bs.laufendenummer, f.wkb_geometry, f.endet AS fendet, bs.endet AS bsendet, bs.zaehler as bszaehler, bs.nenner as bsnenner, foo.wkb_geometry AS the_geom
  FROM alkis.ax_buchungsstelle bs, alkis.ax_flurstueck f
  WHERE f.istgebucht::text = ANY (bs.an::text[])) foo
  LEFT JOIN alkis.ax_buchungsstelle_buchungsart art ON foo.buchungsart = art.wert
  LEFT JOIN alkis.ax_buchungsblatt g ON g.gml_id::text = foo.istbestandteilvon::text
  LEFT JOIN alkis.ax_buchungsblattbezirk b ON g.land = b.land AND g.bezirk = b.bezirk
  LEFT JOIN alkis.ax_namensnummer n ON n.istbestandteilvon::text = g.gml_id::text
  LEFT JOIN alkis.ax_namensnummer_eigentuemerart w ON w.wert = n.eigentuemerart
  LEFT JOIN alkis.ax_person p ON p.gml_id::text = n.benennt::text
  LEFT JOIN alkis.ax_gemarkung k ON foo.land = k.land AND foo.gemarkungsnummer = k.gemarkungsnummer
  LEFT JOIN alkis.ax_anschrift ap ON ap.gml_id::text = ANY (p.hat::text[])
WHERE 1 = 1 AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL AND foo.bsendet IS NULL AND foo.fendet IS NULL AND k.endet IS NULL AND lf.flurstueckskennzeichen = foo.flurstueckskennzeichen AND lf.blattart = '5000');

UPDATE ${SCHEMA}.${TABELLE}
SET name_num = ltrim(rtrim(name_num, '0.'), '.0');

DELETE FROM ${SCHEMA}.${TABELLE}
WHERE name_num IS NULL AND eigentuemerart IS NULL AND bezeichner IS NULL AND nachname IS NULL AND vorname IS NULL AND geburtsname IS NULL AND anschrift IS NULL AND plz IS NULL;
"

if test $? -eq 0
     then
       echo "   Leere Datensätze entfernen, Erfolgreich" >> $LOGFILE 2>&1
     else
       echo ">> Entfernen leerer Datensätze fehlgeschlagen!!!!!!" >> $LOGFILE 2>&1
fi

# Tabelle analysieren
$PSQLPATH/psql -U $PGUSERNAME -d $PGDBNAME -c "
VACUUM ANALYZE ${SCHEMA}.${TABELLE};
CREATE INDEX ${TABELLE}_geometrie_idx
ON ${SCHEMA}.${TABELLE}
USING gist (the_geom);
CREATE INDEX ${TABELLE}_flurstueckskennzeichen_idx
ON ${SCHEMA}.${TABELLE}
USING btree (flurstueckskennzeichen);
"

if test $? -eq 0
     then
       echo "    >> INDEX erfolgreich angelegt" >> $LOGFILE 2>&1
     else
       echo "!!!!!! INDEX konnte nicht angelegt werden" >> $LOGFILE 2>&1
fi

echo "  ##############     `date +%c`    ################" >> $LOGFILE 2>&1
echo " " >> $LOGFILE 2>&1

exit 0