使用Proj库进行大地坐标转空间坐标、投影坐标的一个示例

最近研究了proj库的使用,自己写了一个小demo,仅供参考。

void demoPROJ()
{
	const char* wgs84 = "+proj=tmerc +ellps=WGS84 +lon_0=117e +x_0=500000 +y_0=0 +k=1.0";//+datum=WGS84 

	projPJ pj;

	if (!(pj = pj_init_plus(wgs84)))
	{
		exit(-1);
	}

	projUV pt[2] = {{116.987, 39.2333}, {116.987654321, 39.453}};

	for (int i = 0; i < 2; i++)
	{
		cout << "第" << i + 1 << "个点的转换:\n";
		projUV	pjPt;
		pt[i].u *= DEG_TO_RAD;
		pt[i].v *= DEG_TO_RAD;
		pjPt = pj_fwd(pt[i], pj);
		cout.setf(ios::fixed);
		cout.precision(4);
		cout.width(12);
		cout << "\t经纬度转换为坐标\n\t";
		cout << pjPt.u << "\t" << pjPt.v << endl;

		pjPt = pj_inv(pjPt, pj);
		cout.setf(ios::fixed);
		cout.precision(9);
		cout.width(12);
		cout << "\t坐标转换为经纬度\n\t";
		cout << pjPt.u * RAD_TO_DEG << "\t" << pjPt.v * RAD_TO_DEG << endl;
	}
	cout << endl;

	double wgs84_a = 6378137.0;
	double wgs84_e = 0.00669437999013; // 在这里e是第一偏心率的平方

	projUVW pt3[2] = {{116.5164884833, 39.7663036028,  23.220}, {116.987654321, 39.453, 18}};
	for (int i = 0; i < 2; i++)
	{
		cout << "第" << i + 3 << "个点的转换:\n";
		pt3[i].u *= DEG_TO_RAD;
		pt3[i].v *= DEG_TO_RAD;

		pj_geodetic_to_geocentric(wgs84_a, wgs84_e, 1, 1, &pt3[i].u, &pt3[i].v, &pt3[i].w);
		cout.setf(ios::fixed);
		cout.precision(4);
		cout.width(12);
		cout << "\t经纬度转换为空间坐标\n\t";
		cout << pt3[i].u << "\t" << pt3[i].v << "\t" << pt3[i].w << endl;

		pj_geocentric_to_geodetic(wgs84_a, wgs84_e, 1, 1, &pt3[i].u, &pt3[i].v, &pt3[i].w);
		cout.setf(ios::fixed);
		cout.precision(9);
		cout.width(12);
		cout << "\t空间坐标转换为经纬度\n\t";
		cout << pt3[i].u * RAD_TO_DEG << "\t" << pt3[i].v * RAD_TO_DEG << "\t" ;
		cout.precision(4);
		cout << pt3[i].w << endl;
	}

	pj_free(pj);
}

  

时间: 2024-10-13 21:54:40

使用Proj库进行大地坐标转空间坐标、投影坐标的一个示例的相关文章

(转)ARCGIS中坐标转换及地理坐标、投影坐标的定义

原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或是说坐标系统是默认为第一加载到当前工作区的那个文件的坐标系统,后加入的数据,如果和当前工作区坐标系统不相同,则ArcMap会自动做投影变换,把后加入的数据投影变换到当前坐标系统下显示!但此时数据文件所存储的数据并没有改变,只是显示形态上的变化!因此叫动态投影!表现这一点最明显的例子就是,在Expor

python采用pika库使用rabbitmq总结,多篇笔记和示例(转)

add by zhj:作者的几篇文章参考了Rabbitmq的Tutorials中的几篇文章. 原文:http://www.01happy.com/python-pika-rabbitmq-summary/ 这一段时间学习了下rabbitmq,在学习的过程中,发现国内关于python采用pika库使用rabbitmq的资料很少,官网有这方面的资料,不过是都英文的.于是笔者结合自己的理解,就这方面内容写了一些示例,总共有七篇笔记,分享出来. 笔记依次是循序渐进的,笔记内贴出的代码笔者都实际运行过,运

平面坐标系中,求点在线上的投影坐标(如图)

已知点A(x1,y1).B(x2,y2).M(m,n),求点M在线段AB上的投影坐标. .....

Python3.5 数据处理 –jieba + sklearn库安装及第一个示例

一,安装pip3: #sudo apt-get install pip3 二,安装jieba: #sudo pip3 install jieba 三,安装sklearn: #sudo pip3 install scikit-learn 四,安装sklearn依赖(numpy,scipy): #sudo pip3 install numpy #sudo pip3 install scipy eg:国内安装时可能出现time-out错误-解决办法如下: #sudo pip3 install -i h

如何将天地图转换为默卡托投影坐标

以前我们讨论过如何将谷歌卫星地图用ArcGIS转换为WGS84坐标系,今天我们来讲一下如何将天地图的卫星地图转换为和谷歌卫星地图一样的墨卡托投影坐标系. 首先,我们用水经注天地图卫星地图下载器下载一个全球的TIF格式的卫星地图,然后再用ArcGIS进行投影转换.这里以全球的卫星地图为例,是因为只有下载全球的卫星地图进行投影转换后,才能用肉眼看出很明显的变化,也更能说明投影转换的效果,如果你是将天地图卫星地图的某一个城市或局部数据转换为墨卡托投影的话,除了下载的范围和级别不同外,操作步骤是完全相同

静态链接库LIB和动态链接库DLL的区别 创建和示例

1.什么是静态连接库,什么是动态链接库         静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了.但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件.静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接 库.静态链接库

[原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

C/C++ (函数、变量和类)动态库的创建、导出和使用(图文+示例代码)

 一 Windows库 1引入库的原因: a.项目的复杂程度大 b.提高代码的利益利用率 2库的分类 2.1静态库: *.lib,不能被加载的程序,可以理解为目标程序的归档. 2.2动态库:*.dll,可以被应用程序加载的程序. 二 动态库 1动态库优点 1.1可以提供模块化的方式,方便协调开发(对于大项目,每个人写的东西编译为动态库,直接链接即可) 1.2对源代码保护 1.3减小可执行文件大小 1.4提高代码重用率 2动态库的基本使用方法 2.1动态库的创建 2.2加载动态库 2.3获取并

Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤

1.git add new.txt 2.git commit -m "add a new file" 3.git push origin master 从Git仓库克隆一个本地库: git clone [email protected]:303041859/gitskills.git就可以得到Git远程库中的文件了.