地面站终端 App

381 lines
17 KiB

/*****************************************************************************
* Copyright (c) 2008, University of Florida.
* All rights reserved.
*
* This file is part of OpenJAUS. OpenJAUS is distributed under the BSD
* license. See the LICENSE file for details.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of the University of Florida nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
****************************************************************************/
/* Projection codes
0 = Geographic
1 = Universal Transverse Mercator (UTM)
2 = State Plane Coordinates
3 = Albers Conical Equal Area
4 = Lambert Conformal Conic
5 = Mercator
6 = Polar Stereographic
7 = Polyconic
8 = Equidistant Conic
9 = Transverse Mercator
10 = Stereographic
11 = Lambert Azimuthal Equal Area
12 = Azimuthal Equidistant
13 = Gnomonic
14 = Orthographic
15 = General Vertical Near-Side Perspective
16 = Sinusiodal
17 = Equirectangular
18 = Miller Cylindrical
19 = Van der Grinten
20 = (Hotine) Oblique Mercator
21 = Robinson
22 = Space Oblique Mercator (SOM)
23 = Alaska Conformal
24 = Interrupted Goode Homolosine
25 = Mollweide
26 = Interrupted Mollweide
27 = Hammer
28 = Wagner IV
29 = Wagner VII
30 = Oblated Equal Area
99 = User defined
*/
/* Define projection codes */
#define GEO 0
#define UTM 1
#define SPCS 2
#define ALBERS 3
#define LAMCC 4
#define MERCAT 5
#define PS 6
#define POLYC 7
#define EQUIDC 8
#define TM 9
#define STEREO 10
#define LAMAZ 11
#define AZMEQD 12
#define GNOMON 13
#define ORTHO 14
#define GVNSP 15
#define SNSOID 16
#define EQRECT 17
#define MILLER 18
#define VGRINT 19
#define HOM 20
#define ROBIN 21
#define SOM 22
#define ALASKA 23
#define GOOD 24
#define MOLL 25
#define IMOLL 26
#define HAMMER 27
#define WAGIV 28
#define WAGVII 29
#define OBEQA 30
#define USDEF 99
/* Define unit code numbers to their names */
#define RADIAN 0 /* Radians */
#define FEET 1 /* Feed */
#define METER 2 /* Meters */
#define SECOND 3 /* Seconds */
#define DEGREE 4 /* Decimal degrees */
#define INT_FEET 5 /* International Feet */
/* The STPLN_TABLE unit value is specifically used for State Plane -- if units
equals STPLN_TABLE and Datum is NAD83--actual units are retrieved from
a table according to the zone. If Datum is NAD27--actual units will be feet.
An error will occur with this unit if the projection is not State Plane. */
#define STPLN_TABLE 6
/* General code numbers */
#define IN_BREAK -2 /* Return status if the interupted projection
point lies in the break area */
#define COEFCT 15 /* projection coefficient count */
#define PROJCT 30 /* projection count */
#define SPHDCT 31 /* spheroid count */
#define MAXPROJ 31 /* Maximum projection number */
#define MAXUNIT 5 /* Maximum unit code number */
#define GEO_TERM 0 /* Array index for print-to-term flag */
#define GEO_FILE 1 /* Array index for print-to-file flag */
#define GEO_TRUE 1 /* True value for geometric true/false flags */
#define GEO_FALSE -1 /* False val for geometric true/false flags */
/* GCTP Function prototypes */
long alberforint(double r_maj, double r_min, double lat1, double lat2,
double lon0, double lat0, double false_east, double false_north);
long alberfor(double lon, double lat, double *x, double *y);
long alberinvint( double r_maj, double r_min, double lat1, double lat2,
double lon0, double lat0, double false_east, double false_north);
long alberinv( double x, double y, double *lon, double *lat);
long alconforint( double r_maj, double r_min, double false_east,
double false_north);
long alconfor(double lon, double lat, double *x, double *y);
long alconinvint( double r_maj, double r_min, double false_east,
double false_north);
long alconinv( double x, double y, double *lon, double *lat);
long azimforint( double r_maj, double center_lon, double center_lat,
double false_east, double false_north);
long azimfor( double lon, double lat, double *x, double *y);
long aziminvint( double r_maj, double center_lon, double center_lat,
double false_east, double false_north);
long aziminv( double x, double y, double *lon, double *lat);
/* Functions residing in cproj.c */
void sincos( double val, double *sin_val, double *cos_val);
double asinz (double con);
double msfnz (double eccent, double sinphi, double cosphi);
double qsfnz (double eccent, double sinphi, double cosphi);
double phi1z (double eccent, double qs, long *flag);
double phi2z(double eccent, double ts, long *flag);
double phi3z(double ml, double e0, double e1, double e2, double e3,
long *flag);
double phi4z (double eccent, double e0, double e1, double e2, double e3,
double a, double b, double *c, double *phi);
double pakcz(double pak);
double pakr2dm(double pak);
double tsfnz(double eccent, double phi, double sinphi);
int sign(double x);
double adjust_lon(double x);
double e0fn(double x);
double e1fn(double x);
double e2fn(double x);
double e3fn(double x);
double e4fn(double x);
double mlfn(double e0,double e1,double e2,double e3,double phi);
long calc_utm_zone(double lon);
/* End of functions residing in cproj.h */
long eqconforint(double r_maj, double r_min, double lat1, double lat2,
double center_lon, double center_lat, double false_east,
double false_north,
long mode);
long eqconfor(double lon, double lat, double *x, double *y);
long eqconinvint(double r_maj, double r_min, double lat1, double lat2,
double center_lon, double center_lat, double false_east,
double false_north, long mode);
long eqconinv(double x, double y, double *lon, double *lat);
long equiforint(double r_maj, double center_lon, double lat1,
double false_east, double false_north);
long equifor(double lon, double lat, double *x, double *y);
long equiinvint(double r_maj, double center_lon, double lat1,
double false_east, double false_north);
long equiinv(double x, double y, double *lon, double *lat);
void for_init(long outsys, long outzone, double *outparm, long outspheroid,
char *fn27, char *fn83, long *iflg, long (*for_trans[])());
void gctp(double *incoor, long *insys, long *inzone, double *inparm,
long *inunit, long *inspheroid, long *ipr, char *efile, long *jpr,
char *pfile, double *outcoor, long *outsys, long *outzone,
double *outparm, long *outunit, long *outspheroid, char fn27[],
char fn83[], long *iflg);
long gnomforint(double r, double center_long, double center_lat,
double false_east, double false_north);
long gnomfor(double lon, double lat, double *x, double *y);
long gnominvint(double r, double center_long, double center_lat,
double false_east, double false_north);
long gnominv(double x, double y, double *lon, double *lat);
long goodforint(double r);
long goodfor(double lon, double lat, double *x, double *y);
long goodinvint(double r);
long goodinv(double x, double y, double *lon, double *lat);
long gvnspforint(double r, double h, double center_long, double center_lat,
double false_east, double false_north);
long gvnspfor(double lon, double lat, double *x, double *y);
long gvnspinvint(double r, double h, double center_long, double center_lat,
double false_east, double false_north);
long gvnspinv(double x, double y, double *lon, double *lat);
long hamforint(double r, double center_long, double false_east,
double false_north);
long hamfor(double lon, double lat, double *x, double *y);
long haminvint(double r, double center_long, double false_east,
double false_north);
long haminv(double x, double y, double *lon, double *lat);
long imolwforint(double r);
long imolwfor(double lon, double lat, double *x, double *y);
long imolwinvint(double r);
long imolwinv(double x, double y, double *lon, double *lat);
void inv_init(long insys, long inzone, double *inparm, long inspheroid,
char *fn27, char *fn83, long *iflg, long (*inv_trans[])());
long lamazforint(double r, double center_long, double center_lat,
double false_east, double false_north);
long lamazfor(double lon, double lat, double *x, double *y);
long lamazinvint(double r, double center_long, double center_lat,
double false_east, double false_north);
long lamazinv(double x, double y, double *lon, double *lat);
long lamccforint(double r_maj, double r_min, double lat1, double lat2,
double c_lon, double c_lat, double false_east, double false_north);
long lamccfor(double lon, double lat, double *x, double *y);
long lamccinvint(double r_maj, double r_min, double lat1, double lat2,
double c_lon, double c_lat, double false_east, double false_north);
long lamccinv(double x, double y, double *lon, double *lat);
long merforint(double r_maj, double r_min, double center_lon, double center_lat,
double false_east, double false_north);
long merfor(double lon, double lat, double *x, double *y);
long merinvint(double r_maj, double r_min, double center_lon, double center_lat,
double false_east, double false_north);
long merinv(double x, double y, double *lon, double *lat);
long millforint(double r, double center_long, double false_east,
double false_north);
long millfor(double lon, double lat, double *x, double *y);
long millinvint(double r, double center_long, double false_east,
double false_north);
long millinv(double x, double y, double *lon, double *lat);
long molwforint(double r, double center_long, double false_east,
double false_north);
long molwfor(double lon, double lat, double *x, double *y);
long molwinvint(double r, double center_long, double false_east,
double false_north);
long molwinv(double x, double y, double *lon, double *lat);
long obleqforint(double r, double center_long, double center_lat,
double shape_m, double shape_n, double angle, double false_east,
double false_north);
long obleqfor(double lon, double lat, double *x, double *y);
long obleqinvint(double r, double center_long, double center_lat,
double shape_m, double shape_n, double angle, double false_east,
double false_north);
long omerforint(double r_maj, double r_min, double scale_fact,
double azimuth, double lon_orig, double lat_orig, double false_east,
double false_north, double lon1, double lat1, double lon2, double lat2,
long mode);
long omerfor(double lon, double lat, double *x, double *y);
long omerinvint(double r_maj, double r_min, double scale_fact, double azimuth,
double lon_orig, double lat_orig, double false_east, double false_north,
double lon1, double lat1, double lon2, double lat2, long mode);
long omerinv(double x, double y, double *lon, double *lat);
long orthforint(double r_maj, double center_lon, double center_lat,
double false_east, double false_north);
long orthfor( double lon, double lat, double *x, double *y);
long orthinvint(double r_maj, double center_lon, double center_lat,
double false_east, double false_north);
long orthinv(double x, double y, double *lon, double *lat);
double paksz(double ang, long *iflg);
long polyforint(double r_maj, double r_min, double center_lon,
double center_lat, double false_east, double false_north);
long polyfor(double lon, double lat, double *x, double *y);
long polyinvint(double r_maj, double r_min, double center_lon,
double center_lat, double false_east, double false_north);
long polyinv(double x, double y, double *lon, double *lat);
long psforint(double r_maj, double r_min, double c_lon, double c_lat,
double false_east, double false_north);
long psfor( double lon, double lat, double *x, double *y);
long psinvint(double r_maj, double r_min, double c_lon, double c_lat,
double false_east, double false_north);
long psinv( double x, double y, double *lon, double *lat);
/* functions in report.c */
void close_file();
long init(long ipr, long jpr, char *efile, char *pfile);
void ptitle(char *A);
void radius(double A);
void radius2(double A, double B);
void cenlon( double A);
void cenlonmer(double A);
void cenlat(double A);
void origin(double A);
void stanparl(double A,double B);
void stparl1(double A);
void offsetp(double A, double B);
void genrpt(double A, char *S);
void genrpt_long(long A, char *S);
void pblank();
void p_error(char *what, char *where);
/* End of the report.c functions */
long robforint(double r, double center_long, double false_east,
double false_north);
long robfor( double lon, double lat, double *x, double *y);
long robinvint(double r, double center_long, double false_east,
double false_north);
long robinv(double x, double y, double *lon, double *lat);
long sinforint(double r, double center_long, double false_east,
double false_north);
long sinfor(double lon, double lat, double *x, double *y);
long sininvint(double r, double center_long, double false_east,
double false_north);
long sininv(double x, double y, double *lon, double *lat);
long somforint(double r_major, double r_minor, long satnum, long path,
double alf_in, double lon, double false_east, double false_north,
double time, long start1, long flag);
long somfor(double lon, double lat, double *x, double *y);
/*static double som_series(double *fb, double *fa2, double *fa4, double *fc1,
double *fc3,double *dlam);*/
long sominvint(double r_major, double r_minor, long satnum, long path,
double alf_in, double lon, double false_east, double false_north,
double time, long start1, long flag);
long sominv(double x, double y, double *lon, double *lat);
void sphdz(long isph, double *parm, double *r_major, double *r_minor,
double *radius);
long sterforint(double r_maj, double center_lon, double center_lat,
double false_east, double false_north);
long sterfor(double lon, double lat, double *x, double *y);
long sterinvint(double r_maj, double center_lon, double center_lat,
double false_east, double false_north);
long sterinv(double x, double y, double *lon, double *lat);
long stplnforint(long zone, long sphere, char *fn27, char *fn83);
long stplnfor(double lon, double lat, double *x, double *y);
long stplninvint(long zone, long sphere, char *fn27, char *fn83);
long stplninv(double x, double y, double *lon, double *lat);
long tmforint(double r_maj, double r_min, double scale_fact,
double center_lon, double center_lat, double false_east,
double false_north);
long tmfor(double lon, double lat, double *x, double *y);
long tminvint(double r_maj, double r_min, double scale_fact,
double center_lon, double center_lat, double false_east,
double false_north);
long tminv(double x, double y, double *lon, double *lat);
long untfz(long inunit, long outunit, double *factor);
long utmforint(double r_maj, double r_min, double scale_fact, long zone);
long utmfor(double lon, double lat, double *x, double *y);
long utminvint(double r_maj, double r_min, double scale_fact, long zone);
long utminv(double x, double y, double *lon, double *lat);
long vandgforint(double r, double center_long, double false_east,
double false_north);
long vandgfor( double lon, double lat, double *x, double *y);
long vandginvint(double r, double center_long, double false_east,
double false_north);
long vandginv(double x, double y, double *lon, double *lat);
long wivforint(double r, double center_long, double false_east,
double false_north);
long wivfor(double lon, double lat, double *x, double *y);
long wivinvint(double r, double center_long, double false_east,
double false_north);
long wivinv(double x, double y, double *lon, double *lat);
long wviiforint(double r, double center_long, double false_east,
double false_north);
long wviifor(double lon, double lat, double *x, double *y);
long wviiinvint( double r, double center_long, double false_east,
double false_north);
long wviiinv(double x, double y, double *lon, double *lat);