Index: trunk/data/konvert/postnas_0.6/sichten.sql
===================================================================
--- trunk/data/konvert/postnas_0.6/sichten.sql	(revision 130)
+++ trunk/data/konvert/postnas_0.6/sichten.sql	(revision 140)
@@ -6,4 +6,6 @@
 
 --  2011-07-25 PostNAS 06, Umbenennung
+--  2011-10-20 Nummer NebengebÃ€ude und Zuordnungspfeile fuer GebÃ€ude   ##### IN ARBEIT
+--  2011-12-08 umbenannt "gemeinde_in_gemarkung" -> "gemarkung_in_gemeinde"
 
 --  -----------------------------------------
@@ -27,6 +29,4 @@
 -- Die FlurstÃŒcksnummer fehlt dann im WMS.
 -- Die Bedingung vorÃŒbergehend heraus nehmen. Ursache klÃ€ren!
-
--- 4.11.2011 Sichten fÃŒr die Grenzen aus der Tabelle ax_besondereflurstuecksgrenze Astrid Emde
 
 
@@ -78,4 +78,27 @@
 
 
+-- Layer "ag_t_nebengeb"
+-- ---------------------
+
+CREATE OR REPLACE VIEW s_nummer_nebengebaeude 
+AS 
+ SELECT ap_pto.ogc_fid, 
+        ap_pto.wkb_geometry, 
+        ap_pto.drehwinkel * 57.296 AS drehwinkel,        -- umn: ANGLE [drehwinkel]
+     -- alkis_beziehungen.beziehungsart,                 -- TEST
+     -- ax_lagebezeichnungmitpseudonummer.pseudonummer,  -- die HsNr des zugehoerigen Hauptgebaeudes
+        ax_lagebezeichnungmitpseudonummer.laufendenummer -- umn: LABELITEM - die laufende Nummer des Nebengebaeudes
+   FROM ap_pto
+   JOIN alkis_beziehungen 
+     ON ap_pto.gml_id = alkis_beziehungen.beziehung_von
+   JOIN ax_lagebezeichnungmitpseudonummer 
+     ON alkis_beziehungen.beziehung_zu  = ax_lagebezeichnungmitpseudonummer.gml_id
+  WHERE alkis_beziehungen.beziehungsart = 'dientZurDarstellungVon'
+;
+
+COMMENT ON VIEW s_nummer_nebengebaeude IS 'fuer Kartendarstellung: Hausnummern NebengebÃ€ude';
+
+-- ToDo: Die Zahl in Klammern setzen ?  (in Map oder View?)
+
 
 -- Layer "ag_p_flurstueck"
@@ -140,4 +163,86 @@
 
 COMMENT ON VIEW s_beschriftung IS 'ap_pto, die noch nicht in anderen Layern angezeigt werden';
+
+
+BAUSTELLE
+
+
+-- Layer "s_zuordungspfeil_gebaeude"
+-- -----------------------------------
+
+CREATE OR REPLACE VIEW s_zuordungspfeil_gebaeude 
+AS 
+ SELECT ap_lpo.ogc_fid, 
+     -- alkis_beziehungen.beziehungsart, -- TEST
+     -- ap_lpo.art, -- TEST
+        ap_lpo.wkb_geometry
+   FROM ap_lpo
+   JOIN alkis_beziehungen 
+     ON ap_lpo.gml_id = alkis_beziehungen.beziehung_von
+   JOIN ax_gebaeude 
+     ON alkis_beziehungen.beziehung_zu = ax_gebaeude.gml_id
+  WHERE ap_lpo.art = 'Pfeil'
+    AND alkis_beziehungen.beziehungsart = 'dientZurDarstellungVon';
+
+COMMENT ON VIEW s_zuordungspfeil_gebaeude IS 'fuer Kartendarstellung';
+
+
+-- Sichten vom OBK (Oberbergischer Kreis) zu "Grenzen"
+-- ---------------------------------------------------
+-- Schema "alkis" daraus entfernt.
+
+-- Feld "ax_besondereflurstuecksgrenze.artderflurstuecksgrenze" als Array "integer[]" !
+-- Anpassung Schema 18.09.2011
+
+CREATE OR REPLACE VIEW sk2022_gemeindegrenze 
+AS 
+ SELECT gemg.ogc_fid, gemg.wkb_geometry
+   FROM ax_besondereflurstuecksgrenze gemg
+  WHERE (7106 = ANY (gemg.artderflurstuecksgrenze)) 
+    AND gemg.advstandardmodell ~~ 'DLKM'::text;
+
+
+CREATE OR REPLACE VIEW sk2020_regierungsbezirksgrenze 
+AS 
+ SELECT rbg.ogc_fid, rbg.wkb_geometry
+   FROM ax_besondereflurstuecksgrenze rbg
+  WHERE (7103 = ANY (rbg.artderflurstuecksgrenze)) 
+    AND rbg.advstandardmodell ~~ 'DLKM'::text;
+
+
+CREATE OR REPLACE VIEW sk2018_bundeslandgrenze 
+AS 
+ SELECT blg.ogc_fid, blg.wkb_geometry
+   FROM ax_besondereflurstuecksgrenze blg
+  WHERE (7102 = ANY (blg.artderflurstuecksgrenze)) 
+    AND blg.advstandardmodell ~~ 'DLKM'::text;
+
+
+CREATE OR REPLACE VIEW sk2014_gemarkungsgrenze 
+AS 
+ SELECT gemag.ogc_fid, gemag.wkb_geometry
+   FROM ax_besondereflurstuecksgrenze gemag
+  WHERE (7003 = ANY (gemag.artderflurstuecksgrenze)) 
+    AND gemag.advstandardmodell ~~ 'DLKM'::text;
+
+
+--CREATE OR REPLACE VIEW sk2012_flurgrenze 
+--AS 
+-- SELECT fg.ogc_fid, fg.wkb_geometry
+--   FROM ax_besondereflurstuecksgrenze fg
+--  WHERE (3000 = ANY (fg.artderflurstuecksgrenze)) 
+--    AND fg.advstandardmodell ~~ 'DLKM'::text;
+
+-- Vorlaeufig, bis Schema umgestellt ist
+
+CREATE OR REPLACE VIEW sk2012_flurgrenze 
+AS 
+ SELECT fg.ogc_fid, fg.wkb_geometry
+   FROM ax_besondereflurstuecksgrenze fg
+  WHERE (3000 = fg.artderflurstuecksgrenze) 
+    AND fg.advstandardmodell ~~ 'DLKM'::text;
+
+-- comment ....
+
 
 --  ------------------------------------------
@@ -240,5 +345,7 @@
 -- Nur durch Auswertung der FlurstÃŒcke kann man ermitteln, in welcher Gemeinde eine Gemarkung liegt.
 
-CREATE OR REPLACE VIEW gemeinde_in_gemarkung
+-- 2011-12-08 umbenannt
+
+CREATE OR REPLACE VIEW gemarkung_in_gemeinde
 AS
   SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
@@ -247,5 +354,5 @@
 ;
 
-COMMENT ON VIEW gemeinde_in_gemarkung IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
+COMMENT ON VIEW gemarkung_in_gemeinde IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
 
 
@@ -481,30 +588,4 @@
 ;
 
---
--- Sichten fÃŒr Grenzen aus ax_besondereflurstuecksgrenze
---
--- Select distinct artderflurstuecksgrenze from ax_besondereflurstuecksgrenze
-Create view grenze_flur_3000 as 
-Select ogc_fid, artderflurstuecksgrenze, wkb_geometry from ax_besondereflurstuecksgrenze
-where 3000 = ANY(artderflurstuecksgrenze);
-
-Create view grenze_gemarkung_7003 as 
-Select ogc_fid, artderflurstuecksgrenze, wkb_geometry from ax_besondereflurstuecksgrenze
-where 7003 = ANY(artderflurstuecksgrenze);
-
-
-Create view grenze_regierungsbezirk_7103 as 
-Select ogc_fid, artderflurstuecksgrenze, wkb_geometry from ax_besondereflurstuecksgrenze
-where 7103 = ANY(artderflurstuecksgrenze);
-
-Create view grenze_landkreisgrenze_7104 as 
-Select ogc_fid, artderflurstuecksgrenze, wkb_geometry from ax_besondereflurstuecksgrenze
-where 7104 = ANY(artderflurstuecksgrenze);
-
-
-Create view grenze_gemeinde_7106 as 
-Select ogc_fid, artderflurstuecksgrenze, wkb_geometry from ax_besondereflurstuecksgrenze
-where 7106 = ANY(artderflurstuecksgrenze);
-
 -- END --
 
Index: trunk/data/konvert/postnas_0.6/gemeinden_laden.sql
===================================================================
--- trunk/data/konvert/postnas_0.6/gemeinden_laden.sql	(revision 130)
+++ trunk/data/konvert/postnas_0.6/gemeinden_laden.sql	(revision 140)
@@ -14,9 +14,11 @@
 
 
--- Teil 2: Laden der Tabelle
+-- Teil 2: Laden der Tabellen
 
 -- Stand 
 
 --  2011-07-25 PostNAS 06, Umbenennung
+--  2011-12-08 Person -> Gemeinde
+
 
 SET client_encoding = 'UTF-8';
@@ -58,3 +60,36 @@
 
 
+
+-- =======================================================
+-- Tabelle fuer die Zuordnung vom Eigentümern zu Gemeinden
+-- =======================================================
+
+
+-- erst mal sauber machen
+DELETE FROM gemeinde_person;
+
+-- alle direkten Buchungen mit View ermitteln und in Tabelle speichern
+-- Für eine Stadt: ca. 20 Sekunden
+INSERT INTO  gemeinde_person 
+       (land, regierungsbezirk, kreis, gemeinde, person, buchtyp)
+ SELECT land, regierungsbezirk, kreis, gemeinde, person, 1
+   FROM gemeinde_person_typ1;
+
+
+-- noch die komplexeren Buchungen ergänzen (Recht an ..)
+-- Mit View ermitteln und in Tabelle speichern
+-- Für eine Stadt: ca. 10 Sekunden
+INSERT INTO  gemeinde_person 
+       (  land,   regierungsbezirk,   kreis,   gemeinde,   person,  buchtyp)
+ SELECT q.land, q.regierungsbezirk, q.kreis, q.gemeinde, q.person,  2
+   FROM gemeinde_person_typ2 q   -- Quelle
+   LEFT JOIN gemeinde_person z   -- Ziel
+     ON q.person   = z.person    -- Aber nur, wenn dieser Fall im Ziel
+    AND q.land     = z.land 
+    AND q.regierungsbezirk = z.regierungsbezirk 
+    AND q.kreis    = z.kreis 
+    AND q.gemeinde = z.gemeinde
+  WHERE z.gemeinde is Null;      -- ..  noch nicht vorhanden ist
+
+
 -- ENDE --
Index: trunk/data/konvert/postnas_0.6/gemeinden_definition.sql
===================================================================
--- trunk/data/konvert/postnas_0.6/gemeinden_definition.sql	(revision 130)
+++ trunk/data/konvert/postnas_0.6/gemeinden_definition.sql	(revision 140)
@@ -1,4 +1,23 @@
 
 -- ALKIS PostNAS 0.6
+
+
+-- Teil 1: Anlegen der Tabellen
+
+
+-- Stand 
+
+--  2011-07-25 PostNAS 06, Umbenennung
+--  2011-12-08 Person -> Gemeinde
+
+SET client_encoding = 'UTF-8';
+
+-- Alles auf Anfang!
+
+-- DROP VIEW gemeinde_person_typ1;
+-- DROP VIEW gemeinde_person_typ2;
+
+-- DROP TABLE gemeinde_gemarkung;
+
 
 -- =======================================================
@@ -12,18 +31,4 @@
 -- Da nicht stÃ€ndig mit 'SELECT DISTINCT' sÃ€mtliche FlurstÃŒcke durchsucht werden kÃ¶nnen, 
 -- muss diese Information als (redundante) Tabelle nach dem Laden zwischengespeichert werden. 
-
-
--- Teil 1: Anlegen der Tabelle
-
--- Stand 
-
---  2011-07-25 PostNAS 06, Umbenennung
-
-
-SET client_encoding = 'UTF-8';
-
--- Alles auf Anfang!
-
-DROP TABLE gemeinde_gemarkung;
 
 CREATE TABLE gemeinde_gemarkung (
@@ -45,2 +50,148 @@
 
 COMMENT ON COLUMN gemeinde_gemarkung.gkz            IS 'Gemeindekennziffer fÃŒr Mandant';
+
+
+-- =======================================================
+-- Tabelle fuer die Zuordnung vom EigentÃŒmern zu Gemeinden
+-- =======================================================
+
+-- Die Feststellung, ob eine Person (Mit-) EigentÃŒmer von mindestens einem
+-- FlurstÃŒck in einer Gemeinde ist, geht ÃŒber viele Relationen.
+-- Dabei kann es mehrere Varianten geben.
+-- Dies sollte nach dem Laden ermittelt und gespeichert werden, damit dies in
+-- der Navigation auf einfache Art verwendet werden kann. 
+
+
+-- DROP TABLE gemeinde_person;
+
+CREATE TABLE gemeinde_person (
+  land 			integer,
+  regierungsbezirk	integer,
+  kreis			integer,
+  gemeinde		integer,
+  person		character varying(16), 
+  buchtyp		integer,
+  CONSTRAINT gemeinde_person_pk PRIMARY KEY (gemeinde, person)
+);
+
+
+COMMENT ON TABLE  gemeinde_person                IS 'Person ist EigentÃŒmer von mindestens einem FlurstÃŒck in der Gemeinde';
+COMMENT ON COLUMN gemeinde_person.gemeinde       IS 'Gemeindenummer';
+COMMENT ON COLUMN gemeinde_person.buchtyp        IS 'Typ der Buchung 1=direkt, 2=Recht einer Buchungsstele an andere Buchungsstelle';
+COMMENT ON COLUMN gemeinde_person.person         IS 'gml_id von Person';
+
+-- Index zum Filtern in der Buchauskunft
+CREATE INDEX person_gemeinde  ON gemeinde_person (person, gemeinde);
+
+
+-- =======================================================
+-- VIEWs  fuer die Zuordnung vom EigentÃŒmern zu Gemeinden
+-- =======================================================
+
+-- "Normale" Buchungen
+
+CREATE VIEW gemeinde_person_typ1
+AS
+  SELECT DISTINCT
+    p.gml_id          AS person, 
+    g.land, g.regierungsbezirk, g.kreis, g.gemeinde
+
+  FROM ax_person               p
+
+-- Person < benennt < Namensnummer
+  JOIN alkis_beziehungen      bpn  ON bpn.beziehung_zu   = p.gml_id  -- Bez. Person - Nummer
+  JOIN ax_namensnummer         n   ON bpn.beziehung_von  = n.gml_id
+
+-- Namensnummer > istBestandteilVon > Blatt
+  JOIN alkis_beziehungen      bnb  ON bnb.beziehung_von  = n.gml_id  -- Bez. Nummer - Blatt
+  JOIN ax_buchungsblatt        b   ON bnb.beziehung_zu   = b.gml_id
+
+-- Blatt < istBestandteilVon < buchungsStelle
+  JOIN alkis_beziehungen      bbg  ON bbg.beziehung_zu   = b.gml_id  -- Bez. Blatt  - Stelle
+  JOIN ax_buchungsstelle       s   ON bbg.beziehung_von  = s.gml_id 
+
+-- buchungsStelle < istGebucht < flurstÃŒck
+  JOIN alkis_beziehungen      bsf  ON bsf.beziehung_zu   = s.gml_id  -- Bez. Stelle - FlurstÃŒck
+  JOIN ax_flurstueck           f   ON bsf.beziehung_von  = f.gml_id 
+
+  JOIN ax_gemarkung            k   ON f.land             = k.land 
+                                  AND f.gemarkungsnummer = k.gemarkungsnummer 
+  JOIN gemeinde_gemarkung      g   ON k.gemarkungsnummer = g.gemarkung
+
+  WHERE bpn.beziehungsart = 'benennt' 
+    AND bnb.beziehungsart = 'istBestandteilVon'
+    AND bbg.beziehungsart = 'istBestandteilVon'
+    AND bsf.beziehungsart = 'istGebucht'
+;
+
+COMMENT ON VIEW gemeinde_person_typ1 IS 'Personen die EigentÃŒmer vom FlurstÃŒcken in einer Gemeinde sind. Typ1 = nomale Buchungen mit direkter Beziehung.';
+
+
+-- "Komplexe" Buchungen mit Rechten von Buchungen an Buchungen
+
+CREATE VIEW gemeinde_person_typ2
+AS
+  SELECT DISTINCT
+    p.gml_id          AS person, 
+  --bpn.beziehungsart AS bpnbez, 
+  --bnb.beziehungsart AS bnbbez, 
+  --bbg.beziehungsart AS bbgbez, 
+  --bsf.beziehungsart AS bsfbez, 
+  --k.gemarkungsnummer,
+    g.land, g.regierungsbezirk, g.kreis, g.gemeinde
+
+  FROM ax_person               p
+
+-- Person < benennt < Namensnummer
+  JOIN alkis_beziehungen      bpn  ON bpn.beziehung_zu   = p.gml_id  -- Bez. Person - Nummer
+  JOIN ax_namensnummer         n   ON bpn.beziehung_von  = n.gml_id
+
+-- Namensnummer > istBestandteilVon > Blatt
+  JOIN alkis_beziehungen      bnb  ON bnb.beziehung_von  = n.gml_id  -- Bez. Nummer - Blatt
+  JOIN ax_buchungsblatt        b   ON bnb.beziehung_zu   = b.gml_id
+
+-- Blatt < istBestandteilVon < buchungsStelle1
+  JOIN alkis_beziehungen      bbg  ON bbg.beziehung_zu   = b.gml_id  -- Bez. Blatt  - Stelle
+  JOIN ax_buchungsstelle       s1  ON bbg.beziehung_von  = s1.gml_id 
+
+-- buchungsStelle2 < an < buchungsStelle1
+  JOIN alkis_beziehungen      bss  ON bss.beziehung_von  = s1.gml_id  -- Bez. Stelle  - Stelle
+  JOIN ax_buchungsstelle       s2  ON bss.beziehung_zu   = s2.gml_id 
+
+-- buchungsStelle2 < istGebucht < flurstÃŒck
+  JOIN alkis_beziehungen      bsf  ON bsf.beziehung_zu   = s2.gml_id  -- Bez. Stelle - FlurstÃŒck
+  JOIN ax_flurstueck           f   ON bsf.beziehung_von  = f.gml_id 
+
+  JOIN ax_gemarkung            k   ON f.land             = k.land 
+                                  AND f.gemarkungsnummer = k.gemarkungsnummer 
+  JOIN gemeinde_gemarkung      g   ON k.gemarkungsnummer = g.gemarkung
+
+  WHERE bpn.beziehungsart = 'benennt' 
+    AND bnb.beziehungsart = 'istBestandteilVon'
+    AND bbg.beziehungsart = 'istBestandteilVon'
+    AND bss.beziehungsart = 'an'
+    AND bsf.beziehungsart = 'istGebucht'
+ -- LIMIT 100  -- Test-Option
+;
+
+COMMENT ON VIEW gemeinde_person_typ2 IS 'Personen die EigentÃŒmer vom FlurstÃŒcken in einer Gemeinde sind. Typ2 = Buchungen mit Rechten einer Buchungssstelle an einer anderen.';
+
+
+-- Statistik ÃŒber die Buchungs-Typen je Gemeinde
+CREATE VIEW gemeinde_person_statistik
+AS
+  SELECT p.land, p.regierungsbezirk, p.kreis, p.gemeinde, g.gemeindename, p.buchtyp, count(p.person) as personen
+  FROM   gemeinde_person    p
+  JOIN   gemeinde_gemarkung g
+    ON   p.land     = g.land 
+    AND  p.regierungsbezirk = g.regierungsbezirk 
+    AND  p.kreis    = g.kreis 
+    AND  p.gemeinde = g.gemeinde
+  GROUP BY p.land, p.regierungsbezirk, p.kreis, p.gemeinde, g.gemeindename, p.buchtyp
+  ORDER BY p.land, p.regierungsbezirk, p.kreis, p.gemeinde, p.buchtyp
+;
+
+COMMENT ON VIEW gemeinde_person_statistik IS 'ZÃ€hlen der Personen je Gemeinde und Buchungstyp';
+
+
+-- ENDE --
Index: trunk/data/konvert/postnas_0.6/gemeinde_person.sql
===================================================================
--- trunk/data/konvert/postnas_0.6/gemeinde_person.sql	(revision 140)
+++ trunk/data/konvert/postnas_0.6/gemeinde_person.sql	(revision 140)
@@ -0,0 +1,197 @@
+
+-- Neue Tabelle "gemeinde_person" definieren UND laden.
+--
+-- Zusammenfassung der neuen Teile aus 2 Dateien zum Nachtragen in vorhandene Datenbanken
+--
+-- Laufzeit 
+--  für eine Stadt       ca.  1 Minute
+--  für ein  Kreisgebiet ca. 10 Minuten 
+
+
+-- ** aus gemeinden_definition.sql
+
+-- =======================================================
+-- Tabelle fuer die Zuordnung vom Eigentümern zu Gemeinden
+-- =======================================================
+
+-- Die Feststellung, ob eine Person (Mit-) Eigentümer von mindestens einem
+-- Flurstück in einer Gemeinde ist, geht über viele Relationen.
+-- Dabei kann es mehrere Varianten geben.
+-- Dies sollte nach dem Laden ermittelt und gespeichert werden, damit dies in
+-- der Navigation auf einfache Art verwendet werden kann. 
+
+
+-- DROP TABLE gemeinde_person;
+
+CREATE TABLE gemeinde_person (
+  land 			integer,
+  regierungsbezirk	integer,
+  kreis			integer,
+  gemeinde		integer,
+  person		character varying(16), 
+  buchtyp		integer,
+  CONSTRAINT gemeinde_person_pk PRIMARY KEY (gemeinde, person)
+);
+
+
+COMMENT ON TABLE  gemeinde_person                IS 'Person ist Eigentümer von mindestens einem Flurstück in der Gemeinde';
+COMMENT ON COLUMN gemeinde_person.gemeinde       IS 'Gemeindenummer';
+COMMENT ON COLUMN gemeinde_person.buchtyp        IS 'Typ der Buchung 1=direkt, 2=Recht einer Buchungsstele an andere Buchungsstelle';
+COMMENT ON COLUMN gemeinde_person.person         IS 'gml_id von Person';
+
+-- Index zum Filtern in der Buchauskunft
+CREATE INDEX person_gemeinde  ON gemeinde_person (person, gemeinde);
+
+
+-- =======================================================
+-- VIEWs  fuer die Zuordnung vom Eigentümern zu Gemeinden
+-- =======================================================
+
+-- "Normale" Buchungen
+
+CREATE VIEW gemeinde_person_typ1
+AS
+  SELECT DISTINCT
+    p.gml_id          AS person, 
+    g.land, g.regierungsbezirk, g.kreis, g.gemeinde
+
+  FROM ax_person               p
+
+-- Person < benennt < Namensnummer
+  JOIN alkis_beziehungen      bpn  ON bpn.beziehung_zu   = p.gml_id  -- Bez. Person - Nummer
+  JOIN ax_namensnummer         n   ON bpn.beziehung_von  = n.gml_id
+
+-- Namensnummer > istBestandteilVon > Blatt
+  JOIN alkis_beziehungen      bnb  ON bnb.beziehung_von  = n.gml_id  -- Bez. Nummer - Blatt
+  JOIN ax_buchungsblatt        b   ON bnb.beziehung_zu   = b.gml_id
+
+-- Blatt < istBestandteilVon < buchungsStelle
+  JOIN alkis_beziehungen      bbg  ON bbg.beziehung_zu   = b.gml_id  -- Bez. Blatt  - Stelle
+  JOIN ax_buchungsstelle       s   ON bbg.beziehung_von  = s.gml_id 
+
+-- buchungsStelle < istGebucht < flurstück
+  JOIN alkis_beziehungen      bsf  ON bsf.beziehung_zu   = s.gml_id  -- Bez. Stelle - Flurstück
+  JOIN ax_flurstueck           f   ON bsf.beziehung_von  = f.gml_id 
+
+  JOIN ax_gemarkung            k   ON f.land             = k.land 
+                                  AND f.gemarkungsnummer = k.gemarkungsnummer 
+  JOIN gemeinde_gemarkung      g   ON k.gemarkungsnummer = g.gemarkung
+
+  WHERE bpn.beziehungsart = 'benennt' 
+    AND bnb.beziehungsart = 'istBestandteilVon'
+    AND bbg.beziehungsart = 'istBestandteilVon'
+    AND bsf.beziehungsart = 'istGebucht'
+;
+
+COMMENT ON VIEW gemeinde_person_typ1 IS 'Personen die Eigentümer vom Flurstücken in einer Gemeinde sind. Typ1 = nomale Buchungen mit direkter Beziehung.';
+
+
+-- "Komplexe" Buchungen mit Rechten von Buchungen an Buchungen
+
+CREATE VIEW gemeinde_person_typ2
+AS
+  SELECT DISTINCT
+    p.gml_id          AS person, 
+  --bpn.beziehungsart AS bpnbez, 
+  --bnb.beziehungsart AS bnbbez, 
+  --bbg.beziehungsart AS bbgbez, 
+  --bsf.beziehungsart AS bsfbez, 
+  --k.gemarkungsnummer,
+    g.land, g.regierungsbezirk, g.kreis, g.gemeinde
+
+  FROM ax_person               p
+
+-- Person < benennt < Namensnummer
+  JOIN alkis_beziehungen      bpn  ON bpn.beziehung_zu   = p.gml_id  -- Bez. Person - Nummer
+  JOIN ax_namensnummer         n   ON bpn.beziehung_von  = n.gml_id
+
+-- Namensnummer > istBestandteilVon > Blatt
+  JOIN alkis_beziehungen      bnb  ON bnb.beziehung_von  = n.gml_id  -- Bez. Nummer - Blatt
+  JOIN ax_buchungsblatt        b   ON bnb.beziehung_zu   = b.gml_id
+
+-- Blatt < istBestandteilVon < buchungsStelle1
+  JOIN alkis_beziehungen      bbg  ON bbg.beziehung_zu   = b.gml_id  -- Bez. Blatt  - Stelle
+  JOIN ax_buchungsstelle       s1  ON bbg.beziehung_von  = s1.gml_id 
+
+-- buchungsStelle2 < an < buchungsStelle1
+  JOIN alkis_beziehungen      bss  ON bss.beziehung_von  = s1.gml_id  -- Bez. Stelle  - Stelle
+  JOIN ax_buchungsstelle       s2  ON bss.beziehung_zu   = s2.gml_id 
+
+-- buchungsStelle2 < istGebucht < flurstück
+  JOIN alkis_beziehungen      bsf  ON bsf.beziehung_zu   = s2.gml_id  -- Bez. Stelle - Flurstück
+  JOIN ax_flurstueck           f   ON bsf.beziehung_von  = f.gml_id 
+
+  JOIN ax_gemarkung            k   ON f.land             = k.land 
+                                  AND f.gemarkungsnummer = k.gemarkungsnummer 
+  JOIN gemeinde_gemarkung      g   ON k.gemarkungsnummer = g.gemarkung
+
+  WHERE bpn.beziehungsart = 'benennt' 
+    AND bnb.beziehungsart = 'istBestandteilVon'
+    AND bbg.beziehungsart = 'istBestandteilVon'
+    AND bss.beziehungsart = 'an'
+    AND bsf.beziehungsart = 'istGebucht'
+ -- LIMIT 100  -- Test-Option
+;
+
+COMMENT ON VIEW gemeinde_person_typ2 IS 'Personen die Eigentümer vom Flurstücken in einer Gemeinde sind. Typ2 = Buchungen mit Rechten einer Buchungssstelle an einer anderen.';
+
+
+-- Statistik über die Buchungs-Typen je Gemeinde
+CREATE VIEW gemeinde_person_statistik
+AS
+  SELECT p.land, p.regierungsbezirk, p.kreis, p.gemeinde, g.gemeindename, p.buchtyp, count(p.person) as personen
+  FROM   gemeinde_person    p
+  JOIN   gemeinde_gemarkung g
+    ON   p.land     = g.land 
+    AND  p.regierungsbezirk = g.regierungsbezirk 
+    AND  p.kreis    = g.kreis 
+    AND  p.gemeinde = g.gemeinde
+  GROUP BY p.land, p.regierungsbezirk, p.kreis, p.gemeinde, g.gemeindename, p.buchtyp
+  ORDER BY p.land, p.regierungsbezirk, p.kreis, p.gemeinde, p.buchtyp
+;
+
+COMMENT ON VIEW gemeinde_person_statistik IS 'Zählen der Personen je Gemeinde und Buchungstyp';
+
+
+
+-- ** aus gemeinden_laden.sql
+
+
+-- =======================================================
+-- Tabelle fuer die Zuordnung vom Eigentümern zu Gemeinden
+-- =======================================================
+
+
+-- erst mal sauber machen
+DELETE FROM gemeinde_person;
+
+-- alle direkten Buchungen mit View ermitteln und in Tabelle speichern
+-- Für eine Stadt: ca. 20 Sekunden
+INSERT INTO  gemeinde_person 
+       (land, regierungsbezirk, kreis, gemeinde, person, buchtyp)
+ SELECT land, regierungsbezirk, kreis, gemeinde, person, 1
+   FROM gemeinde_person_typ1;
+
+
+-- noch die komplexeren Buchungen ergänzen (Recht an ..)
+-- Mit View ermitteln und in Tabelle speichern
+-- Für eine Stadt: ca. 10 Sekunden
+INSERT INTO  gemeinde_person 
+       (  land,   regierungsbezirk,   kreis,   gemeinde,   person,  buchtyp)
+ SELECT q.land, q.regierungsbezirk, q.kreis, q.gemeinde, q.person,  2
+   FROM gemeinde_person_typ2 q   -- Quelle
+   LEFT JOIN gemeinde_person z   -- Ziel
+     ON q.person   = z.person    -- Aber nur, wenn dieser Fall im Ziel
+    AND q.land     = z.land 
+    AND q.regierungsbezirk = z.regierungsbezirk 
+    AND q.kreis    = z.kreis 
+    AND q.gemeinde = z.gemeinde
+  WHERE z.gemeinde is Null;      -- ..  noch nicht vorhanden ist
+
+
+-- Berechtigungen
+
+-- GRANT SELECT ON TABLE ...
+
+
+-- ENDE --
