4 #include "../../shared/shared.h"
8 int Xy2llx(
double* lat,
double* lon,
double* x,
double* y,
int ncoord,
int sgn){
24 double central_meridian,standard_parallel;
26 Xy2lldef(¢ral_meridian,&standard_parallel,sgn);
28 return(
Xy2llx(lat,lon,x,y,ncoord,sgn,central_meridian,standard_parallel));
31 int Xy2llx(
double* lat,
double* lon,
double* x,
double* y,
int ncoord,
int sgn,
double central_meridian,
double standard_parallel){
51 double sl,rho,cm,T,chi;
53 if((sgn!=1) && (sgn!=-1))
_error_(
"Sign should be either +1 or -1.\n");
55 delta = central_meridian;
56 slat = standard_parallel;
66 for(i=0; i<ncoord; i++){
68 cm = cos(sl)/sqrt(1.0-ex2*(pow(sin(sl),2)));
69 rho= sqrt(pow(x[i],2) + pow(y[i],2));
70 T = tan((
PI/4.0) - (sl/2.0))/pow(((1.0-ex*sin(sl))/(1.0+ex*sin(sl))),(ex/2.0));
72 if(fabs(slat-90.) < 1.e-5)
73 T =rho*sqrt(pow((1.+ex),(1.+ex))*pow((1.-ex),(1.-ex)))/2./re;
77 chi = (
PI / 2.0) - 2.0 * atan(T);
78 lat[i] = chi + ((ex2 / 2.0) + (5.0 * pow(ex2,2.0) / 24.0) + (pow(ex2,3.0) / 12.0)) *
79 sin(2.0 * chi) + ((7.0 * pow(ex2,2.0) / 48.0) + (29.0 * pow(ex2,3.0) / 240.0)) *
80 sin(4.0 * chi) + (7.0 * pow(ex2,3.0) / 120.0) * sin(6.0 * chi) ;
82 lat[i] = (double)sgn * lat[i];
83 lon[i] = atan2((
double)sgn * x[i],-(
double)sgn * y[i]);
84 lon[i] = (double)sgn * lon[i];
87 lat[i] = 90. * (double)sgn;
92 lon[i] = lon[i] * 180. /
PI;
93 lat[i] = lat[i] * 180. /
PI;
94 lon[i] = lon[i] - delta;
100 void Xy2lldef(
double* pdelta,
double* pslat,
int sgn){
122 if(flag)
_printf0_(
"Warning: expecting coordinates in polar stereographic (Std Latitude: 70N Meridian: 45).\n");
124 else if (sgn == -1) {
127 if(flag)
_printf0_(
"Warning: expecting coordinates in polar stereographic (Std Latitude: 71S Meridian: 0).\n");
129 else _error_(
"Sign should be either +1 or -1.\n");