celes 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +32 -0
- data/README.md +179 -0
- data/Rakefile +1 -0
- data/celes.gemspec +22 -0
- data/ext/celes/a2af.c +120 -0
- data/ext/celes/a2tf.c +116 -0
- data/ext/celes/af2a.c +107 -0
- data/ext/celes/anp.c +82 -0
- data/ext/celes/anpm.c +82 -0
- data/ext/celes/bi00.c +116 -0
- data/ext/celes/bp00.c +173 -0
- data/ext/celes/bp06.c +136 -0
- data/ext/celes/bpn2xy.c +100 -0
- data/ext/celes/c2i00a.c +139 -0
- data/ext/celes/c2i00b.c +139 -0
- data/ext/celes/c2i06a.c +136 -0
- data/ext/celes/c2ibpn.c +142 -0
- data/ext/celes/c2ixy.c +131 -0
- data/ext/celes/c2ixys.c +123 -0
- data/ext/celes/c2s.c +96 -0
- data/ext/celes/c2t00a.c +154 -0
- data/ext/celes/c2t00b.c +150 -0
- data/ext/celes/c2t06a.c +152 -0
- data/ext/celes/c2tcio.c +122 -0
- data/ext/celes/c2teqx.c +122 -0
- data/ext/celes/c2tpe.c +167 -0
- data/ext/celes/c2txy.c +159 -0
- data/ext/celes/cal2jd.c +139 -0
- data/ext/celes/celes_core.c +2522 -0
- data/ext/celes/cp.c +80 -0
- data/ext/celes/cpv.c +82 -0
- data/ext/celes/cr.c +83 -0
- data/ext/celes/d2dtf.c +206 -0
- data/ext/celes/d2tf.c +160 -0
- data/ext/celes/dat.c +289 -0
- data/ext/celes/depend +25 -0
- data/ext/celes/dtdb.c +1213 -0
- data/ext/celes/dtf2d.c +196 -0
- data/ext/celes/ee00.c +128 -0
- data/ext/celes/ee00a.c +135 -0
- data/ext/celes/ee00b.c +141 -0
- data/ext/celes/ee06a.c +122 -0
- data/ext/celes/eect00.c +282 -0
- data/ext/celes/eform.c +147 -0
- data/ext/celes/eo06a.c +131 -0
- data/ext/celes/eors.c +108 -0
- data/ext/celes/epb.c +96 -0
- data/ext/celes/epb2jd.c +91 -0
- data/ext/celes/epj.c +93 -0
- data/ext/celes/epj2jd.c +91 -0
- data/ext/celes/epv00.c +2589 -0
- data/ext/celes/eqeq94.c +131 -0
- data/ext/celes/era00.c +136 -0
- data/ext/celes/extconf.rb +4 -0
- data/ext/celes/fad03.c +103 -0
- data/ext/celes/fae03.c +102 -0
- data/ext/celes/faf03.c +106 -0
- data/ext/celes/faju03.c +102 -0
- data/ext/celes/fal03.c +103 -0
- data/ext/celes/falp03.c +103 -0
- data/ext/celes/fama03.c +102 -0
- data/ext/celes/fame03.c +102 -0
- data/ext/celes/fane03.c +99 -0
- data/ext/celes/faom03.c +104 -0
- data/ext/celes/fapa03.c +103 -0
- data/ext/celes/fasa03.c +102 -0
- data/ext/celes/faur03.c +99 -0
- data/ext/celes/fave03.c +102 -0
- data/ext/celes/fk52h.c +143 -0
- data/ext/celes/fk5hip.c +126 -0
- data/ext/celes/fk5hz.c +160 -0
- data/ext/celes/fw2m.c +134 -0
- data/ext/celes/fw2xy.c +120 -0
- data/ext/celes/gc2gd.c +134 -0
- data/ext/celes/gc2gde.c +200 -0
- data/ext/celes/gd2gc.c +134 -0
- data/ext/celes/gd2gce.c +138 -0
- data/ext/celes/gmst00.c +145 -0
- data/ext/celes/gmst06.c +136 -0
- data/ext/celes/gmst82.c +151 -0
- data/ext/celes/gst00a.c +138 -0
- data/ext/celes/gst00b.c +146 -0
- data/ext/celes/gst06.c +140 -0
- data/ext/celes/gst06a.c +131 -0
- data/ext/celes/gst94.c +131 -0
- data/ext/celes/h2fk5.c +148 -0
- data/ext/celes/hfk5z.c +175 -0
- data/ext/celes/ir.c +83 -0
- data/ext/celes/jd2cal.c +155 -0
- data/ext/celes/jdcalf.c +161 -0
- data/ext/celes/num00a.c +121 -0
- data/ext/celes/num00b.c +121 -0
- data/ext/celes/num06a.c +125 -0
- data/ext/celes/numat.c +109 -0
- data/ext/celes/nut00a.c +2047 -0
- data/ext/celes/nut00b.c +372 -0
- data/ext/celes/nut06a.c +153 -0
- data/ext/celes/nut80.c +325 -0
- data/ext/celes/nutm80.c +117 -0
- data/ext/celes/obl06.c +118 -0
- data/ext/celes/obl80.c +118 -0
- data/ext/celes/p06e.c +321 -0
- data/ext/celes/p2pv.c +83 -0
- data/ext/celes/p2s.c +91 -0
- data/ext/celes/pap.c +139 -0
- data/ext/celes/pas.c +96 -0
- data/ext/celes/pb06.c +144 -0
- data/ext/celes/pdp.c +84 -0
- data/ext/celes/pfw06.c +165 -0
- data/ext/celes/plan94.c +514 -0
- data/ext/celes/pm.c +83 -0
- data/ext/celes/pmat00.c +118 -0
- data/ext/celes/pmat06.c +122 -0
- data/ext/celes/pmat76.c +141 -0
- data/ext/celes/pmp.c +85 -0
- data/ext/celes/pn.c +109 -0
- data/ext/celes/pn00.c +177 -0
- data/ext/celes/pn00a.c +162 -0
- data/ext/celes/pn00b.c +162 -0
- data/ext/celes/pn06.c +187 -0
- data/ext/celes/pn06a.c +152 -0
- data/ext/celes/pnm00a.c +121 -0
- data/ext/celes/pnm00b.c +121 -0
- data/ext/celes/pnm06a.c +124 -0
- data/ext/celes/pnm80.c +126 -0
- data/ext/celes/pom00.c +115 -0
- data/ext/celes/ppp.c +85 -0
- data/ext/celes/ppsp.c +94 -0
- data/ext/celes/pr00.c +142 -0
- data/ext/celes/prec76.c +148 -0
- data/ext/celes/pv2p.c +81 -0
- data/ext/celes/pv2s.c +144 -0
- data/ext/celes/pvdpv.c +102 -0
- data/ext/celes/pvm.c +86 -0
- data/ext/celes/pvmpv.c +87 -0
- data/ext/celes/pvppv.c +87 -0
- data/ext/celes/pvstar.c +207 -0
- data/ext/celes/pvu.c +93 -0
- data/ext/celes/pvup.c +88 -0
- data/ext/celes/pvxpv.c +107 -0
- data/ext/celes/pxp.c +94 -0
- data/ext/celes/rm2v.c +111 -0
- data/ext/celes/rv2m.c +118 -0
- data/ext/celes/rx.c +110 -0
- data/ext/celes/rxp.c +99 -0
- data/ext/celes/rxpv.c +86 -0
- data/ext/celes/rxr.c +99 -0
- data/ext/celes/ry.c +110 -0
- data/ext/celes/rz.c +110 -0
- data/ext/celes/s00.c +371 -0
- data/ext/celes/s00a.c +143 -0
- data/ext/celes/s00b.c +143 -0
- data/ext/celes/s06.c +368 -0
- data/ext/celes/s06a.c +145 -0
- data/ext/celes/s2c.c +85 -0
- data/ext/celes/s2p.c +88 -0
- data/ext/celes/s2pv.c +103 -0
- data/ext/celes/s2xpv.c +87 -0
- data/ext/celes/sepp.c +105 -0
- data/ext/celes/seps.c +93 -0
- data/ext/celes/sofa.h +379 -0
- data/ext/celes/sofam.h +155 -0
- data/ext/celes/sp00.c +118 -0
- data/ext/celes/starpm.c +205 -0
- data/ext/celes/starpv.c +264 -0
- data/ext/celes/sxp.c +84 -0
- data/ext/celes/sxpv.c +85 -0
- data/ext/celes/taitt.c +110 -0
- data/ext/celes/taiut1.c +112 -0
- data/ext/celes/taiutc.c +182 -0
- data/ext/celes/tcbtdb.c +132 -0
- data/ext/celes/tcgtt.c +109 -0
- data/ext/celes/tdbtcb.c +137 -0
- data/ext/celes/tdbtt.c +122 -0
- data/ext/celes/tf2a.c +107 -0
- data/ext/celes/tf2d.c +107 -0
- data/ext/celes/tr.c +93 -0
- data/ext/celes/trxp.c +93 -0
- data/ext/celes/trxpv.c +93 -0
- data/ext/celes/tttai.c +110 -0
- data/ext/celes/tttcg.c +112 -0
- data/ext/celes/tttdb.c +121 -0
- data/ext/celes/ttut1.c +110 -0
- data/ext/celes/ut1tai.c +111 -0
- data/ext/celes/ut1tt.c +110 -0
- data/ext/celes/ut1utc.c +193 -0
- data/ext/celes/utctai.c +163 -0
- data/ext/celes/utcut1.c +151 -0
- data/ext/celes/xy06.c +2758 -0
- data/ext/celes/xys00a.c +133 -0
- data/ext/celes/xys00b.c +133 -0
- data/ext/celes/xys06a.c +133 -0
- data/ext/celes/zp.c +77 -0
- data/ext/celes/zpv.c +79 -0
- data/ext/celes/zr.c +83 -0
- data/lib/celes.rb +6 -0
- data/lib/celes/version.rb +3 -0
- data/sofa_20120301.diff +31384 -0
- data/test/t_sofa.rb +8228 -0
- metadata +251 -0
data/ext/celes/gc2gde.c
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#include "sofam.h"
|
|
2
|
+
|
|
3
|
+
int iauGc2gde ( double a, double f, double xyz[3],
|
|
4
|
+
double *elong, double *phi, double *height )
|
|
5
|
+
/*
|
|
6
|
+
** - - - - - - - - - -
|
|
7
|
+
** i a u G c 2 g d e
|
|
8
|
+
** - - - - - - - - - -
|
|
9
|
+
**
|
|
10
|
+
** Transform geocentric coordinates to geodetic for a reference
|
|
11
|
+
** ellipsoid of specified form.
|
|
12
|
+
**
|
|
13
|
+
** Status: support function.
|
|
14
|
+
**
|
|
15
|
+
** Given:
|
|
16
|
+
** a double equatorial radius (Notes 2,4)
|
|
17
|
+
** f double flattening (Note 3)
|
|
18
|
+
** xyz double[3] geocentric vector (Note 4)
|
|
19
|
+
**
|
|
20
|
+
** Returned:
|
|
21
|
+
** elong double longitude (radians, east +ve)
|
|
22
|
+
** phi double latitude (geodetic, radians)
|
|
23
|
+
** height double height above ellipsoid (geodetic, Note 4)
|
|
24
|
+
**
|
|
25
|
+
** Returned (function value):
|
|
26
|
+
** int status: 0 = OK
|
|
27
|
+
** -1 = illegal f
|
|
28
|
+
** -2 = illegal a
|
|
29
|
+
**
|
|
30
|
+
** Notes:
|
|
31
|
+
**
|
|
32
|
+
** 1) This function is based on the GCONV2H Fortran subroutine by
|
|
33
|
+
** Toshio Fukushima (see reference).
|
|
34
|
+
**
|
|
35
|
+
** 2) The equatorial radius, a, can be in any units, but meters is
|
|
36
|
+
** the conventional choice.
|
|
37
|
+
**
|
|
38
|
+
** 3) The flattening, f, is (for the Earth) a value around 0.00335,
|
|
39
|
+
** i.e. around 1/298.
|
|
40
|
+
**
|
|
41
|
+
** 4) The equatorial radius, a, and the geocentric vector, xyz,
|
|
42
|
+
** must be given in the same units, and determine the units of
|
|
43
|
+
** the returned height, height.
|
|
44
|
+
**
|
|
45
|
+
** 5) If an error occurs (status < 0), elong, phi and height are
|
|
46
|
+
** unchanged.
|
|
47
|
+
**
|
|
48
|
+
** 6) The inverse transformation is performed in the function
|
|
49
|
+
** iauGd2gce.
|
|
50
|
+
**
|
|
51
|
+
** 7) The transformation for a standard ellipsoid (such as WGS84) can
|
|
52
|
+
** more conveniently be performed by calling iauGc2gd, which uses a
|
|
53
|
+
** numerical code to identify the required A and F values.
|
|
54
|
+
**
|
|
55
|
+
** Reference:
|
|
56
|
+
**
|
|
57
|
+
** Fukushima, T., "Transformation from Cartesian to geodetic
|
|
58
|
+
** coordinates accelerated by Halley's method", J.Geodesy (2006)
|
|
59
|
+
** 79: 689-693
|
|
60
|
+
**
|
|
61
|
+
** This revision: 2012 February 23
|
|
62
|
+
**
|
|
63
|
+
** Original version 2012-03-01
|
|
64
|
+
**
|
|
65
|
+
** Copyright (C) 2013 Naoki Arita. See notes at end.
|
|
66
|
+
*/
|
|
67
|
+
{
|
|
68
|
+
double aeps2, e2, e4t, ec2, ec, b, x, y, z, p2, absz, p, s0, pn, zc,
|
|
69
|
+
c0, c02, c03, s02, s03, a02, a0, a03, d0, f0, b0, s1,
|
|
70
|
+
cc, s12, cc2;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
/* ------------- */
|
|
74
|
+
/* Preliminaries */
|
|
75
|
+
/* ------------- */
|
|
76
|
+
|
|
77
|
+
/* Validate ellipsoid parameters. */
|
|
78
|
+
if ( f < 0.0 || f >= 1.0 ) return -1;
|
|
79
|
+
if ( a <= 0.0 ) return -2;
|
|
80
|
+
|
|
81
|
+
/* Functions of ellipsoid parameters (with further validation of f). */
|
|
82
|
+
aeps2 = a*a * 1e-32;
|
|
83
|
+
e2 = (2.0 - f) * f;
|
|
84
|
+
e4t = e2*e2 * 1.5;
|
|
85
|
+
ec2 = 1.0 - e2;
|
|
86
|
+
if ( ec2 <= 0.0 ) return -1;
|
|
87
|
+
ec = sqrt(ec2);
|
|
88
|
+
b = a * ec;
|
|
89
|
+
|
|
90
|
+
/* Cartesian components. */
|
|
91
|
+
x = xyz[0];
|
|
92
|
+
y = xyz[1];
|
|
93
|
+
z = xyz[2];
|
|
94
|
+
|
|
95
|
+
/* Distance from polar axis squared. */
|
|
96
|
+
p2 = x*x + y*y;
|
|
97
|
+
|
|
98
|
+
/* Longitude. */
|
|
99
|
+
*elong = p2 != 0.0 ? atan2(y, x) : 0.0;
|
|
100
|
+
|
|
101
|
+
/* Unsigned z-coordinate. */
|
|
102
|
+
absz = fabs(z);
|
|
103
|
+
|
|
104
|
+
/* Proceed unless polar case. */
|
|
105
|
+
if ( p2 > aeps2 ) {
|
|
106
|
+
|
|
107
|
+
/* Distance from polar axis. */
|
|
108
|
+
p = sqrt(p2);
|
|
109
|
+
|
|
110
|
+
/* Normalization. */
|
|
111
|
+
s0 = absz / a;
|
|
112
|
+
pn = p / a;
|
|
113
|
+
zc = ec * s0;
|
|
114
|
+
|
|
115
|
+
/* Prepare Newton correction factors. */
|
|
116
|
+
c0 = ec * pn;
|
|
117
|
+
c02 = c0 * c0;
|
|
118
|
+
c03 = c02 * c0;
|
|
119
|
+
s02 = s0 * s0;
|
|
120
|
+
s03 = s02 * s0;
|
|
121
|
+
a02 = c02 + s02;
|
|
122
|
+
a0 = sqrt(a02);
|
|
123
|
+
a03 = a02 * a0;
|
|
124
|
+
d0 = zc*a03 + e2*s03;
|
|
125
|
+
f0 = pn*a03 - e2*c03;
|
|
126
|
+
|
|
127
|
+
/* Prepare Halley correction factor. */
|
|
128
|
+
b0 = e4t * s02 * c02 * pn * (a0 - ec);
|
|
129
|
+
s1 = d0*f0 - b0*s0;
|
|
130
|
+
cc = ec * (f0*f0 - b0*c0);
|
|
131
|
+
|
|
132
|
+
/* Evaluate latitude and height. */
|
|
133
|
+
*phi = atan(s1/cc);
|
|
134
|
+
s12 = s1 * s1;
|
|
135
|
+
cc2 = cc * cc;
|
|
136
|
+
*height = (p*cc + absz*s1 - a * sqrt(ec2*s12 + cc2)) /
|
|
137
|
+
sqrt(s12 + cc2);
|
|
138
|
+
} else {
|
|
139
|
+
|
|
140
|
+
/* Exception: pole. */
|
|
141
|
+
*phi = DPI / 2.0;
|
|
142
|
+
*height = absz - b;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Restore sign of latitude. */
|
|
146
|
+
if ( z < 0 ) *phi = -*phi;
|
|
147
|
+
|
|
148
|
+
/* OK status. */
|
|
149
|
+
return 0;
|
|
150
|
+
|
|
151
|
+
/*----------------------------------------------------------------------
|
|
152
|
+
**
|
|
153
|
+
** Celes is a wrapper of the SOFA Library for Ruby.
|
|
154
|
+
**
|
|
155
|
+
** This file is redistributed and relicensed in accordance with
|
|
156
|
+
** the SOFA Software License (http://www.iausofa.org/tandc.html).
|
|
157
|
+
**
|
|
158
|
+
** The original library is available from IAU Standards of
|
|
159
|
+
** Fundamental Astronomy (http://www.iausofa.org/).
|
|
160
|
+
**
|
|
161
|
+
**
|
|
162
|
+
**
|
|
163
|
+
**
|
|
164
|
+
**
|
|
165
|
+
** Copyright (C) 2013, Naoki Arita
|
|
166
|
+
** All rights reserved.
|
|
167
|
+
**
|
|
168
|
+
** Redistribution and use in source and binary forms, with or without
|
|
169
|
+
** modification, are permitted provided that the following conditions
|
|
170
|
+
** are met:
|
|
171
|
+
**
|
|
172
|
+
** 1 Redistributions of source code must retain the above copyright
|
|
173
|
+
** notice, this list of conditions and the following disclaimer.
|
|
174
|
+
**
|
|
175
|
+
** 2 Redistributions in binary form must reproduce the above copyright
|
|
176
|
+
** notice, this list of conditions and the following disclaimer in
|
|
177
|
+
** the documentation and/or other materials provided with the
|
|
178
|
+
** distribution.
|
|
179
|
+
**
|
|
180
|
+
** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
|
|
181
|
+
** the International Astronomical Union nor the names of its
|
|
182
|
+
** contributors may be used to endorse or promote products derived
|
|
183
|
+
** from this software without specific prior written permission.
|
|
184
|
+
**
|
|
185
|
+
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
186
|
+
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
187
|
+
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
188
|
+
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
189
|
+
** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
190
|
+
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
191
|
+
** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
192
|
+
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
193
|
+
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
194
|
+
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
195
|
+
** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
196
|
+
** POSSIBILITY OF SUCH DAMAGE.
|
|
197
|
+
**
|
|
198
|
+
**--------------------------------------------------------------------*/
|
|
199
|
+
|
|
200
|
+
}
|
data/ext/celes/gd2gc.c
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#include "sofam.h"
|
|
2
|
+
|
|
3
|
+
int iauGd2gc ( int n, double elong, double phi, double height,
|
|
4
|
+
double xyz[3] )
|
|
5
|
+
/*
|
|
6
|
+
** - - - - - - - - -
|
|
7
|
+
** i a u G d 2 g c
|
|
8
|
+
** - - - - - - - - -
|
|
9
|
+
**
|
|
10
|
+
** Transform geodetic coordinates to geocentric using the specified
|
|
11
|
+
** reference ellipsoid.
|
|
12
|
+
**
|
|
13
|
+
** Status: canonical transformation.
|
|
14
|
+
**
|
|
15
|
+
** Given:
|
|
16
|
+
** n int ellipsoid identifier (Note 1)
|
|
17
|
+
** elong double longitude (radians, east +ve)
|
|
18
|
+
** phi double latitude (geodetic, radians, Note 3)
|
|
19
|
+
** height double height above ellipsoid (geodetic, Notes 2,3)
|
|
20
|
+
**
|
|
21
|
+
** Returned:
|
|
22
|
+
** xyz double[3] geocentric vector (Note 2)
|
|
23
|
+
**
|
|
24
|
+
** Returned (function value):
|
|
25
|
+
** int status: 0 = OK
|
|
26
|
+
** -1 = illegal identifier (Note 3)
|
|
27
|
+
** -2 = illegal case (Note 3)
|
|
28
|
+
**
|
|
29
|
+
** Notes:
|
|
30
|
+
**
|
|
31
|
+
** 1) The identifier n is a number that specifies the choice of
|
|
32
|
+
** reference ellipsoid. The following are supported:
|
|
33
|
+
**
|
|
34
|
+
** n ellipsoid
|
|
35
|
+
**
|
|
36
|
+
** 1 WGS84
|
|
37
|
+
** 2 GRS80
|
|
38
|
+
** 3 WGS72
|
|
39
|
+
**
|
|
40
|
+
** The n value has no significance outside the SOFA software. For
|
|
41
|
+
** convenience, symbols WGS84 etc. are defined in sofam.h.
|
|
42
|
+
**
|
|
43
|
+
** 2) The height (height, given) and the geocentric vector (xyz,
|
|
44
|
+
** returned) are in meters.
|
|
45
|
+
**
|
|
46
|
+
** 3) No validation is performed on the arguments elong, phi and
|
|
47
|
+
** height. An error status -1 means that the identifier n is
|
|
48
|
+
** illegal. An error status -2 protects against cases that would
|
|
49
|
+
** lead to arithmetic exceptions. In all error cases, xyz is set
|
|
50
|
+
** to zeros.
|
|
51
|
+
**
|
|
52
|
+
** 4) The inverse transformation is performed in the function iauGc2gd.
|
|
53
|
+
**
|
|
54
|
+
** Called:
|
|
55
|
+
** iauEform Earth reference ellipsoids
|
|
56
|
+
** iauGd2gce geodetic to geocentric transformation, general
|
|
57
|
+
** iauZp zero p-vector
|
|
58
|
+
**
|
|
59
|
+
** This revision: 2012 February 23
|
|
60
|
+
**
|
|
61
|
+
** Original version 2012-03-01
|
|
62
|
+
**
|
|
63
|
+
** Copyright (C) 2013 Naoki Arita. See notes at end.
|
|
64
|
+
*/
|
|
65
|
+
{
|
|
66
|
+
int j;
|
|
67
|
+
double a, f;
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/* Obtain reference ellipsoid parameters. */
|
|
71
|
+
j = iauEform ( n, &a, &f );
|
|
72
|
+
|
|
73
|
+
/* If OK, transform longitude, geodetic latitude, height to x,y,z. */
|
|
74
|
+
if ( j == 0 ) {
|
|
75
|
+
j = iauGd2gce ( a, f, elong, phi, height, xyz );
|
|
76
|
+
if ( j != 0 ) j = -2;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Deal with any errors. */
|
|
80
|
+
if ( j != 0 ) iauZp ( xyz );
|
|
81
|
+
|
|
82
|
+
/* Return the status. */
|
|
83
|
+
return j;
|
|
84
|
+
|
|
85
|
+
/*----------------------------------------------------------------------
|
|
86
|
+
**
|
|
87
|
+
** Celes is a wrapper of the SOFA Library for Ruby.
|
|
88
|
+
**
|
|
89
|
+
** This file is redistributed and relicensed in accordance with
|
|
90
|
+
** the SOFA Software License (http://www.iausofa.org/tandc.html).
|
|
91
|
+
**
|
|
92
|
+
** The original library is available from IAU Standards of
|
|
93
|
+
** Fundamental Astronomy (http://www.iausofa.org/).
|
|
94
|
+
**
|
|
95
|
+
**
|
|
96
|
+
**
|
|
97
|
+
**
|
|
98
|
+
**
|
|
99
|
+
** Copyright (C) 2013, Naoki Arita
|
|
100
|
+
** All rights reserved.
|
|
101
|
+
**
|
|
102
|
+
** Redistribution and use in source and binary forms, with or without
|
|
103
|
+
** modification, are permitted provided that the following conditions
|
|
104
|
+
** are met:
|
|
105
|
+
**
|
|
106
|
+
** 1 Redistributions of source code must retain the above copyright
|
|
107
|
+
** notice, this list of conditions and the following disclaimer.
|
|
108
|
+
**
|
|
109
|
+
** 2 Redistributions in binary form must reproduce the above copyright
|
|
110
|
+
** notice, this list of conditions and the following disclaimer in
|
|
111
|
+
** the documentation and/or other materials provided with the
|
|
112
|
+
** distribution.
|
|
113
|
+
**
|
|
114
|
+
** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
|
|
115
|
+
** the International Astronomical Union nor the names of its
|
|
116
|
+
** contributors may be used to endorse or promote products derived
|
|
117
|
+
** from this software without specific prior written permission.
|
|
118
|
+
**
|
|
119
|
+
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
120
|
+
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
121
|
+
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
122
|
+
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
123
|
+
** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
124
|
+
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
125
|
+
** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
126
|
+
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
127
|
+
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
128
|
+
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
129
|
+
** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
130
|
+
** POSSIBILITY OF SUCH DAMAGE.
|
|
131
|
+
**
|
|
132
|
+
**--------------------------------------------------------------------*/
|
|
133
|
+
|
|
134
|
+
}
|
data/ext/celes/gd2gce.c
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#include "sofam.h"
|
|
2
|
+
|
|
3
|
+
int iauGd2gce ( double a, double f, double elong, double phi,
|
|
4
|
+
double height, double xyz[3] )
|
|
5
|
+
/*
|
|
6
|
+
** - - - - - - - - - -
|
|
7
|
+
** i a u G d 2 g c e
|
|
8
|
+
** - - - - - - - - - -
|
|
9
|
+
**
|
|
10
|
+
** Transform geodetic coordinates to geocentric for a reference
|
|
11
|
+
** ellipsoid of specified form.
|
|
12
|
+
**
|
|
13
|
+
** Status: support function.
|
|
14
|
+
**
|
|
15
|
+
** Given:
|
|
16
|
+
** a double equatorial radius (Notes 1,4)
|
|
17
|
+
** f double flattening (Notes 2,4)
|
|
18
|
+
** elong double longitude (radians, east +ve)
|
|
19
|
+
** phi double latitude (geodetic, radians, Note 4)
|
|
20
|
+
** height double height above ellipsoid (geodetic, Notes 3,4)
|
|
21
|
+
**
|
|
22
|
+
** Returned:
|
|
23
|
+
** xyz double[3] geocentric vector (Note 3)
|
|
24
|
+
**
|
|
25
|
+
** Returned (function value):
|
|
26
|
+
** int status: 0 = OK
|
|
27
|
+
** -1 = illegal case (Note 4)
|
|
28
|
+
** Notes:
|
|
29
|
+
**
|
|
30
|
+
** 1) The equatorial radius, a, can be in any units, but meters is
|
|
31
|
+
** the conventional choice.
|
|
32
|
+
**
|
|
33
|
+
** 2) The flattening, f, is (for the Earth) a value around 0.00335,
|
|
34
|
+
** i.e. around 1/298.
|
|
35
|
+
**
|
|
36
|
+
** 3) The equatorial radius, a, and the height, height, must be
|
|
37
|
+
** given in the same units, and determine the units of the
|
|
38
|
+
** returned geocentric vector, xyz.
|
|
39
|
+
**
|
|
40
|
+
** 4) No validation is performed on individual arguments. The error
|
|
41
|
+
** status -1 protects against (unrealistic) cases that would lead
|
|
42
|
+
** to arithmetic exceptions. If an error occurs, xyz is unchanged.
|
|
43
|
+
**
|
|
44
|
+
** 5) The inverse transformation is performed in the function
|
|
45
|
+
** iauGc2gde.
|
|
46
|
+
**
|
|
47
|
+
** 6) The transformation for a standard ellipsoid (such as WGS84) can
|
|
48
|
+
** more conveniently be performed by calling iauGd2gc, which uses a
|
|
49
|
+
** numerical code to identify the required a and f values.
|
|
50
|
+
**
|
|
51
|
+
** References:
|
|
52
|
+
**
|
|
53
|
+
** Green, R.M., Spherical Astronomy, Cambridge University Press,
|
|
54
|
+
** (1985) Section 4.5, p96.
|
|
55
|
+
**
|
|
56
|
+
** Explanatory Supplement to the Astronomical Almanac,
|
|
57
|
+
** P. Kenneth Seidelmann (ed), University Science Books (1992),
|
|
58
|
+
** Section 4.22, p202.
|
|
59
|
+
**
|
|
60
|
+
** This revision: 2012 February 23
|
|
61
|
+
**
|
|
62
|
+
** Original version 2012-03-01
|
|
63
|
+
**
|
|
64
|
+
** Copyright (C) 2013 Naoki Arita. See notes at end.
|
|
65
|
+
*/
|
|
66
|
+
{
|
|
67
|
+
double sp, cp, w, d, ac, as, r;
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/* Functions of geodetic latitude. */
|
|
71
|
+
sp = sin(phi);
|
|
72
|
+
cp = cos(phi);
|
|
73
|
+
w = 1.0 - f;
|
|
74
|
+
w = w * w;
|
|
75
|
+
d = cp*cp + w*sp*sp;
|
|
76
|
+
if ( d <= 0.0 ) return -1;
|
|
77
|
+
ac = a / sqrt(d);
|
|
78
|
+
as = w * ac;
|
|
79
|
+
|
|
80
|
+
/* Geocentric vector. */
|
|
81
|
+
r = (ac + height) * cp;
|
|
82
|
+
xyz[0] = r * cos(elong);
|
|
83
|
+
xyz[1] = r * sin(elong);
|
|
84
|
+
xyz[2] = (as + height) * sp;
|
|
85
|
+
|
|
86
|
+
/* Success. */
|
|
87
|
+
return 0;
|
|
88
|
+
|
|
89
|
+
/*----------------------------------------------------------------------
|
|
90
|
+
**
|
|
91
|
+
** Celes is a wrapper of the SOFA Library for Ruby.
|
|
92
|
+
**
|
|
93
|
+
** This file is redistributed and relicensed in accordance with
|
|
94
|
+
** the SOFA Software License (http://www.iausofa.org/tandc.html).
|
|
95
|
+
**
|
|
96
|
+
** The original library is available from IAU Standards of
|
|
97
|
+
** Fundamental Astronomy (http://www.iausofa.org/).
|
|
98
|
+
**
|
|
99
|
+
**
|
|
100
|
+
**
|
|
101
|
+
**
|
|
102
|
+
**
|
|
103
|
+
** Copyright (C) 2013, Naoki Arita
|
|
104
|
+
** All rights reserved.
|
|
105
|
+
**
|
|
106
|
+
** Redistribution and use in source and binary forms, with or without
|
|
107
|
+
** modification, are permitted provided that the following conditions
|
|
108
|
+
** are met:
|
|
109
|
+
**
|
|
110
|
+
** 1 Redistributions of source code must retain the above copyright
|
|
111
|
+
** notice, this list of conditions and the following disclaimer.
|
|
112
|
+
**
|
|
113
|
+
** 2 Redistributions in binary form must reproduce the above copyright
|
|
114
|
+
** notice, this list of conditions and the following disclaimer in
|
|
115
|
+
** the documentation and/or other materials provided with the
|
|
116
|
+
** distribution.
|
|
117
|
+
**
|
|
118
|
+
** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
|
|
119
|
+
** the International Astronomical Union nor the names of its
|
|
120
|
+
** contributors may be used to endorse or promote products derived
|
|
121
|
+
** from this software without specific prior written permission.
|
|
122
|
+
**
|
|
123
|
+
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
124
|
+
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
125
|
+
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
126
|
+
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
127
|
+
** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
128
|
+
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
129
|
+
** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
130
|
+
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
131
|
+
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
132
|
+
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
133
|
+
** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
134
|
+
** POSSIBILITY OF SUCH DAMAGE.
|
|
135
|
+
**
|
|
136
|
+
**--------------------------------------------------------------------*/
|
|
137
|
+
|
|
138
|
+
}
|