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

Revision 305, 6.5 KB checked in by frank.jaeger, 10 years ago (diff)

Verbesserung CSV-Export: Rechtsgemeinschaft in Namenszeile.

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