1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用PROJ将空间坐标点从WGS84坐标系转换到UTM坐标系

使用PROJ将空间坐标点从WGS84坐标系转换到UTM坐标系

时间:2020-12-27 01:24:04

相关推荐

使用PROJ将空间坐标点从WGS84坐标系转换到UTM坐标系

PROJ简介

PROJ是一种通用坐标转换软件,用于将地理空间坐标从一个坐标参考系(coordinate reference system, CRS)转换为另一个坐标参考系。

PROJ官方网站:/

macOS系统可以直接使用homebrew安装:

brew install proj

系统和PROJ版本

系统:macOS Big Sur

PROJ版本:9.0.0

c++实现

wgs84_to_utm32651.cpp

#include <stdio.h>#include <proj.h>#include <iostream>#include <fstream>#include <sstream>#include <string>using namespace std;int main (int argc, char **argv) {// 变量定义PJ_CONTEXT *C;PJ *P;PJ *norm;PJ_COORD a, b;ifstream input(argv[1]);ofstream output(argv[2]);string line;double timestamp, latitude, longtitude, height;// 创建一个上下文对象C = proj_context_create();// 创建转换对象// 第二个参数"EPSG:4326"是源坐标系EPSG代码,第三个参数是目标坐标系EPSG代码P = proj_create_crs_to_crs (C, "EPSG:4326", "EPSG:32651", NULL);if (0 == P) {fprintf(stderr, "Failed to create transformation object.\n");return 1;}norm = proj_normalize_for_visualization(C, P);if (0 == norm) {fprintf(stderr, "Failed to normalize transformation object.\n");return 1;}proj_destroy(P);P = norm;// 从文件中一行一行读取数据,并进行坐标系的转换while (getline(input, line)){istringstream record(line);record >> timestamp >> latitude >> longtitude >> height;// 初始化PJ_COORD对象a = proj_coord(longtitude, latitude, height, 0);// 将wgs84坐标系下的地理空间坐标 a 转换到utm32651坐标系下b = proj_trans(P, PJ_FWD, a);// 输出到文件中output.precision(15);output << b.enu.e << " " << b.enu.n << " " << b.enu.u << endl;}// 销毁所创建的对象proj_destroy(P);proj_context_destroy(C);return 0;}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)project( wgs84_to_utm32651 )find_package(PROJ CONFIG REQUIRED)add_executable ( wgs84_to_utm32651 src/wgs84_to_utm32651.cpp)target_link_libraries( wgs84_to_utm32651 PROJ::proj )

编译运行即可。

使用QGIS验证

转换之后的坐标可以使用QGIS软件进行验证,如果坐标点都能够重叠在一起,说明转换正确。

QGIS官方网站:/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。