【发布时间】:2013-04-24 05:37:42
【问题描述】:
我正在尝试读取存储在 HGT 文件中的高程数据。据我所知,它们可以作为二进制文件读取。
我找到了这个帖子:
How do I access .HGT SRTM files in C++?
根据那篇文章,我的示例代码是:
#include <iostream>
#include <fstream>
int main(int argc, const char * argv[])
{
std::ifstream::pos_type size;
char * memblock;
std::ifstream file ("N45W066.hgt", std::ios::in|std::ios::binary|std::ios::ate);
if (file.is_open())
{
size = 2;
memblock = new char [size];
file.seekg(0, std::ios::beg);
file.read(memblock, size);
int srtm_ver = 1201;
int height[1201][1021];
for (int i = 0; i<srtm_ver; ++i){
for (int j = 0; j < srtm_ver; ++j) {
height[i][j] = (memblock[0] << 8 | memblock[1]);
std::cout<<height[i][j]<<" ";
}
std::cout<<std::endl;
}
}
return 0;
}
第一次运行后,它给了我一堆零,没有别的:| hgt 文件很好,我已经使用可以读取多种类型地图文件的应用程序对其进行了测试,它包含我需要的高程数据。
【问题讨论】:
-
您总共只从文件中读取 2 个字节。您需要为数组中的每个位置读取 2 个字节。您在数组大小的第二维中也有错字。
-
我也在猜同样的事情,但你能帮我看看如何阅读整个文件吗?或者如何读取特定的线/像素位置?
标签: c++ file binary elevation .hgtags