卫星影像地理坐标系的转换

    xiaoxiao2021-03-25  124

    影像地理坐标获取以及坐标系之间的坐标转换

    GDALAllRegister(); CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");//支持中文路径! ///读入输入影像 const char * pszFile = imgfile.c_str(); GDALDataset *poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);//使用只读方式打开图像 if (poDataset == NULL) { printf("File: %s不能打开!\n", pszFile); } GDALRasterBand *pBand_temp = NULL; pBand_temp = poDataset->GetRasterBand(1); ///获取四角点经纬度 double adfGeoTransform[6]; if (poDataset->GetGeoTransform(adfGeoTransform) == CE_Failure) { printf("获取仿射变换参数失败"); } std::cout << "仿射变换参数:" << endl << adfGeoTransform[0] << endl << adfGeoTransform[1] << endl << adfGeoTransform[2] << endl << adfGeoTransform[3] << endl << adfGeoTransform[4] << endl << adfGeoTransform[5] << endl; double X1 = adfGeoTransform[0] ;//经度 double Y1 = adfGeoTransform[3];//纬度 double X2 = adfGeoTransform[0] + iw * adfGeoTransform[1]; double Y2 = adfGeoTransform[3]; double X3 = adfGeoTransform[0] + iw * adfGeoTransform[1]; double Y3 = adfGeoTransform[3] + ih * adfGeoTransform[5]; double X4 = adfGeoTransform[0]; double Y4 = adfGeoTransform[3] + ih * adfGeoTransform[5]; /输出影像四个角点的地理坐标 std::cout << Y1 << endl << X1 << endl; std::cout << Y2 << endl << X2 << endl; std::cout << Y3 << endl << X3 << endl; std::cout << Y4 << endl << X4 << endl; double X[4] = { X1, X2, X3 ,X4}; double Y[4] = { Y1, Y2, Y3, Y4}; int* flag = NULL; ///若坐标系为非GWS84,则进行空间坐标系转化 OGRSpatialReference obj_OSRS; obj_OSRS.SetWellKnownGeogCS("WGS84"); const char* spr=poDataset->GetProjectionRef(); OGRSpatialReference OSRS(spr); if (obj_OSRS.IsSame(&OSRS) == TRUE) { std::cout << "数据为GWS84地理坐标系统" << std::endl; ///地理边界 dataxml.topleft_latitude = Y1; dataxml.topleft_longitude = X1; dataxml.topright_latitude = Y2; dataxml.topright_longitude = X2; dataxml.bottomright_latitude = Y3; dataxml.bottomright_longitude = X3; dataxml.bottomleft_latitude = Y4; dataxml.bottomleft_longitude = X4; } else { OGRCoordinateTransformation *transf1=OGRCreateCoordinateTransformation(&OSRS, &obj_OSRS); if (transf1 == NULL) { std::cout << "数据不支持转化" << std::endl; } else { std::cout << "支持坐标系统之间转化" << std::endl; } transf1->TransformEx(4, X, Y, NULL, flag); ///地理边界 dataxml.topleft_latitude = Y[0]; dataxml.topleft_longitude = X[0]; dataxml.topright_latitude = Y[1]; dataxml.topright_longitude = X[1]; dataxml.bottomright_latitude = Y[2]; dataxml.bottomright_longitude = X[2]; dataxml.bottomleft_latitude = Y[3]; dataxml.bottomleft_longitude = X[3]; OGRCoordinateTransformation::DestroyCT(transf1); } /*if (OSRS.IsGeographic() == TRUE) { cout << "镶嵌数据为地理坐标系统" << endl; } if (OSRS.IsProjected()==TRUE) { cout << "镶嵌数据为投影坐标系统" << endl; }*/ /*std::string srs_txt = srcdata + "\\" + dataname + ".txt"; ofstream out_sr(srs_txt); out_sr << spr; out_sr.close();*/ /*OGRSpatialReference::DestroySpatialReference(&obj_OSRS); OGRSpatialReference::DestroySpatialReference(&OSRS);*/ /输出影像四个角点的地理坐标 std::cout << Y[0] << endl << X[0] << endl; std::cout << Y[1] << endl << X[1] << endl; std::cout << Y[2] << endl << X[2] << endl; std::cout << Y[3] << endl << X[3] << endl;
    转载请注明原文地址: https://ju.6miu.com/read-12681.html

    最新回复(0)