121 #include <android/log.h>
125 #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "GtApp", __VA_ARGS__))
144 using namespace MSP::CCS;
181 EllipsoidLibraryImplementation::deleteInstance();
191 int EllipsoidLibraryImplementation::instanceCount = 0;
206 void EllipsoidLibraryImplementation::removeInstance()
213 if( --instanceCount < 1 )
220 void EllipsoidLibraryImplementation::deleteInstance()
234 EllipsoidLibraryImplementation::EllipsoidLibraryImplementation():
235 _datumLibraryImplementation( 0 )
246 int size = el.ellipsoidList.size();
247 for(
int i = 0; i < size; i++ )
248 ellipsoidList.push_back(
new Ellipsoid( *( el.ellipsoidList[i] ) ) );
250 _datumLibraryImplementation = el._datumLibraryImplementation;
256 std::vector<Ellipsoid*>::iterator iter = ellipsoidList.begin();
257 while( iter != ellipsoidList.end() )
262 ellipsoidList.clear();
264 _datumLibraryImplementation = 0;
273 int size = el.ellipsoidList.size();
274 for(
int i = 0; i < size; i++ )
275 ellipsoidList[i] =
new Ellipsoid( *( el.ellipsoidList[i] ) );
277 _datumLibraryImplementation = el._datumLibraryImplementation;
300 long code_length = 0;
301 char *PathName = NULL;
306 long numEllipsoids = ellipsoidList.size();
307 double inv_f = 1 / flattening;
310 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"numEllipsoid %d ", numEllipsoids );
314 bool isNewEllipsoidCode =
true;
320 isNewEllipsoidCode =
false;
328 if ( !isNewEllipsoidCode )
331 code_length = strlen( code );
335 if( semiMajorAxis <= 0.0 )
337 if( (inv_f < 250 ) || ( inv_f > 350 ) )
342 strcpy( ellipsoid_code, code );
344 for(
int i = 0; i < code_length; i++ )
345 ellipsoid_code[i] = (
char )toupper( ellipsoid_code[i] );
347 double semiMinorAxis = semiMajorAxis * ( 1 - flattening );
348 double eccentricitySquared = 2.0 * flattening - flattening * flattening;
349 ellipsoidList.push_back(
new Ellipsoid( index, ellipsoid_code, (
char* )name,
350 semiMajorAxis, semiMinorAxis, flattening, eccentricitySquared,
true ) );
357 PathName = getenv(
"MSPCCS_DATA" );
358 if( PathName != NULL )
360 strcpy( FileName, PathName );
361 strcat( FileName,
"/" );
365 strcpy( FileName,
"../../data/" );
367 strcat( FileName,
"ellips.dat" );
369 if( ( fp = fopen( FileName,
"w" ) ) == NULL )
376 while( index < numEllipsoids )
378 if( ellipsoidList[index]->userDefined() )
380 fprintf( fp,
"*%-28s %-2s %11.9f %12.9f %13.13f \n",
381 ellipsoidList[index]->name(),
382 ellipsoidList[index]->code(),
383 ellipsoidList[index]->semiMajorAxis(),
384 ellipsoidList[index]->semiMinorAxis(),
385 1 / ellipsoidList[index]->flattening() );
389 fprintf( fp,
"%-29s %-2s %11.9f %12.9f %13.13f \n",
390 ellipsoidList[index]->name(),
391 ellipsoidList[index]->code(),
392 ellipsoidList[index]->semiMajorAxis(),
393 ellipsoidList[index]->semiMinorAxis(),
394 1 / ellipsoidList[index]->flattening() );
418 char *PathName = NULL;
423 if( ellipsoidList[index]->userDefined() )
425 if( _datumLibraryImplementation )
434 ellipsoidList.erase( ellipsoidList.begin() + index );
436 int numEllipsoids = ellipsoidList.size();
441 PathName = getenv(
"MSPCCS_DATA" );
442 if( PathName != NULL )
444 strcpy( FileName, PathName );
445 strcat( FileName,
"/" );
449 strcpy( FileName,
"../../data/" );
451 strcat( FileName,
"ellips.dat" );
452 if( ( fp = fopen( FileName,
"w" ) ) == NULL )
458 while( index < numEllipsoids )
460 if( ellipsoidList[index]->userDefined() )
462 fprintf(fp,
"*%-28s %-2s %11.3f %12.4f %13.9f \n",
463 ellipsoidList[index]->name(),
464 ellipsoidList[index]->code(),
465 ellipsoidList[index]->semiMajorAxis(),
466 ellipsoidList[index]->semiMinorAxis(),
467 1 / ellipsoidList[index]->flattening() );
471 fprintf(fp,
"*%-29s %-2s %11.3f %12.4f %13.9f \n",
472 ellipsoidList[index]->name(),
473 ellipsoidList[index]->code(),
474 ellipsoidList[index]->semiMajorAxis(),
475 ellipsoidList[index]->semiMinorAxis(),
476 1 / ellipsoidList[index]->flattening() );
496 *count = ellipsoidList.size();
519 temp_code[j] = ( char )toupper(code[j]);
524 int numEllipsoids = ellipsoidList.size();
527 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"ellipsoid code %s %d ", code, numEllipsoids );
530 while( ( i < numEllipsoids )
531 && strcmp( temp_code, ellipsoidList[i]->code() ) )
536 if( i == numEllipsoids )
540 if ( strcmp( temp_code, ellipsoidList[i]->code() ) )
562 if ( ( index < 0 ) || ( index >= ellipsoidList.size() ) )
565 strcpy( code, ellipsoidList[index]->code() );
584 if( ( index < 0 ) || ( index >= ellipsoidList.size() ) )
587 strcpy( name, ellipsoidList[index]->name() );
607 if( ( index < 0 ) || ( index >= ellipsoidList.size() ) )
611 Ellipsoid* ellipsoid = ellipsoidList[index];
630 *eccentricitySquared = 0;
632 if( ( index < 0 ) || ( index >= ellipsoidList.size() ) )
635 *eccentricitySquared = ellipsoidList[index]->eccentricitySquared();
654 if( ( index < 0 ) || ( index >= ellipsoidList.size() ) )
657 *result = ellipsoidList[index]->userDefined();
671 _datumLibraryImplementation = __datumLibraryImplementation;
680 void EllipsoidLibraryImplementation::loadEllipsoids()
688 char* PathName = NULL;
700 PathName =
"/data/data/com.baesystems.msp.geotrans/lib/";
701 FileName =
new char[ 80 ];
702 strcpy( FileName, PathName );
703 strcat( FileName,
"libellipsdat.so" );
705 PathName = getenv(
"MSPCCS_DATA" );
706 if (PathName != NULL)
708 FileName =
new char[ strlen( PathName ) + 12 ];
709 strcpy( FileName, PathName );
710 strcat( FileName,
"/" );
714 FileName =
new char[ 22 ];
715 strcpy( FileName,
"../../data/" );
717 strcat( FileName,
"ellips.dat" );
722 if( ( fp = fopen( FileName,
"r" ) ) == NULL )
727 if (NULL == PathName)
744 double semiMajorAxis;
745 double semiMinorAxis;
748 sscanf( buffer,
"%30c %s %lf %lf %lf", name, code, &semiMajorAxis, &semiMinorAxis, &recpF );
750 bool userDefined =
false;
760 double flattening = 1 / recpF;
761 double eccentricitySquared = 2.0 * flattening - flattening * flattening;
765 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"name %s", name);
766 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"code %s", code);
767 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"major %f", semiMajorAxis);
768 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"minor %f", semiMinorAxis);
769 __android_log_print(ANDROID_LOG_VERBOSE,
"GtApp",
"recpF %f", recpF);
772 ellipsoidList.push_back(
new Ellipsoid( index, code, name, semiMajorAxis, semiMinorAxis, flattening, eccentricitySquared, userDefined ) );
void ellipsoidCount(long *count)
static const char * ellipsoidFlattening
static const char * ellipsoidFileOpenError
const int FILENAME_LENGTH
static const char * ellipseInUse
static const char * notUserDefined
void ellipsoidCode(const long index, char *code)
void defineEllipsoid(const char *code, const char *name, double semiMajorAxis, double flattening)
void removeEllipsoid(const char *Code)
bool datumUsesEllipsoid(const char *ellipsoidCode)
const int ELLIPSOID_NAME_LENGTH
void ellipsoidIndex(const char *code, long *index)
void ellipsoidUserDefined(const long index, long *result)
void ellipsoidName(const long index, char *name)
const char * WGS84_Ellipsoid_Code
void ellipsoidEccentricity2(const long index, double *eccentricitySquared)
EllipsoidLibraryImplementation()
static const char * semiMajorAxis
double flattening() const
void ellipsoidParameters(const long index, double *a, double *f)
static const char * invalidIndex
static const char * invalidEllipsoidCode
~EllipsoidLibraryImplementation(void)
EllipsoidLibraryImplementation & operator=(const EllipsoidLibraryImplementation &e)
void setDatumLibraryImplementation(DatumLibraryImplementation *__datumLibraryImplementation)
class MSP::CCS::EllipsoidLibraryImplementationCleaner ellipsoidLibraryImplementationCleanerInstance
const int ELLIPSOID_NAME_LENGTH
double semiMajorAxis() const
const int ELLIPSOID_CODE_LENGTH
~EllipsoidLibraryImplementationCleaner()
const char * WGS72_Ellipsoid_Code