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

Revision 375, 8.6 KB checked in by frank.jaeger, 7 years ago (diff)

kleine Korrekturen an den Buchauskunft

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:
9                alkisexport.php?gkz=mandant&tabtyp=flurstueck/grundbuch/person&gmlid=DE...
10                alkisexport.php?gkz=270&tabtyp=gemarkung&gemarkung=2662   
11                alkisexport.php?gkz=270&gemarkung=2662
12
13        Fehler
14                alkisexport.php?gkz=270&tabtyp=gemarkung&gmlid=2662
15                alkisexport.php?gkz=270&tabtyp=flurstueck&gemarkung=2662
16                alkisexport.php?gkz=270&tabtyp=flurstueck
17                alkisn/alkisexport.php?gkz=270&gmlid=2662
18
19        Version
20        2016-02-23 Version fuer norGIS-ALKIS-Import
21        2016-10-18 Export einer ganzen Gemarkung zulassen (Sonderfall bei den Parametern)
22*/
23
24function lage_zum_fs($gmlid) {
25        // Zu einem FlurstÃŒck die Lagebezeichnungen (mit Hausnummer) so aufbereiten,
26        // dass ggf. mehrere Lagebezeichnungen in eine Zelle der Tabelle passen.
27        // FS >westAuf> Lage >> Katalog
28        $sql ="SELECT DISTINCT s.bezeichnung, l.hausnummer
29        FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf)
30        JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
31        WHERE f.gml_id= $1 ORDER BY s.bezeichnung, l.hausnummer;";
32
33        $v=array($gmlid);
34        $res=pg_prepare("", $sql);
35        $res=pg_execute("", $v);
36        if (!$res) {return "** Fehler bei Lagebezeichnung **";}
37        $j=0;
38        $lagehsnr="";
39        $salt="";
40        while($row = pg_fetch_array($res)) {
41                if ($j > 0) {$lagehsnr.=", ";}
42                $sneu=$row["bezeichnung"];
43                if ($sneu == $salt) { // gleiche Str.
44                        $lagehsnr.=$row["hausnummer"]; // HsNr dran haengen
45                } else { // Name UND HsNr dranhaengen
46                        $lagehsnr.=$sneu." ".$row["hausnummer"];
47                }
48                $salt=$sneu; // Name f. naechste Runde
49                $j++;
50        }
51        pg_free_result($res);
52        return($lagehsnr);
53}
54
55// HIER START //
56
57$gkz=''; $tabtyp = ''; $gemarkung=''; $gmlid=''; // erwartete Parameter initialisieren
58$cntget = extract($_GET); // aktuelle Parameter aus URL auslesen
59require_once("alkis_conf_location.php"); // Konfiguration laden
60include("alkisfkt.php"); // Funktionen der ALKIS-Auskunft laden
61
62if ($tabtyp == '') { // Parameter (-kombinationen) pruefen
63        if ($gemarkung == '') { // Beim Wert "gmlid" MUSS man die Tabelle dazu nennen
64                exit ("Fehler: Art des Suchfilters nicht angeben.");
65        } else {  // Art des Wertes bestimmt eindeutig den Filter
66                $tabtyp = 'gemarkung';
67        }
68} elseif ($tabtyp == 'gemarkung') {
69        if ($gemarkung == '') {
70                exit ("Fehler: Gemarkungsnummer nicht angeben.");
71        }
72}
73if ($gmlid == '') {
74        if ($gemarkung == '') {
75                exit ("Fehler: Kein Wert fuer die Suche angegeben.");
76        } else { // Wert fÃŒr Gemarkungsnummer angegeben
77                if ($tabtyp != 'gemarkung') {
78                        exit ("Fehler: Falsche Kombination Parameter tabtyp='".$tabtyp."' mit Wert fuer Gemarkungsnummer.");
79                }
80                $filename='alkis_'.$tabtyp.'_'.$gemarkung.'.csv';
81        }
82} else { // alles gut
83        $filename='alkis_'.$tabtyp.'_'.$gmlid.'.csv';
84}
85
86// DOWNLOAD der CSV-Datei vorbereiten (statt HTML-Ausgabe)
87header('Content-type: application/octet-stream');
88header('Content-Disposition: attachment; filename="'.$filename.'"');
89
90// CSV-Ausgabe: Kopfzeile mit Feldnamen
91echo "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)";
92
93// Datenbank-Verbindung
94$con = pg_connect("host=".$dbhost." port=" .$dbport." dbname=".$dbname." user=".$dbuser." password=".$dbpass);
95if (!$con) {exit("Fehler beim Verbinden der DB");}
96pg_set_client_encoding($con, 'LATIN1'); // FÃŒr Excel kein UTF8 ausgeben
97
98$viewname="exp_csv"; // Standard-View, ist in der Datenbank gespeichert
99$v=array($gmlid); // Standard-Filter-Feld
100
101// Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View "exp_csv".
102switch ($tabtyp) { // zulaessige Werte fuer &tabtyp=
103        case 'flurstueck': // ax_flurstueck.gml_id
104                $filter = "fsgml";
105                break;
106        case 'grundbuch': // ax_buchungsblatt.gml_id
107                $filter = "gbgml";
108                break;
109        case 'person': // ax_person.gml_id
110                $filter = "psgml";
111                break;
112        case 'strasse': // ax_lagebezeichnungkatalogeintrag.gml_id = Straße-GML-ID
113                $filter = "stgml";
114                $viewname="exp_csv_str"; // alternativer View mit "_str", ist in der Datenbank gespeichert 
115                break;
116        case 'gemarkung': // SONDERfall als Parameter wird "Gemarkungsnummer" und nicht "gml_id" geliefert
117                $filter = "gemarkungsnummer";
118                $v=array($gemarkung); // anderes Filter-Feld, anderer Parameter
119                break;
120        default:
121                exit("Falscher Parameter '".$tabtyp."'");
122                break;
123}
124
125// Daten aus gespeichertem View, zusaetzlich Filter: "feld"='wert' mitgeben
126$sql="SELECT * FROM ".$viewname." WHERE ".$filter." = $1 ";
127
128$res=pg_prepare("", $sql);
129$res=pg_execute("", $v);
130if (!$res) {exit("Fehler bei Datenbankabfrage");}
131$i=1; // Kopfzeile zÀhlt mit
132$fsalt='';
133
134// Datenfelder auslesen
135while($row = pg_fetch_array($res)) {
136        $i++; // Zeile der Tabelle
137        $rechnen=true; // Formel in letzte Spalte?
138
139        // Flurstueck
140        $fsgml=$row["fsgml"];
141        $fs_kennz=$row["fs_kennz"]; // Rechts Trim "_" ?
142        $gmkgnr=$row["gemarkungsnummer"];
143        $gemkname=$row["gemarkung"];
144        $flurnummer=$row["flurnummer"];
145        $flstnummer=$row["zaehler"];
146        $nenner=$row["nenner"];
147        // Bruchnummer kann in Excel als Datum interpretiert werden. In '' setzen.
148        if ($nenner > 0) {$flstnummer="'".$flstnummer."/".$nenner."'";} // BruchNr
149        $fs_flae=$row["fs_flae"]; // amtliche Fl. aus DB-Feld
150
151        // Grundbuch (Blatt)
152        $gb_bezirk=$row["gb_bezirk"]; // Nummer des Bezirks
153    $gb_beznam=$row["beznam"];    // Name des Bezirks
154        $gb_blatt=$row["gb_blatt"];
155
156        // Buchungsstelle (Grundstueck)
157        $bu_lfd=$row["bu_lfd"]; // BVNR
158        $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL
159        $bu_key=$row["buchungsart"]; // SchlÃŒssel
160        $bu_art=$row["bu_art"]; // entschlÃŒsselt (Umlaute in ANSI!)
161        if($bu_ant == '') { // Keine Bruch-Zahl
162                $bu_ant = '1'; // "voller Anteil" (Faktor 1)
163        } else {
164                $bu_ant=str_replace(".", ",", $bu_ant); // Dezimalkomma statt -punkt.           
165        }
166
167        // Namensnummer
168        $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma, wird sonst wie Datum dargestellt.
169        $nam_ant=$row["nam_ant"];
170        $nam_adr=$row["nam_adr"]; // Art der Rechtsgemeischaft (SchlÃŒssel)
171
172        if ($nam_adr == '') {     // keine Rechtsgemeinschaft
173                $rechtsg='';
174                if ($nam_ant == '') { // und kein Bruch-Anteil
175                        $nam_ant=1; // dann ganzer Anteil
176                }
177        } else {
178                $rechnen=false; // bei Rechtsgemeinschaft die Anteile manuell interpretieren
179                if ($nam_adr == 9999) { // sonstiges
180                        $rechtsg=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft
181                } else {
182                //      $rechtsg=rechtsgemeinschaft($nam_adr); // EntschlÃŒsseln
183                        $rechtsg=$row["nam_adrv"]; // Art der Rechtsgemeischaft (Value zum Key)
184                }
185        }
186
187        // Person
188        $vnam=$row["vorname"];
189        $nana=$row["nachnameoderfirma"];
190        $namteil=$row["namensbestandteil"];
191        //$name=anrede($row["anrede"]); 
192        $name=$row["anrv"]; // Anrede (Value zum Key)
193        if ($name != "") {$name.=" ";} // Trenner
194        if ($namteil != "") {$name.=$namteil." ";} // von und zu
195        $name.=$nana;
196        if ($vnam != "") {$name.=", ".$vnam;} // Vorname nach hinten
197        $gebdat=$row["geburtsdatum"];
198
199        // Adresse der Person (Eigentuemer))
200        $ort=$row["ort"];
201        if ($ort == "") {
202                $adresse="";
203        } else {
204                $adresse=$row["strasse"]." ".$row["hausnummer"].", ".$row["plz"]." ".$ort;
205                $land=$row["land"]; // nur andere LÀnder anzeigen
206                if (($land != "DEUTSCHLAND") and ($land != "")) {
207                        $adresse.=" (".$land.")";
208                }
209        }
210
211        // Adressen (Lage) zum FS
212        if($fsgml != $fsalt) { // nur bei geÀndertem Kennz.
213                $lage=lage_zum_fs($fsgml); // die Lage neu ermitteln
214                $fsalt=$fsgml;
215        }
216
217        // Den Ausgabe-Satz montieren aus FlurstÃŒcks-, Grundbuch- und Namens-Teil
218        //      A             B           C             D               E               F            G
219        $fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";";
220        //      H              I              J             K           L           M
221        $gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";";
222        //       N            O            P            Q         R           S
223        $namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse;
224
225        // Anteile "GB am FS" und "Pers am GB" verrechnen
226        if ($rechnen) { // beide Anteile verwertbar
227                $formelteil=";=L".$i."*O".$i; // Spalte T
228        } else {
229                $formelteil=';';
230        }
231
232        // Ausgabe in die CSV-Datei -> Download -> Tabellenkalkulation
233        echo "\n".$fsteil.$gbteil.$namteil.$formelteil;
234}
235pg_free_result($res);
236if ($i == 1) {exit ("Kein Treffer fuer gml_id=".$gmlid);} // nur Kopfzeile
237pg_close($con);
238exit(0);
239?>
Note: See TracBrowser for help on using the repository browser.