在vc中如何用gdal读取tif文件中一点的海拔值

发布于 2021-11-26 02:46:02 字数 65 浏览 895 评论 2

在vc中如何用gdal读取tif文件中一点的海拔值,或者两点之间的线?主要是如何读取一点的海拔值,请高手指点!谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柳絮泡泡 2021-11-26 16:22:16

int main(int argc, char* argv[])

{

int num_iamge_size=0;

BYTE *pafScanblock1;  //开辟缓存区

char *file_path_name="C:/webservices/data/srtm/chinaclip.tif";

GDALDataset *poDataset;   //GDAL数据集

GDALAllRegister();  //注册所有的驱动

poDataset = (GDALDataset *) GDALOpen(file_path_name, GA_ReadOnly );

if( poDataset == NULL )

{

cout<<"fail in open files!!!"<<endl;

return 0;

}

//获取图像波段

GDALRasterBand *poBand1;

poBand1=poDataset->GetRasterBand(1);

//获取图像的尺寸

int nImgSizeX=poDataset->GetRasterXSize();

int nImgSizeY=poDataset->GetRasterYSize();

//获取坐标变换系数

double trans[6];

CPLErr aaa=poDataset->GetGeoTransform(trans);

//读取图像高程数据

//首先计算XY坐标对应到图像的行列号,然后用RasterIO读取对应行列号里面的像素值,

//读出来的像素值就是高程值

double Xgeo= 125,Ygeo=49;//xy坐标可设为参数

double dTemp = trans[1]*trans[5] - trans[2]*trans[4];

//行列号

    double dCol = 0.0, dRow = 0.0;  

    dCol = (trans[5]*(Xgeo - trans[0]) -  trans[2]*(Ygeo - trans[3])) / dTemp + 0.5;  

    dRow = (trans[1]*(Ygeo - trans[3]) -  trans[4]*(Xgeo - trans[0])) / dTemp + 0.5;     

int dx =(int)dCol;

int dy =(int)dRow;

pafScanblock1 = (BYTE *) CPLMalloc(sizeof(BYTE)*(1)*(1));//建议能小则小否则会造成内存不足的情况

poBand1->RasterIO( GF_Read, dx, dy,1,1,pafScanblock1,1,1,GDALDataType(poBand1->GetRasterDataType()),0, 0 );

BYTE elevation=*pafScanblock1;

cout<<setprecision(15)<<Xgeo<<"  "<<Ygeo<<"  "<<elevation<<endl;

delete poDataset;

return 0;

}

无法言说的痛 2021-11-26 13:08:52

可以用OGR来读取TIFF文件,首先注册,然后打开文件,在用OGR里面专用的数据获取函数得到你想要的值,担任 如果你愿意也可以重新创建一个文件、、、以上的函数你自己在OGR里面查,或者网上也有许多,就不赘述了、、、

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文