[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