C++使用GDAL为tiff图像写入WKT字符串表达的空间参照和投影坐标系信息

52 篇文章 0 订阅
12 篇文章 0 订阅

使用GDAL为tiff图像写入WKT字符串表达的空间参照和投影坐标系信息

WKT字符串表达空间参照和投影坐标系

WKT(Well-Known Text)是一种文本标记语言,其一种重要用途就是表达地理坐标信息。例如:

PROJCS["UTM_Zone_51N",
GEOGCS["GCS_Geographic Coordinate System",DATUM["D_WGS84",SPHEROID["WGS84",6378137.000000,298.257224]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0.000000],
PARAMETER["central_meridian",123.000000],
PARAMETER["scale_factor",0.999600],
PARAMETER["false_easting",500000.000000],
PARAMETER["false_northing",0.000000],
UNIT["Meter",1]]

它具有多个版本,尽量使用标准版本以便被更多程序识别认可。关于WKT可以点击维基百科

GDAL安装

GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。可以进行遥感图像的读、写和更新。新版本的GDAL还支持bigtiff的操作,功能强大,推荐尝试。
安装GDAL推荐使用vcpkg
根据教程安装vcpkg,或根据教程更新vcpkg后,运行命令

vcpkg install gdal:x64-windows

等待安装完成即可在VS中使用。

GDAL写入投影信息示例程序

#include"gdal_priv"

int main()
{
 设置一些变量
    string strWtkFile="";
    string strPN="";
    string strPrjString=""; WKT内容
    GDALRegister_GTiff(); 注册GeoTiff图像引擎
    GDALDataset* onedata = (GDALDataset*)GDALOpen(strPN.c_str(), GDALAccess::GA_Update);/// 以更新模式打开图像
    OGRSpatialReference osr;
    OGRErr err_ogr = osr.importFromWkt(strPrjString.c_str());/// 载入WKT字符串
    CPLErr err = onedata->SetSpatialRef(&osr);/// 设置空间参考系信息(投影坐标系)
    GDALClose(onedata);
    return 0;
}
好的,下面为您提供相应的C++代码。请确认您已经安装了C++版的GDAL库。 ```cpp #include <iostream> #include "gdal_priv.h" #include "cpl_conv.h" // for CPLMalloc() int main() { // register GDAL drivers GDALAllRegister(); // input raster file name const char* input_raster = "path/to/your/input/raster.tif"; // open input raster file GDALDataset* input_ds = (GDALDataset*)GDALOpen(input_raster, GA_ReadOnly); if (input_ds == NULL) { std::cerr << "Error: Failed to open input raster file: " << input_raster << std::endl; return 1; } // create output raster GDALDriver* driver = GetGDALDriverManager()->GetDriverByName("GTiff"); GDALDataset* output_ds = driver->CreateCopy("path/to/your/output/raster.tif", input_ds, FALSE, NULL, NULL, NULL); if (output_ds == NULL) { std::cerr << "Error: Failed to create output raster file: path/to/your/output/raster.tif" << std::endl; return 1; } // set output raster projection to WGS84 const char* wkt = "GEOGCS[\"WGS 84\",\ DATUM[\"WGS_1984\",\ SPHEROID[\"WGS 84\",6378137,298.257223563,\ AUTHORITY[\"EPSG\",\"7030\"]],\ AUTHORITY[\"EPSG\",\"6326\"]],\ PRIMEM[\"Greenwich\",0,\ AUTHORITY[\"EPSG\",\"8901\"]],\ UNIT[\"degree\",0.0174532925199433,\ AUTHORITY[\"EPSG\",\"9122\"]],\ AUTHORITY[\"EPSG\",\"4326\"]]"; output_ds->SetProjection(wkt); // set output raster geotransform double geotransform[6]; if (input_ds->GetGeoTransform(geotransform) == CE_None) { output_ds->SetGeoTransform(geotransform); } // close datasets GDALClose(input_ds); GDALClose(output_ds); return 0; } ``` 以上代码中,需要将`"path/to/your/input/raster.tif"`替换成您实际的输入栅格影像文件路径,将`"path/to/your/output/raster.tif"`替换成您期望的输出栅格影像文件路径。 另外,需要注意,该代码只是实现了将一幅tif影像的坐标系设置为WGS84坐标系,并没有进行实际的影像处理操作。如果您需要进行其他的影像处理操作,可以使用GDAL库提供的相关API进行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值