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

Revision 304, 6.0 KB checked in by frank.jaeger, 7 years ago (diff)

ALKIS-Export als CSV verfeinert

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*/
13
14function lage_zum_fs($gmlid) {
15        // Zu einem Flurstück die Lagebezeichnungen (mit Hausnummer) so aufbereiten,
16        // dass ggf. mehrere Lagebezeichnungen in eine Zelle der Tabelle passen.
17        $sql ="SELECT DISTINCT s.bezeichnung, l.hausnummer FROM alkis_beziehungen v ";
18        $sql.="JOIN ax_lagebezeichnungmithausnummer l ON v.beziehung_zu=l.gml_id ";
19        $sql.="JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage = s.lage ";
20        $sql.="WHERE v.beziehung_von= $1 AND v.beziehungsart='weistAuf' ";
21        $sql.="ORDER BY s.bezeichnung, l.hausnummer;";
22        $v=array($gmlid);
23        $res=pg_prepare("", $sql);
24        $res=pg_execute("", $v);
25        if (!$res) {
26                echo "Fehler bei Lagebezeichnung \n";
27                echo $sql."\n";
28        }
29        $j=0;
30        $lagehsnr="";
31        while($row = pg_fetch_array($res)) {
32                if ($j > 0) {$lagehsnr.=", ";}
33                $sneu=$row["bezeichnung"];
34                if ($sneu == $salt) { // gleiche Str.
35                        $lagehsnr.=$row["hausnummer"]; // HsNr dran haengen
36                } else { // Name UND HsNr dranhaengen
37                        $lagehsnr.=$sneu." ".$row["hausnummer"];
38                }
39                $salt=$sneu; // Name f. naechste Runde
40                $j++;
41        }
42        pg_free_result($res);
43        return($lagehsnr);
44}
45
46$cntget = extract($_GET); // Parameter aus URL lesen
47header('Content-type: application/octet-stream');
48header('Content-Disposition: attachment; filename="alkis_'.$tabtyp.'_'.$gmlid.'.csv"');
49require_once("alkis_conf_location.php");
50include("alkisfkt.php");
51
52// CSV-Ausgabe: Kopfzeile mit Feldnamen
53echo "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";
54
55// Datenbank-Verbindung
56$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
57if (!$con) {
58        exit("Fehler beim Verbinden der DB");
59}
60pg_set_client_encoding($con, LATIN1); // Für Excel kein UTF8 ausgeben
61
62// Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View
63switch ($tabtyp) { // zulaessige Erte fuer &tabtyp=
64        case 'flurstueck': $filter = "fsgml"; break;
65        case 'grundbuch':  $filter = "gbgml"; break;
66        case 'person':     $filter = "psgml"; break;
67        default: exit("Falscher Parameter '".$tabtyp."'"); break;
68}
69
70// Daten aus gespeichertem View
71$sql ="SELECT * FROM exp_csv WHERE ".$filter." = $1 ";
72$v = array($gmlid);
73$res = pg_prepare("", $sql);
74$res = pg_execute("", $v);
75if (!$res) {
76        exit("Fehler bei Datenbankabfrage");
77}
78$i=0;
79$fsalt='';
80
81// Datenfelder auslesen
82while($row = pg_fetch_array($res)) {
83
84        // Flurstueck
85        $fsgml=$row["fsgml"];
86        $fs_kennz=$row["fs_kennz"]; // Rechts Trim "_" ?
87        $gmkgnr=$row["gemarkungsnummer"];
88        $gemkname=$row["gemarkung"];
89        $flurnummer=$row["flurnummer"];
90        $flstnummer=$row["zaehler"];
91        $nenner=$row["nenner"];
92        if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
93        $fs_flae=$row["fs_flae"]; // amtliche Fl. aus DB-Feld
94
95        // Grundbuch (Blatt)
96        $gb_bezirk=$row["gb_bezirk"]; // Nummer des Bezirks
97    $gb_beznam=$row["beznam"];    // Name des Bezirks
98        $gb_blatt=$row["gb_blatt"];
99
100        // Buchungsstelle (Grundstueck)
101        $bu_lfd=$row["bu_lfd"]; // BVNR
102        $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL wenn zaehler oder nenner NULL sind
103        $bu_key=$row["buchungsart"]; // Sxhlüssel
104        $bu_art=$row["bu_art"]; // entschlüsselt (Umlaute in ANSI!)
105
106        // Für Berechnungen in der exportierten Tabelle wäre es nützlich, wenn "voller Anteil" als Faktor 1
107        // statt eines leeren Feldes ausgegeben würde  - Ausnahmen?
108        if(($bu_ant == '') and ($bu_key == 1100)) { // Grundstück
109                $bu_ant = '1';
110        }
111
112        // Namensnummer
113        $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma. Wird sonst als Datum dargestellt.
114        $nam_ant=$row["nam_ant"];
115        if ($nam_ant == '') {$nam_ant=1;} // Wann darf als Anteil "1" statt leer gesetzt werden?
116    // Das ist falsch, wenn z.B. eine Rechtsgemeinschaft verbal beschrieben ist (in anderem Datensatz).
117        $nam_adr=$row["nam_adr"]; // Art der Rechtsgemeischaft (Schlüssel)
118        $nam_bes=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft
119
120        // Rechtsgemeinschaft (in einer eigene Zeile ohne Namen)
121        if ($nam_adr == 9999) { // sonstiges
122                $rechtsg=$nam_bes; // Beschreibung verwenden
123        } else {
124                $rechtsg=rechtsgemeinschaft($nam_adr); // Entschlüsseln
125        }
126
127        // Person
128        $nana=$row["nachnameoderfirma"];
129        if ($nana == "") {
130                $name="";
131        } else {
132                $name=anrede($row["anrede"]);
133                $namteil=$row["namensbestandteil"];
134                if ($namteil != "") { // von und zu
135                        $name.=" ".$namteil;
136                }
137                $name.=" ".$nana;
138                $vnam=$row["vorname"];
139                if ($vnam != "") { // keine Firma
140                        $name.=", ".$vnam;
141                }
142        }
143        $gebdat=$row["geburtsdatum"];
144
145        // Adresse der Person (Eigentuemer))
146        $ort=$row["ort"];
147        if ($ort == "") {
148                $adresse="";
149        } else {
150                $adresse=$row["strasse"]." ".$row["hausnummer"].", ".$row["plz"]." ".$ort;
151                $land=$row["land"]; // nur andere Länder anzeigen
152                if (($land != "DEUTSCHLAND") and ($land != "")) {
153                        $adresse.=" (".$land.")";
154                }
155        }
156
157        // Adressen (Lage) zum FS
158        if($fsgml != $fsalt) { // nur bei geändertem Kennz.
159                $lage=lage_zum_fs($fsgml); // die Lage neu ermitteln
160                $fsalt=$fsgml;
161        }
162
163        // Den Ausgabe-Satz montieren aus Flurstücks-, Grundbuch- und Namens-Teil
164        $fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";";
165        $gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";";
166        $namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse;
167
168        // Ausgabe in CSV-Datei
169        echo "\n".$fsteil.$gbteil.$namteil;
170        $i++;
171}
172pg_free_result($res);
173if ($i == 0) {exit ("Kein Treffer fuer gml_id=".$gmlid);}
174pg_close($con);
175exit(0);
176?>
Note: See TracBrowser for help on using the repository browser.