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

Revision 126, 26.5 KB checked in by frank.jaeger, 12 years ago (diff)

ALKIS-Navigation, Suche nach historischen Flurstücken erweitert

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