Linux地图投影Proj4应用,科学网—地图投影相关库proj4和ogr - 金淑英的博文

将源码编译成动态链接库,得到库文件proj_i.lib和动态链接库proj.dll

这个库有两大功能:1)定义地图投影;2)实现投影坐标与地理坐标的正反变换。

常用函数与用法举例:

#include "projects.h"

#define RAD_TO_DEG57.29577951308232

#define DEG_TO_RAD.0174532925199432958

intmain()

{

char*  pszProj4Defn ="+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs";

//初始化

projPJpj = pj_init_plus(pszProj4Defn);

projXYprojected_loc;

projLPgeodetic_loc;

geodetic_loc.u = 116.32*DEG_TO_RAD;

geodetic_loc.v = 30.15*DEG_TO_RAD;

projected_loc = pj_fwd(geodetic_loc, (PJ*)pj);//坐标正算(从地理坐标到投影坐标)

geodetic_loc = pj_inv(projected_loc, (PJ*)pj);//坐标反算(从投影坐标到地理坐标)

printf("%s\n", pszProj4Defn);

printf("%lf  %lf \n", geodetic_loc.u*RAD_TO_DEG, geodetic_loc.v*RAD_TO_DEG);

printf("%lf  %lf \n", projected_loc.u, projected_loc.v);

return0;

}

运行结果如下:

+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs

116.320000  30.150000

434513.663145  3335601.945570

2)wkt字符串

Wkt是用于描述地图投影的结构化的空间参考字符串,可以通过gdal函数GetProjectionRef()从现有图像获取,其典型结构如下所示:

PROJCS["UTM_Zone_50N",//投影名称

GEOGCS["GCS_WGS_1984",//地理坐标系名称

DATUM["WGS_1984",//空间参考大地基准名称

SPHEROID["WGS_84",6378137.0,298.257223563]],//参考椭球及参数

PRIMEM["Greenwich",0.0],//子午线名称,与格林威治子午线偏差

UNIT["Degree",0.0174532925199433]],//地理坐标系单位:每个单位多少弧度

PROJECTION["Transverse_Mercator"],//地图投影类型

PARAMETER["False_Easting",500000.0],//地图投影参数:东偏多少米

PARAMETER["False_Northing",0.0], //地图投影参数:北偏多少米

PARAMETER["Central_Meridian",117.0], //地图投影参数:中央经线多少度

PARAMETER["Scale_Factor",0.9996], //地图投影参数:比例系数

PARAMETER["Latitude_Of_Origin",0.0], //地图投影参数:中心纬线多少度

UNIT["Meter",1]] //地图投影参数:投影坐标系单位:每个单位多少米

Wkt是一个嵌套的结构体字符串。空间参考包括两种类型,

一是地理坐标系(GEOGCS),

二是投影坐标系(PROJCS),其中投影坐标系(PROJCS)是定义在地理坐标系(GEOGCS)的基础之上的,包括投影类型(PROJECTION)和相关的参数(PARAMETER)。

地理坐标系也是一个嵌套的结构体字符串,包括:大地基准(DATUM)和零子午线(PRIMEM)。

其中大地基准(DATUM)包括参考椭球(SPHEROID)的形状(扁率)、大小(长半轴)和定位、定向两部分。定位、定向通常用ToWGS84七参数来表示,如果ToWGS84七参数省略,就表示当前参考椭球与WGS84椭球的中心点重合且三坐标轴方向和坐标单位均与WGS84参考椭球相一致。

其中零子午线(PRIMEM)参数指的是零子午线与格林威治子午线之差,此值绝大多数情况下为0.0,此时,坐标为地理经纬度的大地基准(DATUM)相当于是地理坐标系了。

投影坐标系的参数与投影类型是相关的。常用的如TM(横轴墨卡托)投影参数包括:中央经线(Central_Meridian)、中心纬线(Latitude_Of_Origin)、东偏(False_Easting)、北偏(False_Northing)、比例系数(Scale_Factor)这5个投影参数。其中UTM(通用横轴墨卡托)投影是TM(横轴墨卡托)投影的一个特例,UTM投影参数5个参数固定为如下值:

中心纬线(Latitude_Of_Origin):0

东偏(False_Easting):500000

北偏(False_Northing):0(北半球)或10000000(南半球)

比例系数(Scale_Factor):0.9996

中央经线(Central_Meridian):带号*6-183  (其中带号的取值范围1~60)

可以看出UTM投影相当于只有2个投影参数:带号,是否北半球。

地理坐标系单位(UNIT)一般为角度(Degree),投影坐标系单位(UNIT)一般为米(Meter)。

3)ogr库

ogr库是gdal的一部分,定义并实现了空间参考类OGRSpatialReference,这个库不仅能自定义地图投影参数,还实现了wkt和proj4两个字符串接口,用起来很方便。相关头文件和类的部分函数如下:

#include "ogr_spatialref.h"

3.1)与proj4的接口函数

OGRErrimportFromProj4(const char* );//根据proj4字符串初始化

OGRErrexportToProj4(char** )const;//输出proj4字符串

3.2)与wkt字符串的接口函数

OGRErrimportFromWkt(char** );//根据现有wkt初始化

OGRErrexportToWkt(char** )const;//输出wkt字符串

3.3) 常用的用户自定义地图投影函数

/** Universal Transverse Mercator */

OGRErrSetUTM(intnZone,intbNorth =TRUE);

/** Transverse Mercator */

OGRErrSetTM(doubledfCenterLat,doubledfCenterLong,

doubledfScale,

doubledfFalseEasting,doubledfFalseNorthing );

OGRErrSetGeogCS(const char* pszGeogName,

const char* pszDatumName,

const char* pszEllipsoidName,

doubledfSemiMajor,doubledfInvFlattening,

const char* pszPMName =NULL,

doubledfPMOffset = 0.0,

const char* pszUnits =NULL,

doubledfConvertToRadians = 0.0 );

OGRErrSetTOWGS84(double,double,double,

double= 0.0,double= 0.0,double= 0.0,

double= 0.0 );

/**或者直接从epsg编码一次性得到所有参数 */

OGRErrimportFromEPSG(int);

转载本文请联系原作者获取授权,同时请注明本文来自金淑英科学网博客。

链接地址:http://blog.sciencenet.cn/blog-3465734-1271126.html

上一篇:摄影测量与计算机视觉的几何关系及其转换

下一篇:卫星影像的虚拟化处理方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值