[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