L.LatLng.UTM.js
/*
        * MapXYToLatLon
        *
        * Converts x and y coordinates in the Transverse Mercator projection to
        * a latitude/longitude pair.  Note that Transverse Mercator is not
        * the same as UTM; a scale factor is required to convert between them.
        *
        * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J.,
        *   GPS: Theory and Practice, 3rd ed.  New York: Springer-Verlag Wien, 1994.
        *
        * Inputs:
        *   x - The easting of the point, in meters.
        *   y - The northing of the point, in meters.
        *   lambda0 - Longitude of the central meridian to be used, in radians.
        *
        * Outputs:
        *   philambda - A 2-element containing the latitude and longitude
        *               in radians.
        *
        * Returns:
        *   The function does not return a value.
        *
        * Remarks:
        *   The local variables Nf, nuf2, tf, and tf2 serve the same purpose as
        *   N, nu2, t, and t2 in MapLatLonToXY, but they are computed with respect
        *   to the footpoint latitude phif.
        *
        *   x1frac, x2frac, x2poly, x3poly, etc. are to enhance readability and
        *   to optimize computations.
        *
        */
MapXYToLatLon
Converts x and y coordinates in the Transverse Mercator projection to
a latitude/longitude pair.  Note that Transverse Mercator is not
the same as UTM; a scale factor is required to convert between them.

Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J.,
GPS: Theory and Practice, 3rd ed.  New York: Springer-Verlag Wien, 1994.

The easting of the point, in meters.
y - The northing of the point, in meters.
lambda0 - Longitude of the central meridian to be used, in radians.

A 2-element containing the latitude and longitude
in radians.

The function does not return a value.

The local variables Nf, nuf2, tf, and tf2 serve the same purpose as
N, nu2, t, and t2 in MapLatLonToXY, but they are computed with respect
to the footpoint latitude phif.

x1frac, x2frac, x2poly, x3poly, etc. are to enhance readability and
to optimize computations.
MapXYToLatLon Converts x and y coordinates in the Transverse Mercator projection to a latitude / longitude pair . Note that Transverse Mercator is not the same as UTM ; a scale factor is required to convert between them . Hoffmann - Wellenhof B . Lichtenegger H . and Collins J . GPS : Theory and Practice 3rd ed . New York : Springer - Verlag Wien 1994 . The easting of the point in meters . y - The northing of the point in meters . lambda0 - Longitude of the central meridian to be used in radians . A 2 - element containing the latitude and longitude in radians . The function does not return a value . The local variables Nf nuf2 tf and tf2 serve the same purpose as N nu2 t and t2 in MapLatLonToXY but they are computed with respect to the footpoint latitude phif . x1frac x2frac x2poly x3poly etc . are to enhance readability and to optimize computations .
function MapXYToLatLon(x, y, lambda0, philambda) {
            var phif, Nf, Nfpow, nuf2, ep2, tf, tf2, tf4, cf;
            var x1frac, x2frac, x3frac, x4frac, x5frac, x6frac, x7frac, x8frac;
            var x2poly, x3poly, x4poly, x5poly, x6poly, x7poly, x8poly;
            phif = FootpointLatitude(y);
            ep2 = (Math.pow(sm_a, 2.0) - Math.pow(sm_b, 2.0)) / Math.pow(sm_b, 2.0);
            cf = Math.cos(phif);
            nuf2 = ep2 * Math.pow(cf, 2.0);
            Nf = Math.pow(sm_a, 2.0) / (sm_b * Math.sqrt(1 + nuf2));
            Nfpow = Nf;
            tf = Math.tan(phif);
            tf2 = tf * tf;
            tf4 = tf2 * tf2;
            x1frac = 1.0 / (Nfpow * cf);
            Nfpow *= Nf; 
            x2frac = tf / (2.0 * Nfpow);
            Nfpow *= Nf; 
            x3frac = 1.0 / (6.0 * Nfpow * cf);
            Nfpow *= Nf; 
            x4frac = tf / (24.0 * Nfpow);
            Nfpow *= Nf; 
            x5frac = 1.0 / (120.0 * Nfpow * cf);
            Nfpow *= Nf; 
            x6frac = tf / (720.0 * Nfpow);
            Nfpow *= Nf; 
            x7frac = 1.0 / (5040.0 * Nfpow * cf);
            Nfpow *= Nf; 
            x8frac = tf / (40320.0 * Nfpow);
            x2poly = -1.0 - nuf2;
            x3poly = -1.0 - 2 * tf2 - nuf2;
            x4poly = 5.0 + 3.0 * tf2 + 6.0 * nuf2 - 6.0 * tf2 * nuf2 - 3.0 * (nuf2 * nuf2) -
                     9.0 * tf2 * (nuf2 * nuf2);
            x5poly = 5.0 + 28.0 * tf2 + 24.0 * tf4 + 6.0 * nuf2 + 8.0 * tf2 * nuf2;
            x6poly = -61.0 - 90.0 * tf2 - 45.0 * tf4 - 107.0 * nuf2 + 162.0 * tf2 * nuf2;
            x7poly = -61.0 - 662.0 * tf2 - 1320.0 * tf4 - 720.0 * (tf4 * tf2);
            x8poly = 1385.0 + 3633.0 * tf2 + 4095.0 * tf4 + 1575 * (tf4 * tf2);
            philambda[0] = phif + x2frac * x2poly * (x * x) + x4frac * x4poly * Math.pow(x, 4.0) +
                           x6frac * x6poly * Math.pow(x, 6.0) + x8frac * x8poly * Math.pow(x, 8.0);
            philambda[1] = lambda0 + x1frac * x + x3frac * x3poly * Math.pow(x, 3.0) +
                           x5frac * x5poly * Math.pow(x, 5.0) + x7frac * x7poly * Math.pow(x, 7.0);
            return;
        }
function MapXYToLatLon ( x , y , lambda0 , philambda ) { var phif , Nf , Nfpow , nuf2 , ep2 , tf , tf2 , tf4 , cf ; var x1frac , x2frac , x3frac , x4frac , x5frac , x6frac , x7frac , x8frac ; var x2poly , x3poly , x4poly , x5poly , x6poly , x7poly , x8poly ; phif = FootpointLatitude ( y ) ; ep2 = ( Math . pow ( sm_a , 2.0 ) - Math . pow ( sm_b , 2.0 ) ) / Math . pow ( sm_b , 2.0 ) ; cf = Math . cos ( phif ) ; nuf2 = ep2 * Math . pow ( cf , 2.0 ) ; Nf = Math . pow ( sm_a , 2.0 ) / ( sm_b * Math . sqrt ( 1 + nuf2 ) ) ; Nfpow = Nf ; tf = Math . tan ( phif ) ; tf2 = tf * tf ; tf4 = tf2 * tf2 ; x1frac = 1.0 / ( Nfpow * cf ) ; Nfpow *= Nf ; x2frac = tf / ( 2.0 * Nfpow ) ; Nfpow *= Nf ; x3frac = 1.0 / ( 6.0 * Nfpow * cf ) ; Nfpow *= Nf ; x4frac = tf / ( 24.0 * Nfpow ) ; Nfpow *= Nf ; x5frac = 1.0 / ( 120.0 * Nfpow * cf ) ; Nfpow *= Nf ; x6frac = tf / ( 720.0 * Nfpow ) ; Nfpow *= Nf ; x7frac = 1.0 / ( 5040.0 * Nfpow * cf ) ; Nfpow *= Nf ; x8frac = tf / ( 40320.0 * Nfpow ) ; x2poly = - 1.0 - nuf2 ; x3poly = - 1.0 - 2 * tf2 - nuf2 ; x4poly = 5.0 + 3.0 * tf2 + 6.0 * nuf2 - 6.0 * tf2 * nuf2 - 3.0 * ( nuf2 * nuf2 ) - 9.0 * tf2 * ( nuf2 * nuf2 ) ; x5poly = 5.0 + 28.0 * tf2 + 24.0 * tf4 + 6.0 * nuf2 + 8.0 * tf2 * nuf2 ; x6poly = - 61.0 - 90.0 * tf2 - 45.0 * tf4 - 107.0 * nuf2 + 162.0 * tf2 * nuf2 ; x7poly = - 61.0 - 662.0 * tf2 - 1320.0 * tf4 - 720.0 * ( tf4 * tf2 ) ; x8poly = 1385.0 + 3633.0 * tf2 + 4095.0 * tf4 + 1575 * ( tf4 * tf2 ) ; philambda [ 0 ] = phif + x2frac * x2poly * ( x * x ) + x4frac * x4poly * Math . pow ( x , 4.0 ) + x6frac * x6poly * Math . pow ( x , 6.0 ) + x8frac * x8poly * Math . pow ( x , 8.0 ) ; philambda [ 1 ] = lambda0 + x1frac * x + x3frac * x3poly * Math . pow ( x , 3.0 ) + x5frac * x5poly * Math . pow ( x , 5.0 ) + x7frac * x7poly * Math . pow ( x , 7.0 ) ; return ; }
MapXYToLatLon
 Converts x and y coordinates in the Transverse Mercator projection to
 a latitude/longitude pair.
MapXYToLatLon Converts x and y coordinates in the Transverse Mercator projection to a latitude / longitude pair .
/* Get the value of phif, the footpoint latitude. */ /* Precalculate ep2 */ /* Precalculate cos (phif) */ /* Precalculate nuf2 */ /* Precalculate Nf and initialize Nfpow */ /* Precalculate tf */ /* Precalculate fractional coefficients for x**n in the equations
               below to simplify the expressions for latitude and longitude. */ /* now equals Nf**2) */ /* now equals Nf**3) */ /* now equals Nf**4) */ /* now equals Nf**5) */ /* now equals Nf**6) */ /* now equals Nf**7) */ /* now equals Nf**8) */ /* Precalculate polynomial coefficients for x**n.
               -- x**1 does not have a polynomial coefficient. */ /* Calculate latitude */ /* Calculate longitude */