diff options
| -rw-r--r-- | src/c_api.cpp | 14 | ||||
| -rw-r--r-- | src/cs2cs.cpp | 8 | ||||
| -rw-r--r-- | src/proj.h | 4 | ||||
| -rw-r--r-- | test/unit/test_c_api.cpp | 30 |
4 files changed, 43 insertions, 13 deletions
diff --git a/src/c_api.cpp b/src/c_api.cpp index 9d66071b..a1eaf1e7 100644 --- a/src/c_api.cpp +++ b/src/c_api.cpp @@ -6018,13 +6018,19 @@ int proj_obj_cs_get_axis_count(PJ_CONTEXT *ctx, const PJ_OBJ *cs) { * unit conversion factor. or NULL * @param out_unit_name Pointer to a string value to store the axis * unit name. or NULL + * @param out_unit_auth_name Pointer to a string value to store the axis + * unit authority name. or NULL + * @param out_unit_code Pointer to a string value to store the axis + * unit code. or NULL * @return TRUE in case of success */ int proj_obj_cs_get_axis_info(PJ_CONTEXT *ctx, const PJ_OBJ *cs, int index, const char **out_name, const char **out_abbrev, const char **out_direction, double *out_unit_conv_factor, - const char **out_unit_name) { + const char **out_unit_name, + const char **out_unit_auth_name, + const char **out_unit_code) { SANITIZE_CTX(ctx); assert(cs); auto l_cs = dynamic_cast<const CoordinateSystem *>(cs->obj.get()); @@ -6053,5 +6059,11 @@ int proj_obj_cs_get_axis_info(PJ_CONTEXT *ctx, const PJ_OBJ *cs, int index, if (out_unit_name) { *out_unit_name = axis->unit().name().c_str(); } + if (out_unit_auth_name) { + *out_unit_auth_name = axis->unit().codeSpace().c_str(); + } + if (out_unit_code) { + *out_unit_code = axis->unit().code().c_str(); + } return true; } diff --git a/src/cs2cs.cpp b/src/cs2cs.cpp index a8d126cf..3345bcc6 100644 --- a/src/cs2cs.cpp +++ b/src/cs2cs.cpp @@ -242,7 +242,9 @@ static PJ_OBJ *instanciate_crs(const std::string &definition, nullptr, // abbrev nullptr, // direction &toRadians, - nullptr // unit name + nullptr, // unit name + nullptr, // unit authority + nullptr // unit code ); isLatFirst = NS_PROJ::internal::ci_find(std::string(axisName), "latitude") != @@ -291,7 +293,9 @@ static std::string get_geog_crs_proj_string_from_proj_crs(PJ_OBJ *src, nullptr, // abbrev nullptr, // direction &toRadians, - nullptr // unit name + nullptr, // unit name + nullptr, // unit authority + nullptr // unit code ); isLatFirst = NS_PROJ::internal::ci_find(std::string(axisName), "latitude") != std::string::npos; @@ -838,7 +838,9 @@ int PROJ_DLL proj_obj_cs_get_axis_info(PJ_CONTEXT *ctx, const char **out_abbrev, const char **out_direction, double *out_unit_conv_factor, - const char **out_unit_name); + const char **out_unit_name, + const char **out_unit_auth_name, + const char **out_unit_code); PJ_OBJ PROJ_DLL *proj_obj_get_ellipsoid(PJ_CONTEXT *ctx, const PJ_OBJ *obj); diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index e9782ae8..41a35608 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -2121,32 +2121,41 @@ TEST_F(CApi, proj_obj_cs_get_axis_info) { EXPECT_EQ(proj_obj_cs_get_axis_count(m_ctxt, cs), 2); EXPECT_FALSE(proj_obj_cs_get_axis_info(m_ctxt, cs, -1, nullptr, nullptr, - nullptr, nullptr, nullptr)); + nullptr, nullptr, nullptr, + nullptr, nullptr)); EXPECT_FALSE(proj_obj_cs_get_axis_info(m_ctxt, cs, 2, nullptr, nullptr, - nullptr, nullptr, nullptr)); + nullptr, nullptr, nullptr, + nullptr, nullptr)); EXPECT_TRUE(proj_obj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, - nullptr, nullptr, nullptr)); + nullptr, nullptr, nullptr, + nullptr, nullptr)); const char *name = nullptr; const char *abbrev = nullptr; const char *direction = nullptr; double unitConvFactor = 0.0; const char *unitName = nullptr; + const char *unitAuthority = nullptr; + const char *unitCode = nullptr; - EXPECT_TRUE(proj_obj_cs_get_axis_info(m_ctxt, cs, 0, &name, &abbrev, - &direction, &unitConvFactor, - &unitName)); + EXPECT_TRUE(proj_obj_cs_get_axis_info( + m_ctxt, cs, 0, &name, &abbrev, &direction, &unitConvFactor, + &unitName, &unitAuthority, &unitCode)); ASSERT_NE(name, nullptr); ASSERT_NE(abbrev, nullptr); ASSERT_NE(direction, nullptr); ASSERT_NE(unitName, nullptr); + ASSERT_NE(unitAuthority, nullptr); + ASSERT_NE(unitCode, nullptr); EXPECT_EQ(std::string(name), "Geodetic latitude"); EXPECT_EQ(std::string(abbrev), "Lat"); EXPECT_EQ(std::string(direction), "north"); EXPECT_EQ(unitConvFactor, 0.017453292519943295) << unitConvFactor; EXPECT_EQ(std::string(unitName), "degree"); + EXPECT_EQ(std::string(unitAuthority), "EPSG"); + EXPECT_EQ(std::string(unitCode), "9122"); } // Non CRS object @@ -2163,7 +2172,8 @@ TEST_F(CApi, proj_obj_cs_get_axis_info) { EXPECT_EQ(proj_obj_cs_get_axis_count(m_ctxt, obj), -1); EXPECT_FALSE(proj_obj_cs_get_axis_info(m_ctxt, obj, 0, nullptr, nullptr, - nullptr, nullptr, nullptr)); + nullptr, nullptr, nullptr, + nullptr, nullptr)); } } @@ -2272,7 +2282,8 @@ TEST_F(CApi, proj_obj_crs_alter_cs_angular_unit) { const char *unitName = nullptr; EXPECT_TRUE(proj_obj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, - nullptr, &unitConvFactor, &unitName)); + nullptr, &unitConvFactor, &unitName, + nullptr, nullptr)); ASSERT_NE(unitName, nullptr); EXPECT_EQ(unitConvFactor, 2) << unitConvFactor; EXPECT_EQ(std::string(unitName), "my unit"); @@ -2300,7 +2311,8 @@ TEST_F(CApi, proj_obj_crs_alter_cs_linear_unit) { const char *unitName = nullptr; EXPECT_TRUE(proj_obj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, - nullptr, &unitConvFactor, &unitName)); + nullptr, &unitConvFactor, &unitName, + nullptr, nullptr)); ASSERT_NE(unitName, nullptr); EXPECT_EQ(unitConvFactor, 2) << unitConvFactor; EXPECT_EQ(std::string(unitName), "my unit"); |
