aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/c_api.cpp11
-rw-r--r--src/proj.h3
-rw-r--r--test/unit/test_c_api.cpp10
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;
}
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
@@ -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,