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();