文件是用arcgis软件分类后存储的tif文件,分了20个类,灰度值应该是1-20之间的整数值,在arcgis软件中显示是这样的正常值,但是用VS2010+GDAL中读取时会出现灰度值不是这个,总是32768或0啊什么的值。我程序读取网上下载的原始geotiff的高程数据是完全没问题的,分类后的数据怎么就读不出来了呢?我写了个大致代码如下,望大神给我分析一下,第一天注册CSDN,谢谢!
#include "stdafx.h"
#include "gdal_priv.h"
#include <iostream>
#include <iomanip>
#pragma comment(lib, "gdal_i.lib")
#include<fstream>
#define TTYPE short //方便数据类型的修改
using namespace std;
//using namespace System;
int main(int argc, char* argv[])
{
int num_iamge_size=0;
ofstream myofstream("D:\\输出结果.txt") ;
TTYPE *pafScanblock1; //开辟缓存区
char *file_path_name="D:\\TempForMapEMC\\iso20_min100.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(); //图像X尺寸
int nImgSizeY=poDataset->GetRasterYSize(); //图像Y尺寸
//获取坐标变换系数
double trans[6];
CPLErr aaa=poDataset->GetGeoTransform(trans); //此次分类后的tif用不到转换坐标,仅仅需要灰度值
//读取图像高程数据
double Xgeo,Ygeo;
for(int i=0;i<(nImgSizeX);i++)
{
for(int j=0;j<(nImgSizeY);j++)
{
pafScanblock1 = (TTYPE *) CPLMalloc(sizeof(TTYPE)*(1)*(1)); //pafScanblock1为缓存,计算出缓存大小
poBand1->RasterIO( GF_Read, j, i,1,1,pafScanblock1,1,1,GDALDataType(poBand1->GetRasterDataType()),0, 0 );
double elevation=*pafScanblock1;
num_iamge_size++;
cout<<setprecision(15)<<" 高程为: "<<" "<<elevation<<endl;
cout<<"下面是坐标变换系数:"<<endl;
cout<<trans[0]<<" "<<trans[1]<<" "<<trans[2]<<" "<<trans[3]<<" "<<tr ans[4]<<" "<<trans[5]<<" "<<endl;
myofstream<<" i="<<i<<" j="<<j<<" 类别是"<<elevation<<endl; //给关 //心的数据输出到文件
}
}
cout<<"总计:"<<num_iamge_size<<endl;
system("pause");
delete poDataset;
return 0;
}