aboutsummaryrefslogtreecommitdiff
path: root/src/4D_api.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-04 18:56:15 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-06 21:35:14 +0100
commit126384854bf8e1b7461aebcc28966a6559971de1 (patch)
tree261e7125c6d9baa2b83d95b2b4547edf095b6850 /src/4D_api.cpp
parent41ff94791abfebaf8cf2c346b4aefb4895248bf3 (diff)
downloadPROJ-126384854bf8e1b7461aebcc28966a6559971de1.tar.gz
PROJ-126384854bf8e1b7461aebcc28966a6559971de1.zip
vertical grid shift: rework to no longer load whole grid into memory
Diffstat (limited to 'src/4D_api.cpp')
-rw-r--r--src/4D_api.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/src/4D_api.cpp b/src/4D_api.cpp
index f37594b5..ed6a62d6 100644
--- a/src/4D_api.cpp
+++ b/src/4D_api.cpp
@@ -1558,6 +1558,45 @@ PJ_GRID_INFO proj_grid_info(const char *gridname) {
/* in case the grid wasn't found */
if (gridinfo->filename == nullptr || gridinfo->ct == nullptr) {
+
+ 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();
+
+ /* 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;
+
+ pj_gridinfo_free(ctx, gridinfo);
+
+ return grinfo;
+ }
+ }
+
pj_gridinfo_free(ctx, gridinfo);
strcpy(grinfo.format, "missing");
return grinfo;
@@ -1585,8 +1624,8 @@ PJ_GRID_INFO proj_grid_info(const char *gridname) {
/* bounds of grid */
grinfo.lowerleft = gridinfo->ct->ll;
- grinfo.upperright.lam = grinfo.lowerleft.lam + grinfo.n_lon*grinfo.cs_lon;
- grinfo.upperright.phi = grinfo.lowerleft.phi + grinfo.n_lat*grinfo.cs_lat;
+ grinfo.upperright.lam = grinfo.lowerleft.lam + (grinfo.n_lon-1)*grinfo.cs_lon;
+ grinfo.upperright.phi = grinfo.lowerleft.phi + (grinfo.n_lat-1)*grinfo.cs_lat;
pj_gridinfo_free(ctx, gridinfo);