zoukankan      html  css  js  c++  java
  • 关于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);

         

  • 相关阅读:
    Html中列表显示
    Html中图片参数
    Html如何加入图片或超链接
    html常用标签
    mysql 几个坑
    现有.NET 开源框架浅析
    winform 界面加载慢原因分析
    FineUI 框架,RIA 富客户端应用的选择
    Hadoop Default Port
    docker issue
  • 原文地址:https://www.cnblogs.com/sunliming/p/1976561.html
Copyright © 2011-2022 走看看