Skip to content

Commit

Permalink
Merge 0721a0b into 6677479
Browse files Browse the repository at this point in the history
  • Loading branch information
rouault committed Mar 25, 2019
2 parents 6677479 + 0721a0b commit 283da33
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 3 deletions.
16 changes: 14 additions & 2 deletions src/iso19111/coordinateoperation.cpp
Expand Up @@ -8742,13 +8742,25 @@ void Transformation::_exportToPROJString(
if (fileParameter &&
fileParameter->type() == ParameterValue::Type::FILENAME) {
auto filename = fileParameter->valueFile();
if (isMethodInverseOf) {
bool doInversion = isMethodInverseOf;
if (!identifiers().empty() &&
*identifiers().front()->codeSpace() ==
metadata::Identifier::EPSG &&
method()->nameStr() ==
"Geographic3D to GravityRelatedHeight (US .gtx)" &&
ends_with(filename, ".gtx")) {
// gtx files, from straight EPSG definition, must be applied in
// reverse order for "Geographic3D to GravityRelatedHeight"
// method
doInversion = !doInversion;
}
if (doInversion) {
formatter->startInversion();
}
formatter->addStep("vgridshift");
formatter->addParam("grids", filename);
formatter->addParam("multiplier", 1.0);
if (isMethodInverseOf) {
if (doInversion) {
formatter->stopInversion();
}
return;
Expand Down
2 changes: 1 addition & 1 deletion src/iso19111/factory.cpp
Expand Up @@ -1024,8 +1024,8 @@ bool DatabaseContext::lookForGridInfo(const std::string &projFilename,
info.url = url;
info.directDownload = directDownload;
info.openLicense = openLicense;
info.gridAvailable = gridAvailable;
}
info.gridAvailable = gridAvailable;
info.found = ret;
d->cache(projFilename, info);
return ret;
Expand Down
53 changes: 53 additions & 0 deletions test/unit/test_operation.cpp
Expand Up @@ -5762,6 +5762,59 @@ TEST(operation, transformation_height_to_PROJ_string) {

// ---------------------------------------------------------------------------

TEST(operation, transformation_Geographic3D_to_GravityRelatedHeight_gtx) {
auto wkt =
"COORDINATEOPERATION[\"ETRS89 to NAP height (1)\",\n"
" VERSION[\"RDNAP-Nld 2008\"],\n"
" SOURCECRS[\n"
" GEOGCRS[\"ETRS89\",\n"
" DATUM[\"European Terrestrial Reference System 1989\",\n"
" ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n"
" LENGTHUNIT[\"metre\",1]]],\n"
" PRIMEM[\"Greenwich\",0,\n"
" ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
" CS[ellipsoidal,3],\n"
" AXIS[\"geodetic latitude (Lat)\",north,\n"
" ORDER[1],\n"
" ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
" AXIS[\"geodetic longitude (Lon)\",east,\n"
" ORDER[2],\n"
" ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
" AXIS[\"ellipsoidal height (h)\",up,\n"
" ORDER[3],\n"
" LENGTHUNIT[\"metre\",1]],\n"
" ID[\"EPSG\",4937]]],\n"
" TARGETCRS[\n"
" VERTCRS[\"NAP height\",\n"
" VDATUM[\"Normaal Amsterdams Peil\"],\n"
" CS[vertical,1],\n"
" AXIS[\"gravity-related height (H)\",up,\n"
" LENGTHUNIT[\"metre\",1]],\n"
" ID[\"EPSG\",5709]]],\n"
" METHOD[\"Geographic3D to GravityRelatedHeight (US .gtx)\",\n"
" ID[\"EPSG\",9665]],\n"
" PARAMETERFILE[\"Geoid (height correction) model "
"file\",\"naptrans2008.gtx\"],\n"
" OPERATIONACCURACY[0.01],\n"
" USAGE[\n"
" SCOPE[\"unknown\"],\n"
" AREA[\"Netherlands - onshore\"],\n"
" BBOX[50.75,3.2,53.7,7.22]],\n"
" ID[\"EPSG\",7001]]";
;
auto obj = WKTParser().createFromWKT(wkt);
auto transf = nn_dynamic_pointer_cast<Transformation>(obj);
ASSERT_TRUE(transf != nullptr);

// Check that we correctly inverse files in the case of
// "Geographic3D to GravityRelatedHeight (US .gtx)"
EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline +step +inv +proj=vgridshift "
"+grids=naptrans2008.gtx +multiplier=1");
}

// ---------------------------------------------------------------------------

TEST(operation, transformation_ntv2_to_PROJ_string) {
auto transformation = Transformation::createNTv2(
PropertyMap(), GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326,
Expand Down

0 comments on commit 283da33

Please sign in to comment.