diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-12-26 14:58:26 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-12-30 21:48:56 +0100 |
| commit | 8ab6f683cd316acf57bb89ed83932a267c5aa3c2 (patch) | |
| tree | 4ccb6033dae1e87e55aa00dbbc395c536dc8be49 /src/projects.h | |
| parent | 7acbe96928d564ac86f74c319e4d37143352671b (diff) | |
| download | PROJ-8ab6f683cd316acf57bb89ed83932a267c5aa3c2.tar.gz PROJ-8ab6f683cd316acf57bb89ed83932a267c5aa3c2.zip | |
Merge projects.h into proj_internal.h
Diffstat (limited to 'src/projects.h')
| -rw-r--r-- | src/projects.h | 829 |
1 files changed, 0 insertions, 829 deletions
diff --git a/src/projects.h b/src/projects.h deleted file mode 100644 index 81b27875..00000000 --- a/src/projects.h +++ /dev/null @@ -1,829 +0,0 @@ -/****************************************************************************** - * Project: PROJ.4 - * Purpose: Primary (private) include file for PROJ.4 library. - * Author: Gerald Evenden - * - ****************************************************************************** - * Copyright (c) 2000, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - *****************************************************************************/ - -/* General projections header file */ -#ifndef PROJECTS_H -#define PROJECTS_H - -#ifndef __cplusplus -#error "projects.h can only be included from a C++ file" -#endif - -#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H -#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H -#endif - -#ifdef _MSC_VER -# ifndef _CRT_SECURE_NO_DEPRECATE -# define _CRT_SECURE_NO_DEPRECATE -# endif -# ifndef _CRT_NONSTDC_NO_DEPRECATE -# define _CRT_NONSTDC_NO_DEPRECATE -# endif -/* enable predefined math constants M_* for MS Visual Studio workaround */ -# ifndef _USE_MATH_DEFINES -# define _USE_MATH_DEFINES -# endif -#endif - -#ifdef PROJ_RENAME_SYMBOLS -#include "proj_symbol_rename.h" -#endif - -/* standard inclusions */ -#include <limits.h> -#include <math.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "proj/common.hpp" -#include "proj/coordinateoperation.hpp" -#include <string> -#include <vector> - -#ifndef PROJ_DLL -#ifdef PROJ_MSVC_DLL_EXPORT -#define PROJ_DLL __declspec(dllexport) -#elif defined(PROJ_MSVC_DLL_IMPORT) -#define PROJ_DLL __declspec(dllimport) -#elif defined(__GNUC__) -#define PROJ_DLL __attribute__ ((visibility("default"))) -#else -#define PROJ_DLL -#endif -#endif - -#define C_NAMESPACE extern "C" -#define C_NAMESPACE_VAR extern "C" - -#ifndef NULL -# define NULL 0 -#endif - -#ifndef FALSE -# define FALSE 0 -#endif - -#ifndef TRUE -# define TRUE 1 -#endif - -#ifndef MAX -# define MIN(a,b) ((a<b) ? a : b) -# define MAX(a,b) ((a>b) ? a : b) -#endif - -#ifndef ABS -# define ABS(x) ((x<0) ? (-1*(x)) : x) -#endif - -#if INT_MAX == 2147483647 -typedef int pj_int32; -#elif LONG_MAX == 2147483647 -typedef long pj_int32; -#else -#warning It seems no 32-bit integer type is available -#endif - -/* maximum path/filename */ -#ifndef MAX_PATH_FILENAME -#define MAX_PATH_FILENAME 1024 -#endif - -/* If we still haven't got M_PI*, we rely on our own defines. - * For example, this is necessary when compiling with gcc and - * the -ansi flag. - */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#define M_PI_2 1.57079632679489661923 -#define M_PI_4 0.78539816339744830962 -#define M_2_PI 0.63661977236758134308 -#endif - -/* M_SQRT2 might be missing */ -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 -#endif - -/* some more useful math constants and aliases */ -#define M_FORTPI M_PI_4 /* pi/4 */ -#define M_HALFPI M_PI_2 /* pi/2 */ -#define M_PI_HALFPI 4.71238898038468985769 /* 1.5*pi */ -#define M_TWOPI 6.28318530717958647693 /* 2*pi */ -#define M_TWO_D_PI M_2_PI /* 2/pi */ -#define M_TWOPI_HALFPI 7.85398163397448309616 /* 2.5*pi */ - - -/* maximum tag id length for +init and default files */ -#ifndef ID_TAG_MAX -#define ID_TAG_MAX 50 -#endif - -/* Use WIN32 as a standard windows 32 bit declaration */ -#if defined(_WIN32) && !defined(WIN32) -# define WIN32 -#endif - -#if defined(_WINDOWS) && !defined(WIN32) -# define WIN32 -#endif - -/* directory delimiter for DOS support */ -#ifdef WIN32 -#define DIR_CHAR '\\' -#else -#define DIR_CHAR '/' -#endif - -typedef struct { double r, i; } COMPLEX; - -/* Forward declarations and typedefs for stuff needed inside the PJ object */ -struct PJconsts; - -union PJ_COORD; -struct geod_geodesic; -struct ARG_list; -struct PJ_REGION_S; -typedef struct PJ_REGION_S PJ_Region; -typedef struct ARG_list paralist; /* parameter list */ -#ifndef PROJ_INTERNAL_H -enum pj_io_units { - PJ_IO_UNITS_WHATEVER = 0, /* Doesn't matter (or depends on pipeline neighbours) */ - PJ_IO_UNITS_CLASSIC = 1, /* Scaled meters (right), projected system */ - PJ_IO_UNITS_PROJECTED = 2, /* Meters, projected system */ - PJ_IO_UNITS_CARTESIAN = 3, /* Meters, 3D cartesian system */ - PJ_IO_UNITS_ANGULAR = 4 /* Radians */ -}; -#endif -#ifndef PROJ_H -typedef struct PJconsts PJ; /* the PJ object herself */ -typedef union PJ_COORD PJ_COORD; -#endif - -struct PJ_REGION_S { - double ll_long; /* lower left corner coordinates (radians) */ - double ll_lat; - double ur_long; /* upper right corner coordinates (radians) */ - double ur_lat; -}; - -struct PJ_AREA { - int bbox_set; - double west_lon_degree; - double south_lat_degree; - double east_lon_degree; - double north_lat_degree; -}; - -struct projCtx_t; -typedef struct projCtx_t projCtx_t; - -/***************************************************************************** - - Some function types that are especially useful when working with PJs - -****************************************************************************** - -PJ_CONSTRUCTOR: - - A function taking a pointer-to-PJ as arg, and returning a pointer-to-PJ. - Historically called twice: First with a 0 argument, to allocate memory, - second with the first return value as argument, for actual setup. - -PJ_DESTRUCTOR: - - A function taking a pointer-to-PJ and an integer as args, then first - handling the deallocation of the PJ, afterwards handing the integer over - to the error reporting subsystem, and finally returning a null pointer in - support of the "return free (P)" (aka "get the hell out of here") idiom. - -PJ_OPERATOR: - - A function taking a PJ_COORD and a pointer-to-PJ as args, applying the - PJ to the PJ_COORD, and returning the resulting PJ_COORD. - -*****************************************************************************/ -typedef PJ *(* PJ_CONSTRUCTOR) (PJ *); -typedef PJ *(* PJ_DESTRUCTOR) (PJ *, int); -typedef PJ_COORD (* PJ_OPERATOR) (PJ_COORD, PJ *); -/****************************************************************************/ - - -/* datum_type values */ -#define PJD_UNKNOWN 0 -#define PJD_3PARAM 1 -#define PJD_7PARAM 2 -#define PJD_GRIDSHIFT 3 -#define PJD_WGS84 4 /* WGS84 (or anything considered equivalent) */ - - -/* base projection data structure */ -struct PJconsts { - - /************************************************************************************* - - G E N E R A L P A R A M E T E R S T R U C T - - ************************************************************************************** - - TODO: Need some description here - especially about the thread context... - This is the struct behind the PJ typedef - - **************************************************************************************/ - - projCtx_t *ctx = nullptr; - const char *descr = nullptr; /* From pj_list.h or individual PJ_*.c file */ - paralist *params = nullptr; /* Parameter list */ - char *def_full = nullptr; /* Full textual definition (usually 0 - set by proj_pj_info) */ - char *def_size = nullptr; /* Shape and size parameters extracted from params */ - char *def_shape = nullptr; - char *def_spherification = nullptr; - char *def_ellps = nullptr; - - struct geod_geodesic *geod = nullptr; /* For geodesic computations */ - void *opaque = nullptr; /* Projection specific parameters, Defined in PJ_*.c */ - int inverted = 0; /* Tell high level API functions to swap inv/fwd */ - - - /************************************************************************************* - - F U N C T I O N P O I N T E R S - - ************************************************************************************** - - For projection xxx, these are pointers to functions in the corresponding - PJ_xxx.c file. - - pj_init() delegates the setup of these to pj_projection_specific_setup_xxx(), - a name which is currently hidden behind the magic curtain of the PROJECTION - macro. - - **************************************************************************************/ - - - PJ_XY (*fwd)(PJ_LP, PJ *) = nullptr; - PJ_LP (*inv)(PJ_XY, PJ *) = nullptr; - PJ_XYZ (*fwd3d)(PJ_LPZ, PJ *) = nullptr; - PJ_LPZ (*inv3d)(PJ_XYZ, PJ *) = nullptr; - PJ_OPERATOR fwd4d = nullptr; - PJ_OPERATOR inv4d = nullptr; - - PJ_DESTRUCTOR destructor = nullptr; - - - /************************************************************************************* - - E L L I P S O I D P A R A M E T E R S - - ************************************************************************************** - - Despite YAGNI, we add a large number of ellipsoidal shape parameters, which - are not yet set up in pj_init. They are, however, inexpensive to compute, - compared to the overall time taken for setting up the complex PJ object - (cf. e.g. https://en.wikipedia.org/wiki/Angular_eccentricity). - - But during single point projections it will often be a useful thing to have - these readily available without having to recompute at every pj_fwd / pj_inv - call. - - With this wide selection, we should be ready for quite a number of geodetic - algorithms, without having to incur further ABI breakage. - - **************************************************************************************/ - - /* The linear parameters */ - - double a = 0.0; /* semimajor axis (radius if eccentricity==0) */ - double b = 0.0; /* semiminor axis */ - double ra = 0.0; /* 1/a */ - double rb = 0.0; /* 1/b */ - - /* The eccentricities */ - - double alpha = 0.0; /* angular eccentricity */ - double e = 0.0; /* first eccentricity */ - double es = 0.0; /* first eccentricity squared */ - double e2 = 0.0; /* second eccentricity */ - double e2s = 0.0; /* second eccentricity squared */ - double e3 = 0.0; /* third eccentricity */ - double e3s = 0.0; /* third eccentricity squared */ - double one_es = 0.0; /* 1 - e^2 */ - double rone_es = 0.0; /* 1/one_es */ - - - /* The flattenings */ - double f = 0.0; /* first flattening */ - double f2 = 0.0; /* second flattening */ - double n = 0.0; /* third flattening */ - double rf = 0.0; /* 1/f */ - double rf2 = 0.0; /* 1/f2 */ - double rn = 0.0; /* 1/n */ - - /* This one's for GRS80 */ - double J = 0.0; /* "Dynamic form factor" */ - - double es_orig = 0.0; /* es and a before any +proj related adjustment */ - double a_orig = 0.0; - - - /************************************************************************************* - - C O O R D I N A T E H A N D L I N G - - **************************************************************************************/ - - int over = 0; /* Over-range flag */ - int geoc = 0; /* Geocentric latitude flag */ - int is_latlong = 0; /* proj=latlong ... not really a projection at all */ - int is_geocent = 0; /* proj=geocent ... not really a projection at all */ - int is_pipeline = 0; /* 1 if PJ represents a pipeline */ - int need_ellps = 0; /* 0 for operations that are purely cartesian */ - int skip_fwd_prepare = 0; - int skip_fwd_finalize = 0; - int skip_inv_prepare = 0; - int skip_inv_finalize = 0; - - enum pj_io_units left = PJ_IO_UNITS_WHATEVER; /* Flags for input/output coordinate types */ - enum pj_io_units right = PJ_IO_UNITS_WHATEVER; - - /* These PJs are used for implementing cs2cs style coordinate handling in the 4D API */ - PJ *axisswap = nullptr; - PJ *cart = nullptr; - PJ *cart_wgs84 = nullptr; - PJ *helmert = nullptr; - PJ *hgridshift = nullptr; - PJ *vgridshift = nullptr; - - - /************************************************************************************* - - C A R T O G R A P H I C O F F S E T S - - **************************************************************************************/ - - double lam0 = 0.0; /* central meridian */ - double phi0 = 0.0; /* central parallel */ - double x0 = 0.0; /* false easting */ - double y0 = 0.0; /* false northing */ - double z0 = 0.0; /* height origin */ - double t0 = 0.0; /* time origin */ - - - /************************************************************************************* - - S C A L I N G - - **************************************************************************************/ - - double k0 = 0.0; /* General scaling factor - e.g. the 0.9996 of UTM */ - double to_meter = 0.0, fr_meter = 0.0; /* Plane coordinate scaling. Internal unit [m] */ - double vto_meter = 0.0, vfr_meter = 0.0; /* Vertical scaling. Internal unit [m] */ - - - /************************************************************************************* - - D A T U M S A N D H E I G H T S Y S T E M S - - ************************************************************************************** - - It may be possible, and meaningful, to move the list parts of this up to the - PJ_CONTEXT level. - - **************************************************************************************/ - - int datum_type = PJD_UNKNOWN; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ - double datum_params[7] = {0,0,0,0,0,0,0}; /* Parameters for 3PARAM and 7PARAM */ - struct _pj_gi **gridlist = nullptr; /* TODO: Description needed */ - int gridlist_count = 0; - - int has_geoid_vgrids = 0; /* TODO: Description needed */ - struct _pj_gi **vgridlist_geoid = nullptr; /* TODO: Description needed */ - int vgridlist_geoid_count = 0; - - double from_greenwich = 0.0; /* prime meridian offset (in radians) */ - double long_wrap_center = 0.0; /* 0.0 for -180 to 180, actually in radians*/ - int is_long_wrap_set = 0; - char axis[4] = {0,0,0,0}; /* Axis order, pj_transform/pj_adjust_axis */ - - /* New Datum Shift Grid Catalogs */ - char *catalog_name = nullptr; - struct _PJ_GridCatalog *catalog = nullptr; - - double datum_date = 0.0; /* TODO: Description needed */ - - struct _pj_gi *last_before_grid = nullptr; /* TODO: Description needed */ - PJ_Region last_before_region = {0,0,0,0}; /* TODO: Description needed */ - double last_before_date = 0.0; /* TODO: Description needed */ - - struct _pj_gi *last_after_grid = nullptr; /* TODO: Description needed */ - PJ_Region last_after_region = {0,0,0,0}; /* TODO: Description needed */ - double last_after_date = 0.0; /* TODO: Description needed */ - - /************************************************************************************* - ISO-19111 interface - **************************************************************************************/ - - NS_PROJ::common::IdentifiedObjectPtr iso_obj{}; - - // cached results - mutable std::string lastWKT{}; - mutable std::string lastPROJString{}; - mutable bool gridsNeededAsked = false; - mutable std::vector<NS_PROJ::operation::GridDescription> gridsNeeded{}; - - /************************************************************************************* - - E N D O F G E N E R A L P A R A M E T E R S T R U C T - - **************************************************************************************/ - - PJconsts(); - PJconsts(const PJconsts &) = delete; - PJconsts &operator=(const PJconsts &) = delete; -}; - - - - -/* Parameter list (a copy of the +proj=... etc. parameters) */ -struct ARG_list { - paralist *next; - char used; -#if defined(__GNUC__) && __GNUC__ >= 8 - char param[]; /* variable-length member */ - /* Safer to use [] for gcc 8. See https://github.com/OSGeo/proj.4/pull/1087 */ - /* and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86914 */ -#else - char param[1]; /* variable-length member */ -#endif -}; - - -typedef union { double f; int i; char *s; } PROJVALUE; - - -struct PJ_DATUMS { - const char *id; /* datum keyword */ - const char *defn; /* ie. "to_wgs84=..." */ - const char *ellipse_id; /* ie from ellipse table */ - const char *comments; /* EPSG code, etc */ -}; - - -struct DERIVS { - double x_l, x_p; /* derivatives of x for lambda-phi */ - double y_l, y_p; /* derivatives of y for lambda-phi */ -}; - -struct FACTORS { - struct DERIVS der; - double h, k; /* meridional, parallel scales */ - double omega, thetap; /* angular distortion, theta prime */ - double conv; /* convergence */ - double s; /* areal scale factor */ - double a, b; /* max-min scale error */ - int code; /* always 0 */ -}; - -/* library errors */ -#define PJD_ERR_NO_ARGS -1 -#define PJD_ERR_NO_OPTION_IN_INIT_FILE -2 -#define PJD_ERR_NO_COLON_IN_INIT_STRING -3 -#define PJD_ERR_PROJ_NOT_NAMED -4 -#define PJD_ERR_UNKNOWN_PROJECTION_ID -5 -#define PJD_ERR_ECCENTRICITY_IS_ONE -6 -#define PJD_ERR_UNKNOWN_UNIT_ID -7 -#define PJD_ERR_INVALID_BOOLEAN_PARAM -8 -#define PJD_ERR_UNKNOWN_ELLP_PARAM -9 -#define PJD_ERR_REV_FLATTENING_IS_ZERO -10 -#define PJD_ERR_REF_RAD_LARGER_THAN_90 -11 -#define PJD_ERR_ES_LESS_THAN_ZERO -12 -#define PJD_ERR_MAJOR_AXIS_NOT_GIVEN -13 -#define PJD_ERR_LAT_OR_LON_EXCEED_LIMIT -14 -#define PJD_ERR_INVALID_X_OR_Y -15 -#define PJD_ERR_WRONG_FORMAT_DMS_VALUE -16 -#define PJD_ERR_NON_CONV_INV_MERI_DIST -17 -#define PJD_ERR_NON_CON_INV_PHI2 -18 -#define PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE -19 -#define PJD_ERR_TOLERANCE_CONDITION -20 -#define PJD_ERR_CONIC_LAT_EQUAL -21 -#define PJD_ERR_LAT_LARGER_THAN_90 -22 -#define PJD_ERR_LAT1_IS_ZERO -23 -#define PJD_ERR_LAT_TS_LARGER_THAN_90 -24 -#define PJD_ERR_CONTROL_POINT_NO_DIST -25 -#define PJD_ERR_NO_ROTATION_PROJ -26 -#define PJD_ERR_W_OR_M_ZERO_OR_LESS -27 -#define PJD_ERR_LSAT_NOT_IN_RANGE -28 -#define PJD_ERR_PATH_NOT_IN_RANGE -29 -#define PJD_ERR_H_LESS_THAN_ZERO -30 -#define PJD_ERR_K_LESS_THAN_ZERO -31 -#define PJD_ERR_LAT_1_OR_2_ZERO_OR_90 -32 -#define PJD_ERR_LAT_0_OR_ALPHA_EQ_90 -33 -#define PJD_ERR_ELLIPSOID_USE_REQUIRED -34 -#define PJD_ERR_INVALID_UTM_ZONE -35 -#define PJD_ERR_TCHEBY_VAL_OUT_OF_RANGE -36 -#define PJD_ERR_FAILED_TO_FIND_PROJ -37 -#define PJD_ERR_FAILED_TO_LOAD_GRID -38 -#define PJD_ERR_INVALID_M_OR_N -39 -#define PJD_ERR_N_OUT_OF_RANGE -40 -#define PJD_ERR_LAT_1_2_UNSPECIFIED -41 -#define PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 -42 -#define PJD_ERR_LAT_0_HALF_PI_FROM_MEAN -43 -#define PJD_ERR_UNPARSEABLE_CS_DEF -44 -#define PJD_ERR_GEOCENTRIC -45 -#define PJD_ERR_UNKNOWN_PRIME_MERIDIAN -46 -#define PJD_ERR_AXIS -47 -#define PJD_ERR_GRID_AREA -48 -#define PJD_ERR_INVALID_SWEEP_AXIS -49 -#define PJD_ERR_MALFORMED_PIPELINE -50 -#define PJD_ERR_UNIT_FACTOR_LESS_THAN_0 -51 -#define PJD_ERR_INVALID_SCALE -52 -#define PJD_ERR_NON_CONVERGENT -53 -#define PJD_ERR_MISSING_ARGS -54 -#define PJD_ERR_LAT_0_IS_ZERO -55 -#define PJD_ERR_ELLIPSOIDAL_UNSUPPORTED -56 -#define PJD_ERR_TOO_MANY_INITS -57 -#define PJD_ERR_INVALID_ARG -58 -#define PJD_ERR_INCONSISTENT_UNIT -59 -/* NOTE: Remember to update pj_strerrno.c and transient_error in */ -/* pj_transform.c when adding new value */ - -struct projFileAPI_t; - -struct projCppContext; - -/* proj thread context */ -struct projCtx_t { - int last_errno; - int debug_level; - void (*logger)(void *, int, const char *); - void *app_data; - struct projFileAPI_t *fileapi; - struct projCppContext* cpp_context; /* internal context for C++ code */ - int use_proj4_init_rules; /* -1 = unknown, 0 = no, 1 = yes */ - int epsg_file_exists; /* -1 = unknown, 0 = no, 1 = yes */ -}; - -/* classic public API */ -#include "proj_api.h" - - -/* Generate pj_list external or make list from include file */ -#ifndef PJ_DATUMS__ -C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[]; -#endif - - - - - -#ifdef PJ_LIB__ -#define PROJ_HEAD(name, desc) static const char des_##name [] = desc - -#define OPERATION(name, NEED_ELPJ_LPS) \ - \ -pj_projection_specific_setup_##name (PJ *P); \ -C_NAMESPACE PJ *pj_##name (PJ *P); \ - \ -C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \ - \ -C_NAMESPACE PJ *pj_##name (PJ *P) { \ - if (P) \ - return pj_projection_specific_setup_##name (P); \ - P = pj_new(); \ - if (nullptr==P) \ - return nullptr; \ - P->descr = des_##name; \ - P->need_ellps = NEED_ELPJ_LPS; \ - P->left = PJ_IO_UNITS_ANGULAR; \ - P->right = PJ_IO_UNITS_CLASSIC; \ - return P; \ -} \ - \ -PJ *pj_projection_specific_setup_##name (PJ *P) - -/* In ISO19000 lingo, an operation is either a conversion or a transformation */ -#define CONVERSION(name, need_ellps) OPERATION (name, need_ellps) -#define TRANSFORMATION(name, need_ellps) OPERATION (name, need_ellps) - -/* In PROJ.4 a projection is a conversion taking angular input and giving scaled linear output */ -#define PROJECTION(name) CONVERSION (name, 1) - -#endif /* def PJ_LIB__ */ - - -#define MAX_TAB_ID 80 -typedef struct { float lam, phi; } FLP; -typedef struct { pj_int32 lam, phi; } ILP; - -struct CTABLE { - char id[MAX_TAB_ID]; /* ascii info */ - PJ_LP ll; /* lower left corner coordinates */ - PJ_LP del; /* size of cells */ - ILP lim; /* limits of conversion matrix */ - FLP *cvs; /* conversion matrix */ -}; - -typedef struct _pj_gi { - char *gridname; /* identifying name of grid, eg "conus" or ntv2_0.gsb */ - char *filename; /* full path to filename */ - - const char *format; /* format of this grid, ie "ctable", "ntv1", - "ntv2" or "missing". */ - - long grid_offset; /* offset in file, for delayed loading */ - int must_swap; /* only for NTv2 */ - - struct CTABLE *ct; - - struct _pj_gi *next; - struct _pj_gi *child; -} PJ_GRIDINFO; - -typedef struct { - PJ_Region region; - int priority; /* higher used before lower */ - double date; /* year.fraction */ - char *definition; /* usually the gridname */ - - PJ_GRIDINFO *gridinfo; - int available; /* 0=unknown, 1=true, -1=false */ -} PJ_GridCatalogEntry; - -typedef struct _PJ_GridCatalog { - char *catalog_name; - - PJ_Region region; /* maximum extent of catalog data */ - - int entry_count; - PJ_GridCatalogEntry *entries; - - struct _PJ_GridCatalog *next; -} PJ_GridCatalog; - -/* procedure prototypes */ -double PROJ_DLL dmstor(const char *, char **); -double dmstor_ctx(projCtx ctx, const char *, char **); -void PROJ_DLL set_rtodms(int, int); -char PROJ_DLL *rtodms(char *, double, int, int); -double PROJ_DLL adjlon(double); -double aacos(projCtx,double), aasin(projCtx,double), asqrt(double), aatan2(double, double); - -PROJVALUE PROJ_DLL pj_param(projCtx ctx, paralist *, const char *); -paralist PROJ_DLL *pj_param_exists (paralist *list, const char *parameter); -paralist PROJ_DLL *pj_mkparam(const char *); -paralist *pj_mkparam_ws (const char *str); - - -int PROJ_DLL pj_ell_set(projCtx ctx, paralist *, double *, double *); -int pj_datum_set(projCtx,paralist *, PJ *); -int pj_angular_units_set(paralist *, PJ *); - -paralist *pj_clone_paralist( const paralist* ); -paralist *pj_search_initcache( const char *filekey ); -void pj_insert_initcache( const char *filekey, const paralist *list); -paralist *pj_expand_init(projCtx ctx, paralist *init); - -void *pj_dealloc_params (projCtx ctx, paralist *start, int errlev); - - -double *pj_enfn(double); -double pj_mlfn(double, double, double, double *); -double pj_inv_mlfn(projCtx, double, double, double *); -double pj_qsfn(double, double, double); -double pj_tsfn(double, double, double); -double pj_msfn(double, double, double); -double PROJ_DLL pj_phi2(projCtx, double, double); -double pj_qsfn_(double, PJ *); -double *pj_authset(double); -double pj_authlat(double, double *); - -COMPLEX pj_zpoly1(COMPLEX, const COMPLEX *, int); -COMPLEX pj_zpolyd1(COMPLEX, const COMPLEX *, int, COMPLEX *); - -int pj_deriv(PJ_LP, double, const PJ *, struct DERIVS *); -int pj_factors(PJ_LP, const PJ *, double, struct FACTORS *); - -struct PW_COEF { /* row coefficient structure */ - int m; /* number of c coefficients (=0 for none) */ - double *c; /* power coefficients */ -}; - -/* Approximation structures and procedures */ -typedef struct { /* Chebyshev or Power series structure */ - PJ_UV a, b; /* power series range for evaluation */ - /* or Chebyshev argument shift/scaling */ - struct PW_COEF *cu, *cv; - int mu, mv; /* maximum cu and cv index (+1 for count) */ - int power; /* != 0 if power series, else Chebyshev */ -} Tseries; - -Tseries PROJ_DLL *mk_cheby(PJ_UV, PJ_UV, double, PJ_UV *, PJ_UV (*)(PJ_UV), int, int, int); -PJ_UV bpseval(PJ_UV, Tseries *); -PJ_UV bcheval(PJ_UV, Tseries *); -PJ_UV biveval(PJ_UV, Tseries *); -void *vector1(int, int); -void **vector2(int, int, int); -void freev2(void **v, int nrows); -int bchgen(PJ_UV, PJ_UV, int, int, PJ_UV **, PJ_UV(*)(PJ_UV)); -int bch2bps(PJ_UV, PJ_UV, PJ_UV **, int, int); - -/* nadcon related protos */ -PJ_LP nad_intr(PJ_LP, struct CTABLE *); -PJ_LP nad_cvt(PJ_LP, int, struct CTABLE *); -struct CTABLE *nad_init(projCtx ctx, char *); -struct CTABLE *nad_ctable_init( projCtx ctx, PAFile fid ); -int nad_ctable_load( projCtx ctx, struct CTABLE *, PAFile fid ); -struct CTABLE *nad_ctable2_init( projCtx ctx, PAFile fid ); -int nad_ctable2_load( projCtx ctx, struct CTABLE *, PAFile fid ); -void nad_free(struct CTABLE *); - -/* higher level handling of datum grid shift files */ - -int pj_apply_vgridshift( PJ *defn, const char *listname, - PJ_GRIDINFO ***gridlist_p, - int *gridlist_count_p, - int inverse, - long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_apply_gridshift_2( PJ *defn, int inverse, - long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_apply_gridshift_3( projCtx ctx, - PJ_GRIDINFO **gridlist, int gridlist_count, - int inverse, long point_count, int point_offset, - double *x, double *y, double *z ); - -PJ_GRIDINFO **pj_gridlist_from_nadgrids( projCtx, const char *, int * ); -void PROJ_DLL pj_deallocate_grids(); - -PJ_GRIDINFO *pj_gridinfo_init( projCtx, const char * ); -int pj_gridinfo_load( projCtx, PJ_GRIDINFO * ); -void pj_gridinfo_free( projCtx, PJ_GRIDINFO * ); - -PJ_GridCatalog *pj_gc_findcatalog( projCtx, const char * ); -PJ_GridCatalog *pj_gc_readcatalog( projCtx, const char * ); -void pj_gc_unloadall( projCtx ); -int pj_gc_apply_gridshift( PJ *defn, int inverse, - long point_count, int point_offset, - double *x, double *y, double *z ); -int pj_gc_apply_gridshift( PJ *defn, int inverse, - long point_count, int point_offset, - double *x, double *y, double *z ); - -PJ_GRIDINFO *pj_gc_findgrid( projCtx ctx, - PJ_GridCatalog *catalog, int after, - PJ_LP location, double date, - PJ_Region *optional_region, - double *grid_date ); - -double pj_gc_parsedate( projCtx, const char * ); - -void *proj_mdist_ini(double); -double proj_mdist(double, double, double, const void *); -double proj_inv_mdist(projCtx ctx, double, const void *); -void *pj_gauss_ini(double, double, double *,double *); -PJ_LP pj_gauss(projCtx, PJ_LP, const void *); -PJ_LP pj_inv_gauss(projCtx, PJ_LP, const void *); - -struct PJ_DATUMS PROJ_DLL *pj_get_datums_ref( void ); - -PJ *pj_new(void); -PJ *pj_default_destructor (PJ *P, int errlev); - -double PROJ_DLL pj_atof( const char* nptr ); -double pj_strtod( const char *nptr, char **endptr ); -void pj_freeup_plain (PJ *P); - -projPJ pj_init_ctx_with_allow_init_epsg( projCtx ctx, int argc, char **argv, int allow_init_epsg ); - -#ifndef PROJECTS_H_ATEND -#define PROJECTS_H_ATEND -#endif -#endif /* end of basic projections header */ |
