[Mapbender-commits] r2883 - in branches/nimix_dev/http: classes html javascripts

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Tue Aug 19 09:58:29 EDT 2008


Author: nimix
Date: 2008-08-19 09:58:29 -0400 (Tue, 19 Aug 2008)
New Revision: 2883

Added:
   branches/nimix_dev/http/javascripts/gg.js
Modified:
   branches/nimix_dev/http/classes/class_gui.php
   branches/nimix_dev/http/html/mod_treefolder2.php
   branches/nimix_dev/http/javascripts/popup.js
   branches/nimix_dev/http/javascripts/tooltip_wms.php
Log:
some changes

Modified: branches/nimix_dev/http/classes/class_gui.php
===================================================================
--- branches/nimix_dev/http/classes/class_gui.php	2008-08-19 10:33:53 UTC (rev 2882)
+++ branches/nimix_dev/http/classes/class_gui.php	2008-08-19 13:58:29 UTC (rev 2883)
@@ -18,6 +18,7 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 require_once(dirname(__FILE__)."/../../core/globalSettings.php");
+require_once(dirname(__FILE__)."/../classes/class_element.php");
 
 /**
  * GUI is a set of GUI elements and services. 

Modified: branches/nimix_dev/http/html/mod_treefolder2.php
===================================================================
--- branches/nimix_dev/http/html/mod_treefolder2.php	2008-08-19 10:33:53 UTC (rev 2882)
+++ branches/nimix_dev/http/html/mod_treefolder2.php	2008-08-19 13:58:29 UTC (rev 2883)
@@ -128,7 +128,7 @@
 //var menu_layer_switch = ['menu_zoom', ['Zjjj ', 'javascript:var sd = "{@strData}";eval(eval(sd.substr(0, sd.length-6))[1][1]);openwindow(defaultMetadataUrl + "&id="+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_uid);',,'info.png']];
 //var menu_info_switch = ['menu_zoom', ['Zmn ', 'javascript:var sd = "{@strData}";eval(eval(sd.substr(0, sd.length-6))[1][1]);openwindow(defaultMetadataUrl + "&id="+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_uid);',,'info.png']];
 
-parent.eventMapRequestFailed.register(function(t){imgerror(t)});
+//parent.eventMapRequestFailed.register(function(t){imgerror(t)});
 
 parent.eventAfterLoadWMS.register(reloadTree);
 parent.eventInit.register(loadTree);

Added: branches/nimix_dev/http/javascripts/gg.js
===================================================================
--- branches/nimix_dev/http/javascripts/gg.js	                        (rev 0)
+++ branches/nimix_dev/http/javascripts/gg.js	2008-08-19 13:58:29 UTC (rev 2883)
@@ -0,0 +1,143 @@
+function getPolygonFilter(geom, wfs_conf, filteroption){
+	var filter = "<ogc:Filter xmlns:ogc=\"http://ogc.org\" xmlns:gml=\"http://www.opengis.net/gml\">";
+
+	if(filteroption=='within')
+		filter += "<Within>";
+	else
+		filter += "<Intersects>";
+
+	filter += "<ogc:PropertyName>";
+	for(var j=0; j<wfs_conf['element'].length; j++){
+		if(wfs_conf['element'][j]['f_geom'] == 1){
+			filter += wfs_conf['element'][j]['element_name'];
+		}
+	}
+	filter += "</ogc:PropertyName><gml:Polygon srsName=\""+wfs_conf['featuretype_srs']+"\">";
+	filter += "<gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>";
+	for(var k=0; k<geom.count(); k++){
+		if(k>0)	filter += " ";
+		filter += geom.get(k).x+","+geom.get(k).y;
+	}
+	filter += "</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>";
+	filter += "</gml:Polygon>";
+
+	if(filteroption=='within')
+		filter += "</Within>";
+	else
+		filter += "</Intersects>";
+
+	filter += '</ogc:Filter>';
+	
+	return filter;
+}
+
+function getLineFilter(rect, wfs_conf, filteroption){
+	var filter = "<ogc:Filter xmlns:ogc='http://ogc.org' xmlns:gml='http://www.opengis.net/gml'>";
+
+	if(filteroption=='within')
+		filter += "<Within>";
+	else
+		filter += "<Intersects>";
+
+	filter += "<ogc:PropertyName>";
+	for(var j=0; j<wfs_conf['element'].length; j++){
+		if(wfs_conf['element'][j]['f_geom'] == 1){
+			filter += wfs_conf['element'][j]['element_name'];
+		}
+	}
+	filter += "</ogc:PropertyName><gml:Polygon srsName='"+wfs_conf['featuretype_srs']+"'>";
+	filter += "<gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>";
+	filter += rect[0].x+","+rect[0].y;
+	filter += " ";
+	filter += rect[0].x+","+rect[1].y;
+	filter += " ";
+	filter += rect[1].x+","+rect[1].y;
+	filter += " ";
+	filter += rect[1].x+","+rect[0].y;
+	filter += " ";
+	filter += rect[0].x+","+rect[0].y;
+	filter += "</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs>";
+	filter += "</gml:Polygon>";
+
+	if(filteroption=='within')
+		filter += "</Within>";
+	else
+		filter += "</Intersects>";
+
+	filter += "</ogc:Filter>";
+	
+	return filter;
+}
+
+function getPointFilter(point, wfs_conf, target){
+	var mapPos = makeRealWorld2mapPos(target,point.x, point.y);
+	var buffer = mb_wfs_tolerance/2;
+	var realWorld1 = makeClickPos2RealWorldPos(target,mapPos[0]-buffer,mapPos[1]-buffer);
+	var realWorld2 = makeClickPos2RealWorldPos(target,mapPos[0]+buffer,mapPos[1]-buffer);
+	var realWorld3 = makeClickPos2RealWorldPos(target,mapPos[0]+buffer,mapPos[1]+buffer);
+	var realWorld4 = makeClickPos2RealWorldPos(target,mapPos[0]-buffer,mapPos[1]+buffer);
+	var filter = "<ogc:Filter xmlns:ogc='http://ogc.org' xmlns:gml='http://www.opengis.net/gml'>";
+
+	filter += "<Intersects><ogc:PropertyName>";
+	for(var j=0; j<wfs_conf['element'].length; j++){
+		if(wfs_conf['element'][j]['f_geom'] == 1){
+			filter += wfs_conf['element'][j]['element_name'];
+		}
+	}
+	filter += "</ogc:PropertyName><gml:Polygon srsName='"+srs+"'><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>";
+	filter += realWorld1[0] + "," + realWorld1[1] + " " + realWorld2[0] + "," + realWorld2[1] +  " ";
+	filter += realWorld3[0] + "," + realWorld3[1] + " " + realWorld4[0] + "," + realWorld4[1] + " " + realWorld1[0] + "," + realWorld1[1];
+	filter += "</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></Intersects></ogc:Filter>";
+
+	return filter;
+}
+
+function getWfsRequests(target, geom, checkscale, filteroption){
+	//get all configurations
+	wfs_config = get_complete_wfs_conf();
+	var ind = getMapObjIndexByName(target);
+	
+	//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' && o.gui_layer_visible == '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=";
+	
+		//get filter
+		var filter;
+		if(geom.geomType==geomType.polygon)
+			filter = getPolygonFilter(geom, wfs_config[js_wfs_conf_id[i]], filteroption);
+		else if(queryGeom.geomType==geomType.line)
+			filter = getLineFilter(geom.getBBox(), wfs_config[js_wfs_conf_id[i]], filteroption);
+		else if(queryGeom.geomType == geomType.point)
+			filter = getPointFilter(geom.get(0), wfs_config[js_wfs_conf_id[i]], target);
+		
+		requests.push({'url':url,'filter':filter, '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;
+}

Modified: branches/nimix_dev/http/javascripts/popup.js
===================================================================
--- branches/nimix_dev/http/javascripts/popup.js	2008-08-19 10:33:53 UTC (rev 2882)
+++ branches/nimix_dev/http/javascripts/popup.js	2008-08-19 13:58:29 UTC (rev 2883)
@@ -62,13 +62,12 @@
 		top:25*create_pos,
 		width:300,height:250,
 		title:"Title",
-		frameName:id,
-		id:id
+		frameName:this.id,
+		id:this.id
 	};
 
 	if(typeof(title)!='object'){
 		this.options = defaults;
-		this.options.id = id;
 		
 		//Set vars
 		if(posx)this.options.left=posx;

Modified: branches/nimix_dev/http/javascripts/tooltip_wms.php
===================================================================
--- branches/nimix_dev/http/javascripts/tooltip_wms.php	2008-08-19 10:33:53 UTC (rev 2882)
+++ branches/nimix_dev/http/javascripts/tooltip_wms.php	2008-08-19 13:58:29 UTC (rev 2883)
@@ -17,20 +17,26 @@
 # 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");
+require_once(dirname(__FILE__)."/../php/mb_validateSession.php");
 
 echo "var tooltipTarget ='".$e_target[0]."';"; 
 
 include '../include/dyn_js.php';
 ?>
+<?php
+require_once(dirname(__FILE__)."/gg.js");
+?>
 
 //destination frame for the request (creates Popup if empty)
-var destFrameName = "tooltip";
+var destFrameName = "";
 var tooltipTime = 1000;
-var no_result_text = ["Kein Ergebnis."];
+var no_result_text = ["Kein Ergebnis.",'<body onLoad="javascript:window.close()">'];
 var mouseMoves=0;
 var tooltipWin=null;
 var point;
+var tooltipWfsRequestCount = 0;
+var numberOfFinishedWfsRequests = 0;
+
 //buttonWfs_toDigitize_on ="0";
 
 function mod_tooltipInit(){
@@ -44,45 +50,86 @@
 
 function mod_tooltip_run(){
 	mouseMoves++;
-	setTimeout("if(mouseMoves=="+mouseMoves+")fireFeatureInfo();",tooltipTime);
+	setTimeout("if(mouseMoves=="+mouseMoves+")fireRequests();",tooltipTime);
 }
 
-function fireFeatureInfo(){
+function fireRequests(){
 	var ind = getMapObjIndexByName(tooltipTarget);
 	point = new Point(clickX,clickY);
+	
+	//FeatureInfo requests
 	urls = mb_mapObj[ind].getFeatureInfoRequests(point);
-
 	for(var j=0;j < urls.length;j++){
-		mb_ajax_post("../x_tour_rlp/ext_featureInfoTunnel.php?url="+escape(urls[j]), null, function(js_code,status){
-			for(var k=0;k < no_result_text.length;k++){
-				if(js_code.indexOf(no_result_text[k])!==-1)
-					return;
+		mb_ajax_post("../extensions/ext_featureInfoTunnel.php?url="+escape(urls[j]), null, 
+			checkFeatureInfoResults);
+	}
+	
+	//WFS requests
+	requests = getWfsRequests(tooltipTarget, checkscale, filteroption)
+	tooltipWfsRequestCount = requests.length;
+	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);
 			}
-
-			//test if we have a fixed destination and create popup otherwise
-			if(destFrameName=="")
-				showWmsBalloon(js_code);
-            	
-			//if so put the frame there
-			$("#"+destFrameName).each(function(){
-			    var oDoc = this.contentWindow || this.contentDocument;
-			    if (oDoc.document) {
-			        oDoc = oDoc.document;
-				}
-    			oDoc.open();
-				oDoc.write(js_code);
-				oDoc.close();
-			});
+			if (typeof(geom) == "undefined") {
+				var geom = new GeometryArray();
+			}
+			checkWfsResultsFinished(geom);
 		});
 	}
 }
 
-function showWMSBalloon(html){
+function checkFeatureInfoResults(s_code,status){
+	//check if there are results
+	for(var k=0;k < no_result_text.length;k++){
+		if(js_code.indexOf(no_result_text[k])!==-1)
+			return;
+	}
+
+	//output code
+	displayResultDoc(js_code);
+}
+
+function checkWfsResultsFinished(g){
+	numberOfFinishedWfsRequests++;
+	if (typeof(geom) == 'object'){
+		resultGeomArray.union(g);
+	}
+	if (numberOfFinishedWfsRequests == tooltipWfsRequestCount) {
+		numberOfFinishedWfsRequests = 0;
+		if(resultGeomArray.count()>0)
+			generateWfsResult(resultGeomArray);
+	}
+}
+
+function displayResultDoc(html){
+	//test if we have a fixed destination and create popup otherwise
+	if(destFrameName=="")
+		return showBalloonFrame(html);
+          	
+	//put the frame there
+	$("#"+destFrameName).each(function(){
+	    var oDoc = this.contentWindow || this.contentDocument;
+	    if (oDoc.document) {
+	        oDoc = oDoc.document;
+		}
+  			oDoc.open();
+		oDoc.write(html);
+		oDoc.close();
+	});	
+}
+
+function showBalloonFrame(html){
+	//claculate Position
 	x=clickX+parseInt(document.getElementById(tooltipTarget).style.left);
 	y=clickY+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:"Feature Info",width:270,height:200,balloon:true,left:x,top:y});
 	$("#"+tooltipWin.id+" iframe").each(function(){
 	    var oDoc = this.contentWindow || this.contentDocument;
@@ -91,5 +138,60 @@
 		}
 		oDoc.write(html);
 	});
+	
+	//finally display popup
 	tooltipWin.show();
-}    
+}
+
+function getWfsRequests(target, geom, checkscale, filteroption){
+	//get all configurations
+	wfs_config = get_complete_wfs_conf();
+	var ind = getMapObjIndexByName(target);
+	
+	//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' && o.gui_layer_visible == '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;
+}



More information about the Mapbender_commits mailing list