diff options
| author | Piyush Agram <piyush.agram@jpl.nasa.gov> | 2015-09-10 21:44:23 -0700 |
|---|---|---|
| committer | Piyush Agram <piyush.agram@jpl.nasa.gov> | 2015-10-23 14:47:04 -0700 |
| commit | 757a2c8f946faccf9d094d76cb79e6ebe0006564 (patch) | |
| tree | dede64baec7ef629e7938cd43c99a2b0b3248408 /src/projects.h | |
| parent | b5d0d2d4dd1d2431f3e88e5d26e6105ce9a5c6bf (diff) | |
| download | PROJ-757a2c8f946faccf9d094d76cb79e6ebe0006564.tar.gz PROJ-757a2c8f946faccf9d094d76cb79e6ebe0006564.zip | |
- API Extension to include fwd3d / inv3d
- New SCH coordinate system for radar imaging systems
Diffstat (limited to 'src/projects.h')
| -rw-r--r-- | src/projects.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/projects.h b/src/projects.h index fe6a44c6..bbc6f2ca 100644 --- a/src/projects.h +++ b/src/projects.h @@ -147,13 +147,18 @@ typedef struct { typedef struct { double u, v; } projUV; typedef struct { double r, i; } COMPLEX; +typedef struct { double u, v, w; } projUVW; #ifndef PJ_LIB__ #define XY projUV #define LP projUV +#define XYZ projUVW +#define LPZ projUVW #else typedef struct { double x, y; } XY; typedef struct { double lam, phi; } LP; +typedef struct { double x, y, z; } XYZ; +typedef struct { double lam, phi, z; } LPZ; #endif typedef union { double f; int i; char *s; } PROJVALUE; @@ -225,6 +230,8 @@ typedef struct PJconsts { projCtx_t *ctx; XY (*fwd)(LP, struct PJconsts *); LP (*inv)(XY, struct PJconsts *); + XYZ (*fwd3d)(LPZ, struct PJconsts *); + LPZ (*inv3d)(XYZ, struct PJconsts *); void (*spc)(LP, struct PJconsts *, struct FACTORS *); void (*pfree)(struct PJconsts *); const char *descr; @@ -324,6 +331,7 @@ extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \ memset( P, 0, sizeof(PJ) ); \ P->pfree = freeup; P->fwd = 0; P->inv = 0; \ + P->fwd3d = 0; P->inv3d = 0; \ P->spc = 0; P->descr = des_##name; #define ENTRYX } return P; } else { #define ENTRY0(name) ENTRYA(name) ENTRYX @@ -333,9 +341,13 @@ extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; #define E_ERROR(err) { pj_ctx_set_errno( P->ctx, err); freeup(P); return(0); } #define E_ERROR_0 { freeup(P); return(0); } #define F_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xy); } +#define F3_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xyz); } #define I_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lp); } +#define I3_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lpz); } #define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0} #define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0} +#define FORWARD3D(name) static XYZ name(LPZ lpz, PJ *P) {XYZ xyz = {0.0, 0.0, 0.0} +#define INVERSE3D(name) static LPZ name(XYZ xyz, PJ *P) {LPZ lpz = {0.0, 0.0, 0.0} #define FREEUP static void freeup(PJ *P) { #define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac) #endif |
