var mod_measure_color1 = "white"; var mod_measure_color2 = "black"; var mod_measure_font = "Arial, Helvetica, sans-serif"; var mod_measure_fontsize = "9px"; var mod_measure_basepoint = "#8a2be2"; var mod_measure_linepoint = "#ff00ff"; var mod_measure_bg = "white"; var mod_measure_pgsql = true; var mod_measure_win = null; var mod_measure_elName = "measure"; var mod_measure_frameName = ""; var mod_measure_mapObj = null; var mod_measure_epsg; var mod_measure_width; var mod_measure_height; var mod_measure_RX = new Array(); var mod_measure_RY = new Array(); var mod_measure_Dist = new Array(); var mod_measure_TotalDist = new Array(); // global variable window.eventAfterMeasure = new MapbenderEvent(); var mod_measure_img_on = new Image(); mod_measure_img_on.src = ""; var mod_measure_img_off = new Image(); mod_measure_img_off.src = ""; var mod_measure_img_over = new Image(); mod_measure_img_over.src = ""; function init_mod_measure(ind){ mod_measure_mapObj = getMapObjByName(mod_measure_target); //ensure we have the div elements in Mapframe var map_el = mod_measure_mapObj.getDomElement() if(!map_el.ownerDocument.getElementById(mod_measure_target+"_measure_sub")){ el = map_el.ownerDocument.createElement("div"); el.style.position = "absolute"; el.style.top = "0px"; el.style.left = "0px"; el.style.zIndex = "98"; el.style.fontSize = "10px"; el1 = el.cloneNode(false); el2 = el.cloneNode(false); el.id = mod_measure_target+"_measure_sub"; el.style.zIndex = "100"; el1.id = mod_measure_target+"_measure_display"; el1.style.zIndex = "17"; el2.id = mod_measure_target+"_measuring"; map_el.appendChild(el); map_el.appendChild(el1); map_el.appendChild(el2); } mb_button[ind] = document.getElementById(mod_measure_elName); mb_button[ind].img_over = mod_measure_img_over.src; mb_button[ind].img_on = mod_measure_img_on.src; mb_button[ind].img_off = mod_measure_img_off.src; mb_button[ind].status = 0; mb_button[ind].elName = mod_measure_elName; mb_button[ind].fName = mod_measure_frameName; mb_button[ind].go = function () { mod_measure_go(); }; mb_button[ind].stop = function () { mod_measure_disable(); }; mod_measure_width = mod_measure_mapObj.width; mod_measure_height = mod_measure_mapObj.height; mod_measure_epsg = mod_measure_mapObj.epsg; eventAfterMapRequest.register(function () { drawDashedLine(); }); mb_registerPanSubElement(mod_measure_target+"_measuring"); } function mod_measure_go(){ var el = mod_measure_mapObj.getDomElement(); el.onmousedown = mod_measure_start; el.onmousemove = mod_measure_run; el.onmouseover = function () { el.style.cursor = 'crosshair'; } el.onmouseout = function () { el.style.cursor = 'auto'; } var measureSub = eventAfterMeasure.trigger({}, "CAT"); writeTag("",mod_measure_target+"_measure_sub",measureSub); } function mod_measure_disable(){ var el = mod_measure_mapObj.getDomElement(); el.onmousedown = null; el.onmousemove = null; el.onmouseover = null; el.onmouseout = null; writeTag("",mod_measure_target+"_measure_display",""); writeTag("",mod_measure_target+"_measure_sub",""); } function mod_measure_timeout(){ var el = mod_measure_mapObj.getDomElement(); el.onmousedown = null; el.ondblclick = null; el.onmousemove = null; } function mod_measure_disableTimeout(){ var el = mod_measure_mapObj.getDomElement(); el.onmousedown = mod_measure_start; el.onmousemove = mod_measure_run; } function mod_measure_start(e){ mod_measure_mapObj.getMousePos(e); var realWorldPos = makeClickPos2RealWorldPos(mod_measure_target,clickX,clickY); if(mod_measure_epsg=="EPSG:4326"){ mod_measure_RX[mod_measure_RX.length] = realWorldPos[0]; mod_measure_RY[mod_measure_RY.length] = realWorldPos[1]; } else{ mod_measure_RX[mod_measure_RX.length] = Math.round(realWorldPos[0] * 100)/100; mod_measure_RY[mod_measure_RY.length] = Math.round(realWorldPos[1] * 100)/100; } if(mod_measure_RX.length > 1){ var dist; if(mod_measure_epsg=="EPSG:4326"){ //convert coordinates to radian var lon_from=(mod_measure_RX[mod_measure_RX.length-2]*Math.PI)/180; var lat_from=(mod_measure_RY[mod_measure_RY.length-2]*Math.PI)/180; var lon_to=(mod_measure_RX[mod_measure_RX.length-1]*Math.PI)/180; var lat_to=(mod_measure_RY[mod_measure_RY.length-1]*Math.PI)/180; dist=6371229*Math.acos(Math.sin(lat_from)*Math.sin(lat_to)+Math.cos(lat_from)*Math.cos(lat_to)*Math.cos(lon_from-lon_to)); dist=Math.round(dist*100)/100; } else{ var dist_x = Math.abs(mod_measure_RX[mod_measure_RX.length-2] - mod_measure_RX[mod_measure_RX.length-1]); var dist_y = Math.abs(mod_measure_RY[mod_measure_RY.length-2] - mod_measure_RY[mod_measure_RY.length-1]); dist = Math.round(Math.sqrt(Math.pow(dist_x,2) + Math.pow(dist_y,2))*100)/100; } mod_measure_Dist[mod_measure_Dist.length] = dist; var totalDist = mod_measure_TotalDist[mod_measure_TotalDist.length-1] + dist; mod_measure_TotalDist[mod_measure_TotalDist.length] = Math.round(totalDist * 100)/100; } else{ mod_measure_Dist[mod_measure_Dist.length] = 0; mod_measure_TotalDist[mod_measure_TotalDist.length] = 0; } drawDashedLine(); } function drawDashedLine(){ //check if epsg has changed mod_measure_width = mod_measure_mapObj.width; mod_measure_height = mod_measure_mapObj.height; if(mod_measure_epsg != mod_measure_mapObj.epsg){ mod_measure_delete(); mod_measure_epsg = mod_measure_mapObj.epsg; } var str_mPoints = "
"; str_mPoints += "
"; for(var i=0; i"; if(i>0){ str_mPoints += "
"+mod_measure_TotalDist[i]+"
"; str_mPoints += "
"+mod_measure_TotalDist[i]+"
"; } } if(mod_measure_RX.length>1){ for(var k=1; k= 0 && x <= mod_measure_width && y >= 0 && y <= mod_measure_height){ str_dashedLine += "
"; } } str_dashedLine += "
"+mod_measure_Dist[count]+"
"; str_dashedLine += "
"+mod_measure_Dist[count]+"
"; return str_dashedLine; } function mod_measure_run(e){ mod_measure_mapObj.getMousePos(e); var pos = makeClickPos2RealWorldPos(mod_measure_target,clickX,clickY); var dist; if(mod_measure_epsg=="EPSG:4326"){ //convert coordinates to radian var lon_from=(pos[0]*Math.PI)/180; var lat_from=(pos[1]*Math.PI)/180; var lon_to=(mod_measure_RX[mod_measure_RX.length-1]*Math.PI)/180; var lat_to=(mod_measure_RY[mod_measure_RY.length-1]*Math.PI)/180; dist=6371229*Math.acos(Math.sin(lat_from)*Math.sin(lat_to)+Math.cos(lat_from)*Math.cos(lat_to)*Math.cos(lon_from-lon_to)); } else{ var dist_x = Math.abs(mod_measure_RX[mod_measure_RX.length-1] - pos[0]); var dist_y = Math.abs(mod_measure_RY[mod_measure_RY.length-1] - pos[1]); dist=Math.sqrt(dist_x*dist_x+dist_y*dist_y); } if(isNaN(dist) == false && clickX > 0 && clickX < mod_measure_width && clickY > 0 && clickY < mod_measure_height){ var str_display = ""+(Math.round(dist*100)/100)+" m"; writeTag("", mod_measure_target+"_measure_display",str_display); mb_arrangeElement("",mod_measure_target+"_measure_display",clickX +2, clickY - 10); } else{ writeTag("",mod_measure_target+"_measure_display",""); } } function mod_measure_close(){ if(mod_measure_RX.length < 3 || (mod_measure_RX[mod_measure_RX.length-1] == mod_measure_RX[0] && mod_measure_RY[mod_measure_RY.length-1] == mod_measure_RY[0])){return;} mod_measure_RX[mod_measure_RX.length] = mod_measure_RX[0]; mod_measure_RY[mod_measure_RY.length] = mod_measure_RY[0]; if(mod_measure_RX.length > 1){ var dist; if(mod_measure_epsg=="EPSG:4326"){ //convert coordinates to radian var lon_from=(mod_measure_RX[mod_measure_RX.length-2]*Math.PI)/180; var lat_from=(mod_measure_RY[mod_measure_RY.length-2]*Math.PI)/180; var lon_to=(mod_measure_RX[mod_measure_RX.length-1]*Math.PI)/180; var lat_to=(mod_measure_RY[mod_measure_RY.length-1]*Math.PI)/180; dist=6371229*Math.acos(Math.sin(lat_from)*Math.sin(lat_to)+Math.cos(lat_from)*Math.cos(lat_to)*Math.cos(lon_from-lon_to)); dist=Math.round(dist*100)/100; } else{ var dist_x = Math.abs(mod_measure_RX[mod_measure_RX.length-2] - mod_measure_RX[mod_measure_RX.length-1]); var dist_y = Math.abs(mod_measure_RY[mod_measure_RY.length-2] - mod_measure_RY[mod_measure_RY.length-1]); dist = Math.round(Math.sqrt(Math.pow(dist_x,2) + Math.pow(dist_y,2))*100)/100; } mod_measure_Dist[mod_measure_Dist.length] = dist; var totalDist = mod_measure_TotalDist[mod_measure_TotalDist.length-1] + dist; mod_measure_TotalDist[mod_measure_TotalDist.length] = Math.round(totalDist * 100)/100; } else{ mod_measure_Dist[mod_measure_Dist.length] = 0; mod_measure_TotalDist[mod_measure_TotalDist.length] = 0; } drawDashedLine(); } function mod_measure_delete(){ mod_measure_RX = new Array(); mod_measure_RY = new Array(); mod_measure_Dist = new Array(); mod_measure_TotalDist = new Array(); writeTag("",mod_measure_target+"_measuring",""); writeTag("",mod_measure_target+"_measure_display",""); } var mod_closePolygon_img = new Image(); mod_closePolygon_img.src = "../img/button_gray/closePolygon_off.gif"; mod_closePolygon_img.title = ''; eventAfterMeasure.register(function(){ return mod_closePolygon(); }); function mod_closePolygon(){ var str = "
"; return str; } function mod_closePolygon_go(){ mod_measure_close(); } var mod_rubber_img = new Image(); mod_rubber_img.src = "../img/button_gray/rubber_off.gif"; mod_rubber_img.title = ''; eventAfterMeasure.register(function () { return mod_rubber(); }); function mod_rubber(){ var str = "
"; return str; } function mod_rubber_go(){ mod_measure_delete(); } var mod_getArea_img = new Image(); mod_getArea_img.src = "../img/button_gray/getArea_off.gif"; mod_getArea_img.title = ''; eventAfterMeasure.register(function () { return mod_getArea(); }); function mod_getArea(){ var str = "
"; return str; } function mod_getArea_go(){ if(mod_measure_RX[mod_measure_RX.length -1] == mod_measure_RX[0] && mod_measure_RY[mod_measure_RY.length -1] == mod_measure_RY[0]){ var ind = getMapObjIndexByName(mod_measure_target); var url = "../php/mod_evalArea.php?x="; for(var i=0; i0){ url += ",";} url += mod_measure_RX[i]; } url += "&y="; for(var i=0; i0){ url += ",";} url += mod_measure_RY[i]; } var srs = mb_mapObj[ind].epsg.split(":"); url += "&srs="+ escape(srs[1]); url += "&length=" + mod_measure_TotalDist[mod_measure_TotalDist.length-1]; url += "&distance=" + mod_measure_TotalDist[mod_measure_TotalDist.length-2]; if(!mod_measure_win || mod_measure_win == null || mod_measure_win.closed == true){ mod_measure_win = window.open(url,"mod_measure_win","width=200,height=150,resizable=yes"); } else{ mod_measure_win.document.location.href = url; } mod_measure_win.focus(); } else{ if(!mod_measure_win || mod_measure_win == null || mod_measure_win.closed == true){ mod_measure_win = window.open("","mod_measure_win","width=200,height=150,resizable=yes"); mod_measure_win.document.open("text/html"); mod_measure_win.document.write("Strecke: " +mod_measure_TotalDist[mod_measure_TotalDist.length-1]+" m"); mod_measure_win.document.close(); } else{ mod_measure_win.document.open("text/html"); mod_measure_win.document.write("Strecke: " +mod_measure_TotalDist[mod_measure_TotalDist.length-1]+" m"); mod_measure_win.document.close(); } mod_measure_win.focus(); } }