title: How to use Rhino library to use javascript code in Java?
body: <p>I am working on a GPS app and I want to convert my latitudes and longitudes into x-y coordinates based on WGS84 datum. I found this js page to do this: <a href="http://www.uwgb.edu/dutchs/usefuldata/ConvertUTMNoOZ.HTM" rel="nofollow">http://www.uwgb.edu/dutchs/usefuldata/ConvertUTMNoOZ.HTM</a>. I also had a look at other calculators but this one is more accurate. Now if you see the source, functions to perform conversion is being provided. I googled how can I use js code in Java and found out that this library can be used to do this: <a href="http://www.mozilla.org/rhino/" rel="nofollow">http://www.mozilla.org/rhino/</a>. I added jar to my eclipse project and ran examples from here (http://www.mozilla.org/rhino/examples.html) but an not able to figure out how can I use functions from the source code of that page.</p>
  
  <pre><code>function GeogToUTM(){
      //Convert Latitude and Longitude to UTM
      Declarations();
      k0 = 0.9996;//scale on central meridian
      b = a*(1-f);//polar axis.
      //alert(a+"   "+b);
      //alert(1-(b/a)*(b/a));
      e = Math.sqrt(1 - (b/a)*(b/a));//eccentricity
      //alert(e);
      //Input Geographic Coordinates
      //Decimal Degree Option
      latd0 = parseFloat(document.getElementById("DDLatBox0").value);
      lngd0 = parseFloat(document.getElementById("DDLonBox0").value);
      latd1 = Math.abs(parseFloat(document.getElementById("DLatBox0").value));
      latd1 = latd1 + parseFloat(document.getElementById("MLatBox0").value)/60;
      latd1 = latd1 + parseFloat(document.getElementById("SLatBox0").value)/3600;
      if (parseFloat(document.getElementById("DLatBox0").value)&lt;0){latd1=-latd1;}
      lngd1 = Math.abs(parseFloat(document.getElementById("DLonBox0").value));
      lngd1 = lngd1 + parseFloat(document.getElementById("MLonBox0").value)/60;
      lngd1 = lngd1 + parseFloat(document.getElementById("SLonBox0").value)/3600;
      if (parseFloat(document.getElementById("DLonBox0").value)&lt;0){lngd1=-lngd1;}
  
      lngd=lngd0;
      latd=latd0;
      if(isNaN(latd)){
      latd = latd1;
      document.getElementById("DDLatBox0").value = Math.floor(1000000*latd)/1000000;
      lngd=lngd1;
      document.getElementById("DDLonBox0").value = Math.floor(1000000*lngd)/1000000;
      }
  
      if(isNaN(lngd)){lngd = latd1;}
          if(isNaN(latd)|| isNaN(lngd)){
          alert("Non-Numeric Input Value");
          }
      if(latd &lt;-90 || latd&gt; 90){
          alert("Latitude must be between -90 and 90");
          }
      if(lngd &lt;-180 || lngd &gt; 180){
          alert("Latitude must be between -180 and 180");
          }
  
      xd = lngd;
      yd = latd;
      DDtoDMS();
      //Read Input from DMS Boxes
      document.getElementById("DLatBox0").value = Math.floor(ydd);
      document.getElementById("MLatBox0").value = ym;
      document.getElementById("SLatBox0").value = Math.floor(1000*ys)/1000;
      document.getElementById("DLonBox0").value = Math.floor(xdd);
      document.getElementById("MLonBox0").value = xm;
      document.getElementById("SLonBox0").value = Math.floor(1000*xs)/1000;
  
  
      phi = latd*drad;//Convert latitude to radians
      lng = lngd*drad;//Convert longitude to radians
      utmz = 1 + Math.floor((lngd+180)/6);//calculate utm zone
      latz = 0;//Latitude zone: A-B S of -80, C-W -80 to +72, X 72-84, Y,Z N of 84
      if (latd &gt; -80 &amp;&amp; latd &lt; 72){latz = Math.floor((latd + 80)/8)+2;}
      if (latd &gt; 72 &amp;&amp; latd &lt; 84){latz = 21;}
      if (latd &gt; 84){latz = 23;}
  
      zcm = 3 + 6*(utmz-1) - 180;//Central meridian of zone
      //alert(utmz + "   " + zcm);
      //Calculate Intermediate Terms
      e0 = e/Math.sqrt(1 - e*e);//Called e prime in reference
      esq = (1 - (b/a)*(b/a));//e squared for use in expansions
      e0sq = e*e/(1-e*e);// e0 squared - always even powers
      //alert(esq+"   "+e0sq)
      N = a/Math.sqrt(1-Math.pow(e*Math.sin(phi),2));
      //alert(1-Math.pow(e*Math.sin(phi),2));
      //alert("N=  "+N);
      T = Math.pow(Math.tan(phi),2);
      //alert("T=  "+T);
      C = e0sq*Math.pow(Math.cos(phi),2);
      //alert("C=  "+C);
      A = (lngd-zcm)*drad*Math.cos(phi);
      //alert("A=  "+A);
      //Calculate M
      M = phi*(1 - esq*(1/4 + esq*(3/64 + 5*esq/256)));
      M = M - Math.sin(2*phi)*(esq*(3/8 + esq*(3/32 + 45*esq/1024)));
      M = M + Math.sin(4*phi)*(esq*esq*(15/256 + esq*45/1024));
      M = M - Math.sin(6*phi)*(esq*esq*esq*(35/3072));
      M = M*a;//Arc length along standard meridian
      //alert(a*(1 - esq*(1/4 + esq*(3/64 + 5*esq/256))));
      //alert(a*(esq*(3/8 + esq*(3/32 + 45*esq/1024))));
      //alert(a*(esq*esq*(15/256 + esq*45/1024)));
      //alert(a*esq*esq*esq*(35/3072));
      //alert(M);
      M0 = 0;//M0 is M for some origin latitude other than zero. Not needed for standard UTM
      //alert("M    ="+M);
      //Calculate UTM Values
      x = k0*N*A*(1 + A*A*((1-T+C)/6 + A*A*(5 - 18*T + T*T + 72*C -58*e0sq)/120));//Easting relative to CM
      x=x+500000;//Easting standard 
      y = k0*(M - M0 + N*Math.tan(phi)*(A*A*(1/2 + A*A*((5 - T + 9*C + 4*C*C)/24 + A*A*(61 - 58*T + T*T + 600*C - 330*e0sq)/720))));//Northing from equator
      yg = y + 10000000;//yg = y global, from S. Pole
      if (y &lt; 0){y = 10000000+y;}
      //Output into UTM Boxes
      document.getElementById("UTMzBox1").value = utmz;
      document.getElementById("UTMeBox1").value = Math.round(10*(x))/10;
      document.getElementById("UTMnBox1").value = Math.round(10*y)/10;
      if (phi&lt;0){document.getElementById("SHemBox").checked=true;}
      //document.getElementById("UTMzBox1").value = utmz;
      //document.getElementById("UTMeBox1").value = Math.round(10*(500000+x))/10;
      document.getElementById("UTMLonZoneBox2").value = utmz;
      document.getElementById("UTMLatZoneBox2").value = DigraphLetrsE[latz];
      document.getElementById("UTMeBox2").value = Math.round(10*(x-100000*Math.floor(x/100000)))/10;
      document.getElementById("UTMnBox2").value = Math.round(10*(y-100000*Math.floor(y/100000)))/10;
  //Generate Digraph
      MakeDigraph();
      document.getElementById("UTMDgBox2").value = Digraph;
  
  }//close Geog to UTM
  ///////////////////////////////////////////////////////////////////////
  </code></pre>
  
  <p>I know I can't use this function as is as it is embedded within HTML. But I have never worked on js so it would be easier for me if I am needed to do minimum changes to the code. </p>