坐标详解与PROJ.4使用说明

本文介绍了EPSG坐标系统、坐标转换库PROJ.4的命令使用,包括经纬度到投影坐标的转换,以及PROJ4库的API应用。同时,详细阐述了OGR库中的坐标转换方法,包括OGRSpatialReference类的使用,如设置GEOGCS和PROJCS,以及坐标转换实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坐标详解与PROJ.4使用说明

sf2gis

2013年11月18日

2014年10月23日抽取坐标系统为单独文档

1  EPSG

The European Petroleum Survey Group:欧洲石油调查组织http://www.epsg.org/。维护空间参考系统,OGC以其为标准。其中所有的独立内容都有相应的ID。

参考:http://hi.baidu.com/liongg/item/318820d21fa73fe6b2f7776d

2  坐标系统

参见:..\GIS\投影系统坐标系统大地测量DATUM基准面详解.docx

3 PROJ4命令使用

Proj.4是开源GIS最著名的地图投影库,许多GIS开源软件的投影都直接使用Proj.4的库文件。该项目遵循MIT license,用C语言编写,由USGS的Gerald I. Evenden在1980年代创立并一直维护到退休,后转手到Frank Warmerdam手中。Warmerdam现任OSGeo主席,于2008年5月把Proj.4纳入成为MetaCRS的一部分。需要自己编译安装才可使用。

功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等,下面以命令行方式和编程方式来说明经纬度坐标与地理坐标转换功能的使用。

 

3.1 格式

1.   球面坐标与投影坐标

proj [-control] [+control] [files]

-:表示输出控制。

+:表示设定投影参数。

CTRL+Z退出。

正常情况:从球面坐标到投影坐标。

-I:从投影坐标到球面坐标。

1)   正常情况

输入:X(经度),Y(纬度)

输出:X(水平方向坐标) Y(垂直方向坐标)

2)   反向转换

输入:X(水平方向坐标) Y(垂直方向坐标)

输出:X(经度),Y(纬度)

2.   坐标与距离

geod –control +control

-:表示输出控制。

+:表示设定投影参数。

CTRL+Z退出。

正常情况:根据起点,以及距离起点的角度和距离,确定终点的坐标以及终点到起点的角度。

-I:根据起点和终点的坐标,确定起点到终点的角度,终点到起点的角度、距离。

1)   正常情况

输入:X(起点纬度) Y(起点经度) A(起点到终点角度) D(起点到终点距离)

输出:X(终点纬度) Y(终点经度) A(终点到起点角度)

2)   反向转换

输入:X(起点纬度) Y(起点经度) X(终点纬度) Y(终点经度)

输出:A(起点到终点角度) A(终点到起点角度) D(起点到终点距离)

3.2 坐标定义:+control

+proj=name:定义投影坐标系统名称

+ellips=name:定义椭球体。

+lon_0=n:定义中央经线。

+lat_1=n:定义标准纬线1。

+lat_2=n:定义标准纬线2。

+x_0=n:定义东移距离。

+y_0=n:定义南移距离。

+k=n:定义缩放倍数。

+init=文件路径<关键字>:文件路径是存放坐标系统定义的文件,关键字用于标识坐标系统。

自定义坐标系统:<坐标系统关键字>……(坐标定义)<>(结束标识)。就可以将定义的坐标系统保存到文件中,

 

3.3 参考

http://hi.baidu.com/liongg/item/838f7c9e8e6ae1dc1e42716d

4 PROJ4库使用

4.1 API

#define RAD_TO_DEG  57.29577951308232//1弧度转换为角度

#define DEG_TO_RAD  .0174532925199432958//1角度转换为弧度

projPJ:void *型指针,用于表示一个投影类型,对于地理坐标,也使用这个类型,定义时使用’+proj=name +ellps’定义。

projPJ pj_init_plus(const char *);//用于生成projPJ类型的指针。成功返回指针,失败返回NULL

int pj_transform(src,des,count,offset,x,y,z);//src:源坐标系统,des:目标坐标系统,count:点数目,offset:起始索引,x,y,z:经度,纬度,高度的数组地址。成功返回0,失败返回错误代码。

void pj_free(projPJ pj);//释放当前的坐标系统。

int pj_is_latlong(projPJ pj);//如果定义时使用+proj=latlong,则返回TRUE(在Windows下)。

int pj_is_geocent(projPJ pj);//如果定义时使用+proj=geocent,则返回TRUE(在Windows下)。

projPJ pj_latlong_from_proj(projPJ pj);//返回pj投影对应的地理坐标系。

char *pj_get_def(projPj pj,int option);// option是保留参数。返回pj的定义。

char *pj_strerrno(int errno);//返回errno对应的错误号的详细内容。

int *pj_get_errno_ref(void);//返回当前的错误号。

const char*pj_get_release();//返回当前版本信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值