GLE-Postgis-Eigentümer landw Betriebe: Unterschied zwischen den Versionen
Aus kvwmap
(Die Seite wurde neu angelegt: „ == Datenmodell == CREATE TABLE geodaten_dritter.landwirtschaft_flurstuecke ( oid oid, gemarkung character varying, gemkg_nr integer, flur integer,…“) |
|||
Zeile 1: | Zeile 1: | ||
− | == Datenmodell == | + | == Datenmodell Tabelle == |
Version vom 31. Juli 2015, 13:54 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 # Mehrere Stellen = Mehrere INSERTS # 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" >> $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