转换SRTM数据时为负高度

Negative heights when converting SRTM data

本文关键字:高度 SRTM 数据 转换      更新时间:2023-10-16

我想从NASA SRTM数据集中获得某个纬度/经度对的高度(http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/Eurasia/)。

作为一名初学者,我想从HGT文件中获得所有高度:

int totalPx = 1201; //3 degree
char buffer[2];
for (int i=0; i<totalPx; i++)
{
    for (int j=0; j<totalPx; j++)
    {
        int pos = (i * totalPx + j) * 2;
        m_openedFile.seek(pos); //m_openedFile is a Qt QFile
        m_openedFile.read(buffer, 2);
        short h = 0 | (buffer[0] << 8) | (buffer[1] << 0);
        if (h < 0)
            printf("%d", h);
    }
}

这似乎适用于某些坐标(例如,高度值看起来似乎合理),但也有许多负高度值。如何正确读取SRTM/HGT文件?

问候,

char转换为int 时注意符号扩展

// char buffer[2];
unsigned char buffer[2];
short h = buffer[0] << 8 | buffer[1];

我发现了:问题是有符号的字符而不是无符号的字符,这会导致错误的位偏移:

int totalPx = 1201; //3 degree
unsigned char buffer[2];
for (int i=0; i<totalPx; i++)
{
    for (int j=0; j<totalPx; j++)
    {
        int pos = (i * totalPx + j) * 2;
        m_openedFile.seek(pos); //m_openedFile is a Qt QFile
        m_openedFile.read(buffer, 2);
        short h = 0 | (buffer[0] << 8) | (buffer[1] << 0);
        if (h < 0)
            printf("%d", h);
    }
}