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

Revision 355, 7.2 KB checked in by frank.jaeger, 8 years ago (diff)

Grafiken in der Auskunft umgestellt von .ico auf .png

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