关于DEM文件的介绍和应用

<转>关于DEM文件的介绍和应用

    DEM文件是一种摄影测量学专用的文件格式,分为文本和二进制两种,存储的是一个区域内的高程值。就其介绍如下:

    文本格式采用的国标NSDTF格式,使用文本格式保存,可以使用记事本打开查看。

    起头的12行描述了DEM的基本信息

    NSDTF-DEM 文件标识

    1.0 版本号

    M 单位(米)

    0.000000

    0.000000

    3000.000000 左上角X坐标

    9990.000000 左上角Y坐标

    30.000000 X方向采样间隔

    30.000000 Y方向采样间隔

    334 行数

    201 列数

    1000 缩放比例

    后面是DEM的采样高程,首先是最上面的一行高程坐标,然后是第二行,第三行...总共有行数×列数个高程坐标。保存的数值是整数,需要除以缩放比得到真实的浮点高程值。-99999为无效高程值。

    二进制格式说明

    在文件头部是一个结构体,结构体的定义如下

    typedef struct tagDEMHEADERINFO

    {

int nType;//类型 给0

double lfStartX;//起点

double lfStartY;//

double lfDx;//采样间隔

double lfDy;//

int nRow;//行

int nColumn;//列

double lfKapa;//旋转角,给0

int nProjection;//投影,给0

double lfHeight;//平均高度?

double lfNoData;//无效数

int nScale;//缩放比

int nDot;//小数点位数

int nPixelSize;//占用的字节数

    }DEMHEADERINFO,*PDEMHEADERINFO;

   

    在文件头后面开始真实的高程值,浮点形式。写入的顺序和文本格式的相同。

    简单例子如下:

    FILE *fp;

     if((fp=fopen(lpszFileName,"rt"))==NULL)

      {

           AfxMessageBox("文件无法打开!");

           return FALSE;

      }

     fscanf(fp,"%s",&m_DataMark);

     if(strcmp(m_DataMark,"NSDTF-DEM")!=0)

     {

       AfxMessageBox("文件错误!");

       return FALSE;

     }

    //AfxMessageBox(m_DataMark);

    fscanf(fp,"%f",&m_Version);//版本号

    fscanf(fp,"%s",&m_Unit);//单位(米)

    fscanf(fp,"%lf",&m_Alfa);//α

    fscanf(fp,"%lf",&m_Beta);//β

    fscanf(fp,"%lf",&m_lfStartX);

    fscanf(fp,"%lf",&m_lfStartY); 

    fscanf(fp,"%lf",&m_lfDx);

    fscanf(fp,"%lf",&m_lfDy);

    fscanf(fp,"%d",&m_nRow);

    fscanf(fp,"%d",&m_nColumn);  

    fscanf(fp,"%d",&m_nScale);

    int j;

    m_pHeight=new long*[m_nRow];

    for(j=0; j<m_nRow; j++)

    {

     m_pHeight[j]=new long[m_nColumn];

    }

    for(int i=0; i<m_nRow; i++)

     for(int j=0; j<m_nColumn; j++)

     {

        fscanf(fp,"%ld",&x);

        m_pHeight[i][j]=x;

       if(x==-99999)

       {

          m_pHeight[i][j]=(long) NoData;

        }

    else

        m_pHeight[i][j]=(long) x/m_nScale;

   }

   fclose(fp);

     

原文地址:https://www.cnblogs.com/sunliming/p/1975774.html