<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0050)http://www.fedingas.lt/products-printpage-158.html --> <HTML><HEAD><TITLE>Fedingas - Viskas radijo ryiui ir GPS</TITLE> <META http-equiv=Content-Type content="text/html; charset=windows-1257"> <META content="MSHTML 6.00.2743.600" name=GENERATOR></HEAD> <BODY text=#000000 bgColor=#ffffff onload=getCookie(document.geodetics) onunload=saveCookie(document.geodetics)> <TABLE border=0> <TBODY> <TR> <TD> <TABLE cellSpacing=1 cellPadding=0 width=640 bgColor=#000000 border=0> <TBODY> <TR> <TD> <TABLE cellSpacing=1 cellPadding=20 width=640 bgColor=#ffffff border=0> <TBODY> <TR> <TD> <CENTER><IMG alt="" src="b&d.gif" border=0><BR><BR><FONT class=content><B>Atstumo ir azimuto kalkuliatorius</B></FONT><BR></CENTER><FONT class=content> <SCRIPT language=JavaScript type=text/javascript> var pi = Math.PI; var secsize = 4; // round second display to var distsize = 3; // round distance display to var bearsize = 8; // round bearing display to function calcRandB(form, in1, in2, in3, in4) { //calculate plane grid range and bearing // in1 - point 1 coordinates index // in2 - point 2 coordinates index // in3 - distance index // in4 - bearing index var de = parseFloat(form.east[in2].value) - parseFloat(form.east[in1].value); //difference in eastings var dn = parseFloat(form.north[in2].value) - parseFloat(form.north[in1].value); //difference in northings form.distvalue[in3].value = Math.sqrt(de * de + dn * dn); //compute distance form.distvalue[in3].value = roundoff(form.distvalue[in3].value,distsize); //round off distance var x = Math.atan2(de,dn); //compute bearing, result in radians if (x < 0) { x += 2 * pi; //if negative add 2*pi or 360 degrees } ddd2dms(form, in4, rad2deg(x)); return true; } function calcPoint(form, in1, in2, in3, in4) { //calculate grid coordinates from plane grid range and bearing // in1 - point 1 coordinates index // in2 - point 2 coordinates index // in3 - distance index // in4 - bearing index var x = dms2ddd(form.degreevalue[in4].value, form.minutevalue[in4].value, form.secondvalue[in4].value); //convert to decimal degrees x = deg2rad(x); //convert to radians var dn = parseFloat(form.distvalue[in3].value) * Math.cos(x) ; var de = parseFloat(form.distvalue[in3].value) * Math.sin(x) ; form.north[in2].value = parseFloat(form.north[in1].value) + dn; form.east[in2].value = parseFloat(form.east[in1].value) + de; form.north[in2].value = roundoff(form.north[in2].value,distsize); form.east[in2].value = roundoff(form.east[in2].value,distsize); return true; } function deg2rad(x){ //convert decimal degrees to radians x = x * pi / 180; return x; } function rad2deg(x){ //convert radians to decimal degrees x = x * 180 / pi; return x; } function roundoff(x,y){ //round off x to y decimal places x = parseFloat(x); y = parseFloat(y); x = Math.round(x * Math.pow(10,y))/Math.pow(10,y); return x; } function dms2ddd(d,m,s){ if (isblank(d)) d = '0'; else { var y = d.slice(0, 1); d = parseFloat(d); } if (isblank(m)) m = '0'; else m = parseFloat(m); if (isblank(s)) s = '0'; else s = parseFloat(s); var x = Math.abs(d) + (Math.abs(m) / 60) + (Math.abs(s) / 3600); //convert to decimal degrees if ((y == "-") || (d < 0) || (m < 0) || (s < 0)) x = -x; return x; } function isblank(s) { for(var i = 0; i < s.length; i++) { var c = s.charAt(i); if ((c != ' ') && (c != '\n') && (c != '\t')) return false; } return true; } function geo2grid(form, in1, in2, in3, in4, in5){ // in1 - point latitude index // in2 - point longitude index // in3 - point grid coordinates // in4 - grid convergence index // in5 - point scale factor index var j = form.units.selectedIndex; var units = form.units.options[j].value; var latddd = dms2ddd(form.degreevalue[in1].value, form.minutevalue[in1].value, form.secondvalue[in1].value); // convert latitude of point to decimal degrees then radians var latrad = deg2rad(latddd); var londdd = dms2ddd(form.degreevalue[in2].value, form.minutevalue[in2].value, form.secondvalue[in2].value); // likewise for longitude var lonrad = deg2rad(londdd); // calclulate constants required for Redfern's formulae var k = parseFloat(form.k.value); //scale factor var a = parseFloat(form.a.value); //semi-major axis var f = 1 / parseFloat(form.invf.value); //flattening var b = a * (1 - f); //semi-minor axis var e2 = (a * a - b * b)/(a * a); //eccentricity squared var e = Math.sqrt(e2); //eccentricity var ei2 = (a * a - b * b)/(b * b); //second eccentricity squared var ei = Math.sqrt(ei2); //second eccentricity var n = (a - b)/(a + b); var G = a * (1 - n) * (1 - n * n) * (1 + (9 / 4) * n * n + (255 / 64) * Math.pow(n,4)) * (pi / 180); //Mean length of an arc of one degree of the meridian var w = londdd - parseFloat(form.cmlong.value); //longitude difference from CM w = deg2rad(w); //convert to radians var t = Math.tan(latrad); //tan of latitude var rho = a * (1 - e2) / Math.pow(1 - (e2 * Math.sin(latrad) * Math.sin(latrad)),(3/2)); //radius of curvature in plane of meridian var nu = a / Math.sqrt(1 - (e2 * Math.sin(latrad) * Math.sin(latrad))); //radius of curvature in prime vertical var psi = nu / rho; var coslat = Math.cos(latrad); var sinlat = Math.sin(latrad); // calculate meridian distance var A0 = 1 - (e2/4) - (3 * e2 * e2 / 64) - (5 * Math.pow(e2, 3) / 256); var A2 = (3 / 8) * (e2 + (e2 * e2 /4) + (15 * Math.pow(e2, 3) /128)); var A4 = (15 / 256) * (e2 * e2 + (3 * Math.pow(e2, 3) / 4)); var A6 = 35 * Math.pow(e2, 3) / 3072; var m = a * ((A0 * latrad) - (A2 * Math.sin(2 * latrad)) + (A4 * Math.sin(4 * latrad)) - (A6 * Math.sin(6 * latrad))); // calculate easting var eterm1 = (w * w / 6) * coslat * coslat * (psi - t * t); var eterm2 = (Math.pow(w,4) / 120) * Math.pow(coslat,4) * (4 * Math.pow(psi,3) * (1 - 6 * t * t) + psi * psi * (1 + 8 * t * t) - psi * 2 * t * t + Math.pow(t,4)); var eterm3 = (Math.pow(w,6) / 5040) * Math.pow(coslat,6) * (61 - 479 * t * t + 179 * Math.pow(t, 4) - Math.pow(t,6)); var dE = k * nu * w * coslat * (1 + eterm1 + eterm2 + eterm3); form.east[in3].value = roundoff(parseFloat(form.falseeast.value) + (dE / units), distsize); // calculate northing var nterm1 = (w * w /2) * nu * sinlat * coslat; var nterm2 = (Math.pow(w,4) / 24) * nu * sinlat * Math.pow(coslat, 3) * (4 * psi * psi + psi - t * t); var nterm3 = (Math.pow(w,6) / 720) * nu * sinlat * Math.pow(coslat, 5) * (8 * Math.pow(psi, 4) * (11 - 24 * t * t) - 28 * Math.pow(psi, 3) * (1 - 6 * t * t) + psi * psi * (1 - 32 * t * t) - psi * 2 * t * t + Math.pow(t, 4)); var nterm4 = (Math.pow(w,8)/40320) * nu * sinlat * Math.pow(coslat,7) * (1385 - 3111 * t * t + 543 * Math.pow(t, 4) - Math.pow(t, 6)); var dN = k * (m + nterm1 + nterm2 + nterm3 + nterm4); form.north[in3].value = roundoff(parseFloat(form.falsenorth.value) + (dN / units), distsize) ; // calculate grid convergence var gterm1 = -w * sinlat; var gterm2 = -(Math.pow(w,3) / 3) * sinlat * coslat * coslat * (2 * psi * psi - psi); var gterm3 = -(Math.pow(w,5) / 15) * sinlat * Math.pow(coslat, 4) * (Math.pow(psi, 4) * (11 - 24 * t * t) - Math.pow(psi, 3) * ( 11 - 36 * t * t) + 2 * psi * psi * (1 - 7 * t * t) + psi * t * t); var gterm4 = -(Math.pow(w,7) / 315) * sinlat * Math.pow(coslat, 6) * (17 - 26 * t * t + 2 * Math.pow(t, 4)); var gridconv = gterm1 + gterm2 + gterm3 + gterm4; ddd2dms(form, in4, rad2deg(gridconv)); // calculate point scale factor var kterm1 = (w * w / 2) * psi * coslat * coslat; var kterm2 = (Math.pow(w, 4) / 24) * Math.pow(coslat, 4) * ( 4 * Math.pow(psi, 3) * (1 - 6 * t * t) + psi * psi * (1 + 24 * t * t) - 4 * psi * t * t); var kterm3 = (Math.pow(w, 6) / 720) * Math.pow(coslat, 6) * (61 - 148 * t * t + 16 * Math.pow(t, 4)); var pointk = k * (1 + kterm1 + kterm2 + kterm3); form.pointk[in5].value = roundoff(pointk, bearsize); return true; } function grid2geo(form, in1, in2, in3, in4, in5){ // in1 - point latitude index // in2 - point longitude index // in3 - point grid coordinates // in4 - grid convergence index // in5 - point scale factor index var j = form.units.selectedIndex; var units = form.units.options[j].value; // calclulate constants required for Redfern's formulae var k = parseFloat(form.k.value); //scale factor var a = parseFloat(form.a.value); //semi-major axis var f = 1 / parseFloat(form.invf.value); //flattening var b = a * (1 - f); //semi-minor axis var e2 = (a * a - b * b)/(a * a); //eccentricity squared var e = Math.sqrt(e2); //eccentricity var ei2 = (a * a - b * b)/(b * b); //second eccentricity squared var ei = Math.sqrt(ei2); //second eccentricity var n = (a - b)/(a + b); var G = a * (1 - n) * (1 - n * n) * (1 + (9 / 4) * n * n + (255 / 64) * Math.pow(n,4)) * (pi / 180); //Mean length of an arc of one degree of the meridian var north = (parseFloat(form.north[in3].value) - parseFloat(form.falsenorth.value)) * units; //northing from the equator var east = (parseFloat(form.east[in3].value) - parseFloat(form.falseeast.value)) * units; //easting from the CM var m = north / k; //meridian distance var sigma = (m * pi) / (180 * G); // calculate the foot point latitude and constants for that latitude var footlat = sigma + ((3 * n / 2) - (27 * Math.pow(n, 3) / 32)) * Math.sin(2 * sigma) + ((21 * n * n / 16) - (55 * Math.pow(n, 4) / 32)) * Math.sin(4 * sigma) + (151 * Math.pow(n, 3) / 96) * Math.sin(6 * sigma) + (1097 * Math.pow(n, 4) / 512) * Math.sin(8 * sigma); var rho = a * (1 - e2) / Math.pow(1 - (e2 * Math.sin(footlat) * Math.sin(footlat)),(3/2)); //radius of curvature in plane of meridian var nu = a / Math.sqrt(1 - (e2 * Math.sin(footlat) * Math.sin(footlat))); //radius of curvature in prime vertical var psi = nu / rho; var t = Math.tan(footlat); //tan of latitude // calculate latitude var x = east / (k * nu); var laterm1 = (t / (k * rho )) * ( east * x / 2); var laterm2 = (t / (k * rho )) * ( east * Math.pow(x, 3) / 24) * (-4 * psi * psi + 9 * psi * (1 - t * t) + 12 * t * t ); var laterm3 = (t / (k * rho )) * ( east * Math.pow(x, 5) / 720) * (8 * Math.pow(psi, 4) * (11 - 24 * t * t) - 12 * Math.pow(psi, 3) * (21 - 71 * t * t) + 15 * psi * psi * (15 - 98 * t * t + 15 * Math.pow(t, 4)) + 180 * psi * (5 * t * t - 3 * Math.pow(t, 4)) + 360 * Math.pow(t, 4)); var laterm4 = (t / (k * rho )) * ( east * Math.pow(x, 7) / 40320) * (1385 + 3633 * t * t + 4095 * Math.pow(t, 4) + 1575 * Math.pow(t, 6)); var latrad = footlat - laterm1 + laterm2 - laterm3 + laterm4; ddd2dms(form, in1, rad2deg(latrad)); // calculate longitude var seclat = 1 / Math.cos(footlat); var loterm1 = x * seclat; var loterm2 = (Math.pow(x, 3) / 6) * seclat * (psi + 2 * t * t); var loterm3 = (Math.pow(x, 5) / 120) * seclat * (-4 * Math.pow(psi, 3) * (1 - 6 * t * t) + psi * psi * (9 -68 * t * t) + 72 * psi * t * t + 24 * Math.pow(t, 4)); var loterm4 = (Math.pow(x, 7) / 5040) * seclat * (61 + 662 * t * t + 1320 * Math.pow(t, 4) + 720 * Math.pow(t, 6)); var w = loterm1 - loterm2 + loterm3 - loterm4; var longrad = deg2rad(parseFloat(form.cmlong.value)) + w; ddd2dms(form, in2, rad2deg(longrad)); // calculate grid convergence var gterm1 = -t * x; var gterm2 = (t * Math.pow(x, 3) / 3) * (-2 * psi * psi + 3 * psi + t * t); var gterm3 = (-t * Math.pow(x, 5) / 15) * (Math.pow(psi, 4) * (11 - 24 * t * t) - 3 * Math.pow(psi, 3) * (8 - 23 * t * t) + 5 * psi * psi * (3 - 14 * t * t) + 30 * psi * t * t + 3 * Math.pow(t, 4)); var gterm4 = (t * Math.pow(x, 7) / 315) * (17 +77 * t * t + 105 * Math.pow(t, 4) + 45 * Math.pow(t, 6)); var gridconv = gterm1 + gterm2 + gterm3 + gterm4; ddd2dms(form, in4, rad2deg(gridconv)); // calculate point scale factor x = east * east / (k * k * rho * nu); var kterm1 = x / 2; var kterm2 = (x * x / 24) * (4 * psi * (1 - 6 * t * t) - 3 * (1 - 16 * t * t) - 24 * t * t / psi); var kterm3 = Math.pow(x, 3) / 720 ; var pointk = k * (1 + kterm1 + kterm2 + kterm3); form.pointk[in5].value = roundoff(pointk, bearsize); return true; } function calcRandBgeo(form, in1, in2, in3, in4, in5, in6){ // in1 - point 1 latitude index // in2 - point 1 longitude index // in3 - point 2 latitude index // in4 - point 2 longitude index // in5 - distance index // in6 - bearing index var j = form.units.selectedIndex; var units = form.units.options[j].value; // calclulate constants var k = parseFloat(form.k.value); //scale factor var a = parseFloat(form.a.value); //semi-major axis var f = 1 / parseFloat(form.invf.value); //flattening var b = a * (1 - f); //semi-minor axis var latddd1 = dms2ddd(form.degreevalue[in1].value, form.minutevalue[in1].value, form.secondvalue[in1].value); // convert latitude of point to decimal degrees then radians var latrad1 = deg2rad(latddd1); var londdd1 = dms2ddd(form.degreevalue[in2].value, form.minutevalue[in2].value, form.secondvalue[in2].value); // likewise for longitude var lonrad1 = deg2rad(londdd1); var latddd2 = dms2ddd(form.degreevalue[in3].value, form.minutevalue[in3].value, form.secondvalue[in3].value); // convert latitude of point to decimal degrees then radians var latrad2 = deg2rad(latddd2); var londdd2 = dms2ddd(form.degreevalue[in4].value, form.minutevalue[in4].value, form.secondvalue[in4].value); // likewise for longitude var lonrad2 = deg2rad(londdd2); var w = lonrad2 - lonrad1; if (Math.abs(w) > 1.5707963268) { alert("Sorry this calculator isn't designed for such large distances.\nTry my Great Circle Calculator instead."); } var tanB1 = Math.tan(latrad1) * (1 - f); var tanB2 = Math.tan(latrad2) * (1 - f); var B1 = Math.atan(tanB1); var B2 = Math.atan(tanB2); var term1 = Math.sin(w) * Math.cos(B2); var term2 = Math.sin(B2) * Math.cos(B1) - Math.sin(B1) * Math.cos(B2) * Math.cos(w); var phi = Math.asin(Math.sqrt(term1 * term1 + term2 * term2)); var c = (Math.cos(B1) * Math.cos(B2) * Math.sin(w)) / Math.sin(phi); var m = 1 - c * c; term1 = phi * (1 + f + f * f) term2 = Math.sin(B1) * Math.sin(B2) * ((f + f * f) * Math.sin(phi) - ((f * f / 2) * phi * phi / Math.sin(phi))); var term3 = m * (-1 * (phi * (f + f * f) / 2) - ((f + f * f) / 2) * Math.sin(phi) * Math.cos(phi) + ((f * f / 2) * phi * phi) / Math.tan(phi)); var term4 = Math.sin(B1) * Math.sin(B2) * Math.sin(B1) * Math.sin(B2) * (-1 * (f * f /2) * Math.sin(phi) * Math.cos(phi)); var term5 = m * m * ((f * f / 16 ) * phi + (f * f / 16) * Math.sin(phi) * Math.cos(phi) - (f * f / 2) * phi * phi / Math.tan(phi) - (f * f / 8) * Math.sin(phi) * Math.pow(Math.cos(phi), 3)); var term6 = Math.sin(B1) * Math.sin(B2) * m * ((f * f / 2) * phi * phi / Math.sin(phi) + (f * f / 2) * Math.sin(phi) * Math.cos(phi) * Math.cos(phi)); var s = b * (term1 + term2 + term3 + term4 + term5 + term6); form.distvalue[in5].value = roundoff((s / units), distsize); //round off distance term1 = (f + f * f) * phi; term2 = Math.sin(B1) * Math.sin(B2) * ( -1 * (f * f / 2) * Math.sin(phi) - f * f * phi * phi / Math.sin(phi)); term3 = m * (-1 * (5 * f * f / 4) * phi + (f * f /4) * Math.sin(phi) * Math.cos(phi) + f * f * phi * phi / Math.tan(phi)); lamda = c * (term1 + term2 + term3) + w; var de = Math.sin(B2) * Math.cos(B1) - Math.cos(lamda) * Math.sin(B1) * Math.cos(B2); var dn = Math.sin(lamda) * Math.cos(B2); var x = Math.atan2(dn,de); //compute bearing, result in radians if (x < 0) { x += 2 * pi; //if negative add 2*pi or 360 degrees } if (w == 0) { if (latddd2 < latddd1) x = pi; else if (latddd2 > latddd1) x = 0; else if (latddd2 == latddd1) { x = 0; form.distvalue[in5].value = roundoff(0, distsize); //round off distance } } ddd2dms(form, in6, rad2deg(x)); return true; } function calcPointgeo(form, in1, in2, in3, in4, in5, in6){ // in1 - point 1 latitude index // in2 - point 1 longitude index // in3 - point 2 latitude index // in4 - point 2 longitude index // in5 - distance index // in6 - bearing index var j = form.units.selectedIndex; var units = form.units.options[j].value; // calclulate constants var k = parseFloat(form.k.value); //scale factor var a = parseFloat(form.a.value); //semi-major axis var f = 1 / parseFloat(form.invf.value); //flattening var b = a * (1 - f); //semi-minor axis var e2 = (a * a - b * b)/(a * a); //eccentricity squared var e = Math.sqrt(e2); //eccentricity var ei2 = (a * a - b * b)/(b * b); //second eccentricity squared var ei = Math.sqrt(ei2); //second eccentricity var latddd1 = dms2ddd(form.degreevalue[in1].value, form.minutevalue[in1].value, form.secondvalue[in1].value); // convert latitude of point to decimal degrees then radians var latrad1 = deg2rad(latddd1); var londdd1 = dms2ddd(form.degreevalue[in2].value, form.minutevalue[in2].value, form.secondvalue[in2].value); // likewise for longitude var lonrad1 = deg2rad(londdd1); var x12 = dms2ddd(form.degreevalue[in6].value, form.minutevalue[in6].value, form.secondvalue[in6].value); //convert to decimal degrees x12 = deg2rad(x12); //convert to radians var s = (parseFloat(form.distvalue[in5].value) * units); if (Math.abs(s) > 10019148.059) { alert("Sorry this calculator isn't designed for such large distances.\nTry my Great Circle Calculator instead."); } var tanB1 = Math.tan(latrad1) * (1 - f); var B1 = Math.atan(tanB1); var cosB0 = Math.cos(B1) * Math.sin(x12); var B0 = Math.acos(cosB0); var g = Math.cos(B1) * Math.cos(x12); var m = (1 + (ei2 / 2) * Math.sin(B1) * Math.sin(B1)) * (1 - Math.cos(B0) * Math.cos(B0)); var phis = s / b; var a1 = (1 + (ei2 / 2) * Math.sin(B1) * Math.sin(B1)) * (Math.sin(B1) * Math.sin(B1) * Math.cos(phis) + g * Math.sin(B1) * Math.sin(phis)); var term1 = a1 * (-1 * (ei2 / 2) * Math.sin(phis)); var term2 = m * (-1 * (ei2 / 4) * phis + (ei2 / 4) * Math.sin(phis) * Math.cos(phis)); var term3 = a1 * a1 * ((5 * ei2 * ei2 / 8) * Math.sin(phis) * Math.cos(phis)); var term4 = m * m * (( 11 * ei2 * ei2 / 64) * phis - (13 * ei2 * ei2 / 64) * Math.sin(phis) * Math.cos(phis) - (ei2 * ei2 / 8) * phis * Math.cos(phis) * Math.cos(phis) + (5 * ei2 * ei2 / 32) * Math.sin(phis) * Math.pow(Math.cos(phis), 3)); var term5 = a1 * m * ((3 * ei2 * ei2 / 8) * Math.sin(phis) + (ei2 * ei2 /4) * phis * Math.cos(phis) - (5 * ei2 * ei2 / 8) * Math.sin(phis) * Math.cos(phis) * Math.cos(phis)); var phi0 = phis + term1 + term2 + term3 + term4 + term5; var cotlamda = (Math.cos(B1) * Math.cos(phi0) - Math.sin(B1) * Math.sin(phi0) * Math.cos(x12)) / (Math.sin(phi0) * Math.sin(x12)); var lamda = Math.atan(1 / cotlamda); term1 = -1 * f * phis; term2 = a1 * ((3 * f * f / 2) * Math.sin(phis)); term3 = m * ((3 * f * f / 4) * phis - (3 * f * f / 4) * Math.sin(phis) * Math.cos(phis)); var w = (term1 + term2 + term3) * Math.cos(B0) + lamda; var lonrad2 = lonrad1 + w; ddd2dms(form, in4, rad2deg(lonrad2)); var sinB2 = Math.sin(B1) * Math.cos(phi0) + g * Math.sin(phi0); var cosB2 = Math.sqrt((Math.cos(B0) * Math.cos(B0)) + Math.pow((g * Math.cos(phi0) - Math.sin(B1) * Math.sin(phi0)), 2)); var tanB2 = sinB2 / cosB2; var tanlat2 = tanB2 / (1 - f); var latrad2 = Math.atan(tanlat2); ddd2dms(form, in3, rad2deg(latrad2)); return true; } function ddd2dms(form, ind, bearing){ var y = Math.abs(parseFloat(bearing)); form.degreevalue[ind].value = parseInt(y + 1) - 1; var x = y - form.degreevalue[ind].value; form.minutevalue[ind].value = parseInt(x * 60 + 1) - 1; form.secondvalue[ind].value = ((x * 60) - form.minutevalue[ind].value) * 60; form.secondvalue[ind].value = roundoff(form.secondvalue[ind].value,secsize); if (form.secondvalue[ind].value == 60) { form.secondvalue[ind].value = "0"; form.minutevalue[ind].value = form.minutevalue[ind].value * 1 + 1; if (form.minutevalue[ind].value == 60) { form.minutevalue[ind].value = "0"; form.degreevalue[ind].value = form.degreevalue[ind].value * 1 + 1; } } if (bearing < 0) { if (form.degreevalue[ind].value != 0) form.degreevalue[ind].value = -form.degreevalue[ind].value; else if (form.minutevalue[ind].value != 0) form.minutevalue[ind].value = -form.minutevalue[ind].value; else form.secondvalue[ind].value = -form.secondvalue[ind].value; } form.degreevalue[ind].value += "\260"; // add degrees symbol now we have finished with value form.minutevalue[ind].value += "\'"; //add minute symbol now we have finished with value form.secondvalue[ind].value += '\"'; //round off seconds and add symbol return true; } function confirmSphChange(form){ //to only allow changes to spheroid parameters if in user defined mode var i = form.spheroid.selectedIndex; if (i != 22) { form.a.blur(); form.invf.blur(); alert("\n To override Spheroid Parameters\n use the User Defined option."); } return true; } function updateSpheroid(form){ var i = form.spheroid.selectedIndex; switch(i) { case 0: form.a.value = 6378388.000; form.invf.value = 297.000; break; case 1: form.a.value = 6378388.000; form.invf.value = 297.000; break; case 2: form.a.value = 6378206.400; form.invf.value = 294.978698200; break; case 3: form.a.value = 6378249.145; form.invf.value = 293.465; break; case 4: form.a.value = 6377276.345; form.invf.value = 300.8017; break; case 5: form.a.value = 6377397.155; form.invf.value = 299.1528128; break; case 6: form.a.value = 6378166; form.invf.value = 298.3; break; case 7: form.a.value = 6378135; form.invf.value = 298.26; break; case 8: form.a.value = 6378293.645; form.invf.value = 294.26; break; case 9: form.a.value = 6377304.063; form.invf.value = 300.8017; break; case 10: form.a.value = 6377563.396; form.invf.value = 299.3249646; break; case 11: form.a.value = 6378200; form.invf.value = 298.3; break; case 12: form.a.value = 6378245; form.invf.value = 298.3; break; case 13: form.a.value = 6378270; form.invf.value = 297; break; case 14: form.a.value = 6378295; form.invf.value = 296; break; case 15: form.a.value = 6378150; form.invf.value = 298.3; break; case 16: form.a.value = 6378160; form.invf.value = 298.25; break; case 17: form.a.value = 6377298.561; form.invf.value = 300.8017; break; case 18: form.a.value = 6378145; form.invf.value = 298.25; break; case 19: form.a.value = 6378137; form.invf.value = 298.257223563; break; case 20: form.a.value = 6378160; form.invf.value = 298.247; break; case 21: form.a.value = 6378160; form.invf.value = 298.25; break; case 22: form.a.value = ""; form.invf.value = ""; break; } return true; } function confirmProjChange(form){ //to only allow changes to projection parameters if in user defined mode var i = form.projection.selectedIndex; if (i != 2) { form.falsenorth.blur(); form.falseeast.blur(); form.k.blur(); alert("\n To override Projection Parameters\n use the User Defined option."); } return true; } function updateProjection(form, x){ var i = form.projection.selectedIndex; var j = form.units.selectedIndex; var units = form.units.options[j].value; switch(i) { case 0: form.falsenorth.value = 0; form.falseeast.value = 500000 / units; form.k.value = 0.9996; break; case 1: form.falsenorth.value = 10000000 / units; form.falseeast.value = 500000 / units; form.k.value = 0.9996; break; case 2: if (x == 1) { // only reset if called from projection selection not grid units form.falsenorth.value = ''; form.falseeast.value = ''; form.k.value = ''; } break; } } function swapgeos(form){ var x = form.degreevalue[0].value; form.degreevalue[0].value = form.degreevalue[5].value; form.degreevalue[5].value = x; x = form.degreevalue[1].value; form.degreevalue[1].value = form.degreevalue[6].value; form.degreevalue[6].value = x; x = form.minutevalue[0].value; form.minutevalue[0].value = form.minutevalue[5].value; form.minutevalue[5].value = x; x = form.minutevalue[1].value; form.minutevalue[1].value = form.minutevalue[6].value; form.minutevalue[6].value = x; x = form.secondvalue[0].value; form.secondvalue[0].value = form.secondvalue[5].value; form.secondvalue[5].value = x; x = form.secondvalue[1].value; form.secondvalue[1].value = form.secondvalue[6].value; form.secondvalue[6].value = x; return true; } function swapgrid(form){ var x = form.north[0].value; form.north[0].value = form.north[1].value; form.north[1].value = x; x = form.east[0].value; form.east[0].value = form.east[1].value; form.east[1].value = x; return true; } function updateCM(form){ var zone = parseFloat(form.zone.value); if ((zone < 1) || (zone > 60) || isblank(form.zone.value)) { form.zone.value = ""; alert("\n Please enter a UTM Zone number\n between 1 and 60."); form.zone.focus(); } else { form.cmlong.value = zone * 6 - 183 + "\260"; } } function updateZone(form){ var cmlong = parseFloat(form.cmlong.value); if ((cmlong < -180) || (cmlong > 180) || isblank(form.cmlong.value)) { form.cmlong.value = ""; alert("\n Please enter a Longitude of Central Meridian between +/- 180\260"); form.cmlong.focus(); } else { form.zone.value = roundoff(((cmlong + 183) / 6), 2); } } function getCookie(form){ var allcookies = document.cookie; // look for start of cookie named "geode" var pos = allcookies.indexOf("geode="); if (pos != -1) { var start = pos + 6; // start of cookie value var end = allcookies.indexOf(";", start); //End of cookie value if (end == -1) end = allcookies.length; var saved = allcookies.substring(start, end); //Extract the value var options = saved.split(":"); form.spheroid.selectedIndex = options[0]; form.zone.value = options[1]; form.cmlong.value = options[2]; form.projection.selectedIndex = options[3]; form.a.value = options[4]; form.invf.value = options[5]; form.falsenorth.value = options[6]; form.falseeast.value = options[7]; form.k.value = options[8]; form.units.selectedIndex = options[9]; } return true; } function saveCookie(form){ var when = new Date(); when.setMonth( when.getMonth() + 12 ); // cookie valid for one year var str = form.spheroid.selectedIndex + ":"; str += form.zone.value + ":"; str += form.cmlong.value + ":"; str += form.projection.selectedIndex + ":"; str += form.a.value + ":"; str += form.invf.value + ":"; str += form.falsenorth.value + ":"; str += form.falseeast.value + ":"; str += form.k.value + ":"; str += form.units.selectedIndex + ":"; document.cookie = "geode=" + str + ";expires=" + when.toGMTString(); return true; } //--> </SCRIPT> <P> <DIV align=center><NOSCRIPT></NOSCRIPT></DIV> <P> <FORM name=geodetics onreset="return confirm('Ivalyti laukus ir pradti i naujo?')"> <TABLE height=421 width=487> <TBODY> <TR> <TD width=108>Spheroid:</TD> <TD colSpan=2><SELECT disabled onchange=updateSpheroid(this.form) name=spheroid> <OPTION>International 1924</OPTION> <OPTION>Hayford 1909</OPTION> <OPTION>Clarke 1866</OPTION> <OPTION>Clarke 1880</OPTION> <OPTION>Everest 1830</OPTION> <OPTION>Bessel 1841</OPTION> <OPTION>Fischer 1960</OPTION> <OPTION>A.P.L. Satellite</OPTION> <OPTION>Clarke 1858</OPTION> <OPTION>Malayan</OPTION> <OPTION>Airy 1830</OPTION> <OPTION>Helmert 1906</OPTION> <OPTION>Krassovsky 1938</OPTION> <OPTION>Hough 1956</OPTION> <OPTION>War Office</OPTION> <OPTION>Fischer 1968</OPTION> <OPTION>Aus. National 1967</OPTION> <OPTION>Modified Everest</OPTION> <OPTION>NWL 8D</OPTION> <OPTION selected>WGS 1984</OPTION> <OPTION>GRS (1967)</OPTION> <OPTION>Sth American 1969</OPTION> <OPTION>User Defined</OPTION></SELECT> </TD> <TD width=80>Projection:</TD> <TD width=113><SELECT disabled onchange="updateProjection(this.form, 1)" name=projection> <OPTION>UTM North</OPTION> <OPTION>UTM South</OPTION> <OPTION selected>LKS-94</OPTION> <OPTION>User Defined TM</OPTION></SELECT> </TD> <TD width=112>False Northing:</TD> <TD width=107 colSpan=2><INPUT disabled onfocus=confirmProjChange(this.form) size=12 value=0 name=falsenorth> </TD></TR> <TR> <TD width=108>Semi-Major Axis:</TD> <TD width=85><INPUT disabled onfocus=confirmSphChange(this.form) size=12 value=6378137 name=a> </TD> <TD width=31></TD> <TD width=80>UTM Zone No.:</TD> <TD width=113><INPUT disabled onchange=updateCM(this.form) size=4 value=34.5 name=zone> </TD> <TD width=112>False Easting:</TD> <TD width=107 colSpan=2><INPUT disabled onfocus=confirmProjChange(this.form) size=12 value=500000 name=falseeast> </TD></TR> <TR> <TD width=108>Inverse Flattening:</TD> <TD width=85><INPUT disabled onfocus=confirmSphChange(this.form) size=12 value=298.257223563 name=invf> </TD> <TD width=31></TD> <TD width=80>Longitude of Central Meridian:</TD> <TD width=113><INPUT disabled onchange=updateZone(this.form) size=5 value=24 name=cmlong> </TD> <TD width=112>Central Scale Factor:</TD> <TD width=107 colSpan=2><INPUT disabled onfocus=confirmProjChange(this.form) size=8 value=0.9998 name=k> </TD></TR> <TR> <TD width=108></TD> <TD width=85></TD> <TD width=31></TD> <TD width=80></TD> <TD width=113></TD> <TD width=112>Grid Units:</TD> <TD width=107 colSpan=2><SELECT disabled onchange="updateProjection(this.form, 2)" name=units> <OPTION value=1 selected>Metres</OPTION> <OPTION value=0.304800609604316>US Feet</OPTION></SELECT> </TD></TR> <TR> <TD colSpan=8> <HR> </TD></TR> <TR> <TD bgColor=#c6e7fb colSpan=8> <DIV align=center><B>Tako 1 koordinai skaiiavimas</B></DIV></TD></TR> <TR> <TD width=108 bgColor=#c6e7fb>Platuma</TD> <TD width=85 bgColor=#c6e7fb><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=31 bgColor=#c6e7fb><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=80 bgColor=#c6e7fb><INPUT size=6 value='0"' name=secondvalue> </TD> <TD width=113 bgColor=#c6e7fb><INPUT onclick="geo2grid(this.form, 0, 1, 0, 2, 0)" type=button value=" Perskaiiuoti >>"> </TD> <TD width=112 bgColor=#c6e7fb>Northing:</TD> <TD width=107 bgColor=#c6e7fb colSpan=2><INPUT size=12 value=0 name=north> </TD></TR> <TR> <TD width=108 bgColor=#c6e7fb>Ilguma</TD> <TD width=85 bgColor=#c6e7fb><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=31 bgColor=#c6e7fb><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=80 bgColor=#c6e7fb><INPUT size=6 value='0"' name=secondvalue> </TD> <TD width=113 bgColor=#c6e7fb><INPUT onclick="grid2geo(this.form, 0, 1, 0, 2, 0)" type=button value=" << Perskaiiuoti"> </TD> <TD width=112 bgColor=#c6e7fb>Easting:</TD> <TD width=107 bgColor=#c6e7fb colSpan=2><INPUT size=12 value=0 name=east> </TD></TR> <TR> <TD width=108 bgColor=#c6e7fb>Grid Convergence:</TD> <TD width=85 bgColor=#c6e7fb><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=31 bgColor=#c6e7fb><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=80 bgColor=#c6e7fb><INPUT size=6 value='0"' name=secondvalue> </TD> <TD width=113 bgColor=#c6e7fb></TD> <TD width=112 bgColor=#c6e7fb>Point Scale Factor:</TD> <TD width=107 bgColor=#c6e7fb colSpan=2><INPUT size=12 value=0 name=pointk> </TD></TR> <TR> <TD colSpan=8> <HR> </TD></TR> <TR bgColor=#e6ecbb> <TD colSpan=8> <DIV align=center><B>Atstumo ir azimuto skaiiavimas</B></DIV></TD></TR> <TR bgColor=#e6ecbb> <TD width=108>Ellipsoidal Distance:</TD> <TD width=85><INPUT size=12 value=0 name=distvalue> </TD> <TD width=31></TD> <TD width=80></TD> <TD width=113>Grid Distance:</TD> <TD width=112><INPUT size=12 value=0 name=distvalue> </TD> <TD width=107 colSpan=2> </TD></TR> <TR bgColor=#e6ecbb> <TD width=108>True Bearing: </TD> <TD width=85><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=31><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=80><INPUT size=6 value='0"' name=secondvalue> </TD> <TD width=113>Grid Bearing:</TD> <TD width=112><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=52><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=53><INPUT size=5 value='0"' name=secondvalue> </TD></TR> <TR bgColor=#e6ecbb> <TD width=108></TD> <TD width=85><INPUT onclick="calcRandBgeo(this.form, 0, 1, 5, 6, 0, 3)" type=button value="Calc R & B"> </TD> <TD colSpan=2><INPUT onclick="calcPointgeo(this.form, 0, 1, 5, 6, 0, 3)" type=button value="Calc Point 2"> </TD> <TD width=113></TD> <TD width=112><INPUT onclick="calcRandB(this.form, 0, 1, 1, 4)" type=button value="Calc R & B" name=button> </TD> <TD width=107 colSpan=2><INPUT onclick="calcPoint(this.form, 0, 1, 1, 4)" type=button value="Calc Point 2" name=button2> </TD></TR> <TR> <TD colSpan=8> <HR> </TD></TR> <TR> <TD bgColor=#baedfc colSpan=8> <DIV align=center><B>Tako 2 koordinai skaiiavimas</B></DIV></TD></TR> <TR> <TD width=108 bgColor=#baedfc>Platuma</TD> <TD width=85 bgColor=#baedfc><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=31 bgColor=#baedfc><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=80 bgColor=#baedfc><INPUT size=6 value='0"' name=secondvalue> </TD> <TD width=113 bgColor=#baedfc><INPUT onclick="geo2grid(this.form, 5, 6, 1, 7, 1)" type=button value=" Perskaiiuoti >>"> </TD> <TD width=112 bgColor=#baedfc>Northing:</TD> <TD width=107 bgColor=#baedfc colSpan=2><INPUT size=12 value=0 name=north> </TD></TR> <TR> <TD width=108 bgColor=#baedfc>Ilguma</TD> <TD width=85 bgColor=#baedfc><INPUT size=12 value=0 name=degreevalue> </TD> <TD width=31 bgColor=#baedfc><INPUT size=4 value="0'" name=minutevalue> </TD> <TD width=80 bgColor=#baedfc><INPUT size=6 value='0"' name=secondvalue> </TD> <TD width=113 bgColor=#baedfc><INPUT onclick="grid2geo(this.form, 5, 6, 1, 7, 1)" type=button valu