aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/iso19111/c_api.cpp4
-rw-r--r--src/iso19111/factory.cpp2
-rw-r--r--test/unit/test_c_api.cpp11
-rw-r--r--test/unit/test_factory.cpp6
4 files changed, 20 insertions, 3 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp
index e9d8edc2..b8173def 100644
--- a/src/iso19111/c_api.cpp
+++ b/src/iso19111/c_api.cpp
@@ -2828,6 +2828,9 @@ proj_get_crs_info_list_from_database(PJ_CONTEXT *ctx, const char *auth_name,
AuthorityFactory::ObjectType::GEOCENTRIC_CRS) {
type = PJ_TYPE_GEOCENTRIC_CRS;
} else if (info.type ==
+ AuthorityFactory::ObjectType::GEODETIC_CRS) {
+ type = PJ_TYPE_GEODETIC_CRS;
+ } else if (info.type ==
AuthorityFactory::ObjectType::PROJECTED_CRS) {
type = PJ_TYPE_PROJECTED_CRS;
} else if (info.type ==
@@ -2850,6 +2853,7 @@ proj_get_crs_info_list_from_database(PJ_CONTEXT *ctx, const char *auth_name,
break;
} else if (params->types[j] == PJ_TYPE_GEODETIC_CRS &&
(type == PJ_TYPE_GEOCENTRIC_CRS ||
+ type == PJ_TYPE_GEODETIC_CRS ||
type == PJ_TYPE_GEOGRAPHIC_2D_CRS ||
type == PJ_TYPE_GEOGRAPHIC_3D_CRS)) {
typeValid = true;
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index f08e32b9..9415dafd 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -7969,6 +7969,8 @@ std::list<AuthorityFactory::CRSInfo> AuthorityFactory::getCRSInfoList() const {
info.type = AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS;
} else if (type == GEOCENTRIC) {
info.type = AuthorityFactory::ObjectType::GEOCENTRIC_CRS;
+ } else if (type == OTHER) {
+ info.type = AuthorityFactory::ObjectType::GEODETIC_CRS;
} else if (type == PROJECTED) {
info.type = AuthorityFactory::ObjectType::PROJECTED_CRS;
} else if (type == VERTICAL) {
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 291d40bc..8a323376 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -3797,22 +3797,27 @@ TEST_F(CApi, proj_get_crs_info_list_from_database) {
params->typesCount = 1;
auto type = PJ_TYPE_GEODETIC_CRS;
params->types = &type;
- auto list = proj_get_crs_info_list_from_database(m_ctxt, "EPSG", params,
- &result_count);
+ auto list = proj_get_crs_info_list_from_database(m_ctxt, nullptr,
+ params, &result_count);
bool foundGeog2D = false;
bool foundGeog3D = false;
bool foundGeocentric = false;
+ bool foundGeodeticCRS =
+ false; // for now, only -ocentric ellipsoidal IAU CRS
for (int i = 0; i < result_count; i++) {
foundGeog2D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS;
foundGeog3D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_3D_CRS;
foundGeocentric |= list[i]->type == PJ_TYPE_GEOCENTRIC_CRS;
+ foundGeodeticCRS |= list[i]->type == PJ_TYPE_GEODETIC_CRS;
EXPECT_TRUE(list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS ||
list[i]->type == PJ_TYPE_GEOGRAPHIC_3D_CRS ||
- list[i]->type == PJ_TYPE_GEOCENTRIC_CRS);
+ list[i]->type == PJ_TYPE_GEOCENTRIC_CRS ||
+ list[i]->type == PJ_TYPE_GEODETIC_CRS);
}
EXPECT_TRUE(foundGeog2D);
EXPECT_TRUE(foundGeog3D);
EXPECT_TRUE(foundGeocentric);
+ EXPECT_TRUE(foundGeodeticCRS);
proj_get_crs_list_parameters_destroy(params);
proj_crs_info_list_destroy(list);
}
diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp
index a3156faf..9abade09 100644
--- a/test/unit/test_factory.cpp
+++ b/test/unit/test_factory.cpp
@@ -3570,16 +3570,22 @@ TEST(factory, getCRSInfoList) {
bool foundEPSG = false;
bool foundIGNF = false;
bool found4326 = false;
+ bool foundIAU_2015_19902 = false;
for (const auto &info : list) {
foundEPSG |= info.authName == "EPSG";
foundIGNF |= info.authName == "IGNF";
if (info.authName == "EPSG" && info.code == "4326") {
found4326 = true;
+ } else if (info.authName == "IAU_2015" && info.code == "19902") {
+ foundIAU_2015_19902 = true;
+ EXPECT_EQ(info.type,
+ AuthorityFactory::ObjectType::GEODETIC_CRS);
}
}
EXPECT_TRUE(foundEPSG);
EXPECT_TRUE(foundIGNF);
EXPECT_TRUE(found4326);
+ EXPECT_TRUE(foundIAU_2015_19902);
}
{
auto factory = AuthorityFactory::create(ctxt, "EPSG");