174 using namespace MSP::CCS;
179 const double PI = 3.14159265358979323e0;
184 CoordinateConversionService::CCSData::CCSData() :
187 ellipsoidLibraryImplementation = EllipsoidLibraryImplementation::getInstance();
189 datumLibraryImplementation = DatumLibraryImplementation::getInstance();
190 datumLibrary =
new DatumLibrary( datumLibraryImplementation );
191 geoidLibrary = GeoidLibrary::getInstance();
195 CoordinateConversionService::CCSData::~CCSData()
197 delete ellipsoidLibrary;
198 ellipsoidLibrary = 0;
200 EllipsoidLibraryImplementation::removeInstance();
201 ellipsoidLibraryImplementation = 0;
206 DatumLibraryImplementation::removeInstance();
207 datumLibraryImplementation = 0;
209 GeoidLibrary::removeInstance();
218 CoordinateConversionService::CoordinateConversionService(
219 const char* sourceDatumCode,
221 const char* targetDatumCode,
223 WGS84_datum_index( 0 )
231 ccsData =
new CCSData();
237 ellipsoidLibraryImplementation = 0;
240 datumLibraryImplementation = 0;
248 ellipsoidLibraryImplementation = ccsData->ellipsoidLibraryImplementation;
249 datumLibraryImplementation = ccsData->datumLibraryImplementation;
250 geoidLibrary = ccsData->geoidLibrary;
280 Coordinate_System_Table[
CoordinateType::neys].set(
"Ney's (Modified Lambert Conformal Conic)",
"NY" );
325 datumLibraryImplementation->
datumIndex(
"WGE", &WGS84_datum_index );
331 ccsData( ccs.ccsData )
337 ellipsoidLibraryImplementation = ccsData->ellipsoidLibraryImplementation;
338 datumLibraryImplementation = ccsData->datumLibraryImplementation;
339 geoidLibrary = ccsData->geoidLibrary;
358 WGS84_datum_index = ccs.WGS84_datum_index;
366 if( --ccsData->refCount == 0 )
372 ellipsoidLibraryImplementation = 0;
375 datumLibraryImplementation = 0;
391 if( ccsData == ccs.ccsData )
394 if( --ccsData->refCount == 0 )
397 ccsData = ccs.ccsData;
400 ellipsoidLibraryImplementation = ccsData->ellipsoidLibraryImplementation;
401 datumLibraryImplementation = ccsData->datumLibraryImplementation;
402 geoidLibrary = ccsData->geoidLibrary;
421 WGS84_datum_index = ccs.WGS84_datum_index;
441 sourceCoordinates, sourceAccuracy, targetCoordinates, targetAccuracy );
460 targetCoordinates, targetAccuracy,
461 sourceCoordinates, sourceAccuracy );
466 const std::vector<MSP::CCS::CoordinateTuple*>& sourceCoordinates,
467 const std::vector<MSP::CCS::Accuracy*>& sourceAccuracy,
468 std::vector<MSP::CCS::CoordinateTuple*>& targetCoordinates,
469 std::vector<MSP::CCS::Accuracy*>& targetAccuracy )
482 sourceCoordinates, sourceAccuracy, targetCoordinates, targetAccuracy );
487 const std::vector<MSP::CCS::CoordinateTuple*>& targetCoordinates,
488 const std::vector<MSP::CCS::Accuracy*>& targetAccuracy,
489 std::vector<MSP::CCS::CoordinateTuple*>& sourceCoordinates,
490 std::vector<MSP::CCS::Accuracy*>& sourceAccuracy )
503 targetCoordinates, targetAccuracy, sourceCoordinates, sourceAccuracy );
515 return ccsData->ellipsoidLibrary;
527 return ccsData->datumLibrary;
550 return coordinateSystemState[direction].datumCode;
566 switch( coordinateSystemState[direction].coordinateType )
570 return coordinateSystemState[direction].parameters.mapProjection6Parameters;
579 return coordinateSystemState[direction].parameters.mapProjection4Parameters;
586 return coordinateSystemState[direction].parameters.mapProjection3Parameters;
588 return coordinateSystemState[direction].parameters.equidistantCylindricalParameters;
590 return coordinateSystemState[direction].parameters.geodeticParameters;
594 return coordinateSystemState[direction].parameters.mapProjection5Parameters;
597 return coordinateSystemState[direction].parameters.localCartesianParameters;
599 return ((
Mercator*)(coordinateSystemState[direction].coordinateSystem))->getStandardParallelParameters();
601 return coordinateSystemState[direction].parameters.mercatorScaleFactorParameters;
603 return coordinateSystemState[direction].parameters.neysParameters;
605 return coordinateSystemState[direction].parameters.obliqueMercatorParameters;
607 return coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters;
609 return coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters;
611 return coordinateSystemState[direction].parameters.utmParameters;
622 return coordinateSystemState[direction].parameters.coordinateSystemParameters;
634 void CoordinateConversionService::initCoordinateSystemState(
646 coordinateSystemState[direction].datumIndex = 0;
648 coordinateSystemState[direction].coordinateSystem = 0;
650 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
651 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
652 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
653 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
654 coordinateSystemState[direction].parameters.mapProjection6Parameters = 0;
655 coordinateSystemState[direction].parameters.equidistantCylindricalParameters = 0;
656 coordinateSystemState[direction].parameters.geodeticParameters = 0;
657 coordinateSystemState[direction].parameters.localCartesianParameters = 0;
658 coordinateSystemState[direction].parameters.mercatorStandardParallelParameters = 0;
659 coordinateSystemState[direction].parameters.mercatorScaleFactorParameters = 0;
660 coordinateSystemState[direction].parameters.neysParameters = 0;
661 coordinateSystemState[direction].parameters.obliqueMercatorParameters = 0;
662 coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters = 0;
663 coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters = 0;
664 coordinateSystemState[direction].parameters.utmParameters = 0;
668 void CoordinateConversionService::setDataLibraries()
679 ellipsoidLibraryImplementation );
681 datumLibraryImplementation );
685 char message[256] =
"Error initializing MSP CCS data: ";
692 void CoordinateConversionService::setDatum(
694 const char* datumCode )
709 strcpy( coordinateSystemState[direction].datumCode, datumCode );
712 datumLibraryImplementation->
datumIndex( datumCode, &datumIndex );
713 coordinateSystemState[direction].datumIndex = datumIndex;
717 void CoordinateConversionService::setCoordinateSystem(
731 coordinateSystemState[direction].coordinateSystem = 0;
736 coordinateSystemState[direction].coordinateType =
738 coordinateSystemState[direction].parameters.mapProjection6Parameters =
740 *dynamic_cast< MapProjection6Parameters* >( parameters ) );
743 coordinateSystemState[direction].coordinateType =
745 coordinateSystemState[direction].parameters.mapProjection4Parameters =
747 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
751 coordinateSystemState[direction].parameters.mapProjection4Parameters =
753 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
756 coordinateSystemState[direction].coordinateType =
758 coordinateSystemState[direction].parameters.coordinateSystemParameters =
760 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
764 coordinateSystemState[direction].parameters.mapProjection4Parameters =
766 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
769 coordinateSystemState[direction].coordinateType =
771 coordinateSystemState[direction].parameters.mapProjection4Parameters =
773 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
777 coordinateSystemState[direction].parameters.mapProjection3Parameters =
779 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
783 coordinateSystemState[direction].parameters.mapProjection3Parameters =
785 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
788 coordinateSystemState[direction].coordinateType =
790 coordinateSystemState[direction].parameters.equidistantCylindricalParameters =
792 *dynamic_cast< EquidistantCylindricalParameters* >( parameters ) );
795 coordinateSystemState[direction].coordinateType =
797 coordinateSystemState[direction].parameters.coordinateSystemParameters =
799 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
802 coordinateSystemState[direction].coordinateType =
804 coordinateSystemState[direction].parameters.coordinateSystemParameters =
806 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
809 coordinateSystemState[direction].coordinateType =
811 coordinateSystemState[direction].parameters.geodeticParameters =
813 *dynamic_cast< GeodeticParameters* >( parameters ) );
817 coordinateSystemState[direction].parameters.coordinateSystemParameters =
819 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
822 coordinateSystemState[direction].coordinateType =
824 coordinateSystemState[direction].parameters.coordinateSystemParameters =
826 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
829 coordinateSystemState[direction].coordinateType =
831 coordinateSystemState[direction].parameters.mapProjection4Parameters =
833 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
837 coordinateSystemState[direction].parameters.mapProjection5Parameters =
839 *dynamic_cast< MapProjection5Parameters* >( parameters ) );
842 coordinateSystemState[direction].coordinateType =
844 coordinateSystemState[direction].parameters.mapProjection6Parameters =
846 *dynamic_cast< MapProjection6Parameters* >( parameters ) );
849 coordinateSystemState[direction].coordinateType =
851 coordinateSystemState[direction].parameters.localCartesianParameters =
853 *dynamic_cast< LocalCartesianParameters* >( parameters ) );
856 coordinateSystemState[direction].coordinateType =
858 coordinateSystemState[direction].parameters.localCartesianParameters =
860 *dynamic_cast< LocalCartesianParameters* >( parameters ) );
863 coordinateSystemState[direction].coordinateType =
865 coordinateSystemState[direction].parameters.mercatorStandardParallelParameters =
867 *dynamic_cast< MercatorStandardParallelParameters* >( parameters ));
870 coordinateSystemState[direction].coordinateType =
872 coordinateSystemState[direction].parameters.mercatorScaleFactorParameters =
874 *dynamic_cast< MercatorScaleFactorParameters* >( parameters ) );
877 coordinateSystemState[direction].coordinateType =
879 coordinateSystemState[direction].parameters.coordinateSystemParameters =
881 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
885 coordinateSystemState[direction].parameters.mapProjection3Parameters =
887 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
890 coordinateSystemState[direction].coordinateType =
892 coordinateSystemState[direction].parameters.mapProjection3Parameters =
894 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
897 coordinateSystemState[direction].coordinateType =
899 coordinateSystemState[direction].parameters.coordinateSystemParameters =
901 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
905 coordinateSystemState[direction].parameters.neysParameters =
906 new NeysParameters( *dynamic_cast< NeysParameters* >( parameters ) );
909 coordinateSystemState[direction].coordinateType =
911 coordinateSystemState[direction].parameters.obliqueMercatorParameters =
913 *dynamic_cast< ObliqueMercatorParameters* >( parameters ) );
916 coordinateSystemState[direction].coordinateType =
918 coordinateSystemState[direction].parameters.mapProjection4Parameters =
920 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
923 coordinateSystemState[direction].coordinateType =
925 coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters =
927 *dynamic_cast< PolarStereographicStandardParallelParameters* >(
931 coordinateSystemState[direction].coordinateType =
933 coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters =
935 *dynamic_cast< PolarStereographicScaleFactorParameters* >( parameters ) );
938 coordinateSystemState[direction].coordinateType =
940 coordinateSystemState[direction].parameters.mapProjection4Parameters =
942 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
945 coordinateSystemState[direction].coordinateType =
947 coordinateSystemState[direction].parameters.mapProjection3Parameters =
949 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
952 coordinateSystemState[direction].coordinateType =
954 coordinateSystemState[direction].parameters.mapProjection4Parameters =
956 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
959 coordinateSystemState[direction].coordinateType =
961 coordinateSystemState[direction].parameters.mapProjection5Parameters =
963 *dynamic_cast< MapProjection5Parameters* >( parameters ) );
966 coordinateSystemState[direction].coordinateType =
968 coordinateSystemState[direction].parameters.mapProjection5Parameters =
970 *dynamic_cast< MapProjection5Parameters* >( parameters ) );
973 coordinateSystemState[direction].coordinateType =
975 coordinateSystemState[direction].parameters.coordinateSystemParameters =
977 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
980 coordinateSystemState[direction].coordinateType =
982 coordinateSystemState[direction].parameters.utmParameters =
983 new UTMParameters( *dynamic_cast< UTMParameters* >( parameters ) );
986 coordinateSystemState[direction].coordinateType =
988 coordinateSystemState[direction].parameters.coordinateSystemParameters =
990 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
993 coordinateSystemState[direction].coordinateType =
995 coordinateSystemState[direction].parameters.mapProjection3Parameters =
997 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
1000 coordinateSystemState[direction].coordinateType =
1002 coordinateSystemState[direction].parameters.coordinateSystemParameters =
1004 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
1010 setParameters( direction );
1013 void CoordinateConversionService::setParameters(
1025 Coordinate_State_Row* row = &coordinateSystemState[direction];
1027 char ellipsoidCode[3];
1028 long ellipsoidIndex;
1029 double semiMajorAxis;
1033 row->datumIndex, ellipsoidCode );
1036 ellipsoidCode, &ellipsoidIndex );
1039 ellipsoidIndex, &semiMajorAxis, &flattening );
1041 switch( coordinateSystemState[direction].coordinateType )
1046 row->parameters.mapProjection6Parameters;
1048 coordinateSystemState[direction].coordinateSystem =
1050 semiMajorAxis, flattening,
1062 row->parameters.mapProjection4Parameters;
1064 coordinateSystemState[direction].coordinateSystem =
1066 semiMajorAxis, flattening,
1077 coordinateSystemState[direction].coordinateSystem =
new Bonne(
1078 semiMajorAxis, flattening,
1087 coordinateSystemState[direction].coordinateSystem =
1095 row->parameters.mapProjection4Parameters;
1097 coordinateSystemState[direction].coordinateSystem =
new Cassini(
1098 semiMajorAxis, flattening,
1108 row->parameters.mapProjection4Parameters;
1110 coordinateSystemState[direction].coordinateSystem =
1112 semiMajorAxis, flattening,
1122 row->parameters.mapProjection3Parameters;
1124 coordinateSystemState[direction].coordinateSystem =
new Eckert4(
1125 semiMajorAxis, flattening,
1134 row->parameters.mapProjection3Parameters;
1136 coordinateSystemState[direction].coordinateSystem =
new Eckert6(
1137 semiMajorAxis, flattening,
1146 row->parameters.equidistantCylindricalParameters;
1148 coordinateSystemState[direction].coordinateSystem =
1150 semiMajorAxis,flattening,
1159 coordinateSystemState[direction].coordinateSystem =
1165 coordinateSystemState[direction].coordinateSystem =
1166 new Spherical( semiMajorAxis, flattening );
1170 coordinateSystemState[direction].coordinateSystem = 0;
1173 coordinateSystemState[direction].coordinateSystem =
new GEOREF();
1176 coordinateSystemState[direction].coordinateSystem =
new GARS();
1181 row->parameters.mapProjection4Parameters;
1183 coordinateSystemState[direction].coordinateSystem =
new Gnomonic(
1184 semiMajorAxis, flattening,
1195 coordinateSystemState[direction].coordinateSystem =
1197 semiMajorAxis, flattening,
1208 row->parameters.mapProjection6Parameters;
1210 coordinateSystemState[direction].coordinateSystem =
1212 semiMajorAxis, flattening,
1224 row->parameters.localCartesianParameters;
1226 coordinateSystemState[direction].coordinateSystem =
new LocalCartesian(
1227 semiMajorAxis, flattening,
1237 row->parameters.localCartesianParameters;
1239 coordinateSystemState[direction].coordinateSystem =
new LocalSpherical(
1240 semiMajorAxis, flattening,
1250 row->parameters.mercatorStandardParallelParameters;
1252 coordinateSystemState[direction].coordinateSystem =
new Mercator(
1253 semiMajorAxis, flattening,
1267 row->parameters.mercatorScaleFactorParameters;
1269 coordinateSystemState[direction].coordinateSystem =
new Mercator(
1270 semiMajorAxis, flattening,
1280 coordinateSystemState[direction].coordinateSystem =
new MGRS(
1281 semiMajorAxis, flattening, ellipsoidCode );
1288 row->parameters.mapProjection3Parameters;
1290 coordinateSystemState[direction].coordinateSystem =
1292 semiMajorAxis, flattening,
1301 row->parameters.mapProjection3Parameters;
1303 coordinateSystemState[direction].coordinateSystem =
new Mollweide(
1304 semiMajorAxis,flattening,
1312 coordinateSystemState[direction].coordinateSystem =
1313 new NZMG( ellipsoidCode );
1321 coordinateSystemState[direction].coordinateSystem =
new Neys(
1322 semiMajorAxis, flattening,
1333 row->parameters.obliqueMercatorParameters;
1335 coordinateSystemState[direction].coordinateSystem =
new ObliqueMercator(
1336 semiMajorAxis, flattening,
1350 row->parameters.mapProjection4Parameters;
1352 coordinateSystemState[direction].coordinateSystem =
new Orthographic(
1353 semiMajorAxis, flattening,
1363 row->parameters.polarStereographicStandardParallelParameters;
1365 coordinateSystemState[direction].coordinateSystem =
1367 semiMajorAxis, flattening,
1378 row->parameters.polarStereographicScaleFactorParameters;
1380 coordinateSystemState[direction].coordinateSystem =
1382 semiMajorAxis, flattening,
1393 row->parameters.mapProjection4Parameters;
1395 coordinateSystemState[direction].coordinateSystem =
new Polyconic(
1396 semiMajorAxis, flattening,
1406 row->parameters.mapProjection3Parameters;
1408 coordinateSystemState[direction].coordinateSystem =
new Sinusoidal(
1409 semiMajorAxis, flattening,
1418 row->parameters.mapProjection4Parameters;
1420 coordinateSystemState[direction].coordinateSystem =
new Stereographic(
1421 semiMajorAxis, flattening,
1431 row->parameters.mapProjection5Parameters;
1433 coordinateSystemState[direction].coordinateSystem =
1435 semiMajorAxis, flattening,
1446 row->parameters.mapProjection5Parameters;
1448 coordinateSystemState[direction].coordinateSystem =
1450 semiMajorAxis, flattening,
1461 coordinateSystemState[direction].coordinateSystem =
new UPS(
1462 semiMajorAxis, flattening );
1480 coordinateSystemState[direction].coordinateSystem =
new UTM(
1481 semiMajorAxis, flattening, ellipsoidCode, param->
zone() );
1484 coordinateSystemState[direction].coordinateSystem =
new UTM(
1485 semiMajorAxis, flattening, ellipsoidCode, 0 );
1491 coordinateSystemState[direction].coordinateSystem =
new USNG(
1492 semiMajorAxis, flattening, ellipsoidCode );
1499 row->parameters.mapProjection3Parameters;
1501 coordinateSystemState[direction].coordinateSystem =
new VanDerGrinten(
1502 semiMajorAxis, flattening,
1510 coordinateSystemState[direction].coordinateSystem =
1520 void CoordinateConversionService::deleteCoordinateSystem(
1530 switch( coordinateSystemState[direction].coordinateType )
1533 if( coordinateSystemState[direction].parameters.mapProjection6Parameters )
1535 delete coordinateSystemState[direction].parameters.mapProjection6Parameters;
1536 coordinateSystemState[direction].parameters.mapProjection6Parameters = 0;
1538 if( coordinateSystemState[direction].coordinateSystem )
1541 coordinateSystemState[direction].coordinateSystem = 0;
1545 if( coordinateSystemState[direction].parameters.mapProjection6Parameters )
1547 delete coordinateSystemState[direction].parameters.mapProjection6Parameters;
1548 coordinateSystemState[direction].parameters.mapProjection6Parameters = 0;
1550 if( coordinateSystemState[direction].coordinateSystem )
1553 coordinateSystemState[direction].coordinateSystem = 0;
1557 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1559 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1560 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1562 if( coordinateSystemState[direction].coordinateSystem )
1565 coordinateSystemState[direction].coordinateSystem = 0;
1569 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1571 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1572 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1574 if( coordinateSystemState[direction].coordinateSystem )
1576 delete ((
Bonne*)(coordinateSystemState[direction].coordinateSystem));
1577 coordinateSystemState[direction].coordinateSystem = 0;
1581 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1583 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1584 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1586 if( coordinateSystemState[direction].coordinateSystem )
1588 delete ((
Cassini*)(coordinateSystemState[direction].coordinateSystem));
1589 coordinateSystemState[direction].coordinateSystem = 0;
1593 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1595 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1596 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1598 if( coordinateSystemState[direction].coordinateSystem )
1601 coordinateSystemState[direction].coordinateSystem = 0;
1605 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1607 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1608 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1610 if( coordinateSystemState[direction].coordinateSystem )
1612 delete ((
Gnomonic*)(coordinateSystemState[direction].coordinateSystem));
1613 coordinateSystemState[direction].coordinateSystem = 0;
1617 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1619 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1620 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1622 if( coordinateSystemState[direction].coordinateSystem )
1624 delete ((
Orthographic*)(coordinateSystemState[direction].coordinateSystem));
1625 coordinateSystemState[direction].coordinateSystem = 0;
1629 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1631 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1632 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1634 if( coordinateSystemState[direction].coordinateSystem )
1636 delete ((
Polyconic*)(coordinateSystemState[direction].coordinateSystem));
1637 coordinateSystemState[direction].coordinateSystem = 0;
1641 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1643 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1644 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1646 if( coordinateSystemState[direction].coordinateSystem )
1648 delete ((
Stereographic*)(coordinateSystemState[direction].coordinateSystem));
1649 coordinateSystemState[direction].coordinateSystem = 0;
1653 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1655 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1656 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1658 if( coordinateSystemState[direction].coordinateSystem )
1661 coordinateSystemState[direction].coordinateSystem = 0;
1665 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1667 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1668 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1670 if( coordinateSystemState[direction].coordinateSystem )
1672 delete ((
Eckert4*)(coordinateSystemState[direction].coordinateSystem));
1673 coordinateSystemState[direction].coordinateSystem = 0;
1677 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1679 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1680 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1682 if( coordinateSystemState[direction].coordinateSystem )
1684 delete ((
Eckert6*)(coordinateSystemState[direction].coordinateSystem));
1685 coordinateSystemState[direction].coordinateSystem = 0;
1689 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1691 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1692 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1694 if( coordinateSystemState[direction].coordinateSystem )
1696 delete ((
MillerCylindrical*)(coordinateSystemState[direction].coordinateSystem));
1697 coordinateSystemState[direction].coordinateSystem = 0;
1701 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1703 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1704 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1706 if( coordinateSystemState[direction].coordinateSystem )
1708 delete ((
Mollweide*)(coordinateSystemState[direction].coordinateSystem));
1709 coordinateSystemState[direction].coordinateSystem = 0;
1713 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1715 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1716 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1718 if( coordinateSystemState[direction].coordinateSystem )
1720 delete ((
Sinusoidal*)(coordinateSystemState[direction].coordinateSystem));
1721 coordinateSystemState[direction].coordinateSystem = 0;
1725 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1727 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1728 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1730 if( coordinateSystemState[direction].coordinateSystem )
1732 delete ((
VanDerGrinten*)(coordinateSystemState[direction].coordinateSystem));
1733 coordinateSystemState[direction].coordinateSystem = 0;
1737 if( coordinateSystemState[direction].parameters.equidistantCylindricalParameters )
1739 delete coordinateSystemState[direction].parameters.equidistantCylindricalParameters;
1740 coordinateSystemState[direction].parameters.equidistantCylindricalParameters = 0;
1742 if( coordinateSystemState[direction].coordinateSystem )
1745 coordinateSystemState[direction].coordinateSystem = 0;
1749 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1751 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1752 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1754 if( coordinateSystemState[direction].coordinateSystem )
1756 delete ((
Geocentric*)(coordinateSystemState[direction].coordinateSystem));
1757 coordinateSystemState[direction].coordinateSystem = 0;
1761 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1763 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1764 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1766 if( coordinateSystemState[direction].coordinateSystem )
1768 delete ((
Spherical*)(coordinateSystemState[direction].coordinateSystem));
1769 coordinateSystemState[direction].coordinateSystem = 0;
1773 if( coordinateSystemState[direction].parameters.geodeticParameters )
1775 delete coordinateSystemState[direction].parameters.geodeticParameters;
1776 coordinateSystemState[direction].parameters.geodeticParameters = 0;
1780 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1782 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1783 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1785 if( coordinateSystemState[direction].coordinateSystem )
1787 delete ((
GEOREF*)(coordinateSystemState[direction].coordinateSystem));
1788 coordinateSystemState[direction].coordinateSystem = 0;
1792 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1794 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1795 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1797 if( coordinateSystemState[direction].coordinateSystem )
1799 delete ((
GARS*)(coordinateSystemState[direction].coordinateSystem));
1800 coordinateSystemState[direction].coordinateSystem = 0;
1804 if( coordinateSystemState[direction].parameters.mapProjection5Parameters )
1806 delete coordinateSystemState[direction].parameters.mapProjection5Parameters;
1807 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
1809 if( coordinateSystemState[direction].coordinateSystem )
1812 coordinateSystemState[direction].coordinateSystem = 0;
1816 if( coordinateSystemState[direction].parameters.mapProjection5Parameters )
1818 delete coordinateSystemState[direction].parameters.mapProjection5Parameters;
1819 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
1821 if( coordinateSystemState[direction].coordinateSystem )
1824 coordinateSystemState[direction].coordinateSystem = 0;
1828 if( coordinateSystemState[direction].parameters.mapProjection5Parameters )
1830 delete coordinateSystemState[direction].parameters.mapProjection5Parameters;
1831 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
1833 if( coordinateSystemState[direction].coordinateSystem )
1836 coordinateSystemState[direction].coordinateSystem = 0;
1840 if( coordinateSystemState[direction].parameters.localCartesianParameters )
1842 delete coordinateSystemState[direction].parameters.localCartesianParameters;
1843 coordinateSystemState[direction].parameters.localCartesianParameters = 0;
1845 if( coordinateSystemState[direction].coordinateSystem )
1847 delete ((
LocalCartesian*)(coordinateSystemState[direction].coordinateSystem));
1848 coordinateSystemState[direction].coordinateSystem = 0;
1852 if( coordinateSystemState[direction].parameters.localCartesianParameters )
1854 delete coordinateSystemState[direction].parameters.localCartesianParameters;
1855 coordinateSystemState[direction].parameters.localCartesianParameters = 0;
1857 if( coordinateSystemState[direction].coordinateSystem )
1859 delete ((
LocalSpherical*)(coordinateSystemState[direction].coordinateSystem));
1860 coordinateSystemState[direction].coordinateSystem = 0;
1864 if( coordinateSystemState[direction].parameters.mercatorStandardParallelParameters )
1866 delete coordinateSystemState[direction].parameters.mercatorStandardParallelParameters;
1867 coordinateSystemState[direction].parameters.mercatorStandardParallelParameters = 0;
1869 if( coordinateSystemState[direction].coordinateSystem )
1871 delete ((
Mercator*)(coordinateSystemState[direction].coordinateSystem));
1872 coordinateSystemState[direction].coordinateSystem = 0;
1876 if( coordinateSystemState[direction].parameters.mercatorScaleFactorParameters )
1878 delete coordinateSystemState[direction].parameters.mercatorScaleFactorParameters;
1879 coordinateSystemState[direction].parameters.mercatorScaleFactorParameters = 0;
1881 if( coordinateSystemState[direction].coordinateSystem )
1883 delete ((
Mercator*)(coordinateSystemState[direction].coordinateSystem));
1884 coordinateSystemState[direction].coordinateSystem = 0;
1888 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1890 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1891 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1893 if( coordinateSystemState[direction].coordinateSystem )
1895 delete ((
MGRS*)(coordinateSystemState[direction].coordinateSystem));
1896 coordinateSystemState[direction].coordinateSystem = 0;
1900 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1902 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1903 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1905 if( coordinateSystemState[direction].coordinateSystem )
1907 delete ((
USNG*)(coordinateSystemState[direction].coordinateSystem));
1908 coordinateSystemState[direction].coordinateSystem = 0;
1912 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1914 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1915 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1917 if( coordinateSystemState[direction].coordinateSystem )
1919 delete ((
NZMG*)(coordinateSystemState[direction].coordinateSystem));
1920 coordinateSystemState[direction].coordinateSystem = 0;
1924 if( coordinateSystemState[direction].parameters.neysParameters )
1926 delete coordinateSystemState[direction].parameters.neysParameters;
1927 coordinateSystemState[direction].parameters.neysParameters = 0;
1929 if( coordinateSystemState[direction].coordinateSystem )
1931 delete ((
Neys*)(coordinateSystemState[direction].coordinateSystem));
1932 coordinateSystemState[direction].coordinateSystem = 0;
1936 if( coordinateSystemState[direction].parameters.obliqueMercatorParameters )
1938 delete coordinateSystemState[direction].parameters.obliqueMercatorParameters;
1939 coordinateSystemState[direction].parameters.obliqueMercatorParameters = 0;
1941 if( coordinateSystemState[direction].coordinateSystem )
1943 delete ((
ObliqueMercator*)(coordinateSystemState[direction].coordinateSystem));
1944 coordinateSystemState[direction].coordinateSystem = 0;
1948 if( coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters )
1950 delete coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters;
1951 coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters = 0;
1953 if( coordinateSystemState[direction].coordinateSystem )
1956 coordinateSystemState[direction].coordinateSystem = 0;
1960 if( coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters )
1962 delete coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters;
1963 coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters = 0;
1965 if( coordinateSystemState[direction].coordinateSystem )
1968 coordinateSystemState[direction].coordinateSystem = 0;
1972 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1974 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1975 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1977 if( coordinateSystemState[direction].coordinateSystem )
1979 delete ((
UPS*)(coordinateSystemState[direction].coordinateSystem));
1980 coordinateSystemState[direction].coordinateSystem = 0;
1984 if( coordinateSystemState[direction].parameters.utmParameters )
1986 delete coordinateSystemState[direction].parameters.utmParameters;
1987 coordinateSystemState[direction].parameters.utmParameters = 0;
1989 if( coordinateSystemState[direction].coordinateSystem )
1991 delete ((
UTM*)(coordinateSystemState[direction].coordinateSystem));
1992 coordinateSystemState[direction].coordinateSystem = 0;
1996 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1998 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1999 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
2001 if( coordinateSystemState[direction].coordinateSystem )
2003 delete ((
WebMercator*)(coordinateSystemState[direction].coordinateSystem));
2004 coordinateSystemState[direction].coordinateSystem = 0;
2013 void CoordinateConversionService::copyParameters(
2016 Parameters parameters )
2028 initCoordinateSystemState( direction );
2030 switch( coordinateType )
2034 setCoordinateSystem( direction, parameters.mapProjection6Parameters );
2044 setCoordinateSystem( direction, parameters.mapProjection4Parameters );
2052 setCoordinateSystem( direction, parameters.mapProjection3Parameters );
2055 setCoordinateSystem( direction, parameters.equidistantCylindricalParameters );
2058 setCoordinateSystem( direction, parameters.geodeticParameters );
2063 setCoordinateSystem( direction, parameters.mapProjection5Parameters );
2067 setCoordinateSystem( direction, parameters.localCartesianParameters );
2070 setCoordinateSystem( direction, parameters.mercatorStandardParallelParameters );
2073 setCoordinateSystem( direction, parameters.mercatorScaleFactorParameters );
2076 setCoordinateSystem( direction, parameters.neysParameters );
2079 setCoordinateSystem( direction, parameters.obliqueMercatorParameters );
2082 setCoordinateSystem( direction, parameters.polarStereographicStandardParallelParameters );
2085 setCoordinateSystem( direction, parameters.polarStereographicScaleFactorParameters );
2088 setCoordinateSystem( direction, parameters.utmParameters );
2100 setCoordinateSystem( direction, parameters.coordinateSystemParameters );
2108 void CoordinateConversionService::convert(
2132 bool special =
false;
2134 Coordinate_State_Row* source = &coordinateSystemState[sourceDirection];
2135 Coordinate_State_Row* target = &coordinateSystemState[targetDirection];
2137 char sourceWarningMessage[256] =
"";
2138 char targetWarningMessage[256] =
"";
2154 if (source->datumIndex == target->datumIndex)
2166 target->coordinateSystem))->convertFromGeocentric(
2170 delete cartesianCoordinates;
2181 ((
LocalCartesian*)(source->coordinateSystem))->convertToGeocentric(
2185 delete cartesianCoordinates;
2189 (target->parameters.utmParameters->override() == 0))
2197 ((
MGRS*)(source->coordinateSystem))->convertToUTM( coordinates );
2200 delete utmCoordinates;
2209 UPSCoordinates* upsCoordinates = ((
MGRS*)(source->coordinateSystem))->convertToUPS( coordinates );
2211 delete upsCoordinates;
2219 if (temp_precision < 0)
2221 if (temp_precision > 5)
2226 MGRSorUSNGCoordinates* mgrsOrUSNGCoordinates = ((
MGRS*)(target->coordinateSystem))->convertFromUTM( coordinates, temp_precision );
2228 delete mgrsOrUSNGCoordinates;
2235 if (temp_precision < 0)
2237 if (temp_precision > 5)
2242 MGRSorUSNGCoordinates* mgrsOrUSNGCoordinates = ((
MGRS*)(target->coordinateSystem))->convertFromUPS( coordinates, temp_precision );
2244 delete mgrsOrUSNGCoordinates;
2253 UTMCoordinates* utmCoordinates = ((
USNG*)(source->coordinateSystem))->convertToUTM( coordinates );
2255 delete utmCoordinates;
2263 UPSCoordinates* upsCoordinates = ((
USNG*)(source->coordinateSystem))->convertToUPS( coordinates );
2265 delete upsCoordinates;
2272 if (temp_precision < 0)
2274 if (temp_precision > 5)
2279 MGRSorUSNGCoordinates* mgrsOrUSNGCoordinates = ((
USNG*)(target->coordinateSystem))->convertFromUTM( coordinates, temp_precision );
2281 delete mgrsOrUSNGCoordinates;
2291 if (temp_precision < 0)
2293 if (temp_precision > 5)
2297 sourceCoordinates );
2300 ((
USNG*)(target->coordinateSystem))->convertFromUPS(
2301 coordinates, temp_precision );
2304 delete mgrsOrUSNGCoordinates;
2310 source->parameters.mapProjection5Parameters;
2321 if (temp_precision < 0)
2323 if (temp_precision > 5)
2330 convertFromTransverseMercator( coordinates, temp_precision );
2333 delete bngCoordinates;
2342 target->parameters.mapProjection5Parameters;
2357 source->coordinateSystem))->convertToTransverseMercator(
2361 mapProjectionCoordinates );
2362 delete mapProjectionCoordinates;
2373 Coordinate_System_Table[source->coordinateType].Name,
2383 _convertedGeodetic = convertSourceToGeodetic(
2384 sourceDirection, sourceCoordinates, sourceWarningMessage );
2394 input_height_type = source->parameters.geodeticParameters->heightType();
2404 output_height_type = target->parameters.geodeticParameters->heightType();
2413 if ((source->datumIndex == target->datumIndex) &&
2414 ((input_height_type == output_height_type) ||
2427 if(source->datumIndex != WGS84_datum_index &&
2428 target->datumIndex != WGS84_datum_index)
2434 source->datumIndex, _wgs84Geodetic->
longitude(),
2435 _wgs84Geodetic->
latitude(), &valid );
2443 target->datumIndex, _wgs84Geodetic->
longitude(),
2444 _wgs84Geodetic->
latitude(), &valid );
2453 if (source->datumIndex != WGS84_datum_index)
2456 source->datumIndex, _convertedGeodetic );
2458 switch(input_height_type)
2477 long sourceValid = 0;
2480 source->datumIndex, _wgs84Geodetic->
longitude(),
2481 _wgs84Geodetic->
latitude(), &sourceValid );
2494 if(input_height_type != output_height_type)
2499 switch(input_height_type)
2504 _wgs84Geodetic->
height(), &tempHeight);
2509 _wgs84Geodetic->
height(), &tempHeight);
2514 _wgs84Geodetic->
height(), &tempHeight );
2519 _wgs84Geodetic->
height(), &tempHeight );
2524 _wgs84Geodetic->
height(), &tempHeight );
2529 _wgs84Geodetic->
height(), &tempHeight );
2533 tempHeight = _wgs84Geodetic->
height();
2537 double correctedHeight;
2540 switch(output_height_type)
2545 tempHeight, &correctedHeight );
2550 tempHeight, &correctedHeight );
2555 tempHeight, &correctedHeight );
2560 tempHeight, &correctedHeight );
2565 tempHeight, &correctedHeight );
2570 tempHeight, &correctedHeight );
2574 correctedHeight = tempHeight;
2579 _wgs84Geodetic->
setHeight( correctedHeight );
2582 if (target->datumIndex != WGS84_datum_index)
2586 _wgs84Geodetic, target->datumIndex );
2588 switch(output_height_type)
2607 long targetValid = 0;
2610 target->datumIndex, _wgs84Geodetic->
longitude(),
2611 _wgs84Geodetic->
latitude(), &targetValid );
2626 if( strlen( sourceWarningMessage ) > 0 ||
2627 strlen( targetWarningMessage ) > 0 )
2628 targetAccuracy.
set(-1.0, -1.0, -1.0);
2641 source->datumIndex, target->datumIndex,
2643 _wgs84Geodetic->
latitude(), sourceAccuracy, prec );
2650 delete _targetAccuracy;
2657 convertGeodeticToTarget(
2658 targetDirection, _shiftedGeodetic,
2659 targetCoordinates, targetWarningMessage );
2662 char warningMessage[500] =
"";
2663 bool warning =
false;
2664 if( strlen( sourceWarningMessage ) > 0 )
2666 strcpy( warningMessage,
"Input " );
2667 strcat( warningMessage,
2668 Coordinate_System_Table[source->coordinateType].Name );
2669 strcat( warningMessage,
": \n" );
2670 strcat( warningMessage, sourceWarningMessage );
2674 if( strlen( targetWarningMessage ) > 0 )
2676 if( strlen( warningMessage ) > 0 )
2677 strcat( warningMessage,
"\nOutput " );
2679 strcpy( warningMessage,
"Output " );
2681 strcat( warningMessage,
2682 Coordinate_System_Table[target->coordinateType].Name );
2683 strcat( warningMessage,
": \n" );
2684 strcat( warningMessage, targetWarningMessage );
2690 warningMessage[strlen( warningMessage )] =
'\0';
2697 targetAccuracy.
set(-1.0, -1.0, -1.0);
2701 delete _convertedGeodetic;
2702 delete _shiftedGeodetic;
2703 delete _wgs84Geodetic;
2709 delete _convertedGeodetic;
2710 delete _shiftedGeodetic;
2711 delete _wgs84Geodetic;
2719 char* sourceWarningMessage )
2721 Coordinate_State_Row* source = &coordinateSystemState[sourceDirection];
2728 switch (source->coordinateType)
2735 return ((
Geocentric*)(source->coordinateSystem))->convertToGeodetic(
2743 return ((
Spherical*)(source->coordinateSystem))->convertToGeodetic(
2750 *dynamic_cast< GeodeticCoordinates* >( sourceCoordinates ) );
2755 return _convertedGeodetic;
2760 sourceCoordinates );
2762 return ((
GEOREF*)(source->coordinateSystem))->convertToGeodetic(
2771 source->coordinateSystem))->convertToGeodetic( coordinates );
2779 source->coordinateSystem))->convertToGeodetic( coordinates );
2785 return ((
BritishNationalGrid*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2792 return ((
Bonne*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2800 ((
Cassini*)(source->coordinateSystem))->convertToGeodetic(
2804 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2806 return _convertedGeodetic;
2814 source->coordinateSystem))->convertToGeodetic( coordinates);
2821 return ((
Eckert4*)(source->coordinateSystem))->convertToGeodetic(
2829 return ((
Eckert6*)(source->coordinateSystem))->convertToGeodetic(
2838 source->coordinateSystem))->convertToGeodetic( coordinates );
2844 return ((
GARS*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2850 return ((
Gnomonic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2868 return ((
LocalCartesian*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2874 return ((
LocalSpherical*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2882 return ((
Mercator*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2888 GeodeticCoordinates* _convertedGeodetic = ((
MGRS*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2891 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2893 return _convertedGeodetic;
2899 return ((
MillerCylindrical*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2905 return ((
Mollweide*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2911 return ((
Neys*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2917 return ((
NZMG*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2926 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2928 return _convertedGeodetic;
2934 return ((
Orthographic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2941 return ((
PolarStereographic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2947 return ((
Polyconic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2953 return ((
Sinusoidal*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2959 return ((
Stereographic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2974 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2976 return _convertedGeodetic;
2982 return ((
UPS*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2988 GeodeticCoordinates* _convertedGeodetic = ((
USNG*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2991 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2993 return _convertedGeodetic;
2999 return ((
UTM*)(source->coordinateSystem))->convertToGeodetic( coordinates );
3005 return ((
VanDerGrinten*)(source->coordinateSystem))->convertToGeodetic( coordinates );
3011 return ((
WebMercator*)(source->coordinateSystem))->convertToGeodetic( coordinates );
3018 "Input ", Coordinate_System_Table[source->coordinateType].Name,
3025 void CoordinateConversionService::convertGeodeticToTarget(
3029 char* targetWarningMessage )
3031 Coordinate_State_Row* target = &coordinateSystemState[targetDirection];
3038 switch (target->coordinateType)
3043 ((
Geocentric*)(target->coordinateSystem))->convertFromGeodetic(
3047 coordinates->
x(), coordinates->
y(), coordinates->
z() );
3056 ((
Spherical*)(target->coordinateSystem))->convertFromGeodetic(
3069 ( dynamic_cast< GeodeticCoordinates& >( targetCoordinates ) ).set(
3072 ( dynamic_cast< GeodeticCoordinates& >( targetCoordinates ) ).set(
3074 _shiftedGeodetic->
height() );
3082 targetCoordinates ) ).precision();
3083 if (temp_precision < 0)
3085 if (temp_precision > 5)
3089 ((
GEOREF*)(target->coordinateSystem))->convertFromGeodetic(
3090 _shiftedGeodetic, temp_precision );
3103 target->coordinateSystem))->convertFromGeodetic(
3117 target->coordinateSystem))->convertFromGeodetic(
3130 (
dynamic_cast< BNGCoordinates&
>(targetCoordinates ) ).precision();
3131 if (temp_precision < 0)
3133 if (temp_precision > 5)
3138 target->coordinateSystem))->convertFromGeodetic(
3139 _shiftedGeodetic, temp_precision );
3151 ((
Bonne*)(target->coordinateSystem))->convertFromGeodetic(
3164 ((
Cassini*)(target->coordinateSystem))->convertFromGeodetic(
3173 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3184 target->coordinateSystem))->convertFromGeodetic(
3197 ((
Eckert4*)(target->coordinateSystem))->convertFromGeodetic(
3210 ((
Eckert6*)(target->coordinateSystem))->convertFromGeodetic(
3224 target->coordinateSystem))->convertFromGeodetic(
3238 if (temp_precision < 0)
3240 if (temp_precision > 5)
3244 ((
GARS*)(target->coordinateSystem))->convertFromGeodetic(
3245 _shiftedGeodetic, temp_precision );
3257 ((
Gnomonic*)(target->coordinateSystem))->convertFromGeodetic(
3271 target->coordinateSystem))->convertFromGeodetic(
3285 target->coordinateSystem))->convertFromGeodetic(
3298 ((
LocalCartesian*)(target->coordinateSystem))->convertFromGeodetic(
3302 coordinates->
x(), coordinates->
y(), coordinates->
z() );
3311 ((
LocalSpherical*)(target->coordinateSystem))->convertFromGeodetic(
3325 ((
Mercator*)(target->coordinateSystem))->convertFromGeodetic(
3339 targetCoordinates ) ).precision();
3341 if (temp_precision < 0)
3343 if (temp_precision > 5)
3346 ((
MGRS*)(target->coordinateSystem))->convertFromGeodetic(
3347 _shiftedGeodetic, temp_precision );
3360 target->coordinateSystem))->convertFromGeodetic(
3373 ((
Mollweide*)(target->coordinateSystem))->convertFromGeodetic(
3386 ((
Neys*)(target->coordinateSystem))->convertFromGeodetic(
3399 ((
NZMG*)(target->coordinateSystem))->convertFromGeodetic(
3421 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3431 ((
Orthographic*)(target->coordinateSystem))->convertFromGeodetic(
3446 target->coordinateSystem))->convertFromGeodetic(
3459 ((
Polyconic*)(target->coordinateSystem))->convertFromGeodetic(
3468 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3478 ((
Sinusoidal*)(target->coordinateSystem))->convertFromGeodetic(
3491 ((
Stereographic*)(target->coordinateSystem))->convertFromGeodetic(
3505 target->coordinateSystem))->convertFromGeodetic(
3514 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3525 target->coordinateSystem))->convertFromGeodetic(
3534 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3544 ((
UPS*)(target->coordinateSystem))->convertFromGeodetic(
3560 targetCoordinates ) ).precision();
3561 if (temp_precision < 0)
3563 if (temp_precision > 5)
3567 ((
USNG*)(target->coordinateSystem))->convertFromGeodetic(
3568 _shiftedGeodetic, temp_precision );
3580 ((
UTM*)(target->coordinateSystem))->convertFromGeodetic(
3594 ((
VanDerGrinten*)(target->coordinateSystem))->convertFromGeodetic(
3607 ((
WebMercator*)(target->coordinateSystem))->convertFromGeodetic(
3622 "Output ", Coordinate_System_Table[target->coordinateType].Name,
3628 void CoordinateConversionService::convertCollection(
3629 const std::vector<MSP::CCS::CoordinateTuple*>& sourceCoordinatesCollection,
3630 const std::vector<MSP::CCS::Accuracy*>& sourceAccuracyCollection,
3631 std::vector<MSP::CCS::CoordinateTuple*>& targetCoordinatesCollection,
3632 std::vector<MSP::CCS::Accuracy*>& targetAccuracyCollection )
3644 int num = sourceCoordinatesCollection.size();
3645 int numTargetCoordinates = targetCoordinatesCollection.size();
3646 int numTargetAccuracies = targetAccuracyCollection.size();
3653 for(
int i = 0; i < num; i++ )
3656 Accuracy* _sourceAccuracy = sourceAccuracyCollection[i];
3658 bool targetCoordinateExists =
true;
3659 bool targetAccuracyExists =
true;
3661 if(i < numTargetAccuracies)
3662 _targetAccuracy = targetAccuracyCollection[i];
3666 targetAccuracyExists =
false;
3669 if( _sourceCoordinates && _sourceAccuracy )
3671 switch(targetCoordinateType)
3675 if(i < numTargetCoordinates)
3676 _targetCoordinates = targetCoordinatesCollection[i];
3681 targetCoordinateExists =
false;
3688 sourceCoordinatesCollection[i],
3689 sourceAccuracyCollection[i],
3690 *_targetCoordinates, *_targetAccuracy);
3697 if(!targetCoordinateExists)
3698 targetCoordinatesCollection.push_back(_targetCoordinates);
3703 if(i < numTargetCoordinates)
3704 _targetCoordinates = targetCoordinatesCollection[i];
3709 targetCoordinateExists =
false;
3716 sourceCoordinatesCollection[i],
3717 sourceAccuracyCollection[i],
3718 *_targetCoordinates, *_targetAccuracy);
3725 if(!targetCoordinateExists)
3726 targetCoordinatesCollection.push_back(_targetCoordinates);
3731 if(i < numTargetCoordinates)
3732 _targetCoordinates = targetCoordinatesCollection[i];
3737 targetCoordinateExists =
false;
3744 sourceCoordinatesCollection[i],
3745 sourceAccuracyCollection[i],
3746 *_targetCoordinates, *_targetAccuracy);
3753 if(!targetCoordinateExists)
3754 targetCoordinatesCollection.push_back(_targetCoordinates);
3759 if(i < numTargetCoordinates)
3760 _targetCoordinates = targetCoordinatesCollection[i];
3765 targetCoordinateExists =
false;
3772 sourceCoordinatesCollection[i],
3773 sourceAccuracyCollection[i],
3774 *_targetCoordinates, *_targetAccuracy);
3781 if(!targetCoordinateExists)
3782 targetCoordinatesCollection.push_back(_targetCoordinates);
3787 if(i < numTargetCoordinates)
3788 _targetCoordinates = targetCoordinatesCollection[i];
3793 targetCoordinateExists =
false;
3800 sourceCoordinatesCollection[i],
3801 sourceAccuracyCollection[i],
3802 *_targetCoordinates, *_targetAccuracy);
3809 if(!targetCoordinateExists)
3810 targetCoordinatesCollection.push_back(_targetCoordinates);
3815 if(i < numTargetCoordinates)
3816 _targetCoordinates = targetCoordinatesCollection[i];
3821 targetCoordinateExists =
false;
3828 sourceCoordinatesCollection[i],
3829 sourceAccuracyCollection[i],
3830 *_targetCoordinates, *_targetAccuracy);
3837 if(!targetCoordinateExists)
3838 targetCoordinatesCollection.push_back(_targetCoordinates);
3843 if(i < numTargetCoordinates)
3844 _targetCoordinates = targetCoordinatesCollection[i];
3849 targetCoordinateExists =
false;
3856 sourceCoordinatesCollection[i],
3857 sourceAccuracyCollection[i],
3858 *_targetCoordinates, *_targetAccuracy);
3865 if(!targetCoordinateExists)
3866 targetCoordinatesCollection.push_back(_targetCoordinates);
3871 if(i < numTargetCoordinates)
3872 _targetCoordinates = targetCoordinatesCollection[i];
3877 targetCoordinateExists =
false;
3884 sourceCoordinatesCollection[i],
3885 sourceAccuracyCollection[i],
3886 *_targetCoordinates, *_targetAccuracy);
3893 if(!targetCoordinateExists)
3894 targetCoordinatesCollection.push_back(_targetCoordinates);
3899 if(i < numTargetCoordinates)
3900 _targetCoordinates = targetCoordinatesCollection[i];
3905 targetCoordinateExists =
false;
3912 sourceCoordinatesCollection[i],
3913 sourceAccuracyCollection[i],
3914 *_targetCoordinates, *_targetAccuracy);
3921 if(!targetCoordinateExists)
3922 targetCoordinatesCollection.push_back(_targetCoordinates);
3927 if(i < numTargetCoordinates)
3928 _targetCoordinates = targetCoordinatesCollection[i];
3933 targetCoordinateExists =
false;
3939 sourceCoordinatesCollection[i], sourceAccuracyCollection[i],
3940 *_targetCoordinates, *_targetAccuracy);
3947 if(!targetCoordinateExists)
3948 targetCoordinatesCollection.push_back(_targetCoordinates);
3953 if(i < numTargetCoordinates)
3954 _targetCoordinates = targetCoordinatesCollection[i];
3959 targetCoordinateExists =
false;
3965 sourceCoordinatesCollection[i], sourceAccuracyCollection[i],
3966 *_targetCoordinates, *_targetAccuracy);
3973 if(!targetCoordinateExists)
3974 targetCoordinatesCollection.push_back(_targetCoordinates);
3979 if(i < numTargetCoordinates)
3980 _targetCoordinates = targetCoordinatesCollection[i];
3985 targetCoordinateExists =
false;
3991 sourceCoordinatesCollection[i], sourceAccuracyCollection[i],
3992 *_targetCoordinates, *_targetAccuracy);
3999 if(!targetCoordinateExists)
4000 targetCoordinatesCollection.push_back(_targetCoordinates);
4005 if(i < numTargetCoordinates)
4006 _targetCoordinates = targetCoordinatesCollection[i];
4010 targetCoordinateExists =
false;
4017 sourceCoordinatesCollection[i],
4018 sourceAccuracyCollection[i],
4019 *_targetCoordinates, *_targetAccuracy);
4026 if(!targetCoordinateExists)
4027 targetCoordinatesCollection.push_back(_targetCoordinates);
4032 if(i < numTargetCoordinates)
4033 _targetCoordinates = targetCoordinatesCollection[i];
4038 targetCoordinateExists =
false;
4045 sourceCoordinatesCollection[i],
4046 sourceAccuracyCollection[i],
4047 *_targetCoordinates, *_targetAccuracy);
4054 if(!targetCoordinateExists)
4055 targetCoordinatesCollection.push_back(_targetCoordinates);
4060 if(i < numTargetCoordinates)
4061 _targetCoordinates = targetCoordinatesCollection[i];
4066 targetCoordinateExists =
false;
4073 sourceCoordinatesCollection[i],
4074 sourceAccuracyCollection[i],
4075 *_targetCoordinates, *_targetAccuracy);
4082 if(!targetCoordinateExists)
4083 targetCoordinatesCollection.push_back(_targetCoordinates);
4088 if(i < numTargetCoordinates)
4089 _targetCoordinates = targetCoordinatesCollection[i];
4094 targetCoordinateExists =
false;
4101 sourceCoordinatesCollection[i],
4102 sourceAccuracyCollection[i],
4103 *_targetCoordinates,
4111 if(!targetCoordinateExists)
4112 targetCoordinatesCollection.push_back(_targetCoordinates);
4117 if(i < numTargetCoordinates)
4118 _targetCoordinates = targetCoordinatesCollection[i];
4123 targetCoordinateExists =
false;
4130 sourceCoordinatesCollection[i],
4131 sourceAccuracyCollection[i],
4132 *_targetCoordinates, *_targetAccuracy);
4139 if(!targetCoordinateExists)
4140 targetCoordinatesCollection.push_back(_targetCoordinates);
4145 if(i < numTargetCoordinates)
4146 _targetCoordinates = targetCoordinatesCollection[i];
4151 targetCoordinateExists =
false;
4158 sourceCoordinatesCollection[i],
4159 sourceAccuracyCollection[i],
4160 *_targetCoordinates, *_targetAccuracy);
4167 if(!targetCoordinateExists)
4168 targetCoordinatesCollection.push_back(_targetCoordinates);
4173 if(i < numTargetCoordinates)
4174 _targetCoordinates = targetCoordinatesCollection[i];
4179 targetCoordinateExists =
false;
4186 sourceCoordinatesCollection[i],
4187 sourceAccuracyCollection[i],
4188 *_targetCoordinates, *_targetAccuracy);
4195 if(!targetCoordinateExists)
4196 targetCoordinatesCollection.push_back(_targetCoordinates);
4201 if(i < numTargetCoordinates)
4202 _targetCoordinates = targetCoordinatesCollection[i];
4207 targetCoordinateExists =
false;
4214 sourceCoordinatesCollection[i],
4215 sourceAccuracyCollection[i],
4216 *_targetCoordinates, *_targetAccuracy);
4223 if(!targetCoordinateExists)
4224 targetCoordinatesCollection.push_back(_targetCoordinates);
4229 if(i < numTargetCoordinates)
4230 _targetCoordinates = targetCoordinatesCollection[i];
4235 targetCoordinateExists =
false;
4242 sourceCoordinatesCollection[i],
4243 sourceAccuracyCollection[i],
4244 *_targetCoordinates, *_targetAccuracy);
4251 if(!targetCoordinateExists)
4252 targetCoordinatesCollection.push_back(_targetCoordinates);
4257 if(i < numTargetCoordinates)
4258 _targetCoordinates = targetCoordinatesCollection[i];
4263 targetCoordinateExists =
false;
4270 sourceCoordinatesCollection[i],
4271 sourceAccuracyCollection[i],
4272 *_targetCoordinates, *_targetAccuracy);
4279 if(!targetCoordinateExists)
4280 targetCoordinatesCollection.push_back(_targetCoordinates);
4285 if(i < numTargetCoordinates)
4286 _targetCoordinates = targetCoordinatesCollection[i];
4291 targetCoordinateExists =
false;
4298 sourceCoordinatesCollection[i],
4299 sourceAccuracyCollection[i],
4300 *_targetCoordinates, *_targetAccuracy);
4307 if(!targetCoordinateExists)
4308 targetCoordinatesCollection.push_back(_targetCoordinates);
4313 if(i < numTargetCoordinates)
4314 _targetCoordinates = targetCoordinatesCollection[i];
4319 targetCoordinateExists =
false;
4326 sourceCoordinatesCollection[i],
4327 sourceAccuracyCollection[i],
4328 *_targetCoordinates, *_targetAccuracy);
4335 if(!targetCoordinateExists)
4336 targetCoordinatesCollection.push_back(_targetCoordinates);
4341 if(i < numTargetCoordinates)
4342 _targetCoordinates = targetCoordinatesCollection[i];
4347 targetCoordinateExists =
false;
4354 sourceCoordinatesCollection[i],
4355 sourceAccuracyCollection[i],
4356 *_targetCoordinates, *_targetAccuracy);
4363 if(!targetCoordinateExists)
4364 targetCoordinatesCollection.push_back(_targetCoordinates);
4369 if(i < numTargetCoordinates)
4370 _targetCoordinates = targetCoordinatesCollection[i];
4375 targetCoordinateExists =
false;
4382 sourceCoordinatesCollection[i],
4383 sourceAccuracyCollection[i],
4384 *_targetCoordinates, *_targetAccuracy);
4391 if(!targetCoordinateExists)
4392 targetCoordinatesCollection.push_back(_targetCoordinates);
4397 if(i < numTargetCoordinates)
4398 _targetCoordinates = targetCoordinatesCollection[i];
4403 targetCoordinateExists =
false;
4410 sourceCoordinatesCollection[i],
4411 sourceAccuracyCollection[i],
4412 *_targetCoordinates, *_targetAccuracy);
4419 if(!targetCoordinateExists)
4420 targetCoordinatesCollection.push_back(_targetCoordinates);
4425 if(i < numTargetCoordinates)
4426 _targetCoordinates = targetCoordinatesCollection[i];
4431 targetCoordinateExists =
false;
4438 sourceCoordinatesCollection[i],
4439 sourceAccuracyCollection[i],
4440 *_targetCoordinates, *_targetAccuracy);
4447 if(!targetCoordinateExists)
4448 targetCoordinatesCollection.push_back(_targetCoordinates);
4453 if(i < numTargetCoordinates)
4454 _targetCoordinates = targetCoordinatesCollection[i];
4459 targetCoordinateExists =
false;
4466 sourceCoordinatesCollection[i],
4467 sourceAccuracyCollection[i],
4468 *_targetCoordinates, *_targetAccuracy);
4475 if(!targetCoordinateExists)
4476 targetCoordinatesCollection.push_back(_targetCoordinates);
4481 if(i < numTargetCoordinates)
4482 _targetCoordinates = targetCoordinatesCollection[i];
4487 targetCoordinateExists =
false;
4494 sourceCoordinatesCollection[i],
4495 sourceAccuracyCollection[i],
4496 *_targetCoordinates, *_targetAccuracy);
4503 if(!targetCoordinateExists)
4504 targetCoordinatesCollection.push_back(_targetCoordinates);
4509 if(i < numTargetCoordinates)
4510 _targetCoordinates = targetCoordinatesCollection[i];
4515 targetCoordinateExists =
false;
4522 sourceCoordinatesCollection[i],
4523 sourceAccuracyCollection[i],
4524 *_targetCoordinates, *_targetAccuracy);
4531 if(!targetCoordinateExists)
4532 targetCoordinatesCollection.push_back(_targetCoordinates);
4537 if(i < numTargetCoordinates)
4538 _targetCoordinates = targetCoordinatesCollection[i];
4543 targetCoordinateExists =
false;
4550 sourceCoordinatesCollection[i],
4551 sourceAccuracyCollection[i],
4552 *_targetCoordinates, *_targetAccuracy);
4559 if(!targetCoordinateExists)
4560 targetCoordinatesCollection.push_back(_targetCoordinates);
4565 if(i < numTargetCoordinates)
4566 _targetCoordinates = targetCoordinatesCollection[i];
4571 targetCoordinateExists =
false;
4578 sourceCoordinatesCollection[i],
4579 sourceAccuracyCollection[i],
4580 *_targetCoordinates, *_targetAccuracy);
4587 if(!targetCoordinateExists)
4588 targetCoordinatesCollection.push_back(_targetCoordinates);
4593 if(i < numTargetCoordinates)
4594 _targetCoordinates = targetCoordinatesCollection[i];
4599 targetCoordinateExists =
false;
4606 sourceCoordinatesCollection[i],
4607 sourceAccuracyCollection[i],
4608 *_targetCoordinates, *_targetAccuracy);
4615 if(!targetCoordinateExists)
4616 targetCoordinatesCollection.push_back(_targetCoordinates);
4621 if(i < numTargetCoordinates)
4622 _targetCoordinates = targetCoordinatesCollection[i];
4627 targetCoordinateExists =
false;
4634 sourceCoordinatesCollection[i],
4635 sourceAccuracyCollection[i],
4636 *_targetCoordinates, *_targetAccuracy);
4643 if(!targetCoordinateExists)
4644 targetCoordinatesCollection.push_back(_targetCoordinates);
4649 if(i < numTargetCoordinates)
4650 _targetCoordinates = targetCoordinatesCollection[i];
4655 targetCoordinateExists =
false;
4664 *_targetCoordinates, *_targetAccuracy);
4671 if(!targetCoordinateExists)
4672 targetCoordinatesCollection.push_back(_targetCoordinates);
4677 if(i < numTargetCoordinates)
4678 _targetCoordinates = targetCoordinatesCollection[i];
4683 targetCoordinateExists =
false;
4690 sourceCoordinatesCollection[i],
4691 sourceAccuracyCollection[i],
4692 *_targetCoordinates, *_targetAccuracy);
4699 if(!targetCoordinateExists)
4700 targetCoordinatesCollection.push_back(_targetCoordinates);
4705 if(i < numTargetCoordinates)
4706 _targetCoordinates = targetCoordinatesCollection[i];
4711 targetCoordinateExists =
false;
4718 sourceCoordinatesCollection[i],
4719 sourceAccuracyCollection[i],
4720 *_targetCoordinates, *_targetAccuracy);
4727 if(!targetCoordinateExists)
4728 targetCoordinatesCollection.push_back(_targetCoordinates);
4733 if(i < numTargetCoordinates)
4734 _targetCoordinates = targetCoordinatesCollection[i];
4739 targetCoordinateExists =
false;
4746 sourceCoordinatesCollection[i],
4747 sourceAccuracyCollection[i],
4748 *_targetCoordinates, *_targetAccuracy);
4755 if(!targetCoordinateExists)
4756 targetCoordinatesCollection.push_back(_targetCoordinates);
4761 if(i < numTargetCoordinates)
4762 _targetCoordinates = targetCoordinatesCollection[i];
4765 _targetCoordinates =
4767 targetCoordinateExists =
false;
4774 sourceCoordinatesCollection[i],
4775 sourceAccuracyCollection[i],
4776 *_targetCoordinates, *_targetAccuracy);
4783 if(!targetCoordinateExists)
4784 targetCoordinatesCollection.push_back(_targetCoordinates);
4791 if(!targetAccuracyExists)
4792 targetAccuracyCollection.push_back( _targetAccuracy );
4796 if(i >= numTargetCoordinates)
4797 targetCoordinateExists =
false;
4799 if( _sourceCoordinates )
4801 if(!targetCoordinateExists)
4802 targetCoordinatesCollection.push_back(
4806 _targetCoordinates = targetCoordinatesCollection[i];
4807 _targetCoordinates->
set(
4815 if(!targetCoordinateExists)
4819 if(!targetAccuracyExists)
4821 if( _sourceAccuracy )
4822 targetAccuracyCollection.push_back( _sourceAccuracy );
4826 targetAccuracyCollection.push_back( __sourceAccuracy );
4832 if(numTargetCoordinates > num)
4834 for(
int i = num; i < numTargetCoordinates; i++)
4836 delete targetCoordinatesCollection[i];
4837 targetCoordinatesCollection.pop_back();
4840 if(numTargetAccuracies > num)
4842 for(
int i = num; i < numTargetAccuracies; i++)
4844 targetAccuracyCollection.pop_back();
double sphericalLatitude() const
void convertEllipsoidHeightToEGM2008GeoidHeight(double longitude, double latitude, double ellipsoidHeight, double *geoidHeight)
CoordinateConversionService(const char *sourceDatumCode, MSP::CCS::CoordinateSystemParameters *sourceParameters, const char *targetDatumCode, MSP::CCS::CoordinateSystemParameters *targetParameters)
double scaleFactor() const
static GeoidLibrary * getInstance()
double centralMeridian() const
void set(char __GARSString[8])
GeodeticCoordinates * geodeticShiftToWGS84(const long sourceIndex, const GeodeticCoordinates *sourceCoordinates)
void convertEllipsoidToEGM84ThirtyMinBiLinearHeight(double longitude, double latitude, double ellipsoidHeight, double *geoidHeight)
double originLatitude() const
double falseNorthing() const
void set(double __circularError90, double __linearError90, double __sphericalError90)
void datumIndex(const char *code, long *index)
double falseEasting() const
void convertEllipsoidToEGM84TenDegNaturalSplineHeight(double longitude, double latitude, double ellipsoidHeight, double *geoidHeight)
void convertEGM96FifteenMinBilinearGeoidToEllipsoidHeight(double longitude, double latitude, double geoidHeight, double *ellipsoidHeight)
void set(char __MGRSString[21])
double centralMeridian() const
void setHeight(double __height)
double falseNorthing() const
static const char * webmInvalidTargetCS
~CoordinateConversionService(void)
void set(char __hemisphere, double __easting, double __northing)
static const char * invalidType
static EllipsoidLibraryImplementation * getInstance()
double standardParallel1() const
GeodeticCoordinates * geodeticShiftFromWGS84(const GeodeticCoordinates *sourceCoordinates, const long targetIndex)
double falseNorthing() const
void datumEllipsoidCode(const long index, char *code)
double falseNorthing() const
void convertEGM84ThirtyMinBiLinearToEllipsoidHeight(double longitude, double latitude, double geoidHeight, double *ellipsoidHeight)
double scaleFactor() const
double falseNorthing() const
EllipsoidLibrary * getEllipsoidLibrary()
void convertEGM2008GeoidHeightToEllipsoidHeight(double longitude, double latitude, double geoidHeight, double *ellipsoidHeight)
static const char * datum
DatumLibrary * getDatumLibrary()
double falseEasting() const
void set(char __BNGString[21])
void convertEllipsoidToEGM84TenDegBilinearHeight(double longitude, double latitude, double ellipsoidHeight, double *geoidHeight)
double longitude1() const
double standardParallel() const
void ellipsoidIndex(const char *code, long *index)
double falseNorthing() const
void setZone(long __zone)
void convertEGM84TenDegBilinearToEllipsoidHeight(double longitude, double latitude, double geoidHeight, double *ellipsoidHeight)
void convertEllipsoidToEGM96VariableNaturalSplineHeight(double longitude, double latitude, double ellipsoidHeight, double *geoidHeight)
Precision::Enum precision() const
double orientation() const
void setErrorMessage(const char *__errorMessage)
double falseEasting() const
double standardParallel2() const
void convertSourceToTargetCollection(const std::vector< MSP::CCS::CoordinateTuple * > &sourceCoordinates, const std::vector< MSP::CCS::Accuracy * > &sourceAccuracy, std::vector< MSP::CCS::CoordinateTuple * > &targetCoordinates, std::vector< MSP::CCS::Accuracy * > &targetAccuracy)
double falseNorthing() const
double falseEasting() const
double centralMeridian() const
double centralMeridian() const
const char * getDatum(const SourceOrTarget::Enum direction) const
void ellipsoidParameters(const long index, double *a, double *f)
static DatumLibraryImplementation * getInstance()
double centralMeridian() const
double falseEasting() const
double falseEasting() const
void convertEllipsoidToEGM96FifteenMinBilinearGeoidHeight(double longitude, double latitude, double ellipsoidHeight, double *geoidHeight)
double scaleFactor() const
CoordinateConversionService & operator=(const CoordinateConversionService &ccs)
void setScaleFactor(double __scaleFactor)
double originLatitude() const
static void removeInstance()
double originLatitude() const
Accuracy * datumShiftError(const long sourceIndex, const long targetIndex, double longitude, double latitude, Accuracy *sourceAccuracy, Precision::Enum precision)
void set(double __easting, double __northing)
double falseNorthing() const
double falseEasting() const
void convertTargetToSource(CoordinateTuple *targetCoordinates, Accuracy *targetAccuracy, CoordinateTuple &sourceCoordinates, Accuracy &sourceAccurac)
double centralMeridian() const
double originLatitude() const
void set(MSP::CCS::CoordinateType::Enum __coordinateType, const char *__warningMessage, const char *__errorMessage)
double centralMeridian() const
virtual Precision::Enum precision() const
double falseEasting() const
void validDatum(const long index, double longitude, double latitude, long *result)
double standardParallel1() const
void set(long __zone, char __hemisphere, double __easting, double __northing)
static void removeInstance()
static const char * invalidDatumCode
double falseEasting() const
double elevationAngle() const
double longitude2() const
void setDatumLibraryImplementation(DatumLibraryImplementation *__datumLibraryImplementation)
void convertEGM84TenDegNaturalSplineToEllipsoidHeight(double longitude, double latitude, double geoidHeight, double *ellipsoidHeight)
double centralMeridian() const
void setWarningMessage(const char *__warningMessage)
double sphericalError90()
double falseNorthing() const
double centralMeridian() const
double falseEasting() const
CoordinateType::Enum coordinateType() const
static void removeInstance()
const char * errorMessage() const
double originLatitude() const
double falseNorthing() const
double standardParallel() const
CoordinateType::Enum coordinateType() const
double scaleFactor() const
void set(char __GEOREFString[21])
double falseNorthing() const
void setEllipsoidLibraryImplementation(EllipsoidLibraryImplementation *__ellipsoidLibraryImplementation)
MSP::CCS::CoordinateSystemParameters * getCoordinateSystem(const SourceOrTarget::Enum direction) const
double centralMeridian() const
void convertEGM96VariableNaturalSplineToEllipsoidHeight(double longitude, double latitude, double geoidHeight, double *ellipsoidHeight)
double sphericalLongitude() const
double falseEasting() const
double standardParallel() const
void convertSourceToTarget(CoordinateTuple *sourceCoordinates, Accuracy *sourceAccuracy, CoordinateTuple &targetCoordinates, Accuracy &targetAccuracy)
void convertTargetToSourceCollection(const std::vector< MSP::CCS::CoordinateTuple * > &targetCoordinates, const std::vector< MSP::CCS::Accuracy * > &targetAccuracy, std::vector< MSP::CCS::CoordinateTuple * > &sourceCoordinates, std::vector< MSP::CCS::Accuracy * > &sourceAccuracy)
const char * warningMessage() const