aboutsummaryrefslogtreecommitdiff
path: root/src/4D_api.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-06 18:03:14 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-06 21:35:15 +0100
commit22792cd55ba41ffadb248c246cc871612a5139c1 (patch)
tree1ff8fa7fd812fea2ae53792b5488a90f6418095c /src/4D_api.cpp
parent916a92062ffa2f2b59007047fae2176bbb463ca3 (diff)
downloadPROJ-22792cd55ba41ffadb248c246cc871612a5139c1.tar.gz
PROJ-22792cd55ba41ffadb248c246cc871612a5139c1.zip
Add a Grid base class for HorizontalShiftGrid and VerticalShiftGrid
Diffstat (limited to 'src/4D_api.cpp')
-rw-r--r--src/4D_api.cpp81
1 files changed, 31 insertions, 50 deletions
diff --git a/src/4D_api.cpp b/src/4D_api.cpp
index 3300a6bb..efb4a86a 100644
--- a/src/4D_api.cpp
+++ b/src/4D_api.cpp
@@ -1556,39 +1556,44 @@ PJ_GRID_INFO proj_grid_info(const char *gridname) {
PJ_CONTEXT *ctx = pj_get_default_ctx();
memset(&grinfo, 0, sizeof(PJ_GRID_INFO));
+ const auto fillGridInfo = [&grinfo, ctx, gridname]
+ (const NS_PROJ::Grid& grid, const std::string& format)
{
- const auto gridSet = NS_PROJ::VerticalShiftGridSet::open(ctx, gridname);
- if( gridSet )
- {
- const auto& grids = gridSet->grids();
- if( !grids.empty() )
- {
- const auto& grid = grids.front();
- const auto& extent = grid->extentAndRes();
+ const auto& extent = grid.extentAndRes();
- /* name of grid */
- strncpy (grinfo.gridname, gridname, sizeof(grinfo.gridname) - 1);
+ /* name of grid */
+ strncpy (grinfo.gridname, gridname, sizeof(grinfo.gridname) - 1);
- /* full path of grid */
- pj_find_file(ctx, gridname, grinfo.filename, sizeof(grinfo.filename) - 1);
+ /* full path of grid */
+ pj_find_file(ctx, gridname, grinfo.filename, sizeof(grinfo.filename) - 1);
- /* grid format */
- strncpy (grinfo.format, gridSet->format().c_str(), sizeof(grinfo.format) - 1);
+ /* grid format */
+ strncpy (grinfo.format, format.c_str(), sizeof(grinfo.format) - 1);
- /* grid size */
- grinfo.n_lon = grid->width();
- grinfo.n_lat = grid->height();
+ /* grid size */
+ grinfo.n_lon = grid.width();
+ grinfo.n_lat = grid.height();
- /* cell size */
- grinfo.cs_lon = extent.resLon;
- grinfo.cs_lat = extent.resLat;
+ /* cell size */
+ grinfo.cs_lon = extent.resLon;
+ grinfo.cs_lat = extent.resLat;
- /* bounds of grid */
- grinfo.lowerleft.lam = extent.westLon;
- grinfo.lowerleft.phi = extent.southLat;
- grinfo.upperright.lam = extent.eastLon;
- grinfo.upperright.phi = extent.northLat;
+ /* bounds of grid */
+ grinfo.lowerleft.lam = extent.westLon;
+ grinfo.lowerleft.phi = extent.southLat;
+ grinfo.upperright.lam = extent.eastLon;
+ grinfo.upperright.phi = extent.northLat;
+ };
+ {
+ const auto gridSet = NS_PROJ::VerticalShiftGridSet::open(ctx, gridname);
+ if( gridSet )
+ {
+ const auto& grids = gridSet->grids();
+ if( !grids.empty() )
+ {
+ const auto& grid = grids.front();
+ fillGridInfo(*grid, gridSet->format());
return grinfo;
}
}
@@ -1602,31 +1607,7 @@ PJ_GRID_INFO proj_grid_info(const char *gridname) {
if( !grids.empty() )
{
const auto& grid = grids.front();
- const auto& extent = grid->extentAndRes();
-
- /* name of grid */
- strncpy (grinfo.gridname, gridname, sizeof(grinfo.gridname) - 1);
-
- /* full path of grid */
- pj_find_file(ctx, gridname, grinfo.filename, sizeof(grinfo.filename) - 1);
-
- /* grid format */
- strncpy (grinfo.format, gridSet->format().c_str(), sizeof(grinfo.format) - 1);
-
- /* grid size */
- grinfo.n_lon = grid->width();
- grinfo.n_lat = grid->height();
-
- /* cell size */
- grinfo.cs_lon = extent.resLon;
- grinfo.cs_lat = extent.resLat;
-
- /* bounds of grid */
- grinfo.lowerleft.lam = extent.westLon;
- grinfo.lowerleft.phi = extent.southLat;
- grinfo.upperright.lam = extent.eastLon;
- grinfo.upperright.phi = extent.northLat;
-
+ fillGridInfo(*grid, gridSet->format());
return grinfo;
}
}