[Mapbender-commits] r1266 - trunk/mapbender/http/php

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Tue Apr 17 10:43:56 EDT 2007


Author: christoph
Date: 2007-04-17 10:43:56 -0400 (Tue, 17 Apr 2007)
New Revision: 1266

Added:
   trunk/mapbender/http/php/mod_wfs_gazetteer_ajax.php
   trunk/mapbender/http/php/mod_wfs_gazetteer_search.php
Log:
wfs gazetteer via ajax approach

Copied: trunk/mapbender/http/php/mod_wfs_gazetteer_ajax.php (from rev 1193, trunk/mapbender/http/php/mod_wfs_gazetteer.php)
===================================================================
--- trunk/mapbender/http/php/mod_wfs_gazetteer_ajax.php	                        (rev 0)
+++ trunk/mapbender/http/php/mod_wfs_gazetteer_ajax.php	2007-04-17 14:43:56 UTC (rev 1266)
@@ -0,0 +1,386 @@
+<?php
+# $Id$
+# maintained by http://www.mapbender.org/index.php/User:Verena Diewald
+# http://www.mapbender.org/index.php/WFS_gazetteer
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+session_start();
+$gui_id = $_SESSION["mb_user_gui"];
+
+$wfsConfIdString = $_REQUEST["wfs_conf"];
+$selectedConfId = $_REQUEST["selected_conf"];
+$target = $_REQUEST["target"];
+$resultFrame = $_REQUEST["resultFrame"];
+$e_id_css = $_REQUEST["e_id_css"];
+
+require_once("../../conf/mapbender.conf");
+
+$con = db_connect($DBSERVER,$OWNER,$PW);
+db_select_db($DB,$con);
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset='<?php echo CHARSET;?>'">	
+<title>mod_wfs_gazetteer</title>
+<?php
+include '../include/dyn_css.php';
+
+function createWfsConfSelectBox($idArray, $labelArray, $selectedId) {
+	$wfsConfSelectBox .= "<select name='wfs_conf_sel' size='1' onChange='conf_selection()'>\n";
+
+	if (!isset($selectedId)) {$selectedId = 0;}
+
+	for($i = 0; $i < count($idArray); $i++){
+		$selected = "";
+		if ($idArray[$i] == $selectedId) {$selected = "selected";}  
+
+		$wfsConfSelectBox .= "<option value='".$idArray[$i]."' " . $selected . ">" . $labelArray[$idArray[$i]] . "</option>\n";
+	}
+	$wfsConfSelectBox .= "</select>";
+	return $wfsConfSelectBox; 
+}
+
+if ($wfsConfIdString != "") {
+	$wfsConfIdArray = split(",", $wfsConfIdString);
+	$wfsConfCount = count($wfsConfIdArray);
+}
+else {
+	if ($selectedConfId) {
+		$wfsConfIdArray = array($selectedConfId);
+		$wfsConfCount = 1;
+	}
+	else {
+		$wfsConfIdArray = array();
+		$wfsConfCount = 0;
+	}
+}
+
+if ($wfsConfCount > 0) {
+	// -------------------------------------------------------------------------------
+	// WFS CONF
+	//
+	$sql = "SELECT * FROM wfs_conf ";
+	$sql .= "JOIN wfs ON wfs_conf.fkey_wfs_id = wfs.wfs_id ";
+	$sql .= "WHERE wfs_conf.wfs_conf_id IN (";
+	$v = array();
+	$t = array();
+	for ($i = 0; $i < $wfsConfCount; $i++) {
+		if ($i > 0) {$sql .= ", ";}
+		$sql .= "$" . ($i+1);
+		array_push($v, $wfsConfIdArray[$i]);
+		array_push($t, 'i');
+	}
+	$sql .= ")";
+
+	$res = db_prep_query($sql, $v, $t);
+	while ($row = db_fetch_array($res)) {
+		$id = $row["wfs_conf_id"];
+		$g_label[$id] = $row["g_label"];
+		$g_label_id[$id]  = $row["g_label_id"];
+		$g_style[$id]  = $row["g_style"];
+		$g_button[$id] = $row["g_button"];
+		$g_button_id[$id] = $row["g_button_id"];
+		$g_buffer[$id]  = $row["g_buffer"];
+		$g_res_style[$id]  = $row["g_res_style"];
+		$g_use_wzgraphics[$id] = $row["g_use_wzgraphics"];
+		$wfs_id[$id]  = $row["fkey_wfs_id"];
+		$featuretype_id[$id]  = $row["fkey_featuretype_id"];
+		$wfs_getfeature[$id] = $row["wfs_getfeature"];
+	}	
+ 
+	// if more than one wfs is available, add a select box
+ 	if ($wfsConfCount > 1) {
+		$wfsConfForm = "<form name='sel_wfs_conf_form' method='POST' action='mod_wfs_gazetteer.php'>\n";
+		$wfsConfForm .= createWfsConfSelectBox($wfsConfIdArray, $g_label, $selectedConfId);
+		$wfsConfForm .= "<input type='hidden' name='wfs_conf' value='".$wfsConfIdString."'>\n";
+		$wfsConfForm .= "<input type='hidden' name='selected_conf' value='".$selectedConfId."'>\n";
+		$wfsConfForm .= "<input type='hidden' name='target' value='".$target."'>\n";
+		$wfsConfForm .= "<input type='hidden' name='resultFrame' value='".$resultFrame."'>\n";
+	 	$wfsConfForm .= "</form>";
+	 	
+	 	echo $wfsConfForm;
+	 	
+	 	if (!isset($selectedConfId)) {
+	 		$selectedConfId = $wfsConfIdArray[0];
+	 	}
+ 	}
+ 	// if only one wfs is available, use it
+ 	else {
+ 		$selectedConfId = $wfsConfIdArray[0];
+ 	}
+  	
+	$sql = "SELECT * FROM wfs_featuretype WHERE fkey_wfs_id = $1 AND featuretype_id = $2";
+	$v = array($wfs_id[$selectedConfId], $featuretype_id[$selectedConfId]);
+	$t = array('i', 'i');
+	$res = db_prep_query($sql, $v, $t);
+
+	if ($row = db_fetch_array($res)) {
+		$featuretype_name  = $row["featuretype_name"];
+		$featuretype_srs  = $row["featuretype_srs"];
+	}
+	else{
+		die("Please add the wfs_conf to the src-Parameter");
+	}
+   
+	// Style
+	echo "<style type='text/css'>" . $g_style[$selectedConfId] . "</style>";
+
+
+
+	// -------------------------------------------------------------------------------
+	// WFS CONF ELEMENTS
+	//
+
+	$sql = "SELECT * FROM wfs_conf_element ";
+	$sql .= "JOIN wfs_element ON wfs_conf_element.f_id = wfs_element.element_id ";
+	$sql .= "WHERE wfs_conf_element.fkey_wfs_conf_id = $1 ";
+	$sql .= "AND wfs_conf_element.f_search = 1 ORDER BY wfs_conf_element.f_pos";
+	$v = array($selectedConfId);
+	$t = array('i');
+	$res = db_prep_query($sql, $v, $t);
+
+  
+	echo "<script type='text/javascript'>";
+	echo "var el = new Array();";
+	$cnt = 0;
+	while($row = db_fetch_array($res)){
+		echo "el[".$cnt."] = [];";
+		echo "el[".$cnt."]['f_search'] = ".$row["f_search"].";";
+		echo "el[".$cnt."]['f_style_id'] = '".$row["f_style_id"]."';";
+		echo "el[".$cnt."]['f_toupper'] = '".$row["f_toupper"]."';";
+		echo "el[".$cnt."]['f_label'] = '".$row["f_label"]."';";
+		echo "el[".$cnt."]['f_label_id'] = '".$row["f_label_id"]."';";
+		echo "el[".$cnt."]['element_name'] = '".$row["element_name"]."';";
+		echo "el[".$cnt."]['element_type'] = '".$row["element_type"]."';";
+		$cnt++;
+	}
+	if($cnt == 0){
+		die("Please add the wfs_conf to the src-Parameter");
+	}
+
+	echo "var g_label = '".$g_label[$selectedConfId]."';";
+	echo "var g_label_id = '".$g_label_id[$selectedConfId]."';";
+	echo "var g_button = '".$g_button[$selectedConfId]."';";
+	echo "var g_button_id = '".$g_button_id[$selectedConfId]."';";
+	echo "var g_buffer = ".$g_buffer[$selectedConfId].";";
+	echo "var g_res_style = '".urlencode($g_res_style[$selectedConfId])."';";
+	echo "var g_use_wzgraphics = ".$g_use_wzgraphics[$selectedConfId].";";
+	echo "var featuretype_name= '".$featuretype_name."';";
+	echo "var featuretype_srs = '".$featuretype_srs."';";
+	echo "var wfs_getfeature = '".$wfs_getfeature[$selectedConfId]."';";
+  
+	echo "var wfs_conf_id = '".$selectedConfId."';";
+	echo "var targets = '".$target."';";
+	echo "var targetArray = targets.split(',');";
+	echo "var resultFrame = '".$resultFrame."';";
+	echo "var selectedConfId = ".$selectedConfId.";";
+	echo "</script>";
+	// -------------------------------------------------------------------------------
+}
+else {
+	die("problem.");
+}
+?>
+
+<script type="text/javascript">
+//var res = true;
+var wfs_conf_color = "255,0,0";
+
+/**
+ *  Sets the wfs conf ID that was selected in the select box as default and reloads.
+ */
+function conf_selection(){
+	document.sel_wfs_conf_form.selected_conf.value = document.sel_wfs_conf_form.wfs_conf_sel.value;
+	document.sel_wfs_conf_form.submit();
+}
+
+/**
+ *  displays the form where the search criteria may be entered
+ */
+function init_mod_wfs_gazetteer(){
+
+	var s = "";
+	s += "<form onsubmit='return validate()'>";
+	s += "<div class='"+g_label_id+"'>"+g_label+"</div>";
+	for(var i=0; i<el.length; i++){
+		s += "<span class='"+el[i]["f_label_id"]+"'>"+el[i]["f_label"]+"</span>";
+		s += "<input type='text' class='"+el[i]["f_style_id"]+"' id='"+el[i]["element_name"]+"'><br>";
+	}
+	s += "<input type='submit' class='"+g_button_id+"' value='"+g_button+"' >";
+	s += "</form>";
+	document.getElementById("gaz").innerHTML = s;
+          
+	return true;
+}
+
+function validate(){
+	var filterParameterCount = getNumberOfFilterParameters();
+	
+	if(filterParameterCount == 0){
+		return false;
+	}
+	else{
+		var andConditions = "";
+		for (var i = 0; i < el.length; i++) {
+			if (el[i]['f_search'] == 1 && document.getElementById(el[i]['element_name']).value != '') {
+		
+				var a = new Array();
+				a = document.getElementById(el[i]['element_name']).value.split(",");
+				var orConditions = "";
+				for (var j=0; j < a.length; j++) {
+					
+					orConditions += "<ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!'>";
+					orConditions += "<ogc:PropertyName>" + el[i]['element_name'] + "</ogc:PropertyName>";
+					orConditions += "<ogc:Literal>*";
+					if(el[i]['f_toupper'] == 1){
+						orConditions += a[j].toUpperCase();
+					}
+					else{
+						orConditions += a[j];
+					}
+					orConditions += "*</ogc:Literal>";
+					orConditions += "</ogc:PropertyIsLike>";
+				}
+				if(a.length > 1){
+					andConditions += "<Or>" + orConditions + "</Or>";
+				}
+				else {
+					andConditions += orConditions;
+				}
+			}
+		}
+
+		var u = wfs_getfeature + parent.mb_getConjunctionCharacter(wfs_getfeature);
+		u += "REQUEST=getFeature&Typename="+featuretype_name+"&Version=1.0.0&service=WFS";
+		u += "&filter=";
+
+		if (filterParameterCount > 1) {
+			andConditions = "<And>" + andConditions + "</And>";
+		}
+
+		var filter = "<ogc:Filter xmlns:ogc='http://ogc.org' xmlns:gml='http://www.opengis.net/gml'>"+andConditions+"</ogc:Filter>";
+
+		document.getElementById("res").innerHTML = "<table><tr><td><img src='../img/indicator_wheel.gif'></td><td>Searching...</td></tr></table>";
+		var parameters = {"wfs_conf_id":wfs_conf_id, "frame":this.name, "url":u, "filter":filter, "backlink":""};
+		parent.mb_ajax_get("../php/mod_wfs_gazetteer_search.php", parameters, function (jsCode, status) {
+			eval(jsCode);
+			
+			for (var i=0; i < parent.wms.length; i++) {
+				for (var j=0; j < parent.wms[i].objLayer.length; j++) {
+					var currentLayer = parent.wms[i].objLayer[j];
+					var wms_id = parent.wms[i].wms_id; 
+					if (currentLayer.gui_layer_wfs_featuretype == selectedConfId) {
+						var layer_name = currentLayer.layer_name; 
+						parent.handleSelectedLayer_array(targetArray[0],[wms_id],[layer_name],'querylayer',1); 
+						parent.handleSelectedLayer_array(targetArray[0],[wms_id],[layer_name],'visible',1);					
+					}
+				}
+			}
+
+			var body = "";
+			if (typeof(geom) == 'object') {
+				resultGeom = geom; // set the global variable
+				for (var i=0; i < geom.count(); i++) {
+					body += "<div id='geom"+i+"'style='cursor:pointer;' ";
+					if ((i % 2) === 0) {
+						body += "class='even'";
+					}
+					else {
+						body += "class='uneven'";
+					}
+					body += " onmouseover=\"setResult('over', this.id)\" ";
+					body += " onmouseout=\"setResult('out', this.id)\" ";
+					body += " onclick=\"setResult('click', this.id)\">";
+					for (var j=0; j < geom.get(i).e.count(); j++) {
+						body += geom.get(i).e.getValue(j) + " ";
+					}
+					body += "</div>";
+				}
+			}
+			else {
+				body = "Kein Ergebnis.";
+			}
+			document.getElementById('res').innerHTML = body;
+		});
+	}
+	return false;
+}
+
+function getNumberOfFilterParameters(){
+	var cnt = 0;
+	for (var i = 0; i < el.length; i++){
+		if( el[i]['f_search'] == 1){
+			if (document.getElementById(el[i]['element_name']).value != '') {
+				cnt++;
+			}
+		}
+	}
+	return cnt;
+}
+/*
+* event -> {over || out || click}
+* geom -> commaseparated coordinates x1,y1,x2,y2 ...
+*/
+function setResult(event, id){
+	var index = parseInt(id.slice(4));
+
+	if (event == "over") {
+		if(g_use_wzgraphics == 1){
+			resultHighlight.add(resultGeom.get(index), cw_fillcolor);
+		}
+	}
+	else if (event == "out"){
+		if(g_use_wzgraphics == 1){
+			resultHighlight.del(resultGeom.get(index), cw_fillcolor);
+		}
+	}
+	else if (event == "click"){
+		if(g_use_wzgraphics == 1){
+			resultHighlight.del(resultGeom.get(index), cw_fillcolor);
+		}
+		var bbox = resultGeom.get(index).getBBox();
+		var buffer = new parent.Point(1,1);
+		bbox[0] = bbox[0].minus(buffer);
+		bbox[1] = bbox[1].plus(buffer);
+		parent.mb_calculateExtent(targetArray[0], bbox[0].x, bbox[0].y, bbox[1].x, bbox[1].y);
+		parent.zoom(targetArray[0], 'true', 1.0);
+		if(g_use_wzgraphics == 1){
+			resultHighlight.add(resultGeom.get(index), cw_fillcolor);
+		}
+	}
+	return true;
+}
+
+
+/* Opacity for hilighting */
+    parent.cw_opacity = 1.5;
+/* Color for polygon boundary */
+    var cw_bndcolor = "#cc33cc";
+/* Color for polygon fill */
+    var cw_fillcolor = "#cc33cc";
+
+var point_px = 10;
+var resultGeom = null;
+var resultHighlight = new parent.Highlight(targetArray, "wfs_gazetteer_highlight", {"position":"absolute", "top":"0px", "left":"0px", "z-index":100}, 2);
+</script>
+</head>
+<body leftmargin='0' topmargin='10'  bgcolor='#ffffff' onload='init_mod_wfs_gazetteer()'>
+<div id='gaz'></div>
+<div name='res' id='res' frameborder='0' style='width:180px;height:200px'></div>
+</body>
+</html>
\ No newline at end of file

Added: trunk/mapbender/http/php/mod_wfs_gazetteer_search.php
===================================================================
--- trunk/mapbender/http/php/mod_wfs_gazetteer_search.php	                        (rev 0)
+++ trunk/mapbender/http/php/mod_wfs_gazetteer_search.php	2007-04-17 14:43:56 UTC (rev 1266)
@@ -0,0 +1,82 @@
+<?php
+# $Id: mod_wfsrequest.php 1008 2007-01-16 11:26:56Z christoph $
+# http://www.mapbender.org/index.php/Administration
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+require_once(dirname(__FILE__)."/../../conf/mapbender.conf");
+include(dirname(__FILE__)."/../classes/class_gml2.php");
+
+$backlink = $_REQUEST["backlink"];
+$wfs_conf_id = $_REQUEST["wfs_conf_id"];
+$frame = $_REQUEST["frame"];
+$filter = $_REQUEST["filter"];
+$url = $_REQUEST["url"];
+
+$con = db_connect($DBSERVER,$OWNER,$PW);
+db_select_db($DB,$con);
+
+/* wfs_conf */
+$sql = "SELECT * FROM wfs_conf JOIN wfs ON wfs_conf.fkey_wfs_id = wfs.wfs_id ";
+$sql .= "WHERE wfs_conf.wfs_conf_id = $1";
+$v = array($wfs_conf_id);
+$t = array('i');
+
+$res = db_prep_query($sql,$v,$t);
+if ($row = db_fetch_array($res)) {
+	$g_res_style  = $row["g_res_style"];
+}
+else {
+	die("wfs_conf data not available");
+}
+
+/* wfs_conf_element */
+$sql = "SELECT * FROM wfs_conf_element ";
+$sql .= "JOIN wfs_element ON wfs_conf_element.f_id = wfs_element.element_id ";
+$sql .= "WHERE wfs_conf_element.fkey_wfs_conf_id = $1 ";
+$sql .= "AND wfs_conf_element.f_show = 1 ORDER BY wfs_conf_element.f_respos;";
+$v = array($wfs_conf_id);
+$t = array('i');
+
+$res = db_prep_query($sql,$v,$t);
+$col = array();
+while ($row = db_fetch_array($res)) {
+	array_push($col, $row["element_name"]);
+}
+if (count($col) == 0) {
+	die("wfs_conf_element data not available");
+}
+
+$req = urldecode($url).urlencode(stripslashes($filter));
+
+$mygml = new gml2();
+$mygml->parsegml($req);
+
+// generates JavaScript code that will add a geometry array containing
+// all the result geometries and their attributes (wfs_conf_elements)
+
+$js = "";
+if ($mygml->getMemberCount() > 0) { 
+	$js .= $mygml->exportGeometriesToJS(true);
+
+	for ($i = 0; $i < $mygml->getMemberCount(); $i++) {
+		for ($j = 0; $j < count($col); $j++){
+			$js .= "geom.get(".$i.").e.setElement('".$j."', '".$mygml->getValueBySeparatedKey($i, $col[$j]) . "');\n";
+		}
+	}
+}
+echo $js;
+?>
\ No newline at end of file



More information about the Mapbender_commits mailing list