[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