cdm/src/main/java/ucar/unidata/geoloc/projection/TransverseMercator.java
public double[][] projToLatLon(double[][] from, double[][] to) {
    int cnt = from[0].length;
    double[] fromXA = from[INDEX_X];
    double[] fromYA = from[INDEX_Y];
    double[] toLatA = to[INDEX_LAT];
    double[] toLonA = to[INDEX_LON];

    double toLat, toLon;
    for (int i = 0; i < cnt; i++) {
      double fromX = fromXA[i];
      double fromY = fromYA[i];

      double x = (fromX - falseEasting) / scale;
      double d = (fromY - falseNorthing) / scale + lat0;
      toLon = Math.toDegrees(lon0 + Math.atan2(Math.sinh(x), Math.cos(d)));
      toLat = Math.toDegrees(Math.asin(Math.sin(d) / Math.cosh(x)));

      toLatA[i] = (double) toLat;
      toLonA[i] = (double) toLon;
    }
    return to;
  }
public double[][] projToLatLon(double[][] from, double[][] to) {
    int cnt = from[0].length;
    double[] fromXA = from[INDEX_X];
    double[] fromYA = from[INDEX_Y];
    double[] toLatA = to[INDEX_LAT];
    double[] toLonA = to[INDEX_LON];

    double toLat, toLon;
    for (int i = 0; i < cnt; i++) {
      double fromX = fromXA[i];
      double fromY = fromYA[i];

      double x = (fromX - falseEasting) / scale;
      double d = (fromY - falseNorthing) / scale + lat0;
      toLon = Math.toDegrees(lon0 + Math.atan2(Math.sinh(x), Math.cos(d)));
      toLat = Math.toDegrees(Math.asin(Math.sin(d) / Math.cosh(x)));

      toLatA[i] = (double) toLat;
      toLonA[i] = (double) toLon;
    }
    return to;
  }
public double [ ] [ ] projToLatLon ( double [ ] [ ] from , double [ ] [ ] to ) { int cnt = from [ 0 ] . length ; double [ ] fromXA = from [ INDEX_X ] ; double [ ] fromYA = from [ INDEX_Y ] ; double [ ] toLatA = to [ INDEX_LAT ] ; double [ ] toLonA = to [ INDEX_LON ] ; double toLat , toLon ; for ( int i = 0 ; i < cnt ; i ++ ) { double fromX = fromXA [ i ] ; double fromY = fromYA [ i ] ; double x = ( fromX - falseEasting ) / scale ; double d = ( fromY - falseNorthing ) / scale + lat0 ; toLon = Math . toDegrees ( lon0 + Math . atan2 ( Math . sinh ( x ) , Math . cos ( d ) ) ) ; toLat = Math . toDegrees ( Math . asin ( Math . sin ( d ) / Math . cosh ( x ) ) ) ; toLatA [ i ] = ( double ) toLat ; toLonA [ i ] = ( double ) toLon ; } return to ; }
Convert lat/lon coordinates to projection coordinates.

@param from array of lat/lon coordinates: from[2][n], where
(from[0][i], from[1][i]) is the (lat,lon) coordinate
of the ith point
@param to   resulting array of projection coordinates: to[2][n]
where (to[0][i], to[1][i]) is the (x,y) coordinate
of the ith point
@return the "to" array
Convert lat / lon coordinates to projection coordinates .