diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-12-10 18:26:15 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-12-10 18:26:15 +0100 |
| commit | 1cc0ccbf73ba7b313bb96ccd675704dcba1b9b50 (patch) | |
| tree | f92b65a0ced36df4f8a5072478363812e9e0ed20 | |
| parent | a0677fe1ed935e75ac6543d77684879dcd457745 (diff) | |
| download | PROJ-1cc0ccbf73ba7b313bb96ccd675704dcba1b9b50.tar.gz PROJ-1cc0ccbf73ba7b313bb96ccd675704dcba1b9b50.zip | |
C API: add PJ_OBJ_CATEGORY_PRIME_MERIDIAN and PJ_OBJ_TYPE_PRIME_MERIDIAN
| -rw-r--r-- | src/c_api.cpp | 11 | ||||
| -rw-r--r-- | src/proj.h | 3 | ||||
| -rw-r--r-- | test/unit/test_c_api.cpp | 10 |
3 files changed, 24 insertions, 0 deletions
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<PrimeMeridian *>(ptr)) { + return PJ_OBJ_TYPE_PRIME_MERIDIAN; + } + if (dynamic_cast<DynamicGeodeticReferenceFrame *>(ptr)) { return PJ_OBJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME; } @@ -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 @@ -659,6 +659,14 @@ TEST_F(CApi, proj_obj_create_from_database) { 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); ASSERT_NE(datum, nullptr); @@ -940,6 +948,8 @@ TEST_F(CApi, proj_get_codes_from_database) { auto listTypes = std::vector<PJ_OBJ_TYPE>{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, |
