[Mapbender-commits] r2279 - branches/nimix_dev/http/javascripts

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu Mar 20 08:58:08 EDT 2008


Author: nimix
Date: 2008-03-20 08:58:08 -0400 (Thu, 20 Mar 2008)
New Revision: 2279

Modified:
   branches/nimix_dev/http/javascripts/tooltip.php
Log:
wfs requests through tooltip

Modified: branches/nimix_dev/http/javascripts/tooltip.php
===================================================================
--- branches/nimix_dev/http/javascripts/tooltip.php	2008-03-20 12:56:52 UTC (rev 2278)
+++ branches/nimix_dev/http/javascripts/tooltip.php	2008-03-20 12:58:08 UTC (rev 2279)
@@ -18,13 +18,28 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 require_once(dirname(__FILE__)."/../php/mb_validatePermission.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';
 ?>
 var testttt=0;
 var tooltipWin=null;
+var point;
+var mb_wfs_tolerance = 20;
+var numberOfFinishedAjaxCalls = 0;
+buttonWfs_toDigitize_on ="0";
 
 eventInit.register(function(){
-	console.log($("#mapframe1").length+"init");
 	$(window.frames["mapframe1"].document).mousemove(function(event){
 		eventMouseMove.trigger();
 		mb_getMousePos(event,"mapframe1");
@@ -35,14 +50,224 @@
 	if(tooltipWin&&tooltipWin.isVisible())
 		tooltipWin.destroy();
 	testttt++;
-	setTimeout("if(testttt=="+testttt+")showBalloon();",2000);
+	setTimeout("if(testttt=="+testttt+")requestWfs();",500);
 });
 
-function showBalloon(){
+function showWMSBalloon(){
 	x=clickX+parseInt(document.getElementById("mapframe1").style.left);
 	y=clickY+parseInt(document.getElementById("mapframe1").style.top);
 	if(tooltipWin&&tooltipWin.isVisible())
 		tooltipWin.destroy();
-	tooltipWin = new mb_popup({title:"Test Tooltip",width:200,height:120,balloon:true,left:x,top:y});
+	var ind = getMapObjIndexByName("mapframe1");
+	req = mb_mapObj[ind].getFeatureInfoRequests({x:clickX,y:clickY});
+	if(req)
+		tooltipWin = new mb_popup({url:req[0],title:"Feature Info",width:270,height:200,balloon:true,left:x,top:y});
 	tooltipWin.show();
 }
+
+function showWFSBalloon(geom){
+	x=point.x+parseInt(document.getElementById("mapframe1").style.left);
+	y=point.y+parseInt(document.getElementById("mapframe1").style.top);
+	if(tooltipWin&&tooltipWin.isVisible())
+		tooltipWin.destroy();
+	tooltipWin = new mb_popup({title:searchPopupTitle,html:createListOfGeometries(),width:270,height:150,balloon:true,left:x,top:y});
+	tooltipWin.show();
+}
+
+function requestWfs(){
+	point = new Point(clickX, clickY);
+	if(tooltipWin&&tooltipWin.isVisible())
+		tooltipWin.destroy();
+		
+	var ind = getMapObjIndexByName("mapframe1");
+	var db_wfs_conf_id = [];
+	js_wfs_conf_id = [];
+	_geomArray = new GeometryArray();
+	
+	if (typeof(resultGeometryPopup) != "undefined") {
+		resultGeometryPopup.hide();
+	}
+	
+	wfs_config = window.frames["wfs_conf"].get_wfs_conf();
+	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(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;
+		}
+	}
+	
+	numberOfAjaxCalls_ =  js_wfs_conf_id.length;
+	
+
+
+	var buffer = mb_wfs_tolerance/2;
+	var mapPosXAddPix = clickX + buffer; 
+	var mapPosYAddPix = clickY + buffer;
+	var mapPosXRemovePix = clickX - buffer;
+	var mapPosYRemovePix = clickY - buffer;
+	var realWorld1 = makeClickPos2RealWorldPos("mapframe1",mapPosXRemovePix,mapPosYRemovePix);
+	var realWorld2 = makeClickPos2RealWorldPos("mapframe1",mapPosXAddPix,mapPosYRemovePix);
+	var realWorld3 = makeClickPos2RealWorldPos("mapframe1",mapPosXAddPix,mapPosYRemovePix);
+	var realWorld4 = makeClickPos2RealWorldPos("mapframe1",mapPosXRemovePix,mapPosYAddPix);
+	for(var i=0; i<js_wfs_conf_id.length; i++){
+		var url = wfs_config[js_wfs_conf_id[i]]['wfs_getfeature'];
+		param = "service=wfs&request=getFeature&version=1.0.0&typename="+ wfs_config[js_wfs_conf_id[i]]['featuretype_name']+"&filter=";
+		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_config[js_wfs_conf_id[i]]['element'].length; j++){
+			if(wfs_config[js_wfs_conf_id[i]]['element'][j]['f_geom'] == 1){
+				filter += wfs_config[js_wfs_conf_id[i]]['element'][j]['element_name'];
+			}
+		}
+		filter += "</ogc:PropertyName><gml:Polygon srsName='4326'><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>";
+		url += param;
+		mb_get_geom_(url, filter, i, wfs_config[js_wfs_conf_id[i]]['featuretype_name'], js_wfs_conf_id[i], db_wfs_conf_id[i]);
+	}
+	return true;
+}
+function mb_get_geom_(url, filter, index, typename, js_wfs_conf_id, db_wfs_conf_id) {
+	
+	mb_ajax_post("../" + wfsResultModulePath + wfsResultModuleFilename,{'url':url,'filter':filter,'typename':typename,'js_wfs_conf_id':js_wfs_conf_id, 'db_wfs_conf_id':db_wfs_conf_id},function(js_code,status){
+		if (js_code) {
+			eval(js_code);
+		}
+		if (typeof(geom) == "undefined") {
+			var geom = new GeometryArray();
+		}
+		checkIfAllAjaxCallsFinished_(geom);
+	});
+}
+
+function checkIfAllAjaxCallsFinished_ (geom) {
+	numberOfFinishedAjaxCalls++;
+	if (typeof(geom) == 'object'){
+		_geomArray.union(geom);
+	}
+	if (numberOfFinishedAjaxCalls == numberOfAjaxCalls_) {
+		numberOfFinishedAjaxCalls = 0;
+		if(_geomArray.count()>0)
+			showWFSBalloon(_geomArray);
+	}
+}
+
+function createListOfGeometries(){
+	if(_geomArray.count()>1){
+		var listOfGeom = "<table style='background-color:#EEEEEE;'>\n";
+		if (_geomArray.count() > 0) {
+			if(buttonWfs_toDigitize_on==1){
+				listOfGeom += "<tr><td style='color:black;font-size:12px;'>edit all</td>\n";
+				listOfGeom += "<td><img title='edit all' src='"+buttonWfs_toDigitize_src+"'  style='cursor:pointer' onclick='appendGeometryArrayToDigitize(_geomArray);'></img>";
+				listOfGeom += "</td>\n</tr>\n";
+				listOfGeom += "<tr>\n<td>&nbsp;</td>\n</tr>\n"; 
+			}
+			for (var i = 0 ; i < _geomArray.count(); i ++) {
+				if (_geomArray.get(i).get(-1).isComplete()) {
+					listOfGeom += "\t<tr>\n\t\t<td style = 'color:blue;font-size:12px;cursor:pointer;'\n";
+					listOfGeom += "\t\t\t onmouseover='mb_wfs_perform(\"over\",_geomArray.get("+i+"));' ";
+					listOfGeom += " onmouseout='mb_wfs_perform(\"out\",_geomArray.get("+i+"))' ";
+					listOfGeom += " onclick='mb_wfs_perform(\"click\",_geomArray.get("+i+"));' ";
+					var geomName = getListTitle(_geomArray.get(i)); 
+					//if (_geomArray.get(i).geomType == geomType.polygon) {geomName += "(polygon)";}
+					//else if (_geomArray.get(i).geomType == geomType.line) {geomName += "(line)";}
+					//else if (_geomArray.get(i).geomType == geomType.point) {geomName += "(point)";}
+					listOfGeom += ">" + geomName +"</td>";
+					if(buttonWfs_toDigitize_on==1){
+						listOfGeom += "<td><img title='edit geometry object' src='"+buttonWfs_toDigitize_src+"'  style='cursor:pointer' onclick='appendGeometryToDigitize("+i+");'></img></td>";
+					}
+					listOfGeom += "\t\t</tr>\n"; 
+				}
+			}
+		}
+		listOfGeom += "</table>\n";
+		return listOfGeom; 
+	}
+	else{
+		geometryIndex = 0;
+		wfsConf = get_complete_wfs_conf();
+		var wfsConfIndex = _geomArray.get(0).wfs_conf;
+		var currentWfsConf = wfsConf[wfsConfIndex];
+		
+		var resultHtml = "";
+		resultHtml += "<table style='background-color:#EEEEEE;'>\n";
+		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){
+					//console.log(currentWfsConf.element[i].element_name+"---"+currentWfsConf.element[i].f_respos);
+					resultHtml +="<tr><td>\n"; 
+					resultHtml += currentWfsConf.element[i].f_label;
+					resultHtml +="</td>\n"; 
+					resultHtml += "<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;
+						}
+						if(openLinkFromSearch=='1'){
+							window.open(elementVal, elementVal,"width=500, height=400,left=100,top=100,scrollbars=yes");
+						}			
+						resultHtml +=  newLink;
+					}
+					else{
+						resultHtml += elementVal;
+					}
+					resultHtml += "</td></tr>\n";		
+				}
+			}
+		}
+		resultHtml += "</table>\n";
+		return resultHtml;
+	}
+}
+
+function isValidWfsConfIndex (wfsConf, wfsConfIndex) {
+	return (typeof(wfsConfIndex) == "number" && wfsConfIndex >=0 && wfsConfIndex < wfsConf.length);
+}
+
+function Numsort (a, b) {
+  return a - b;
+}
+
+function getListTitle (geom) {
+	wfsConfId = geom.wfs_conf;
+	wfsConf = window.frames["wfs_conf"].get_wfs_conf();
+	if (isValidWfsConfIndex(wfsConf, wfsConfId)) {
+		var resultArray = [];
+		var resultName = "";
+		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']);
+				} 
+				resultName += geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']) + " ";
+			}
+		}
+		resultArray.sort(Numsort);
+		var resultName = resultArray.join(" ");
+		if (resultName == "") {
+			resultName = wfsConf[wfsConfId]['g_label'];
+		}
+		return resultName;
+	}
+	else {
+		return msgObj.digitizeDefaultGeometryName;
+	}
+}



More information about the Mapbender_commits mailing list