数据类型

本节描述PROJ.4中使用的大量数据类型。根据经验,PROJ.4数据类型的前缀是 PJ_ ,或在一个特定的情况下,简称为 PJ . 一些值得注意的例外可以追溯到项目4的早期,当时 PJ_ 前缀使用不一致。

变换对象

type PJ

包含与给定投影或变换有关的一切的对象。作为PROJ.4库的用户,您只暴露于指向此对象的指针,并且内容隐藏在公共API后面。 PJ 对象是用 proj_create() 被摧毁了 proj_destroy() .

type PJ_DIRECTION

枚举,用于表示给定转换应按哪个方向执行。在转换函数调用中使用,如上一节所述 transformation functions .

前向变换定义为:c:

typedef enum proj_direction {
    PJ_FWD   =  1,   /* Forward    */
    PJ_IDENT =  0,   /* Do nothing */
    PJ_INV   = -1    /* Inverse    */
} PJ_DIRECTION;
enumerator PJ_FWD

在前进方向执行变换。

enumerator PJ_IDENT

身份。什么也不做。

enumerator PJ_INV

逆方向变换。

type PJ_CONTEXT

上下文对象支持项目4的安全多线程使用。每个 PJ 对象连接到上下文(如果未指定,则使用默认上下文)。上下文中的所有操作都应该在同一个线程中执行。 PJ_CONTEXT 对象是用 proj_context_create() 被摧毁了 proj_context_destroy() .

type PJ_AREA

6.0.0 新版功能.

描述执行变换的区域的不透明对象。

它与 proj_create_crs_to_crs() 选择两个输入坐标系之间的最佳转换。

二维坐标

各种二维坐标数据类型。

type PJ_LP

大地坐标,经纬度。通常以弧度为单位。

typedef struct { double lam, phi; } PJ_LP;
double PJ_LP.lam

经度。拉姆达。

double PJ_LP.phi

纬度。功率因数。

type PJ_XY

二维笛卡尔坐标。

typedef struct { double x, y; } PJ_XY;
double PJ_XY.x

东距。

double PJ_XY.y

北距。

type PJ_UV

二维通用坐标。通常在内容可以是 PJ_XYPJ_LP .

typedef struct {double u, v; } PJ_UV;
double PJ_UV.u

经度或东距,取决于用途。

double PJ_UV.v

纬度或北距,取决于用途。

三维坐标

以下数据类型是上述数据类型的三维等价物。

type PJ_LPZ

三维版本 PJ_LP . 包含经度、纬度和垂直分量。

typedef struct { double lam, phi, z; } PJ_LPZ;
double PJ_LPZ.lam

经度。拉姆达。

double PJ_LPZ.phi

纬度。功率因数。

double PJ_LPZ.z

垂直分量。

type PJ_XYZ

三维笛卡尔坐标。延伸 PJ_XY .

typedef struct { double x, y, z; } PJ_XYZ;
double PJ_XYZ.x

东距或三维笛卡尔坐标系的X分量。

double PJ_XYZ.y

北距或三维笛卡尔坐标系的Y分量。

double PJ_XYZ.z

三维笛卡尔坐标系的垂直分量或Z分量。

type PJ_UVW

三维扩展 PJ_UV .

typedef struct {double u, v, w; } PJ_UVW;
double PJ_UVW.u

经度或东距,取决于用途。

double PJ_UVW.v

纬度或北距,取决于用途。

double PJ_UVW.w

垂直分量。

时空坐标类型

以下数据类型是上述三元组在时域中的扩展。

type PJ_LPZT

时空版本 PJ_LPZ .

typedef struct {
    double lam;
    double phi;
    double z;
    double t;
} PJ_LPZT;
double PJ_LPZT.lam

经度。

double PJ_LPZT.phi

纬度

double PJ_LPZT.z

垂直分量。

double PJ_LPZT.t

时间成分。

type PJ_XYZT

一般时空坐标。适用于带有附加时间戳的笛卡尔坐标。

typedef struct {
    double x;
    double y;
    double z;
    double t;
} PJ_XYZT;
double PJ_XYZT.x

东距或三维笛卡尔坐标系的X分量。

double PJ_XYZT.y

北距或三维笛卡尔坐标系的Y分量。

double PJ_XYZT.z

垂直或三维笛卡尔坐标系的Z分量。

double PJ_XYZT.t

时间成分。

type PJ_UVWT

时空版本 PJ_UVW .

typedef struct { double u, v, w, t; } PJ_UVWT;
double PJ_UVWT.e

第一个水平分量。

double PJ_UVWT.n

第二个水平分量。

double PJ_UVWT.w

垂直分量。

double PJ_UVWT.t

时间成分。

大地测量计算的辅助类型

type PJ_OPK

旋转,例如三个欧拉角。

typedef struct { double o, p, k; } PJ_OPK;
double PJ_OPK.o

第一旋转角,Ω。

double PJ_OPK.p

第二旋转角,φ。

double PJ_OPK.k

第三旋转角,kappa。

type PJ_ENU

东、北、上三部分。

typedef struct { double e, n, u; }          PJ_ENU;
double PJ_ENU.e

东部部分。

double PJ_ENU.n

北部组件。

double PJ_ENU.u

向上组件。

type PJ_GEOD

测地长度,正向和反向方位角。

typedef struct { double s, a1, a2; }        PJ_GEOD;
double PJ_GEOD.s

测地长度。

double PJ_GEOD.a1

前方位角。

double PJ_GEOD.a2

反转方位角。

复杂坐标类型

type PJ_COORD

通用坐标联合类型,适用于二维、三维和四维。这是项目中使用的默认坐标数据类型。

typedef union {
    double v[4];
    PJ_XYZT xyzt;
    PJ_UVWT uvwt;
    PJ_LPZT lpzt;
    PJ_GEOD geod;
    PJ_OPK opk;
    PJ_ENU enu;
    PJ_XYZ  xyz;
    PJ_UVW  uvw;
    PJ_LPZ  lpz;
    PJ_XY   xy;
    PJ_UV   uv;
    PJ_LP   lp;
} PJ_COORD ;
double v[4]

一般四维向量。

PJ_XYZT PJ_COORD.xyzt

时空笛卡尔坐标。

PJ_UVWT PJ_COORD.uvwt

时空属坐标。

PJ_LPZT PJ_COORD.lpzt

经度、纬度、垂直和时间分量。

PJ_GEOD PJ_COORD.geod

测地长度,正向和反向方位角。

PJ_OPK PJ_COORD.opk

旋转,例如三个欧拉角。

PJ_ENU PJ_COORD.enu

东、北、上三部分。

PJ_XYZ PJ_COORD.xyz

三维笛卡尔坐标。

PJ_UVW PJ_COORD.uvw

三维通用坐标。

PJ_LPZ PJ_COORD.lpz

经度、纬度和垂直分量。

PJ_XY PJ_COORD.xy

二维笛卡尔坐标。

PJ_UV PJ_COORD.uv

二维通用坐标。

PJ_LP PJ_COORD.lp

经纬度。

投影导数

type PJ_FACTORS

各种制图特性,如比例尺因子、角度畸变和子午线会聚。计算方式 proj_factors() .

typedef struct {
    double meridional_scale;
    double parallel_scale;
    double areal_scale;

    double angular_distortion;
    double meridian_parallel_angle;
    double meridian_convergence;

    double tissot_semimajor;
    double tissot_semiminor;

    double dx_dlam;
    double dx_dphi;
    double dy_dlam;
    double dy_dphi;
} PJ_FACTORS;
double PJ_FACTORS.meridional_scale

坐标经向尺度 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.parallel_scale

坐标平行比例尺 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.areal_scale

坐标处的面积比例因子 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.angular_distortion

坐标角畸变 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.meridian_parallel_angle

子午线/平行角, \(\theta^\prime\) ,在坐标处 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.meridian_convergence

坐标子午线收敛 \(\left(\lambda,\phi\right)\) . 有时也称为 栅格偏角 .

double PJ_FACTORS.tissot_semimajor

最大比例因子。

double PJ_FACTORS.tissot_semiminor

最小比例因子。

double PJ_FACTORS.dx_dlam

偏导数 \(\frac{{\partial x}}{{\partial \lambda}}\) 坐标系 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.dy_dlam

偏导数 \(\frac{{\partial y}}{{\partial \lambda}}\) 坐标系 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.dx_dphi

偏导数 \(\frac{{\partial x}}{{\partial \phi}}\) 坐标系 \(\left(\lambda,\phi\right)\) .

double PJ_FACTORS.dy_dphi

偏导数 \(\frac{{\partial y}}{{\partial \phi}}\) 坐标系 \(\left(\lambda,\phi\right)\) .

列表结构

type PJ_OPERATIONS

项目4操作说明

struct PJ_OPERATIONS {
    const char  *id;            /* operation keyword */
    PJ *(*proj)(PJ *);          /* operation  entry point */
    char    * const *descr;     /* description text */
};
const char *id

操作关键字。

PJ *(*op)(PJ*)

操作入口点。

char *const *descr

操作说明。

type PJ_ELLPS

项目4中定义的椭球体说明

struct PJ_ELLPS {
    const char  *id;
    const char  *major;
    const char  *ell;
    const char  *name;
};
const char *id

椭球体的关键字名称。

const char *major

椭球体的半长轴,或球体的半径。

const char *ell

椭圆参数,例如 rf=298.257b=6356772.2

const char *name

椭球体的名称

type PJ_UNITS

项目中定义的距离单位。

struct PJ_UNITS {
    const char  *id;        /* units keyword */
    const char  *to_meter;  /* multiply by value to get meters */
    const char  *name;      /* comments */
    double      factor;     /* to_meter factor in actual numbers */
};
const char *id

单位的关键字。

const char *to_meter

将给定单位转换为米的系数的文本表示形式

const char *name

单位名称。

double factor

将单位转换为米的转换系数。

type PJ_PRIME_MERIDIANS

项目中定义的本初子午线。

struct PJ_PRIME_MERIDIANS {
    const char  *id;
    const char  *defn;
};
const char *id

本初子午线的关键字

const char *def

以DMS格式从格林威治偏移。

信息结构

type PJ_INFO

包含有关项目当前实例的信息的结构。结构由填充 proj_info() .

typedef struct {
    int           major;
    int           minor;
    int           patch;
    const char   *release;
    const char   *version;
    const char   *searchpath;
} PJ_INFO;
const char *PJ_INFO.release

发布信息。版本号和发布日期,例如“Rel。4.9.3,2016年8月15日”。

const char *PJ_INFO.version

完整版本号的文本表示,例如“4.9.3”。

int PJ_INFO.major

主要版本号。

int PJ_INFO.minor

次要版本号。

int PJ_INFO.patch

补丁版本。

const char PJ_INFO.searchpath

搜索项目的路径。以分号(Windows)或冒号(非Windows)分隔的目录列表,例如 C:\\Users\\doctorwho;C:\\OSGeo4W64\\share\\proj 。栅格和 init files 在搜索路径的目录中查找。

type PJ_PROJ_INFO

保存有关 PJ 对象。填充者 proj_pj_info() . 这个 PJ_PROJ_INFO 对象提供对 PJ ,所以一旦 PJ 被销毁或以其他方式变得无效 PJ_PROJ_INFO

typedef struct {
    const char  *id;
    const char  *description;
    const char  *definition;
    int          has_inverse;
    double       accuracy;
} PJ_PROJ_INFO;
const char *PJ_PROJ_INFO.id

操作的短ID PJ 对象是基于的,即 +proj= 在投影串中,例如“ merc “。”

const char *PJ_PROJ_INFO.description

对操作的详细描述 PJ 对象基于,例如“ Mercator Cyl, Sph&Ell lat_ts= “。

const char *PJ_PROJ_INFO.definition

用于创建 PJ 对象,例如“ +proj=merc +lat_0=24 +lon_0=53 +ellps=WGS84 “。

int PJ_PROJ_INFO.has_inverse

如果定义的操作存在反向映射,则为1,否则为0。

double PJ_PROJ_INFO.accuracy

转换的预期精度。-1如果未知。

type PJ_GRID_INFO

在项目的搜索路径中保存有关特定网格的信息的结构。填充函数 proj_grid_info() .

typedef struct {
    char        gridname[32];
    char        filename[260];
    char        format[8];
    LP          lowerleft;
    LP          upperright;
    int         n_lon, n_lat;
    double      cs_lon, cs_lat;
} PJ_GRID_INFO;
char PJ_GRID_INFO.gridname[32]

网格名称,例如“ BETA2007.gsb “。

char PJ_GRID_INFO

网格文件的完整路径,例如。 "C:\OSGeo4W64\share\proj\BETA2007.gsb"

char PJ_GRID_INFO.format[8]

网格文件的文件格式,例如“ ntv2

LP PJ_GRID_INFO.lowerleft

栅格左下角的大地坐标。

LP PJ_GRID_INFO.upperright

栅格右上角的大地坐标。

int PJ_GRID_INFO.n_lon

纵向网格单元数。

int PJ_GRID_INFO.n_lat

纬度方向上的栅格单元数。

double PJ_GRID_INFO.cs_lon

纵向细胞大小。以弧度为单位。

double PJ_GRID_INFO.cs_lat

细胞在纬度方向的大小。以弧度为单位。

type PJ_INIT_INFO

在PROJ的搜索路径中保存有关特定init文件的信息的结构。填充函数 proj_init_info() .

typedef struct {
    char        name[32];
    char        filename[260];
    char        version[32];
    char        origin[32];
    char        lastupdate[16];
} PJ_INIT_INFO;
char PJ_INIT_INFO.name[32]

初始化文件的名称,例如“ epsg “。

char PJ_INIT_INFO.filename[260]

初始化文件的完整路径,例如“ C:\OSGeo4W64\share\proj\epsg

char PJ_INIT_INFO.version[32]

Init文件的版本号,例如“ 9.0.0

char PJ_INIT_INFO.origin[32]

初始化文件的原始实体,例如“ EPSG

char PJ_INIT_INFO.lastupdate

Init文件的上次更新日期。

错误代码

8.0.0 新版功能.

下面定义了三类错误。一个给定的错误代码属于一个类可以用二进制和测试进行位测试。在某些罕见的情况下,如果错误不适合更精确的错误值,错误类本身可以用作错误值。

这些错误代码对于其中的一些仍然是相当普遍的。有关实际错误的详细信息通常会记录在PJu LOGu ERROR level中。

类项目错误错误无效

PROJ_ERR_INVALID_OP

通常与坐标操作初始化相关的错误代码类,通常是在从项目字符串创建PJ*对象时。

备注

其中一些也可以在坐标转换期间发出,如PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID,以防资源加载延迟到真正需要时。

PROJ_ERR_INVALID_OP_WRONG_SYNTAX

管道结构无效,缺少+proj参数等。

PROJ_ERR_INVALID_OP_MISSING_ARG

缺少必需的操作参数

PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE

其中一个操作参数的值非法。

PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS

互斥论点

PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID

找不到文件或文件内容无效(项目错误无效操作非法参数值的特殊情况)

类项目错误

PROJ_ERR_COORD_TRANSFM

与特定坐标变换有关的一类错误代码。

PROJ_ERR_COORD_TRANSFM_INVALID_COORD

输入坐标无效。例如,纬度>90°。

PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN

坐标在投影域之外。例如近似墨卡托(经度-lon_0>90°)或迭代收敛法失败。

PROJ_ERR_COORD_TRANSFM_NO_OPERATION

找不到操作,例如,如果没有匹配所需的精度,或者如果要求不使用球形变换,则它们将只是这样的候选。

PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID

要变换的点位于栅格/子栅格/三角网之外。

PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA

指向转换的点位于计算结果为nodata的网格单元中。

类PROJu ERRu OTHER中的错误

PROJ_ERR_OTHER

不符合上述类别之一的错误代码类别。

PROJ_ERR_OTHER_API_MISUSE

与误用项目API相关的错误。

PROJ_ERR_OTHER_NO_INVERSE_OP

没有可用的反向方法

PROJ_ERR_OTHER_NETWORK_ERROR

访问网络资源时失败。

登录中

type PJ_LOG_LEVEL

项目中日志记录级别的枚举。用于设置项目中的日志记录级别。通常使用 proj_log_level() .

enumerator PJ_LOG_NONE

不要记录任何东西。

enumerator PJ_LOG_ERROR

只记录错误。

enumerator PJ_LOG_DEBUG

记录错误和其他调试信息。

enumerator PJ_LOG_TRACE

最高日志记录级别。记录一切,包括非常详细的调试信息。

enumerator PJ_LOG_TELL

在中使用时的特殊日志级别 proj_log_level() 将返回项目中设置的当前日志记录级别。

5.1.0 新版功能.

type PJ_LOG_FUNC

PROJ使用的日志函数的函数原型。定义为

typedef void (*PJ_LOG_FUNCTION)(void *, int, const char *);

当第一个参数(void pointer)引用调用应用程序使用的数据结构时,第二个参数(int type)用于设置日志记录级别,第三个参数(const char pointer)是将由函数记录的字符串。

5.1.0 新版功能.

设置自定义I/O函数

7.0.0 新版功能.

警告

doxygenstruct: Cannot find file: /opt/proj/docs/build/xml/index.xml

警告

doxygentypedef: Cannot find file: /opt/proj/docs/build/xml/index.xml

警告

doxygenenum: Cannot find file: /opt/proj/docs/build/xml/index.xml

ISO-19111功能的C API

警告

doxygengroup: Cannot find file: /opt/proj/docs/build/xml/index.xml