在vc中如何用gdal读取tif文件中一点的海拔值
在vc中如何用gdal读取tif文件中一点的海拔值,或者两点之间的线?主要是如何读取一点的海拔值,请高手指点!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在vc中如何用gdal读取tif文件中一点的海拔值,或者两点之间的线?主要是如何读取一点的海拔值,请高手指点!谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
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;
}
可以用OGR来读取TIFF文件,首先注册,然后打开文件,在用OGR里面专用的数据获取函数得到你想要的值,担任 如果你愿意也可以重新创建一个文件、、、以上的函数你自己在OGR里面查,或者网上也有许多,就不赘述了、、、