首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换SRTM数据时的负高度

转换SRTM数据时的负高度
EN

Stack Overflow用户
提问于 2015-12-04 16:31:37
回答 2查看 199关注 0票数 1

我想从NASA数据集(1/SRTM3/Eurasia/)中获得某一纬度/经度对的高度。

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

代码语言:javascript
复制
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文件?

致以敬意,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 16:46:51

在将char转换为int时小心符号扩展

代码语言:javascript
复制
// char buffer[2];
unsigned char buffer[2];
short h = buffer[0] << 8 | buffer[1];
票数 3
EN

Stack Overflow用户

发布于 2015-12-04 16:46:43

我想出了一个问题:问题是有符号的字符,而不是没有符号的字符,这会导致错误的位转移:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34092995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档