diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-08-20 16:58:14 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2021-08-20 17:25:15 +0200 |
| commit | fa3163365869b15e14715378a826338e942bbfe4 (patch) | |
| tree | 53c200362db2f11f599b958b235b074805d19675 /test/unit | |
| parent | 4766b7c3a17dc98f99c59d2b64076fd924df5804 (diff) | |
| download | PROJ-fa3163365869b15e14715378a826338e942bbfe4.tar.gz PROJ-fa3163365869b15e14715378a826338e942bbfe4.zip | |
ConcatenatedOperation::fixStepsDirection(): fix bad chaining of steps when inverse map projection is involved in non-final step (fixes #2817)
Diffstat (limited to 'test/unit')
| -rw-r--r-- | test/unit/test_factory.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp index a60296d1..e99072a8 100644 --- a/test/unit/test_factory.cpp +++ b/test/unit/test_factory.cpp @@ -3117,6 +3117,115 @@ TEST_F(FactoryWithTmpDatabase, // --------------------------------------------------------------------------- +TEST_F(FactoryWithTmpDatabase, + check_fixup_direction_concatenated_inverse_map_projection) { + + // This tests https://github.com/OSGeo/PROJ/issues/2817 + + createStructure(); + populateWithFakeEPSG(); + + ASSERT_TRUE(execute( + "INSERT INTO other_transformation " + "VALUES('EPSG','NOOP_TRANSFORMATION_32631','name',NULL," + "'PROJ','PROJString','+proj=noop'," + "'EPSG','32631','EPSG','32631',0.0," + "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," + "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," + "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," + "NULL,NULL,NULL,NULL,NULL,NULL,0);")) + << last_error(); + + ASSERT_TRUE( + execute("INSERT INTO usage VALUES('EPSG'," + "'other_transformation_NOOP_TRANSFORMATION_32631_usage'," + "'other_transformation'," + "'EPSG','NOOP_TRANSFORMATION_32631'," + "'EPSG','1262','EPSG','1024');")) + << last_error(); + + ASSERT_TRUE(execute( + "INSERT INTO other_transformation " + "VALUES('EPSG','NOOP_TRANSFORMATION_4326','name',NULL," + "'PROJ','PROJString','+proj=noop'," + "'EPSG','4326','EPSG','4326',0.0," + "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," + "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," + "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," + "NULL,NULL,NULL,NULL,NULL,NULL,0);")) + << last_error(); + + ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," + "'other_transformation_NOOP_TRANSFORMATION_4326_usage'," + "'other_transformation'," + "'EPSG','NOOP_TRANSFORMATION_4326'," + "'EPSG','1262','EPSG','1024');")) + << last_error(); + + ASSERT_TRUE(execute("INSERT INTO concatenated_operation " + "VALUES('EPSG','TEST_CONCATENATED','name',NULL," + "'EPSG','4326','EPSG'" + ",'4326',NULL,NULL,0);")) + << last_error(); + ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," + "'concatenated_operation_TEST_CONCATENATED_usage'," + "'concatenated_operation'," + "'EPSG','TEST_CONCATENATED'," + "'EPSG','1262','EPSG','1024');")) + << last_error(); + + // Forward map projection + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',1," + "'EPSG','16031');")) + << last_error(); + + // Noop projected + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',2," + "'EPSG','NOOP_TRANSFORMATION_32631');")) + << last_error(); + + // Inverse map projection + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',3," + "'EPSG','16031');")) + << last_error(); + + // Noop geographic + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',4," + "'EPSG','NOOP_TRANSFORMATION_4326');")) + << last_error(); + + // Forward map projection + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',5," + "'EPSG','16031');")) + << last_error(); + + // Noop projected + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',6," + "'EPSG','NOOP_TRANSFORMATION_32631');")) + << last_error(); + + // Inverse map projection + ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " + "VALUES('EPSG','TEST_CONCATENATED',7," + "'EPSG','16031');")) + << last_error(); + + auto dbContext = DatabaseContext::create(m_ctxt); + auto authFactory = AuthorityFactory::create(dbContext, std::string("EPSG")); + const auto op = + authFactory->createCoordinateOperation("TEST_CONCATENATED", false); + auto wkt = op->exportToPROJString(PROJStringFormatter::create().get()); + EXPECT_EQ(wkt, "+proj=noop"); +} + +// --------------------------------------------------------------------------- + TEST(factory, createObjectsFromName) { auto ctxt = DatabaseContext::create(); auto factory = AuthorityFactory::create(ctxt, std::string()); |
