GLE-Postgis-Interne-Flurstückslisten: Unterschied zwischen den Versionen

Aus kvwmap
Wechseln zu: Navigation, Suche
(View Buchung ohne Eigentum)
(View Buchung mit Eigentum)
Zeile 12: Zeile 12:
 
  SELECT foo.flurstueck_gml_id,
 
  SELECT foo.flurstueck_gml_id,
 
     foo.buchungsblatt_gml_id,
 
     foo.buchungsblatt_gml_id,
     regexp_replace(((foo.buchung || COALESCE(foo.anteil || '
+
     regexp_replace(((foo.buchung || COALESCE(foo.anteil || <nowiki>'</nowiki>
  '::text, ''::text)) || COALESCE(foo.nraufteilungsplan || '
+
  '::text, <nowiki>''</nowiki>::text)) || COALESCE(foo.nraufteilungsplan || <nowiki>'</nowiki>
  '::text, ''::text)) || COALESCE(foo.buchungstext || '
+
  '::text, <nowiki>''</nowiki>::text)) || COALESCE(foo.buchungstext || <nowiki>'</nowiki>
  '::text, ''::text), '(^[\n\r]+)|([\n\r]+$)'::text, ''::text, 'g'::text) AS buchung
+
  '::text, <nowiki>''</nowiki>::text), '(^[\n\r]+)|([\n\r]+$)'::text, <nowiki>''</nowiki>::text, 'g'::text) AS buchung
 
   FROM ( SELECT f.gml_id AS flurstueck_gml_id,
 
   FROM ( SELECT f.gml_id AS flurstueck_gml_id,
 
             g.gml_id AS buchungsblatt_gml_id,
 
             g.gml_id AS buchungsblatt_gml_id,
Zeile 32: Zeile 32:
 
                             ELSE replace(s.nenner::text, '.'::text, ','::text)
 
                             ELSE replace(s.nenner::text, '.'::text, ','::text)
 
                         END
 
                         END
                     END || ' Miteigentumsanteil am Grundstück'::text) || COALESCE(' verbunden mit dem Sondereigentum an '::text || s.beschreibungdessondereigentums::text, ''::text)
+
                     END || ' Miteigentumsanteil am Grundstück'::text) || COALESCE(' verbunden mit dem Sondereigentum an '::text || s.beschreibungdessondereigentums::text, <nowiki>''</nowiki>::text)
                     ELSE ''::text
+
                     ELSE <nowiki>''</nowiki>::text
 
                 END AS anteil,
 
                 END AS anteil,
 
             ('Nr. '::text || s.nummerimaufteilungsplan::text) || ' laut Aufteilungsplan'::text AS nraufteilungsplan,
 
             ('Nr. '::text || s.nummerimaufteilungsplan::text) || ' laut Aufteilungsplan'::text AS nraufteilungsplan,

Version vom 20. März 2020, 15:11 Uhr

Die Views werden in ein LK-eigenes Schema "alkis_eigen" gespeichert. Bei Bedarf ändern!


View Buchung mit Eigentum

Der View verknüpft Flurstück, Buchungsstelle und Buchungsblatt und sammelt alle relevanten Informationen für die Buchung.

Die Zeilenumbrüche müssen unbedingt mitgenommen werden.

CREATE VIEW alkis_eigen.fstauszug_buchung_mit_eigentum AS 
SELECT foo.flurstueck_gml_id,
   foo.buchungsblatt_gml_id,
   regexp_replace(((foo.buchung || COALESCE(foo.anteil || '
'::text, ''::text)) || COALESCE(foo.nraufteilungsplan || '
'::text, ''::text)) || COALESCE(foo.buchungstext || '
'::text, ''::text), '(^[\n\r]+)|([\n\r]+$)'::text, ''::text, 'g'::text) AS buchung
  FROM ( SELECT f.gml_id AS flurstueck_gml_id,
           g.gml_id AS buchungsblatt_gml_id,
           ((((((((art.beschreibung::text || ': '::text) || b.bezeichnung::text) || ' '::text) || g.land::text) || g.bezirk::text) || '-'::text) || ltrim(g.buchungsblattnummermitbuchstabenerweiterung::text, '0'::text)) || ', Laufende Nummer '::text) || ltrim(s.laufendenummer::text, '0'::text) AS buchung,
               CASE
                   WHEN s.zaehler <> 0::double precision THEN (
                   CASE
                       WHEN s.zaehler = s.nenner THEN '(Anteil nicht ermittelbar)'::text
                       ELSE (
                       CASE
                           WHEN mod(s.zaehler::numeric, ceil(s.zaehler::numeric)) = 0::numeric THEN to_char(s.zaehler::integer, 'FM999G999G999'::text)
                           ELSE replace(s.zaehler::text, '.'::text, ','::text)
                       END || '/'::text) ||
                       CASE
                           WHEN mod(s.nenner::numeric, ceil(s.nenner::numeric)) = 0::numeric THEN to_char(s.nenner::numeric, 'FM999G999G999G999'::text)
                           ELSE replace(s.nenner::text, '.'::text, ','::text)
                       END
                   END || ' Miteigentumsanteil am Grundstück'::text) || COALESCE(' verbunden mit dem Sondereigentum an '::text || s.beschreibungdessondereigentums::text, ''::text)
                   ELSE ''::text
               END AS anteil,
           ('Nr. '::text || s.nummerimaufteilungsplan::text) || ' laut Aufteilungsplan'::text AS nraufteilungsplan,
           'Buchungstext: '::text || s.buchungstext::text AS buchungstext
          FROM alkis.ax_buchungsblatt g
            LEFT JOIN alkis.ax_buchungsblattbezirk b ON g.land::text = b.land::text AND g.bezirk::text = b.bezirk::text
            LEFT JOIN alkis.ax_buchungsstelle s ON s.istbestandteilvon = g.gml_id
            LEFT JOIN alkis.ax_flurstueck f ON f.istgebucht = s.gml_id OR (f.gml_id = ANY (s.verweistauf)) OR (f.istgebucht = ANY (s.an))
            LEFT JOIN alkis.ax_buchungsart_buchungsstelle art ON s.buchungsart = art.wert
         WHERE g.blattart = 1000 AND f.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL AND s.endet IS NULL
         ORDER BY g.bezirk::integer, g.buchungsblattnummermitbuchstabenerweiterung::integer, s.laufendenummer::integer) foo;

View Buchung ohne Eigentum

Der View verknüpft Flurstück, Buchungsstelle und Buchungsblatt und sammelt alle relevanten Informationen für die Buchung, wobei eigentumsrelevante Inhalte weggelassen werden.

Die Zeilenumbrüche müssen unbedingt mitgenommen werden.

CREATE VIEW alkis_eigen.fstauszug_buchung_ohne_eigentum AS 
SELECT f.gml_id AS flurstueck_gml_id,
   g.gml_id AS buchungsblatt_gml_id,
   ((((((((art.beschreibung::text || ': '::text) || b.bezeichnung::text) || ' '::text) || g.land::text) || g.bezirk::text) || '-'::text) || ltrim(g.buchungsblattnummermitbuchstabenerweiterung::text, '0'::text)) || '
Laufende Nummer '::text) || ltrim(s.laufendenummer::text, '0'::text) AS buchung
  FROM alkis.ax_buchungsblatt g
    LEFT JOIN alkis.ax_buchungsblattbezirk b ON g.land::text = b.land::text AND g.bezirk::text = b.bezirk::text
    LEFT JOIN alkis.ax_buchungsstelle s ON s.istbestandteilvon = g.gml_id
    LEFT JOIN alkis.ax_flurstueck f ON f.istgebucht = s.gml_id OR (f.gml_id = ANY (s.verweistauf)) OR (f.istgebucht = ANY (s.an))
    LEFT JOIN alkis.ax_buchungsart_buchungsstelle art ON s.buchungsart = art.wert
 WHERE g.blattart = 1000 AND f.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL AND s.endet IS NULL
 ORDER BY g.bezirk::integer, g.buchungsblattnummermitbuchstabenerweiterung::integer, s.laufendenummer::integer;

View Eigentümer mit Anschrift

Der View verknüpft Buchungsblatt, Namensnummer, Person und Anschrift und sammelt alle relevanten Informationen für das Eigentum. Ab der dritten belegten Stelle in der laufenden Namensnummer wird für jede belegte Stelle eine weitere Einrückung berechnet. Laufende Namensnummern können in der APK irrtümlich falsch geschrieben werden, z.B. "2,1". Die Abfrage versucht das abzufangen. Der View berücksichtigt eine maximal 9-stellige Tiefe der laufenden Namensnummer.

Die Zeilenumbrüche müssen unbedingt mitgenommen werden.

CREATE VIEW alkis_eigen.fstauszug_eigentuemer_anschrift AS 
SELECT foo2.buchungsblatt_gml_id,
   foo2.lfd ||
       CASE
           WHEN foo2.eigentuemer IS NULL THEN ''::text
           ELSE '
'::text || foo2.eigentuemer
       END AS eigentuemer
  FROM ( SELECT foo.buchungsblatt_gml_id,
           (foo.whitespace || foo.lfd) || COALESCE((' zu '::text || foo.anteil) ||
               CASE
                   WHEN foo.beschrieb IS NULL THEN ''::text
                   ELSE ':'::text
               END, ''::text) AS lfd,
           ((((((((foo.whitespace || COALESCE(foo.akademischergrad::text || ' '::text, ''::text)) || COALESCE(foo.vorname::text || ' '::text, ''::text)) || foo.nachnameoderfirma::text) || COALESCE(foo.namensbestandteil, ''::text)) || COALESCE(', '::text || foo.geburtsdaten, ''::text)) ||
               CASE
                   WHEN foo.strasse IS NULL THEN ''::text
                   ELSE '
'::text
               END) || foo.whitespace) || COALESCE(foo.strasse::text || COALESCE(' '::text || foo.hausnummer::text, ''::text), ''::text)) || COALESCE(((((', '::text || foo.postleitzahlpostzustellung::text) || ' '::text) || foo.ort_post::text) || COALESCE(foo.ortsteil, ''::text)) || COALESCE(', '::text || foo.bestimmungsland::text, ''::text), ''::text) AS eigentuemer
          FROM ( SELECT DISTINCT g.gml_id AS buchungsblatt_gml_id,
                   COALESCE(n.laufendenummernachdin1421, '0'::character varying) AS order1,
                   COALESCE(n.bestehtausrechtsverhaeltnissenzu, '0'::bpchar) AS order2,
                       CASE
                           WHEN COALESCE(NULLIF(n.beschriebderrechtsgemeinschaft::text, ''::text), n.artderrechtsgemeinschaft::text) IS NULL OR n.bestehtausrechtsverhaeltnissenzu IS NULL THEN ''::text
                           ELSE ' '::text
                       END || repeat(' '::text, (
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 3)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END +
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 4)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END +
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 5)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END +
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 6)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END +
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 7)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END +
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 8)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END +
                       CASE split_part(replace(n.laufendenummernachdin1421::text, ','::text, '.'::text), '.'::text, 9)
                           WHEN '00'::text THEN 0
                           WHEN ''::text THEN 0
                           ELSE 1
                       END) * 4) AS whitespace,
                   COALESCE(NULLIF(n.beschriebderrechtsgemeinschaft::text, ''::text), na.beschreibung::text) AS beschrieb,
                   COALESCE(COALESCE(NULLIF(n.beschriebderrechtsgemeinschaft::text, ''::text), na.beschreibung::text),
                       CASE
                           WHEN n.beschriebderrechtsgemeinschaft IS NULL AND n.artderrechtsgemeinschaft IS NULL THEN rtrim((((((((COALESCE(ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 1), '0'::text), ''::text) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 2), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 3), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 4), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 5), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 6), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 7), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 8), '0'::text), ''::text)) || COALESCE('.'::text || ltrim(split_part(n.laufendenummernachdin1421::text, '.'::text, 9), '0'::text), ''::text), '.'::text)
                           ELSE NULL::text
                       END) AS lfd,
                   p.akademischergrad,
                   p.vorname,
                   p.nachnameoderfirma,
                   COALESCE(', '::text || p.namensbestandteil::text, ''::text) AS namensbestandteil,
                   a.strasse,
                   a.hausnummer,
                   a.postleitzahlpostzustellung,
                   a.ort_post,
                   COALESCE(', OT '::text || a.ortsteil::text, ''::text) AS ortsteil,
                   a.bestimmungsland,
                   COALESCE(('geb. '::text || p.geburtsname::text) || ' '::text, ''::text) || to_char(p.geburtsdatum::timestamp with time zone, 'DD.MM.YYYY'::text) AS geburtsdaten,
                   ((
                       CASE
                           WHEN mod(n.zaehler::numeric, ceil(n.zaehler::numeric)) = 0::numeric THEN to_char(n.zaehler::integer, 'FM999G999G999'::text)
                           ELSE replace(n.zaehler::text, '.'::text, ','::text)
                       END || '/'::text) ||
                       CASE
                           WHEN mod(n.nenner::numeric, ceil(n.nenner::numeric)) = 0::numeric THEN to_char(n.nenner::numeric, 'FM999G999G999G999'::text)
                           ELSE replace(n.nenner::text, '.'::text, ','::text)
                       END) || ' Anteil'::text AS anteil
                  FROM alkis.ax_buchungsblatt g
                    LEFT JOIN alkis.ax_namensnummer n ON g.gml_id = n.istbestandteilvon
                    LEFT JOIN alkis.ax_artderrechtsgemeinschaft_namensnummer na ON n.artderrechtsgemeinschaft = na.wert
                    LEFT JOIN alkis.ax_person p ON n.benennt = p.gml_id
                    LEFT JOIN alkis.ax_anschrift a ON a.gml_id = p.hat[1]
                 WHERE g.blattart = 1000 AND g.endet IS NULL AND n.endet IS NULL AND p.endet IS NULL AND a.endet IS NULL
                 ORDER BY COALESCE(n.laufendenummernachdin1421, '0'::character varying), COALESCE(n.bestehtausrechtsverhaeltnissenzu, '0'::bpchar)) foo) foo2;

View Flurstück

Der View verknüpft Flurstück, Gemeinde und Gemarkung und sammelt alle relevanten Informationen für das Flurstück.

Die Zeilenumbrüche müssen unbedingt mitgenommen werden.

CREATE VIEW alkis_eigen.fstauszug_flurstueck AS 
SELECT f.oid,
   f.gml_id AS flurstueck_gml_id,
   f.flurstueckskennzeichen,
       CASE
           WHEN f.abweichenderrechtszustand::text = 'true'::text THEN 'Abweichender Rechtszustand:
Durch ein Verfahren der Bodenordnung ist ein neuer Rechtszustand eingetreten, das amtliche Verzeichnis der ausführenden Stelle ist maßgebend. Dieser Nachweis entspricht nicht dem aktuellen Stand!'::text
           ELSE ''::text
       END AS abweichenderrechtszustand,
       CASE
           WHEN f.rechtsbehelfsverfahren::text = 'true'::text THEN 'Rechtsbehelfsverfahren:
Ein Rechtsbehelfsverfahren ist anhängig!'::text
           ELSE ''::text
       END AS rechtsbehelfsverfahren,
       CASE
           WHEN f.amtlicheflaeche < 1::double precision THEN round(f.amtlicheflaeche::numeric, 2)::text
           ELSE ltrim(to_char(f.amtlicheflaeche, 'FM999G999G999'::text))
       END || ' m²'::text AS amtlicheflaeche,
   gm.schluesselgesamt AS gemeinde_schluessel,
   gm.bezeichnung AS gemeinde_name,
   gk.schluesselgesamt AS gemarkung_schluessel,
   gk.bezeichnung AS gemarkung_name,
   f.flurnummer,
   f.zaehler::text || COALESCE('/'::text || f.nenner::text, ::text) AS flurstuecksnummer,
   f.wkb_geometry
  FROM alkis.ax_flurstueck f,
   alkis.ax_gemeinde gm,
   alkis.ax_gemarkung gk
 WHERE f.endet IS NULL AND gm.endet IS NULL AND gk.endet IS NULL AND f.gemeindezugehoerigkeit_gemeinde::text = gm.gemeinde::text AND f.gemarkungsnummer::text = gk.gemarkungsnummer::text;

View Grundbuchbezirk

Der View verknüpft Flurstück, Buchungsstelle und Buchungsblatt und sammelt alle relevanten Informationen für den Grundbuchbezirk.

CREATE OR REPLACE VIEW alkis_eigen.fstauszug_grundbuchbezirk AS 
SELECT DISTINCT f.gml_id AS flurstueck_gml_id,
   b.gehoertzu_land::text || b.gehoertzu_stelle::text AS schluessel_amtsgericht,
   d.bezeichnung AS name_amtsgericht,
   g.land::text || g.bezirk::text AS schluessel_gbbezirk,
   b.bezeichnung AS name_gbbezirk
  FROM alkis.ax_flurstueck f,
   alkis.ax_buchungsstelle s,
   alkis.ax_buchungsblatt g
    LEFT JOIN alkis.ax_buchungsblattbezirk b ON g.land::text = b.land::text AND g.bezirk::text = b.bezirk::text
    LEFT JOIN alkis.ax_dienststelle d ON b.gehoertzu_land::text = d.land::text AND b.gehoertzu_stelle::text = d.stelle::text
 WHERE f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL AND (f.istgebucht = s.gml_id OR ARRAY[f.gml_id] <@ s.verweistauf) AND s.istbestandteilvon = g.gml_id;

View Lage

Der View verknüpft Flurstück und Lagebezeichnung und sammelt alle relevanten Informationen für die Flurstücks-Lagebezeichnung.

ACHTUNG: Der View ermittelt eine Postleitzahl für das Flurstück durch Verschneidung mit einer eigenen Tabelle "geodaten_landkreis.plz". Schema und Tabellenname müssen angepasst werden. Wenn eine solche Tabelle nicht existiert, muss das aus dem View entfernt werden!

Die Zeilenumbrüche müssen unbedingt mitgenommen werden.

CREATE VIEW alkis_eigen.fstauszug_lage AS 
SELECT foo.flurstueck_gml_id,
   regexp_replace((COALESCE(foo.lage_adresse_verschl, ''::text) ||
       CASE
           WHEN foo.lage_adresse_unverschl IS NULL THEN ''::text
           ELSE '
'::text
       END) || COALESCE(foo.lage_adresse_unverschl, ''::character varying)::text, '(^[\n\r]+)|([\n\r]+$)'::text, ''::text, 'g'::text) AS lage
  FROM ( SELECT f.gml_id AS flurstueck_gml_id,
           (( SELECT
                       CASE
                           WHEN lm.gml_id <> ''::bpchar THEN (plz.plz || ' '::text) ||
                           CASE
                               WHEN g.bezeichnung::text = 'Stralsund, Hansestadt'::text THEN 'Stralsund'::character varying
                               WHEN "position"(g.bezeichnung::text, ', Stadt'::text) > 0 THEN "substring"(g.bezeichnung::text, 0, "position"(g.bezeichnung::text, ', Stadt'::text))::character varying
                               ELSE g.bezeichnung
                           END::text
                           ELSE ''::text
                       END AS "case"
                  FROM alkis.ax_flurstueck fl
                    LEFT JOIN geodaten_landkreis.plz ON st_intersects(st_centroid(f.wkb_geometry), plz.the_geom),
                   alkis.ax_gemeinde g,
                   alkis.ax_lagebezeichnungmithausnummer lm
                 WHERE fl.gemeindezugehoerigkeit_gemeinde::text = g.gemeinde::text AND g.endet IS NULL AND (lm.gml_id = ANY (fl.weistauf)) AND fl.gml_id = f.gml_id
                LIMIT 1)) || COALESCE(array_to_string(ARRAY( SELECT (('
'::text || km.bezeichnung::text) || ' '::text) || lm.hausnummer::text
                  FROM alkis.ax_lagebezeichnungmithausnummer lm,
                   alkis.ax_lagebezeichnungkatalogeintrag km
                 WHERE lm.endet IS NULL AND km.endet IS NULL AND (lm.gml_id = ANY (f.weistauf)) AND lm.gemeinde::text = km.gemeinde::text AND lm.lage::text = km.lage::text
                 ORDER BY km.bezeichnung, lm.hausnummer), '; '::text), ''::text) AS lage_adresse_verschl,
           COALESCE(
               CASE
                   WHEN lo.lage IS NULL THEN NULL::character varying
                   ELSE ( SELECT ko.bezeichnung
                      FROM alkis.ax_lagebezeichnungkatalogeintrag ko
                     WHERE lo.gemeinde::text = ko.gemeinde::text AND lo.lage::text = ko.lage::text AND ko.endet IS NULL)
               END, lo.unverschluesselt) AS lage_adresse_unverschl
          FROM alkis.ax_flurstueck f
            LEFT JOIN alkis.ax_lagebezeichnungohnehausnummer lo ON lo.gml_id = ANY (f.zeigtauf)
         WHERE f.endet IS NULL AND lo.endet IS NULL) foo;

View Nutzung