HGT高程数据文件格式解析
.hgt文件
存储在航天飞机雷达地形测绘任务( SRTM )格式的GIS数据文件,包含在美国航空航天局的太空任务拍摄的全球高程数据,最多可包含一个角秒的分辨率,用于分析地球的地形地貌和地形生成图像。
在原始SRTM数据集由于空间任务的限制一些数据可能丢失,这些区域被称为“空隙”,通过内插方法确定“空隙”的高程值。例如,美国国家地理空间情报局(NGA )创作的“版本2”和“ 2.1版”的数据集,其中包括修改过的数据。因此,一些下载的HGT文件可能包括插数据。
HGT文件被命名为经度和纬度坐标。例如, N00W177.hgt包含纬度一度( 00-01北)和经度的一度( 177-178西)的数据。
HGT文件以16位有符号整数的二进制字节流存储,直接存储高程数据,没有文件头和压缩处理,每两个字节以空格分隔;文件大小固定2.75M,2,884,802 bytes ( = 1201 x 1201 x 2),读取时,一次读取3个char,前两个char分别存储了高程数据16位Int的前8位和后8位,按Big Endian高位存储;
数据矩阵大小为1201*1201,无效值为:-32768。
经纬度范围由hgt文件名称确定,如N34W119.hgt,表示北纬34-35,西经118-119的高程数据,S26W050.hgt表示南纬25-26,西经49-50的高程数据,数字为从南到北的最小,从西到东的最小。
1 //关键代码 2 FILE *fd; 3 char temp[20] = {0}; 4 int max = -32768; 5 int min = 32768; 6 fd = fopen("/home/user/data/S26W050.hgt", "r"); 7 while(!feof(fd)){ 8 fgets(temp, 3, fd); 9 int ele = (temp[0] << 8) | ((temp[1]) & 0x00ff); 10 11 if(ele > max) 12 max = ele; 13 if(ele < min) 14 min = ele; 15 } 16 fclose(fd); 17 std::cout << "MAX: " << max << " MIN:" << min << " rowNum:" << rowNum << std::endl;