首页 > 编程语言 >C++ 使用EPSG进行坐标转换

C++ 使用EPSG进行坐标转换

时间:2023-10-21 18:55:05浏览次数:41  
标签:crs 4538 EPSG C++ proj 字符串 转换 坐标

场景

将WGS84坐标转换为CGCS2000坐标
使用epsg.io网站的坐标系转换功能可以检查转换结果是否正确
下面网址是示例代码
https://epsg.io/transform#s_srs=4326&t_srs=4538&x=88.0000000&y=47.0000000

转换示例代码

proj ver.9.2.0
安装proj库,使用vcpkg(vcpkg install proj:x64-windows)

#include <proj.h>

DPoint UEUtils::wgs84_to_cgcs2000(double lon, double lat)
{
	PJ_CONTEXT* ctx = proj_context_create();
	// 定义源和目标投影坐标系
	const char* src_crs = "+proj=longlat +datum=WGS84 +no_defs";
	const char* target_crs = "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs";
	// 创建转换对象
	PJ* trans = proj_create_crs_to_crs(ctx, src_crs, target_crs, nullptr);
	if (!trans) { 
		std::cout << "无法创建坐标转换对象" << std::endl;
		proj_context_destroy(ctx);
		return DPoint(lon, lat);
	}
	PJ_COORD success = proj_trans(trans, PJ_FWD, proj_coord(lon, lat, 0, 0));
	
	DPoint result;
	result.x = success.xyzt.x;
	result.y = success.xyzt.y;

	proj_destroy(trans);
	proj_context_destroy(ctx);

	return result;
}

在代码中的src_crs 代表了投影字符串 WGS84(EPSG:4326),target_crs 代表了 投影字符串 CGCS2000 / 3-degree Gauss-Kruger CM 87E(EPSG:4538)

获取对应字符串的方式如下:

  1. 打开https://epsg.io/4538 , 其中的4538为EPSG代码
  2. 找到如下图字符串,PS(打开网页后请往下翻)
    image
  3. 将字符串末尾的 +type=crs去掉,结果为+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs

结束,有问题请在评论区留言(@_<)

标签:crs,4538,EPSG,C++,proj,字符串,转换,坐标
From: https://www.cnblogs.com/SpringBreath/p/17779337.html

相关文章

  • VSCode配置Clang C/C++开发环境 [+clangd代码静态检查配置]
    问题:gcc/g++是c/c++使用最广泛的编译器,也是linux默认自带的编译套件,但在vscode上,也可通过微软官方提供的C/C++插件很便捷进行c/c++代码编译调试,但是该插件的自动补全和代码提示等功能很差,经常给不出合理的候选项。另外一套C/C++代码编译套件是基于LLVM的clang/clang++编译器、ll......
  • 第一章:笛卡尔坐标系
    第一章:笛卡尔坐标系1.一维数学在进入三维的学习之前,先厘清一些关于数字系统和计数的问题。自然数,又称计数数字。是几千年前发明的,可能是为了跟踪记录死羊(本书作者的神奇脑洞),也是数学的萌芽。将绵羊排成一排以便计数的习惯进而导致了数字排队的概念。负债概念的出现导致了负......
  • 8.1 C++ 标准输入输出流
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.2 C++ 引用与取别名
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.3 C++ 定义并使用类
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.4 C++ 运算符重载
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.5 C++ 继承与多态
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.6 C++ 泛型化编程态
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.1 C++ 标准输入输出流
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.2 C++ 引用与取别名
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......