功能¶
线程上下文¶
-
PJ_CONTEXT *proj_context_create(void)¶
创建新的线程上下文。
- 返回
新的背景
-
PJ_CONTEXT *proj_context_clone(PJ_CONTEXT *ctx)¶
7.2 新版功能.
基于现有上下文创建新的线程上下文。
- 返回
新的背景
-
void proj_context_destroy(PJ_CONTEXT *ctx)¶
取消分配线程上下文。
- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。
转换设置¶
本节中定义的函数返回的对象与 C API for ISO-19111 functionality ,反之亦然。有关更多细节,请参阅其导言段落。
-
PJ *proj_create(PJ_CONTEXT *ctx, const char *definition)¶
从以下对象创建变换对象或CRS对象:
项目字符串,
一根WKT弦,
目标代码(如“EPSG:4326", "骨灰盒:ogc:定义:crs:EPSG::4326“,”骨灰盒:ogc:定义:协调操作:EPSG::1671“),
对象名。e、 “北纬84米”区域。在这种情况下,由于不保证唯一性,将应用启发式方法来确定适当的最佳匹配。
组合复合坐标系参考的OGC URN(例如骨灰盒:ogc:定义:crs,电子稳定程序:crs::2393,crs:EPSG公司:5717“或自定义缩写语法”EPSG:2393+5717"),
一个OGC URN,用于合并串联操作的引用(例如骨灰盒:ogc:定义:协调操作,坐标操作:EPSG●3895,坐标操作:EPSG::1618")
PROJJSON字符串。Json架构位于https://proj.org/schemas/v0.4/projjson.schema.json( 在6.2中添加 )
由两个用“+”分隔的对象名组成的复合CRS。e、 g.“WGS 84+EGM96高度”( 在7.1中添加 )
呼叫示例:
PJ *P = proj_create(0, "+proj=etmerc +lat_0=38 +lon_0=125 +ellps=bessel");
如果项目字符串包含+type=crs选项,则它将被解释为crs定义。特别地,假设地理坐标系具有经度、纬度顺序的轴和角度单位的度。不鼓励使用proj字符串来描述CRS。它是传递CRS描述的传统方法:使用对象代码(EPSG:XXXX)或者建议使用WKT描述以获得更好的表现力。
如果项目字符串不包含+type=crs,则将其解释为协调操作/转换。
如果转换对象的创建失败,函数将返回 0 并更新项目错误号。错误号可以用
proj_errno()
或proj_context_errno()
.归还的人
PJ
-应该释放指针proj_destroy()
.- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。definition (const char*) -- 所需转换的项目字符串。
-
PJ *proj_create_argv(PJ_CONTEXT *ctx, int argc, char **argv)¶
使用argc/argv样式初始化创建转换对象或CRS对象。对于此应用程序,定义项目字符串中的每个参数都是
argv
.呼叫示例:
char *args[3] = {"proj=utm", "zone=32", "ellps=GRS80"}; PJ* P = proj_create_argv(0, 3, args);
如果存在type=crs参数,则这些参数将被解释为crs定义。特别地,假设地理坐标系具有经度、纬度顺序的轴和角度单位的度。
如果没有type=crs参数,则将其解释为协调操作/转换。
如果转换对象的创建失败,函数将返回 0 并更新项目错误号。错误号可以用
proj_errno()
或proj_context_errno()
.归还的人
PJ
-应该释放指针proj_destroy()
.- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。argc (int) -- 中的参数计数
argv
argv (char **) -- 带有项目字符串参数的字符串数组,例如。
+proj=merc
- 返回
PJ
*
-
PJ *proj_create_crs_to_crs(PJ_CONTEXT *ctx, const char *source_crs, const char *target_crs, PJ_AREA *area)¶
创建一个变换对象,该对象是两个已知坐标参照系之间的管道。
源u CR和目标u CR可以是:
“一个”权限:代码“,就像EPSG:25832。当对源CRS使用该语法时,所创建的管道将期望值传递给
proj_trans()
尊重官方定义中的轴心顺序和轴心单位(例如EPSG:4326,首先是纬度,然后是经度,单位为度)。类似地,当对目标CRS使用该语法时,将根据该CRS的官方定义来发射输出值。项目字符串,如“+PROJ=longlat+datum=WGS84”。使用该语法时,地理CR的轴顺序和单位将是经度、纬度和单位度。
项目数据库中CRS的名称,如“WGS84”、“NAD27”等。
更普遍地说,任何字符串
proj_create()
代表CRS
可以在区域中指定“使用区域”。当它被提供时,可以选择两个给定系统之间更精确的转换。
当没有特定的使用区域并且根据使用区域可以进行多个坐标操作时,此函数将这些候选坐标操作内部存储在return PJ对象中。每个后续的坐标变换
proj_trans()
然后将通过比较输入坐标与候选坐标操作的使用区域来选择适当的坐标操作。呼叫示例:
PJ *P = proj_create_crs_to_crs(0, "EPSG:25832", "EPSG:25833", 0);
如果转换对象的创建失败,函数将返回 0 并更新项目错误号。错误号可以用
proj_errno()
或proj_context_errno()
.归还的人
PJ
-应该释放指针proj_destroy()
.- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。source_crs (const char*) -- 来源CRS。
target_crs (const char*) -- 目的地SRS。
area (
PJ_AREA
*) -- 变换所需区域的描述符。
- 返回
PJ
*
-
PJ *proj_create_crs_to_crs_from_pj(PJ_CONTEXT *ctx, PJ *source_crs, PJ *target_crs, PJ_AREA *area, const char *const *options)¶
6.2.0 新版功能.
创建一个变换对象,该对象是两个已知坐标参照系之间的管道。
这与以下内容相同
proj_create_crs_to_crs()
除了源和目标CRS作为PJ*对象传递之外,PJ*对象必须是CRS类型的。- 参数
options -- NUL终止选项的列表,或NULL。
支持的选项列表为:
AUTHORITY=name:限制在数据库中查找的坐标操作的权限。未指定时,请协调
operations from any authority
将进行搜索,并在authoritytoauthority首选项数据库表中设置与源/目标CR本身的权限相关的限制。如果authority设置为“any”,那么如果authority是不同的非空字符串,则将搜索来自任何authority的协调操作any
,则只在该权限命名空间中搜索协调操作(例如EPSG
)精度=值:设置候选坐标操作的最小期望精度(以米为单位)。
ALLOWu BALLPARK=YES/NO:可以设置为NO以禁止使用 Ballpark transformation 在候选坐标系中进行运算。
FORCE_OVER=YES/NO:可以设置为YES,以在此函数返回的转换上强制使用+OVER标志。
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
感兴趣的领域¶
6.0.0 新版功能.
-
PJ_AREA *proj_area_create(void)¶
创建一个使用区域。
这样一个使用区域将被传递给
proj_create_crs_to_crs()
指定用于选择相关坐标操作的区域。- 返回
PJ_AREA
* to be deallocated withproj_area_destroy()
-
void proj_area_set_bbox(PJ_AREA *area, double west_lon_degree, double south_lat_degree, double east_lon_degree, double north_lat_degree)¶
设置使用区域的边界框
这样一个使用区域将被传递给
proj_create_crs_to_crs()
指定用于选择相关坐标操作的区域。如果使用区域穿过反地心面(经度+/-180度), west_lon_degree 将大于 east_lon_degree .
- 参数
area -- 指向由返回的对象的指针
proj_area_create()
.west_lon_degree -- 西经度,单位为度。在 [-180,180] 范围。
south_lat_degree -- 南纬,度。在 [-90,90] 范围。
east_lon_degree -- 东经,以度为单位。在 [-180,180] 范围。
north_lat_degree -- 北纬,度。在 [-90,90] 范围。
坐标变换¶
-
PJ_COORD proj_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coord)¶
变换单个
PJ_COORD
协调。- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变方向。
coord (
PJ_COORD
) -- 坐标将被转换。
- 返回
-
size_t proj_trans_generic(PJ *P, PJ_DIRECTION direction, double *x, size_t sx, size_t nx, double *y, size_t sy, size_t ny, double *z, size_t sz, size_t nz, double *t, size_t st, size_t nt)¶
变换一系列坐标,其中单个坐标维度可以由以下数组表示:
完全填充
空指针和/或长度为零的指针,将被视为完全填充的零数组
长度为1,即常量,将被视为该常量值的完全填充数组
大步走,
sx
,sy
,sz
,st
,表示相应数组的连续元素之间的步长(以字节为单位)。这使得proj_trans_generic()
处理一大类特定于应用程序的数据结构的转换,而不必了解数据结构格式,如:typedef struct { double x, y; int quality_level; char surveyor_name[134]; } XYQS; XYQS survey[345]; double height = 23.45; size_t stride = sizeof (XYQS); ... proj_trans_generic ( P, PJ_INV, &(survey[0].x), stride, 345, /* We have 345 eastings */ &(survey[0].y), stride, 345, /* ...and 345 northings. */ &height, sizeof(double), 1, /* The height is the constant 23.45 m */ 0, 0, 0 /* and the time is the constant 0.00 s */ );
这类似于不推荐使用的
pj_transform()
功能,但步幅功能已被推广适用于任何大小的基本单位,而不仅仅是固定数量的双倍。在大多数情况下,x、y、z和t的跨距是相同的,因为它们通常是单独的数组 (
stride = sizeof(double)
),或将视图跨入一系列特定于应用程序的数据结构中 (stride = sizeof (...)
)但为了支持那些
x
,y
,z
和t
来自不同的来源,不同的步伐,sx
,sy
,sz
,st
,使用。备注
自从
proj_trans_generic()
它起作用了吗 就位 ,这意味着即使假定的常量(即长度为1的数组)也将以更改状态从调用返回。因此,请记住在重复调用之间重新初始化。- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变方向。
x (double *) -- x坐标数组
sx (size_t) -- 对应数组的连续元素之间的步长(字节)
nx (size_t) -- 对应数组中的元素数
y (double *) -- y坐标数组
sy (size_t) -- 对应数组的连续元素之间的步长(字节)
ny (size_t) -- 对应数组中的元素数
z (double *) -- z坐标数组
sz (size_t) -- 对应数组的连续元素之间的步长(字节)
nz (size_t) -- 对应数组中的元素数
t (double *) -- t坐标数组
st (size_t) -- 对应数组的连续元素之间的步长(字节)
nt (size_t) -- 对应数组中的元素数
- 返回
成功完成的转换数
-
int proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord)¶
批量转换
PJ_COORD
.在所有点上(如果出现新的点,则为0.8)。以前的版本将在给定点出现故障时提前退出)
无法转换的单个点将其组件设置为
HUGE_VAL
- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变方向。
n (size_t) -- 中的坐标数
coord
- 返回
int 如果所有观察值都转换为无错误,则返回0,否则返回错误号。如果所有坐标因相同原因未能转换,则此错误号将是一个精确的错误号;如果坐标因不同原因未能转换,则此错误号将是一个通用错误代码。
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
错误报告¶
-
int proj_errno(PJ *P)¶
获取的当前错误状态的读数
P
. 非零错误代码表示转换设置或转换过程中的错误。在案例中P
是 0 默认上下文的错误号为read。错误号的文本表示形式可以通过proj_errno_string()
.查阅 错误代码 错误代码列表(PROJ>=8.0)
- 参数
P (
PJ
*) -- 转换对象
- 返回
int
-
int proj_context_errno(PJ_CONTEXT *ctx)¶
获取的当前错误状态的读数
ctx
. 非零错误代码表示转换设置或转换过程中的错误。错误号的文本表示形式可以通过proj_errno_string()
.查阅 错误代码 错误代码列表(PROJ>=8.0)
- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。
- 返回
int
-
int proj_errno_reset(PJ *P)¶
清除中的错误号
P
,并根据上下文进行冒泡。例子:
void foo (PJ *P) { int last_errno = proj_errno_reset (P); do_something_with_P (P); /* failure - keep latest error status */ if (proj_errno(P)) return; /* success - restore previous error status */ proj_errno_restore (P, last_errno); return; }
- 参数
P (
PJ
*) -- 转换对象
- 返回
int 返回errno的上一个值,以便进行方便的重置/还原操作。
-
void proj_errno_restore(PJ *P, int err)¶
在规范的重置/恢复用例中减少一些心理阻抗:基本上,
proj_errno_restore()
是的同义词proj_errno_set()
,但用例却大不相同: set 向更高级别的用户代码指示错误, 恢复 如果此级别没有错误,则通过先前设置的错误指示器。因此,尽管内部工作是相同的,但我们提供了这两个选项,以避免一些相当混乱的实际代码。
请参见下面的用法示例
proj_errno_reset()
- 参数
P (
PJ
*) -- 转换对象err (int) -- 错误号。
-
const char *proj_errno_string(int err)¶
5.1.0 新版功能.
获取错误号的文本表示形式。
This 版后已移除: 函数可能是线程不安全的,替换为
proj_context_errno_string()
.- 参数
err (int) -- 错误号。
- 返回
const char* 包含错误描述的字符串。
-
const char *proj_context_errno_string(PJ_CONTEXT *ctx, int err)¶
8.0.0 新版功能.
获取错误号的文本表示形式。
- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。err (int) -- 错误号。
- 返回
const char* 包含错误描述的字符串。
登录中¶
-
PJ_LOG_LEVEL proj_log_level(PJ_CONTEXT *ctx, PJ_LOG_LEVEL level)¶
获取并设置给定上下文的日志记录级别。将日志级别更改为
level
并返回上一个日志记录级别。如果用level
设置为PJ_LOG_TELL
函数返回当前日志记录级别,而不更改它。- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。level (PJ_LOG_LEVEL) -- 新的日志记录级别。
- 返回
5.1.0 新版功能.
-
void proj_log_func(PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf)¶
重写项目的内部日志功能。
- 参数
ctx (
PJ_CONTEXT
*) -- 线程上下文。app_data (void *) -- 指向调用应用程序使用的数据结构的指针。
logf (
PJ_LOG_FUNCTION
) -- 重写项目日志函数的日志函数。
5.1.0 新版功能.
信息功能¶
-
PJ_PROJ_INFO proj_pj_info(const PJ *P)¶
获取特定转换对象的信息,
P
.- 参数
P (const
PJ
*) -- 转换对象
- 返回
-
PJ_GRID_INFO proj_grid_info(const char *gridname)¶
获取有关特定网格的信息。
- 参数
gridname (const char*) -- 项目搜索路径中的Gridname
- 返回
-
PJ_INIT_INFO proj_init_info(const char *initname)¶
获取有关init文件的特定信息。
- 参数
initname (const char*) -- 项目搜索路径中的初始化文件
- 返回
列表¶
-
const PJ_OPERATIONS *proj_list_operations(void)¶
获取指向项目中所有操作的数组的指针。返回数组的最后一个条目是空条目。数组是静态分配的,使用后不需要释放。
打印项目中所有操作的列表:
PJ_OPERATIONS *ops; for (ops = proj_list_operations(); ops->id; ++ops) printf("%s\n", ops->id);
- 返回
康斯特
PJ_OPERATIONS
*
-
const PJ_ELLPS *proj_list_ellps(void)¶
获取指向PROJ中定义的椭球数组的指针。返回数组的最后一个条目是空条目。数组是静态分配的,使用后不需要释放。
- 返回
康斯特
PJ_ELLPS
*
-
const PJ_UNITS *proj_list_units(void)¶
获取指向项目中定义的距离单位数组的指针。返回数组的最后一个条目是空条目。数组是静态分配的,使用后不需要释放。
注意:从PROJ 7.1开始,这个函数被
proj_get_units_from_database()
- 返回
康斯特
PJ_UNITS
*
-
const PJ_PRIME_MERIDIANS *proj_list_prime_meridians(void)¶
获取指向PROJ中定义的本初子午线数组的指针。返回数组的最后一个条目是空条目。数组是静态分配的,使用后不需要释放。
- 返回
康斯特
PJ_PRIME_MERIDIANS
*
距离¶
-
double proj_lp_dist(const PJ *P, PJ_COORD a, PJ_COORD b)¶
计算大地坐标系中两点之间的测地距离。计算的距离是位于椭球体上的两点之间的距离。
中的坐标
a
和b
需要以经度和纬度的弧度表示。请注意,P
对象不在此函数中考虑,因此即使CRS对象带有轴排序,此函数中使用的纬度/经度坐标也应重新排序为经度/纬度。
-
double proj_lpz_dist(const PJ *P, PJ_COORD a, PJ_COORD b)¶
计算大地坐标系中两点之间的测地距离。类似
proj_lp_dist()
但也考虑了椭球体上方的高度。中的坐标
a
和b
需要以经度和纬度的弧度表示。请注意,P
对象不在此函数中考虑,因此即使CRS对象带有轴排序,此函数中使用的纬度/经度坐标也应重新排序为经度/纬度。
各种各样¶
-
PJ_COORD proj_coord(double x, double y, double z, double t)¶
的初始值设定项
PJ_COORD
工会。这个函数是其他复杂赋值的简写。相当于PJ_COORD c = {{10.0, 20.0, 30.0, 40.0}};
或
PJ_COORD c; // Assign using the PJ_XYZT struct in the union c.xyzt.x = 10.0; c.xyzt.y = 20.0; c.xyzt.z = 30.0; c.xyzt.t = 40.0;
自从
PJ_COORD
是结构的并集,上述赋值也可以用并集中的其他类型表示,例如。PJ_UVWT
或PJ_LPZT
.
-
double proj_roundtrip(PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord)¶
度量给定变换的内部一致性。函数执行
n
从正向或反向开始的往返转换direction
. 返回起点的欧氏距离coo
以及之后得到的坐标n
反复迭代。- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变的起始方向
n (int) -- 往返转换数
coord (
PJ_COORD
*) -- 输入坐标
- 返回
double 原始坐标和之后的结果坐标之间的距离
n
转换迭代。
-
PJ_FACTORS proj_factors(PJ *P, PJ_COORD lp)¶
计算各种制图特性,如比例尺因子、角度畸变和子午线收敛。根据基础投影值,将以数值(默认)或分析方式计算。
从Proj 8.2开始,P对象可以是例如从EPSG CRS代码实例化的投影CRS。计算的系数将是从投影CRS的基本地理CRS到投影CRS的转换所隐含的地图投影的因子。
输入大地坐标Lp应该是这样的:lp.lam是以弧度表示的经度,lp.phi是以弧度表示的纬度(因此,如果P是投影的CRS,则独立于基本CRS的定义)。
该函数还计算给定坐标的偏导数。
- 参数
- 返回
-
double proj_torad(double angle_in_degrees)¶
将度转换为弧度。
- 参数
angle_in_degrees (double) -- 度
- 返回
double 弧度
-
double proj_todeg(double angle_in_radians)¶
将弧度转换为度数
- 参数
angle_in_radians (double) -- 弧度
- 返回
double 度
-
double proj_dmstor(const char *is, char **rs)¶
将度、分和秒的字符串转换为弧度。类似于C标准库函数
strtod()
.- 参数
is (const char*) -- 要转换为弧度的值
rs -- 对已分配字符*的引用,该字符*的值由函数设置为中的下一个字符
is
在数值之后。
-
char *proj_rtodms(char *s, double r, int pos, int neg)¶
将弧度转换为度、分和秒的字符串表示形式。
- 参数
s (char *) -- 保存输出字符串的缓冲区
r (double) -- 要转换为dms表示的值
pos (int) -- 表示正方向的字符,通常是 'N' 或 'E' .
neg (int) -- 通常表示负方向的字符 'S' 或 'W' .
- 返回
char* 指向输出缓冲区的指针(与
s
)
-
int proj_angular_input(PJ *P, enum PJ_DIRECTION dir)¶
检查操作是否需要弧度输入。
- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变的起始方向
- 返回
int 如果输入单位应为弧度,则为1,否则为0
-
int proj_angular_output(PJ *P, enum PJ_DIRECTION dir)¶
检查操作是否返回弧度输出。
- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变的起始方向
- 返回
int 如果输出单位应为弧度,则为1,否则为0
-
int proj_degree_input(PJ *P, enum PJ_DIRECTION dir)¶
7.1.0 新版功能.
检查操作是否需要以度为单位的输入。
- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变的起始方向
- 返回
int 如果输入单位应为度,则为1,否则为0
-
int proj_degree_output(PJ *P, enum PJ_DIRECTION dir)¶
7.1.0 新版功能.
检查操作是否返回度输出。
- 参数
P (
PJ
*) -- 转换对象direction (PJ_DIRECTION) -- 转变的起始方向
- 返回
int 如果输出单位应为度,则为1,否则为0
设置自定义I/O函数¶
7.0.0 新版功能.
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
警告
doxygenfunction: Cannot find file: /opt/proj/docs/build/xml/index.xml
清理¶
-
void proj_cleanup()¶
6.2.0 新版功能.
此函数释放全局资源(网格、+init文件的缓存)。它通常应该在进程终止之前调用,并且 之后 释放了PJ和PJu上下文对象。
ISO-19111功能的C API¶
6.0.0 新版功能.
返回的pj*对象 proj_create_from_wkt()
, proj_create_from_database()
而该部分中的其他函数通常与前面部分中声明的函数交互最少(在这些对象上调用这些函数将返回错误或缺省/无意义的值)。但可作为有效项目管线导出的协调操作类型的ISO19111对象除外。在这种情况下,对象将与例如 proj_trans_generic()
。反之,由 proj_create()
和 proj_create_argv()
,它们不是CRS类型(可以使用 proj_is_crs()
),在与本节的函数一起使用时将返回错误。
警告
doxygengroup: Cannot find file: /opt/proj/docs/build/xml/index.xml