13e12c5d1SDavid du Colombier #include "map.h" 23e12c5d1SDavid du Colombier 33e12c5d1SDavid du Colombier static struct coord stdp0, stdp1; 4*219b2ee8SDavid du Colombier static double k; 53e12c5d1SDavid du Colombier 63e12c5d1SDavid du Colombier static int 7*219b2ee8SDavid du Colombier Xlambert(struct place *place, double *x, double *y) 83e12c5d1SDavid du Colombier { 9*219b2ee8SDavid du Colombier double r; 103e12c5d1SDavid du Colombier if(place->nlat.l < -80.*RAD) 113e12c5d1SDavid du Colombier return(-1); 123e12c5d1SDavid du Colombier if(place->nlat.l > 89.*RAD) 133e12c5d1SDavid du Colombier r = 0; /* slovenly */ 143e12c5d1SDavid du Colombier else 153e12c5d1SDavid du Colombier r = stdp0.c*exp(0.5*k*log( 163e12c5d1SDavid du Colombier (1+stdp0.s)*(1-place->nlat.s)/((1-stdp0.s)*(1+place->nlat.s)))); 173e12c5d1SDavid du Colombier if(stdp1.l<0.) 183e12c5d1SDavid du Colombier r = -r; 193e12c5d1SDavid du Colombier *x = - r*sin(k * place->wlon.l); 203e12c5d1SDavid du Colombier *y = - r*cos(k * place->wlon.l); 213e12c5d1SDavid du Colombier return(1); 223e12c5d1SDavid du Colombier } 233e12c5d1SDavid du Colombier 243e12c5d1SDavid du Colombier proj 25*219b2ee8SDavid du Colombier lambert(double par0, double par1) 263e12c5d1SDavid du Colombier { 27*219b2ee8SDavid du Colombier double temp; 283e12c5d1SDavid du Colombier if(fabs(par0)>fabs(par1)){ 293e12c5d1SDavid du Colombier temp = par0; 303e12c5d1SDavid du Colombier par0 = par1; 313e12c5d1SDavid du Colombier par1 = temp; 323e12c5d1SDavid du Colombier } 333e12c5d1SDavid du Colombier deg2rad(par0, &stdp0); 343e12c5d1SDavid du Colombier deg2rad(par1, &stdp1); 353e12c5d1SDavid du Colombier if(fabs(par1+par0)<.1) 363e12c5d1SDavid du Colombier return(mercator()); 373e12c5d1SDavid du Colombier if(fabs(par1-par0)<.1) 383e12c5d1SDavid du Colombier return(perspective(-1.)); 393e12c5d1SDavid du Colombier if(fabs(par0)>89.5||fabs(par1)>89.5) 403e12c5d1SDavid du Colombier return(0); 413e12c5d1SDavid du Colombier k = 2*log(stdp1.c/stdp0.c)/log( 423e12c5d1SDavid du Colombier (1+stdp0.s)*(1-stdp1.s)/((1-stdp0.s)*(1+stdp1.s))); 433e12c5d1SDavid du Colombier return(Xlambert); 443e12c5d1SDavid du Colombier } 45