source: trunk/data/mapbender/http/nav/alkisnav_fls.php @ 128

Revision 128, 28.4 KB checked in by frank.jaeger, 10 years ago (diff)

Erweiterung der ALKIS-Buchauskunft im Bereich Flurstücks-Historie.
Symbole für die Doku: .ico nach .png konvertiert

Line 
1<?php
2/* Version vom
3        13.01.2011
4        25.03.2011 Filter als Gemeinde-Liste
5        12.04.2011 epsg in Link, transform nur wenn notwendig
6        12.05.2011 Syntaxfehler in SQL
7        25.07.2011 PostNAS 0.5/0.6 Versionen unterscheiden
8        24.10.2011 Nach Pos-Klick Highlight erneuern statt hideHighlight
9        07.11.2011 optional auch Historische FS suchen, Link auf Buchauskunft-Modul alkisfshis.php
10        09.11.2011 "h" hinter Flur oder FlurstÃŒck sucht sofort in Historie
11                                        Ausgabe Flur in Varianten aktuell/historisch mit gegenseitigen Verweisen
12        11.11.2011 Nachfolger-Liste in der DB nachschlagen, und aktuelle FS als solche kennzeichnen
13                                neue Icons fÃŒr Link mit Pfeil
14                                Differenzierung mit/ohne Raumbezug bei Icons fuer Histor. FS
15                                Gemarkung- und Flur-Zeile vor einzelnem FlurstÃŒck ausgeben
16*/
17import_request_variables("PG");
18include("../../conf/alkisnav_conf.php"); $con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
19$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz);
20?>
21
22<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
23<html>
24<head>
25        <meta http-equiv="cache-control" content="no-cache">
26        <meta http-equiv="pragma" content="no-cache">
27        <meta http-equiv="expires" content="0">
28        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
29        <title>ALKIS-Suche Flurst&uuml;ck</title>
30        <link rel="stylesheet" type="text/css" href="alkisnav.css">
31</head>
32<body>
33
34<?php
35
36function is_ne_zahl($wert) {
37        // Prueft, ob ein Wert ausschließlich aus den Zahlen 0 bis 9 besteht
38        if (trim($wert, "0..9") == "") {return true;} else {return false;}
39}
40
41function h_hinten($zahl) {
42        // Testen: Wurde an eine Zahl ein "h" angehÀngt?
43        // Wenn ja, dann Schalter setzen und nur numerischen Teil zurÃŒck geben.
44        global $phist, $debug;
45        $zahl=trim($zahl);
46        $zlen=strlen($zahl) - 1;
47        if ($zlen > 0) {
48                $hinten = ucfirst(substr($zahl, $zlen, 1));
49                if ($hinten == "H" ) {
50                        $vorn=trim(substr($zahl, 0, $zlen));
51                        if (is_ne_zahl($vorn)) { // Zahl *und* "H"
52                                $zahl = $vorn;
53                                $phist = true;
54                        }
55                }
56        }
57        return $zahl;
58}
59
60function ZerlegungFsKennz($fskennz) {
61// Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird gggg-fff-zzzz/nnn
62        global $debug, $zgemkg, $zflur, $zzaehler, $znenner;    //      if ($debug > 1) {echo "<p class='dbg'>Zerlegen: '".$fskennz."'</p>";}
63        $arr = explode("-", $fskennz, 4);
64        $zgemkg=trim($arr[0]);
65        $zflur=h_hinten($arr[1]);
66        $zfsnr=trim($arr[2]);
67        if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$zgemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";}
68       
69        if ($zgemkg == "") {
70                return 0; // Gemeinden oder Gemarkungen listen
71        } elseif ( ! is_ne_zahl($zgemkg)) {
72                return 1; // Such Name
73        } elseif ($zflur == "") {
74                return 2; // G-Nr
75        } elseif ( ! is_ne_zahl($zflur)) {
76                echo "<p class='err'>Die Flurnummer '".$zflur."' ist nicht numerisch</p>";
77                return 9;
78        } elseif ($zfsnr == "") {
79                return 3; // Flur                               
80        } else {
81                $zn=explode("/", $zfsnr, 2);
82                $zzaehler=h_hinten(trim($zn[0]));
83                $znenner =h_hinten(trim($zn[1]));
84                if ( ! is_ne_zahl($zzaehler)) {
85                        echo "<p class='err'>FlurstÃŒcksnummer '".$zzaehler."' ist nicht numerisch</p>";
86                        return 9;
87                } elseif ($znenner == "") {
88                        return 4;
89                } elseif (is_ne_zahl($znenner)) {
90                        return 5;                                                               
91                } else {
92                        echo "<p class='err'>FlurstÃŒcks-Nenner '".$znenner."' ist nicht numerisch</p>";
93                        return 9;
94                }
95        }
96}
97
98function gemkg_zeile($zgemkg) {
99// Eine Zeile zu Gemarkung ausgeben, SchlÃŒssel wird ÃŒbergeben, Name in DB nachschlagen
100        global $con, $gkz, $gemeinde, $epsg;
101        $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
102        $v=array($zgemkg);
103        $res=pg_prepare("", $sql);
104        $res=pg_execute("", $v);
105        if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
106        $zgmk=0;
107        while($row = pg_fetch_array($res)) { // eigentlich nur EINE
108                $gmkg=$row["bezeichnung"];
109                $zgmk++;
110                echo "\n<div class='gk' title='Gemarkung'>";
111                        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
112                        echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."'> ".$gmkg." (".$zgemkg.")</a>";
113                echo "\n</div>";
114        }
115        if ($zgmk == 0) {
116                echo "\n<div class='gk' title='Gemarkung'>";
117                        echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
118                                echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
119                echo "\n</div>";
120                return;
121        }
122        return 0;
123}
124
125function flur_zeile($zgemkg, $zflur) {
126//      Eine Zeile zur Flur ausgeben
127        global $con, $gkz, $gemeinde, $epsg;
128        echo "\n<div class='fl' title='Flur'>";
129                echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
130                $url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
131                echo "Flur <a href='".$url."'>".$zflur."</a>";
132                //echo "<span class='hislnk'>";
133                echo " <a class='hislnk' title='Historische Flurst&uuml;cke' href='".$url."&amp;hist=j'>Hist.</a>";             
134        echo "\n</div>";
135        return 0;
136}
137
138function ListGemeinden() {
139// bei Leereingabe die Gemeinden anlisten
140        global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
141        $linelimit=50;
142        $sql ="SELECT DISTINCT g.gemeinde AS key, g.bezeichnung FROM ax_gemeinde g ";
143        $sql.="JOIN gemeinde_gemarkung v ON g.regierungsbezirk=v.regierungsbezirk AND g.kreis=v.kreis AND g.gemeinde=v.gemeinde ";
144        // "ax_gemeinde" enthÀlt mehrfache Gemeinde-Schluessel (Filtern regierungsbezirk, kreis)       
145        // "gemeinde_gemarkung" enthaelt nur gefÃŒllte Gemarkungen aber Gemeinde mehrfach
146        switch ($gfilter) {
147                case 1: // Einzelwert
148                        $sql.="WHERE g.gemeinde=".$gemeinde." ";
149                        break;
150                case 2: // Liste
151                        $sql.="WHERE g.gemeinde in (".$gemeinde.") ";
152                        break;
153                default: // kein Filter
154                        break;
155        }
156        $sql.=" ORDER BY g.bezeichnung LIMIT $1 ;";
157        $res=pg_prepare("", $sql);
158        $res=pg_execute("", array($linelimit));
159        if (!$res) {
160                echo "\n<p class='err'>Fehler bei Gemeinde</p>";
161                if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
162                return 0;
163        }
164        $cnt = 0;
165        while($row = pg_fetch_array($res)) {
166                $stadt=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
167                $bez=urlencode($row["bezeichnung"]);  // Uebergeben an ListGmkgInGemeinde
168                $gnr=$row["key"];                 echo "\n<div class='gm' title='Gemeinde'>";
169                        echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
170                        echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gnr."&amp;bez=".$bez."'>";               
171                        echo  " ".$stadt."</a> (".$gnr.")";
172                echo "\n</div>";
173                $cnt++;
174        }
175        if($cnt == 0){
176                echo "\n<p class='err'>Keine Gemeinde.</p>";
177        } elseif($cnt >= $linelimit) {
178                echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
179        } elseif($cnt == 1) { // Eindeutig!
180                return $gnr;
181        }
182        return 0;
183}
184
185function ListGmkgInGemeinde($gkey) {
186// Die (gefuellten) Gemarkungen zu einem Gemeinde-Key (aus Link) listen
187        global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter, $bez;
188        $linelimit=70;
189        $sql ="SELECT g.gemarkungsnummer, g.bezeichnung ";
190        $sql.="FROM ax_gemarkung g JOIN gemeinde_gemarkung v ON g.gemarkungsnummer=v.gemarkung ";
191   $sql.="WHERE v.gemeinde= $1 ORDER BY g.bezeichnung LIMIT $2 ;";
192        $res=pg_prepare("", $sql);
193        $res=pg_execute("", array($gkey, $linelimit));
194        if (!$res) {
195                echo "\n<p class='err'>Fehler bei Gemarkungen</p>";
196                if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
197                return 0;
198        }
199        // Hierarchie Dokumentieren, Gemeinde-Name?
200        echo "\n<div class='gm' title='Gemeinde'>";
201                echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";   
202                echo  " Gem. ".$bez." (".$gkey.")"; // .urldecode($bez). ??
203        echo "\n</div>";
204        $cnt = 0;
205        while($row = pg_fetch_array($res)) {
206                $gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
207                $gnr=$row["gemarkungsnummer"];                 echo "\n<div class='gk' title='Gemarkung'>";
208                        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
209                        echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";             
210                        echo  " ".$gnam."</a> (".$gnr.")";
211                echo "\n</div>";
212                $cnt++;
213        }
214        if($cnt == 0){
215                echo "\n<p class='err'>Keine Gemarkung.</p>";
216        } elseif($cnt >= $linelimit) {
217                echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
218        } elseif($cnt == 1) { // Eindeutig!
219                return $gnr;
220        }
221        return 0;
222}
223
224function SuchGmkgName() {
225// Gemarkung suchen nach Name(-nsanfang)
226        global $con, $gkz, $gemeinde, $epsg, $debug, $fskennz, $gfilter;
227        $linelimit=120;
228        if(preg_match("/\*/",$fskennz)){
229                $match = trim(preg_replace("/\*/i","%", strtoupper($fskennz)));
230        } else {
231                $match = trim($fskennz)."%";
232        }       
233        $sql ="SELECT v.gemeindename, g.gemarkungsnummer, g.bezeichnung ";
234        $sql.="FROM ax_gemarkung g JOIN gemeinde_gemarkung v ON g.gemarkungsnummer=v.gemarkung ";
235   $sql.="WHERE bezeichnung ILIKE $1 ";
236        switch ($gfilter) {
237                case 1: // Einzelwert
238                        $sql.="AND v.gemeinde=".$gemeinde." ";
239                        break;
240                case 2: // Liste
241                        $sql.="AND v.gemeinde in (".$gemeinde.") ";
242                        break;
243                default: // kein Filter
244                        break;
245        }
246        $sql.=" ORDER BY g.bezeichnung LIMIT $2 ;";
247        $v=array($match, $linelimit);
248        $res=pg_prepare("", $sql);
249        $res=pg_execute("", $v);
250        if (!$res) {
251                echo "\n<p class='err'>Fehler bei Gemarkung</p>";
252                if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
253                return 0;
254        }
255        $cnt = 0;
256        while($row = pg_fetch_array($res)) {
257                $gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
258                $gnr=$row["gemarkungsnummer"];
259                $stadt=$row["gemeindename"];                 echo "\n<div class='gk' title='Gemarkung'>";
260                        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
261                        echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";             
262                        echo  " ".$gnam."</a> (".$gnr.")";
263                        switch ($gfilter) {
264                                case 0: // Kein Filter
265                                        echo " ".$stadt;
266                                        break;
267                                case 2: // Liste
268                                        echo " ".$stadt;
269                                        break;
270                                default: // Einzelwert
271                                        break;
272                        }
273                echo "\n</div>";
274                $cnt++;
275        }
276        if($cnt == 0){
277                echo "\n<p class='err'>Keine Gemarkung.</p>";
278        } elseif($cnt >= $linelimit) {
279                echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
280        } elseif($cnt == 1) { // Eindeutig!
281                return $gnr;
282        }
283        return 0;
284}
285
286function EineGemarkung($AuchGemkZeile) {
287// Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
288        global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg;
289        $linelimit=120; // max. Fluren je Gemarkung
290        if ($AuchGemkZeile) {
291                $sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;"; // WHERE f.land= ?
292                $v=array($zgemkg);
293                $res=pg_prepare("", $sql);
294                $res=pg_execute("", $v);
295                if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
296                $zgmk=0;
297                while($row = pg_fetch_array($res)) {   
298                        $gmkg=$row["bezeichnung"];
299                        $zgmk++;
300                }
301                if ($zgmk == 0) {
302                        echo "\n<div class='gk' title='Gemarkung'>";
303                                echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
304                                        echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
305                        echo "\n</div>";
306                        return;
307                }
308                // > 1 auch möglich?
309                echo "\n<div class='gk' title='Gemarkung'>";
310                        echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'> ";
311                        echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."'>";           
312                        echo $gmkg."</a>  (".$zgemkg.")"; // in Gemeinde?
313                echo "\n</div>";
314        }
315        $sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f ";
316        $sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;";     // WHERE f.land= ?
317        $v=array($zgemkg, $linelimit);
318        $res=pg_prepare("", $sql);
319        $res=pg_execute("", $v);
320        if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
321        $zfl=0;
322        while($row = pg_fetch_array($res)) {   
323                $flur=$row["flur"];
324                echo "\n<div class='fl' title='Flur'>";
325                        echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'>&nbsp;";
326                        echo "Flur<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$flur."'>&nbsp;".$flur."&nbsp;</a>";
327                echo "\n</div>";
328                $zfl++;
329        }
330        if($zfl == 0) {
331                echo "\n<p class='err'>Keine Flur.</p>";
332        } elseif($cnt >= $linelimit) {
333                echo "\n<p>... und weitere</p>";
334        }
335        return;
336}
337
338function EineFlur() {
339// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen
340        global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $zgemkg, $zflur;
341        $linelimit=600; // Wie groß kann eine Flur sein?
342        gemkg_zeile($zgemkg);
343        flur_zeile($zgemkg, $zflur);
344
345        $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
346        if($epsg == "25832") { // Transform nicht notwendig
347                $sql.="x(st_Centroid(f.wkb_geometry)) AS x, ";
348                $sql.="y(st_Centroid(f.wkb_geometry)) AS y ";
349        } else { 
350                $sql.="x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
351                $sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";                 
352        }
353   $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 ";
354        $sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land= ?
355        $v=array($zgemkg, $zflur, $linelimit);
356        $res=pg_prepare("", $sql);
357        $res=pg_execute("", $v);
358        if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
359        $zfs=0;
360        while($row = pg_fetch_array($res)) {   
361                $fs_gml=$row["gml_id"];
362                $flur=$row["flurnummer"];
363                $fskenn=$row["zaehler"];
364                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
365                $x=$row["x"];
366                $y=$row["y"];
367                echo "\n<div class='fs'>";
368                        echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
369                                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
370                        echo "\n\t</a> ";                       
371                        echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
372                                        echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
373                                        echo "parent.parent.showHighlight(".$x.",".$y.");' ";
374                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
375                                echo "onmouseout='parent.parent.hideHighlight()'>&nbsp;".$fskenn."&nbsp;</a>";
376                echo "\n</div>";
377                $zfs++;
378        }
379        if($zfs == 0) {
380                echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";
381        } elseif($zfs >= $linelimit) {
382                echo "\n<p>... und weitere</p>";
383        }
384        return;
385}
386
387function HistFlur() {
388// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben
389// Die Flur nach historischen FlurstÃŒcken durchsuchen
390        global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg, $zflur;
391        $linelimit=500;
392
393        gemkg_zeile($zgemkg);
394        echo "\n<div class='fl' title='Flur'>";
395                echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur-Historie'> ";
396                $url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
397                echo "Historie: Flur<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'> ".$zflur." </a>";
398        echo "\n</div>";
399
400        $whcl.="WHERE flurstueckskennzeichen like $1 ";
401        $sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
402        $sql.="UNION SELECT 'o' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
403        $sql.="ORDER BY zaehler, nenner LIMIT $2 ;";
404        $fskzwhere =$land.$zgemkg.str_pad($zflur, 3, "0", $STR_PAD_LEFT)."%";
405        $v=array($fskzwhere,   $linelimit);
406        $res=pg_prepare("", $sql);
407        $res=pg_execute("", $v);
408        if (!$res) {echo "\n<p class='err'>Fehler bei Historie Flur.</p>";}
409        $zfs=0;
410
411        // Konst. Teil d.URL (Flur), FS anhÀngen
412        $flurl=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;hist=j&amp;fskennz=".$zgemkg."-".$zflur."-";
413
414        while($row = pg_fetch_array($res)) {   
415                $ftyp=$row["ftyp"];
416                $fs_gml=$row["gml_id"]; // fuer Buchausk.
417                $fskenn=$row["zaehler"];
418                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
419                if ($ftyp == "h") {
420                        $ico="Flurstueck_Historisch_Lnk.ico";
421                        $titl="Historisches Flurst&uuml;ck";           
422                } else {
423                        $ico="Flurstueck_Historisch_oR_Lnk.ico";
424                        $titl="Historisches Flurst&uuml;ck ohne Raumbezug";
425                }  // h: Karte Pos.?
426                echo "\n<div class='hi' title='".$titl."'>"; // Zeile
427                        // Icon -> Bauchauskunft
428                        echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
429                                echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
430                        echo "\n\t</a> ";               
431                        // Kennzeichen -> weiter in die Historie hinein
432                        echo "\n\tFlst. <a href='".$flurl.$fskenn."'>".$fskenn."</a>";                                 
433                echo "\n</div>";
434                $zfs++;
435        }
436        if($zfs == 0) {
437                echo "\n<p class='err'>Kein historisches Flurst&uuml;ck.</p>";
438                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = ".$fskzwhere."</p>";}
439        } elseif($zfs >= $linelimit) {
440                echo "\n<p>... und weitere</p>";
441        }
442        return;
443}
444
445function EinFlurstueck() {
446// FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler eingegeben
447// Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler
448        global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner;
449
450        gemkg_zeile($zgemkg);
451        flur_zeile($zgemkg, $zflur);
452
453        $sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
454        if($epsg == "25832") { // Transform nicht notwendig
455                $sql.="x(st_Centroid(f.wkb_geometry)) AS x, ";
456                $sql.="y(st_Centroid(f.wkb_geometry)) AS y, ";
457        }
458        else { 
459                $sql.="x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
460                $sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";                 
461        }
462   $sql.="FROM ax_flurstueck f ";
463        $sql.="WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
464        If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
465        $sql.="ORDER BY f.zaehler, f.nenner;";
466        $v=array($zgemkg, $zflur, $zzaehler);
467        $res=pg_prepare("", $sql);
468        $res=pg_execute("", $v);
469        if (!$res) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";}
470        $zfs=0;
471        while($row = pg_fetch_array($res)) {   
472                $fs_gml=$row["gml_id"];
473                $flur=$row["flurnummer"];
474                $fskenn=$row["zaehler"];
475                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
476                $x=$row["x"];
477                $y=$row["y"];
478                echo "\n<div class='fs'>";
479                        echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
480                                echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
481                        echo "\n\t</a> ";               
482                        echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
483                                        echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
484                                        echo "parent.parent.showHighlight(".$x.",".$y.");' ";
485                                echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
486                                echo "onmouseout='parent.parent.hideHighlight()'>";
487                        echo $fskenn."</a>";
488                echo "\n</div>";
489                $zfs++;
490        }
491        if($zfs == 0) {
492                echo "\n<p class='err'>Kein aktuelles Flurst&uuml;ck.</p>";
493                // Soll in der Historie weiter gesucht werden?
494                echo "\n<div class='hi' title='Historie'>";
495                        echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Historisch.ico' width='16' height='16' alt='Historisches Flurst&uuml;ck'>&nbsp;";
496                        echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>in Historie suchen</a>";
497                echo "\n</div>";               
498        }
499        return;
500}
501
502function HistFlurstueck() {
503        // Ein Nachfolger-FS-Kennzeichen soll recherchiert werden.
504        // Es ist unbekannt, ob dies aktuell ist oder auch schon historisch.
505        global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $land, $zgemkg, $zflur, $zzaehler, $znenner;
506
507        gemkg_zeile($zgemkg);
508        flur_zeile($zgemkg, $zflur);
509
510        // Suche ueber das Flurstueckskennzeichen, gml ist meist unbekannt
511        $whcl.="WHERE flurstueckskennzeichen= $1 ";
512        $sql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, null as nachf FROM ax_flurstueck ".$whcl;
513        $sql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
514        $sql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
515
516        $fskzwhere =$land.$zgemkg; // Flurst-Kennz. f. Where
517        $fskzwhere.=str_pad($zflur, 3, "0", $STR_PAD_LEFT);
518        $fskzwhere.=str_pad($zzaehler, 5, "0", $STR_PAD_LEFT);
519        if ($znenner == "") {$fskzwhere.="______";}
520        else {$fskzwhere.=str_pad($znenner, 4, "0", $STR_PAD_LEFT)."__";}
521
522        $v=array($fskzwhere);
523        $res=pg_prepare("", $sql);
524        $res=pg_execute("", $v);
525        if (!$res) {echo "\n<p class='err'>Fehler bei hist. Flurst&uuml;ck.</p>";}
526        $zfs=0;
527        while($row = pg_fetch_array($res)) {
528                $ftyp=$row["ftyp"];
529                $fs_gml=$row["gml_id"];
530                $gknr=$row["gemarkungsnummer"];
531                $flur=$row["flurnummer"];
532                $fskenn=$row["zaehler"];
533                $nachf=$row["nachf"];
534                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
535
536                if ($ftyp == "a") { // aktuelles FS gefunden, Koordinate holen
537
538                        // BEGINN +++ als function ?
539                        $sqlk ="SELECT ";
540                        if($epsg == "25832") { // Transform nicht notwendig
541                                $sqlk.="x(st_Centroid(wkb_geometry)) AS x, ";
542                                $sqlk.="y(st_Centroid(wkb_geometry)) AS y ";
543                        } else { 
544                                $sqlk.="x(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS x, ";
545                                $sqlk.="y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y ";                   
546                        }
547                   $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 ";
548                        $v=array($fs_gml);
549                        $resk=pg_prepare("", $sqlk);
550                        $resk=pg_execute("", $v);
551                        if (!$resk) {echo "\n<p class='err'>Fehler bei Koordinate.</p>";}
552                        $zfsk=0;
553                        while($rowk = pg_fetch_array($resk)) { 
554                                $x=$rowk["x"];
555                                $y=$rowk["y"];
556                                $zfsk++;
557                        }
558                        if ($zfsk == 0) {echo "\n<p class='err'>Kein Treffer bei Koordinate.</p>";}
559                        // ENDE +++ als function ?
560
561                        echo "\n<p>aktueller Nachfolger:</p>"; 
562                        echo "\n<div class='fs' title='Aktuelles Nachfolger-Flurst&uuml;ck'>"; // Zeile
563
564                                // Icon -> Nachweis FS-Hist. in Buchauskunft
565                                echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
566                                        echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
567                                echo "\n\t</a> ";       
568
569                                // Kennzeichen -> Karte positionieren
570                                echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
571                                                echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
572                                                echo "parent.parent.showHighlight(".$x.",".$y.");' ";
573                                        echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
574                                        echo "onmouseout='parent.parent.hideHighlight()'>";
575                        //      echo $flur."-".$fskenn."</a>";
576                                echo $fskenn."</a>";
577
578                        echo "\n</div>";
579
580                } else { // Historisches FS gefunden (h oder o)
581                //      echo "\n<p>Historisches Flurst&uuml;ck:</p>";
582
583                        if ($ftyp == "h") {
584                                $ico="Flurstueck_Historisch_Lnk.ico";
585                                $titl="Historisches Flurst&uuml;ck";
586                        } else {
587                                $ico="Flurstueck_Historisch_oR_Lnk.ico";
588                                $titl="Historisches Flurst&uuml;ck ohne Raumbezug";
589                        }  // h: Karte Pos.?
590                        echo "\n<div class='hi' title='".$titl."'>";
591                                echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."'>";
592                                        echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
593                                echo "\n\t</a> Historisches Flst. ".$fskenn."</a>";
594                        echo "\n</div>";
595
596                        if ($nachf == "") {
597                                echo "\n<p class='err'>keine Nachfolger</p>";   
598                        } else {
599                                echo "\n<p>Nachfolger-Flurst&uuml;cke:</p>";
600                                // Die direkten Nachfolger ermitteln
601                                // Nachfolger in DB suchen um den Status aktuell/historisch zu ermitteln
602                                $stri=trim($nachf, "{}");
603                                $stri="'".str_replace(",", "','", $stri)."'";
604                        //      $whcln.="WHERE flurstueckskennzeichen IN ( $1 ) ";
605                                $whcln.="WHERE flurstueckskennzeichen IN ( ".$stri." ) ";
606                                $sqln ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$whcln;
607                                $sqln.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$whcln;
608                                $sqln.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$whcln;
609                //              $v=array($stri);
610                                $v=array();
611                                $resn=pg_prepare("", $sqln);
612                                $resn=pg_execute("", $v);
613                                if (!$resn) {echo "\n<p class='err'>Fehler bei Nachfolger.</p>";}
614                                $zfsn=0;
615                                while($rown = pg_fetch_array($resn)) {
616                                        $ftypn=$rown["ftyp"];
617                                        $na_gml=$rown["gml_id"];
618                                        $gknrn=$rown["gemarkungsnummer"];
619                                        $flurn=$rown["flurnummer"];
620                                        $fskennn=$rown["zaehler"];
621                                        if ($rown["nenner"] != "") {$fskennn.="/".$rown["nenner"];}
622
623                                        switch ($ftypn) {
624                                        case "a":
625                                                $ico="Flurstueck_Link.ico";
626                                                $titl="Aktuelles Flurst&uuml;ck";
627                                                $hisparm="";
628                                                $auskprog="alkisfsnw";
629                                                // ++ Koordinaten holen? siehe oben "als function"
630                                        break;
631                                        case "h":
632                                                $ico="Flurstueck_Historisch_Lnk.ico";
633                                                $titl="Historisches Flurst&uuml;ck";
634                                                $hisparm="&amp;hist=j";
635                                                $auskprog="alkisfshist";
636                                        break;
637                                        case "o":
638                                                $ico="Flurstueck_Historisch_oR_Lnk.ico";
639                                                $titl="Historisches Flurst&uuml;ck ohne Raumbezug";
640                                                $hisparm="&amp;hist=j";
641                                                $auskprog="alkisfshist";
642                                        break;
643                                        }
644                                        $fs=$gknrn."-".$flurn."-".$fskennn;
645                                        echo "\n<div class='hn' title='Nachfolger: ".$titl."'>";                       
646                                                echo "\n\t<a title='Nachweis' target='_blank' href='".$auskpath.$auskprog.".php?gkz=".$gkz."&amp;gmlid=".$na_gml."'>";
647                                                        echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='FS'>";
648                                                echo "\n\t</a> ";               
649                                                echo "Flst. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fs.$hisparm."'>".$fskennn."</a>";                                   
650                                        echo "\n</div>";
651
652                                        $zfsn++;
653                                        // Kontrollieren: Wurden auch so viele FS in DB gefunden, wie im Array "Where in()" standen?
654                                }
655                                if ($zfsn == 0) {
656                                        echo "<p class='err'>keine Nachfolger gefunden</p>";
657                                        if ($debug > 1) {echo "<p class='dbg'>SQL=<br>".$sqln."<br>Liste=<br> ".$stri."</p>";}
658                                }               
659                        }
660                }
661                $zfs++;
662        }
663        if($zfs == 0) {
664                echo "\n<p class='err'>Kein historisches Flurst&uuml;ck.</p>";
665                if ($debug > 2) {echo "<p class='dbg'>".$sql."</p>";}
666        }
667        return;
668}
669
670// ===========
671// Start hier!
672// ===========
673if(isset($epsg)) {
674        //if ($debug >= 2) {echo "<p class='dbg'>aktueller EPSG='".$epsg."'</p>";} // aus MB
675        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);   
676} else {
677        if ($debug >= 1) {echo "<p class='dbg'>kein EPSG gesetzt</p>";}
678        $epsg=$gui_epsg; // aus Conf
679}
680//if ($debug >= 2) {echo "<p class='dbg'>Filter Gemeinde = ".$gemeinde."</p>";}
681if ($gemeinde == "") {
682        $gfilter = 0; // ungefiltert
683} elseif(strpos($gemeinde, ",") === false) {
684        $gfilter = 1; // Einzelwert
685} else {
686        $gfilter = 2; // Liste
687}
688if ($hist == "j") {$phist = true;} else {$phist = false;}
689
690if(isset($gm)) { // Self-Link aus Gemeinde-Liste
691        $gnr=ListGmkgInGemeinde($gm); // Gemarkungen zu dieser Gemeinde listen
692        if ($gnr > 0) {
693                $zgemkg=$gnr;
694                EineGemarkung(false);
695        }
696} else {
697        // Die Formular-Eingabe interpretieren (kann auch ein Link sein)
698        $retzer=ZerlegungFsKennz($fskennz);
699//      if ($debug > 1) {echo "<p class='dbg'>Return Zerlegung (case) = '".$retzer."'</p>";}   
700        switch ($retzer) {
701        case 0: // leere Eingabe
702                if ($gfilter == 1) { // Die GUI ist bereits auf eine Gemeinde gefiltert
703                        SuchGmkgName(); // Gemarkungen listen
704                } else {
705                        ListGemeinden(); // alle Gemeinden Listen
706                }
707        break;
708        case 1:
709                if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsname ".$zgemkg."</p>";}
710                $gnr=SuchGmkgName();
711                if ($gnr > 0) {
712                        $zgemkg=$gnr;
713                        EineGemarkung(false);
714                }
715        break;
716        case 2:
717                if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsnummer ".$zgemkg."</p>";}     
718                EineGemarkung(true);
719        break;
720        case 3:
721                if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur."</p>";}
722                if ($phist)     {HistFlur();} else {EineFlur();}
723        break;
724        case 4:
725                if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."</p>";}
726                if ($phist)     {HistFlurstueck();} else {EinFlurstueck();}
727        break;
728        case 5:
729                if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."/".$znenner."</p>";}
730                if ($phist) {HistFlurstueck();} else {EinFlurstueck();}         
731        break;
732        case 9:
733                echo "<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
734        break;
735        }
736}
737 ?>
738
739</body>
740</html>
Note: See TracBrowser for help on using the repository browser.