aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-10 16:11:40 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-10 17:49:21 +0100
commita0677fe1ed935e75ac6543d77684879dcd457745 (patch)
treea6cdd928c61e1df6cbd588484f2da94167035cce
parentc01459812876710297a247f87901a8db34ecfa79 (diff)
downloadPROJ-a0677fe1ed935e75ac6543d77684879dcd457745.tar.gz
PROJ-a0677fe1ed935e75ac6543d77684879dcd457745.zip
proj_obj_cs_get_axis_info(): add out_unit_auth_name and out_unit_code parameters
-rw-r--r--src/c_api.cpp14
-rw-r--r--src/cs2cs.cpp8
-rw-r--r--src/proj.h4
-rw-r--r--test/unit/test_c_api.cpp30
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;
diff --git a/src/proj.h b/src/proj.h
index cce371d4..d8b7bf4b 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -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");