Index: trunk/info/info/alkisn/alkisbauwerk.php
===================================================================
--- trunk/info/info/alkisn/alkisbauwerk.php	(revision 422)
+++ trunk/info/info/alkisn/alkisbauwerk.php	(revision 425)
@@ -5,16 +5,24 @@
 	1 Bauwerk im Verkehrsbereich
 	2 Bauwerk im GewÃ€sserbereich
-	3 Sonstiges Bauwerk oder sonstige Einrichtung
-	4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe
-	5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung
-	6 Leitung
-	7 Transportanlage
-	8 Turm
-	9 VorratsbehÃ€lter, Speicherbauwerk
+	3 Sonstiges Bauwerk oder sonstige Einrichtung 51009
+	4 Bauwerk oder Anlage fÃŒr Industrie und Gewerbe 51002
+	5 Bauwerk oder Anlage fÃŒr Sport, Freizeit und Erholung 51006
+	6 Leitung 51005
+	7 Transportanlage 51004
+	8 Turm 51001
+	9 VorratsbehÃ€lter, Speicherbauwerk 51003
 
 	Version:
 	2021-03-11 Neues Modul
 	2021-03-17 Korrekturen
-
+	2021-12-09 2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Debugging verbessert.
+
+ToDo:
+	- Icon fÃŒr "Bauwerk" machen! ggf. einzeln fÃŒr jede der 9 Arten?
+	- 4 weitere Objektarten, bisher nicht verwendet:
+	51007 'Historisches Bauwerk oder historische Einrichtung'
+	51008 'Heilquelle, Gasquelle'
+	51010 'Einrichtung in Ã¶ffentlichen Bereichen'
+	51011 'Besonderer Bauwerkspunkt'
 */
 
@@ -22,20 +30,21 @@
 // Ein Bauwerk "gehÃ¶rt zu" (Relation) einem GebÃ€ude. Zu diesem GebÃ€ude die Adresse(n) als Tabellen-Zeile ausgeben
 function bw_gz_lage($gmlgz) {
-	global $gkz, $debug, $showkey;
+	global $gkz, $dbg, $showkey;
 	
 	// HAUPTgebÃ€ude  Geb >zeigtAuf> lage (mehrere)
-	$sqlgz="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer "
+	$sqlgz ="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer, p.bezeichnung as gemeinde "
 	."FROM ax_gebaeude g JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf) "
-	."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
+	."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "	
+	."JOIN ax_gemeinde p ON s.land=p.land AND s.regierungsbezirk=p.regierungsbezirk AND s.kreis=p.kreis AND s.gemeinde=p.gemeinde ".UnqKatAmt("s","p")
 	."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ";
 
 	// ++ evtl. keine NEBEN-GebÃ€ude mÃ¶glich, nur Haupt-?
 	// UNION - oder NEBENgebÃ€ude  Geb >hat> Pseudo
-	$sqlgz.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer "
+	$sqlgz.="UNION SELECT 'p' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer, p.bezeichnung as gemeinde "
 	."FROM ax_gebaeude g JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat "
 	."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
-	."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL "; // ID des Hauses"
-
-	$sqlgz.="ORDER BY bezeichnung, hausnummer, laufendenummer;";
+	."JOIN ax_gemeinde p ON s.land=p.land AND s.regierungsbezirk=p.regierungsbezirk AND s.kreis=p.kreis AND s.gemeinde=p.gemeinde ".UnqKatAmt("s","p")	
+	."WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL " // ID des Hauses"
+	."ORDER BY bezeichnung, hausnummer, laufendenummer;";
 	$v = array($gmlgz);
 	$resgz = pg_prepare("", $sqlgz);
@@ -43,6 +52,6 @@
 	if (!$resgz) {
 		echo "\n<p class='err'>Fehler bei Lage mit HsNr. zum Bauwerk</p>";
-		if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlgz."'", $sqlgz)."</p>";}
-		if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resgz)."</p>";}
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlgz."'", $sqlgz)."</p>";}
+		if ($dbg > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resgz)."</p>";}
 	} else {
 		echo "\n<tr>";
@@ -56,12 +65,12 @@
 			$hlfd=$rowgz["laufendenummer"];
 			$gmllag=$rowgz["lgml"];
+			$gemeinde=$rowgz["gemeinde"];
 
 			if ($ltyp === "p") {
 				$lagetitl="NebengebÃ€ude Nr. ".$hlfd;
-			//	$lagetxt="Nebengeb&auml;ude Nr. ".$hlfd; // alt
-				$lagetxt=$snam."&nbsp;".$hsnr." (".$hlfd.")";
+				$lagetxt=$snam." ".$hsnr." (".$hlfd."), ".$gemeinde;
 			} else {
 				$lagetitl="HauptgebÃ€ude - Hausnummer ".$hsnr;
-				$lagetxt=$snam."&nbsp;".$hsnr;
+				$lagetxt=$snam." ".$hsnr.", ".$gemeinde;
 			}
 
@@ -82,5 +91,5 @@
 // Eine Zeile der HTML-Tabelle ausgeben
 function tab_zeile($titel, $key, $inhalt, $ea, $ei) {
-	global $showkey, $allefelder, $debug;
+	global $showkey, $allefelder, $dbg;
 	if ($inhalt != "" OR $allefelder) {
 		echo "\n<tr>\n\t<td class='li'>".$titel."</td>\n\t<td class='fett'>";
@@ -96,5 +105,5 @@
 // Anwendung fÃŒr die DB-Spalten, die nicht bei jeder Bauwerks-Tabelle vorkommen
 function zusatz_spalte($col, $inhalt) { // Spalten-Name, Value
-	global $debug;
+	global $dbg;
 	$einh='';
 	switch ($col) {	
@@ -126,5 +135,5 @@
 	// Fehler
 		default: // noch nicht berÃŒcksichtigt
-			if ($debug > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function zusatz_spalte noch nicht ber&uuml;cksichtigt.</p>";}
+			if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function zusatz_spalte noch nicht ber&uuml;cksichtigt.</p>";}
 			$titel=$col;
 	}
@@ -144,6 +153,6 @@
 // inhalt = gml_id oder Array mit gml_id's
 function objektverweis($col, $inhalt) {
-	global $gkz, $showkey, $debug;
-//	if ($debug > 1) {echo "<p>Verweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.</p>";}
+	global $gkz, $showkey, $dbg;
+//	if ($dbg > 1) {echo "<p>Verweis Typ '".$col."' auf Objekt(e): '".$inhalt."'.</p>";}
 	switch ($col) {
 		case 'hatdirektunten': // [] ++ Wie kann man dies Objekt finden?
@@ -168,16 +177,7 @@
 	// 'istabgeleitetaus';  'traegtbeizu': 'istteilvon': // -> Keine FÃ€lle vorhanden
 		default:
-			if ($debug > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function 'objektverweis' noch nicht ber&uuml;cksichtigt.</p>";}
-	}
-}
-// alle leer:
-//  SELECT * FROM bauwerke_zusammenfassung WHERE NOT istabgeleitetaus IS NULL;
-//  SELECT * FROM bauwerke_zusammenfassung WHERE NOT traegtbeizu IS NULL;
-//  SELECT * FROM bauwerke_zusammenfassung WHERE NOT istteilvon IS NULL;
-// SELECT gml_id, hatdirektunten, st_asewkt( wkb_geometry ) as wkt FROM ax_bauwerkimgewaesserbereich WHERE NOT hatdirektunten IS NULL;
-//  1 Fall  in 290: 2 / DENW15AL360000N7 , 
-// SELECT gml_id, hatdirektunten, st_asewkt( wkb_geometry ) as wkt FROM ax_bauwerkimgewaesserbereich WHERE gml_id = 'DENW15AL360000N7';
-// 34 FÃ€lle in 200: 
-// 16 FÃ€lle in 300:
+			if ($dbg > 1) {echo "<p class='dbg'>Der Feldname ".$col." ist in function 'objektverweis' noch nicht ber&uuml;cksichtigt.</p>";}
+	}
+}
 
 // S T A R T
@@ -185,5 +185,5 @@
 ini_set("session.cookie_httponly", 1);
 session_start();
-$allfld = "n"; $showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren
+$allfld = "n"; $showkey="n"; $nodebug=""; // Var. initalisieren
 $cntget = extract($_GET);	// Parameter in Variable umwandeln
 
@@ -224,8 +224,6 @@
 
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
-
-// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
-// Manuell an die URL anfÃŒgen, wirkt nur temporÃ€r und wird nicht in Links weiter gereicht.
-if ($nodebug === "j") {$debug=0;} 
+$dbg=$debug; // CONF in Arbeits-Variable
+if ($nodebug === "j") {$dbg=0;} // Entwicklungsumgebung temporÃ€r ausschalten
 
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbauwerk.php'");
@@ -237,10 +235,4 @@
 
 /* in ALLEN Bauwerks-Typen folgende Spalten, bisher NICHT verwendet:
-    processstep_ax_li_processstep_mitdatenerhebung_description[] processstep_rationale[]
-    processstep_datetime[] processstep_individualname[] processstep_organisationname[] processstep_positionname[]
-    processstep_phone[] processstep_address[] processstep_onlineresource[] processstep_hoursofservice[]
-    processstep_contactinstructions[] processstep_role[] processstep_ax_datenerhebung[]
-    processstep_scaledenominator[] processstep_sourcereferencesystem[] processstep_sourceextent[] processstep_sourcestep[]
-
     herkunft_source_source_ax_datenerhebung[] herkunft_source_source_scaledenominator[] herkunft_source_source_sourcereferencesystem[]
     herkunft_source_source_sourceextent[]     herkunft_source_source_sourcestep[] */
@@ -414,12 +406,20 @@
 if (!$resb) {
 	echo "\n<p class='err'>Fehler bei Bauwerksdaten Standardfelder.</p>";
-	if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlb)."'</p>";}
-	if ($debug > 1) {echo "\n<p class='dbg'>Fehler:".pg_result_error($resb)."</p>";}
+	if ($dbg > 0) {
+		echo "\n<p class='dbg'>Fehler:".pg_result_error($resb)."</p>";
+		if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlb)."'</p>";}
+	}
 } else {
+	if ($dbg > 0) {
+		$zeianz=pg_num_rows($resb);
+		if ($zeianz > 1){
+			echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Standardfelder)</p>";
+			if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlb), ENT_QUOTES, "UTF-8")."</p>";}
+		}
+	}
 	if (!$rowb = pg_fetch_assoc($resb)) {
 		echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
 		die('<p class="stop1">Abbruch</p></body>'); // Das wÃŒrde sich sonst 2x wiederholen
-	} else {
-	// Treffer
+	} else { // Treffer
 		// Seitenkopf
 		echo "<p class='balken bauwerk".$btyp."'>ALKIS Bauwerk ".$btyp." - ".$gmlid."&nbsp;</p>"; // Balken, Farbe wie WMS
@@ -484,7 +484,16 @@
 	if (!$resk) {
 		echo "\n<p class='err'>Fehler bei Schl&uuml;sseltabelle ".$btyp."</p>";
-		if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlk)."'</p>";}
-		if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resk)."</p>";}
+		if ($dbg > 0) {
+			echo "<p class='dbg'>Fehler:".pg_result_error($resk)."</p>";
+			if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlk)."'</p>";}
+		}
 	} else {
+		if ($dbg > 0) {
+			$zeianz=pg_num_rows($resk);
+			if ($zeianz > 1){
+				echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Key-Value)</p>";
+				if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlk), ENT_QUOTES, "UTF-8")."</p>";}
+			}
+		}
 		if (!$rowk = pg_fetch_array($resk)) {
 			echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
@@ -532,7 +541,16 @@
 	if (!$resz) {
 		echo "\n<p class='err'>Fehler bei Bauwerk Relation.</p>";
-		if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlz)."'</p>";}
-		if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resz)."</p>";}
+		if ($dbg > 0) {
+			echo "<p class='dbg'>Fehler:".pg_result_error($resz)."</p>";
+			if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlz)."'</p>";}
+		}
 	} else {
+		if ($dbg > 0) {
+			$zeianz=pg_num_rows($resz);
+			if ($zeianz > 1){
+				echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Zusatz-Spalten)</p>";
+				if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlz), ENT_QUOTES, "UTF-8")."</p>";}
+			}
+		}
 		if (!$rowz = pg_fetch_array($resz)) {
 			echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
@@ -540,5 +558,4 @@
 			// Die Spalten im Row abarbeiten
 			$anzcol=pg_num_fields($resz);
-		//	if ($debug > 1) {echo "<p class='dbg'>".$anzcol." Zusatz-Spalten vorhanden"."</p>";}
 			for ($i = 0; $i < $anzcol; $i++) {
 				$k=pg_field_name($resz, $i);
@@ -560,12 +577,20 @@
 	if (!$resr) {
 		echo "\n<p class='err'>Fehler bei Bauwerksdaten Zusatzfelder.</p>";
-		if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlr)."'</p>";}
-		if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resr)."</p>";}
+		if ($dbg > 0) {
+			echo "<p class='dbg'>Fehler:".pg_result_error($resr)."</p>";
+			if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlr)."'</p>";}
+		}
 	} else {
+		if ($dbg > 0) {
+			$zeianz=pg_num_rows($resr);
+			if ($zeianz > 1){
+				echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Bauwerk! (Relationen)</p>";
+				if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlr), ENT_QUOTES, "UTF-8")."</p>";}
+			}
+		}
 		if (!$rowr = pg_fetch_array($resr)) {
 			echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r gml_id=".$gmlid."</p>";
 		} else { // Die Spalten im Row abarbeiten
 			$anzcol=pg_num_fields($resr);
-		//	if ($debug > 1) {echo "<p class='dbg'>".$anzcol." Relationen-Spalten vorhanden"."</p>";}
 			for ($i = 0; $i < $anzcol; $i++) {
 				$k=pg_field_name($resr, $i);
@@ -581,15 +606,10 @@
 
 echo "\n</table>\n";
-// +++ Test, ob ein zweiter Satz zum Bauwerk gefunden wird? Das sollte nicht sein.
+echo "<div class='buttonbereich noprint'>\n<hr>\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;";
+if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";}
+echo "\n</div>";
+
+footer($gmlid, selbstverlinkung()."?", "&amp;btyp=".$btyp);
 ?>
- 
-<div class='buttonbereich noprint'>
-	<hr>
-	<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
-	<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>
-</div>
-
-<?php footer($gmlid, selbstverlinkung()."?", "&amp;btyp=".$btyp); ?>
-
 </body>
 </html>
