00001 /*============================================================================ 00002 00003 WCSLIB 4.4 - an implementation of the FITS WCS standard. 00004 Copyright (C) 1995-2009, Mark Calabretta 00005 00006 This file is part of WCSLIB. 00007 00008 WCSLIB is free software: you can redistribute it and/or modify it under the 00009 terms of the GNU Lesser General Public License as published by the Free 00010 Software Foundation, either version 3 of the License, or (at your option) 00011 any later version. 00012 00013 WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY 00014 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 00016 more details. 00017 00018 You should have received a copy of the GNU Lesser General Public License 00019 along with WCSLIB. If not, see <http://www.gnu.org/licenses/>. 00020 00021 Correspondence concerning WCSLIB may be directed to: 00022 Internet email: mcalabre@atnf.csiro.au 00023 Postal address: Dr. Mark Calabretta 00024 Australia Telescope National Facility, CSIRO 00025 PO Box 76 00026 Epping NSW 1710 00027 AUSTRALIA 00028 00029 Author: Mark Calabretta, Australia Telescope National Facility 00030 http://www.atnf.csiro.au/~mcalabre/index.html 00031 $Id: prj_8h-source.html,v 1.1 2009/09/14 20:25:24 irby Exp $ 00032 *============================================================================= 00033 * 00034 * WCSLIB 4.4 - C routines that implement the spherical map projections 00035 * recognized by the FITS World Coordinate System (WCS) standard. Refer to 00036 * 00037 * "Representations of world coordinates in FITS", 00038 * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) 00039 * 00040 * "Representations of celestial coordinates in FITS", 00041 * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) 00042 * 00043 * Refer to the README file provided with WCSLIB for an overview of the 00044 * library. 00045 * 00046 * 00047 * Summary of the prj routines 00048 * --------------------------- 00049 * These routines implement the spherical map projections defined by the FITS 00050 * WCS standard. They are based on the prjprm struct which contains all 00051 * information needed for the computations. The struct contains some members 00052 * that must be set by the user, and others that are maintained by these 00053 * routines, somewhat like a C++ class but with no encapsulation. 00054 * 00055 * Routine prjini() is provided to initialize the prjprm struct with default 00056 * values, and another, prjprt(), to print its contents. 00057 * 00058 * Setup routines for each projection with names of the form ???set(), where 00059 * "???" is the down-cased three-letter projection code, compute intermediate 00060 * values in the prjprm struct from parameters in it that were supplied by the 00061 * user. The struct always needs to be set by the projection's setup routine 00062 * but that need not be called explicitly - refer to the explanation of 00063 * prjprm::flag. 00064 * 00065 * Each map projection is implemented via separate functions for the spherical 00066 * projection, ???s2x(), and deprojection, ???x2s(). 00067 * 00068 * A set of driver routines, prjset(), prjx2s(), and prjs2x(), provides a 00069 * generic interface to the specific projection routines which they invoke 00070 * via pointers-to-functions stored in the prjprm struct. 00071 * 00072 * In summary, the routines are: 00073 * - prjini() Initialization routine for the prjprm struct. 00074 * - prjprt() Routine to print the prjprm struct. 00075 * 00076 * - prjset(), prjx2s(), prjs2x(): Generic driver routines 00077 * 00078 * - azpset(), azpx2s(), azps2x(): AZP (zenithal/azimuthal perspective) 00079 * - szpset(), szpx2s(), szps2x(): SZP (slant zenithal perspective) 00080 * - tanset(), tanx2s(), tans2x(): TAN (gnomonic) 00081 * - stgset(), stgx2s(), stgs2x(): STG (stereographic) 00082 * - sinset(), sinx2s(), sins2x(): SIN (orthographic/synthesis) 00083 * - arcset(), arcx2s(), arcs2x(): ARC (zenithal/azimuthal equidistant) 00084 * - zpnset(), zpnx2s(), zpns2x(): ZPN (zenithal/azimuthal polynomial) 00085 * - zeaset(), zeax2s(), zeas2x(): ZEA (zenithal/azimuthal equal area) 00086 * - airset(), airx2s(), airs2x(): AIR (Airy) 00087 * - cypset(), cypx2s(), cyps2x(): CYP (cylindrical perspective) 00088 * - ceaset(), ceax2s(), ceas2x(): CEA (cylindrical equal area) 00089 * - carset(), carx2s(), cars2x(): CAR (Plate carree) 00090 * - merset(), merx2s(), mers2x(): MER (Mercator) 00091 * - sflset(), sflx2s(), sfls2x(): SFL (Sanson-Flamsteed) 00092 * - parset(), parx2s(), pars2x(): PAR (parabolic) 00093 * - molset(), molx2s(), mols2x(): MOL (Mollweide) 00094 * - aitset(), aitx2s(), aits2x(): AIT (Hammer-Aitoff) 00095 * - copset(), copx2s(), cops2x(): COP (conic perspective) 00096 * - coeset(), coex2s(), coes2x(): COE (conic equal area) 00097 * - codset(), codx2s(), cods2x(): COD (conic equidistant) 00098 * - cooset(), coox2s(), coos2x(): COO (conic orthomorphic) 00099 * - bonset(), bonx2s(), bons2x(): BON (Bonne) 00100 * - pcoset(), pcox2s(), pcos2x(): PCO (polyconic) 00101 * - tscset(), tscx2s(), tscs2x(): TSC (tangential spherical cube) 00102 * - cscset(), cscx2s(), cscs2x(): CSC (COBE spherical cube) 00103 * - qscset(), qscx2s(), qscs2x(): QSC (quadrilateralized spherical cube) 00104 * - hpxset(), hpxx2s(), hpxs2x(): HPX (HEALPix) 00105 * 00106 * Argument checking (projection routines): 00107 * ---------------------------------------- 00108 * The values of phi and theta (the native longitude and latitude) normally lie 00109 * in the range [-180,180] for phi, and [-90,90] for theta. However, all 00110 * projection routines will accept any value of phi and will not normalize it. 00111 * 00112 * The projection routines do not explicitly check that theta lies within the 00113 * range [-90,90]. They do check for any value of theta that produces an 00114 * invalid argument to the projection equations (e.g. leading to division by 00115 * zero). The projection routines for AZP, SZP, TAN, SIN, ZPN, and COP also 00116 * return error 2 if (phi,theta) corresponds to the overlapped (far) side of 00117 * the projection but also return the corresponding value of (x,y). This 00118 * strict bounds checking may be relaxed at any time by setting prjprm::bounds 00119 * to 0 (rather than 1); the projections need not be reinitialized. 00120 * 00121 * Argument checking (deprojection routines): 00122 * ------------------------------------------ 00123 * Error checking on the projected coordinates (x,y) is limited to that 00124 * required to ascertain whether a solution exists. Where a solution does 00125 * exist no check is made that the value of phi and theta obtained lie within 00126 * the ranges [-180,180] for phi, and [-90,90] for theta. 00127 * 00128 * Accuracy: 00129 * --------- 00130 * No warranty is given for the accuracy of these routines (refer to the 00131 * copyright notice); intending users must satisfy for themselves their 00132 * adequacy for the intended purpose. However, closure to a precision of at 00133 * least 1E-10 degree of longitude and latitude has been verified for typical 00134 * projection parameters on the 1 degree graticule of native longitude and 00135 * latitude (to within 5 degrees of any latitude where the projection may 00136 * diverge). Refer to the tprj1.c and tprj2.c test routines that accompany 00137 * this software. 00138 * 00139 * 00140 * prjini() - Default constructor for the prjprm struct 00141 * ---------------------------------------------------- 00142 * prjini() sets all members of a prjprm struct to default values. It should 00143 * be used to initialize every prjprm struct. 00144 * 00145 * Returned: 00146 * prj struct prjprm* 00147 * Projection parameters. 00148 * 00149 * Function return value: 00150 * int Status return value: 00151 * 0: Success. 00152 * 1: Null prjprm pointer passed. 00153 * 00154 * 00155 * prjprt() - Print routine for the prjprm struct 00156 * ---------------------------------------------- 00157 * prjprt() prints the contents of a prjprm struct. 00158 * 00159 * Given: 00160 * prj const struct prjprm* 00161 * Projection parameters. 00162 * 00163 * Function return value: 00164 * int Status return value: 00165 * 0: Success. 00166 * 1: Null prjprm pointer passed. 00167 * 00168 * 00169 * prjset() - Generic setup routine for the prjprm struct 00170 * ------------------------------------------------------ 00171 * prjset() sets up a prjprm struct according to information supplied within 00172 * it. 00173 * 00174 * Note that this routine need not be called directly; it will be invoked by 00175 * prjx2s() and prjs2x() if prj.flag is anything other than a predefined magic 00176 * value. 00177 * 00178 * The one important distinction between prjset() and the setup routines for 00179 * the specific projections is that the projection code must be defined in the 00180 * prjprm struct in order for prjset() to identify the required projection. 00181 * Once prjset() has initialized the prjprm struct, prjx2s() and prjs2x() use 00182 * the pointers to the specific projection and deprojection routines contained 00183 * therein. 00184 * 00185 * Given and returned: 00186 * prj struct prjprm* 00187 * Projection parameters. 00188 * 00189 * Function return value: 00190 * int Status return value: 00191 * 0: Success. 00192 * 1: Null prjprm pointer passed. 00193 * 2: Invalid projection parameters. 00194 * 00195 * 00196 * prjx2s() - Generic Cartesian-to-spherical deprojection 00197 * ------------------------------------------------------ 00198 * Deproject Cartesian (x,y) coordinates in the plane of projection to native 00199 * spherical coordinates (phi,theta). 00200 * 00201 * The projection is that specified by prjprm::code. 00202 * 00203 * Given and returned: 00204 * prj struct prjprm* 00205 * Projection parameters. 00206 * 00207 * Given: 00208 * nx,ny int Vector lengths. 00209 * sxy,spt int Vector strides. 00210 * x,y const double[] 00211 * Projected coordinates. 00212 * 00213 * Returned: 00214 * phi,theta double[] Longitude and latitude (phi,theta) of the projected 00215 * point in native spherical coordinates [deg]. 00216 * stat int[] Status return value for each vector element: 00217 * 0: Success. 00218 * 1: Invalid value of (x,y). 00219 * 00220 * Function return value: 00221 * int Status return value: 00222 * 0: Success. 00223 * 1: Null prjprm pointer passed. 00224 * 2: Invalid projection parameters. 00225 * 3: One or more of the (x,y) coordinates were 00226 * invalid, as indicated by the stat vector. 00227 * 00228 * 00229 * prjs2x() - Generic spherical-to-Cartesian projection 00230 * ---------------------------------------------------- 00231 * Project native spherical coordinates (phi,theta) to Cartesian (x,y) 00232 * coordinates in the plane of projection. 00233 * 00234 * The projection is that specified by prjprm::code. 00235 * 00236 * Given and returned: 00237 * prj struct prjprm* 00238 * Projection parameters. 00239 * 00240 * Given: 00241 * nphi, 00242 * ntheta int Vector lengths. 00243 * spt,sxy int Vector strides. 00244 * phi,theta const double[] 00245 * Longitude and latitude (phi,theta) of the projected 00246 * point in native spherical coordinates [deg]. 00247 * 00248 * Returned: 00249 * x,y double[] Projected coordinates. 00250 * stat int[] Status return value for each vector element: 00251 * 0: Success. 00252 * 1: Invalid value of (phi,theta). 00253 * 00254 * Function return value: 00255 * int Status return value: 00256 * 0: Success. 00257 * 1: Null prjprm pointer passed. 00258 * 2: Invalid projection parameters. 00259 * 4: One or more of the (phi,theta) coordinates 00260 * were, invalid, as indicated by the stat vector. 00261 * 00262 * 00263 * ???set() - Specific setup routines for the prjprm struct 00264 * -------------------------------------------------------- 00265 * Set up a prjprm struct for a particular projection according to information 00266 * supplied within it. 00267 * 00268 * Given and returned: 00269 * prj struct prjprm* 00270 * Projection parameters. 00271 * 00272 * Function return value: 00273 * int Status return value: 00274 * 0: Success. 00275 * 1: Null prjprm pointer passed. 00276 * 2: Invalid projection parameters. 00277 * 00278 * 00279 * ???x2s() - Specific Cartesian-to-spherical deprojection routines 00280 * ---------------------------------------------------------------- 00281 * Transform (x,y) coordinates in the plane of projection to native spherical 00282 * coordinates (phi,theta). 00283 * 00284 * Given and returned: 00285 * prj struct prjprm* 00286 * Projection parameters. 00287 * 00288 * Given: 00289 * nx,ny int Vector lengths. 00290 * sxy,spt int Vector strides. 00291 * x,y const double[] 00292 * Projected coordinates. 00293 * 00294 * Returned: 00295 * phi,theta double[] Longitude and latitude of the projected point in 00296 * native spherical coordinates [deg]. 00297 * stat int[] Status return value for each vector element: 00298 * 0: Success. 00299 * 1: Invalid value of (x,y). 00300 * 00301 * Function return value: 00302 * int Status return value: 00303 * 0: Success. 00304 * 1: Null prjprm pointer passed. 00305 * 2: Invalid projection parameters. 00306 * 3: One or more of the (x,y) coordinates were 00307 * invalid, as indicated by the stat vector. 00308 * 00309 * 00310 * ???s2x() - Specific spherical-to-Cartesian projection routines 00311 *--------------------------------------------------------------- 00312 * Transform native spherical coordinates (phi,theta) to (x,y) coordinates in 00313 * the plane of projection. 00314 * 00315 * Given and returned: 00316 * prj struct prjprm* 00317 * Projection parameters. 00318 * 00319 * Given: 00320 * nphi, 00321 * ntheta int Vector lengths. 00322 * spt,sxy int Vector strides. 00323 * phi,theta const double[] 00324 * Longitude and latitude of the projected point in 00325 * native spherical coordinates [deg]. 00326 * 00327 * Returned: 00328 * x,y double[] Projected coordinates. 00329 * stat int[] Status return value for each vector element: 00330 * 0: Success. 00331 * 1: Invalid value of (phi,theta). 00332 * 00333 * Function return value: 00334 * int Status return value: 00335 * 0: Success. 00336 * 1: Null prjprm pointer passed. 00337 * 2: Invalid projection parameters. 00338 * 4: One or more of the (phi,theta) coordinates 00339 * were, invalid, as indicated by the stat vector. 00340 * 00341 * prjprm struct - Projection parameters 00342 * ------------------------------------- 00343 * The prjprm struct contains all information needed to project or deproject 00344 * native spherical coordinates. It consists of certain members that must be 00345 * set by the user ("given") and others that are set by the WCSLIB routines 00346 * ("returned"). Some of the latter are supplied for informational purposes 00347 * while others are for internal use only. 00348 * 00349 * int flag 00350 * (Given and returned) This flag must be set to zero whenever any of the 00351 * following prjprm struct members are set or changed: 00352 * 00353 * - prjprm::code, 00354 * - prjprm::r0, 00355 * - prjprm::pv[], 00356 * - prjprm::phi0, 00357 * - prjprm::theta0. 00358 * 00359 * This signals the initialization routine (prjset() or ???set()) to 00360 * recompute the returned members of the prjprm struct. flag will then be 00361 * reset to indicate that this has been done. 00362 * 00363 * Note that flag need not be reset when prjprm::bounds is changed. 00364 * 00365 * char code[4] 00366 * (Given) Three-letter projection code defined by the FITS standard. 00367 * 00368 * double r0 00369 * (Given) The radius of the generating sphere for the projection, a linear 00370 * scaling parameter. If this is zero, it will be reset to its default 00371 * value of 180/pi (the value for FITS WCS). 00372 * 00373 * double pv[30] 00374 * (Given) Projection parameters. These correspond to the PVi_ma keywords 00375 * in FITS, so pv[0] is PVi_0a, pv[1] is PVi_1a, etc., where i denotes the 00376 * latitude-like axis. Many projections use pv[1] (PVi_1a), some also use 00377 * pv[2] (PVi_2a) and SZP uses pv[3] (PVi_3a). ZPN is currently the only 00378 * projection that uses any of the others. 00379 * 00380 * Usage of the pv[] array as it applies to each projection is described in 00381 * the prologue to each trio of projection routines in prj.c. 00382 * 00383 * double phi0 00384 * (Given) The native longitude, phi_0 [deg], and ... 00385 * double theta0 00386 * (Given) ... the native latitude, theta_0 [deg], of the reference point, 00387 * i.e. the point (x,y) = (0,0). If undefined (set to a magic value by 00388 * prjini()) the initialization routine will set this to a 00389 * projection-specific default. 00390 * 00391 * int bounds 00392 * (Given) Controls strict bounds checking for the AZP, SZP, TAN, SIN, ZPN, 00393 * and COP projections; set to zero to disable checking. 00394 * 00395 * The remaining members of the prjprm struct are maintained by the setup 00396 * routines and must not be modified elsewhere: 00397 * 00398 * char name[40] 00399 * (Returned) Long name of the projection. 00400 * 00401 * Provided for information only, not used by the projection routines. 00402 * 00403 * int category 00404 * (Returned) Projection category matching the value of the relevant global 00405 * variable: 00406 * 00407 * - ZENITHAL, 00408 * - CYLINDRICAL, 00409 * - PSEUDOCYLINDRICAL, 00410 * - CONVENTIONAL, 00411 * - CONIC, 00412 * - POLYCONIC, 00413 * - QUADCUBE, and 00414 * - HEALPIX. 00415 * 00416 * The category name may be identified via the prj_categories character 00417 * array, e.g. 00418 * 00419 = struct prjprm prj; 00420 = ... 00421 = printf("%s\n", prj_categories[prj.category]); 00422 * 00423 * Provided for information only, not used by the projection routines. 00424 * 00425 * int pvrange 00426 * (Returned) Range of projection parameter indices: 100 times the first 00427 * allowed index plus the number of parameters, e.g. TAN is 0 (no 00428 * parameters), SZP is 103 (1 to 3), and ZPN is 30 (0 to 29). 00429 * 00430 * Provided for information only, not used by the projection routines. 00431 * 00432 * int simplezen 00433 * (Returned) True if the projection is a radially-symmetric zenithal 00434 * projection. 00435 * 00436 * Provided for information only, not used by the projection routines. 00437 * 00438 * int equiareal 00439 * (Returned) True if the projection is equal area. 00440 * 00441 * Provided for information only, not used by the projection routines. 00442 * 00443 * int conformal 00444 * (Returned) True if the projection is conformal. 00445 * 00446 * Provided for information only, not used by the projection routines. 00447 * 00448 * int global 00449 * (Returned) True if the projection can represent the whole sphere in a 00450 * finite, non-overlapped mapping. 00451 * 00452 * Provided for information only, not used by the projection routines. 00453 * 00454 * int divergent 00455 * (Returned) True if the projection diverges in latitude. 00456 * 00457 * Provided for information only, not used by the projection routines. 00458 * 00459 * double x0 00460 * (Returned) The offset in x, and ... 00461 * double y0 00462 * (Returned) ... the offset in y used to force (x,y) = (0,0) at 00463 * (phi_0,theta_0). 00464 * 00465 * double w[10] 00466 * (Returned) Intermediate floating-point values derived from the 00467 * projection parameters, cached here to save recomputation. 00468 * 00469 * Usage of the w[] array as it applies to each projection is described in 00470 * the prologue to each trio of projection routines in prj.c. 00471 * 00472 * int n 00473 * (Returned) Intermediate integer value (used only for the ZPN and HPX 00474 * projections). 00475 * 00476 * int padding 00477 * (An unused variable inserted for alignment purposes only.) 00478 * 00479 * int (*prjx2s)(PRJX2S_ARGS) 00480 * (Returned) Pointer to the projection ... 00481 * int (*prjs2x)(PRJ_ARGS) 00482 * (Returned) ... and deprojection routines. 00483 * 00484 * 00485 * Global variable: const char *prj_errmsg[] - Status return messages 00486 * ------------------------------------------------------------------ 00487 * Error messages to match the status value returned from each function. 00488 * 00489 *===========================================================================*/ 00490 00491 #ifndef WCSLIB_PROJ 00492 #define WCSLIB_PROJ 00493 00494 #ifdef __cplusplus 00495 extern "C" { 00496 #endif 00497 00498 00499 /* Total number of projection parameters; 0 to PVN-1. */ 00500 #define PVN 30 00501 00502 extern const char *prj_errmsg[]; 00503 00504 extern const int CONIC, CONVENTIONAL, CYLINDRICAL, POLYCONIC, 00505 PSEUDOCYLINDRICAL, QUADCUBE, ZENITHAL, HEALPIX; 00506 extern const char prj_categories[9][32]; 00507 00508 extern const int prj_ncode; 00509 extern const char prj_codes[27][4]; 00510 00511 #ifdef PRJX2S_ARGS 00512 #undef PRJX2S_ARGS 00513 #endif 00514 00515 #ifdef PRJS2X_ARGS 00516 #undef PRJS2X_ARGS 00517 #endif 00518 00519 /* For use in declaring deprojection function prototypes. */ 00520 #define PRJX2S_ARGS struct prjprm *prj, int nx, int ny, int sxy, int spt, \ 00521 const double x[], const double y[], double phi[], double theta[], int stat[] 00522 00523 /* For use in declaring projection function prototypes. */ 00524 #define PRJS2X_ARGS struct prjprm *prj, int nx, int ny, int sxy, int spt, \ 00525 const double phi[], const double theta[], double x[], double y[], int stat[] 00526 00527 00528 struct prjprm { 00529 /* Initialization flag (see the prologue above). */ 00530 /*------------------------------------------------------------------------*/ 00531 int flag; /* Set to zero to force initialization. */ 00532 00533 /* Parameters to be provided (see the prologue above). */ 00534 /*------------------------------------------------------------------------*/ 00535 char code[4]; /* Three-letter projection code. */ 00536 double r0; /* Radius of the generating sphere. */ 00537 double pv[PVN]; /* Projection parameters. */ 00538 double phi0, theta0; /* Fiducial native coordinates. */ 00539 int bounds; /* Enable strict bounds checking. */ 00540 00541 /* Information derived from the parameters supplied. */ 00542 /*------------------------------------------------------------------------*/ 00543 char name[40]; /* Projection name. */ 00544 int category; /* Projection category. */ 00545 int pvrange; /* Range of projection parameter indices. */ 00546 int simplezen; /* Is it a simple zenithal projection? */ 00547 int equiareal; /* Is it an equal area projection? */ 00548 int conformal; /* Is it a conformal projection? */ 00549 int global; /* Can it map the whole sphere? */ 00550 int divergent; /* Does the projection diverge in latitude? */ 00551 double x0, y0; /* Fiducial offsets. */ 00552 00553 double w[10]; /* Intermediate values. */ 00554 int n; /* Intermediate value. */ 00555 int padding; /* (Dummy inserted for alignment purposes.) */ 00556 00557 int (*prjx2s)(PRJX2S_ARGS); /* Pointers to the spherical projection and */ 00558 int (*prjs2x)(PRJS2X_ARGS); /* deprojection functions. */ 00559 }; 00560 00561 /* Size of the prjprm struct in int units, used by the Fortran wrappers. */ 00562 #define PRJLEN (sizeof(struct prjprm)/sizeof(int)) 00563 00564 00565 /* Use the preprocessor to help declare function prototypes (see above). */ 00566 int prjini(struct prjprm *prj); 00567 int prjprt(const struct prjprm *prj); 00568 00569 int prjset(struct prjprm *prj); 00570 int prjx2s(PRJX2S_ARGS); 00571 int prjs2x(PRJS2X_ARGS); 00572 00573 int azpset(struct prjprm *prj); 00574 int azpx2s(PRJX2S_ARGS); 00575 int azps2x(PRJS2X_ARGS); 00576 00577 int szpset(struct prjprm *prj); 00578 int szpx2s(PRJX2S_ARGS); 00579 int szps2x(PRJS2X_ARGS); 00580 00581 int tanset(struct prjprm *prj); 00582 int tanx2s(PRJX2S_ARGS); 00583 int tans2x(PRJS2X_ARGS); 00584 00585 int stgset(struct prjprm *prj); 00586 int stgx2s(PRJX2S_ARGS); 00587 int stgs2x(PRJS2X_ARGS); 00588 00589 int sinset(struct prjprm *prj); 00590 int sinx2s(PRJX2S_ARGS); 00591 int sins2x(PRJS2X_ARGS); 00592 00593 int arcset(struct prjprm *prj); 00594 int arcx2s(PRJX2S_ARGS); 00595 int arcs2x(PRJS2X_ARGS); 00596 00597 int zpnset(struct prjprm *prj); 00598 int zpnx2s(PRJX2S_ARGS); 00599 int zpns2x(PRJS2X_ARGS); 00600 00601 int zeaset(struct prjprm *prj); 00602 int zeax2s(PRJX2S_ARGS); 00603 int zeas2x(PRJS2X_ARGS); 00604 00605 int airset(struct prjprm *prj); 00606 int airx2s(PRJX2S_ARGS); 00607 int airs2x(PRJS2X_ARGS); 00608 00609 int cypset(struct prjprm *prj); 00610 int cypx2s(PRJX2S_ARGS); 00611 int cyps2x(PRJS2X_ARGS); 00612 00613 int ceaset(struct prjprm *prj); 00614 int ceax2s(PRJX2S_ARGS); 00615 int ceas2x(PRJS2X_ARGS); 00616 00617 int carset(struct prjprm *prj); 00618 int carx2s(PRJX2S_ARGS); 00619 int cars2x(PRJS2X_ARGS); 00620 00621 int merset(struct prjprm *prj); 00622 int merx2s(PRJX2S_ARGS); 00623 int mers2x(PRJS2X_ARGS); 00624 00625 int sflset(struct prjprm *prj); 00626 int sflx2s(PRJX2S_ARGS); 00627 int sfls2x(PRJS2X_ARGS); 00628 00629 int parset(struct prjprm *prj); 00630 int parx2s(PRJX2S_ARGS); 00631 int pars2x(PRJS2X_ARGS); 00632 00633 int molset(struct prjprm *prj); 00634 int molx2s(PRJX2S_ARGS); 00635 int mols2x(PRJS2X_ARGS); 00636 00637 int aitset(struct prjprm *prj); 00638 int aitx2s(PRJX2S_ARGS); 00639 int aits2x(PRJS2X_ARGS); 00640 00641 int copset(struct prjprm *prj); 00642 int copx2s(PRJX2S_ARGS); 00643 int cops2x(PRJS2X_ARGS); 00644 00645 int coeset(struct prjprm *prj); 00646 int coex2s(PRJX2S_ARGS); 00647 int coes2x(PRJS2X_ARGS); 00648 00649 int codset(struct prjprm *prj); 00650 int codx2s(PRJX2S_ARGS); 00651 int cods2x(PRJS2X_ARGS); 00652 00653 int cooset(struct prjprm *prj); 00654 int coox2s(PRJX2S_ARGS); 00655 int coos2x(PRJS2X_ARGS); 00656 00657 int bonset(struct prjprm *prj); 00658 int bonx2s(PRJX2S_ARGS); 00659 int bons2x(PRJS2X_ARGS); 00660 00661 int pcoset(struct prjprm *prj); 00662 int pcox2s(PRJX2S_ARGS); 00663 int pcos2x(PRJS2X_ARGS); 00664 00665 int tscset(struct prjprm *prj); 00666 int tscx2s(PRJX2S_ARGS); 00667 int tscs2x(PRJS2X_ARGS); 00668 00669 int cscset(struct prjprm *prj); 00670 int cscx2s(PRJX2S_ARGS); 00671 int cscs2x(PRJS2X_ARGS); 00672 00673 int qscset(struct prjprm *prj); 00674 int qscx2s(PRJX2S_ARGS); 00675 int qscs2x(PRJS2X_ARGS); 00676 00677 int hpxset(struct prjprm *prj); 00678 int hpxx2s(PRJX2S_ARGS); 00679 int hpxs2x(PRJS2X_ARGS); 00680 00681 00682 /* Deprecated. */ 00683 #define prjini_errmsg prj_errmsg 00684 #define prjprt_errmsg prj_errmsg 00685 #define prjset_errmsg prj_errmsg 00686 #define prjx2s_errmsg prj_errmsg 00687 #define prjs2x_errmsg prj_errmsg 00688 00689 #ifdef __cplusplus 00690 } 00691 #endif 00692 00693 #endif /* WCSLIB_PROJ */