/* * @Description: * @Version: 1.0 * @Autor: Sun Yalun * @Date: 2024-10-17 17:44:07 * @LastEditors: Sun Yalun * @LastEditTime: 2024-10-22 16:58:59 */ #include #include #include "wgs842utm.h" void wgs842utm(const Point& degree_point, Point& point) { // 定义 WGS84 地理坐标系 OGRSpatialReference wgs84; wgs84.SetWellKnownGeogCS("WGS84"); // 定义 UTM 50N 投影坐标系 OGRSpatialReference utm50n; utm50n.SetUTM(50, TRUE); // 50 表示 50 区,TRUE 表示北半球 // 创建坐标转换对象 OGRCoordinateTransformation *poTransform = OGRCreateCoordinateTransformation(&wgs84, &utm50n); if (poTransform == NULL) { std::cerr << "无法创建坐标转换对象" << std::endl; return; } double x = degree_point.pos_x; double y = degree_point.pos_y; // 进行坐标转换,注意转换的是经度(lon)和纬度(lat) if (!poTransform->Transform(1, &y, &x)) { std::cerr << "坐标转换失败" << std::endl; OGRCoordinateTransformation::DestroyCT(poTransform); return; } // 输出 UTM 结果 point.pos_x = y; // 转换后的 X(东)坐标 point.pos_y = x; // 转换后的 Y(北)坐标 point.heading = 0.0; // 清理 OGRCoordinateTransformation::DestroyCT(poTransform); // std::cout << std::fixed << std::setprecision(7); } // 对vector中的所有Point进行整体坐标转换为utm坐标 void wgs842utmall(const std::vector& degree_points, std::vector& points) { for (auto& degree_point : degree_points) { Point point(0.0, 0.0, 0.0); wgs842utm(degree_point, point); points.push_back(point); } }