3 #ifndef DatumLibraryImplementation_H 
    4 #define DatumLibraryImplementation_H 
  129 #include "DatumType.h" 
  135   class CCSThreadMutex;
 
  140     class EllipsoidLibraryImplementation;
 
  141     class CartesianCoordinates;
 
  142     class GeodeticCoordinates;
 
  147     friend class DatumLibraryImplementationCleaner;
 
  162       static void removeInstance();
 
  191       void define3ParamDatum( 
const char *code, 
const char *name, 
const char *ellipsoidCode, 
 
  192                               double deltaX, 
double deltaY, 
double deltaZ,
 
  193                               double sigmaX, 
double sigmaY, 
double sigmaZ, 
 
  194                               double westLongitude, 
double eastLongitude, 
double southLatitude, 
double northLatitude );
 
  221       void define7ParamDatum( 
const char *code, 
const char *name, 
const char *ellipsoidCode, 
 
  222                               double deltaX, 
double deltaY, 
double deltaZ,
 
  223                               double rotationX, 
double rotationY, 
double rotationZ, 
 
  224                               double scale, 
double westLongitude, 
 
  225                               double eastLongitude, 
double southLatitude, 
 
  226                               double northLatitude);
 
  239       void removeDatum( 
const char* code );
 
  249       void datumCount( 
long *count );
 
  261       void datumIndex( 
const char *code, 
long *index );
 
  272       void datumCode( 
const long index, 
char *code );
 
  283       void datumName( 
const long index, 
char *name );
 
  295       void datumEllipsoidCode( 
const long index, 
char *code );
 
  308       void datumStandardErrors( 
const long index, 
double *sigmaX, 
double *sigmaY, 
double *sigmaZ );
 
  323       void datumSevenParameters( 
const long index, 
double *rotationX, 
double *rotationY, 
double *rotationZ, 
double *scaleFactor);
 
  336       void datumTranslationValues( 
const long index, 
double *deltaX, 
double *deltaY, 
double *deltaZ );
 
  353       Accuracy* datumShiftError( 
const long sourceIndex, 
const long targetIndex, 
 
  354                             double longitude, 
double latitude, 
Accuracy* sourceAccuracy );
 
  368       void datumUserDefined( 
const long index, 
long *result );
 
  378       bool datumUsesEllipsoid( 
const char *ellipsoidCode );
 
  393       void datumValidRectangle( 
const long index, 
double *westLongitude, 
double *eastLongitude, 
double *southLatitude, 
double *northLatitude );
 
  412       CartesianCoordinates* geocentricDatumShift( 
const long sourceIndex, 
const double sourceX, 
const double sourceY, 
const double sourceZ,
 
  413                                  const long targetIndex );
 
  430       CartesianCoordinates* geocentricShiftFromWGS84( 
const double WGS84X, 
const double WGS84Y, 
const double WGS84Z, 
const long targetIndex );
 
  447       CartesianCoordinates* geocentricShiftToWGS84( 
const long sourceIndex, 
const double sourceX, 
const double sourceY, 
const double sourceZ );
 
  467                                const long targetIndex );
 
  485                                    const long targetIndex );
 
  514       void retrieveDatumType( 
const long index, DatumType::Enum *datumType );
 
  529       void validDatum( 
const long index, 
double longitude, 
double latitude, 
long *result );
 
  563       static int instanceCount;
 
  565       std::vector<Datum*> datumList;
 
  569       long datum3ParamCount;
 
  570       long datum7ParamCount;
 
  588       void write3ParamFile();
 
  596       void write7ParamFile();
 
  611       GeodeticCoordinates* geodeticShiftWGS84ToWGS72( 
const double WGS84Longitude, 
const double WGS84Latitude, 
const double WGS84Height );
 
  627       GeodeticCoordinates* geodeticShiftWGS72ToWGS84( 
const double WGS72Longitude, 
const double WGS72Latitude, 
const double WGS72Height );
 
  642       CartesianCoordinates* geocentricShiftWGS84ToWGS72( 
const double X_WGS84, 
const double Y_WGS84, 
const double Z_WGS84 );
 
  657       CartesianCoordinates* geocentricShiftWGS72ToWGS84( 
const double X, 
const double Y, 
const double Z );
 
  664       static void deleteInstance();