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;

 

posted @ 2020-07-09 17:54  GISer-Li  阅读(6100)  评论(0编辑  收藏  举报