diff options
Diffstat (limited to 'src')
73 files changed, 384 insertions, 284 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index e8bea068..eaf6bd38 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -13,7 +13,7 @@ AM_CPPFLAGS = -DPROJ_LIB=\"$(pkgdatadir)\" \ include_HEADERS = proj.h proj_api.h geodesic.h \ org_proj4_PJ.h -EXTRA_DIST = makefile.vc proj.def bin_cct.cmake bin_gie.cmake bin_cs2cs.cmake \ +EXTRA_DIST = proj.def bin_cct.cmake bin_gie.cmake bin_cs2cs.cmake \ bin_geod.cmake bin_nad2bin.cmake bin_proj.cmake \ lib_proj.cmake CMakeLists.txt bin_geodtest.cmake geodtest.c @@ -89,7 +89,7 @@ libproj_la_SOURCES = \ \ proj_4D_api.c PJ_cart.c PJ_pipeline.c PJ_horner.c PJ_helmert.c \ PJ_vgridshift.c PJ_hgridshift.c PJ_unitconvert.c PJ_molodensky.c \ - PJ_deformation.c pj_internal.c PJ_axisswap.c + PJ_deformation.c pj_internal.c PJ_axisswap.c PJ_affine.c install-exec-local: rm -f $(DESTDIR)$(bindir)/invproj$(EXEEXT) diff --git a/src/PJ_affine.c b/src/PJ_affine.c new file mode 100644 index 00000000..0d8b6374 --- /dev/null +++ b/src/PJ_affine.c @@ -0,0 +1,246 @@ +/************************************************************************ +* Copyright (c) 2018, Even Rouault <even.rouault at spatialys.com> +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +* DEALINGS IN THE SOFTWARE. +* +***********************************************************************/ +#define PJ_LIB__ + +#include <errno.h> +#include <math.h> + +#include "proj_internal.h" +#include "proj.h" +#include "projects.h" + +PROJ_HEAD(affine, "Affine transformation"); +PROJ_HEAD(geogoffset, "Geographic Offset"); + +struct pj_affine_coeffs { + double s11; + double s12; + double s13; + double s21; + double s22; + double s23; + double s31; + double s32; + double s33; + double tscale; +}; + +struct pj_opaque_affine { + double xoff; + double yoff; + double zoff; + double toff; + struct pj_affine_coeffs forward; + struct pj_affine_coeffs reverse; +}; + + +static PJ_COORD forward_4d(PJ_COORD obs, PJ *P) { + PJ_COORD newObs; + const struct pj_opaque_affine *Q = (const struct pj_opaque_affine *) P->opaque; + const struct pj_affine_coeffs *C = &(Q->forward); + newObs.xyzt.x = Q->xoff + C->s11 * obs.xyzt.x + C->s12 * obs.xyzt.y + C->s13 * obs.xyzt.z; + newObs.xyzt.y = Q->yoff + C->s21 * obs.xyzt.x + C->s22 * obs.xyzt.y + C->s23 * obs.xyzt.z; + newObs.xyzt.z = Q->zoff + C->s31 * obs.xyzt.x + C->s32 * obs.xyzt.y + C->s33 * obs.xyzt.z; + newObs.xyzt.t = Q->toff + C->tscale * obs.xyzt.t; + return newObs; +} + +static XYZ forward_3d(LPZ lpz, PJ *P) { + PJ_COORD point = {{0,0,0,0}}; + point.lpz = lpz; + return forward_4d(point, P).xyz; +} + + +static XY forward_2d(LP lp, PJ *P) { + PJ_COORD point = {{0,0,0,0}}; + point.lp = lp; + return forward_4d(point, P).xy; +} + + +static PJ_COORD reverse_4d(PJ_COORD obs, PJ *P) { + PJ_COORD newObs; + const struct pj_opaque_affine *Q = (const struct pj_opaque_affine *) P->opaque; + const struct pj_affine_coeffs *C = &(Q->reverse); + obs.xyzt.x -= Q->xoff; + obs.xyzt.y -= Q->yoff; + obs.xyzt.z -= Q->zoff; + newObs.xyzt.x = C->s11 * obs.xyzt.x + C->s12 * obs.xyzt.y + C->s13 * obs.xyzt.z; + newObs.xyzt.y = C->s21 * obs.xyzt.x + C->s22 * obs.xyzt.y + C->s23 * obs.xyzt.z; + newObs.xyzt.z = C->s31 * obs.xyzt.x + C->s32 * obs.xyzt.y + C->s33 * obs.xyzt.z; + newObs.xyzt.t = C->tscale * (obs.xyzt.t - Q->toff); + return newObs; +} + +static LPZ reverse_3d(XYZ xyz, PJ *P) { + PJ_COORD point = {{0,0,0,0}}; + point.xyz = xyz; + return reverse_4d(point, P).lpz; +} + +static LP reverse_2d(XY xy, PJ *P) { + PJ_COORD point = {{0,0,0,0}}; + point.xy = xy; + return reverse_4d(point, P).lp; +} + +static struct pj_opaque_affine * initQ() { + struct pj_opaque_affine *Q = pj_calloc(1, sizeof(struct pj_opaque_affine)); + if (0==Q) + return 0; + + /* default values */ + Q->forward.s11 = 1.0; + Q->forward.s22 = 1.0; + Q->forward.s33 = 1.0; + Q->forward.tscale = 1.0; + + Q->reverse.s11 = 1.0; + Q->reverse.s22 = 1.0; + Q->reverse.s33 = 1.0; + Q->reverse.tscale = 1.0; + + return Q; +} + +static void computeReverseParameters(PJ* P) +{ + struct pj_opaque_affine *Q = (struct pj_opaque_affine *) P->opaque; + + /* cf https://en.wikipedia.org/wiki/Invertible_matrix#Inversion_of_3_%C3%97_3_matrices */ + const double a = Q->forward.s11; + const double b = Q->forward.s12; + const double c = Q->forward.s13; + const double d = Q->forward.s21; + const double e = Q->forward.s22; + const double f = Q->forward.s23; + const double g = Q->forward.s31; + const double h = Q->forward.s32; + const double i = Q->forward.s33; + const double A = e * i - f * h; + const double B = -(d * i - f * g); + const double C = (d * h - e * g); + const double D = -(b * i - c * h); + const double E = (a * i - c * g); + const double F = -(a * h - b * g); + const double G = b * f - c * e; + const double H = -(a * f - c * d); + const double I = a * e - b * d; + const double det = a * A + b * B + c * C; + if( det == 0.0 || Q->forward.tscale == 0.0 ) { + if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) { + proj_log_debug(P, "Affine: matrix non invertible"); + } + P->inv4d = NULL; + P->inv3d = NULL; + P->inv = NULL; + } else { + Q->reverse.s11 = A / det; + Q->reverse.s12 = D / det; + Q->reverse.s13 = G / det; + Q->reverse.s21 = B / det; + Q->reverse.s22 = E / det; + Q->reverse.s23 = H / det; + Q->reverse.s31 = C / det; + Q->reverse.s32 = F / det; + Q->reverse.s33 = I / det; + Q->reverse.tscale = 1.0 / Q->forward.tscale; + } +} + +PJ *TRANSFORMATION(affine,0 /* no need for ellipsoid */) { + struct pj_opaque_affine *Q = initQ(); + if (0==Q) + return pj_default_destructor(P, ENOMEM); + P->opaque = (void *) Q; + + P->fwd4d = forward_4d; + P->inv4d = reverse_4d; + P->fwd3d = forward_3d; + P->inv3d = reverse_3d; + P->fwd = forward_2d; + P->inv = reverse_2d; + + P->left = PJ_IO_UNITS_WHATEVER; + P->right = PJ_IO_UNITS_WHATEVER; + + /* read args */ + Q->xoff = pj_param(P->ctx, P->params, "dxoff").f; + Q->yoff = pj_param(P->ctx, P->params, "dyoff").f; + Q->zoff = pj_param(P->ctx, P->params, "dzoff").f; + Q->toff = pj_param(P->ctx, P->params, "dtoff").f; + + if(pj_param (P->ctx, P->params, "ts11").i) { + Q->forward.s11 = pj_param(P->ctx, P->params, "ds11").f; + } + Q->forward.s12 = pj_param(P->ctx, P->params, "ds12").f; + Q->forward.s13 = pj_param(P->ctx, P->params, "ds13").f; + Q->forward.s21 = pj_param(P->ctx, P->params, "ds21").f; + if(pj_param (P->ctx, P->params, "ts22").i) { + Q->forward.s22 = pj_param(P->ctx, P->params, "ds22").f; + } + Q->forward.s23 = pj_param(P->ctx, P->params, "ds23").f; + Q->forward.s31 = pj_param(P->ctx, P->params, "ds31").f; + Q->forward.s32 = pj_param(P->ctx, P->params, "ds32").f; + if(pj_param (P->ctx, P->params, "ts33").i) { + Q->forward.s33 = pj_param(P->ctx, P->params, "ds33").f; + } + if(pj_param (P->ctx, P->params, "ttscale").i) { + Q->forward.tscale = pj_param(P->ctx, P->params, "dtscale").f; + } + + computeReverseParameters(P); + + return P; +} + + +/* Arcsecond to radians */ +#define ARCSEC_TO_RAD (DEG_TO_RAD / 3600.0) + + +PJ *TRANSFORMATION(geogoffset,0 /* no need for ellipsoid */) { + struct pj_opaque_affine *Q = initQ(); + if (0==Q) + return pj_default_destructor(P, ENOMEM); + P->opaque = (void *) Q; + + P->fwd4d = forward_4d; + P->inv4d = reverse_4d; + P->fwd3d = forward_3d; + P->inv3d = reverse_3d; + P->fwd = forward_2d; + P->inv = reverse_2d; + + P->left = PJ_IO_UNITS_ANGULAR; + P->right = PJ_IO_UNITS_ANGULAR; + + /* read args */ + Q->xoff = pj_param(P->ctx, P->params, "ddlon").f * ARCSEC_TO_RAD; + Q->yoff = pj_param(P->ctx, P->params, "ddlat").f * ARCSEC_TO_RAD; + Q->zoff = pj_param(P->ctx, P->params, "ddh").f; + + return P; +} diff --git a/src/PJ_airy.c b/src/PJ_airy.c index 6addea7d..75f95780 100644 --- a/src/PJ_airy.c +++ b/src/PJ_airy.c @@ -31,7 +31,7 @@ #include <errno.h> #include "projects.h" -PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b="; +PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv\n\tno_cut lat_b="; enum Mode { diff --git a/src/PJ_august.c b/src/PJ_august.c index 4c197114..e891e84e 100644 --- a/src/PJ_august.c +++ b/src/PJ_august.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv."; +PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv"; #define M 1.333333333333333 diff --git a/src/PJ_bacon.c b/src/PJ_bacon.c index ae25bce1..f0f11c9d 100644 --- a/src/PJ_bacon.c +++ b/src/PJ_bacon.c @@ -12,9 +12,9 @@ struct pj_opaque { int ortl; }; -PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv."; -PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv."; -PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv."; +PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv"; +PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv"; +PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv"; static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ diff --git a/src/PJ_bipc.c b/src/PJ_bipc.c index ea7883a5..e4a69077 100644 --- a/src/PJ_bipc.c +++ b/src/PJ_bipc.c @@ -6,7 +6,7 @@ #include "projects.h" #include "proj_math.h" -PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") "\n\tConic Sph."; +PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") "\n\tConic Sph"; # define EPS 1e-10 # define EPS10 1e-10 diff --git a/src/PJ_boggs.c b/src/PJ_boggs.c index 83bafc18..119357c0 100644 --- a/src/PJ_boggs.c +++ b/src/PJ_boggs.c @@ -3,7 +3,7 @@ #include "projects.h" -PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl., no inv., Sph."; +PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl, no inv, Sph"; # define NITER 20 # define EPS 1e-7 # define FXC 2.00276 diff --git a/src/PJ_ccon.c b/src/PJ_ccon.c index aed59fb6..0b8b70cb 100644 --- a/src/PJ_ccon.c +++ b/src/PJ_ccon.c @@ -37,7 +37,7 @@ struct pj_opaque { }; PROJ_HEAD(ccon, "Central Conic") - "\n\tCentral Conic, Sph.\n\tlat_1="; + "\n\tCentral Conic, Sph\n\tlat_1="; diff --git a/src/PJ_chamb.c b/src/PJ_chamb.c index 0d14b95e..6951d6a1 100644 --- a/src/PJ_chamb.c +++ b/src/PJ_chamb.c @@ -19,7 +19,7 @@ struct pj_opaque { double beta_0, beta_1, beta_2; }; -PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv." +PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv" "\n\tlat_1= lon_1= lat_2= lon_2= lat_3= lon_3="; #include <stdio.h> diff --git a/src/PJ_collg.c b/src/PJ_collg.c index ef712905..7904de29 100644 --- a/src/PJ_collg.c +++ b/src/PJ_collg.c @@ -5,7 +5,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph."; +PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph"; #define FXC 1.12837916709551257390 #define FYC 1.77245385090551602729 #define ONEEPS 1.0000001 diff --git a/src/PJ_comill.c b/src/PJ_comill.c index ce5bb392..b6e0192e 100644 --- a/src/PJ_comill.c +++ b/src/PJ_comill.c @@ -12,7 +12,7 @@ Port to PROJ.4 by Bojan Savric, 4 April 2016 #include "projects.h" -PROJ_HEAD(comill, "Compact Miller") "\n\tCyl., Sph."; +PROJ_HEAD(comill, "Compact Miller") "\n\tCyl, Sph"; #define K1 0.9902 #define K2 0.1604 diff --git a/src/PJ_crast.c b/src/PJ_crast.c index 6db617d0..4e4dee8b 100644 --- a/src/PJ_crast.c +++ b/src/PJ_crast.c @@ -3,7 +3,7 @@ #include "projects.h" -PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") "\n\tPCyl., Sph."; +PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") "\n\tPCyl, Sph"; #define XM 0.97720502380583984317 #define RXM 1.02332670794648848847 diff --git a/src/PJ_denoy.c b/src/PJ_denoy.c index 64de1f9f..5c337c45 100644 --- a/src/PJ_denoy.c +++ b/src/PJ_denoy.c @@ -3,7 +3,7 @@ #include "projects.h" -PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph."; +PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl, no inv, Sph"; #define C0 0.95 #define C1 -0.08333333333333333333 diff --git a/src/PJ_eck1.c b/src/PJ_eck1.c index 069aa185..88a7430c 100644 --- a/src/PJ_eck1.c +++ b/src/PJ_eck1.c @@ -3,7 +3,7 @@ #include "projects.h" -PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl., Sph."; +PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl, Sph"; #define FC 0.92131773192356127802 #define RP 0.31830988618379067154 diff --git a/src/PJ_eck2.c b/src/PJ_eck2.c index e9ef1229..f76ab4ec 100644 --- a/src/PJ_eck2.c +++ b/src/PJ_eck2.c @@ -5,7 +5,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl. Sph."; +PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl, Sph"; #define FXC 0.46065886596178063902 #define FYC 1.44720250911653531871 diff --git a/src/PJ_eck3.c b/src/PJ_eck3.c index 674f6919..8f91c8bb 100644 --- a/src/PJ_eck3.c +++ b/src/PJ_eck3.c @@ -5,10 +5,10 @@ #include "projects.h" -PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph."; -PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph."; -PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph."; -PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph."; +PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph"; +PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph"; +PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph"; +PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph"; struct pj_opaque { double C_x, C_y, A, B; diff --git a/src/PJ_eck4.c b/src/PJ_eck4.c index 367d9cc9..4fa4c21f 100644 --- a/src/PJ_eck4.c +++ b/src/PJ_eck4.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph."; +PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph"; #define C_x .42223820031577120149 #define C_y 1.32650042817700232218 diff --git a/src/PJ_eck5.c b/src/PJ_eck5.c index 275430d8..f9f28460 100644 --- a/src/PJ_eck5.c +++ b/src/PJ_eck5.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph."; +PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph"; #define XF 0.44101277172455148219 #define RXF 2.26750802723822639137 diff --git a/src/PJ_eqc.c b/src/PJ_eqc.c index 86845aa3..07d6141c 100644 --- a/src/PJ_eqc.c +++ b/src/PJ_eqc.c @@ -10,7 +10,7 @@ struct pj_opaque { double rc; }; -PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") +PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Carree)") "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]"; diff --git a/src/PJ_eqearth.c b/src/PJ_eqearth.c index 5a2e74fd..a0d4467b 100644 --- a/src/PJ_eqearth.c +++ b/src/PJ_eqearth.c @@ -18,7 +18,7 @@ Added ellipsoidal equations by Bojan Savric, 22 August 2018 #include "projects.h" -PROJ_HEAD(eqearth, "Equal Earth") "\n\tPCyl., Sph&Ell"; +PROJ_HEAD(eqearth, "Equal Earth") "\n\tPCyl, Sph&Ell"; /* A1..A4, polynomial coefficients */ #define A1 1.340264 @@ -62,7 +62,7 @@ static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal/spheroidal, forwar xy.x = lp.lam * cos(psi) / (M * (A1 + 3 * A2 * psi2 + psi6 * (7 * A3 + 9 * A4 * psi2))); xy.y = psi * (A1 + A2 * psi2 + psi6 * (A3 + A4 * psi2)); - + /* Adjusting x and y for authalic radius */ xy.x *= Q->rqda; xy.y *= Q->rqda; @@ -155,7 +155,7 @@ PJ *PROJECTION(eqearth) { if (0 == Q->apa) return destructor(P, ENOMEM); Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ - Q->rqda = sqrt(0.5*Q->qp); /* Authalic radius devided by major axis */ + Q->rqda = sqrt(0.5*Q->qp); /* Authalic radius divided by major axis */ } return P; diff --git a/src/PJ_fahey.c b/src/PJ_fahey.c index 18be5ea0..85e0ab69 100644 --- a/src/PJ_fahey.c +++ b/src/PJ_fahey.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph."; +PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph"; #define TOL 1e-6 diff --git a/src/PJ_fouc_s.c b/src/PJ_fouc_s.c index 10bd1765..6efe34bd 100644 --- a/src/PJ_fouc_s.c +++ b/src/PJ_fouc_s.c @@ -6,7 +6,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl., Sph."; +PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl, Sph"; #define MAX_ITER 10 #define LOOP_TOL 1e-7 diff --git a/src/PJ_gins8.c b/src/PJ_gins8.c index ae0d4dee..c1a2fff0 100644 --- a/src/PJ_gins8.c +++ b/src/PJ_gins8.c @@ -1,7 +1,7 @@ #define PJ_LIB__ #include "projects.h" -PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph., no inv."; +PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph, no inv"; #define Cl 0.000952426 #define Cp 0.162388 diff --git a/src/PJ_gn_sinu.c b/src/PJ_gn_sinu.c index 21cba308..2ef0f263 100644 --- a/src/PJ_gn_sinu.c +++ b/src/PJ_gn_sinu.c @@ -6,10 +6,10 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph.\n\tm= n="; +PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph\n\tm= n="; PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") "\n\tPCyl, Sph&Ell"; -PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph."; -PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph."; +PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph"; +PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph"; #define EPS10 1e-10 #define MAX_ITER 8 diff --git a/src/PJ_gnom.c b/src/PJ_gnom.c index 9c2c7106..635ae49e 100644 --- a/src/PJ_gnom.c +++ b/src/PJ_gnom.c @@ -7,7 +7,7 @@ #include "projects.h" #include "proj_math.h" -PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph."; +PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph"; #define EPS10 1.e-10 diff --git a/src/PJ_goode.c b/src/PJ_goode.c index 4f299b54..8d8ac24d 100644 --- a/src/PJ_goode.c +++ b/src/PJ_goode.c @@ -6,7 +6,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph."; +PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph"; #define Y_COR 0.05280 #define PHI_LIM 0.71093078197902358062 diff --git a/src/PJ_hatano.c b/src/PJ_hatano.c index 4e852888..019671cc 100644 --- a/src/PJ_hatano.c +++ b/src/PJ_hatano.c @@ -5,7 +5,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph."; +PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph"; #define NITER 20 #define EPS 1e-7 diff --git a/src/PJ_healpix.c b/src/PJ_healpix.c index d76ca33d..ee575abf 100644 --- a/src/PJ_healpix.c +++ b/src/PJ_healpix.c @@ -37,8 +37,8 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(healpix, "HEALPix") "\n\tSph., Ellps."; -PROJ_HEAD(rhealpix, "rHEALPix") "\n\tSph., Ellps.\n\tnorth_square= south_square="; +PROJ_HEAD(healpix, "HEALPix") "\n\tSph&Ell"; +PROJ_HEAD(rhealpix, "rHEALPix") "\n\tSph&Ell\n\tnorth_square= south_square="; /* Matrix for counterclockwise rotation by pi/2: */ # define R1 {{ 0,-1},{ 1, 0}} diff --git a/src/PJ_igh.c b/src/PJ_igh.c index 23614ac5..c991649a 100644 --- a/src/PJ_igh.c +++ b/src/PJ_igh.c @@ -5,7 +5,7 @@ #include "projects.h" -PROJ_HEAD(igh, "Interrupted Goode Homolosine") "\n\tPCyl, Sph."; +PROJ_HEAD(igh, "Interrupted Goode Homolosine") "\n\tPCyl, Sph"; C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); diff --git a/src/PJ_krovak.c b/src/PJ_krovak.c index afb7847b..5ca21214 100644 --- a/src/PJ_krovak.c +++ b/src/PJ_krovak.c @@ -82,7 +82,7 @@ #include "projects.h" -PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; +PROJ_HEAD(krovak, "Krovak") "\n\tPCyl, Ell"; #define EPS 1e-15 #define UQ 1.04216856380474 /* DU(2, 59, 42, 42.69689) */ diff --git a/src/PJ_larr.c b/src/PJ_larr.c index e4e39dc9..e4d5d240 100644 --- a/src/PJ_larr.c +++ b/src/PJ_larr.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv."; +PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv"; #define SIXTH .16666666666666666 diff --git a/src/PJ_lask.c b/src/PJ_lask.c index 0bb3812c..46f23edb 100644 --- a/src/PJ_lask.c +++ b/src/PJ_lask.c @@ -1,7 +1,7 @@ #define PJ_LIB__ #include "projects.h" -PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv."; +PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv"; #define a10 0.975534 #define a12 -0.119161 diff --git a/src/PJ_mbt_fps.c b/src/PJ_mbt_fps.c index b689014f..66ed9458 100644 --- a/src/PJ_mbt_fps.c +++ b/src/PJ_mbt_fps.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl., Sph."; +PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl, Sph"; #define MAX_ITER 10 #define LOOP_TOL 1e-7 diff --git a/src/PJ_mbtfpp.c b/src/PJ_mbtfpp.c index 5e5b2d50..276a43eb 100644 --- a/src/PJ_mbtfpp.c +++ b/src/PJ_mbtfpp.c @@ -5,7 +5,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl., Sph."; +PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl, Sph"; #define CS .95257934441568037152 #define FXC .92582009977255146156 diff --git a/src/PJ_mbtfpq.c b/src/PJ_mbtfpq.c index 75c71708..b7c0eb16 100644 --- a/src/PJ_mbtfpq.c +++ b/src/PJ_mbtfpq.c @@ -5,7 +5,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl., Sph."; +PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl, Sph"; #define NITER 20 #define EPS 1e-7 diff --git a/src/PJ_moll.c b/src/PJ_moll.c index 7c0e6f85..4ac73841 100644 --- a/src/PJ_moll.c +++ b/src/PJ_moll.c @@ -5,9 +5,9 @@ #include "projects.h" -PROJ_HEAD(moll, "Mollweide") "\n\tPCyl., Sph."; -PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl., Sph."; -PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl., Sph."; +PROJ_HEAD(moll, "Mollweide") "\n\tPCyl, Sph"; +PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl, Sph"; +PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl, Sph"; #define MAX_ITER 10 #define LOOP_TOL 1e-7 diff --git a/src/PJ_natearth.c b/src/PJ_natearth.c index df015222..27a6b137 100644 --- a/src/PJ_natearth.c +++ b/src/PJ_natearth.c @@ -18,7 +18,7 @@ Port to PROJ.4 by Bernhard Jenny, 6 June 2011 #include "projects.h" -PROJ_HEAD(natearth, "Natural Earth") "\n\tPCyl., Sph."; +PROJ_HEAD(natearth, "Natural Earth") "\n\tPCyl, Sph"; #define A0 0.8707 #define A1 -0.131979 diff --git a/src/PJ_natearth2.c b/src/PJ_natearth2.c index 0498f186..f6aba671 100644 --- a/src/PJ_natearth2.c +++ b/src/PJ_natearth2.c @@ -11,7 +11,7 @@ Port to PROJ.4 by Bojan Savric, 4 April 2016 #include "projects.h" -PROJ_HEAD(natearth2, "Natural Earth 2") "\n\tPCyl., Sph."; +PROJ_HEAD(natearth2, "Natural Earth 2") "\n\tPCyl, Sph"; #define A0 0.84719 #define A1 -0.13063 diff --git a/src/PJ_nell.c b/src/PJ_nell.c index 751c01c8..2a7ea32c 100644 --- a/src/PJ_nell.c +++ b/src/PJ_nell.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(nell, "Nell") "\n\tPCyl., Sph."; +PROJ_HEAD(nell, "Nell") "\n\tPCyl, Sph"; #define MAX_ITER 10 #define LOOP_TOL 1e-7 diff --git a/src/PJ_nell_h.c b/src/PJ_nell_h.c index db9e9de0..28c3ace7 100644 --- a/src/PJ_nell_h.c +++ b/src/PJ_nell_h.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl., Sph."; +PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl, Sph"; #define NITER 9 #define EPS 1e-7 diff --git a/src/PJ_nocol.c b/src/PJ_nocol.c index 93e128ea..541d08b2 100644 --- a/src/PJ_nocol.c +++ b/src/PJ_nocol.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv."; +PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv"; #define EPS 1e-10 diff --git a/src/PJ_ortho.c b/src/PJ_ortho.c index 2b037819..d442aa8a 100644 --- a/src/PJ_ortho.c +++ b/src/PJ_ortho.c @@ -5,7 +5,7 @@ #include "proj_math.h" #include "projects.h" -PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph."; +PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph"; enum Mode { N_POLE = 0, diff --git a/src/PJ_patterson.c b/src/PJ_patterson.c index b54847f2..0d19414e 100644 --- a/src/PJ_patterson.c +++ b/src/PJ_patterson.c @@ -44,7 +44,7 @@ #include "projects.h" -PROJ_HEAD(patterson, "Patterson Cylindrical") "\n\tCyl."; +PROJ_HEAD(patterson, "Patterson Cylindrical") "\n\tCyl"; #define K1 1.0148 #define K2 0.23185 diff --git a/src/PJ_putp2.c b/src/PJ_putp2.c index 0b4397e5..d7a847c8 100644 --- a/src/PJ_putp2.c +++ b/src/PJ_putp2.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph."; +PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl, Sph"; #define C_x 1.89490 #define C_y 1.71848 diff --git a/src/PJ_putp3.c b/src/PJ_putp3.c index d0db876e..695ea877 100644 --- a/src/PJ_putp3.c +++ b/src/PJ_putp3.c @@ -6,8 +6,8 @@ struct pj_opaque { double A; }; -PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl., Sph."; -PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl., Sph."; +PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl, Sph"; +PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl, Sph"; #define C 0.79788456 #define RPISQ 0.1013211836 diff --git a/src/PJ_putp4p.c b/src/PJ_putp4p.c index b716060a..6448dc19 100644 --- a/src/PJ_putp4p.c +++ b/src/PJ_putp4p.c @@ -9,8 +9,8 @@ struct pj_opaque { double C_x, C_y; }; -PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph."; -PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph."; +PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl, Sph"; +PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl, Sph"; static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ diff --git a/src/PJ_putp5.c b/src/PJ_putp5.c index 6836f71d..96b0670d 100644 --- a/src/PJ_putp5.c +++ b/src/PJ_putp5.c @@ -9,8 +9,8 @@ struct pj_opaque { double A, B; }; -PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl., Sph."; -PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl., Sph."; +PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl, Sph"; +PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl, Sph"; #define C 1.01346 #define D 1.2158542 diff --git a/src/PJ_putp6.c b/src/PJ_putp6.c index 68c10701..fa9290b4 100644 --- a/src/PJ_putp6.c +++ b/src/PJ_putp6.c @@ -9,8 +9,8 @@ struct pj_opaque { double C_x, C_y, A, B, D; }; -PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl., Sph."; -PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl., Sph."; +PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl, Sph"; +PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl, Sph"; #define EPS 1e-10 #define NITER 10 diff --git a/src/PJ_qsc.c b/src/PJ_qsc.c index 4b463b46..3b8b7fe2 100644 --- a/src/PJ_qsc.c +++ b/src/PJ_qsc.c @@ -62,7 +62,7 @@ struct pj_opaque { double one_minus_f; double one_minus_f_squared; }; -PROJ_HEAD(qsc, "Quadrilateralized Spherical Cube") "\n\tAzi, Sph."; +PROJ_HEAD(qsc, "Quadrilateralized Spherical Cube") "\n\tAzi, Sph"; #define EPS10 1.e-10 diff --git a/src/PJ_robin.c b/src/PJ_robin.c index ca9e5fc7..19bdc2dc 100644 --- a/src/PJ_robin.c +++ b/src/PJ_robin.c @@ -4,7 +4,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph."; +PROJ_HEAD(robin, "Robinson") "\n\tPCyl, Sph"; #define V(C,z) (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))) #define DV(C,z) (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)) diff --git a/src/PJ_rpoly.c b/src/PJ_rpoly.c index 57c4fc92..03c2b161 100644 --- a/src/PJ_rpoly.c +++ b/src/PJ_rpoly.c @@ -13,7 +13,7 @@ struct pj_opaque { }; PROJ_HEAD(rpoly, "Rectangular Polyconic") - "\n\tConic, Sph., no inv.\n\tlat_ts="; + "\n\tConic, Sph, no inv\n\tlat_ts="; #define EPS 1e-9 diff --git a/src/PJ_sts.c b/src/PJ_sts.c index 8409d86a..66094178 100644 --- a/src/PJ_sts.c +++ b/src/PJ_sts.c @@ -5,10 +5,10 @@ #include "projects.h" -PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph."; -PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph."; -PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph."; -PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph."; +PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl, Sph"; +PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl, Sph"; +PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl, Sph"; +PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl, Sph"; struct pj_opaque { diff --git a/src/PJ_tcc.c b/src/PJ_tcc.c index 14255325..60ded63e 100644 --- a/src/PJ_tcc.c +++ b/src/PJ_tcc.c @@ -5,7 +5,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv."; +PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv"; #define EPS10 1.e-10 diff --git a/src/PJ_urm5.c b/src/PJ_urm5.c index 416cb866..293de8cf 100644 --- a/src/PJ_urm5.c +++ b/src/PJ_urm5.c @@ -6,7 +6,7 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph., no inv.\n\tn= q= alpha="; +PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl, Sph, no inv\n\tn= q= alpha="; struct pj_opaque { double m, rmn, q3, n; diff --git a/src/PJ_urmfps.c b/src/PJ_urmfps.c index 5749059b..467fc9bc 100644 --- a/src/PJ_urmfps.c +++ b/src/PJ_urmfps.c @@ -6,8 +6,8 @@ #include "proj.h" #include "projects.h" -PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph.\n\tn="; -PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph."; +PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph\n\tn="; +PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph"; struct pj_opaque { double n, C_y; diff --git a/src/PJ_vandg2.c b/src/PJ_vandg2.c index 20b7601a..447cb782 100644 --- a/src/PJ_vandg2.c +++ b/src/PJ_vandg2.c @@ -9,8 +9,8 @@ struct pj_opaque { int vdg3; }; -PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv."; -PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv."; +PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv"; +PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv"; #define TOL 1e-10 diff --git a/src/PJ_vandg4.c b/src/PJ_vandg4.c index 770594f1..d9a53c87 100644 --- a/src/PJ_vandg4.c +++ b/src/PJ_vandg4.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv."; +PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv"; #define TOL 1e-10 diff --git a/src/PJ_vgridshift.c b/src/PJ_vgridshift.c index f88527f7..ac5d26ef 100644 --- a/src/PJ_vgridshift.c +++ b/src/PJ_vgridshift.c @@ -113,7 +113,7 @@ PJ *TRANSFORMATION(vgridshift,0) { if (pj_param(P->ctx, P->params, "tt_epoch").i) Q->t_epoch = pj_param (P->ctx, P->params, "dt_epoch").f; - /* historical: the forward direction substracts the grid offset. */ + /* historical: the forward direction subtracts the grid offset. */ Q->forward_multiplier = -1.0; if (pj_param(P->ctx, P->params, "tmultiplier").i) { Q->forward_multiplier = pj_param(P->ctx, P->params, "dmultiplier").f; diff --git a/src/PJ_wag2.c b/src/PJ_wag2.c index d12cade1..1bee737a 100644 --- a/src/PJ_wag2.c +++ b/src/PJ_wag2.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph."; +PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl, Sph"; #define C_x 0.92483 #define C_y 1.38725 diff --git a/src/PJ_wag3.c b/src/PJ_wag3.c index 6ae9ad28..ccd19d4d 100644 --- a/src/PJ_wag3.c +++ b/src/PJ_wag3.c @@ -5,7 +5,7 @@ #include "projects.h" -PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl., Sph.\n\tlat_ts="; +PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl, Sph\n\tlat_ts="; #define TWOTHIRD 0.6666666666666666666667 diff --git a/src/PJ_wag7.c b/src/PJ_wag7.c index 3cd332ad..2009e672 100644 --- a/src/PJ_wag7.c +++ b/src/PJ_wag7.c @@ -4,7 +4,7 @@ #include "projects.h" -PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv."; +PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv"; diff --git a/src/PJ_wink1.c b/src/PJ_wink1.c index 10392fe9..865cc6ac 100644 --- a/src/PJ_wink1.c +++ b/src/PJ_wink1.c @@ -5,7 +5,7 @@ #include "projects.h" -PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl., Sph.\n\tlat_ts="; +PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl, Sph\n\tlat_ts="; struct pj_opaque { double cosphi1; diff --git a/src/PJ_wink2.c b/src/PJ_wink2.c index d02ca567..f8e9af09 100644 --- a/src/PJ_wink2.c +++ b/src/PJ_wink2.c @@ -5,7 +5,7 @@ #include "projects.h" -PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1="; +PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl, Sph, no inv\n\tlat_1="; struct pj_opaque { double cosphi1; }; @@ -280,7 +280,7 @@ int main(int argc, char **argv) { if (opt_given (o, "c")) { int ncols; - /* reset colum numbers to ease comment output later on */ + /* reset column numbers to ease comment output later on */ for (i=0; i<4; i++) columns_xyzt[i] = 0; diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index 29f3e94f..3e1a17ad 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -40,6 +40,7 @@ SET(SRC_LIBPROJ_PJ nad_init.c PJ_aea.c PJ_aeqd.c + PJ_affine.c PJ_airy.c PJ_aitoff.c PJ_august.c diff --git a/src/makefile.vc b/src/makefile.vc deleted file mode 100644 index fc6a6861..00000000 --- a/src/makefile.vc +++ /dev/null @@ -1,171 +0,0 @@ -# -# makefile.vc - builds PROJ.4 library with Visual C++ -# -!INCLUDE ..\nmake.opt - -azimuthal = \ - PJ_aeqd.obj PJ_gnom.obj PJ_laea.obj PJ_mod_ster.obj \ - PJ_nsper.obj PJ_nzmg.obj PJ_ortho.obj PJ_stere.obj PJ_sterea.obj \ - proj_rouss.obj - -conic = \ - PJ_aea.obj PJ_bipc.obj PJ_bonne.obj PJ_eqdc.obj \ - PJ_imw_p.obj PJ_lcc.obj PJ_poly.obj \ - PJ_rpoly.obj PJ_sconics.obj PJ_lcca.obj PJ_ccon.obj - -cylinder = \ - PJ_cass.obj PJ_cc.obj PJ_cea.obj PJ_eqc.obj \ - PJ_gall.obj PJ_labrd.obj PJ_lsat.obj PJ_misrsom.obj PJ_merc.obj \ - PJ_mill.obj PJ_ocea.obj PJ_omerc.obj PJ_patterson.obj PJ_somerc.obj \ - PJ_tcc.obj PJ_tcea.obj PJ_tmerc.obj PJ_geos.obj \ - PJ_gstmerc.obj proj_etmerc.obj PJ_comill.obj - -misc = \ - PJ_airy.obj PJ_aitoff.obj PJ_august.obj PJ_bacon.obj PJ_bertin1953.obj \ - PJ_chamb.obj PJ_hammer.obj PJ_lagrng.obj PJ_larr.obj \ - PJ_lask.obj PJ_nocol.obj PJ_ob_tran.obj PJ_oea.obj \ - PJ_sch.obj PJ_tpeqd.obj PJ_vandg.obj PJ_vandg2.obj \ - PJ_vandg4.obj PJ_wag7.obj PJ_latlong.obj PJ_krovak.obj \ - PJ_geoc.obj pj_geocent.obj PJ_healpix.obj PJ_qsc.obj - -pseudo = \ - PJ_boggs.obj PJ_collg.obj PJ_crast.obj PJ_denoy.obj \ - PJ_eck1.obj PJ_eck2.obj PJ_eck3.obj PJ_eck4.obj \ - PJ_eck5.obj PJ_fahey.obj PJ_fouc_s.obj PJ_gins8.obj \ - PJ_gn_sinu.obj PJ_goode.obj PJ_igh.obj PJ_hatano.obj PJ_loxim.obj \ - PJ_mbt_fps.obj PJ_mbtfpp.obj PJ_mbtfpq.obj PJ_moll.obj \ - PJ_nell.obj PJ_nell_h.obj PJ_putp2.obj PJ_putp3.obj \ - PJ_putp4p.obj PJ_putp5.obj PJ_putp6.obj PJ_robin.obj \ - PJ_sts.obj PJ_urm5.obj PJ_urmfps.obj PJ_wag2.obj \ - PJ_wag3.obj PJ_wink1.obj PJ_wink2.obj PJ_isea.obj \ - PJ_calcofi.obj PJ_natearth.obj PJ_natearth2.obj PJ_times.obj \ - PJ_eqearth.obj - -support = \ - aasincos.obj adjlon.obj bch2bps.obj bchgen.obj pj_gauss.obj \ - biveval.obj dmstor.obj mk_cheby.obj pj_auth.obj \ - pj_deriv.obj pj_ell_set.obj pj_ellps.obj pj_errno.obj \ - pj_factors.obj pj_fwd.obj pj_init.obj pj_inv.obj \ - pj_list.obj pj_malloc.obj pj_mlfn.obj pj_msfn.obj \ - pj_open_lib.obj pj_param.obj pj_phi2.obj pj_pr_list.obj \ - pj_qsfn.obj pj_strerrno.obj pj_tsfn.obj pj_units.obj \ - pj_zpoly1.obj rtodms.obj vector1.obj pj_release.obj \ - geocent.obj pj_transform.obj pj_datum_set.obj pj_datums.obj \ - pj_apply_gridshift.obj pj_gc_reader.obj pj_gridcatalog.obj \ - nad_cvt.obj nad_init.obj nad_intr.obj \ - pj_utils.obj pj_gridlist.obj pj_gridinfo.obj \ - proj_mdist.obj pj_mutex.obj pj_initcache.obj \ - pj_ctx.obj pj_fileapi.obj pj_log.obj pj_apply_vgridshift.obj \ - pj_strtod.obj pj_internal.obj pj_math.obj - -pipeline = \ - proj_4D_api.obj PJ_cart.obj PJ_pipeline.obj PJ_horner.obj PJ_helmert.obj \ - PJ_vgridshift.obj PJ_hgridshift.obj PJ_unitconvert.obj PJ_molodensky.obj \ - PJ_deformation.obj PJ_axisswap.obj - -geodesic = geodesic.obj - -LIBOBJ = $(support) $(pseudo) $(azimuthal) $(conic) $(cylinder) $(misc) \ - $(geodesic) $(pipeline) -PROJEXE_OBJ = proj.obj gen_cheb.obj p_series.obj emess.obj -CS2CSEXE_OBJ = cs2cs.obj gen_cheb.obj p_series.obj emess.obj -GEODEXE_OBJ = geod.obj geod_set.obj geod_interface.obj emess.obj -CCTEXE_OBJ = cct.obj proj_strtod.obj -GIEEXE_OBJ = gie.obj proj_strtod.obj - -MULTISTRESSTEST_OBJ = multistresstest.obj -PROJ_DLL = proj$(VERSION).dll -PROJ_EXE = proj.exe -CS2CS_EXE = cs2cs.exe -GEOD_EXE = geod.exe -CCT_EXE = cct.exe -GIE_EXE = gie.exe -NAD2BIN_EXE = nad2bin.exe -MULTISTRESSTEST_EXE = multistresstest.exe - -CFLAGS = /nologo -I. -DPROJ_LIB=\"$(PROJ_LIB_DIR)\" \ - -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 $(OPTFLAGS) - -default: all - -all: proj.lib $(PROJ_EXE) $(CS2CS_EXE) $(GEOD_EXE) $(CCT_EXE) $(GIE_EXE) $(NAD2BIN_EXE) - -proj.lib: $(LIBOBJ) - if exist proj.lib del proj.lib - lib /out:proj.lib $(LIBOBJ) - -$(PROJ_DLL): proj_i.lib - -proj_i.lib: $(LIBOBJ) - link /debug /dll /def:proj.def /out:$(PROJ_DLL) /implib:proj_i.lib \ - $(LIBOBJ) - if exist $(PROJ_DLL).manifest mt -manifest $(PROJ_DLL).manifest -outputresource:$(PROJ_DLL);2 - -$(PROJ_EXE): $(PROJEXE_OBJ) $(EXE_PROJ) - cl $(PROJEXE_OBJ) $(EXE_PROJ) /link setargv.obj - if exist $(PROJ_EXE).manifest mt -manifest $(PROJ_EXE).manifest -outputresource:$(PROJ_EXE);1 - -$(CS2CS_EXE): $(CS2CSEXE_OBJ) $(EXE_PROJ) - cl $(CS2CSEXE_OBJ) $(EXE_PROJ) /link setargv.obj - if exist $(CS2CS_EXE).manifest mt -manifest $(CS2CS_EXE).manifest -outputresource:$(CS2CS_EXE);1 - -$(GEOD_EXE): $(GEODEXE_OBJ) $(EXE_PROJ) - cl $(GEODEXE_OBJ) $(EXE_PROJ) /link setargv.obj - if exist $(GEOD_EXE).manifest mt -manifest $(GEOD_EXE).manifest -outputresource:$(GEOD_EXE);1 - -$(CCT_EXE): $(CCTEXE_OBJ) $(EXE_PROJ) - cl $(CCTEXE_OBJ) $(EXE_PROJ) /link setargv.obj - if exist $(CCT_EXE).manifest mt -manifest $(CCT_EXE).manifest -outputresource:$(CCT_EXE);1 - -$(GIE_EXE): $(GIEEXE_OBJ) $(EXE_PROJ) - cl $(GIEEXE_OBJ) $(EXE_PROJ) /link setargv.obj - if exist $(GIE_EXE).manifest mt -manifest $(GIE_EXE).manifest -outputresource:$(GIE_EXE);1 - -$(NAD2BIN_EXE): nad2bin.obj emess.obj $(EXE_PROJ) - cl nad2bin.obj emess.obj $(EXE_PROJ) /link setargv.obj - -$(MULTISTRESSTEST_EXE): $(MULTISTRESSTEST_OBJ) - cl $(MULTISTRESSTEST_OBJ) $(EXE_PROJ) - if exist $(MULTISTRESSTEST_EXE).manifest mt -manifest $(MULTISTRESSTEST_EXE).manifest -outputresource:$(MULTISTRESSTEST_EXE);1 - -nadshift: nad2bin.exe - cd ..\data - ..\src\nad2bin.exe < conus.lla conus - ..\src\nad2bin.exe < MD.lla MD - ..\src\nad2bin.exe < TN.lla TN - ..\src\nad2bin.exe < WI.lla WI - ..\src\nad2bin.exe < WO.lla WO - ..\src\nad2bin.exe < alaska.lla alaska - ..\src\nad2bin.exe < hawaii.lla hawaii - ..\src\nad2bin.exe < prvi.lla prvi - ..\src\nad2bin.exe < stgeorge.lla stgeorge - ..\src\nad2bin.exe < stlrnc.lla stlrnc - ..\src\nad2bin.exe < stpaul.lla stpaul - ..\src\nad2bin.exe < null.lla null - cd ..\src - -clean: - del *.dll - del *.exe - del *.exp - del *.manifest - del *.lib - del *.obj - del *.pdb - -install: all - -mkdir $(INSTDIR) - -mkdir $(INSTDIR)\bin - -mkdir $(INSTDIR)\share - -mkdir $(INSTDIR)\lib - -mkdir $(INSTDIR)\include - -mkdir $(INSTDIR)\test - -mkdir $(INSTDIR)\test\gie - copy *.exe $(INSTDIR)\bin - copy *.dll $(INSTDIR)\bin - copy *.lib $(INSTDIR)\lib - copy proj.h $(INSTDIR)\include - copy proj_api.h $(INSTDIR)\include - copy projects.h $(INSTDIR)\include - copy geodesic.h $(INSTDIR)\include - copy ..\test\gie\*.gie $(INSTDIR)\test\gie diff --git a/src/pj_list.h b/src/pj_list.h index b4fc2306..cd19d300 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -7,6 +7,7 @@ static const char PJ_LIST_H_ID[] = "@(#)pj_list.h 4.5 95/08/09 GIE REL"; */ PROJ_HEAD(aea, "Albers Equal Area") PROJ_HEAD(aeqd, "Azimuthal Equidistant") +PROJ_HEAD(affine, "Affine transformation") PROJ_HEAD(airy, "Airy") PROJ_HEAD(aitoff, "Aitoff") PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") @@ -37,7 +38,7 @@ PROJ_HEAD(eck4, "Eckert IV") PROJ_HEAD(eck5, "Eckert V") PROJ_HEAD(eck6, "Eckert VI") PROJ_HEAD(eqearth, "Equal Earth") -PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") +PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Carree)") PROJ_HEAD(eqdc, "Equidistant Conic") PROJ_HEAD(euler, "Euler") PROJ_HEAD(etmerc, "Extended Transverse Mercator" ) @@ -47,6 +48,7 @@ PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") PROJ_HEAD(gall, "Gall (Gall Stereographic)") PROJ_HEAD(geoc, "Geocentric Latitude") PROJ_HEAD(geocent, "Geocentric") +PROJ_HEAD(geogoffset, "Geographic Offset") PROJ_HEAD(geos, "Geostationary Satellite View") PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") PROJ_HEAD(gn_sinu, "General Sinusoidal Series") diff --git a/src/pj_transform.c b/src/pj_transform.c index a2c9950e..f6210822 100644 --- a/src/pj_transform.c +++ b/src/pj_transform.c @@ -128,8 +128,8 @@ static int adjust_axes (PJ *P, PJ_DIRECTION dir, long n, int dist, double *x, do /* ----------------------------------------------------------------------- */ -/* Transform cartesian ("geocentric") source coordinates to lat/long, */ -/* if needed */ +/* Transform geographic (lat/long) source coordinates to */ +/* cartesian ("geocentric"), if needed */ /* ----------------------------------------------------------------------- */ static int geographic_to_cartesian (PJ *P, PJ_DIRECTION dir, long n, int dist, double *x, double *y, double *z) { int res; @@ -632,7 +632,7 @@ int pj_geodetic_to_geocentric( double a, double es, } /************************************************************************/ -/* pj_geodetic_to_geocentric() */ +/* pj_geocentric_to_geodetic() */ /************************************************************************/ int pj_geocentric_to_geodetic( double a, double es, diff --git a/src/pj_utils.c b/src/pj_utils.c index 3f18cc7e..81a80b45 100644 --- a/src/pj_utils.c +++ b/src/pj_utils.c @@ -105,6 +105,8 @@ PJ *pj_latlong_from_proj( PJ *pj_in ) { char* ptr = defn+strlen(defn); sprintf( ptr, " +es=%.16g", pj_in->es ); + /* TODO later: use C++ ostringstream with imbue(std::locale::classic()) */ + /* to be locale unaware */ for(; *ptr; ptr++) { if( *ptr == ',' ) @@ -39,7 +39,6 @@ static int inverse = 0, /* != 0 then inverse projection */ prescale = 0, /* != 0 apply cartesian scale factor */ dofactors = 0, /* determine scale factors */ - facs_bad = 0, /* return condition from pj_factors */ very_verby = 0, /* very verbose mode */ postscale = 0; @@ -52,7 +51,7 @@ static const char *oterr = "*\t*", /* output line for unprojectable input */ *usage = "%s\nusage: %s [ -bdeEfiIlmorsStTvVwW [args] ] [ +opts[=arg] ] [ files ]\n"; -static struct FACTORS facs; +static PJ_FACTORS facs; static double (*informat)(const char *, char **), /* input data deformatter function */ fscale = 0.; /* cartesian scale factor */ @@ -79,6 +78,7 @@ static void process(FILE *fid) { PJ_COORD data; for (;;) { + int facs_bad = 0; ++emess_dat.File_line; if (bin_in) { /* binary input */ @@ -124,13 +124,20 @@ static void process(FILE *fid) { } if (data.uv.u != HUGE_VAL) { + PJ_COORD coord; + coord.lp = data.lp; if (prescale) { data.uv.u *= fscale; data.uv.v *= fscale; } - if (dofactors && !inverse) - facs_bad = pj_factors(data.lp, Proj, 0., &facs); + if (dofactors && !inverse) { + facs = proj_factors(Proj, coord); + facs_bad = proj_errno(Proj); + } + data.xy = (*proj.fwd)(data.lp, Proj); - if (dofactors && inverse) - facs_bad = pj_factors(data.lp, Proj, 0., &facs); + if (dofactors && inverse) { + facs = proj_factors(Proj, coord); + facs_bad = proj_errno(Proj); + } if (postscale && data.uv.u != HUGE_VAL) { data.uv.u *= fscale; data.uv.v *= fscale; } @@ -177,8 +184,8 @@ static void process(FILE *fid) { if (dofactors) { if (!facs_bad) (void)printf("\t<%g %g %g %g %g %g>", - facs.h, facs.k, facs.s, - facs.omega * RAD_TO_DEG, facs.a, facs.b); + facs.meridional_scale, facs.parallel_scale, facs.areal_scale, + facs.angular_distortion * RAD_TO_DEG, facs.tissot_semimajor, facs.tissot_semiminor); else (void)fputs("\t<* * * * * *>", stdout); } @@ -192,6 +199,7 @@ static void vprocess(FILE *fid) { LP dat_ll; projXY dat_xy; int linvers; + PJ_COORD coord; if (!oform) @@ -245,8 +253,8 @@ static void vprocess(FILE *fid) { } dat_ll = pj_inv(dat_xy, Proj); } else { - dat_ll.lam = dmstor(s, &s); - dat_ll.phi = dmstor(s, &s); + dat_ll.lam = proj_dmstor(s, &s); + dat_ll.phi = proj_dmstor(s, &s); if (dat_ll.lam == HUGE_VAL || dat_ll.phi == HUGE_VAL) { emess(-1,"lon-lat input conversion failure\n"); continue; @@ -274,7 +282,9 @@ static void vprocess(FILE *fid) { } if (!*s && (s > line)) --s; /* assumed we gobbled \n */ - if (pj_factors(dat_ll, Proj, 0., &facs)) { + coord.lp = dat_ll; + facs = proj_factors(Proj, coord); + if (proj_errno(Proj)) { emess(-1,"failed to compute factors\n\n"); continue; } @@ -283,24 +293,24 @@ static void vprocess(FILE *fid) { (void)fputs(s, stdout); (void)fputs("Longitude: ", stdout); - (void)fputs(rtodms(pline, dat_ll.lam, 'E', 'W'), stdout); + (void)fputs(proj_rtodms(pline, dat_ll.lam, 'E', 'W'), stdout); (void)printf(" [ %.11g ]\n", dat_ll.lam * RAD_TO_DEG); (void)fputs("Latitude: ", stdout); - (void)fputs(rtodms(pline, dat_ll.phi, 'N', 'S'), stdout); + (void)fputs(proj_rtodms(pline, dat_ll.phi, 'N', 'S'), stdout); (void)printf(" [ %.11g ]\n", dat_ll.phi * RAD_TO_DEG); (void)fputs("Easting (x): ", stdout); (void)printf(oform, dat_xy.x); putchar('\n'); (void)fputs("Northing (y): ", stdout); (void)printf(oform, dat_xy.y); putchar('\n'); - (void)printf("Meridian scale (h) : %.8f ( %.4g %% error )\n", facs.h, (facs.h-1.)*100.); - (void)printf("Parallel scale (k) : %.8f ( %.4g %% error )\n", facs.k, (facs.k-1.)*100.); - (void)printf("Areal scale (s): %.8f ( %.4g %% error )\n", facs.s, (facs.s-1.)*100.); - (void)printf("Angular distortion (w): %.3f\n", facs.omega * RAD_TO_DEG); - (void)printf("Meridian/Parallel angle: %.5f\n", facs.thetap * RAD_TO_DEG); + (void)printf("Meridian scale (h) : %.8f ( %.4g %% error )\n", facs.meridional_scale, (facs.meridional_scale-1.)*100.); + (void)printf("Parallel scale (k) : %.8f ( %.4g %% error )\n", facs.parallel_scale, (facs.parallel_scale-1.)*100.); + (void)printf("Areal scale (s): %.8f ( %.4g %% error )\n", facs.areal_scale, (facs.areal_scale-1.)*100.); + (void)printf("Angular distortion (w): %.3f\n", facs.angular_distortion * RAD_TO_DEG); + (void)printf("Meridian/Parallel angle: %.5f\n", facs.meridian_parallel_angle * RAD_TO_DEG); (void)printf("Convergence : "); - (void)fputs(rtodms(pline, facs.conv, 0, 0), stdout); - (void)printf(" [ %.8f ]\n", facs.conv * RAD_TO_DEG); - (void)printf("Max-min (Tissot axis a-b) scale error: %.5f %.5f\n\n", facs.a, facs.b); + (void)fputs(proj_rtodms(pline, facs.meridian_convergence, 0, 0), stdout); + (void)printf(" [ %.8f ]\n", facs.meridian_convergence * RAD_TO_DEG); + (void)printf("Max-min (Tissot axis a-b) scale error: %.5f %.5f\n\n", facs.tissot_semimajor, facs.tissot_semiminor); } } @@ -530,7 +540,7 @@ int main(int argc, char **argv) { if (inverse) informat = strtod; else { - informat = dmstor; + informat = proj_dmstor; if (!oform) oform = "%.2f"; } diff --git a/src/proj_4D_api.c b/src/proj_4D_api.c index 74cf45d6..81967a1d 100644 --- a/src/proj_4D_api.c +++ b/src/proj_4D_api.c @@ -519,6 +519,17 @@ Returns 1 on success, 0 on failure if (P->is_geocent || P->helmert || do_cart) { char def[150]; sprintf (def, "break_cs2cs_recursion proj=cart a=%40.20g es=%40.20g", P->a_orig, P->es_orig); + { + /* In case the current locale does not use dot but comma as decimal */ + /* separator, replace it with dot, so that proj_atof() behaves */ + /* correctly. */ + /* TODO later: use C++ ostringstream with imbue(std::locale::classic()) */ + /* to be locale unaware */ + char* next_pos; + for (next_pos = def; (next_pos = strchr (next_pos, ',')) != NULL; next_pos++) { + *next_pos = '.'; + } + } Q = proj_create (P->ctx, def); if (0==Q) return 0; diff --git a/src/proj_rouss.c b/src/proj_rouss.c index ca4476bb..0e0f9982 100644 --- a/src/proj_rouss.c +++ b/src/proj_rouss.c @@ -39,7 +39,7 @@ struct pj_opaque { double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11; void *en; }; -PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi., Ellps."; +PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi, Ell"; static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ diff --git a/src/projects.h b/src/projects.h index c4f09a8d..39540fe2 100644 --- a/src/projects.h +++ b/src/projects.h @@ -540,7 +540,6 @@ enum deprecated_constants_for_now_dropped_analytical_factors { #define PJD_ERR_PROJ_NOT_NAMED -4 #define PJD_ERR_UNKNOWN_PROJECTION_ID -5 #define PJD_ERR_ECCENTRICITY_IS_ONE -6 -#define PJD_ERR_UNKNOW_UNIT_ID -7 /* deprecated: typo */ #define PJD_ERR_UNKNOWN_UNIT_ID -7 #define PJD_ERR_INVALID_BOOLEAN_PARAM -8 #define PJD_ERR_UNKNOWN_ELLP_PARAM -9 |
