Я пытаюсь прочитать данные о высоте, хранящиеся в файлах HGT. Насколько я знаю, их можно читать как двоичные файлы.Как читать файлы HGT в C++
Я нашел эту тему:
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 байта для каждого местоположения в массиве. У вас также есть опечатка во втором измерении размера массива. –
Я гадал то же самое, но не могли бы вы помочь мне узнать, как читать весь файл? или как читать конкретное местоположение линии/пикселя? –