From 1cc0ccbf73ba7b313bb96ccd675704dcba1b9b50 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 10 Dec 2018 18:26:15 +0100 Subject: C API: add PJ_OBJ_CATEGORY_PRIME_MERIDIAN and PJ_OBJ_TYPE_PRIME_MERIDIAN --- src/c_api.cpp | 11 +++++++++++ src/proj.h | 3 +++ test/unit/test_c_api.cpp | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/c_api.cpp b/src/c_api.cpp index a1eaf1e7..105b4dd2 100644 --- a/src/c_api.cpp +++ b/src/c_api.cpp @@ -499,6 +499,9 @@ PJ_OBJ *proj_obj_create_from_database(PJ_CONTEXT *ctx, const char *auth_name, case PJ_OBJ_CATEGORY_ELLIPSOID: obj = factory->createEllipsoid(codeStr).as_nullable(); break; + case PJ_OBJ_CATEGORY_PRIME_MERIDIAN: + obj = factory->createPrimeMeridian(codeStr).as_nullable(); + break; case PJ_OBJ_CATEGORY_DATUM: obj = factory->createDatum(codeStr).as_nullable(); break; @@ -579,6 +582,10 @@ convertPJObjectTypeToObjectType(PJ_OBJ_TYPE type, bool &valid) { cppType = AuthorityFactory::ObjectType::ELLIPSOID; break; + case PJ_OBJ_TYPE_PRIME_MERIDIAN: + cppType = AuthorityFactory::ObjectType::PRIME_MERIDIAN; + break; + case PJ_OBJ_TYPE_GEODETIC_REFERENCE_FRAME: case PJ_OBJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME: cppType = AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME; @@ -737,6 +744,10 @@ PJ_OBJ_TYPE proj_obj_get_type(const PJ_OBJ *obj) { return PJ_OBJ_TYPE_ELLIPSOID; } + if (dynamic_cast(ptr)) { + return PJ_OBJ_TYPE_PRIME_MERIDIAN; + } + if (dynamic_cast(ptr)) { return PJ_OBJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME; } diff --git a/src/proj.h b/src/proj.h index d8b7bf4b..d07a2b96 100644 --- a/src/proj.h +++ b/src/proj.h @@ -504,6 +504,7 @@ PJ_OBJ PROJ_DLL *proj_obj_create_from_proj_string(PJ_CONTEXT *ctx, typedef enum { PJ_OBJ_CATEGORY_ELLIPSOID, + PJ_OBJ_CATEGORY_PRIME_MERIDIAN, PJ_OBJ_CATEGORY_DATUM, PJ_OBJ_CATEGORY_CRS, PJ_OBJ_CATEGORY_COORDINATE_OPERATION @@ -527,6 +528,8 @@ typedef enum PJ_OBJ_TYPE_ELLIPSOID, + PJ_OBJ_TYPE_PRIME_MERIDIAN, + PJ_OBJ_TYPE_GEODETIC_REFERENCE_FRAME, PJ_OBJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME, PJ_OBJ_TYPE_VERTICAL_REFERENCE_FRAME, diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index 41a35608..68d349c2 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -658,6 +658,14 @@ TEST_F(CApi, proj_obj_create_from_database) { ObjectKeeper keeper(ellipsoid); EXPECT_EQ(proj_obj_get_type(ellipsoid), PJ_OBJ_TYPE_ELLIPSOID); } + { + auto pm = proj_obj_create_from_database(m_ctxt, "EPSG", "8903", + PJ_OBJ_CATEGORY_PRIME_MERIDIAN, + false, nullptr); + ASSERT_NE(pm, nullptr); + ObjectKeeper keeper(pm); + EXPECT_EQ(proj_obj_get_type(pm), PJ_OBJ_TYPE_PRIME_MERIDIAN); + } { auto datum = proj_obj_create_from_database( m_ctxt, "EPSG", "6326", PJ_OBJ_CATEGORY_DATUM, false, nullptr); @@ -940,6 +948,8 @@ TEST_F(CApi, proj_get_codes_from_database) { auto listTypes = std::vector{PJ_OBJ_TYPE_ELLIPSOID, + PJ_OBJ_TYPE_PRIME_MERIDIAN, + PJ_OBJ_TYPE_GEODETIC_REFERENCE_FRAME, PJ_OBJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME, PJ_OBJ_TYPE_VERTICAL_REFERENCE_FRAME, -- cgit v1.2.3