原文地址: https://blog.csdn.net/hanshuobest/article/details/77752279
//经纬度转utm坐标 int convert_lonlat_utm(const new3s_PointXYZ &lon_lat_coord, new3s_PointXYZ &utm_coord) { OGRSpatialReference *RefSource = new OGRSpatialReference; RefSource->SetWellKnownGeogCS("WGS84"); OGRSpatialReference *RefTarget = new OGRSpatialReference; RefTarget = RefSource->CloneGeogCS(); int utmzone = lon_lat_coord.get_x() / 6 + 31; RefTarget->SetProjCS("UTM(WGS84) in northern hemisphere."); RefTarget->SetUTM(utmzone, TRUE); OGRCoordinateTransformation *poTransform = OGRCreateCoordinateTransformation(RefSource, RefTarget); double tempX = lon_lat_coord.get_x(); double tempY = lon_lat_coord.get_y(); double tempZ = lon_lat_coord.get_z(); poTransform->Transform(1, &tempX, &tempY, &tempZ); utm_coord.set_x(tempX); utm_coord.set_y(tempY); utm_coord.set_z(tempZ); return utmzone; }
//utm转经纬度 void convert_utm_lonlat(const new3s_PointXYZ &utm_coord, const int &utmzone, new3s_PointXYZ &lon_lat_coord) { //建立投影坐标系到经纬度坐标系的转换 OGRSpatialReference *RefSource = new OGRSpatialReference; RefSource->SetWellKnownGeogCS("WGS84"); RefSource->SetProjCS("UTM(WGS84) in northern hemisphere."); RefSource->SetUTM(utmzone, TRUE); OGRSpatialReference *RefTarget = new OGRSpatialReference; RefTarget = RefSource->CloneGeogCS(); OGRCoordinateTransformation *poTranform = OGRCreateCoordinateTransformation(RefSource, RefTarget); OGRPoint *poPoint = new OGRPoint(); double tempx = utm_coord.get_x(); double tempy = utm_coord.get_y(); double tempz = utm_coord.get_z(); poTranform->Transform(1, &tempx, &tempy, NULL); lon_lat_coord = new3s_PointXYZ(tempx, tempy, tempz);