aboutsummaryrefslogtreecommitdiff
path: root/src/apply_vgridshift.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-06 14:07:27 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-06 21:35:15 +0100
commit916a92062ffa2f2b59007047fae2176bbb463ca3 (patch)
tree0c9af22bd14db3cc0c56d1f5450a6f544c5d4f91 /src/apply_vgridshift.cpp
parent6875ef7116b9dab4021afeb06e2b79cd5679743b (diff)
downloadPROJ-916a92062ffa2f2b59007047fae2176bbb463ca3.tar.gz
PROJ-916a92062ffa2f2b59007047fae2176bbb463ca3.zip
Remove hgrids and vgrids member from PJ structure, and store them in hgridshift/vgridshift/deformation structures
Diffstat (limited to 'src/apply_vgridshift.cpp')
-rw-r--r--src/apply_vgridshift.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/apply_vgridshift.cpp b/src/apply_vgridshift.cpp
index 0d18b5dc..b0136e5c 100644
--- a/src/apply_vgridshift.cpp
+++ b/src/apply_vgridshift.cpp
@@ -37,10 +37,11 @@
#include <math.h>
#include "proj_internal.h"
#include "proj/internal/internal.hpp"
+#include "grids.hpp"
-using namespace NS_PROJ;
+NS_PROJ_START
-static double read_vgrid_value( PJ *defn, PJ_LP input, double vmultiplier) {
+static double read_vgrid_value(const ListOfVGrids& grids, PJ_LP input, double vmultiplier) {
/* do not deal with NaN coordinates */
/* cppcheck-suppress duplicateExpression */
@@ -50,7 +51,7 @@ static double read_vgrid_value( PJ *defn, PJ_LP input, double vmultiplier) {
}
const VerticalShiftGrid* grid = nullptr;
- for( const auto& gridset: defn->vgrids )
+ for( const auto& gridset: grids )
{
grid = gridset->gridAt(input.lam, input.phi);
if( grid )
@@ -145,7 +146,7 @@ static double read_vgrid_value( PJ *defn, PJ_LP input, double vmultiplier) {
}
/**********************************************/
-int proj_vgrid_init(PJ* P, const char *gridkey) {
+ListOfVGrids proj_vgrid_init(PJ* P, const char *gridkey) {
/**********************************************
Initizalize and populate gridlist.
@@ -161,14 +162,15 @@ int proj_vgrid_init(PJ* P, const char *gridkey) {
std::string key("s");
key += gridkey;
- const char* grids = pj_param(P->ctx, P->params, key.c_str()).s;
- if( grids == nullptr )
- return 0;
+ const char* gridnames = pj_param(P->ctx, P->params, key.c_str()).s;
+ if( gridnames == nullptr )
+ return {};
- auto listOfGrids = internal::split(std::string(grids), ',');
- for( const auto& grid: listOfGrids )
+ auto listOfGridNames = internal::split(std::string(gridnames), ',');
+ ListOfVGrids grids;
+ for( const auto& gridnameStr: listOfGridNames )
{
- const char* gridname = grid.c_str();
+ const char* gridname = gridnameStr.c_str();
bool canFail = false;
if( gridname[0] == '@' )
{
@@ -181,21 +183,20 @@ int proj_vgrid_init(PJ* P, const char *gridkey) {
if( !canFail )
{
pj_ctx_set_errno( P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID );
- P->vgrids.clear();
- return 0;
+ return {};
}
}
else
{
- P->vgrids.emplace_back(std::move(gridSet));
+ grids.emplace_back(std::move(gridSet));
}
}
- return static_cast<int>(P->vgrids.size());
+ return grids;
}
/***********************************************/
-double proj_vgrid_value(PJ *P, PJ_LP lp, double vmultiplier){
+double proj_vgrid_value(PJ *P, const ListOfVGrids& grids, PJ_LP lp, double vmultiplier){
/***********************************************
Read grid value at position lp in grids loaded
@@ -207,8 +208,10 @@ double proj_vgrid_value(PJ *P, PJ_LP lp, double vmultiplier){
double value;
- value = read_vgrid_value(P, lp, vmultiplier);
+ value = read_vgrid_value(grids, lp, vmultiplier);
proj_log_trace(P, "proj_vgrid_value: (%f, %f) = %f", lp.lam*RAD_TO_DEG, lp.phi*RAD_TO_DEG, value);
return value;
}
+
+NS_PROJ_END