From ed1eb90ef3027f6e6476903e1459666b08b7fe60 Mon Sep 17 00:00:00 2001 From: snowman2 Date: Fri, 26 Jun 2020 20:12:30 -0500 Subject: ENH: Added temporal, engineering, and parametric datum PJ_TYPE enumerations --- src/iso19111/c_api.cpp | 21 +++++++++++++++++++++ src/proj.h | 3 +++ test/unit/test_c_api.cpp | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) 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(ptr)) { return PJ_TYPE_DATUM_ENSEMBLE; } + if (dynamic_cast(ptr)) { + return PJ_TYPE_TEMPORAL_DATUM; + } + if (dynamic_cast(ptr)) { + return PJ_TYPE_ENGINEERING_DATUM; + } + if (dynamic_cast(ptr)) { + return PJ_TYPE_PARAMETRIC_DATUM; + } { auto crs = dynamic_cast(ptr); diff --git a/src/proj.h b/src/proj.h index 330ab01e..2acaab82 100644 --- a/src/proj.h +++ b/src/proj.h @@ -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 @@ -713,6 +713,34 @@ TEST_F(CApi, proj_get_type) { ASSERT_NE(obj, nullptr); 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() @@ -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; -- cgit v1.2.3