2 rrliyang rrliyang 于 2015.05.27 16:09 提问

GDAL读取tif数值出现问题?急求大神指点!!!!! 5C

文件是用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;
}

2个回答

wang_390486690
wang_390486690   2016.08.05 22:11

数据类型判断了吗?如果是Integer类型的值,你用Short读是有问题的啊。

xy707707
xy707707   2015.05.27 17:10

有借鉴意义,,关注着问题的解答

Csdn user default icon
上传中...
上传图片
插入图片