[Mapbender-commits] r1350 - in trunk/mapbender/http: javascripts php

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu May 24 10:13:43 EDT 2007


Author: christoph
Date: 2007-05-24 10:13:43 -0400 (Thu, 24 May 2007)
New Revision: 1350

Added:
   trunk/mapbender/http/javascripts/mod_wfs_gazetteer_client.php
   trunk/mapbender/http/php/mod_wfs_gazetteer_conf_server.php
   trunk/mapbender/http/php/mod_wfs_gazetteer_server.php
Log:
wfs gazetteer w/ ajax

Added: trunk/mapbender/http/javascripts/mod_wfs_gazetteer_client.php
===================================================================
--- trunk/mapbender/http/javascripts/mod_wfs_gazetteer_client.php	                        (rev 0)
+++ trunk/mapbender/http/javascripts/mod_wfs_gazetteer_client.php	2007-05-24 14:13:43 UTC (rev 1350)
@@ -0,0 +1,305 @@
+<?php
+# $Id: mod_wfs_gazetteer_ajax.php 1307 2007-05-09 10:06:24Z christoph $
+# 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"];
+$target = $_REQUEST["target"];
+$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';
+?>
+<style id="wfsConfStyle" type="text/css"></style>
+<script type="text/javascript">
+<?php 
+	echo "var targetString = '" . $target . "';";
+	echo "var wfsConfIdString = '" . $wfsConfIdString . "';";
+?>
+
+var targetArray = targetString.split(",");
+var global_wfsConfObj;
+var global_selectedWfsConfId;
+var point_px = 10;
+var resultGeom = null;
+var cw_fillcolor = "#cc33cc";
+
+
+parent.mb_registerInitFunctions("window.frames['"+this.name+"'].initModWfsGazetteer()");
+
+//----------------------------------------------------------------------------------
+
+function removeChildNodes(node) {
+	while (node.childNodes.length > 0) {
+		var childNode = node.firstChild;
+		node.removeChild(childNode);
+	}
+}
+
+function appendStyles() {
+	var wfsConfStyleNode = document.getElementById("wfsConfStyle");
+	wfsConfStyleNode.innerHTML = global_wfsConfObj[global_selectedWfsConfId].g_style + global_wfsConfObj[global_selectedWfsConfId].g_res_style;
+}
+
+//----------------------------------------------------------------------------------
+
+
+function initModWfsGazetteer() {
+	parent.mb_ajax_json("../php/mod_wfs_gazetteer_conf_server.php", {wfsConfIdString:wfsConfIdString}, function(json, status) {
+		global_wfsConfObj = json;
+		var wfsCount = 0;
+		for (var wfsConfId in global_wfsConfObj) {
+			if (typeof(global_wfsConfObj[wfsConfId] != 'function')) {
+				wfsCount++;
+			}
+		}
+		if (wfsCount === 0) {
+			var e = parent.Mb_exception("no wfs conf id available.");
+		}
+		else if (wfsCount === 1) {
+			appendWfsForm();
+		}
+		else {
+			appendWfsConfSelectBox();
+		}
+	});
+}
+
+function appendWfsConfSelectBox() {
+	var selectNode = document.createElement("select");
+	selectNode.name = "wfs_conf_sel";
+	selectNode.setAttribute("onchange", "global_selectedWfsConfId = this.value;appendStyles();appendWfsForm()");
+	
+	var isSelected = false;
+	for (var wfsConfId in global_wfsConfObj) {
+		var optionNode = document.createElement("option");
+		
+		optionNode.value = wfsConfId;
+		optionNode.innerHTML = global_wfsConfObj[wfsConfId].g_label;
+
+		if (!isSelected) {
+			optionNode.selected = true;
+			isSelected = true;
+			global_selectedWfsConfId = wfsConfId;
+		}
+		selectNode.appendChild(optionNode);
+	}
+
+	var form = document.getElementById('selectWfsConfForm');
+	form.appendChild(selectNode);
+	
+	appendStyles();
+	appendWfsForm();
+}
+
+function appendWfsForm() {
+	var form = document.getElementById("wfsForm");
+	removeChildNodes(form);
+	var resultDiv = document.getElementById("res");
+	removeChildNodes(resultDiv);
+	
+	var divContainer = document.createElement("div");
+	divContainer.class = global_wfsConfObj[global_selectedWfsConfId].g_label_id;
+	divContainer.innerHTML = global_wfsConfObj[global_selectedWfsConfId].g_label;
+	
+	form.appendChild(divContainer);
+
+	var wfsConfElementArray = global_wfsConfObj[global_selectedWfsConfId].element;
+
+	for (var i = 0; i < wfsConfElementArray.length; i++){
+		var spanNode = document.createElement("span");
+		spanNode.class = wfsConfElementArray[i].f_label_id;
+		spanNode.innerHTML = wfsConfElementArray[i].f_label;
+
+		var inputNode = document.createElement("input");
+		inputNode.type = "text";
+		inputNode.class = wfsConfElementArray[i].f_style_id;
+		inputNode.id = wfsConfElementArray[i].element_name;
+
+		form.appendChild(spanNode);
+		form.appendChild(inputNode);
+	}
+	var submitButton = document.createElement("input");
+	submitButton.type = "submit";
+	submitButton.class = global_wfsConfObj[global_selectedWfsConfId].g_button_id;
+	submitButton.value = global_wfsConfObj[global_selectedWfsConfId].g_button;
+	
+	form.appendChild(submitButton);
+}
+
+function validate(){
+	global_resultHighlight = new parent.Highlight(targetArray, "wfs_gazetteer_highlight", {"position":"absolute", "top":"0px", "left":"0px", "z-index":100}, 2);
+
+	var filterParameterCount = getNumberOfFilterParameters();
+	
+	if(filterParameterCount == 0){
+		return false;
+	}
+	else{
+		var andConditions = "";
+		
+		var el = global_wfsConfObj[global_selectedWfsConfId].element;
+
+		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 = global_wfsConfObj[global_selectedWfsConfId].wfs_getfeature + parent.mb_getConjunctionCharacter(global_wfsConfObj[global_selectedWfsConfId].wfs_getfeature);
+		u += "REQUEST=getFeature&Typename="+global_wfsConfObj[global_selectedWfsConfId].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":global_selectedWfsConfId, "frame":this.name, "url":u, "filter":filter, "backlink":""};
+		parent.mb_ajax_get("../php/mod_wfs_gazetteer_server.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 == global_selectedWfsConfId) {
+						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;
+	var el = global_wfsConfObj[global_selectedWfsConfId].element;
+
+	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){
+	console.log("setResult %s %s", event, id);
+	var index = parseInt(id.slice(4));
+
+	if (event == "over") {
+		global_resultHighlight.add(resultGeom.get(index), cw_fillcolor);
+	}
+	else if (event == "out"){
+		global_resultHighlight.del(resultGeom.get(index), cw_fillcolor);
+	}
+	else if (event == "click"){
+		global_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);
+		global_resultHighlight.add(resultGeom.get(index), cw_fillcolor);
+	}
+	return true;
+}
+
+
+</script>
+</head>
+<body leftmargin='0' topmargin='10'  bgcolor='#ffffff'>
+<form name='selectWfsConfForm' id='selectWfsConfForm'></form>
+<form name='wfsForm' id='wfsForm' onsubmit='return validate()'></form>
+<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_conf_server.php
===================================================================
--- trunk/mapbender/http/php/mod_wfs_gazetteer_conf_server.php	                        (rev 0)
+++ trunk/mapbender/http/php/mod_wfs_gazetteer_conf_server.php	2007-05-24 14:13:43 UTC (rev 1350)
@@ -0,0 +1,111 @@
+<?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");
+require_once(dirname(__FILE__)."/../extensions/JSON.php");
+
+$wfsConfIdString = $_GET["wfsConfIdString"];
+
+$con = db_connect($DBSERVER,$OWNER,$PW);
+db_select_db($DB,$con);
+
+if ($wfsConfIdString != "") {
+	$wfsConfIdArray = split(",", $wfsConfIdString);
+}
+else {
+	echo "please specify wfs conf id.";
+	die();
+}
+
+$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 < count($wfsConfIdArray); $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);
+
+$obj = array();
+while ($row = db_fetch_array($res)) {
+	$id = $row["wfs_conf_id"];
+	
+	$sql_conf_element = "SELECT * FROM wfs_conf_element ";
+	$sql_conf_element .= "JOIN wfs_element ON wfs_conf_element.f_id = wfs_element.element_id ";
+	$sql_conf_element .= "WHERE wfs_conf_element.fkey_wfs_conf_id = $1 ";
+	$sql_conf_element .= "AND wfs_conf_element.f_search = 1 ORDER BY wfs_conf_element.f_pos";
+	$v_conf_element = array($id);
+	$t_conf_element = array('i');
+	$res_conf_element = db_prep_query($sql_conf_element, $v_conf_element, $t_conf_element);
+
+	$elementArray = array();
+	while ($row_conf_element = db_fetch_array($res_conf_element)) {
+		$currentElement = array("f_search" => $row_conf_element["f_search"],
+								"f_style_id" => $row_conf_element["f_style_id"],
+								"f_toupper" => $row_conf_element["f_toupper"],
+								"f_label" => $row_conf_element["f_label"],
+								"f_label_id" => $row_conf_element["f_label_id"],
+								"element_name" => $row_conf_element["element_name"],
+								"element_type" => $row_conf_element["element_type"]
+								);
+		array_push($elementArray, $currentElement);
+	}
+	
+	$sql_feature_type = "SELECT * FROM wfs_featuretype WHERE fkey_wfs_id = $1 AND featuretype_id = $2";
+	$v_feature_type = array($row["fkey_wfs_id"], $row["fkey_featuretype_id"]);
+	$t_feature_type = array("i", "i");
+
+	$res_feature_type = db_prep_query($sql_feature_type, $v_feature_type, $t_feature_type);
+	if($row_feature_type = db_fetch_array($res_feature_type)){
+		$featuretype_name  = $row_feature_type["featuretype_name"];
+		$featuretype_srs  = $row_feature_type["featuretype_srs"];
+	}
+
+	$currentRow = array("g_label" => $row["g_label"], 
+                        "g_label_id" => $row["g_label_id"],
+						"g_style" => $row["g_style"],
+						"g_button" => $row["g_button"],
+						"g_button_id" => $row["g_button_id"],
+						"g_buffer" => $row["g_buffer"],
+						"g_res_style" => $row["g_res_style"],
+						"g_use_wzgraphics" => $row["g_use_wzgraphics"],
+						"wfs_id" => $row["fkey_wfs_id"],
+						"featuretype_id" => $row["fkey_featuretype_id"],
+						"featuretype_name" => $featuretype_name,
+						"featuretype_id" => $featuretype_srs,
+						"wfs_getfeature" => $row["wfs_getfeature"],
+						"element" => $elementArray
+						);
+
+	$obj[$id] = $currentRow;
+	
+	
+	
+}	
+$json = new Services_JSON();
+$output = $json->encode($obj);
+echo $output;
+?>
\ No newline at end of file

Copied: trunk/mapbender/http/php/mod_wfs_gazetteer_server.php (from rev 1335, trunk/mapbender/http/php/mod_wfs_gazetteer_search.php)
===================================================================
--- trunk/mapbender/http/php/mod_wfs_gazetteer_server.php	                        (rev 0)
+++ trunk/mapbender/http/php/mod_wfs_gazetteer_server.php	2007-05-24 14:13:43 UTC (rev 1350)
@@ -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