diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst index 85c10c6db4..9a8ee905aa 100644 --- a/docs/source/development/index.rst +++ b/docs/source/development/index.rst @@ -39,9 +39,8 @@ are maintained in a `separate git repository - - main(int argc, char **argv) { - projPJ pj_merc, pj_latlong; - double x, y; - - if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) ) - exit(1); - if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) ) - exit(1); - while (scanf("%lf %lf", &x, &y) == 2) { - x *= DEG_TO_RAD; - y *= DEG_TO_RAD; - p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL ); - printf("%.2f\t%.2f\n", x, y); - } - exit(0); - } - - -For this program, an input of ``-16 20.25`` would give a result of -``-1495284.21 1920596.79``. - -API Functions -------------- - -pj_transform -============ - -:: - - int pj_transform( projPJ srcdefn, - projPJ dstdefn, - long point_count, - int point_offset, - double *x, - double *y, - double *z ); - - -Transform the x/y/z points from the source coordinate system to the -destination coordinate system. - -``srcdefn``: source (input) coordinate system. - -``dstdefn``: destination (output) coordinate system. - -``point_count``: the number of points to be processed (the size of the -x/y/z arrays). - -``point_offset``: the step size from value to value (measured in -doubles) within the x/y/z arrays - normally 1 for a packed array. May be -used to operate on xyz interleaved point arrays. - -``x``/``y``/``z``: The array of X, Y and Z coordinate values passed as -input, and modified in place for output. The Z may optionally be NULL. - -``return``: The return is zero on success, or a PROJ.4 error code. - -The ``pj_transform()`` function transforms the passed in list of points -from the source coordinate system to the destination coordinate system. -Note that geographic locations need to be passed in radians, not decimal -degrees, and will be returned similarly. The ``z`` array may be passed -as NULL if Z values are not available. - -If there is an overall failure, an error code will be returned from the -function. If individual points fail to transform - for instance due to -being over the horizon - then those x/y/z values will be set to -``HUGE_VAL`` on return. Input values that are ``HUGE_VAL`` will not be -transformed. - - -pj_init_plus -============ - -:: - - projPJ pj_init_plus(const char *definition); - -This function converts a string representation of a coordinate system -definition into a projPJ object suitable for use with other API -functions. On failure the function will return NULL and set pj_errno. -The definition should be of the general form -``+proj=tmerc +lon_0 +datum=WGS84``. Refer to PROJ.4 documentation and -the :ref:`transformation` notes for additional detail. - -Coordinate system objects allocated with ``pj_init_plus()`` should be -deallocated with ``pj_free()``. - - -pj_free -======= - -:: - - void pj_free( projPJ pj ); - -Frees all resources associated with pj. - - -pj_is_latlong -============= - -:: - - int pj_is_latlong( projPJ pj ); - -Returns TRUE if the passed coordinate system is geographic -(``proj=latlong``). - - -pj_is_geocent -============= - -:: - - int pj_is_geocent( projPJ pj );`` - -Returns TRUE if the coordinate system is geocentric (``proj=geocent``). - -pj_get_def -========== - -:: - - char *pj_get_def( projPJ pj, int options);`` - -Returns the PROJ.4 initialization string suitable for use with -``pj_init_plus()`` that would produce this coordinate system, but with -the definition expanded as much as possible (for instance ``+init=`` and -``+datum=`` definitions). - -pj_latlong_from_proj -==================== - -:: - - projPJ pj_latlong_from_proj( projPJ pj_in );`` - -Returns a new coordinate system definition which is the geographic -coordinate (lat/long) system underlying ``pj_in``. - -pj_set_finder -============== - -:: - - void pj_set_finder( const char *(*new_finder)(const char *) );`` - -Install a custom function for finding init and grid shift files. - -pj_set_searchpath -================= - -:: - - void pj_set_searchpath ( int count, const char **path );`` - -Set a list of directories to search for init and grid shift files. - - -pj_deallocate_grids -=================== - -:: - - void pj_deallocate_grids( void );`` - -Frees all resources associated with loaded and cached datum shift grids. - - -pj_strerrno -=========== - -:: - - char *pj_strerrno( int );`` - -Returns the error text associated with the passed in error code. - -pj_get_errno_ref -================ - -:: - - int *pj_get_errno_ref( void );`` - -Returns a pointer to the global pj\_errno error variable. - -pj_get_release -============== - -:: - - const char *pj_get_release( void );`` - -Returns an internal string describing the release version. - -Obsolete Functions -~~~~~~~~~~~~~~~~~~ - -``XY pj_fwd( LP lp, PJ *P );`` - -``LP pj_inv( XY xy, PJ *P );`` - -``projPJ pj_init(int argc, char **argv);`` - -.. _more info: pj_transform - diff --git a/docs/source/development/reference/index.rst b/docs/source/development/reference/index.rst index 1d39b1d0c4..caa893c378 100644 --- a/docs/source/development/reference/index.rst +++ b/docs/source/development/reference/index.rst @@ -10,4 +10,3 @@ Reference datatypes functions cpp/index.rst - deprecated diff --git a/man/man3/Makefile.am b/man/man3/Makefile.am index 4a3128a84c..cc78fc91a9 100644 --- a/man/man3/Makefile.am +++ b/man/man3/Makefile.am @@ -1,3 +1,3 @@ -man_MANS = pj_init.3 geodesic.3 +man_MANS = geodesic.3 EXTRA_DIST = $(man_MANS) diff --git a/man/man3/pj_init.3 b/man/man3/pj_init.3 deleted file mode 100644 index d2a98b5828..0000000000 --- a/man/man3/pj_init.3 +++ /dev/null @@ -1,114 +0,0 @@ -.\" @(#)pj_init.3 - 6.3.0 -.\" -.TH PJ_INIT 3 "2020/01/1 Rel. 6.3.0" -.ad b -.hy 1 -.SH NAME -pj_init \- initialize cartographic projection -.br -pj_init_plus \- initialize cartographic projection -.br -pj_fwd \- forward cartographic projection -.br -pj_inv \- inverse cartographic projection -.br -pj_transform \- transform between coordinate systems -.br -pj_free \- de-initialize projection -.SH SYNOPSIS -.nf -#include - -projPJ pj_init(int argc, char **argv) - -projPJ pj_init_plus(const char *defn) - -projUV pj_fwd(projUV val, projPJ proj) - -projUV pj_inv(projUV val, projPJ proj) - -int pj_transform(projPJ src_cs, projPJ dst_cs, long point_count, - int point_offset, double *x, double *y, double *z) - -void pj_free(projPJ proj) - -.SH DESCRIPTION -Procedure \fBpj_init\fR selects and initializes a cartographic projection -with its argument control parameters. -\fBArgc\fR is the number of elements in the array of control strings -\fBargv\fR that each contain individual cartographic control keyword -assignments (\f(CW+\fR \fBproj\fR arguments). -The list must contain at least the \fBproj=\fIprojection\fR and -Earth's radius or elliptical parameters. -If the initialization of the projection is successful a valid -address is returned otherwise a NULL value. - -The \fBpj_init_plus\fR function operates similarly to \fBpj_init\fR but -takes a single string containing the definition, with each parameter -prefixed with a plus sign. For example "+proj=utm +zone=11 +ellps=WGS84". - -Once initialization is performed either forward or inverse -projections can be performed with the returned value of \fBpj_init\fR -used as the argument \fBproj\fR. -The argument structure \fBprojUV\fR values \fBu\fR and \fBv\fR contain -respective longitude and latitude or x and y. -Latitude and longitude are in radians. -If a projection operation fails, both elements of \fBprojUV\fR are -set to HUGE_VAL (defined in \fImath.h\fR). - -\fBNote:\fR all projections have a forward mode, but some do not have -an inverse projection. -If the projection does not have an inverse the projPJ structure element -\fIinv\fR will be NULL. - -The \fBpj_transform\fR function may be used to transform points between -the two provided coordinate systems. In addition to converting between -cartographic projection coordinates and geographic coordinates, this function -also takes care of datum shifts if possible between the source and destination -coordinate system. Unlike \fBpj_fwd\fR and \fBpj_inv\fR it is also allowable -for the coordinate system definitions (\fBPJ *\fR) to be geographic coordinate -systems (defined as +proj=latlong). The \fBx\fR, \fBy\fR and \fBz\fR arrays -contain the input values of the points, and are replaced with the output -values. The \fBpoint_offset\fR should indicate the spacing the of \fBx,y,z\fR -arrays, normally 1. The function returns zero on success, or the error number (also in -pj_errno) on failure. - -Memory associated with the projection may be freed with \fBpj_free\fR. -.SH EXAMPLE -The following program reads latitude and longitude values in decimal -degrees, performs Mercator projection with a Clarke 1866 ellipsoid and -a 33\(de latitude of true scale and prints the projected -cartesian values in meters: -.nf -\f(CW -#include - -main(int argc, char **argv) { - char *args[] = { "proj=merc", "ellps=clrk66", "lat_ts=33" }; - projUV p; - projPJ pj; - - if (!(pj = pj_init(3, args))) - exit(1); - while (scanf("%lf %lf", &p.v, &p.u) == 2) { - p.u *= DEG_TO_RAD; - p.v *= DEG_TO_RAD; - p = pj_fwd(p, pj); - printf("%.2f\et%.2f\en", p.u, p.v); - } - exit(0); -} \fR -.br -.fi -.SH LIBRARY -libproj.a \- library of projections and support procedures -.SH SEE ALSO -.B https://github.com/OSGeo/proj.4/wiki/ProjAPI, proj(1), -.br -.I "Cartographic Projection Procedures for the UNIX Environment\(emA User's Manual," -(Evenden, 1990, Open-file report 90\-284). -.SH BUGS -A list of known bugs can found at https://github.com/OSGeo/PROJ/issues -where new bug reports can be submitted too. -.SH HOME PAGE -https://proj.org/ diff --git a/src/Makefile.am b/src/Makefile.am index 8ab30a33b0..308204e005 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,7 +10,7 @@ AM_CPPFLAGS = -DPROJ_LIB=\"$(pkgdatadir)\" \ -DMUTEX_@MUTEX_SETTING@ -I$(top_srcdir)/include @SQLITE3_CFLAGS@ @TIFF_CFLAGS@ @TIFF_ENABLED_FLAGS@ @CURL_CFLAGS@ @CURL_ENABLED_FLAGS@ AM_CXXFLAGS = @CXX_WFLAGS@ @FLTO_FLAG@ -include_HEADERS = proj.h proj_experimental.h proj_constants.h proj_api.h geodesic.h \ +include_HEADERS = proj.h proj_experimental.h proj_constants.h geodesic.h \ proj_symbol_rename.h EXTRA_DIST = bin_cct.cmake bin_gie.cmake bin_cs2cs.cmake \ diff --git a/src/apps/emess.cpp b/src/apps/emess.cpp index 53018ba8f1..138cbf01ac 100644 --- a/src/apps/emess.cpp +++ b/src/apps/emess.cpp @@ -19,7 +19,7 @@ #include #include -#include "proj_api.h" +#include "proj_internal.h" #include "proj_config.h" #define EMESS_ROUTINE #include "emess.h" diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp index d9d9c26132..0a4489ae99 100644 --- a/src/iso19111/datum.cpp +++ b/src/iso19111/datum.cpp @@ -43,7 +43,6 @@ // clang-format off #include "proj.h" #include "proj_internal.h" -#include "proj_api.h" // clang-format on #include diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index 7d15172e7f..d5d197d129 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -63,7 +63,6 @@ // clang-format off #include "proj.h" #include "proj_internal.h" -#include "proj_api.h" // clang-format on #include diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index c013ce242a..40fd7aafd3 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -70,7 +70,6 @@ // clang-format off #include "proj.h" #include "proj_internal.h" -#include "proj_api.h" // clang-format on using namespace NS_PROJ::common; diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index 704ece3d50..bbf8663604 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -287,7 +287,6 @@ set(SRC_LIBPROJ_CORE ) set(HEADERS_LIBPROJ - proj_api.h proj.h proj_experimental.h proj_constants.h diff --git a/src/mutex.cpp b/src/mutex.cpp index da415e5580..2cc4d0a11c 100644 --- a/src/mutex.cpp +++ b/src/mutex.cpp @@ -34,11 +34,6 @@ #ifndef _WIN32 #include "proj_config.h" #include "proj_internal.h" -#else -#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H -#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H -#endif -#include "proj_api.h" #endif /* on win32 we always use win32 mutexes, even if pthreads are available */ diff --git a/src/proj.h b/src/proj.h index fbed71b04c..88b66be9cb 100644 --- a/src/proj.h +++ b/src/proj.h @@ -119,10 +119,6 @@ #include /* For size_t */ -#ifdef PROJ_API_H -#error proj.h must be included before proj_api.h -#endif - #ifdef PROJ_RENAME_SYMBOLS #include "proj_symbol_rename.h" #endif diff --git a/src/proj_api.h b/src/proj_api.h deleted file mode 100644 index 24046026b1..0000000000 --- a/src/proj_api.h +++ /dev/null @@ -1,227 +0,0 @@ -/****************************************************************************** - * Project: PROJ.4 - * Purpose: Public (application) include file for PROJ.4 API, and constants. - * Author: Frank Warmerdam, - * - ****************************************************************************** - * Copyright (c) 2001, 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. - *****************************************************************************/ - -/* - * This version number should be updated with every release! - * - * This file is expected to be removed from the PROJ distribution - * when a few minor-version releases has been made. - * - */ - -#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H -#error 'To use the proj_api.h you must define the macro ACCEPT_USE_OF_DEPRECATED_PROJ_API_H' -#endif - -#ifndef PJ_VERSION -#define PJ_VERSION 700 -#endif - -#ifdef PROJ_RENAME_SYMBOLS -#include "proj_symbol_rename.h" -#endif - - -/* If we're not asked for PJ_VERSION only, give them everything */ -#ifndef PROJ_API_INCLUDED_FOR_PJ_VERSION_ONLY -/* General projections header file */ -#ifndef PROJ_API_H -#define PROJ_API_H - -/* standard inclusions */ -#include -#include -#include - -#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 - -#ifdef __cplusplus -extern "C" { -#endif - - -/* pj_init() and similar functions can be used with a non-C locale */ -/* Can be detected too at runtime if the symbol pj_atof exists */ -#define PJ_LOCALE_SAFE 1 - -#define RAD_TO_DEG 57.295779513082321 -#define DEG_TO_RAD .017453292519943296 - - -#if defined(PROJ_H) -#define PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API -#endif - - - -extern char const PROJ_DLL pj_release[]; /* global release id string */ -PROJ_DLL extern int pj_errno; /* global error return code */ - -#ifndef PROJ_INTERNAL_H -/* replaced by enum proj_log_level in proj_internal.h */ -#define PJ_LOG_NONE 0 -#define PJ_LOG_ERROR 1 -#define PJ_LOG_DEBUG_MAJOR 2 -#define PJ_LOG_DEBUG_MINOR 3 -#endif - -#ifdef PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API - /* These make the function declarations below conform with classic proj */ - typedef PJ *projPJ; /* projPJ is a pointer to PJ */ - typedef struct projCtx_t *projCtx; /* projCtx is a pointer to projCtx_t */ -# define projXY PJ_XY -# define projLP PJ_LP -# define projXYZ PJ_XYZ -# define projLPZ PJ_LPZ - -#else - /* i.e. proj_api invoked as primary API */ - typedef struct { double u, v; } projUV; - typedef struct { double u, v, w; } projUVW; - typedef void *projPJ; - #define projXY projUV - #define projLP projUV - #define projXYZ projUVW - #define projLPZ projUVW - typedef void *projCtx; -#endif - - -/* If included *after* proj.h finishes, we have alternative names */ -/* file reading api, like stdio */ -typedef int *PAFile; -typedef struct projFileAPI_t { - PAFile (*FOpen)(projCtx ctx, const char *filename, const char *access); - size_t (*FRead)(void *buffer, size_t size, size_t nmemb, PAFile file); - int (*FSeek)(PAFile file, long offset, int whence); - long (*FTell)(PAFile file); - void (*FClose)(PAFile); -} projFileAPI; - - - -/* procedure prototypes */ - -projCtx PROJ_DLL pj_get_default_ctx(void); -projCtx PROJ_DLL pj_get_ctx( projPJ ); - -projXY PROJ_DLL pj_fwd(projLP, projPJ); -projLP PROJ_DLL pj_inv(projXY, projPJ); - -projXYZ PROJ_DLL pj_fwd3d(projLPZ, projPJ); -projLPZ PROJ_DLL pj_inv3d(projXYZ, projPJ); - - -int PROJ_DLL pj_transform( projPJ src, projPJ dst, long point_count, int point_offset, - double *x, double *y, double *z ); -int PROJ_DLL pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset, - double *x, double *y, double *z ); -int PROJ_DLL pj_geocentric_to_geodetic( double a, double es, - long point_count, int point_offset, - double *x, double *y, double *z ); -int PROJ_DLL pj_geodetic_to_geocentric( double a, double es, - long point_count, int point_offset, - double *x, double *y, double *z ); -int PROJ_DLL pj_compare_datums( projPJ srcdefn, projPJ dstdefn ); -int PROJ_DLL pj_apply_gridshift( projCtx, const char *, int, - long point_count, int point_offset, - double *x, double *y, double *z ); -void PROJ_DLL pj_deallocate_grids(void); -void PROJ_DLL pj_clear_initcache(void); -int PROJ_DLL pj_is_latlong(projPJ); -int PROJ_DLL pj_is_geocent(projPJ); -void PROJ_DLL pj_get_spheroid_defn(projPJ defn, double *major_axis, double *eccentricity_squared); -void PROJ_DLL pj_pr_list(projPJ); -void PROJ_DLL pj_free(projPJ); -void PROJ_DLL pj_set_finder( const char *(*)(const char *) ); -void PROJ_DLL pj_set_searchpath ( int count, const char **path ); -projPJ PROJ_DLL pj_init(int, char **); -projPJ PROJ_DLL pj_init_plus(const char *); -projPJ PROJ_DLL pj_init_ctx( projCtx, int, char ** ); -projPJ PROJ_DLL pj_init_plus_ctx( projCtx, const char * ); -char PROJ_DLL *pj_get_def(projPJ, int); -projPJ PROJ_DLL pj_latlong_from_proj( projPJ ); -int PROJ_DLL pj_has_inverse(projPJ); - - -void PROJ_DLL *pj_malloc(size_t); -void PROJ_DLL pj_dalloc(void *); -void PROJ_DLL *pj_calloc (size_t n, size_t size); -void PROJ_DLL *pj_dealloc (void *ptr); -char PROJ_DLL *pj_strdup(const char *str); -char PROJ_DLL *pj_strerrno(int); -int PROJ_DLL *pj_get_errno_ref(void); -const char PROJ_DLL *pj_get_release(void); -void PROJ_DLL pj_acquire_lock(void); -void PROJ_DLL pj_release_lock(void); -void PROJ_DLL pj_cleanup_lock(void); - -void PROJ_DLL pj_set_ctx( projPJ, projCtx ); -projCtx PROJ_DLL pj_ctx_alloc(void); -void PROJ_DLL pj_ctx_free( projCtx ); -int PROJ_DLL pj_ctx_get_errno( projCtx ); -void PROJ_DLL pj_ctx_set_errno( projCtx, int ); -void PROJ_DLL pj_ctx_set_debug( projCtx, int ); -void PROJ_DLL pj_ctx_set_logger( projCtx, void (*)(void *, int, const char *) ); -void PROJ_DLL pj_ctx_set_app_data( projCtx, void * ); -void PROJ_DLL *pj_ctx_get_app_data( projCtx ); -void PROJ_DLL pj_ctx_set_fileapi( projCtx, projFileAPI *); -projFileAPI PROJ_DLL *pj_ctx_get_fileapi( projCtx ); - -void PROJ_DLL pj_log( projCtx ctx, int level, const char *fmt, ... ); -void PROJ_DLL pj_stderr_logger( void *, int, const char * ); - -/* file api */ -projFileAPI PROJ_DLL *pj_get_default_fileapi(void); - -PAFile PROJ_DLL pj_ctx_fopen(projCtx ctx, const char *filename, const char *access); -size_t PROJ_DLL pj_ctx_fread(projCtx ctx, void *buffer, size_t size, size_t nmemb, PAFile file); -int PROJ_DLL pj_ctx_fseek(projCtx ctx, PAFile file, long offset, int whence); -long PROJ_DLL pj_ctx_ftell(projCtx ctx, PAFile file); -void PROJ_DLL pj_ctx_fclose(projCtx ctx, PAFile file); -char PROJ_DLL *pj_ctx_fgets(projCtx ctx, char *line, int size, PAFile file); - -PAFile PROJ_DLL pj_open_lib(projCtx, const char *, const char *); -int PROJ_DLL pj_find_file(projCtx ctx, const char *short_filename, - char* out_full_filename, size_t out_full_filename_size); - -#ifdef __cplusplus -} -#endif - -#endif /* ndef PROJ_API_H */ -#endif /* ndef PROJ_API_INCLUDED_FOR_PJ_VERSION_ONLY */ diff --git a/src/proj_internal.h b/src/proj_internal.h index a587c0379b..3e5fa72d75 100644 --- a/src/proj_internal.h +++ b/src/proj_internal.h @@ -66,10 +66,6 @@ #include "proj.h" -#ifdef PROJ_API_H -#error proj_internal.h must be included before proj_api.h -#endif - #ifdef PROJ_RENAME_SYMBOLS #include "proj_symbol_rename.h" #endif @@ -871,7 +867,162 @@ void pj_load_ini(PJ_CONTEXT* ctx); std::string PROJ_DLL pj_context_get_grid_cache_filename(PJ_CONTEXT *ctx); std::string PROJ_DLL pj_context_get_user_writable_directory(PJ_CONTEXT *ctx, bool create); -/* classic public API */ -#include "proj_api.h" + + + +/*****************************************************************************/ +/* */ +/* proj_api.h */ +/* */ +/* The rest of this header file includes what used to be "proj_api.h" */ +/* */ +/*****************************************************************************/ + +/* pj_init() and similar functions can be used with a non-C locale */ +/* Can be detected too at runtime if the symbol pj_atof exists */ +#define PJ_LOCALE_SAFE 1 + +#define RAD_TO_DEG 57.295779513082321 +#define DEG_TO_RAD .017453292519943296 + + +#if defined(PROJ_H) +#define PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API +#endif + + + +extern char const PROJ_DLL pj_release[]; /* global release id string */ +PROJ_DLL extern int pj_errno; /* global error return code */ + +#ifndef PROJ_INTERNAL_H +/* replaced by enum proj_log_level in proj_internal.h */ +#define PJ_LOG_NONE 0 +#define PJ_LOG_ERROR 1 +#define PJ_LOG_DEBUG_MAJOR 2 +#define PJ_LOG_DEBUG_MINOR 3 +#endif + +#ifdef PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API + /* These make the function declarations below conform with classic proj */ + typedef PJ *projPJ; /* projPJ is a pointer to PJ */ + typedef struct projCtx_t *projCtx; /* projCtx is a pointer to projCtx_t */ +# define projXY PJ_XY +# define projLP PJ_LP +# define projXYZ PJ_XYZ +# define projLPZ PJ_LPZ + +#else + /* i.e. proj_api invoked as primary API */ + typedef struct { double u, v; } projUV; + typedef struct { double u, v, w; } projUVW; + typedef void *projPJ; + #define projXY projUV + #define projLP projUV + #define projXYZ projUVW + #define projLPZ projUVW + typedef void *projCtx; +#endif + + +/* If included *after* proj.h finishes, we have alternative names */ +/* file reading api, like stdio */ +typedef int *PAFile; +typedef struct projFileAPI_t { + PAFile (*FOpen)(projCtx ctx, const char *filename, const char *access); + size_t (*FRead)(void *buffer, size_t size, size_t nmemb, PAFile file); + int (*FSeek)(PAFile file, long offset, int whence); + long (*FTell)(PAFile file); + void (*FClose)(PAFile); +} projFileAPI; + + + +/* procedure prototypes */ + +projCtx PROJ_DLL pj_get_default_ctx(void); +projCtx PROJ_DLL pj_get_ctx( projPJ ); + +projXY PROJ_DLL pj_fwd(projLP, projPJ); +projLP PROJ_DLL pj_inv(projXY, projPJ); + +projXYZ PROJ_DLL pj_fwd3d(projLPZ, projPJ); +projLPZ PROJ_DLL pj_inv3d(projXYZ, projPJ); + + +int PROJ_DLL pj_transform( projPJ src, projPJ dst, long point_count, int point_offset, + double *x, double *y, double *z ); +int PROJ_DLL pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset, + double *x, double *y, double *z ); +int PROJ_DLL pj_geocentric_to_geodetic( double a, double es, + long point_count, int point_offset, + double *x, double *y, double *z ); +int PROJ_DLL pj_geodetic_to_geocentric( double a, double es, + long point_count, int point_offset, + double *x, double *y, double *z ); +int PROJ_DLL pj_compare_datums( projPJ srcdefn, projPJ dstdefn ); +int PROJ_DLL pj_apply_gridshift( projCtx, const char *, int, + long point_count, int point_offset, + double *x, double *y, double *z ); +void PROJ_DLL pj_deallocate_grids(void); +void PROJ_DLL pj_clear_initcache(void); +int PROJ_DLL pj_is_latlong(projPJ); +int PROJ_DLL pj_is_geocent(projPJ); +void PROJ_DLL pj_get_spheroid_defn(projPJ defn, double *major_axis, double *eccentricity_squared); +void PROJ_DLL pj_pr_list(projPJ); +void PROJ_DLL pj_free(projPJ); +void PROJ_DLL pj_set_finder( const char *(*)(const char *) ); +void PROJ_DLL pj_set_searchpath ( int count, const char **path ); +projPJ PROJ_DLL pj_init(int, char **); +projPJ PROJ_DLL pj_init_plus(const char *); +projPJ PROJ_DLL pj_init_ctx( projCtx, int, char ** ); +projPJ PROJ_DLL pj_init_plus_ctx( projCtx, const char * ); +char PROJ_DLL *pj_get_def(projPJ, int); +projPJ PROJ_DLL pj_latlong_from_proj( projPJ ); +int PROJ_DLL pj_has_inverse(projPJ); + + +void PROJ_DLL *pj_malloc(size_t); +void PROJ_DLL pj_dalloc(void *); +void PROJ_DLL *pj_calloc (size_t n, size_t size); +void PROJ_DLL *pj_dealloc (void *ptr); +char PROJ_DLL *pj_strdup(const char *str); +char PROJ_DLL *pj_strerrno(int); +int PROJ_DLL *pj_get_errno_ref(void); +const char PROJ_DLL *pj_get_release(void); +void PROJ_DLL pj_acquire_lock(void); +void PROJ_DLL pj_release_lock(void); +void PROJ_DLL pj_cleanup_lock(void); + +void PROJ_DLL pj_set_ctx( projPJ, projCtx ); +projCtx PROJ_DLL pj_ctx_alloc(void); +void PROJ_DLL pj_ctx_free( projCtx ); +int PROJ_DLL pj_ctx_get_errno( projCtx ); +void PROJ_DLL pj_ctx_set_errno( projCtx, int ); +void PROJ_DLL pj_ctx_set_debug( projCtx, int ); +void PROJ_DLL pj_ctx_set_logger( projCtx, void (*)(void *, int, const char *) ); +void PROJ_DLL pj_ctx_set_app_data( projCtx, void * ); +void PROJ_DLL *pj_ctx_get_app_data( projCtx ); +void PROJ_DLL pj_ctx_set_fileapi( projCtx, projFileAPI *); +projFileAPI PROJ_DLL *pj_ctx_get_fileapi( projCtx ); + +void PROJ_DLL pj_log( projCtx ctx, int level, const char *fmt, ... ); +void PROJ_DLL pj_stderr_logger( void *, int, const char * ); + +/* file api */ +projFileAPI PROJ_DLL *pj_get_default_fileapi(void); + +PAFile PROJ_DLL pj_ctx_fopen(projCtx ctx, const char *filename, const char *access); +size_t PROJ_DLL pj_ctx_fread(projCtx ctx, void *buffer, size_t size, size_t nmemb, PAFile file); +int PROJ_DLL pj_ctx_fseek(projCtx ctx, PAFile file, long offset, int whence); +long PROJ_DLL pj_ctx_ftell(projCtx ctx, PAFile file); +void PROJ_DLL pj_ctx_fclose(projCtx ctx, PAFile file); +char PROJ_DLL *pj_ctx_fgets(projCtx ctx, char *line, int size, PAFile file); + +PAFile PROJ_DLL pj_open_lib(projCtx, const char *, const char *); +int PROJ_DLL pj_find_file(projCtx ctx, const char *short_filename, + char* out_full_filename, size_t out_full_filename_size); + + #endif /* ndef PROJ_INTERNAL_H */ diff --git a/src/projections/calcofi.cpp b/src/projections/calcofi.cpp index 57c12ddef1..d1e96de81d 100644 --- a/src/projections/calcofi.cpp +++ b/src/projections/calcofi.cpp @@ -4,7 +4,6 @@ #include "proj.h" #include "proj_internal.h" -#include "proj_api.h" PROJ_HEAD(calcofi, "Cal Coop Ocean Fish Invest Lines/Stations") "\n\tCyl, Sph&Ell"; diff --git a/src/tests/multistresstest.cpp b/src/tests/multistresstest.cpp index 33d2d7387e..6af359799d 100644 --- a/src/tests/multistresstest.cpp +++ b/src/tests/multistresstest.cpp @@ -34,7 +34,7 @@ #define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H #endif -#include "proj_api.h" +#include "proj_internal.h" #ifdef _WIN32 #include diff --git a/src/tests/test228.cpp b/src/tests/test228.cpp index 8ae17c8702..b27ebf2fd9 100644 --- a/src/tests/test228.cpp +++ b/src/tests/test228.cpp @@ -30,7 +30,7 @@ #define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H #endif -#include "proj_api.h" +#include "proj_internal.h" #include /* for printf declaration */ diff --git a/test/fuzzers/standard_fuzzer.cpp b/test/fuzzers/standard_fuzzer.cpp index 468e8cbb17..552ac78123 100644 --- a/test/fuzzers/standard_fuzzer.cpp +++ b/test/fuzzers/standard_fuzzer.cpp @@ -36,7 +36,7 @@ #define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H #include "proj.h" -#include "proj_api.h" +#include "proj_internal.h" /* Standalone build: g++ -g -std=c++11 standard_fuzzer.cpp -o standard_fuzzer -fvisibility=hidden -DSTANDALONE ../../src/.libs/libproj.a -lpthread -lsqlite3 -I../../src -I../../include diff --git a/test/gie/epsg.gie b/test/gie/epsg.gie new file mode 100644 index 0000000000..a99dcc25cf --- /dev/null +++ b/test/gie/epsg.gie @@ -0,0 +1,24 @@ + + +crs_src EPSG:4258 +csr_dst EPSG:25832 +tolerance 1 cm + +accept 56.0 12.0 +expect 6210141.33 687071.44 + +operation +proj=utm +zone=32 +ellps=GRS80 +tolerance 1 cm + +accept 12.0 56.0 +expect 687071.44 6210141.33 + +------------------------------------------------------------------------------- +Test results from transformations initalized by source and destination EPSG +codes. +------------------------------------------------------------------------------- + + + + + diff --git a/test/unit/pj_transform_test.cpp b/test/unit/pj_transform_test.cpp index ddb054f0ae..5f390541aa 100644 --- a/test/unit/pj_transform_test.cpp +++ b/test/unit/pj_transform_test.cpp @@ -35,7 +35,6 @@ // clang-format off #include #include "proj_internal.h" -#include // clang-format on namespace {