long Convert_UPS_To_Geodetic(char Hemisphere, double Easting, double Northing, double *Latitude, double *Longitude) { /* * The function Convert_UPS_To_Geodetic converts UPS (hemisphere, easting, * and northing) coordinates to geodetic (latitude and longitude) coordinates * according to the current ellipsoid parameters. If any errors occur, the * error code(s) are returned by the function, otherwise UPS_NO_ERROR is * returned. * * Hemisphere : Hemisphere either 'N' or 'S' (input) * Easting : Easting/X in meters (input) * Northing : Northing/Y in meters (input) * Latitude : Latitude in radians (output) * Longitude : Longitude in radians (output) */ long Error_Code = UPS_NO_ERROR; if ((Hemisphere != 'N') && (Hemisphere != 'S')) Error_Code |= UPS_HEMISPHERE_ERROR; if ((Easting < MIN_EAST_NORTH) || (Easting > MAX_EAST_NORTH)) Error_Code |= UPS_EASTING_ERROR; if ((Northing < MIN_EAST_NORTH) || (Northing > MAX_EAST_NORTH)) Error_Code |= UPS_NORTHING_ERROR; if (Hemisphere =='N') {UPS_Origin_Latitude = MAX_ORIGIN_LAT;} if (Hemisphere =='S') {UPS_Origin_Latitude = -MAX_ORIGIN_LAT;} if (!Error_Code) { /* no errors */ Set_Polar_Stereographic_Parameters( UPS_a, UPS_f, UPS_Origin_Latitude, UPS_Origin_Longitude, UPS_False_Easting, UPS_False_Northing); Convert_Polar_Stereographic_To_Geodetic( Easting, Northing, Latitude, Longitude); if ((*Latitude < 0) && (*Latitude > MIN_SOUTH_LAT)) Error_Code |= UPS_LAT_ERROR; if ((*Latitude >= 0) && (*Latitude < MIN_NORTH_LAT)) Error_Code |= UPS_LAT_ERROR; } /* END OF if(!Error_Code) */ return (Error_Code); } /* END OF Convert_UPS_To_Geodetic */
void rspfPolarStereoProjection::update() { Set_Polar_Stereographic_Parameters(theEllipsoid.getA(), theEllipsoid.getFlattening(), theOrigin.latr(), theOrigin.lonr(), Polar_False_Easting, Polar_False_Northing); theFalseEastingNorthing.x = Polar_False_Easting; theFalseEastingNorthing.y = Polar_False_Northing; rspfMapProjection::update(); }
long Convert_Geodetic_To_UPS ( double Latitude, double Longitude, char *Hemisphere, double *Easting, double *Northing) { /* * The function Convert_Geodetic_To_UPS converts geodetic (latitude and * longitude) coordinates to UPS (hemisphere, easting, and northing) * coordinates, according to the current ellipsoid parameters. If any * errors occur, the error code(s) are returned by the function, * otherwide UPS_NO_ERROR is returned. * * Latitude : Latitude in radians (input) * Longitude : Longitude in radians (input) * Hemisphere : Hemisphere either 'N' or 'S' (output) * Easting : Easting/X in meters (output) * Northing : Northing/Y in meters (output) */ double tempEasting, tempNorthing; long Error_Code = UPS_NO_ERROR; if ((Latitude < -MAX_LAT) || (Latitude > MAX_LAT)) { /* latitude out of range */ Error_Code |= UPS_LAT_ERROR; } if ((Latitude < 0) && (Latitude > MIN_SOUTH_LAT)) Error_Code |= UPS_LAT_ERROR; if ((Latitude >= 0) && (Latitude < MIN_NORTH_LAT)) Error_Code |= UPS_LAT_ERROR; if ((Longitude < -PI) || (Longitude > (2 * PI))) { /* slam out of range */ Error_Code |= UPS_LON_ERROR; } if (!Error_Code) { /* no errors */ if (Latitude < 0) { UPS_Origin_Latitude = -MAX_ORIGIN_LAT; *Hemisphere = 'S'; } else { UPS_Origin_Latitude = MAX_ORIGIN_LAT; *Hemisphere = 'N'; } Set_Polar_Stereographic_Parameters( UPS_a, UPS_f, UPS_Origin_Latitude, UPS_Origin_Longitude, false_easting, false_northing); Convert_Geodetic_To_Polar_Stereographic(Latitude, Longitude, &tempEasting, &tempNorthing); UPS_Easting = UPS_False_Easting + tempEasting; UPS_Northing = UPS_False_Northing + tempNorthing; *Easting = UPS_Easting; *Northing = UPS_Northing; } /* END of if(!Error_Code) */ return (Error_Code); } /* END OF Convert_Geodetic_To_UPS */