/* COPYRIGHT: (C) 2001 by ccgis. This program is free software under the GNU General Public * License (>=v2). Read the file gpl.txt that comes with Mapbender for details. */ /*GLOBALS*/ var ie = document.all?1:0; var n6 = document.getElementById&&!document.all?1:0; var n4 = document.layers?1:0; var mb_feature_count = 100; var mb_resolution = 28.35; var mb_mapObj = new Array(); var mb_fiWin = null; var mb_panActive = false; var clickX; var clickY; var mb_start_x = 0; var mb_start_y = 0; var mb_end_x = 0; var mb_end_y = 0; var mb_offset_top = 0; var mb_offset_right = 0; var mb_offset_bottom = 0; var mb_offset_left = 0; var mb_log = null; var mb_MapRequestSubFunctions = new Array(); var mb_MapRequestPreFunctions = new Array(); var mb_FeatureInfoPreFunctions = new Array(); var mb_PanSubElements = new Array(); var mb_InitFunctions = new Array(); var mb_MapObjectSubFunctions = new Array(); var mb_GetScalePreFunctions = new Array(); var mb_vendorSpecific = new Array(); var mb_loadWmsSubFunctions = new Array(); var mb_security_proxy = "http://wms1.ccgis.de/mapbender/tools/security_proxy.php?mb_ows_security_proxy="; var mb_trans = new Image; mb_trans.src = "../img/transparent.gif"; /*END OF GLOBALS*/ function init(){ for(var i=0; i0){ if(cnt_layers > 0){layers += ","; styles += ","; } layers += this.wms[0].objLayer[ii].layer_name; styles += ""; cnt_layers++; } if(this.wms[0].objLayer[ii].gui_layer_querylayer == 1 && ii>0){ if(cnt_querylayers > 0){querylayers += ",";} querylayers += this.wms[0].objLayer[ii].layer_name; cnt_querylayers++; } } this.layers[0] = layers; this.styles[0] = styles; this.querylayers[0] = querylayers; } else{ this.wms = new Array(); for(i=0; i0){ if(cnt_layers > 0){layers += ","; styles += ","; } layers += wms[i].objLayer[ii].layer_name; styles += ""; cnt_layers++; } if(this.wms[i].objLayer[ii].gui_layer_querylayer == 1 && ii>0){ if(cnt_querylayers > 0){querylayers += ",";} querylayers += wms[i].objLayer[ii].layer_name; cnt_querylayers++; } } this.layers[i] = layers; this.styles[i] = styles; this.querylayers[i] = querylayers; } } this.epsg = wms[0].gui_wms_epsg; this.extent = setExtent(this.width,this.height,this.epsg); this.mapURL = new Array(); for(var i=0; i= 0 && fromIndex < mb_mapObj[mapObj_ind].wms.length && toIndex >= 0 && toIndex < mb_mapObj[mapObj_ind].wms.length) { var changed = false; if (fromIndex > toIndex) { for (var i = fromIndex; i > toIndex ; i--) { var result = mb_swapWmsByIndex(mapObj_ind, i-1, i); if (result == true) changed = true; } } else { for (var i = fromIndex; i < toIndex ; i++) { var result = mb_swapWmsByIndex(mapObj_ind, i, i+1); if (result == true) changed = true; } } return changed; } else { return false; } } function mb_swapWmsById(mapObj_ind, wms1_id, wms2_id) { return mb_swapWmsByIndex(mapObj_ind, getWMSIndexById(mapObj_ind, wms1_id), getWMSIndexById(mapObj_ind, wms2_id)); } function mb_swapWmsByIndex(mapObj_ind, indexA, indexB) { if (indexA != indexB && indexA >= 0 && indexA < mb_mapObj[mapObj_ind].wms.length && indexB >= 0 && indexB < mb_mapObj[mapObj_ind].wms.length) { upper = mb_mapObj[mapObj_ind].wms[indexA]; mb_mapObj[mapObj_ind].wms[indexA] = mb_mapObj[mapObj_ind].wms[indexB]; mb_mapObj[mapObj_ind].wms[indexB] = upper; var upperLayers = mb_mapObj[mapObj_ind].layers[indexA]; var upperStyles = mb_mapObj[mapObj_ind].styles[indexA]; var upperQuerylayers = mb_mapObj[mapObj_ind].querylayers[indexA]; mb_mapObj[mapObj_ind].layers[indexA] = mb_mapObj[mapObj_ind].layers[indexB]; mb_mapObj[mapObj_ind].styles[indexA] = mb_mapObj[mapObj_ind].styles[indexB]; mb_mapObj[mapObj_ind].querylayers[indexA] = mb_mapObj[mapObj_ind].querylayers[indexB]; mb_mapObj[mapObj_ind].layers[indexB] = upperLayers; mb_mapObj[mapObj_ind].styles[indexB] = upperStyles; mb_mapObj[mapObj_ind].querylayers[indexB] = upperQuerylayers; return true; } else { return false; } } function mb_moveUpWmsByIndex(mapObj_ind, index) { if (index > 0 && index < wms.length) { return mb_swapWmsByIndex(mapObj_ind, index-1, index); } else { return false; } } function mb_moveDownWmsByIndex(mapObj_ind, index) { if (index >= 0 && index < wms.length-1) { return mb_swapWmsByIndex(mapObj_ind, index, index+1); } else { return false; } } function mb_mapObjaddWMS(obj){ var cnt_layers = 0; var cnt_querylayers = 0; var styles = ""; var layers = ""; var querylayers = ""; var ind = getMapObjIndexByName(obj); //is the id valid? for( var i=0; i<(wms.length-1); i++){ if(parseInt(wms[i].wms_id) >= parseInt(wms[wms.length-1].wms_id)){ wms[wms.length-1].wms_id = parseInt(mb_mapObj[ind].wms[i].wms_id) + 1; } } mb_mapObj[ind].wms[mb_mapObj[ind].wms.length] = wms[wms.length-1]; mb_mapObj[ind].layers[mb_mapObj[ind].layers.length] = layers; mb_mapObj[ind].styles[mb_mapObj[ind].styles.length] = styles; mb_mapObj[ind].querylayers[mb_mapObj[ind].querylayers.length] = querylayers; for(var i=0; i relation_px_x){ bbox_miny = centery - relation_px_y * extentx / 2; bbox_maxy = centery + relation_px_y * extentx / 2; } return bbox_minx +","+ bbox_miny +","+ bbox_maxx +","+ bbox_maxy; } } } function setMapRequest(frameName){ var ts = mb_timestamp(); for(var i=0; i 0){ var myDivId = "div_" + ii; var myMapId = "map_" + ii; //disable Layer which are out of scale var str_LayerStyles = mb_checkScale(frameName,i,ii); if(mb_mapObj[i].layers[ii] != "" && str_LayerStyles[0] != ''){ var newMapURL = ""; newMapRequest += "
"; newMapRequest += "
"; } else{ mb_mapObj[i].mapURL[ii] = false; mb_mapObj[i].wms[ii].mapURL = false; newMapRequest += "
"; newMapRequest += ""; newMapRequest +="
"; } } } //prompt("",newMapRequest); writeTag(mb_mapObj[i].frameName,mb_mapObj[i].elementName,newMapRequest); } } for(var i=0; i"; } else{ mb_mapObj[i].mapURL[ii] = false; mb_mapObj[i].wms[ii].mapURL = false; newMapRequest = ""; } //prompt("",newMapRequest); if(mb_log){ var tmp = eval(mb_log + "('" + newMapURL + "','" + ts + "')"); } writeTag(mb_mapObj[i].frameName,myDivId,newMapRequest); } } } } for(var i=0; i0){ if(cnt_layers > 0){layers += ","; styles += ","; } layers += mb_mapObj[ind].wms[i].objLayer[ii].layer_name; //alert(mb_mapObj[ind].wms[i].objLayer[ii].layer_name); styles += ""; cnt_layers++; } if(mb_mapObj[ind].wms[i].objLayer[ii].gui_layer_querylayer == 1 && ii>0){ if(cnt_querylayers > 0){querylayers += ",";} querylayers += mb_mapObj[ind].wms[i].objLayer[ii].layer_name; cnt_querylayers++; } mb_mapObj[ind].layers[i] = layers; mb_mapObj[ind].querylayers[i] = querylayers; mb_mapObj[ind].styles[i] = styles; } } } } function mb_checkScale(frameName,mObj,wmsObj){ var thisLayer = mb_mapObj[mObj].layers[wmsObj].split(","); var thisScale = mb_getScale(frameName); var str_layer = ""; var str_styles = ""; var str_titles = ""; var str_legendurls = ""; var str_parent = ""; var cnt_layer = 0; for(var i=0; i= myMinscale){minscaleOK = true;} if(myMaxscale == 0 || thisScale <= myMaxscale){maxscaleOK = true;} if(maxscaleOK == true && minscaleOK == true ){ if(cnt_layer > 0){str_layer += ","; str_styles += ","; str_titles += ",";str_parent += ","; str_legendurls += ",";} str_layer += thisLayer[ii]; str_styles += ""; str_titles += mb_mapObj[mObj].wms[wmsObj].objLayer[i].layer_title; str_parent += mb_mapObj[mObj].wms[wmsObj].objLayer[i].layer_parent; if(mb_mapObj[mObj].wms[wmsObj].objLayer[i].layer_style.length>0){ str_legendurls += mb_mapObj[mObj].wms[wmsObj].objLayer[i].layer_style[0]["legendurl"] ; } cnt_layer++; } } } } var str_layerstyles = new Array(); str_layerstyles[0] = str_layer; str_layerstyles[1] = str_styles; str_layerstyles[2] = str_titles; str_layerstyles[3] = str_legendurls; str_layerstyles[4] = str_parent; return str_layerstyles; } function setFeatureInfoRequest(fName,x,y, path) { var ts = mb_timestamp(); for(var i=0; i 0){ requestParams += "FEATURE_COUNT="+mb_feature_count+"&"; } requestParams += "QUERY_LAYERS="+mb_mapObj[i].querylayers[ii]+"&"; requestParams += "X=" + x + "&"; requestParams += "Y=" + y; if(mb_mapObj[i].querylayers[ii] != "" && mb_mapObj[i].layers[ii] != ""){ validation = true; } //add vendor-specific for(var v=0; v 0){str_layer += ",";} str_layer += layer_name; cnt_layer++; } } else if(type == "visible"){ if(layer_name == layerName && status == 1){ if(cnt_layer > 0){str_layer += ",";} str_layer += layer_name; cnt_layer++; } } for(var iiii=0; iiii 0){str_layer += ",";} str_layer += layer_name; cnt_layer++; } } } } } } } if(type == "visible"){ mb_mapObj[myMapObj].layers[myWMS] = str_layer; var array_str_layer = str_layer.split(","); var str_styles = ""; for(var cnt=0; cnt 0){str_styles += ",";} str_styles += ""; } mb_mapObj[myMapObj].styles[myWMS] = str_styles; } if(type == "querylayer"){mb_mapObj[myMapObj].querylayers[myWMS] = str_layer;} /* if(type == 'visible'){ setSingleMapRequest(frameName,wms_title); } */ } function handleSelectedLayer_array(mapObj, array_wms, array_layer, type, status){ //alert(mapObj+" / "+array_wms[0]+" / "+ array_layer[0]+" / "+ type+" / "+ status); var ind = getMapObjIndexByName(mapObj); for(var j=0; j 0){ var roundx = 1/Math.pow(10,(Math.round(Math.log(deltaX)/Math.log(10)))); } else{ var roundx = Math.pow(10,(Math.round(Math.log(deltaX)/Math.log(10)))); } if(deltaY > 0){ var roundy = 1/Math.pow(10,(Math.round(Math.log(deltaY)/Math.log(10)))); } else{ var roundy = Math.pow(10,(Math.round(Math.log(deltaY)/Math.log(10)))); } var xtentx = maxX - minX; var xtenty = maxY - minY; var posX = parseFloat(minX + (myClickX / width) * xtentx); var posY = parseFloat(maxY - (myClickY / height) * xtenty); posX = Math.round(posX * roundx)/roundx; posY = Math.round(posY * roundy)/roundy; return new Array(posX, posY); } function makeRealWorld2mapPos(frameName,rw_posx, rw_posy){ var ind = getMapObjIndexByName(frameName); var arrayBBox = mb_mapObj[ind].extent.split(","); var minX = parseFloat(arrayBBox[0]); var minY = parseFloat(arrayBBox[1]); var maxX = parseFloat(arrayBBox[2]); var maxY = parseFloat(arrayBBox[3]); var xtentx = parseFloat(arrayBBox[2]) - parseFloat(arrayBBox[0]); var xtenty = parseFloat(arrayBBox[3]) - parseFloat(arrayBBox[1]); var width = mb_mapObj[ind].width; var height = mb_mapObj[ind].height; pixPos_x = Math.round(parseFloat(((rw_posx - minX)/xtentx)*width)); pixPos_y = Math.round(parseFloat(((maxY - rw_posy)/xtenty)*height)); return new Array(pixPos_x, pixPos_y); } function mb_arrangeElement(frameName, elName, left, top) { if(frameName != ""){ window.frames[frameName].document.getElementById(elName).style.top = top; window.frames[frameName].document.getElementById(elName).style.left = left; } else{ document.getElementById(elName).style.top = top; document.getElementById(elName).style.left = left; } } /****************BUTTON HANDLING*************************/ var mb_button = new Array(); function mb_regButton_frame(wii, frameName, param){ var ind = mb_button.length; mb_button[ind] = new mb_conButton(wii, ind); if (frameName == null) { if (param == null) { eval(wii+"("+ind+")"); } else { eval(wii+"("+ind+", "+param+")"); } } else if (param == null) { eval("window.frames['" + frameName + "']."+wii+"("+ind+")"); } else { eval("window.frames['" + frameName + "']."+wii+"("+ind+", "+param+")"); } mb_button[ind].prev = mb_button[ind].src; mb_button[ind].src = mb_button[ind].img_over; mb_button[ind].onmouseover = new Function("mb_button_over("+ind+")"); mb_button[ind].onmouseout = new Function("mb_button_out("+ind+")"); mb_button[ind].onclick = new Function("mb_button_click("+ind+")"); if (frameName==null) { mb_button[ind].frameName = ""; } else { mb_button[ind].frameName = frameName; } } function mb_regButton(wii){ mb_regButton_frame(wii, null, null); } function mb_conButton(wii, ind){ this.wii = wii; return true; } function mb_button_over(ind){ if(mb_button[ind].status == 0){ mb_button[ind].prev = mb_button[ind].src; mb_button[ind].src = mb_button[ind].img_over; } } function mb_button_out(ind){ mb_button[ind].src = mb_button[ind].prev; } function mb_button_click(ind){ var mbStatus = mb_button[ind].status; if(mbStatus == 0){ mb_disableButton(mb_button[ind].elName); mb_button[ind].prev = mb_button[ind].img_on; mb_button[ind].src = mb_button[ind].img_on; mb_button[ind].status = 1; if (mb_button[ind].frameName != "") { window.frames[mb_button[ind].frameName].document.getElementById(mb_button[ind].elName).go(); } else { document.getElementById(mb_button[ind].elName).go(); } } else{ mb_button[ind].prev = mb_button[ind].img_off; mb_button[ind].src = mb_button[ind].img_off; mb_button[ind].status = 0; if (mb_button[ind].frameName != "") { window.frames[mb_button[ind].frameName].document.getElementById(mb_button[ind].elName).stop(); } else { document.getElementById(mb_button[ind].elName).stop(); } } } function mb_disableButton(elName){ for(var i=0; i relation_px_x){ miny = centery - relation_px_y * extentx / 2; maxy = centery + relation_px_y * extentx / 2; } mb_mapObj[ind].extent = minx +","+ miny +","+ maxx +","+ maxy; } function mb_showHighlight(frameName,x,y){ var pos = makeRealWorld2mapPos(frameName,x, y); mb_arrangeElement(frameName,"highlight",pos[0]-7, pos[1]-7); window.frames[frameName].document.getElementById("highlight").style.visibility = 'visible'; } function mb_hideHighlight(frameName){ mb_arrangeElement(frameName,"highlight",-20, -20); mb_arrangeElement(frameName,"highlight",-20, -20); window.frames[frameName].document.getElementById("highlight").style.visibility = 'hidden'; } function mb_permanentHighlight(frameName,x,y){ var pos = makeRealWorld2mapPos(frameName,x, y); mb_arrangeElement(frameName,"permanent",pos[0]-7, pos[1]-7); window.frames[frameName].document.getElementById("permanent").style.visibility = 'visible'; } // framename, commaseparated coordinates, commaseparated rgb values (color) //new: coords is array! function mb_markResult(frameName,geom,col){ var x = ""; var y = ""; var tmp = new Array(); var ind = getMapObjIndexByName(frameName); for(var i=0; i0){ x += ":"; y += ":"; } tmp = geom[i].split(","); for(var ii=0; ii0){ x += ","; y += ","; } x += pos[0]; y += pos[1]; } } var source = ""; //prompt("",source); writeTag(frameName,"markResult",source); } function mb_disableResult(frameName){ writeTag(frameName,"markResult",""); } function Numsort(a,b){ return a-b; } function mb_registerGML(frameName,obj){ var ind = getMapObjIndexByName(frameName); mb_mapObj[ind].geom = obj; } function mb_timestamp(){ var d = new Date(); var ts = Math.round(Date.parse(d)/1000); return ts; } function mb_getlayerposbyname(objInd,wmsInd,lname){ var t = mb_mapObj[objInd].wms[wmsInd]; for(var i=0; i < t.objLayer.length; i++){ if(t.objLayer[i].layer_name == lname){ return t.objLayer[i].layer_pos; } } } function mb_getLayerObjByName(fname,wms_id,layer_name){ var ind = getMapObjIndexByName(fname); var wmsInd = getWMSIndexById(fname,wms_id); var t = mb_mapObj[ind].wms[wmsInd]; for(var i=0; i < t.objLayer.length; i++){ if(t.objLayer[i].layer_name == layer_name){ return t.objLayer[i]; } } } function mb_getchildsbyname(objInd,wmsInd,lname){ var t = mb_mapObj[objInd].wms[wmsInd]; var pos = mb_getlayerposbyname(objInd, wmsInd,lname); var l = new Array(); l["name"] = new Array(); l["title"] = new Array(); l["legendurl"] = new Array(); for(var i=0; i < t.objLayer.length; i++){ if(t.objLayer[i].layer_parent == pos){ l["name"][l["name"].length] = t.objLayer[i].layer_name; l["title"][l["title"].length] = t.objLayer[i].layer_title; if(t.objLayer[i].layer_style.length>0){ l["legendurl"][l["legendurl"].length] = t.objLayer[i].layer_style[0]["legendurl"] ; }else{ l["legendurl"][l["legendurl"].length] = 0 ; } } } if(l["name"].length > 0){ return l; } else{ return false; } } function mb_checkTag(frameName, tagName, elementId, appendAtTagName, attributes){ var oldElement; var newElement; var prefix; if(frameName && frameName != ""){ prefix = window.frames[frameName].document; } else if(!frameName || frameName == ""){ prefix = document; } oldElement = prefix.getElementById(elementId); if (oldElement == null) { newElement = prefix.createElement(tagName); newElement = prefix.getElementsByTagName(appendAtTagName)[0].appendChild(newElement); } else { if (oldElement.nodeName.toLowerCase() == tagName.toLowerCase()) { for (var i=0; i -1){ if(onlineresource.charAt(onlineresource.length-1) == "?"){ nextvalue = ""; }else if(onlineresource.charAt(onlineresource.length-1) == "&"){ nextvalue = ""; }else{ nextvalue = "&"; } } if(onlineresource.indexOf("?") == -1){ nextvalue = "?"; } return nextvalue; }