erdasimge数据c++环境下读取Word文档格式.docx
《erdasimge数据c++环境下读取Word文档格式.docx》由会员分享,可在线阅读,更多相关《erdasimge数据c++环境下读取Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
doubleGeoX,GeoY;
x,y;
longindex=0;
for(inti=0;
i<
GetRasterCount();
i++)
if(adfGeoTransform[5]<
0.0)
//坐标变换
GdalToWorld(adfGeoTransform,0,pDataset->
GetRasterYSize(),GeoX,
GeoY);
else
adfGeoTransform[5]*=-1.0;
}
Cellsize=adfGeoTransform[1];
xMin=GeoX;
yMin=GeoY;
HFARasterBand
*pBand;
pBand=pDataset->
GetRasterBand(i+1);
//从1开始计数,具体的波段
doubleofffset=pBand->
GetOffset();
//波段中的偏移量
float*pScanline=(float*)malloc(sizeof(float)*pDataset->
GetRasterXSize());
//沿X轴长度的扫描线,
intiRows=
GetRasterYSize();
//行数
intiColumns=pDataset->
GetRasterXSize();
//列数
doubledMin=99999;
doubledMax=-99999;
//准备记录高程数值的最小和最大数值
POINT3d*p3dDEMGridPoint=newPOINT3d[iRows*iColumns];
//addedbyhoutao20071029
for(y=0;
y<
iRows;
y++)
pBand->
RasterIO(GF_Read,0,y,pDataset->
GetRasterXSize(),1,
pScanline,pDataset->
GetRasterXSize(),1,GDT_Float32,
0,0);
//读取数据到pScanline中
for(x=0;
x<
iColumns;
x++)
{
GdalToWorld(adfGeoTransform,x,y,GeoX,
WorldToGeoView(xMin,yMin,Cellsize,GeoX,GeoY,x_pos,y_pos);
index=y*iColumns+x;
p3dDEMGridPoint[index][0]=x_pos;
p3dDEMGridPoint[index][1]=y_pos;
//记录数据
p3dDEMGridPoint[index][2]=pScanline[x]/200;
//pScanline[x]+offfset;
if(p3dDEMGridPoint[index][2]>
-500&
&
p3dDEMGridPoint[index][2]<
9000)
//高程数值在正常的范围内
//寻找最小数值
if(dMin>
p3dDEMGridPoint[index][2])dMin=p3dDEMGridPoint[index][2];
if(dMax<
p3dDEMGridPoint[index][2])dMax=p3dDEMGridPoint[index][2];
}
//对X轴循环结束
//对Y轴循环结束
m_p3dDEMGrid->
SetRows(iRows);
//记下行数
SetColumns(iColumns);
//记下列数
SetSurfacePoint(p3dDEMGridPoint);
//设置点集
SetZMin(dMin);
//记下Z轴最小数值
SetZMax(dMax);
//记下Z轴最大数值
SetXMin(xMin);
//记下X轴最小数值
SetXMax(xMin+iColumns*Cellsize);
//记下X轴最大数值
SetYMin(yMin);
//记下Y轴最小数值
SetYMax(yMin+iRows*Cellsize);
//记下Y轴最大数值
free(pScanline);
//结束这个波段的循环
returntrue;
HFADataset*ImportDEMDataERDASImg:
Open(LPCSTRlpszPathName)
//返回dataset;
来源于:
GDALDataset*HFADataset:
Open(GDALOpenInfo*poOpenInfo)
HFAHandle
hHFA;
i;
hHFA=HFAOpen(lpszPathName);
//打开文件
if(hHFA==NULL)
returnNULL;
//创建对应的数据集,如果成功,将是返回的结果
HFADataset
*poDS;
poDS=newHFADataset();
poDS->
hHFA=hHFA;
//将HFAOpen()函数得到的结果赋值给新建立的Dataset
HFAGetRasterInfo(hHFA,&
nRasterXSize,&
nRasterYSize,&
nBands);
//通过hHFA,得到基本信息
if(poDS->
nBands==0)
deletepoDS;
//返回结果:
空
nRasterXSize==0||poDS->
nRasterYSize==0)
//通过hHFA,得到变换信息
HFAGetGeoTransform(hHFA,poDS->
adfGeoTransform);
//得到投影信息
//poDS->
ReadProjection();
//
//新建各个波段数据
for(i=0;
i<
poDS->
nBands;
SetBand(i+1,newHFARasterBand(poDS,i+1,-1));
//
-1代表HFARasterBand->
poDS=poDS;
HFARasterBand*poBand=(HFARasterBand*)poDS->
poBand->
bMetadataDirty=FALSE;
return(poDS);
HFAHandleImportDEMDataERDASImg:
HFAOpen(LPCSTRlpszPathName
)
//来源:
HFAHandleHFAOpen(constchar*pszFilename,constchar*pszAccess)
HANDLE
hFile;
char
szHeader[16];
HFAInfo_t
*psInfo;
GUInt32
nHeaderPos;
HFAFileOperatefileOperate;
hFile=fileOperate.FOpenL(lpszPathName);
if(hFile==INVALID_HANDLE_VALUE)
if(fileOperate.FReadL(szHeader,16,1,hFile)<
1)
if(!
EQUALN(szHeader,"
EHFA_HEADER_TAG"
15))
psInfo=(HFAInfo_t*)calloc(sizeof(HFAInfo_t),1);
psInfo->
hFile=hFile;
fileOperate.FReadL(&
nHeaderPos,sizeof(GInt32),1,hFile);
//读取文件头
fileOperate.FSeekL(hFile,nHeaderPos,SEEK_SET);
(psInfo->
nVersion),sizeof(GInt32),1,hFile);
fileOperate.FReadL(szHeader,4,1,hFile);
nRootPos),sizeof(GInt32),1,hFile);
//读取psInfo->
nRootPos
nEntryHeaderLength),sizeof(GInt16),1,hFile);
nDictionaryPos),sizeof(GInt32),1,hFile);
fileOperate.FSeekL(hFile,0,SEEK_END);
nEndOfFile=(GUInt32)fileOperate.FTellL(hFile);
//实例化根结点
poRoot=newHFAEntry(psInfo,psInfo->
nRootPos,NULL,NULL);
pszDictionary=HFAGetDictionary(psInfo);
poDictionary=newHFADictionary(psInfo->
pszDictionary);
HFAParseBandInfo(psInfo);
returnpsInfo;
CPLErrImportDEMDataERDASImg:
HFAGetRasterInfo(HFAHandlehHFA,int*pnXSize,int*pnYSize,int*pnBands)
if(pnXSize!
*pnXSize=hHFA->
nXSize;
if(pnYSize!
*pnYSize=hHFA->
nYSize;
if(pnBands!
*pnBands=hHFA->
returnCE_None;
HFAParseBandInfo(HFAInfo_t*psInfo)
HFAEntry
*poNode;
nBands=0;
poNode=psInfo->
poRoot->
GetChild();
while(poNode!
=NULL)
//当结点不为空
if(EQUAL(poNode->
GetType(),"
Eimg_Layer"
)&
poNode->
GetIntField("
width"
)>
0&
height"
0)
if(psInfo->
nXSize=poNode->
);
nYSize=poNode->
elseif(poNode->
)!
=psInfo->
nXSize||poNode->
nYSize)
//CPLAssert(FALSE);
returnCE_Failure;
papoBand=(HFABand**)
realloc(psInfo->
papoBand,sizeof(HFABand*)*(psInfo->
nBands+1));
papoBand[psInfo->
nBands]=newHFABand(psInfo,poNode);
nBands++;
poNode=poNode->
GetNext();
/************************************************************************/
/*
HFAGetDictionary()
*/
char*ImportDEMDataERDASImg:
HFAGetDictionary(HFAHandlehHFA)
//HFAGetDictionary(HFAHandlehHFA)
nDictMax=100;
*pszDictionary=(char*)malloc(nDictMax);
nDictSize=0;
fileOperate.FSeekL(hHFA->
hFile,hHFA->
nDictionaryPos,SEEK_SET);
while(TRUE)
if(nDictSize>
=nDictMax-1)
nDictMax=nDictSize*2+100;