aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBojan Savric <bsavric@esri.com>2016-04-04 10:19:28 -0700
committerBojan Savric <bsavric@esri.com>2016-04-04 10:19:28 -0700
commit311cf99cf9836f9d4bf989b5a32768b27841af70 (patch)
tree9043e230757cd55f6635062d3d40fa26a9903738 /src
parenta648ae934034924f15e1468b04bd986e007fd381 (diff)
downloadPROJ-311cf99cf9836f9d4bf989b5a32768b27841af70.tar.gz
PROJ-311cf99cf9836f9d4bf989b5a32768b27841af70.zip
Adding Natural Earth II and Compact Miller
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am4
-rw-r--r--src/PJ_comill.c59
-rw-r--r--src/PJ_natearth2.c75
-rw-r--r--src/lib_proj.cmake2
-rw-r--r--src/makefile.vc4
-rw-r--r--src/pj_list.h2
6 files changed, 142 insertions, 4 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 6fd97475..d59e3fde 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -47,7 +47,7 @@ libproj_la_SOURCES = \
PJ_lask.c PJ_nocol.c PJ_ob_tran.c PJ_oea.c \
PJ_tpeqd.c PJ_vandg.c PJ_vandg2.c PJ_vandg4.c \
PJ_wag7.c PJ_lcca.c PJ_geos.c proj_etmerc.c \
- PJ_boggs.c PJ_collg.c PJ_crast.c PJ_denoy.c \
+ PJ_boggs.c PJ_collg.c PJ_comill.c PJ_crast.c PJ_denoy.c \
PJ_eck1.c PJ_eck2.c PJ_eck3.c PJ_eck4.c \
PJ_eck5.c PJ_fahey.c PJ_fouc_s.c PJ_gins8.c PJ_gstmerc.c \
PJ_gn_sinu.c PJ_goode.c PJ_igh.c PJ_hatano.c PJ_loxim.c \
@@ -64,7 +64,7 @@ libproj_la_SOURCES = \
pj_open_lib.c pj_param.c pj_phi2.c pj_pr_list.c \
pj_qsfn.c pj_strerrno.c pj_tsfn.c pj_units.c pj_ctx.c pj_log.c \
pj_zpoly1.c rtodms.c vector1.c pj_release.c pj_gauss.c \
- PJ_healpix.c PJ_natearth.c PJ_calcofi.c pj_fileapi.c \
+ PJ_healpix.c PJ_natearth.c PJ_natearth2.c PJ_calcofi.c pj_fileapi.c \
\
pj_gc_reader.c pj_gridcatalog.c \
nad_cvt.c nad_init.c nad_intr.c emess.c emess.h \
diff --git a/src/PJ_comill.c b/src/PJ_comill.c
new file mode 100644
index 00000000..ad9914d4
--- /dev/null
+++ b/src/PJ_comill.c
@@ -0,0 +1,59 @@
+/*
+The Compact Miller projection was designed by Tom Patterson, US National
+Park Service, in 2014. The polynomial equation was developed by Bojan
+Savric and Bernhard Jenny, College of Earth, Ocean, and Atmospheric
+Sciences, Oregon State University.
+Port to PROJ.4 by Bojan Savric, 4 April 2016
+*/
+
+#define PJ_LIB__
+#include <projects.h>
+PROJ_HEAD(comill, "Compact Miller") "\n\tCyl., Sph.";
+
+#define K1 0.9902
+#define K2 0.1604
+#define K3 -0.03054
+#define C1 K1
+#define C2 (3 * K2)
+#define C3 (5 * K3)
+#define EPS 1e-11
+#define MAX_Y (0.6000207669862655 * PI)
+
+FORWARD(s_forward); /* spheroid */
+ double lat_sq;
+
+ lat_sq = lp.phi * lp.phi;
+ xy.x = lp.lam;
+ xy.y = lp.phi * (K1 + lat_sq * (K2 + K3 * lat_sq));
+ return (xy);
+}
+INVERSE(s_inverse); /* spheroid */
+ double yc, tol, y2, y4, f, fder;
+
+ /* make sure y is inside valid range */
+ if (xy.y > MAX_Y) {
+ xy.y = MAX_Y;
+ } else if (xy.y < -MAX_Y) {
+ xy.y = -MAX_Y;
+ }
+
+ /* latitude */
+ yc = xy.y;
+ for (;;) { /* Newton-Raphson */
+ y2 = yc * yc;
+ f = (yc * (K1 + y2 * (K2 + K3 * y2))) - xy.y;
+ fder = C1 + y2 * (C2 + C3 * y2);
+ yc -= tol = f / fder;
+ if (fabs(tol) < EPS) {
+ break;
+ }
+ }
+ lp.phi = yc;
+
+ /* longitude */
+ lp.lam = xy.x;
+
+ return (lp);
+}
+FREEUP; if (P) pj_dalloc(P); }
+ENTRY0(comill) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/PJ_natearth2.c b/src/PJ_natearth2.c
new file mode 100644
index 00000000..c3776a8b
--- /dev/null
+++ b/src/PJ_natearth2.c
@@ -0,0 +1,75 @@
+/*
+The Natural Earth II projection was designed by Tom Patterson, US National
+Park Service, in 2012, using Flex Projector. The polynomial equation was
+developed by Bojan Savric and Bernhard Jenny, College of Earth, Ocean,
+and Atmospheric Sciences, Oregon State University.
+Port to PROJ.4 by Bojan Savric, 4 April 2016
+*/
+
+#define PJ_LIB__
+#include <projects.h>
+PROJ_HEAD(natearth2, "Natural Earth 2") "\n\tPCyl., Sph.";
+
+#define A0 0.84719
+#define A1 -0.13063
+#define A2 -0.04515
+#define A3 0.05494
+#define A4 -0.02326
+#define A5 0.00331
+#define B0 1.01183
+#define B1 -0.02625
+#define B2 0.01926
+#define B3 -0.00396
+#define C0 B0
+#define C1 (9 * B1)
+#define C2 (11 * B2)
+#define C3 (13 * B3)
+#define EPS 1e-11
+#define MAX_Y (0.84719 * 0.535117535153096 * PI)
+
+FORWARD(s_forward); /* spheroid */
+ double phi2, phi4, phi6;
+
+ phi2 = lp.phi * lp.phi;
+ phi4 = phi2 * phi2;
+ phi6 = phi2 * phi4;
+
+ xy.x = lp.lam * (A0 + A1 * phi2 + phi6 * phi6 * (A2 + A3 * phi2 + A4 * phi4 + A5 * phi6));
+ xy.y = lp.phi * (B0 + phi4 * phi4 * (B1 + B2 * phi2 + B3 * phi4));
+ return (xy);
+}
+INVERSE(s_inverse); /* spheroid */
+ double yc, tol, y2, y4, y6, f, fder;
+
+ /* make sure y is inside valid range */
+ if (xy.y > MAX_Y) {
+ xy.y = MAX_Y;
+ } else if (xy.y < -MAX_Y) {
+ xy.y = -MAX_Y;
+ }
+
+ /* latitude */
+ yc = xy.y;
+ for (;;) { /* Newton-Raphson */
+ y2 = yc * yc;
+ y4 = y2 * y2;
+ f = (yc * (B0 + y4 * y4 * (B1 + B2 * y2 + B3 * y4))) - xy.y;
+ fder = C0 + y4 * y4 * (C1 + C2 * y2 + C3 * y4);
+ yc -= tol = f / fder;
+ if (fabs(tol) < EPS) {
+ break;
+ }
+ }
+ lp.phi = yc;
+
+ /* longitude */
+ y2 = yc * yc;
+ y4 = y2 * y2;
+ y6 = y2 * y4;
+
+ lp.lam = xy.x / (A0 + A1 * y2 + y6 * y6 * (A2 + A3 * y2 + A4 * y4 + A5 * y6));
+
+ return (lp);
+}
+FREEUP; if (P) pj_dalloc(P); }
+ENTRY0(natearth2) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake
index a8797a74..ed14e99e 100644
--- a/src/lib_proj.cmake
+++ b/src/lib_proj.cmake
@@ -55,6 +55,7 @@ SET(SRC_LIBPROJ_PJ
PJ_cea.c
PJ_chamb.c
PJ_collg.c
+ PJ_comill.c
PJ_crast.c
PJ_denoy.c
PJ_eck1.c
@@ -97,6 +98,7 @@ SET(SRC_LIBPROJ_PJ
PJ_mod_ster.c
PJ_moll.c
PJ_natearth.c
+ PJ_natearth2.c
PJ_nell.c
PJ_nell_h.c
PJ_nocol.c
diff --git a/src/makefile.vc b/src/makefile.vc
index 435f9943..6989519d 100644
--- a/src/makefile.vc
+++ b/src/makefile.vc
@@ -14,7 +14,7 @@ conic = \
PJ_rpoly.obj PJ_sconics.obj PJ_lcca.obj
cylinder = \
- PJ_cass.obj PJ_cc.obj PJ_cea.obj PJ_eqc.obj \
+ PJ_cass.obj PJ_cc.obj PJ_cea.obj PJ_comill.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 \
@@ -26,7 +26,7 @@ misc = \
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_geocent.obj PJ_healpix.obj PJ_natearth.obj PJ_qsc.obj
+ pj_geocent.obj PJ_healpix.obj PJ_natearth.obj PJ_natearth2.obj PJ_qsc.obj
pseudo = \
PJ_boggs.obj PJ_collg.obj PJ_crast.obj PJ_denoy.obj \
diff --git a/src/pj_list.h b/src/pj_list.h
index 47362d87..baacacc3 100644
--- a/src/pj_list.h
+++ b/src/pj_list.h
@@ -22,6 +22,7 @@ PROJ_HEAD(cc, "Central Cylindrical")
PROJ_HEAD(cea, "Equal Area Cylindrical")
PROJ_HEAD(chamb, "Chamberlin Trimetric")
PROJ_HEAD(collg, "Collignon")
+PROJ_HEAD(comill, "Compact Miller")
PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)")
PROJ_HEAD(denoy, "Denoyer Semi-Elliptical")
PROJ_HEAD(eck1, "Eckert I")
@@ -85,6 +86,7 @@ PROJ_HEAD(murd1, "Murdoch I")
PROJ_HEAD(murd2, "Murdoch II")
PROJ_HEAD(murd3, "Murdoch III")
PROJ_HEAD(natearth, "Natural Earth")
+PROJ_HEAD(natearth2, "Natural Earth II")
PROJ_HEAD(nell, "Nell")
PROJ_HEAD(nell_h, "Nell-Hammer")
PROJ_HEAD(nicol, "Nicolosi Globular")