diff options
| author | snowman2 <alansnow21@gmail.com> | 2020-06-26 20:12:30 -0500 |
|---|---|---|
| committer | snowman2 <alansnow21@gmail.com> | 2020-06-26 20:22:50 -0500 |
| commit | ed1eb90ef3027f6e6476903e1459666b08b7fe60 (patch) | |
| tree | 18f1b9f1736605d1f09955fca80948b6d20133a7 | |
| parent | 0a995bb4219f5cf882503c1eb884474fdce53d12 (diff) | |
| download | PROJ-ed1eb90ef3027f6e6476903e1459666b08b7fe60.tar.gz PROJ-ed1eb90ef3027f6e6476903e1459666b08b7fe60.zip | |
ENH: Added temporal, engineering, and parametric datum PJ_TYPE enumerations
| -rw-r--r-- | src/iso19111/c_api.cpp | 21 | ||||
| -rw-r--r-- | src/proj.h | 3 | ||||
| -rw-r--r-- | test/unit/test_c_api.cpp | 34 |
3 files changed, 57 insertions, 1 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 79147ae8..ba1b3324 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -915,6 +915,18 @@ convertPJObjectTypeToObjectType(PJ_TYPE type, bool &valid) { cppType = AuthorityFactory::ObjectType::DATUM; break; + case PJ_TYPE_TEMPORAL_DATUM: + valid = false; + break; + + case PJ_TYPE_ENGINEERING_DATUM: + valid = false; + break; + + case PJ_TYPE_PARAMETRIC_DATUM: + valid = false; + break; + case PJ_TYPE_CRS: cppType = AuthorityFactory::ObjectType::CRS; break; @@ -1084,6 +1096,15 @@ PJ_TYPE proj_get_type(const PJ *obj) { if (dynamic_cast<DatumEnsemble *>(ptr)) { return PJ_TYPE_DATUM_ENSEMBLE; } + if (dynamic_cast<TemporalDatum *>(ptr)) { + return PJ_TYPE_TEMPORAL_DATUM; + } + if (dynamic_cast<EngineeringDatum *>(ptr)) { + return PJ_TYPE_ENGINEERING_DATUM; + } + if (dynamic_cast<ParametricDatum *>(ptr)) { + return PJ_TYPE_PARAMETRIC_DATUM; + } { auto crs = dynamic_cast<GeographicCRS *>(ptr); @@ -710,6 +710,9 @@ typedef enum PJ_TYPE_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DATUM_ENSEMBLE, + PJ_TYPE_TEMPORAL_DATUM, + PJ_TYPE_ENGINEERING_DATUM, + PJ_TYPE_PARAMETRIC_DATUM, /** Abstract type, not returned by proj_get_type() */ PJ_TYPE_CRS, diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index a1918fb7..0ef78d87 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -714,6 +714,34 @@ TEST_F(CApi, proj_get_type) { EXPECT_EQ(proj_get_type(obj), PJ_TYPE_VERTICAL_CRS); } { + auto wkt = "TDATUM[\"Gregorian calendar\",\n" + " CALENDAR[\"proleptic Gregorian\"],\n" + " TIMEORIGIN[0000-01-01]]"; + + auto datum = proj_create_from_wkt( + m_ctxt, wkt, + nullptr, nullptr, nullptr); + ObjectKeeper keeper(datum); + ASSERT_NE(datum, nullptr); + EXPECT_EQ(proj_get_type(datum), PJ_TYPE_TEMPORAL_DATUM); + } + { + auto wkt = "ENGINEERINGDATUM[\"Engineering datum\"]"; + auto datum = proj_create_from_wkt( + m_ctxt, wkt, + nullptr, nullptr, nullptr); + ObjectKeeper keeper(datum); + EXPECT_EQ(proj_get_type(datum), PJ_TYPE_ENGINEERING_DATUM); + } + { + auto wkt = "PDATUM[\"Mean Sea Level\",ANCHOR[\"1013.25 hPa at 15°C\"]]"; + auto datum = proj_create_from_wkt( + m_ctxt, wkt, + nullptr, nullptr, nullptr); + ObjectKeeper keeper(datum); + EXPECT_EQ(proj_get_type(datum), PJ_TYPE_PARAMETRIC_DATUM); + } + { auto obj = proj_create_from_wkt( m_ctxt, createVerticalCRS() ->datum() @@ -1132,6 +1160,9 @@ TEST_F(CApi, proj_get_codes_from_database) { PJ_TYPE_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DATUM_ENSEMBLE, + PJ_TYPE_TEMPORAL_DATUM, + PJ_TYPE_ENGINEERING_DATUM, + PJ_TYPE_PARAMETRIC_DATUM, PJ_TYPE_CRS, PJ_TYPE_GEODETIC_CRS, @@ -1156,7 +1187,8 @@ TEST_F(CApi, proj_get_codes_from_database) { auto list = proj_get_codes_from_database(m_ctxt, "EPSG", type, true); ListFreer feer(list); if (type == PJ_TYPE_TEMPORAL_CRS || type == PJ_TYPE_BOUND_CRS || - type == PJ_TYPE_UNKNOWN) { + type == PJ_TYPE_UNKNOWN || type == PJ_TYPE_TEMPORAL_DATUM || + type == PJ_TYPE_ENGINEERING_DATUM || type == PJ_TYPE_PARAMETRIC_DATUM) { EXPECT_EQ(list, nullptr) << type; } else { ASSERT_NE(list, nullptr) << type; |
