public long convertGeodeticToTransverseMercator(double Latitude,double Longitude){
  double c;
  double c2;
  double c3;
  double c5;
  double c7;
  double dlam;
  double eta;
  double eta2;
  double eta3;
  double eta4;
  double s;
  double sn;
  double t;
  double tan2;
  double tan3;
  double tan4;
  double tan5;
  double tan6;
  double t1;
  double t2;
  double t3;
  double t4;
  double t5;
  double t6;
  double t7;
  double t8;
  double t9;
  double tmd;
  double tmdo;
  long Error_Code=TRANMERC_NO_ERROR;
  double temp_Origin;
  double temp_Long;
  if ((Latitude < -MAX_LAT) || (Latitude > MAX_LAT)) {
    Error_Code|=TRANMERC_LAT_ERROR;
  }
  if (Longitude > PI)   Longitude-=(2 * PI);
  if ((Longitude < (TranMerc_Origin_Long - MAX_DELTA_LONG)) || (Longitude > (TranMerc_Origin_Long + MAX_DELTA_LONG))) {
    if (Longitude < 0)     temp_Long=Longitude + 2 * PI;
 else     temp_Long=Longitude;
    if (TranMerc_Origin_Long < 0)     temp_Origin=TranMerc_Origin_Long + 2 * PI;
 else     temp_Origin=TranMerc_Origin_Long;
    if ((temp_Long < (temp_Origin - MAX_DELTA_LONG)) || (temp_Long > (temp_Origin + MAX_DELTA_LONG)))     Error_Code|=TRANMERC_LON_ERROR;
  }
  if (Error_Code == TRANMERC_NO_ERROR) {
    dlam=Longitude - TranMerc_Origin_Long;
    if (Math.abs(dlam) > (9.0 * PI / 180)) {
      Error_Code|=TRANMERC_LON_WARNING;
    }
    if (dlam > PI)     dlam-=(2 * PI);
    if (dlam < -PI)     dlam+=(2 * PI);
    if (Math.abs(dlam) < 2.e-10)     dlam=0.0;
    s=Math.sin(Latitude);
    c=Math.cos(Latitude);
    c2=c * c;
    c3=c2 * c;
    c5=c3 * c2;
    c7=c5 * c2;
    t=Math.tan(Latitude);
    tan2=t * t;
    tan3=tan2 * t;
    tan4=tan3 * t;
    tan5=tan4 * t;
    tan6=tan5 * t;
    eta=TranMerc_ebs * c2;
    eta2=eta * eta;
    eta3=eta2 * eta;
    eta4=eta3 * eta;
    sn=TranMerc_a / Math.sqrt(1 - TranMerc_es * Math.pow(Math.sin(Latitude),2));
    tmd=TranMerc_ap * Latitude - TranMerc_bp * Math.sin(2.0 * Latitude) + TranMerc_cp * Math.sin(4.0 * Latitude) - TranMerc_dp * Math.sin(6.0 * Latitude) + TranMerc_ep * Math.sin(8.0 * Latitude);
    tmdo=TranMerc_ap * TranMerc_Origin_Lat - TranMerc_bp * Math.sin(2.0 * TranMerc_Origin_Lat) + TranMerc_cp * Math.sin(4.0 * TranMerc_Origin_Lat) - TranMerc_dp * Math.sin(6.0 * TranMerc_Origin_Lat) + TranMerc_ep * Math.sin(8.0 * TranMerc_Origin_Lat);
    t1=(tmd - tmdo) * TranMerc_Scale_Factor;
    t2=sn * s * c* TranMerc_Scale_Factor / 2.e0;
    t3=sn * s * c3* TranMerc_Scale_Factor* (5.e0 - tan2 + 9.e0 * eta + 4.e0 * eta2) / 24.e0;
    t4=sn * s * c5* TranMerc_Scale_Factor* (61.e0 - 58.e0 * tan2 + tan4 + 270.e0 * eta - 330.e0 * tan2 * eta + 445.e0 * eta2 + 324.e0 * eta3 - 680.e0 * tan2 * eta2 + 88.e0 * eta4 - 600.e0 * tan2 * eta3 - 192.e0 * tan2 * eta4) / 720.e0;
    t5=sn * s * c7* TranMerc_Scale_Factor* (1385.e0 - 3111.e0 * tan2 + 543.e0 * tan4 - tan6) / 40320.e0;
    Northing=TranMerc_False_Northing + t1 + Math.pow(dlam,2.e0) * t2 + Math.pow(dlam,4.e0) * t3 + Math.pow(dlam,6.e0) * t4 + Math.pow(dlam,8.e0) * t5;
    t6=sn * c * TranMerc_Scale_Factor;
    t7=sn * c3 * TranMerc_Scale_Factor* (1.e0 - tan2 + eta) / 6.e0;
    t8=sn * c5 * TranMerc_Scale_Factor* (5.e0 - 18.e0 * tan2 + tan4 + 14.e0 * eta - 58.e0 * tan2 * eta + 13.e0 * eta2 + 4.e0 * eta3 - 64.e0 * tan2 * eta2 - 24.e0 * tan2 * eta3) / 120.e0;
    t9=sn * c7 * TranMerc_Scale_Factor* (61.e0 - 479.e0 * tan2 + 179.e0 * tan4 - tan6) / 5040.e0;
    Easting=TranMerc_False_Easting + dlam * t6 + Math.pow(dlam,3.e0) * t7 + Math.pow(dlam,5.e0) * t8 + Math.pow(dlam,7.e0) * t9;
  }
  return (Error_Code);
}

public long convertGeodeticToTransverseMercator ( double Latitude , double Longitude ) { double c ; double c2 ; double c3 ; double c5 ; double c7 ; double dlam ; double eta ; double eta2 ; double eta3 ; double eta4 ; double s ; double sn ; double t ; double tan2 ; double tan3 ; double tan4 ; double tan5 ; double tan6 ; double t1 ; double t2 ; double t3 ; double t4 ; double t5 ; double t6 ; double t7 ; double t8 ; double t9 ; double tmd ; double tmdo ; long Error_Code = TRANMERC_NO_ERROR ; double temp_Origin ; double temp_Long ; if ( ( Latitude < - MAX_LAT ) || ( Latitude > MAX_LAT ) ) { Error_Code |= TRANMERC_LAT_ERROR ; } if ( Longitude > PI ) Longitude -= ( 2 * PI ) ; if ( ( Longitude < ( TranMerc_Origin_Long - MAX_DELTA_LONG ) ) || ( Longitude > ( TranMerc_Origin_Long + MAX_DELTA_LONG ) ) ) { if ( Longitude < 0 ) temp_Long = Longitude + 2 * PI ; else temp_Long = Longitude ; if ( TranMerc_Origin_Long < 0 ) temp_Origin = TranMerc_Origin_Long + 2 * PI ; else temp_Origin = TranMerc_Origin_Long ; if ( ( temp_Long < ( temp_Origin - MAX_DELTA_LONG ) ) || ( temp_Long > ( temp_Origin + MAX_DELTA_LONG ) ) ) Error_Code |= TRANMERC_LON_ERROR ; } if ( Error_Code == TRANMERC_NO_ERROR ) { dlam = Longitude - TranMerc_Origin_Long ; if ( Math . abs ( dlam ) > ( 9.0 * PI / 180 ) ) { Error_Code |= TRANMERC_LON_WARNING ; } if ( dlam > PI ) dlam -= ( 2 * PI ) ; if ( dlam < - PI ) dlam += ( 2 * PI ) ; if ( Math . abs ( dlam ) < 2.e-10 ) dlam = 0.0 ; s = Math . sin ( Latitude ) ; c = Math . cos ( Latitude ) ; c2 = c * c ; c3 = c2 * c ; c5 = c3 * c2 ; c7 = c5 * c2 ; t = Math . tan ( Latitude ) ; tan2 = t * t ; tan3 = tan2 * t ; tan4 = tan3 * t ; tan5 = tan4 * t ; tan6 = tan5 * t ; eta = TranMerc_ebs * c2 ; eta2 = eta * eta ; eta3 = eta2 * eta ; eta4 = eta3 * eta ; sn = TranMerc_a / Math . sqrt ( 1 - TranMerc_es * Math . pow ( Math . sin ( Latitude ) , 2 ) ) ; tmd = TranMerc_ap * Latitude - TranMerc_bp * Math . sin ( 2.0 * Latitude ) + TranMerc_cp * Math . sin ( 4.0 * Latitude ) - TranMerc_dp * Math . sin ( 6.0 * Latitude ) + TranMerc_ep * Math . sin ( 8.0 * Latitude ) ; tmdo = TranMerc_ap * TranMerc_Origin_Lat - TranMerc_bp * Math . sin ( 2.0 * TranMerc_Origin_Lat ) + TranMerc_cp * Math . sin ( 4.0 * TranMerc_Origin_Lat ) - TranMerc_dp * Math . sin ( 6.0 * TranMerc_Origin_Lat ) + TranMerc_ep * Math . sin ( 8.0 * TranMerc_Origin_Lat ) ; t1 = ( tmd - tmdo ) * TranMerc_Scale_Factor ; t2 = sn * s * c * TranMerc_Scale_Factor / 2.e0 ; t3 = sn * s * c3 * TranMerc_Scale_Factor * ( 5.e0 - tan2 + 9.e0 * eta + 4.e0 * eta2 ) / 24.e0 ; t4 = sn * s * c5 * TranMerc_Scale_Factor * ( 61.e0 - 58.e0 * tan2 + tan4 + 270.e0 * eta - 330.e0 * tan2 * eta + 445.e0 * eta2 + 324.e0 * eta3 - 680.e0 * tan2 * eta2 + 88.e0 * eta4 - 600.e0 * tan2 * eta3 - 192.e0 * tan2 * eta4 ) / 720.e0 ; t5 = sn * s * c7 * TranMerc_Scale_Factor * ( 1385.e0 - 3111.e0 * tan2 + 543.e0 * tan4 - tan6 ) / 40320.e0 ; Northing = TranMerc_False_Northing + t1 + Math . pow ( dlam , 2.e0 ) * t2 + Math . pow ( dlam , 4.e0 ) * t3 + Math . pow ( dlam , 6.e0 ) * t4 + Math . pow ( dlam , 8.e0 ) * t5 ; t6 = sn * c * TranMerc_Scale_Factor ; t7 = sn * c3 * TranMerc_Scale_Factor * ( 1.e0 - tan2 + eta ) / 6.e0 ; t8 = sn * c5 * TranMerc_Scale_Factor * ( 5.e0 - 18.e0 * tan2 + tan4 + 14.e0 * eta - 58.e0 * tan2 * eta + 13.e0 * eta2 + 4.e0 * eta3 - 64.e0 * tan2 * eta2 - 24.e0 * tan2 * eta3 ) / 120.e0 ; t9 = sn * c7 * TranMerc_Scale_Factor * ( 61.e0 - 479.e0 * tan2 + 179.e0 * tan4 - tan6 ) / 5040.e0 ; Easting = TranMerc_False_Easting + dlam * t6 + Math . pow ( dlam , 3.e0 ) * t7 + Math . pow ( dlam , 5.e0 ) * t8 + Math . pow ( dlam , 7.e0 ) * t9 ; } return ( Error_Code ) ; }
the function convert_geodetic_to_transverse_mercator converts geodetic ( latitude and longitude ) coordinates to transverse mercator projection ( easting and northing ) coordinates , according to the current ellipsoid and transverse mercator projection coordinates . if any errors occur , the error code ( s ) are returned by the function , otherwise tranmerc_no_error is returned .
