diff options
| -rw-r--r-- | src/iso19111/c_api.cpp | 4 | ||||
| -rw-r--r-- | src/iso19111/factory.cpp | 2 | ||||
| -rw-r--r-- | test/unit/test_c_api.cpp | 11 | ||||
| -rw-r--r-- | test/unit/test_factory.cpp | 6 |
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"); |
