source: trunk/info/info/alkis/alkisexport.php @ 308

Revision 308, 6.9 KB checked in by frank.jaeger, 7 years ago (diff)

CSV-Export aller Flurstücke an einer Straße.

Line 
1<?php
2/*      Modul alkisexport.php
3        CSV-Export von ALKIS-Daten zu einem Flurstueck, Grundbuch oder Eigentümer.
4        Es wird eine GML-ID übergeben.
5        Es wird ein gespeicherter View verwendet, der nach der gml_id gefiltert wird.
6        Der View verkettet Flurstueck - Buchungsstelle - Grundbuch - Eigentuemer
7        Die Lagebezeichnung des Flurstücks wird in ein Feld komprimiert.
8        Parameter: gkz=mandant&gmlid=DE...&tabtyp=flurstueck/grundbuch/person
9
10        2014-01-17 krz f.j.
11        2014-01-20 weitere Spalten und verbesserte Formatierung
12        2014-01-21 Der View liefert "Rechtsgemeinschaft" nun als Feld in allen Personen-Sätzen
13                        eines GB-Blattes statt als eigenen "Satz ohne Person".
14        2014-01-27 Erweiterung auf Filter "strasse" ("gml_id" aus "ax_lagebezeichnungkatalogeintrag")
15*/
16
17function lage_zum_fs($gmlid) {
18        // Zu einem Flurstück die Lagebezeichnungen (mit Hausnummer) so aufbereiten,
19        // dass ggf. mehrere Lagebezeichnungen in eine Zelle der Tabelle passen.
20        $sql ="SELECT DISTINCT s.bezeichnung, l.hausnummer FROM alkis_beziehungen v ";
21        $sql.="JOIN ax_lagebezeichnungmithausnummer l ON v.beziehung_zu=l.gml_id ";
22        $sql.="JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage = s.lage ";
23        $sql.="WHERE v.beziehung_von= $1 AND v.beziehungsart='weistAuf' ";
24        $sql.="ORDER BY s.bezeichnung, l.hausnummer;";
25        $v=array($gmlid);
26        $res=pg_prepare("", $sql);
27        $res=pg_execute("", $v);
28        if (!$res) {
29                echo "Fehler bei Lagebezeichnung \n";
30                //echo $sql."\n";
31        }
32        $j=0;
33        $lagehsnr="";
34        while($row = pg_fetch_array($res)) {
35                if ($j > 0) {$lagehsnr.=", ";}
36                $sneu=$row["bezeichnung"];
37                if ($sneu == $salt) { // gleiche Str.
38                        $lagehsnr.=$row["hausnummer"]; // HsNr dran haengen
39                } else { // Name UND HsNr dranhaengen
40                        $lagehsnr.=$sneu." ".$row["hausnummer"];
41                }
42                $salt=$sneu; // Name f. naechste Runde
43                $j++;
44        }
45        pg_free_result($res);
46        return($lagehsnr);
47}
48
49$cntget = extract($_GET); // Parameter aus URL lesen
50header('Content-type: application/octet-stream');
51header('Content-Disposition: attachment; filename="alkis_'.$tabtyp.'_'.$gmlid.'.csv"');
52require_once("alkis_conf_location.php");
53include("alkisfkt.php");
54
55// CSV-Ausgabe: Kopfzeile mit Feldnamen
56echo "FS-Kennzeichen;GmkgNr;Gemarkung;Flur;Flurstueck;Flaeche;Adressen;GB-BezNr;GB-Bezirk;GB-Blatt;BVNR;Anteil_am_FS;Buchungsart;Namensnummer;AnteilDerPerson;RechtsGemeinschaft;Person;GebDatum;Anschrift;Anteil(berechnet)";
57
58// Datenbank-Verbindung
59$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
60if (!$con) {
61        exit("Fehler beim Verbinden der DB");
62}
63pg_set_client_encoding($con, LATIN1); // Für Excel kein UTF8 ausgeben
64
65// Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View "exp_csv".
66switch ($tabtyp) { // zulaessige Werte fuer &tabtyp=
67        case 'flurstueck': $filter = "fsgml"; break; // ax_flurstueck.gml_id
68        case 'grundbuch':  $filter = "gbgml"; break; // ax_buchungsblatt.gml_id
69        case 'person':     $filter = "psgml"; break; // ax_person.gml_id
70        case 'strasse':    $filter = "stgml"; break; // ax_lagebezeichnungkatalogeintrag.gml_id = Straße-GML-ID
71        default: exit("Falscher Parameter '".$tabtyp."'"); break;
72}
73
74// Daten aus gespeichertem View, zusaetzlich Filter: "feld"='wert' mitgeben
75if ($tabtyp == 'strasse') { // Sonderversion
76        $sql="SELECT * FROM exp_csv_str WHERE ".$filter." = $1 ";
77} else {
78        $sql="SELECT * FROM exp_csv WHERE ".$filter." = $1 ";
79}
80
81$v=array($gmlid);
82$res=pg_prepare("", $sql);
83$res=pg_execute("", $v);
84if (!$res) {exit("Fehler bei Datenbankabfrage");}
85$i=1; // Kopfzeile zählt mit
86$fsalt='';
87
88// Datenfelder auslesen
89while($row = pg_fetch_array($res)) {
90        $i++; // Zeile der Tabelle
91        $rechnen=true; // Formel in letzte Spalte?
92
93        // Flurstueck
94        $fsgml=$row["fsgml"];
95        $fs_kennz=$row["fs_kennz"]; // Rechts Trim "_" ?
96        $gmkgnr=$row["gemarkungsnummer"];
97        $gemkname=$row["gemarkung"];
98        $flurnummer=$row["flurnummer"];
99        $flstnummer=$row["zaehler"];
100        $nenner=$row["nenner"];
101        if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
102        $fs_flae=$row["fs_flae"]; // amtliche Fl. aus DB-Feld
103
104        // Grundbuch (Blatt)
105        $gb_bezirk=$row["gb_bezirk"]; // Nummer des Bezirks
106    $gb_beznam=$row["beznam"];    // Name des Bezirks
107        $gb_blatt=$row["gb_blatt"];
108
109        // Buchungsstelle (Grundstueck)
110        $bu_lfd=$row["bu_lfd"]; // BVNR
111        $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL
112        $bu_key=$row["buchungsart"]; // Schlüssel
113        $bu_art=$row["bu_art"]; // entschlüsselt (Umlaute in ANSI!)
114        if($bu_ant == '') { // Keine Bruch-Zahl
115                $bu_ant = '1'; // "voller Anteil" (Faktor 1)
116        } else {
117                $bu_ant=str_replace(".", ",", $bu_ant); // Dezimalkomma statt -punkt.           
118        }
119
120        // Namensnummer
121        $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma, wird sonst wie Datum dargestellt.
122        $nam_ant=$row["nam_ant"];
123        $nam_adr=$row["nam_adr"]; // Art der Rechtsgemeischaft (Schlüssel)
124
125        if ($nam_adr == '') {     // keine Rechtsgemeinschaft
126                $rechtsg='';
127                if ($nam_ant == '') { // und kein Bruch-Anteil
128                        $nam_ant=1; // dann ganzer Anteil
129                }
130        } else {
131                $rechnen=false; // bei Rechtsgemeinschaft die Anteile manuell interpretieren
132                if ($nam_adr == 9999) { // sonstiges
133                        $rechtsg=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft
134                } else {
135                        $rechtsg=rechtsgemeinschaft($nam_adr); // Entschlüsseln
136                }
137        }
138
139        // Person
140        $vnam=$row["vorname"];
141        $nana=$row["nachnameoderfirma"];
142        $namteil=$row["namensbestandteil"];
143        $name=anrede($row["anrede"]);
144        if ($name != "") {$name.=" ";} // Trenner
145        if ($namteil != "") {$name.=$namteil." ";} // von und zu
146        $name.=$nana;
147        if ($vnam != "") {$name.=", ".$vnam;} // Vorname nach hinten
148        $gebdat=$row["geburtsdatum"];
149
150        // Adresse der Person (Eigentuemer))
151        $ort=$row["ort"];
152        if ($ort == "") {
153                $adresse="";
154        } else {
155                $adresse=$row["strasse"]." ".$row["hausnummer"].", ".$row["plz"]." ".$ort;
156                $land=$row["land"]; // nur andere Länder anzeigen
157                if (($land != "DEUTSCHLAND") and ($land != "")) {
158                        $adresse.=" (".$land.")";
159                }
160        }
161
162        // Adressen (Lage) zum FS
163        if($fsgml != $fsalt) { // nur bei geändertem Kennz.
164                $lage=lage_zum_fs($fsgml); // die Lage neu ermitteln
165                $fsalt=$fsgml;
166        }
167
168        // Den Ausgabe-Satz montieren aus Flurstücks-, Grundbuch- und Namens-Teil
169        //      A             B           C             D               E               F            G
170        $fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";";
171        //      H              I              J             K           L           M
172        $gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";";
173        //       N            O            P            Q         R           S
174        $namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse;
175
176        // Anteile "GB am FS" und "Pers am GB" verrechnen
177        if ($rechnen) { // beide Anteile verwertbar
178                $formelteil=";=L".$i."*O".$i; // Spalte T
179        } else {
180                $formelteil=';';
181        }
182
183        // Ausgabe in CSV-Datei
184        echo "\n".$fsteil.$gbteil.$namteil.$formelteil;
185}
186pg_free_result($res);
187if ($i == 1) {exit ("Kein Treffer fuer gml_id=".$gmlid);} // nur Kopfzeile
188pg_close($con);
189exit(0);
190?>
Note: See TracBrowser for help on using the repository browser.