| 95 | // --------------------------------------------------------------------------- |
| 96 | |
| 97 | TEST(coordinateMetadata, static_crs) { |
| 98 | auto coordinateMetadata = |
| 99 | CoordinateMetadata::create(GeographicCRS::EPSG_4326); |
| 100 | EXPECT_TRUE(coordinateMetadata->crs()->isEquivalentTo( |
| 101 | GeographicCRS::EPSG_4326.get())); |
| 102 | EXPECT_FALSE(coordinateMetadata->coordinateEpoch().has_value()); |
| 103 | |
| 104 | // We tolerate coordinate epochs for EPSG:4326 |
| 105 | EXPECT_NO_THROW( |
| 106 | CoordinateMetadata::create(GeographicCRS::EPSG_4326, 2025.0)); |
| 107 | |
| 108 | // A coordinate epoch should NOT be provided |
| 109 | EXPECT_THROW(CoordinateMetadata::create(createVerticalCRS(), 2025.0), |
| 110 | Exception); |
| 111 | |
| 112 | WKTFormatterNNPtr f( |
| 113 | WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); |
| 114 | auto wkt = coordinateMetadata->exportToWKT(f.get()); |
| 115 | auto obj = WKTParser().createFromWKT(wkt); |
| 116 | auto coordinateMetadataFromWkt = |
| 117 | nn_dynamic_pointer_cast<CoordinateMetadata>(obj); |
| 118 | ASSERT_TRUE(coordinateMetadataFromWkt != nullptr); |
| 119 | EXPECT_TRUE(coordinateMetadataFromWkt->crs()->isEquivalentTo( |
| 120 | GeographicCRS::EPSG_4326.get())); |
| 121 | EXPECT_FALSE(coordinateMetadataFromWkt->coordinateEpoch().has_value()); |
| 122 | |
| 123 | auto ctxt = proj_context_create(); |
| 124 | PjContextKeeper ctxtKeeper(ctxt); |
| 125 | auto pjObj = proj_create(ctxt, wkt.c_str()); |
| 126 | ObjectKeeper objKeeper(pjObj); |
| 127 | ASSERT_TRUE(pjObj != nullptr); |
| 128 | EXPECT_EQ(proj_get_type(pjObj), PJ_TYPE_COORDINATE_METADATA); |
| 129 | EXPECT_TRUE(std::isnan(proj_coordinate_metadata_get_epoch(ctxt, pjObj))); |
| 130 | auto pjObj2 = proj_get_source_crs(ctxt, pjObj); |
| 131 | ObjectKeeper objKeeper2(pjObj2); |
| 132 | EXPECT_TRUE(pjObj2 != nullptr); |
| 133 | |
| 134 | auto projjson = |
| 135 | coordinateMetadata->exportToJSON(JSONFormatter::create(nullptr).get()); |
| 136 | auto obj2 = createFromUserInput(projjson, nullptr); |
| 137 | auto coordinateMetadataFromJson = |
| 138 | nn_dynamic_pointer_cast<CoordinateMetadata>(obj2); |
| 139 | ASSERT_TRUE(coordinateMetadataFromJson != nullptr); |
| 140 | EXPECT_TRUE(coordinateMetadataFromJson->crs()->isEquivalentTo( |
| 141 | GeographicCRS::EPSG_4326.get())); |
| 142 | EXPECT_FALSE(coordinateMetadataFromJson->coordinateEpoch().has_value()); |
| 143 | } |
| 144 | |
| 145 | // --------------------------------------------------------------------------- |
| 146 |
nothing calls this directly
no test coverage detected