diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/factory.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index 3088f468..52c3f82b 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -3272,7 +3272,9 @@ bool DatabaseContext::lookForGridInfo( "grid_alternatives.open_license, " "grid_packages.open_license AS package_open_license, " "grid_alternatives.direct_download, " - "grid_packages.direct_download AS package_direct_download " + "grid_packages.direct_download AS package_direct_download, " + "grid_alternatives.proj_grid_name, " + "grid_alternatives.old_proj_grid_name " "FROM grid_alternatives " "LEFT JOIN grid_packages ON " "grid_alternatives.package_name = grid_packages.package_name " @@ -3286,6 +3288,28 @@ bool DatabaseContext::lookForGridInfo( openLicense = (row[3].empty() ? row[4] : row[3]) == "1"; directDownload = (row[5].empty() ? row[6] : row[5]) == "1"; + const auto &proj_grid_name = row[7]; + const auto &old_proj_grid_name = row[8]; + if (proj_grid_name != old_proj_grid_name && + old_proj_grid_name == projFilename) { + std::string fullFilenameNewName; + fullFilenameNewName.resize(2048); + if (d->pjCtxt() == nullptr) { + d->setPjCtxt(pj_get_default_ctx()); + } + int errno_before = proj_context_errno(d->pjCtxt()); + bool gridAvailableWithNewName = + pj_find_file(d->pjCtxt(), proj_grid_name.c_str(), + &fullFilenameNewName[0], + fullFilenameNewName.size() - 1) != 0; + proj_context_errno_set(d->pjCtxt(), errno_before); + fullFilenameNewName.resize(strlen(fullFilenameNewName.c_str())); + if (gridAvailableWithNewName) { + gridAvailable = true; + fullFilename = fullFilenameNewName; + } + } + if (considerKnownGridsAsAvailable && (!packageName.empty() || (!url.empty() && openLicense))) { gridAvailable = true; |
