C++读取ASCII格式DEM数据
要使用OpenGL显示DEM,就把tif的DEM转成了ASCII格式的,用的是ArcMap工具箱里的栅格转ASCII,转出来的格式是这样的:用了6行来描述数据,如下:
第一行:数据的列数ncols
第二行:数据的行数 nrows
第三行:数据左下角的X值xllcorner
第四行:数据左下角的Y值yllcorner
第五行:像元大小cellsize
第六行:无数据的值NODATA_value
第七行开始就是数据了,按照行和列的位置排列,值代表像元值的大小。
关于一些DEM格式的转换可以看这里。
下面是ASCII格式DEM的截图:
这里的思路是,先读取第2个和第4个内容也就是列和行到int变量里,然后跳过后面的8个内容,从第13个内容开始就是数据了,开始读到float数组里,当然这是看的人家的代码,应该还有更好的方式来读取。这里的方式也相应的存在一些问题:如果数据没有空间参考,那么出来的ASCII文件没有数据左上角的坐标,读取时数据的起始位置会发生偏差,会出现问题。数据量较大的时候这种方式也会出现问题:需要开辟的数组太大了。当然这里先不管那些,问题留到以后解决。
代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
float *H;
float Z;
int col, row;
ifstream infile;
infile.open("demclip1.txt");
if (!infile)
cout << "error" << endl;
string str;
infile >> str >> col >> str >> row;
int datanum = col * row;
H = new float[datanum];
for (int i = 0; i < 8; i++)
{
infile >> str;
cout << str << endl;
}
for (int i = 0; i < col * row; i++)
{
infile >> Z;
if (Z <= -9999 || Z >= 9999)
H[i] = 0;
else
H[i] = Z;
}
cin.get();
return 0;
}

鲁公网安备 37148202000241号