[Mapbender-commits] r3640 - trunk/mapbender/http/javascripts

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Fri Mar 6 09:56:49 EST 2009


Author: verenadiewald
Date: 2009-03-06 09:56:49 -0500 (Fri, 06 Mar 2009)
New Revision: 3640

Added:
   trunk/mapbender/http/javascripts/mod_tooltip.php
Log:
tooltip module for getFeatureInfo requests and getFeature requests

Added: trunk/mapbender/http/javascripts/mod_tooltip.php
===================================================================
--- trunk/mapbender/http/javascripts/mod_tooltip.php	                        (rev 0)
+++ trunk/mapbender/http/javascripts/mod_tooltip.php	2009-03-06 14:56:49 UTC (rev 3640)
@@ -0,0 +1,367 @@
+<?php
+# $Id: mod_toggleModule.php 2238 2008-03-13 14:24:56Z christoph $
+# http://www.mapbender.org/index.php/mod_toggleModule.php
+# 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__)."/../php/mb_validateSession.php");
+
+$wfs_conf_filename = "wfs_default.conf";
+include '../include/dyn_php.php';
+$fname = dirname(__FILE__) . "/../../conf/" . $wfs_conf_filename;
+if (file_exists($fname)) {
+	include($fname);
+}
+else {
+	$e = new mb_exception("tooltip.php: Configuration file " . $wfs_conf_filename . " not found.");
+}
+
+echo "var tooltipTarget ='".$e_target[0]."';"; 
+
+include '../include/dyn_js.php';
+?>
+//tolerance when we ask wfs
+var mb_wfs_tolerance = 8;
+
+//initialize Element Vars
+
+//destination frame for the request (creates Popup if empty)
+if(typeof(tooltip_destinationFrame)==='undefined')
+	var tooltip_destinationFrame = "";
+if(typeof(tooltip_timeDelay)==='undefined')
+	var tooltip_timeDelay = 1000;
+if(typeof(tooltip_styles)==='undefined')
+	var tooltip_styles = "";
+if(typeof(tooltip_width)==='undefined')
+	var tooltip_width = 270;
+if(typeof(tooltip_height)==='undefined')
+	var tooltip_height = 200;
+if(typeof(tooltip_styles_detail)==='undefined')
+	var tooltip_styles_detail = "";
+try{
+	var no_result_text = eval(tooltip_noResultArray);
+}catch(e){
+	var no_result_text = ["Kein Ergebnis.",'<body onLoad="javascript:window.close()">'];
+}
+var mouseMoves=0;
+var tooltipWin=null;
+var point;
+var tooltipWfsRequestCount = 0;
+var tooltipWmsRequestCount = 0;
+var numberOfFinishedWfsRequests = 0;
+var numberOfFinishedWmsRequests = 0;
+var visibleRequest = 0;
+var TooltipMsg = {'title':"<?php echo _mb("Information");?>"};
+
+//buttonWfs_toDigitize_on ="0";
+
+function mod_tooltipInit(){
+var tooltip_map = getMapObjByName(tooltipTarget);
+var ind = getMapObjIndexByName(tooltipTarget);
+var myMapObj = mb_mapObj[ind];		
+
+var map_el = myMapObj.getDomElement();
+
+	$(map_el.ownerDocument).mousemove(function(event){
+		var point = tooltip_map.getMousePos(event);
+		//mb_getMousePos(event,myMapObj.getMousePosition(event));
+		mod_tooltip_run();
+	}).mouseout(function(){mouseMoves=0;});
+}
+
+eventInit.register(mod_tooltipInit);
+
+function mod_tooltip_run(){
+	mouseMoves++;
+	setTimeout("if(mouseMoves=="+mouseMoves+"&&clickX=="+clickX+"&&clickY=="+clickY+")fireRequests();",tooltip_timeDelay);
+}
+
+function fireRequests(){
+	var ind = getMapObjIndexByName(tooltipTarget);
+	point = new Point(clickX,clickY);
+	var point_geom = new Geometry(geomType.point);
+	point_geom.addPoint(mapToReal(tooltipTarget,point));
+	visibleRequest = 0;
+	
+	//FeatureInfo requests
+	urls = mb_mapObj[ind].getFeatureInfoRequests(point);
+	tooltipWmsRequestCount = urls.length;
+	numberOfFinishedWmsRequests	= 0;	
+	for(var j=0;j < urls.length;j++){
+		mb_ajax_post("../extensions/ext_featureInfoTunnel.php", {url:urls[j]}, 
+			checkFeatureInfoResults);
+	}
+	
+	//WFS requests
+	requests = getWfsRequests(tooltipTarget, point_geom, true);
+	tooltipWfsRequestCount = requests.length;
+	numberOfFinishedWfsRequests = 0;
+	resultGeomArray = new GeometryArray();
+	for(var j=0;j< requests.length;j++){
+		mb_ajax_post("../" + wfsResultModulePath + wfsResultModuleFilename,requests[j],function(js_code,status){
+			if (js_code) {
+				eval(js_code);
+			}
+			if (typeof(geom) == "undefined") {
+				var geom = new GeometryArray();
+			}
+			checkWfsResultsFinished(geom);
+		});
+	}
+}
+
+function checkFeatureInfoResults(js_code,status){
+	numberOfFinishedWmsRequests++;
+
+	//check if there are results
+	if(js_code == ""){
+		if(!isFirstResult())
+			displayResultDoc("");
+		return;
+	}
+	
+	for(var k=0;k < no_result_text.length;k++){
+		if(js_code.indexOf(no_result_text[k])!==-1){
+			if(!isFirstResult())
+				displayResultDoc("");
+			return;
+		}
+	}
+
+	//output code
+	displayResultDoc(js_code);
+}
+
+function checkWfsResultsFinished(g){
+	//check if all wfs requests arrived
+	numberOfFinishedWfsRequests++;
+	if (typeof(g) == 'object'){
+		resultGeomArray.union(g);
+	}
+	if (numberOfFinishedWfsRequests == tooltipWfsRequestCount) {
+		if(resultGeomArray.count()>0){
+			//generate and output result
+			if(resultGeomArray.count()>1)
+				var html = createSimpleWfsResultHtml(resultGeomArray);
+			else
+				var html = createDetailedWfsResultHtml(resultGeomArray);
+			displayResultDoc(html);
+		}
+		else if(!isFirstResult())
+			displayResultDoc("");
+	}
+}
+
+function isFirstResult(){
+	return visibleRequest == 0;
+}
+
+function isLastResult(){
+	return (numberOfFinishedWfsRequests == tooltipWfsRequestCount && numberOfFinishedWmsRequests == tooltipWmsRequestCount);
+}
+
+function displayResultDoc(html){
+	//test if we have a fixed destination and create popup otherwise
+	if(tooltip_destinationFrame=="")
+		return showBalloonFrame(html);
+          	
+	//put the frame there
+	$("#"+tooltip_destinationFrame).each(function(){
+	    var oDoc = this.contentWindow || this.contentDocument;
+	    if (oDoc.document) {
+	        oDoc = oDoc.document;
+		}
+		if(isFirstResult())
+	  		oDoc.open();
+		oDoc.write(html);
+		if(isLastResult())
+			oDoc.close();
+	});	
+	visibleRequest++;
+}
+
+function showBalloonFrame(html){
+	if(isFirstResult()){
+		//claculate Position
+		x=point.x+parseInt(document.getElementById(tooltipTarget).style.left);
+		y=point.y+parseInt(document.getElementById(tooltipTarget).style.top);
+		
+		//hide old Popup
+		if(tooltipWin&&tooltipWin.isVisible())
+			tooltipWin.destroy();
+	
+		//create Popup and append document
+		tooltipWin = new mb_popup({html:'<iframe id="tooltipWin" name="tooltipWin" src="about:blank"/>',title:TooltipMsg.title,width:tooltip_width,height:tooltip_height,balloon:true,left:x,top:y});
+		//open document
+		tooltipWin.open();
+	}
+	tooltipWin.write(html);
+	
+	if(isLastResult()){
+		tooltipWin.close();
+	}
+		
+	//finally display popup
+	tooltipWin.show();
+}
+
+function getWfsRequests(target, geom, checkscale, filteroption){
+	//get all configurations
+	wfs_config = get_complete_wfs_conf();
+	var ind = getMapObjIndexByName(target);
+	var db_wfs_conf_id = [];
+	var js_wfs_conf_id = [];
+	
+	//search configurations that are selected (and in scale)
+	for (var i=0; i < mb_mapObj[ind].wms.length; i++){
+		for(var ii=0; ii < mb_mapObj[ind].wms[i].objLayer.length; ii++){
+			var o = mb_mapObj[ind].wms[i].objLayer[ii];
+			if(o.gui_layer_wfs_featuretype != '' && o.gui_layer_querylayer == '1'){
+				if(!checkscale || o.checkScale(mb_mapObj[ind]))
+					db_wfs_conf_id[db_wfs_conf_id.length] = o.gui_layer_wfs_featuretype;
+			}
+		}
+	}
+	for(var i=0; i < db_wfs_conf_id.length; i++){
+		for(var ii=0; ii < wfs_config.length; ii++){
+			if(wfs_config[ii]['wfs_conf_id'] == db_wfs_conf_id[i]){
+				js_wfs_conf_id[js_wfs_conf_id.length] = ii;
+				break;
+			}
+		}
+	}
+
+	//build requests
+	var requests = [];
+	
+	for(var i=0;i < js_wfs_conf_id.length; i++){
+		//build url
+		var url = wfs_config[js_wfs_conf_id[i]]['wfs_getfeature'];
+		url += mb_getConjunctionCharacter(wfs_config[js_wfs_conf_id[i]]['wfs_getfeature']);
+		url += "service=wfs&request=getFeature&version=1.0.0";
+		url += "&typename="+ wfs_config[js_wfs_conf_id[i]]['featuretype_name'];
+		url += "&filter=";
+	
+		//search for geometry column
+		var geometryCol;
+		for(var j=0; j < wfs_config[js_wfs_conf_id[i]]['element'].length; j++){
+			if(wfs_config[js_wfs_conf_id[i]]['element'][j]['f_geom'] == 1){
+				geometryCol = wfs_config[js_wfs_conf_id[i]]['element'][j]['element_name'];
+			}
+		}
+		
+		//get filter
+		var filter = new WfsFilter();
+		filter.addSpatial(geom, geometryCol, filteroption, wfs_config[js_wfs_conf_id[i]]['featuretype_srs'], target);
+
+		requests.push({'url':url,'filter':filter.toString(), 'typename':wfs_config[js_wfs_conf_id[i]]['featuretype_name'],'js_wfs_conf_id':js_wfs_conf_id[i], 'db_wfs_conf_id':db_wfs_conf_id[i]});
+	}
+	
+	return requests;
+}
+
+function createSimpleWfsResultHtml(_geomArray){
+	var geometryIndex = 0;
+	wfsConf = get_complete_wfs_conf();
+	var html = '<html><head><style type="text/css">';
+	html += tooltip_styles;
+	html += "</style></head><body><table>\n";
+
+	for (var i = 0 ; i < _geomArray.count(); i ++) {
+		if (_geomArray.get(i).get(-1).isComplete()) {
+			html += "\t<tr class='list_"+(i%2?"uneven":"even")+"'>\n\t\t<td \n";
+//			html += "\t\t\t onmouseover='mb_wfs_perform(\"over\",_geomArray.get("+i+"));' ";
+//			html += " onmouseout='mb_wfs_perform(\"out\",_geomArray.get("+i+"))' ";
+//			html += " onclick='mb_wfs_perform(\"click\",_geomArray.get("+i+"));' ";
+			var geomName = getWfsListEntry(_geomArray.get(i)); 
+			html += ">" + geomName +"</td>";
+			html += "\t\t</tr>\n"; 
+		}
+	}
+
+	html += "</table></body>\n";
+	return html;
+}
+
+function createDetailedWfsResultHtml(_geomArray){
+	var geometryIndex = 0;
+	var cnt = 0;
+	wfsConf = get_complete_wfs_conf();
+	var html = '<html><head><style type="text/css">';
+	html += tooltip_styles_detail;
+	html += "</style></head><body><table>\n";	
+		
+	var wfsConfIndex = _geomArray.get(geometryIndex).wfs_conf;
+	var currentWfsConf = wfsConf[wfsConfIndex];
+	for (var i = 0 ; i <currentWfsConf.element.length; i ++) {
+	    if(currentWfsConf.element[i].f_show_detail==1){
+	    	if( _geomArray.get(geometryIndex).e.getElementValueByName(currentWfsConf.element[i].element_name)!=false){
+				html +="<tr class='list_"+(cnt%2?"uneven":"even")+"'><td>\n"; 
+				html += currentWfsConf.element[i].f_label;
+				html +="</td>\n"; 
+				html += "<td>\n";
+				var elementVal = _geomArray.get(geometryIndex).e.getElementValueByName(currentWfsConf.element[i].element_name); 
+				if(currentWfsConf.element[i].f_form_element_html.indexOf("href")!=-1){
+					var setUrl = currentWfsConf.element[i].f_form_element_html.replace(/href\s*=\s*['|"]\s*['|"]/, "href='"+elementVal+"' target='_blank'");
+					if(setUrl.match(/><\/a>/)){
+						var newLink	=	setUrl.replace(/><\/a>/, ">"+elementVal+"</a>");
+					}
+					else{
+						var newLink = setUrl;
+					}
+					html +=  newLink;
+				}
+				else{
+					html += elementVal;
+				}
+				html += "</td></tr>\n";
+				cnt++;
+			}
+		}
+	}
+	
+	html += "</table></body>\n";
+	return html;
+}
+
+
+function getWfsListEntry (geom) {
+	wfsConfId = geom.wfs_conf;
+	wfsConf = window.frames["wfs_conf"].get_wfs_conf();
+	if (typeof(wfsConfId) == "number" && wfsConfId >=0 && wfsConfId < wfsConf.length) {
+		var resultArray = [];
+		for (var i = 0 ; i < wfsConf[wfsConfId]['element'].length ; i++) {
+			if (wfsConf[wfsConfId]['element'][i]['f_show'] == 1 && geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']) !=false) {
+				var pos = wfsConf[wfsConfId]['element'][i]['f_respos'];
+				if (typeof(resultArray[pos]) != "undefined") {
+					resultArray[pos] += " " + geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']);
+				}
+				else {
+					resultArray[pos] = geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']);
+				} 
+			}
+		}
+		var resultName = resultArray.join(" ");
+		if (resultName == "") {
+			resultName = wfsConf[wfsConfId]['g_label'];
+		}
+		return resultName;
+	}
+	else {
+		return false;
+	}
+}
+



More information about the Mapbender_commits mailing list