source: trunk/info/info/alkisn/alkisexport.php @ 362

Revision 362, 6.9 KB checked in by frank.jaeger, 8 years ago (diff)

Anpassung der ALKIS-Buchauskunft an die Datenbank-Struktur des norGIS-ALKIS-Importer.

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        Version
11        2016-02-23 Version fuer norGIS-ALKIS-Import
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        // FS >westAuf> Lage >> Katalog
18        $sql ="SELECT DISTINCT s.bezeichnung, l.hausnummer
19        FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf)
20        JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
21        WHERE f.gml_id= $1 ORDER BY s.bezeichnung, l.hausnummer;";
22
23        $v=array($gmlid);
24        $res=pg_prepare("", $sql);
25        $res=pg_execute("", $v);
26        if (!$res) {return "** Fehler bei Lagebezeichnung **";}
27        $j=0;
28        $lagehsnr="";
29        $salt="";
30        while($row = pg_fetch_array($res)) {
31                if ($j > 0) {$lagehsnr.=", ";}
32                $sneu=$row["bezeichnung"];
33                if ($sneu == $salt) { // gleiche Str.
34                        $lagehsnr.=$row["hausnummer"]; // HsNr dran haengen
35                } else { // Name UND HsNr dranhaengen
36                        $lagehsnr.=$sneu." ".$row["hausnummer"];
37                }
38                $salt=$sneu; // Name f. naechste Runde
39                $j++;
40        }
41        pg_free_result($res);
42        return($lagehsnr);
43}
44
45// HIER START
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;Anteil(berechnet)";
54
55// Datenbank-Verbindung
56$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
57if (!$con) {exit("Fehler beim Verbinden der DB");}
58pg_set_client_encoding($con, 'LATIN1'); // FÃŒr Excel kein UTF8 ausgeben
59
60// Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View "exp_csv".
61switch ($tabtyp) { // zulaessige Werte fuer &tabtyp=
62        case 'flurstueck': $filter = "fsgml"; break; // ax_flurstueck.gml_id
63        case 'grundbuch':  $filter = "gbgml"; break; // ax_buchungsblatt.gml_id
64        case 'person':     $filter = "psgml"; break; // ax_person.gml_id
65        case 'strasse':    $filter = "stgml"; break; // ax_lagebezeichnungkatalogeintrag.gml_id = Straße-GML-ID
66        default: exit("Falscher Parameter '".$tabtyp."'"); break;
67}
68
69// Daten aus gespeichertem View, zusaetzlich Filter: "feld"='wert' mitgeben
70if ($tabtyp == 'strasse') { // Sonderversion
71        $sql="SELECT * FROM exp_csv_str WHERE ".$filter." = $1 ";
72} else {
73        $sql="SELECT * FROM exp_csv WHERE ".$filter." = $1 ";
74}
75
76$v=array($gmlid);
77$res=pg_prepare("", $sql);
78$res=pg_execute("", $v);
79if (!$res) {exit("Fehler bei Datenbankabfrage");}
80$i=1; // Kopfzeile zÀhlt mit
81$fsalt='';
82
83// Datenfelder auslesen
84while($row = pg_fetch_array($res)) {
85        $i++; // Zeile der Tabelle
86        $rechnen=true; // Formel in letzte Spalte?
87
88        // Flurstueck
89        $fsgml=$row["fsgml"];
90        $fs_kennz=$row["fs_kennz"]; // Rechts Trim "_" ?
91        $gmkgnr=$row["gemarkungsnummer"];
92        $gemkname=$row["gemarkung"];
93        $flurnummer=$row["flurnummer"];
94        $flstnummer=$row["zaehler"];
95        $nenner=$row["nenner"];
96        // Bruchnummer kann in Excel als Datum interpretiert werden. In '' setzen.
97        if ($nenner > 0) {$flstnummer="'".$flstnummer."/".$nenner."'";} // BruchNr
98        $fs_flae=$row["fs_flae"]; // amtliche Fl. aus DB-Feld
99
100        // Grundbuch (Blatt)
101        $gb_bezirk=$row["gb_bezirk"]; // Nummer des Bezirks
102    $gb_beznam=$row["beznam"];    // Name des Bezirks
103        $gb_blatt=$row["gb_blatt"];
104
105        // Buchungsstelle (Grundstueck)
106        $bu_lfd=$row["bu_lfd"]; // BVNR
107        $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL
108        $bu_key=$row["buchungsart"]; // SchlÃŒssel
109        $bu_art=$row["bu_art"]; // entschlÃŒsselt (Umlaute in ANSI!)
110        if($bu_ant == '') { // Keine Bruch-Zahl
111                $bu_ant = '1'; // "voller Anteil" (Faktor 1)
112        } else {
113                $bu_ant=str_replace(".", ",", $bu_ant); // Dezimalkomma statt -punkt.           
114        }
115
116        // Namensnummer
117        $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma, wird sonst wie Datum dargestellt.
118        $nam_ant=$row["nam_ant"];
119        $nam_adr=$row["nam_adr"]; // Art der Rechtsgemeischaft (SchlÃŒssel)
120
121        if ($nam_adr == '') {     // keine Rechtsgemeinschaft
122                $rechtsg='';
123                if ($nam_ant == '') { // und kein Bruch-Anteil
124                        $nam_ant=1; // dann ganzer Anteil
125                }
126        } else {
127                $rechnen=false; // bei Rechtsgemeinschaft die Anteile manuell interpretieren
128                if ($nam_adr == 9999) { // sonstiges
129                        $rechtsg=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft
130                } else {
131                //      $rechtsg=rechtsgemeinschaft($nam_adr); // EntschlÃŒsseln
132                        $rechtsg=$row["nam_adrv"]; // Art der Rechtsgemeischaft (Value zum Key)
133                }
134        }
135
136        // Person
137        $vnam=$row["vorname"];
138        $nana=$row["nachnameoderfirma"];
139        $namteil=$row["namensbestandteil"];
140        //$name=anrede($row["anrede"]); 
141        $name=$row["anrv"]; // Anrede (Value zum Key)
142        if ($name != "") {$name.=" ";} // Trenner
143        if ($namteil != "") {$name.=$namteil." ";} // von und zu
144        $name.=$nana;
145        if ($vnam != "") {$name.=", ".$vnam;} // Vorname nach hinten
146        $gebdat=$row["geburtsdatum"];
147
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        }
159
160        // Adressen (Lage) zum FS
161        if($fsgml != $fsalt) { // nur bei geÀndertem Kennz.
162                $lage=lage_zum_fs($fsgml); // die Lage neu ermitteln
163                $fsalt=$fsgml;
164        }
165
166        // Den Ausgabe-Satz montieren aus FlurstÃŒcks-, Grundbuch- und Namens-Teil
167        //      A             B           C             D               E               F            G
168        $fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";";
169        //      H              I              J             K           L           M
170        $gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";";
171        //       N            O            P            Q         R           S
172        $namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse;
173
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
181        // Ausgabe in die CSV-Datei -> Download -> Tabellenkalkulation
182        echo "\n".$fsteil.$gbteil.$namteil.$formelteil;
183}
184pg_free_result($res);
185if ($i == 1) {exit ("Kein Treffer fuer gml_id=".$gmlid);} // nur Kopfzeile
186pg_close($con);
187exit(0);
188?>
Note: See TracBrowser for help on using the repository browser.