@@ -218,6 +218,19 @@ U epsgCodeFromName(const S& datumName)
218218 iequals (datumName, NAD83_CSRS_V8_alias2_s) ||
219219 iequals (datumName, NAD83_CSRS_V8_alias3_s))
220220 return NAD83_CSRS_V8_i_xyz;
221+ // SIRGAS
222+ if (iequals (datumName, YACARE_ROUUSAMS_s))
223+ return YACARE_ROUUSAMS_i;
224+ if (iequals (datumName, SIRGAS_ROU98_s) ||
225+ iequals (datumName, SIRGAS_ROU98_alias_s))
226+ return SIRGAS_ROU98_i_xyz;
227+ if (iequals (datumName, SIRGAS_1995_s) ||
228+ iequals (datumName, SIRGAS_1995_alias1_s) ||
229+ iequals (datumName, SIRGAS_1995_alias2_s))
230+ return SIRGAS_1995_i_xyz;
231+ if (iequals (datumName, SIRGAS_2000_s) ||
232+ iequals (datumName, SIRGAS_2000_alias_s))
233+ return SIRGAS_2000_i_xyz;
221234
222235 std::stringstream ss;
223236 ss << " epsgCodeFromName: '" << datumName << " ' is not a supported reference frame label." << std::endl;
@@ -341,6 +354,18 @@ S epsgStringFromName(const S& datumName)
341354 case NAD83_CSRS_V8_i:
342355 case NAD83_CSRS_V8_i_xyz:
343356 return NAD83_CSRS_v8_c;
357+ // SIRGAS
358+ case YACARE_ROUUSAMS_i:
359+ return YACARE_ROUUSAMS_c;
360+ case SIRGAS_ROU98_i:
361+ case SIRGAS_ROU98_i_xyz:
362+ return SIRGAS_ROU98_c;
363+ case SIRGAS_1995_i:
364+ case SIRGAS_1995_i_xyz:
365+ return SIRGAS_1995_c;
366+ case SIRGAS_2000_i:
367+ case SIRGAS_2000_i_xyz:
368+ return SIRGAS_2000_c;
344369 }
345370
346371 std::stringstream ss;
@@ -388,6 +413,14 @@ bool isEpsgDatumStatic(const U& epsgCode)
388413 case NAD83_CSRS_V7_i_xyz:
389414 case NAD83_CSRS_V8_i:
390415 case NAD83_CSRS_V8_i_xyz:
416+ // SIRGAS
417+ case YACARE_ROUUSAMS_i:
418+ case SIRGAS_ROU98_i:
419+ case SIRGAS_ROU98_i_xyz:
420+ case SIRGAS_1995_i:
421+ case SIRGAS_1995_i_xyz:
422+ case SIRGAS_2000_i:
423+ case SIRGAS_2000_i_xyz:
391424 return true ;
392425 // ITRF....
393426 case ITRF1988_i_xyz:
@@ -516,6 +549,13 @@ void spheroidFromEpsgCode(const U& epsgCode, epsg_spheroid& ellipsoid)
516549 case NAD83_CSRS_V7_i:
517550 case NAD83_CSRS_V8_i_xyz:
518551 case NAD83_CSRS_V8_i:
552+ // SIRGAS
553+ case SIRGAS_ROU98_i: // Note: epsg.org has incorrectly assigned WGS 84 ellipsoid to SIRGAS ROU98
554+ case SIRGAS_ROU98_i_xyz:
555+ case SIRGAS_1995_i:
556+ case SIRGAS_1995_i_xyz:
557+ case SIRGAS_2000_i:
558+ case SIRGAS_2000_i_xyz:
519559 // authority
520560 ellipsoid.authority_ .first = " EPSG" ;
521561 ellipsoid.authority_ .second = " 7019" ;
@@ -524,6 +564,16 @@ void spheroidFromEpsgCode(const U& epsgCode, epsg_spheroid& ellipsoid)
524564 ellipsoid.name_ = " GRS 1980" ;
525565 ellipsoid.semi_major_ = GRS80_a;
526566 break ;
567+ // SIRGAS (OLD)
568+ case YACARE_ROUUSAMS_i:
569+ // authority
570+ ellipsoid.authority_ .first = " EPSG" ;
571+ ellipsoid.authority_ .second = " 7022" ;
572+ // ellipsoid params
573+ ellipsoid.inv_flattening_ = International24_inv_f;
574+ ellipsoid.name_ = " International 1924" ;
575+ ellipsoid.semi_major_ = International24_a;
576+ break ;
527577 // WGS84
528578 case WGS84_transit_i:
529579 case WGS84_transit_i_xyz:
@@ -670,6 +720,18 @@ std::string referenceepochFromEpsgCode(const U& epsgCode)
670720 case NAD83_CSRS_V8_i_xyz:
671721 case NAD83_CSRS_V8_i:
672722 return NAD83_CSRS_V8_epoch;
723+ // SIRGAS
724+ case YACARE_ROUUSAMS_i:
725+ return YACARE_ROUUSAMS_epoch;
726+ case SIRGAS_ROU98_i:
727+ case SIRGAS_ROU98_i_xyz:
728+ return SIRGAS_ROU98_epoch;
729+ case SIRGAS_1995_i:
730+ case SIRGAS_1995_i_xyz:
731+ return SIRGAS_1995_epoch;
732+ case SIRGAS_2000_i:
733+ case SIRGAS_2000_i_xyz:
734+ return SIRGAS_2000_epoch;
673735 default :
674736 std::stringstream ss;
675737 ss << " referenceepochFromEpsgCode: EPSG code '" << epsgCode << " ' is not a supported EPSG code." << std::endl;
@@ -799,6 +861,17 @@ S datumFromEpsgCode(const U& epsgCode)
799861 case NAD83_CSRS_V8_i_xyz:
800862 case NAD83_CSRS_V8_i:
801863 return NAD83_CSRS_V8_s;
864+ case YACARE_ROUUSAMS_i:
865+ return YACARE_ROUUSAMS_s;
866+ case SIRGAS_ROU98_i_xyz:
867+ case SIRGAS_ROU98_i:
868+ return SIRGAS_ROU98_s;
869+ case SIRGAS_1995_i_xyz:
870+ case SIRGAS_1995_i:
871+ return SIRGAS_1995_s;
872+ case SIRGAS_2000_i_xyz:
873+ case SIRGAS_2000_i:
874+ return SIRGAS_2000_s;
802875 default :
803876 std::stringstream ss;
804877 ss << " datumFromEpsgCode: EPSG code '" << epsgCode << " ' is not a supported EPSG code." << std::endl;
@@ -908,6 +981,14 @@ bool validateEpsgCode(const U& epsgCode)
908981 case NAD83_CSRS_V7_i:
909982 case NAD83_CSRS_V8_i_xyz:
910983 case NAD83_CSRS_V8_i:
984+ // SIRGAS
985+ case YACARE_ROUUSAMS_i:
986+ case SIRGAS_ROU98_i_xyz:
987+ case SIRGAS_ROU98_i:
988+ case SIRGAS_1995_i_xyz:
989+ case SIRGAS_1995_i:
990+ case SIRGAS_2000_i_xyz:
991+ case SIRGAS_2000_i:
911992 return true ;
912993 default :
913994 std::stringstream ss;
0 commit comments