aboutsummaryrefslogtreecommitdiff
path: root/src/PJ_sts.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/PJ_sts.c')
-rw-r--r--src/PJ_sts.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/PJ_sts.c b/src/PJ_sts.c
new file mode 100644
index 00000000..e3caca75
--- /dev/null
+++ b/src/PJ_sts.c
@@ -0,0 +1,57 @@
+#ifndef lint
+static const char SCCSID[]="@(#)PJ_sts.c 4.1 94/02/15 GIE REL";
+#endif
+#define PROJ_PARMS__ \
+ double C_x, C_y, C_p; \
+ int tan_mode;
+#define PJ_LIB__
+# include <projects.h>
+PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph.";
+PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph.";
+PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph.";
+PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph.";
+FORWARD(s_forward); /* spheroid */
+ double c;
+
+ xy.x = P->C_x * lp.lam * cos(lp.phi);
+ xy.y = P->C_y;
+ lp.phi *= P->C_p;
+ c = cos(lp.phi);
+ if (P->tan_mode) {
+ xy.x *= c * c;
+ xy.y *= tan(lp.phi);
+ } else {
+ xy.x /= c;
+ xy.y *= sin(lp.phi);
+ }
+ return (xy);
+}
+INVERSE(s_inverse); /* spheroid */
+ double c;
+
+ xy.y /= P->C_y;
+ c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(xy.y));
+ lp.phi /= P->C_p;
+ lp.lam = xy.x / (P->C_x * cos(lp.phi /= P->C_p));
+ if (P->tan_mode)
+ lp.lam /= c * c;
+ else
+ lp.lam *= c;
+ return (lp);
+}
+FREEUP; if (P) pj_dalloc(P); }
+ static PJ *
+setup(PJ *P, double p, double q, int mode) {
+ P->es = 0.;
+ P->inv = s_inverse;
+ P->fwd = s_forward;
+ P->C_x = q / p;
+ P->C_y = p;
+ P->C_p = 1/ q;
+ P->tan_mode = mode;
+ return P;
+}
+ENTRY0(kav5) ENDENTRY(setup(P, 1.50488, 1.35439, 0))
+ENTRY0(qua_aut) ENDENTRY(setup(P, 2., 2., 0))
+ENTRY0(mbt_s) ENDENTRY(setup(P, 1.48875, 1.36509, 0))
+ENTRY0(fouc) ENDENTRY(setup(P, 2., 2., 1))