173 using namespace MSP::CCS;
178 const double PI = 3.14159265358979323e0;
183 CoordinateConversionService::CCSData::CCSData() :
186 ellipsoidLibraryImplementation = EllipsoidLibraryImplementation::getInstance();
188 datumLibraryImplementation = DatumLibraryImplementation::getInstance();
189 datumLibrary =
new DatumLibrary( datumLibraryImplementation );
190 geoidLibrary = GeoidLibrary::getInstance();
194 CoordinateConversionService::CCSData::~CCSData()
196 delete ellipsoidLibrary;
197 ellipsoidLibrary = 0;
199 EllipsoidLibraryImplementation::removeInstance();
200 ellipsoidLibraryImplementation = 0;
205 DatumLibraryImplementation::removeInstance();
206 datumLibraryImplementation = 0;
208 GeoidLibrary::removeInstance();
217 CoordinateConversionService::CoordinateConversionService(
218 const char* sourceDatumCode,
220 const char* targetDatumCode,
222 WGS84_datum_index( 0 )
230 ccsData =
new CCSData();
236 ellipsoidLibraryImplementation = 0;
239 datumLibraryImplementation = 0;
247 ellipsoidLibraryImplementation = ccsData->ellipsoidLibraryImplementation;
248 datumLibraryImplementation = ccsData->datumLibraryImplementation;
249 geoidLibrary = ccsData->geoidLibrary;
279 Coordinate_System_Table[
CoordinateType::neys].set(
"Ney's (Modified Lambert Conformal Conic)",
"NY" );
324 datumLibraryImplementation->
datumIndex(
"WGE", &WGS84_datum_index );
330 ccsData( ccs.ccsData )
336 ellipsoidLibraryImplementation = ccsData->ellipsoidLibraryImplementation;
337 datumLibraryImplementation = ccsData->datumLibraryImplementation;
338 geoidLibrary = ccsData->geoidLibrary;
357 WGS84_datum_index = ccs.WGS84_datum_index;
365 if( --ccsData->refCount == 0 )
371 ellipsoidLibraryImplementation = 0;
374 datumLibraryImplementation = 0;
390 if( ccsData == ccs.ccsData )
393 if( --ccsData->refCount == 0 )
396 ccsData = ccs.ccsData;
399 ellipsoidLibraryImplementation = ccsData->ellipsoidLibraryImplementation;
400 datumLibraryImplementation = ccsData->datumLibraryImplementation;
401 geoidLibrary = ccsData->geoidLibrary;
420 WGS84_datum_index = ccs.WGS84_datum_index;
440 sourceCoordinates, sourceAccuracy, targetCoordinates, targetAccuracy );
459 targetCoordinates, targetAccuracy,
460 sourceCoordinates, sourceAccuracy );
465 const std::vector<MSP::CCS::CoordinateTuple*>& sourceCoordinates,
466 const std::vector<MSP::CCS::Accuracy*>& sourceAccuracy,
467 std::vector<MSP::CCS::CoordinateTuple*>& targetCoordinates,
468 std::vector<MSP::CCS::Accuracy*>& targetAccuracy )
481 sourceCoordinates, sourceAccuracy, targetCoordinates, targetAccuracy );
486 const std::vector<MSP::CCS::CoordinateTuple*>& targetCoordinates,
487 const std::vector<MSP::CCS::Accuracy*>& targetAccuracy,
488 std::vector<MSP::CCS::CoordinateTuple*>& sourceCoordinates,
489 std::vector<MSP::CCS::Accuracy*>& sourceAccuracy )
502 targetCoordinates, targetAccuracy, sourceCoordinates, sourceAccuracy );
514 return ccsData->ellipsoidLibrary;
526 return ccsData->datumLibrary;
549 return coordinateSystemState[direction].datumCode;
565 switch( coordinateSystemState[direction].coordinateType )
569 return coordinateSystemState[direction].parameters.mapProjection6Parameters;
578 return coordinateSystemState[direction].parameters.mapProjection4Parameters;
585 return coordinateSystemState[direction].parameters.mapProjection3Parameters;
587 return coordinateSystemState[direction].parameters.equidistantCylindricalParameters;
589 return coordinateSystemState[direction].parameters.geodeticParameters;
593 return coordinateSystemState[direction].parameters.mapProjection5Parameters;
596 return coordinateSystemState[direction].parameters.localCartesianParameters;
598 return ((
Mercator*)(coordinateSystemState[direction].coordinateSystem))->getStandardParallelParameters();
600 return coordinateSystemState[direction].parameters.mercatorScaleFactorParameters;
602 return coordinateSystemState[direction].parameters.neysParameters;
604 return coordinateSystemState[direction].parameters.obliqueMercatorParameters;
606 return coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters;
608 return coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters;
610 return coordinateSystemState[direction].parameters.utmParameters;
621 return coordinateSystemState[direction].parameters.coordinateSystemParameters;
633 void CoordinateConversionService::initCoordinateSystemState(
645 coordinateSystemState[direction].datumIndex = 0;
647 coordinateSystemState[direction].coordinateSystem = 0;
649 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
650 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
651 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
652 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
653 coordinateSystemState[direction].parameters.mapProjection6Parameters = 0;
654 coordinateSystemState[direction].parameters.equidistantCylindricalParameters = 0;
655 coordinateSystemState[direction].parameters.geodeticParameters = 0;
656 coordinateSystemState[direction].parameters.localCartesianParameters = 0;
657 coordinateSystemState[direction].parameters.mercatorStandardParallelParameters = 0;
658 coordinateSystemState[direction].parameters.mercatorScaleFactorParameters = 0;
659 coordinateSystemState[direction].parameters.neysParameters = 0;
660 coordinateSystemState[direction].parameters.obliqueMercatorParameters = 0;
661 coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters = 0;
662 coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters = 0;
663 coordinateSystemState[direction].parameters.utmParameters = 0;
667 void CoordinateConversionService::setDataLibraries()
678 ellipsoidLibraryImplementation );
680 datumLibraryImplementation );
684 char message[256] =
"Error initializing MSP CCS data: ";
691 void CoordinateConversionService::setDatum(
693 const char* datumCode )
708 strcpy( coordinateSystemState[direction].datumCode, datumCode );
711 datumLibraryImplementation->
datumIndex( datumCode, &datumIndex );
712 coordinateSystemState[direction].datumIndex = datumIndex;
716 void CoordinateConversionService::setCoordinateSystem(
730 coordinateSystemState[direction].coordinateSystem = 0;
735 coordinateSystemState[direction].coordinateType =
737 coordinateSystemState[direction].parameters.mapProjection6Parameters =
739 *dynamic_cast< MapProjection6Parameters* >( parameters ) );
742 coordinateSystemState[direction].coordinateType =
744 coordinateSystemState[direction].parameters.mapProjection4Parameters =
746 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
750 coordinateSystemState[direction].parameters.mapProjection4Parameters =
752 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
755 coordinateSystemState[direction].coordinateType =
757 coordinateSystemState[direction].parameters.coordinateSystemParameters =
759 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
763 coordinateSystemState[direction].parameters.mapProjection4Parameters =
765 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
768 coordinateSystemState[direction].coordinateType =
770 coordinateSystemState[direction].parameters.mapProjection4Parameters =
772 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
776 coordinateSystemState[direction].parameters.mapProjection3Parameters =
778 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
782 coordinateSystemState[direction].parameters.mapProjection3Parameters =
784 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
787 coordinateSystemState[direction].coordinateType =
789 coordinateSystemState[direction].parameters.equidistantCylindricalParameters =
791 *dynamic_cast< EquidistantCylindricalParameters* >( parameters ) );
794 coordinateSystemState[direction].coordinateType =
796 coordinateSystemState[direction].parameters.coordinateSystemParameters =
798 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
801 coordinateSystemState[direction].coordinateType =
803 coordinateSystemState[direction].parameters.coordinateSystemParameters =
805 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
808 coordinateSystemState[direction].coordinateType =
810 coordinateSystemState[direction].parameters.geodeticParameters =
812 *dynamic_cast< GeodeticParameters* >( parameters ) );
816 coordinateSystemState[direction].parameters.coordinateSystemParameters =
818 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
821 coordinateSystemState[direction].coordinateType =
823 coordinateSystemState[direction].parameters.coordinateSystemParameters =
825 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
828 coordinateSystemState[direction].coordinateType =
830 coordinateSystemState[direction].parameters.mapProjection4Parameters =
832 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
836 coordinateSystemState[direction].parameters.mapProjection5Parameters =
838 *dynamic_cast< MapProjection5Parameters* >( parameters ) );
841 coordinateSystemState[direction].coordinateType =
843 coordinateSystemState[direction].parameters.mapProjection6Parameters =
845 *dynamic_cast< MapProjection6Parameters* >( parameters ) );
848 coordinateSystemState[direction].coordinateType =
850 coordinateSystemState[direction].parameters.localCartesianParameters =
852 *dynamic_cast< LocalCartesianParameters* >( parameters ) );
855 coordinateSystemState[direction].coordinateType =
857 coordinateSystemState[direction].parameters.localCartesianParameters =
859 *dynamic_cast< LocalCartesianParameters* >( parameters ) );
862 coordinateSystemState[direction].coordinateType =
864 coordinateSystemState[direction].parameters.mercatorStandardParallelParameters =
866 *dynamic_cast< MercatorStandardParallelParameters* >( parameters ));
869 coordinateSystemState[direction].coordinateType =
871 coordinateSystemState[direction].parameters.mercatorScaleFactorParameters =
873 *dynamic_cast< MercatorScaleFactorParameters* >( parameters ) );
876 coordinateSystemState[direction].coordinateType =
878 coordinateSystemState[direction].parameters.coordinateSystemParameters =
880 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
884 coordinateSystemState[direction].parameters.mapProjection3Parameters =
886 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
889 coordinateSystemState[direction].coordinateType =
891 coordinateSystemState[direction].parameters.mapProjection3Parameters =
893 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
896 coordinateSystemState[direction].coordinateType =
898 coordinateSystemState[direction].parameters.coordinateSystemParameters =
900 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
904 coordinateSystemState[direction].parameters.neysParameters =
905 new NeysParameters( *dynamic_cast< NeysParameters* >( parameters ) );
908 coordinateSystemState[direction].coordinateType =
910 coordinateSystemState[direction].parameters.obliqueMercatorParameters =
912 *dynamic_cast< ObliqueMercatorParameters* >( parameters ) );
915 coordinateSystemState[direction].coordinateType =
917 coordinateSystemState[direction].parameters.mapProjection4Parameters =
919 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
922 coordinateSystemState[direction].coordinateType =
924 coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters =
926 *dynamic_cast< PolarStereographicStandardParallelParameters* >(
930 coordinateSystemState[direction].coordinateType =
932 coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters =
934 *dynamic_cast< PolarStereographicScaleFactorParameters* >( parameters ) );
937 coordinateSystemState[direction].coordinateType =
939 coordinateSystemState[direction].parameters.mapProjection4Parameters =
941 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
944 coordinateSystemState[direction].coordinateType =
946 coordinateSystemState[direction].parameters.mapProjection3Parameters =
948 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
951 coordinateSystemState[direction].coordinateType =
953 coordinateSystemState[direction].parameters.mapProjection4Parameters =
955 *dynamic_cast< MapProjection4Parameters* >( parameters ) );
958 coordinateSystemState[direction].coordinateType =
960 coordinateSystemState[direction].parameters.mapProjection5Parameters =
962 *dynamic_cast< MapProjection5Parameters* >( parameters ) );
965 coordinateSystemState[direction].coordinateType =
967 coordinateSystemState[direction].parameters.mapProjection5Parameters =
969 *dynamic_cast< MapProjection5Parameters* >( parameters ) );
972 coordinateSystemState[direction].coordinateType =
974 coordinateSystemState[direction].parameters.coordinateSystemParameters =
976 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
979 coordinateSystemState[direction].coordinateType =
981 coordinateSystemState[direction].parameters.utmParameters =
982 new UTMParameters( *dynamic_cast< UTMParameters* >( parameters ) );
985 coordinateSystemState[direction].coordinateType =
987 coordinateSystemState[direction].parameters.coordinateSystemParameters =
989 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
992 coordinateSystemState[direction].coordinateType =
994 coordinateSystemState[direction].parameters.mapProjection3Parameters =
996 *dynamic_cast< MapProjection3Parameters* >( parameters ) );
999 coordinateSystemState[direction].coordinateType =
1001 coordinateSystemState[direction].parameters.coordinateSystemParameters =
1003 *dynamic_cast< CoordinateSystemParameters* >( parameters ) );
1009 setParameters( direction );
1012 void CoordinateConversionService::setParameters(
1024 Coordinate_State_Row* row = &coordinateSystemState[direction];
1026 char ellipsoidCode[3];
1027 long ellipsoidIndex;
1028 double semiMajorAxis;
1032 row->datumIndex, ellipsoidCode );
1035 ellipsoidCode, &ellipsoidIndex );
1038 ellipsoidIndex, &semiMajorAxis, &flattening );
1040 switch( coordinateSystemState[direction].coordinateType )
1045 row->parameters.mapProjection6Parameters;
1047 coordinateSystemState[direction].coordinateSystem =
1049 semiMajorAxis, flattening,
1061 row->parameters.mapProjection4Parameters;
1063 coordinateSystemState[direction].coordinateSystem =
1065 semiMajorAxis, flattening,
1076 coordinateSystemState[direction].coordinateSystem =
new Bonne(
1077 semiMajorAxis, flattening,
1086 coordinateSystemState[direction].coordinateSystem =
1094 row->parameters.mapProjection4Parameters;
1096 coordinateSystemState[direction].coordinateSystem =
new Cassini(
1097 semiMajorAxis, flattening,
1107 row->parameters.mapProjection4Parameters;
1109 coordinateSystemState[direction].coordinateSystem =
1111 semiMajorAxis, flattening,
1121 row->parameters.mapProjection3Parameters;
1123 coordinateSystemState[direction].coordinateSystem =
new Eckert4(
1124 semiMajorAxis, flattening,
1133 row->parameters.mapProjection3Parameters;
1135 coordinateSystemState[direction].coordinateSystem =
new Eckert6(
1136 semiMajorAxis, flattening,
1145 row->parameters.equidistantCylindricalParameters;
1147 coordinateSystemState[direction].coordinateSystem =
1149 semiMajorAxis,flattening,
1158 coordinateSystemState[direction].coordinateSystem =
1164 coordinateSystemState[direction].coordinateSystem =
1165 new Spherical( semiMajorAxis, flattening );
1169 coordinateSystemState[direction].coordinateSystem = 0;
1172 coordinateSystemState[direction].coordinateSystem =
new GEOREF();
1175 coordinateSystemState[direction].coordinateSystem =
new GARS();
1180 row->parameters.mapProjection4Parameters;
1182 coordinateSystemState[direction].coordinateSystem =
new Gnomonic(
1183 semiMajorAxis, flattening,
1194 coordinateSystemState[direction].coordinateSystem =
1196 semiMajorAxis, flattening,
1207 row->parameters.mapProjection6Parameters;
1209 coordinateSystemState[direction].coordinateSystem =
1211 semiMajorAxis, flattening,
1223 row->parameters.localCartesianParameters;
1225 coordinateSystemState[direction].coordinateSystem =
new LocalCartesian(
1226 semiMajorAxis, flattening,
1236 row->parameters.localCartesianParameters;
1238 coordinateSystemState[direction].coordinateSystem =
new LocalSpherical(
1239 semiMajorAxis, flattening,
1249 row->parameters.mercatorStandardParallelParameters;
1251 coordinateSystemState[direction].coordinateSystem =
new Mercator(
1252 semiMajorAxis, flattening,
1266 row->parameters.mercatorScaleFactorParameters;
1268 coordinateSystemState[direction].coordinateSystem =
new Mercator(
1269 semiMajorAxis, flattening,
1279 coordinateSystemState[direction].coordinateSystem =
new MGRS(
1280 semiMajorAxis, flattening, ellipsoidCode );
1287 row->parameters.mapProjection3Parameters;
1289 coordinateSystemState[direction].coordinateSystem =
1291 semiMajorAxis, flattening,
1300 row->parameters.mapProjection3Parameters;
1302 coordinateSystemState[direction].coordinateSystem =
new Mollweide(
1303 semiMajorAxis,flattening,
1311 coordinateSystemState[direction].coordinateSystem =
1312 new NZMG( ellipsoidCode );
1320 coordinateSystemState[direction].coordinateSystem =
new Neys(
1321 semiMajorAxis, flattening,
1332 row->parameters.obliqueMercatorParameters;
1334 coordinateSystemState[direction].coordinateSystem =
new ObliqueMercator(
1335 semiMajorAxis, flattening,
1349 row->parameters.mapProjection4Parameters;
1351 coordinateSystemState[direction].coordinateSystem =
new Orthographic(
1352 semiMajorAxis, flattening,
1362 row->parameters.polarStereographicStandardParallelParameters;
1364 coordinateSystemState[direction].coordinateSystem =
1366 semiMajorAxis, flattening,
1377 row->parameters.polarStereographicScaleFactorParameters;
1379 coordinateSystemState[direction].coordinateSystem =
1381 semiMajorAxis, flattening,
1392 row->parameters.mapProjection4Parameters;
1394 coordinateSystemState[direction].coordinateSystem =
new Polyconic(
1395 semiMajorAxis, flattening,
1405 row->parameters.mapProjection3Parameters;
1407 coordinateSystemState[direction].coordinateSystem =
new Sinusoidal(
1408 semiMajorAxis, flattening,
1417 row->parameters.mapProjection4Parameters;
1419 coordinateSystemState[direction].coordinateSystem =
new Stereographic(
1420 semiMajorAxis, flattening,
1430 row->parameters.mapProjection5Parameters;
1432 coordinateSystemState[direction].coordinateSystem =
1434 semiMajorAxis, flattening,
1445 row->parameters.mapProjection5Parameters;
1447 coordinateSystemState[direction].coordinateSystem =
1449 semiMajorAxis, flattening,
1460 coordinateSystemState[direction].coordinateSystem =
new UPS(
1461 semiMajorAxis, flattening );
1479 coordinateSystemState[direction].coordinateSystem =
new UTM(
1480 semiMajorAxis, flattening, ellipsoidCode, param->
zone() );
1483 coordinateSystemState[direction].coordinateSystem =
new UTM(
1484 semiMajorAxis, flattening, ellipsoidCode, 0 );
1490 coordinateSystemState[direction].coordinateSystem =
new USNG(
1491 semiMajorAxis, flattening, ellipsoidCode );
1498 row->parameters.mapProjection3Parameters;
1500 coordinateSystemState[direction].coordinateSystem =
new VanDerGrinten(
1501 semiMajorAxis, flattening,
1509 coordinateSystemState[direction].coordinateSystem =
1519 void CoordinateConversionService::deleteCoordinateSystem(
1529 switch( coordinateSystemState[direction].coordinateType )
1532 if( coordinateSystemState[direction].parameters.mapProjection6Parameters )
1534 delete coordinateSystemState[direction].parameters.mapProjection6Parameters;
1535 coordinateSystemState[direction].parameters.mapProjection6Parameters = 0;
1537 if( coordinateSystemState[direction].coordinateSystem )
1540 coordinateSystemState[direction].coordinateSystem = 0;
1544 if( coordinateSystemState[direction].parameters.mapProjection6Parameters )
1546 delete coordinateSystemState[direction].parameters.mapProjection6Parameters;
1547 coordinateSystemState[direction].parameters.mapProjection6Parameters = 0;
1549 if( coordinateSystemState[direction].coordinateSystem )
1552 coordinateSystemState[direction].coordinateSystem = 0;
1556 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1558 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1559 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1561 if( coordinateSystemState[direction].coordinateSystem )
1564 coordinateSystemState[direction].coordinateSystem = 0;
1568 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1570 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1571 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1573 if( coordinateSystemState[direction].coordinateSystem )
1575 delete ((
Bonne*)(coordinateSystemState[direction].coordinateSystem));
1576 coordinateSystemState[direction].coordinateSystem = 0;
1580 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1582 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1583 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1585 if( coordinateSystemState[direction].coordinateSystem )
1587 delete ((
Cassini*)(coordinateSystemState[direction].coordinateSystem));
1588 coordinateSystemState[direction].coordinateSystem = 0;
1592 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1594 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1595 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1597 if( coordinateSystemState[direction].coordinateSystem )
1600 coordinateSystemState[direction].coordinateSystem = 0;
1604 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1606 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1607 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1609 if( coordinateSystemState[direction].coordinateSystem )
1611 delete ((
Gnomonic*)(coordinateSystemState[direction].coordinateSystem));
1612 coordinateSystemState[direction].coordinateSystem = 0;
1616 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1618 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1619 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1621 if( coordinateSystemState[direction].coordinateSystem )
1623 delete ((
Orthographic*)(coordinateSystemState[direction].coordinateSystem));
1624 coordinateSystemState[direction].coordinateSystem = 0;
1628 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1630 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1631 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1633 if( coordinateSystemState[direction].coordinateSystem )
1635 delete ((
Polyconic*)(coordinateSystemState[direction].coordinateSystem));
1636 coordinateSystemState[direction].coordinateSystem = 0;
1640 if( coordinateSystemState[direction].parameters.mapProjection4Parameters )
1642 delete coordinateSystemState[direction].parameters.mapProjection4Parameters;
1643 coordinateSystemState[direction].parameters.mapProjection4Parameters = 0;
1645 if( coordinateSystemState[direction].coordinateSystem )
1647 delete ((
Stereographic*)(coordinateSystemState[direction].coordinateSystem));
1648 coordinateSystemState[direction].coordinateSystem = 0;
1652 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1654 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1655 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1657 if( coordinateSystemState[direction].coordinateSystem )
1660 coordinateSystemState[direction].coordinateSystem = 0;
1664 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1666 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1667 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1669 if( coordinateSystemState[direction].coordinateSystem )
1671 delete ((
Eckert4*)(coordinateSystemState[direction].coordinateSystem));
1672 coordinateSystemState[direction].coordinateSystem = 0;
1676 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1678 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1679 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1681 if( coordinateSystemState[direction].coordinateSystem )
1683 delete ((
Eckert6*)(coordinateSystemState[direction].coordinateSystem));
1684 coordinateSystemState[direction].coordinateSystem = 0;
1688 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1690 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1691 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1693 if( coordinateSystemState[direction].coordinateSystem )
1695 delete ((
MillerCylindrical*)(coordinateSystemState[direction].coordinateSystem));
1696 coordinateSystemState[direction].coordinateSystem = 0;
1700 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1702 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1703 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1705 if( coordinateSystemState[direction].coordinateSystem )
1707 delete ((
Mollweide*)(coordinateSystemState[direction].coordinateSystem));
1708 coordinateSystemState[direction].coordinateSystem = 0;
1712 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1714 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1715 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1717 if( coordinateSystemState[direction].coordinateSystem )
1719 delete ((
Sinusoidal*)(coordinateSystemState[direction].coordinateSystem));
1720 coordinateSystemState[direction].coordinateSystem = 0;
1724 if( coordinateSystemState[direction].parameters.mapProjection3Parameters )
1726 delete coordinateSystemState[direction].parameters.mapProjection3Parameters;
1727 coordinateSystemState[direction].parameters.mapProjection3Parameters = 0;
1729 if( coordinateSystemState[direction].coordinateSystem )
1731 delete ((
VanDerGrinten*)(coordinateSystemState[direction].coordinateSystem));
1732 coordinateSystemState[direction].coordinateSystem = 0;
1736 if( coordinateSystemState[direction].parameters.equidistantCylindricalParameters )
1738 delete coordinateSystemState[direction].parameters.equidistantCylindricalParameters;
1739 coordinateSystemState[direction].parameters.equidistantCylindricalParameters = 0;
1741 if( coordinateSystemState[direction].coordinateSystem )
1744 coordinateSystemState[direction].coordinateSystem = 0;
1748 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1750 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1751 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1753 if( coordinateSystemState[direction].coordinateSystem )
1755 delete ((
Geocentric*)(coordinateSystemState[direction].coordinateSystem));
1756 coordinateSystemState[direction].coordinateSystem = 0;
1760 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1762 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1763 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1765 if( coordinateSystemState[direction].coordinateSystem )
1767 delete ((
Spherical*)(coordinateSystemState[direction].coordinateSystem));
1768 coordinateSystemState[direction].coordinateSystem = 0;
1772 if( coordinateSystemState[direction].parameters.geodeticParameters )
1774 delete coordinateSystemState[direction].parameters.geodeticParameters;
1775 coordinateSystemState[direction].parameters.geodeticParameters = 0;
1779 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1781 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1782 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1784 if( coordinateSystemState[direction].coordinateSystem )
1786 delete ((
GEOREF*)(coordinateSystemState[direction].coordinateSystem));
1787 coordinateSystemState[direction].coordinateSystem = 0;
1791 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1793 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1794 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1796 if( coordinateSystemState[direction].coordinateSystem )
1798 delete ((
GARS*)(coordinateSystemState[direction].coordinateSystem));
1799 coordinateSystemState[direction].coordinateSystem = 0;
1803 if( coordinateSystemState[direction].parameters.mapProjection5Parameters )
1805 delete coordinateSystemState[direction].parameters.mapProjection5Parameters;
1806 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
1808 if( coordinateSystemState[direction].coordinateSystem )
1811 coordinateSystemState[direction].coordinateSystem = 0;
1815 if( coordinateSystemState[direction].parameters.mapProjection5Parameters )
1817 delete coordinateSystemState[direction].parameters.mapProjection5Parameters;
1818 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
1820 if( coordinateSystemState[direction].coordinateSystem )
1823 coordinateSystemState[direction].coordinateSystem = 0;
1827 if( coordinateSystemState[direction].parameters.mapProjection5Parameters )
1829 delete coordinateSystemState[direction].parameters.mapProjection5Parameters;
1830 coordinateSystemState[direction].parameters.mapProjection5Parameters = 0;
1832 if( coordinateSystemState[direction].coordinateSystem )
1835 coordinateSystemState[direction].coordinateSystem = 0;
1839 if( coordinateSystemState[direction].parameters.localCartesianParameters )
1841 delete coordinateSystemState[direction].parameters.localCartesianParameters;
1842 coordinateSystemState[direction].parameters.localCartesianParameters = 0;
1844 if( coordinateSystemState[direction].coordinateSystem )
1846 delete ((
LocalCartesian*)(coordinateSystemState[direction].coordinateSystem));
1847 coordinateSystemState[direction].coordinateSystem = 0;
1851 if( coordinateSystemState[direction].parameters.localCartesianParameters )
1853 delete coordinateSystemState[direction].parameters.localCartesianParameters;
1854 coordinateSystemState[direction].parameters.localCartesianParameters = 0;
1856 if( coordinateSystemState[direction].coordinateSystem )
1858 delete ((
LocalSpherical*)(coordinateSystemState[direction].coordinateSystem));
1859 coordinateSystemState[direction].coordinateSystem = 0;
1863 if( coordinateSystemState[direction].parameters.mercatorStandardParallelParameters )
1865 delete coordinateSystemState[direction].parameters.mercatorStandardParallelParameters;
1866 coordinateSystemState[direction].parameters.mercatorStandardParallelParameters = 0;
1868 if( coordinateSystemState[direction].coordinateSystem )
1870 delete ((
Mercator*)(coordinateSystemState[direction].coordinateSystem));
1871 coordinateSystemState[direction].coordinateSystem = 0;
1875 if( coordinateSystemState[direction].parameters.mercatorScaleFactorParameters )
1877 delete coordinateSystemState[direction].parameters.mercatorScaleFactorParameters;
1878 coordinateSystemState[direction].parameters.mercatorScaleFactorParameters = 0;
1880 if( coordinateSystemState[direction].coordinateSystem )
1882 delete ((
Mercator*)(coordinateSystemState[direction].coordinateSystem));
1883 coordinateSystemState[direction].coordinateSystem = 0;
1887 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1889 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1890 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1892 if( coordinateSystemState[direction].coordinateSystem )
1894 delete ((
MGRS*)(coordinateSystemState[direction].coordinateSystem));
1895 coordinateSystemState[direction].coordinateSystem = 0;
1899 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1901 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1902 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1904 if( coordinateSystemState[direction].coordinateSystem )
1906 delete ((
USNG*)(coordinateSystemState[direction].coordinateSystem));
1907 coordinateSystemState[direction].coordinateSystem = 0;
1911 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1913 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1914 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1916 if( coordinateSystemState[direction].coordinateSystem )
1918 delete ((
NZMG*)(coordinateSystemState[direction].coordinateSystem));
1919 coordinateSystemState[direction].coordinateSystem = 0;
1923 if( coordinateSystemState[direction].parameters.neysParameters )
1925 delete coordinateSystemState[direction].parameters.neysParameters;
1926 coordinateSystemState[direction].parameters.neysParameters = 0;
1928 if( coordinateSystemState[direction].coordinateSystem )
1930 delete ((
Neys*)(coordinateSystemState[direction].coordinateSystem));
1931 coordinateSystemState[direction].coordinateSystem = 0;
1935 if( coordinateSystemState[direction].parameters.obliqueMercatorParameters )
1937 delete coordinateSystemState[direction].parameters.obliqueMercatorParameters;
1938 coordinateSystemState[direction].parameters.obliqueMercatorParameters = 0;
1940 if( coordinateSystemState[direction].coordinateSystem )
1942 delete ((
ObliqueMercator*)(coordinateSystemState[direction].coordinateSystem));
1943 coordinateSystemState[direction].coordinateSystem = 0;
1947 if( coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters )
1949 delete coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters;
1950 coordinateSystemState[direction].parameters.polarStereographicStandardParallelParameters = 0;
1952 if( coordinateSystemState[direction].coordinateSystem )
1955 coordinateSystemState[direction].coordinateSystem = 0;
1959 if( coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters )
1961 delete coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters;
1962 coordinateSystemState[direction].parameters.polarStereographicScaleFactorParameters = 0;
1964 if( coordinateSystemState[direction].coordinateSystem )
1967 coordinateSystemState[direction].coordinateSystem = 0;
1971 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1973 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1974 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
1976 if( coordinateSystemState[direction].coordinateSystem )
1978 delete ((
UPS*)(coordinateSystemState[direction].coordinateSystem));
1979 coordinateSystemState[direction].coordinateSystem = 0;
1983 if( coordinateSystemState[direction].parameters.utmParameters )
1985 delete coordinateSystemState[direction].parameters.utmParameters;
1986 coordinateSystemState[direction].parameters.utmParameters = 0;
1988 if( coordinateSystemState[direction].coordinateSystem )
1990 delete ((
UTM*)(coordinateSystemState[direction].coordinateSystem));
1991 coordinateSystemState[direction].coordinateSystem = 0;
1995 if( coordinateSystemState[direction].parameters.coordinateSystemParameters )
1997 delete coordinateSystemState[direction].parameters.coordinateSystemParameters;
1998 coordinateSystemState[direction].parameters.coordinateSystemParameters = 0;
2000 if( coordinateSystemState[direction].coordinateSystem )
2002 delete ((
WebMercator*)(coordinateSystemState[direction].coordinateSystem));
2003 coordinateSystemState[direction].coordinateSystem = 0;
2012 void CoordinateConversionService::copyParameters(
2015 Parameters parameters )
2027 initCoordinateSystemState( direction );
2029 switch( coordinateType )
2033 setCoordinateSystem( direction, parameters.mapProjection6Parameters );
2043 setCoordinateSystem( direction, parameters.mapProjection4Parameters );
2051 setCoordinateSystem( direction, parameters.mapProjection3Parameters );
2054 setCoordinateSystem( direction, parameters.equidistantCylindricalParameters );
2057 setCoordinateSystem( direction, parameters.geodeticParameters );
2062 setCoordinateSystem( direction, parameters.mapProjection5Parameters );
2066 setCoordinateSystem( direction, parameters.localCartesianParameters );
2069 setCoordinateSystem( direction, parameters.mercatorStandardParallelParameters );
2072 setCoordinateSystem( direction, parameters.mercatorScaleFactorParameters );
2075 setCoordinateSystem( direction, parameters.neysParameters );
2078 setCoordinateSystem( direction, parameters.obliqueMercatorParameters );
2081 setCoordinateSystem( direction, parameters.polarStereographicStandardParallelParameters );
2084 setCoordinateSystem( direction, parameters.polarStereographicScaleFactorParameters );
2087 setCoordinateSystem( direction, parameters.utmParameters );
2099 setCoordinateSystem( direction, parameters.coordinateSystemParameters );
2107 void CoordinateConversionService::convert(
2131 bool special =
false;
2133 Coordinate_State_Row* source = &coordinateSystemState[sourceDirection];
2134 Coordinate_State_Row* target = &coordinateSystemState[targetDirection];
2136 char sourceWarningMessage[256] =
"";
2137 char targetWarningMessage[256] =
"";
2153 if (source->datumIndex == target->datumIndex)
2165 target->coordinateSystem))->convertFromGeocentric(
2169 delete cartesianCoordinates;
2180 ((
LocalCartesian*)(source->coordinateSystem))->convertToGeocentric(
2184 delete cartesianCoordinates;
2188 (target->parameters.utmParameters->override() == 0))
2196 ((
MGRS*)(source->coordinateSystem))->convertToUTM( coordinates );
2199 delete utmCoordinates;
2208 UPSCoordinates* upsCoordinates = ((
MGRS*)(source->coordinateSystem))->convertToUPS( coordinates );
2210 delete upsCoordinates;
2218 if (temp_precision < 0)
2220 if (temp_precision > 5)
2225 MGRSorUSNGCoordinates* mgrsOrUSNGCoordinates = ((
MGRS*)(target->coordinateSystem))->convertFromUTM( coordinates, temp_precision );
2227 delete mgrsOrUSNGCoordinates;
2234 if (temp_precision < 0)
2236 if (temp_precision > 5)
2241 MGRSorUSNGCoordinates* mgrsOrUSNGCoordinates = ((
MGRS*)(target->coordinateSystem))->convertFromUPS( coordinates, temp_precision );
2243 delete mgrsOrUSNGCoordinates;
2252 UTMCoordinates* utmCoordinates = ((
USNG*)(source->coordinateSystem))->convertToUTM( coordinates );
2254 delete utmCoordinates;
2262 UPSCoordinates* upsCoordinates = ((
USNG*)(source->coordinateSystem))->convertToUPS( coordinates );
2264 delete upsCoordinates;
2271 if (temp_precision < 0)
2273 if (temp_precision > 5)
2278 MGRSorUSNGCoordinates* mgrsOrUSNGCoordinates = ((
USNG*)(target->coordinateSystem))->convertFromUTM( coordinates, temp_precision );
2280 delete mgrsOrUSNGCoordinates;
2290 if (temp_precision < 0)
2292 if (temp_precision > 5)
2296 sourceCoordinates );
2299 ((
USNG*)(target->coordinateSystem))->convertFromUPS(
2300 coordinates, temp_precision );
2303 delete mgrsOrUSNGCoordinates;
2309 source->parameters.mapProjection5Parameters;
2320 if (temp_precision < 0)
2322 if (temp_precision > 5)
2329 convertFromTransverseMercator( coordinates, temp_precision );
2332 delete bngCoordinates;
2341 target->parameters.mapProjection5Parameters;
2356 source->coordinateSystem))->convertToTransverseMercator(
2360 mapProjectionCoordinates );
2361 delete mapProjectionCoordinates;
2372 Coordinate_System_Table[source->coordinateType].Name,
2382 _convertedGeodetic = convertSourceToGeodetic(
2383 sourceDirection, sourceCoordinates, sourceWarningMessage );
2393 input_height_type = source->parameters.geodeticParameters->heightType();
2403 output_height_type = target->parameters.geodeticParameters->heightType();
2412 if ((source->datumIndex == target->datumIndex) &&
2413 ((input_height_type == output_height_type) ||
2426 if(source->datumIndex != WGS84_datum_index &&
2427 target->datumIndex != WGS84_datum_index)
2433 source->datumIndex, _wgs84Geodetic->
longitude(),
2434 _wgs84Geodetic->
latitude(), &valid );
2442 target->datumIndex, _wgs84Geodetic->
longitude(),
2443 _wgs84Geodetic->
latitude(), &valid );
2452 if (source->datumIndex != WGS84_datum_index)
2455 source->datumIndex, _convertedGeodetic );
2457 switch(input_height_type)
2476 long sourceValid = 0;
2479 source->datumIndex, _wgs84Geodetic->
longitude(),
2480 _wgs84Geodetic->
latitude(), &sourceValid );
2493 if(input_height_type != output_height_type)
2498 switch(input_height_type)
2503 _wgs84Geodetic->
height(), &tempHeight);
2508 _wgs84Geodetic->
height(), &tempHeight);
2513 _wgs84Geodetic->
height(), &tempHeight );
2518 _wgs84Geodetic->
height(), &tempHeight );
2523 _wgs84Geodetic->
height(), &tempHeight );
2528 _wgs84Geodetic->
height(), &tempHeight );
2532 tempHeight = _wgs84Geodetic->
height();
2536 double correctedHeight;
2539 switch(output_height_type)
2544 tempHeight, &correctedHeight );
2549 tempHeight, &correctedHeight );
2554 tempHeight, &correctedHeight );
2559 tempHeight, &correctedHeight );
2564 tempHeight, &correctedHeight );
2569 tempHeight, &correctedHeight );
2573 correctedHeight = tempHeight;
2578 _wgs84Geodetic->
setHeight( correctedHeight );
2581 if (target->datumIndex != WGS84_datum_index)
2585 _wgs84Geodetic, target->datumIndex );
2587 switch(output_height_type)
2606 long targetValid = 0;
2609 target->datumIndex, _wgs84Geodetic->
longitude(),
2610 _wgs84Geodetic->
latitude(), &targetValid );
2625 if( strlen( sourceWarningMessage ) > 0 ||
2626 strlen( targetWarningMessage ) > 0 )
2627 targetAccuracy.
set(-1.0, -1.0, -1.0);
2640 source->datumIndex, target->datumIndex,
2642 _wgs84Geodetic->
latitude(), sourceAccuracy, prec );
2649 delete _targetAccuracy;
2656 convertGeodeticToTarget(
2657 targetDirection, _shiftedGeodetic,
2658 targetCoordinates, targetWarningMessage );
2661 char warningMessage[500] =
"";
2662 bool warning =
false;
2663 if( strlen( sourceWarningMessage ) > 0 )
2665 strcpy( warningMessage,
"Input " );
2666 strcat( warningMessage,
2667 Coordinate_System_Table[source->coordinateType].Name );
2668 strcat( warningMessage,
": \n" );
2669 strcat( warningMessage, sourceWarningMessage );
2673 if( strlen( targetWarningMessage ) > 0 )
2675 if( strlen( warningMessage ) > 0 )
2676 strcat( warningMessage,
"\nOutput " );
2678 strcpy( warningMessage,
"Output " );
2680 strcat( warningMessage,
2681 Coordinate_System_Table[target->coordinateType].Name );
2682 strcat( warningMessage,
": \n" );
2683 strcat( warningMessage, targetWarningMessage );
2689 warningMessage[strlen( warningMessage )] =
'\0';
2696 targetAccuracy.
set(-1.0, -1.0, -1.0);
2700 delete _convertedGeodetic;
2701 delete _shiftedGeodetic;
2702 delete _wgs84Geodetic;
2708 delete _convertedGeodetic;
2709 delete _shiftedGeodetic;
2710 delete _wgs84Geodetic;
2718 char* sourceWarningMessage )
2720 Coordinate_State_Row* source = &coordinateSystemState[sourceDirection];
2727 switch (source->coordinateType)
2734 return ((
Geocentric*)(source->coordinateSystem))->convertToGeodetic(
2742 return ((
Spherical*)(source->coordinateSystem))->convertToGeodetic(
2749 *dynamic_cast< GeodeticCoordinates* >( sourceCoordinates ) );
2754 return _convertedGeodetic;
2759 sourceCoordinates );
2761 return ((
GEOREF*)(source->coordinateSystem))->convertToGeodetic(
2770 source->coordinateSystem))->convertToGeodetic( coordinates );
2778 source->coordinateSystem))->convertToGeodetic( coordinates );
2784 return ((
BritishNationalGrid*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2791 return ((
Bonne*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2799 ((
Cassini*)(source->coordinateSystem))->convertToGeodetic(
2803 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2805 return _convertedGeodetic;
2813 source->coordinateSystem))->convertToGeodetic( coordinates);
2820 return ((
Eckert4*)(source->coordinateSystem))->convertToGeodetic(
2828 return ((
Eckert6*)(source->coordinateSystem))->convertToGeodetic(
2837 source->coordinateSystem))->convertToGeodetic( coordinates );
2843 return ((
GARS*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2849 return ((
Gnomonic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2867 return ((
LocalCartesian*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2873 return ((
LocalSpherical*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2881 return ((
Mercator*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2887 GeodeticCoordinates* _convertedGeodetic = ((
MGRS*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2890 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2892 return _convertedGeodetic;
2898 return ((
MillerCylindrical*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2904 return ((
Mollweide*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2910 return ((
Neys*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2916 return ((
NZMG*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2925 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2927 return _convertedGeodetic;
2933 return ((
Orthographic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2940 return ((
PolarStereographic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2946 return ((
Polyconic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2952 return ((
Sinusoidal*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2958 return ((
Stereographic*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2973 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2975 return _convertedGeodetic;
2981 return ((
UPS*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2987 GeodeticCoordinates* _convertedGeodetic = ((
USNG*)(source->coordinateSystem))->convertToGeodetic( coordinates );
2990 strcat( sourceWarningMessage, _convertedGeodetic->
warningMessage() );
2992 return _convertedGeodetic;
2998 return ((
UTM*)(source->coordinateSystem))->convertToGeodetic( coordinates );
3004 return ((
VanDerGrinten*)(source->coordinateSystem))->convertToGeodetic( coordinates );
3010 return ((
WebMercator*)(source->coordinateSystem))->convertToGeodetic( coordinates );
3017 "Input ", Coordinate_System_Table[source->coordinateType].Name,
3024 void CoordinateConversionService::convertGeodeticToTarget(
3028 char* targetWarningMessage )
3030 Coordinate_State_Row* target = &coordinateSystemState[targetDirection];
3037 switch (target->coordinateType)
3042 ((
Geocentric*)(target->coordinateSystem))->convertFromGeodetic(
3046 coordinates->
x(), coordinates->
y(), coordinates->
z() );
3055 ((
Spherical*)(target->coordinateSystem))->convertFromGeodetic(
3068 ( dynamic_cast< GeodeticCoordinates& >( targetCoordinates ) ).set(
3071 ( dynamic_cast< GeodeticCoordinates& >( targetCoordinates ) ).set(
3073 _shiftedGeodetic->
height() );
3081 targetCoordinates ) ).precision();
3082 if (temp_precision < 0)
3084 if (temp_precision > 5)
3088 ((
GEOREF*)(target->coordinateSystem))->convertFromGeodetic(
3089 _shiftedGeodetic, temp_precision );
3102 target->coordinateSystem))->convertFromGeodetic(
3116 target->coordinateSystem))->convertFromGeodetic(
3129 (
dynamic_cast< BNGCoordinates&
>(targetCoordinates ) ).precision();
3130 if (temp_precision < 0)
3132 if (temp_precision > 5)
3137 target->coordinateSystem))->convertFromGeodetic(
3138 _shiftedGeodetic, temp_precision );
3150 ((
Bonne*)(target->coordinateSystem))->convertFromGeodetic(
3163 ((
Cassini*)(target->coordinateSystem))->convertFromGeodetic(
3172 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3183 target->coordinateSystem))->convertFromGeodetic(
3196 ((
Eckert4*)(target->coordinateSystem))->convertFromGeodetic(
3209 ((
Eckert6*)(target->coordinateSystem))->convertFromGeodetic(
3223 target->coordinateSystem))->convertFromGeodetic(
3237 if (temp_precision < 0)
3239 if (temp_precision > 5)
3243 ((
GARS*)(target->coordinateSystem))->convertFromGeodetic(
3244 _shiftedGeodetic, temp_precision );
3256 ((
Gnomonic*)(target->coordinateSystem))->convertFromGeodetic(
3270 target->coordinateSystem))->convertFromGeodetic(
3284 target->coordinateSystem))->convertFromGeodetic(
3297 ((
LocalCartesian*)(target->coordinateSystem))->convertFromGeodetic(
3301 coordinates->
x(), coordinates->
y(), coordinates->
z() );
3310 ((
LocalSpherical*)(target->coordinateSystem))->convertFromGeodetic(
3324 ((
Mercator*)(target->coordinateSystem))->convertFromGeodetic(
3338 targetCoordinates ) ).precision();
3340 if (temp_precision < 0)
3342 if (temp_precision > 5)
3345 ((
MGRS*)(target->coordinateSystem))->convertFromGeodetic(
3346 _shiftedGeodetic, temp_precision );
3359 target->coordinateSystem))->convertFromGeodetic(
3372 ((
Mollweide*)(target->coordinateSystem))->convertFromGeodetic(
3385 ((
Neys*)(target->coordinateSystem))->convertFromGeodetic(
3398 ((
NZMG*)(target->coordinateSystem))->convertFromGeodetic(
3420 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3430 ((
Orthographic*)(target->coordinateSystem))->convertFromGeodetic(
3445 target->coordinateSystem))->convertFromGeodetic(
3458 ((
Polyconic*)(target->coordinateSystem))->convertFromGeodetic(
3467 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3477 ((
Sinusoidal*)(target->coordinateSystem))->convertFromGeodetic(
3490 ((
Stereographic*)(target->coordinateSystem))->convertFromGeodetic(
3504 target->coordinateSystem))->convertFromGeodetic(
3513 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3524 target->coordinateSystem))->convertFromGeodetic(
3533 strcat( targetWarningMessage, targetCoordinates.
warningMessage() );
3543 ((
UPS*)(target->coordinateSystem))->convertFromGeodetic(
3559 targetCoordinates ) ).precision();
3560 if (temp_precision < 0)
3562 if (temp_precision > 5)
3566 ((
USNG*)(target->coordinateSystem))->convertFromGeodetic(
3567 _shiftedGeodetic, temp_precision );
3579 ((
UTM*)(target->coordinateSystem))->convertFromGeodetic(
3593 ((
VanDerGrinten*)(target->coordinateSystem))->convertFromGeodetic(
3606 ((
WebMercator*)(target->coordinateSystem))->convertFromGeodetic(
3621 "Output ", Coordinate_System_Table[target->coordinateType].Name,
3627 void CoordinateConversionService::convertCollection(
3628 const std::vector<MSP::CCS::CoordinateTuple*>& sourceCoordinatesCollection,
3629 const std::vector<MSP::CCS::Accuracy*>& sourceAccuracyCollection,
3630 std::vector<MSP::CCS::CoordinateTuple*>& targetCoordinatesCollection,
3631 std::vector<MSP::CCS::Accuracy*>& targetAccuracyCollection )
3643 int num = sourceCoordinatesCollection.size();
3644 int numTargetCoordinates = targetCoordinatesCollection.size();
3645 int numTargetAccuracies = targetAccuracyCollection.size();
3652 for(
int i = 0; i < num; i++ )
3655 Accuracy* _sourceAccuracy = sourceAccuracyCollection[i];
3657 bool targetCoordinateExists =
true;
3658 bool targetAccuracyExists =
true;
3660 if(i < numTargetAccuracies)
3661 _targetAccuracy = targetAccuracyCollection[i];
3665 targetAccuracyExists =
false;
3668 if( _sourceCoordinates && _sourceAccuracy )
3670 switch(targetCoordinateType)
3674 if(i < numTargetCoordinates)
3675 _targetCoordinates = targetCoordinatesCollection[i];
3680 targetCoordinateExists =
false;
3687 sourceCoordinatesCollection[i],
3688 sourceAccuracyCollection[i],
3689 *_targetCoordinates, *_targetAccuracy);
3696 if(!targetCoordinateExists)
3697 targetCoordinatesCollection.push_back(_targetCoordinates);
3702 if(i < numTargetCoordinates)
3703 _targetCoordinates = targetCoordinatesCollection[i];
3708 targetCoordinateExists =
false;
3715 sourceCoordinatesCollection[i],
3716 sourceAccuracyCollection[i],
3717 *_targetCoordinates, *_targetAccuracy);
3724 if(!targetCoordinateExists)
3725 targetCoordinatesCollection.push_back(_targetCoordinates);
3730 if(i < numTargetCoordinates)
3731 _targetCoordinates = targetCoordinatesCollection[i];
3736 targetCoordinateExists =
false;
3743 sourceCoordinatesCollection[i],
3744 sourceAccuracyCollection[i],
3745 *_targetCoordinates, *_targetAccuracy);
3752 if(!targetCoordinateExists)
3753 targetCoordinatesCollection.push_back(_targetCoordinates);
3758 if(i < numTargetCoordinates)
3759 _targetCoordinates = targetCoordinatesCollection[i];
3764 targetCoordinateExists =
false;
3771 sourceCoordinatesCollection[i],
3772 sourceAccuracyCollection[i],
3773 *_targetCoordinates, *_targetAccuracy);
3780 if(!targetCoordinateExists)
3781 targetCoordinatesCollection.push_back(_targetCoordinates);
3786 if(i < numTargetCoordinates)
3787 _targetCoordinates = targetCoordinatesCollection[i];
3792 targetCoordinateExists =
false;
3799 sourceCoordinatesCollection[i],
3800 sourceAccuracyCollection[i],
3801 *_targetCoordinates, *_targetAccuracy);
3808 if(!targetCoordinateExists)
3809 targetCoordinatesCollection.push_back(_targetCoordinates);
3814 if(i < numTargetCoordinates)
3815 _targetCoordinates = targetCoordinatesCollection[i];
3820 targetCoordinateExists =
false;
3827 sourceCoordinatesCollection[i],
3828 sourceAccuracyCollection[i],
3829 *_targetCoordinates, *_targetAccuracy);
3836 if(!targetCoordinateExists)
3837 targetCoordinatesCollection.push_back(_targetCoordinates);
3842 if(i < numTargetCoordinates)
3843 _targetCoordinates = targetCoordinatesCollection[i];
3848 targetCoordinateExists =
false;
3855 sourceCoordinatesCollection[i],
3856 sourceAccuracyCollection[i],
3857 *_targetCoordinates, *_targetAccuracy);
3864 if(!targetCoordinateExists)
3865 targetCoordinatesCollection.push_back(_targetCoordinates);
3870 if(i < numTargetCoordinates)
3871 _targetCoordinates = targetCoordinatesCollection[i];
3876 targetCoordinateExists =
false;
3883 sourceCoordinatesCollection[i],
3884 sourceAccuracyCollection[i],
3885 *_targetCoordinates, *_targetAccuracy);
3892 if(!targetCoordinateExists)
3893 targetCoordinatesCollection.push_back(_targetCoordinates);
3898 if(i < numTargetCoordinates)
3899 _targetCoordinates = targetCoordinatesCollection[i];
3904 targetCoordinateExists =
false;
3911 sourceCoordinatesCollection[i],
3912 sourceAccuracyCollection[i],
3913 *_targetCoordinates, *_targetAccuracy);
3920 if(!targetCoordinateExists)
3921 targetCoordinatesCollection.push_back(_targetCoordinates);
3926 if(i < numTargetCoordinates)
3927 _targetCoordinates = targetCoordinatesCollection[i];
3932 targetCoordinateExists =
false;
3938 sourceCoordinatesCollection[i], sourceAccuracyCollection[i],
3939 *_targetCoordinates, *_targetAccuracy);
3946 if(!targetCoordinateExists)
3947 targetCoordinatesCollection.push_back(_targetCoordinates);
3952 if(i < numTargetCoordinates)
3953 _targetCoordinates = targetCoordinatesCollection[i];
3958 targetCoordinateExists =
false;
3964 sourceCoordinatesCollection[i], sourceAccuracyCollection[i],
3965 *_targetCoordinates, *_targetAccuracy);
3972 if(!targetCoordinateExists)
3973 targetCoordinatesCollection.push_back(_targetCoordinates);
3978 if(i < numTargetCoordinates)
3979 _targetCoordinates = targetCoordinatesCollection[i];
3984 targetCoordinateExists =
false;
3990 sourceCoordinatesCollection[i], sourceAccuracyCollection[i],
3991 *_targetCoordinates, *_targetAccuracy);
3998 if(!targetCoordinateExists)
3999 targetCoordinatesCollection.push_back(_targetCoordinates);
4004 if(i < numTargetCoordinates)
4005 _targetCoordinates = targetCoordinatesCollection[i];
4009 targetCoordinateExists =
false;
4016 sourceCoordinatesCollection[i],
4017 sourceAccuracyCollection[i],
4018 *_targetCoordinates, *_targetAccuracy);
4025 if(!targetCoordinateExists)
4026 targetCoordinatesCollection.push_back(_targetCoordinates);
4031 if(i < numTargetCoordinates)
4032 _targetCoordinates = targetCoordinatesCollection[i];
4037 targetCoordinateExists =
false;
4044 sourceCoordinatesCollection[i],
4045 sourceAccuracyCollection[i],
4046 *_targetCoordinates, *_targetAccuracy);
4053 if(!targetCoordinateExists)
4054 targetCoordinatesCollection.push_back(_targetCoordinates);
4059 if(i < numTargetCoordinates)
4060 _targetCoordinates = targetCoordinatesCollection[i];
4065 targetCoordinateExists =
false;
4072 sourceCoordinatesCollection[i],
4073 sourceAccuracyCollection[i],
4074 *_targetCoordinates, *_targetAccuracy);
4081 if(!targetCoordinateExists)
4082 targetCoordinatesCollection.push_back(_targetCoordinates);
4087 if(i < numTargetCoordinates)
4088 _targetCoordinates = targetCoordinatesCollection[i];
4093 targetCoordinateExists =
false;
4100 sourceCoordinatesCollection[i],
4101 sourceAccuracyCollection[i],
4102 *_targetCoordinates,
4110 if(!targetCoordinateExists)
4111 targetCoordinatesCollection.push_back(_targetCoordinates);
4116 if(i < numTargetCoordinates)
4117 _targetCoordinates = targetCoordinatesCollection[i];
4122 targetCoordinateExists =
false;
4129 sourceCoordinatesCollection[i],
4130 sourceAccuracyCollection[i],
4131 *_targetCoordinates, *_targetAccuracy);
4138 if(!targetCoordinateExists)
4139 targetCoordinatesCollection.push_back(_targetCoordinates);
4144 if(i < numTargetCoordinates)
4145 _targetCoordinates = targetCoordinatesCollection[i];
4150 targetCoordinateExists =
false;
4157 sourceCoordinatesCollection[i],
4158 sourceAccuracyCollection[i],
4159 *_targetCoordinates, *_targetAccuracy);
4166 if(!targetCoordinateExists)
4167 targetCoordinatesCollection.push_back(_targetCoordinates);
4172 if(i < numTargetCoordinates)
4173 _targetCoordinates = targetCoordinatesCollection[i];
4178 targetCoordinateExists =
false;
4185 sourceCoordinatesCollection[i],
4186 sourceAccuracyCollection[i],
4187 *_targetCoordinates, *_targetAccuracy);
4194 if(!targetCoordinateExists)
4195 targetCoordinatesCollection.push_back(_targetCoordinates);
4200 if(i < numTargetCoordinates)
4201 _targetCoordinates = targetCoordinatesCollection[i];
4206 targetCoordinateExists =
false;
4213 sourceCoordinatesCollection[i],
4214 sourceAccuracyCollection[i],
4215 *_targetCoordinates, *_targetAccuracy);
4222 if(!targetCoordinateExists)
4223 targetCoordinatesCollection.push_back(_targetCoordinates);
4228 if(i < numTargetCoordinates)
4229 _targetCoordinates = targetCoordinatesCollection[i];
4234 targetCoordinateExists =
false;
4241 sourceCoordinatesCollection[i],
4242 sourceAccuracyCollection[i],
4243 *_targetCoordinates, *_targetAccuracy);
4250 if(!targetCoordinateExists)
4251 targetCoordinatesCollection.push_back(_targetCoordinates);
4256 if(i < numTargetCoordinates)
4257 _targetCoordinates = targetCoordinatesCollection[i];
4262 targetCoordinateExists =
false;
4269 sourceCoordinatesCollection[i],
4270 sourceAccuracyCollection[i],
4271 *_targetCoordinates, *_targetAccuracy);
4278 if(!targetCoordinateExists)
4279 targetCoordinatesCollection.push_back(_targetCoordinates);
4284 if(i < numTargetCoordinates)
4285 _targetCoordinates = targetCoordinatesCollection[i];
4290 targetCoordinateExists =
false;
4297 sourceCoordinatesCollection[i],
4298 sourceAccuracyCollection[i],
4299 *_targetCoordinates, *_targetAccuracy);
4306 if(!targetCoordinateExists)
4307 targetCoordinatesCollection.push_back(_targetCoordinates);
4312 if(i < numTargetCoordinates)
4313 _targetCoordinates = targetCoordinatesCollection[i];
4318 targetCoordinateExists =
false;
4325 sourceCoordinatesCollection[i],
4326 sourceAccuracyCollection[i],
4327 *_targetCoordinates, *_targetAccuracy);
4334 if(!targetCoordinateExists)
4335 targetCoordinatesCollection.push_back(_targetCoordinates);
4340 if(i < numTargetCoordinates)
4341 _targetCoordinates = targetCoordinatesCollection[i];
4346 targetCoordinateExists =
false;
4353 sourceCoordinatesCollection[i],
4354 sourceAccuracyCollection[i],
4355 *_targetCoordinates, *_targetAccuracy);
4362 if(!targetCoordinateExists)
4363 targetCoordinatesCollection.push_back(_targetCoordinates);
4368 if(i < numTargetCoordinates)
4369 _targetCoordinates = targetCoordinatesCollection[i];
4374 targetCoordinateExists =
false;
4381 sourceCoordinatesCollection[i],
4382 sourceAccuracyCollection[i],
4383 *_targetCoordinates, *_targetAccuracy);
4390 if(!targetCoordinateExists)
4391 targetCoordinatesCollection.push_back(_targetCoordinates);
4396 if(i < numTargetCoordinates)
4397 _targetCoordinates = targetCoordinatesCollection[i];
4402 targetCoordinateExists =
false;
4409 sourceCoordinatesCollection[i],
4410 sourceAccuracyCollection[i],
4411 *_targetCoordinates, *_targetAccuracy);
4418 if(!targetCoordinateExists)
4419 targetCoordinatesCollection.push_back(_targetCoordinates);
4424 if(i < numTargetCoordinates)
4425 _targetCoordinates = targetCoordinatesCollection[i];
4430 targetCoordinateExists =
false;
4437 sourceCoordinatesCollection[i],
4438 sourceAccuracyCollection[i],
4439 *_targetCoordinates, *_targetAccuracy);
4446 if(!targetCoordinateExists)
4447 targetCoordinatesCollection.push_back(_targetCoordinates);
4452 if(i < numTargetCoordinates)
4453 _targetCoordinates = targetCoordinatesCollection[i];
4458 targetCoordinateExists =
false;
4465 sourceCoordinatesCollection[i],
4466 sourceAccuracyCollection[i],
4467 *_targetCoordinates, *_targetAccuracy);
4474 if(!targetCoordinateExists)
4475 targetCoordinatesCollection.push_back(_targetCoordinates);
4480 if(i < numTargetCoordinates)
4481 _targetCoordinates = targetCoordinatesCollection[i];
4486 targetCoordinateExists =
false;
4493 sourceCoordinatesCollection[i],
4494 sourceAccuracyCollection[i],
4495 *_targetCoordinates, *_targetAccuracy);
4502 if(!targetCoordinateExists)
4503 targetCoordinatesCollection.push_back(_targetCoordinates);
4508 if(i < numTargetCoordinates)
4509 _targetCoordinates = targetCoordinatesCollection[i];
4514 targetCoordinateExists =
false;
4521 sourceCoordinatesCollection[i],
4522 sourceAccuracyCollection[i],
4523 *_targetCoordinates, *_targetAccuracy);
4530 if(!targetCoordinateExists)
4531 targetCoordinatesCollection.push_back(_targetCoordinates);
4536 if(i < numTargetCoordinates)
4537 _targetCoordinates = targetCoordinatesCollection[i];
4542 targetCoordinateExists =
false;
4549 sourceCoordinatesCollection[i],
4550 sourceAccuracyCollection[i],
4551 *_targetCoordinates, *_targetAccuracy);
4558 if(!targetCoordinateExists)
4559 targetCoordinatesCollection.push_back(_targetCoordinates);
4564 if(i < numTargetCoordinates)
4565 _targetCoordinates = targetCoordinatesCollection[i];
4570 targetCoordinateExists =
false;
4577 sourceCoordinatesCollection[i],
4578 sourceAccuracyCollection[i],
4579 *_targetCoordinates, *_targetAccuracy);
4586 if(!targetCoordinateExists)
4587 targetCoordinatesCollection.push_back(_targetCoordinates);
4592 if(i < numTargetCoordinates)
4593 _targetCoordinates = targetCoordinatesCollection[i];
4598 targetCoordinateExists =
false;
4605 sourceCoordinatesCollection[i],
4606 sourceAccuracyCollection[i],
4607 *_targetCoordinates, *_targetAccuracy);
4614 if(!targetCoordinateExists)
4615 targetCoordinatesCollection.push_back(_targetCoordinates);
4620 if(i < numTargetCoordinates)
4621 _targetCoordinates = targetCoordinatesCollection[i];
4626 targetCoordinateExists =
false;
4633 sourceCoordinatesCollection[i],
4634 sourceAccuracyCollection[i],
4635 *_targetCoordinates, *_targetAccuracy);
4642 if(!targetCoordinateExists)
4643 targetCoordinatesCollection.push_back(_targetCoordinates);
4648 if(i < numTargetCoordinates)
4649 _targetCoordinates = targetCoordinatesCollection[i];
4654 targetCoordinateExists =
false;
4663 *_targetCoordinates, *_targetAccuracy);
4670 if(!targetCoordinateExists)
4671 targetCoordinatesCollection.push_back(_targetCoordinates);
4676 if(i < numTargetCoordinates)
4677 _targetCoordinates = targetCoordinatesCollection[i];
4682 targetCoordinateExists =
false;
4689 sourceCoordinatesCollection[i],
4690 sourceAccuracyCollection[i],
4691 *_targetCoordinates, *_targetAccuracy);
4698 if(!targetCoordinateExists)
4699 targetCoordinatesCollection.push_back(_targetCoordinates);
4704 if(i < numTargetCoordinates)
4705 _targetCoordinates = targetCoordinatesCollection[i];
4710 targetCoordinateExists =
false;
4717 sourceCoordinatesCollection[i],
4718 sourceAccuracyCollection[i],
4719 *_targetCoordinates, *_targetAccuracy);
4726 if(!targetCoordinateExists)
4727 targetCoordinatesCollection.push_back(_targetCoordinates);
4732 if(i < numTargetCoordinates)
4733 _targetCoordinates = targetCoordinatesCollection[i];
4738 targetCoordinateExists =
false;
4745 sourceCoordinatesCollection[i],
4746 sourceAccuracyCollection[i],
4747 *_targetCoordinates, *_targetAccuracy);
4754 if(!targetCoordinateExists)
4755 targetCoordinatesCollection.push_back(_targetCoordinates);
4760 if(i < numTargetCoordinates)
4761 _targetCoordinates = targetCoordinatesCollection[i];
4764 _targetCoordinates =
4766 targetCoordinateExists =
false;
4773 sourceCoordinatesCollection[i],
4774 sourceAccuracyCollection[i],
4775 *_targetCoordinates, *_targetAccuracy);
4782 if(!targetCoordinateExists)
4783 targetCoordinatesCollection.push_back(_targetCoordinates);
4790 if(!targetAccuracyExists)
4791 targetAccuracyCollection.push_back( _targetAccuracy );
4795 if(i >= numTargetCoordinates)
4796 targetCoordinateExists =
false;
4798 if( _sourceCoordinates )
4800 if(!targetCoordinateExists)
4801 targetCoordinatesCollection.push_back(
4805 _targetCoordinates = targetCoordinatesCollection[i];
4806 _targetCoordinates->
set(
4814 if(!targetCoordinateExists)
4818 if(!targetAccuracyExists)
4820 if( _sourceAccuracy )
4821 targetAccuracyCollection.push_back( _sourceAccuracy );
4825 targetAccuracyCollection.push_back( __sourceAccuracy );
4831 if(numTargetCoordinates > num)
4833 for(
int i = num; i < numTargetCoordinates; i++)
4835 delete targetCoordinatesCollection[i];
4836 targetCoordinatesCollection.pop_back();
4839 if(numTargetAccuracies > num)
4841 for(
int i = num; i < numTargetAccuracies; i++)
4843 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