关于DEM文件的介绍和应用
2011-03-07 23:53
591 查看
<转>关于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);
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);
相关文章推荐
- 关于DEM文件的介绍和应用
- 关于Qt中.pro文件命令介绍和写法
- 介绍一个Rusty Russell关于iptables快速应用案例
- Fine Uploader文件上传组件应用介绍
- 关于extern以及源文件和头文件的应用
- 介绍Android应用工程文件组成
- 关于MFC中文件对话框的应用
- 关于项目中如何应用js和css文件
- 关于Linux备份文件和应用的几个命令:tar和cp
- 关于linux驱动(应用)程序头文件使用
- 关于QT中的工程文件.pro的介绍
- 关于安卓应用(APK文件)的二次打包
- 关于using的介绍 Web.config配置 App.config数据库的链接文件的配置
- 关于mac下面Qt应用的文件关联
- SharePoint Client Object应用 包含关于操作文件和文件夹的代码
- 简单介绍iOS开发中关于category的应用
- 关于安卓应用(APK文件)的二次打包
- 社保卡应用名称、标识符及文件系统的介绍
- 关于QQ通讯录的应用及vcf文件导入手机的乱码问题
- 关于opensips用户认证配置文件 opensips.cfg 使用介绍