std::locale::global(std::locale(""));
ifstream _demfile; //DEM文件流
_demfile.open(lpszPathName); //读取文件
string sDataName,sCNDataName;
string sVersion;float iVersion;
string sAlpha;float fAlpha;
string sUnit; string sUnitName;
string sCompress; float dCompress;
string sX0; double dX0;
string sY0; double dY0;
string sDX; double dDX;
string sDY; double dDY;
string sRow; int iRows;
string sColumn; int iColumns;
string sValueTypeName; string sValueType;
string sHzoom; int iHzoom;
string sMinV;
string sMaxV;
if(_demfile)
{
_demfile>>sDataName>>sCNDataName;
_demfile>>sVersion>>iVersion;
_demfile>>sAlpha>>fAlpha;
_demfile>>sUnit>>sUnitName;
_demfile>>sCompress>>dCompress;
_demfile>>sX0>>dX0;
_demfile>>sY0>>dY0;
_demfile>>sDX>>dDX;
_demfile>>sDY>>dDY;
_demfile>>sRow>>iRows;
_demfile>>sColumn>>iColumns;
_demfile>>sValueTypeName>>sValueType;
_demfile>>sHzoom>>iHzoom;
_demfile>>sMinV;
_demfile>>sMaxV;
}
else
{
AfxMessageBox("无法读取文件数据头!");
return false;
}
dY0 = dY0 - dDY*iRows; //从文件中读取的dYO记录的是最大数值
long index = 0,PointsTotalNumber = 0;
int i,j;
double tmpHeight = 0;
POINT3d* p3dDEMGridPoint = new POINT3d[iRows*iColumns]; //准备读文件中数据
double dNodata = -99999;
double dZMin = 9999,dZMax = -9999;
for(j=iRows-1;j>=0;j--) //由于此文件记录Y数值的方法与其他不同,需要翻转数据
{
for(i=0;i<iColumns;i++)
{
index = j*iColumns+i;
_demfile>>tmpHeight;
if(iHzoom != 0) tmpHeight = tmpHeight/iHzoom; //原始的缩放因子
p3dDEMGridPoint[index][2] = tmpHeight;
if( tmpHeight > -9999) //也就是不等于 dNodata
{
if(dZMin > tmpHeight) dZMin = tmpHeight; //记录高程上的最小数值
if(dZMax < tmpHeight) dZMax = tmpHeight; //记录高程上的最大数值
}
}
}