首页 > 编程语言 >C/C++下读取ENVI栅格文件格式

C/C++下读取ENVI栅格文件格式

时间:2022-09-05 11:15:25浏览次数:48  
标签:fp 10 cout dat 栅格 ENVI TM 文件格式 lun

 ENVI使用的是通用栅格数据格式,包含一个简单的二进制文件( a simple flat binary )和一个相关的ASCII(文本)的头文件。

   利用其他语言如C/C++等直接读取ENVI的数据,则可以先对hdr文件进行解析,获取数据类型。

   hdr的文件结构如下,

ENVI

description = {

  Canon City, Colorado, Landsat TM, Calibrated to Reflectance }

samples = 640

lines   = 400

bands   = 6

header offset = 0

file type = ENVI Standard

data type = 1

interleave = bsq

sensor type = Landsat TM

wavelength units = Micrometers

z plot range = {0.00, 100.00}

z plot titles = {Wavelength, Reflectance}

band names = {

 TM Band 1, TM Band 2, TM Band 3, TM Band 4, TM Band 5, TM Band 7}

wavelength = {

 0.48500, 0.56000, 0.66000, 0.83000, 1.65000, 2.21500}

   解析的关键信息有samples:640(列),lines:400(行),header offset:0(头信息偏移量-单位为字节),data type=1(数据类型代码,见下表)。

 

数据类型

代码

字节型

1

16位有符号整型

2

32位有符号长整型

3

32位无符号长整型

13

浮点型

4

双精度浮点型

5

   对常用数据类型文件进行了读写的测试,值完全一致。

   利用IDL进行文件写出:

;+

;C++读取ENVI格式技术测试代码

; :输出不同数据类型的二进制文件

;

; Author: DYQ 2011年6月2日

;

; BBS: http://bbs.esrichina-bj.cn/ESRI/forum-28-1.html

; E-Mail: [email protected]

; Blog: http://hi.baidu.com/dyqwrp

;-

PRO test_out_bin

  outdir = 'c:\temp\'

  if file_test(outdir,/directory) ne 1 then file_mkdir,outdir

  ;字节byte

 OPENW,lun,outdir+'a.dat',/get_lun

 WRITEU,lun,BINDGEN(10)

  FREE_LUN,lun

  ;整型int

 OPENW,lun,outdir+'b.dat',/get_lun

 WRITEU,lun,INDGEN(10)

  FREE_LUN,lun

  ;浮点float

 OPENW,lun,outdir+'c.dat',/get_lun

 WRITEU,lun,FINDGEN(10)

  FREE_LUN,lun

  ;长整型long

 OPENW,lun,outdir+'d.dat',/get_lun

 WRITEU,lun,LINDGEN(10)

  FREE_LUN,lun

  ;双精度double

 OPENW,lun,outdir+'e.dat',/get_lun

 WRITEU,lun,DINDGEN(10)

  FREE_LUN,lun

END

 

   C++下读取文件:

//;C++读取ENVI格式技术测试代码

#include "stdafx.h"

#include "iostream.h"

 

int main(int argc, char* argv[])

{

      printf("Hello ! Successful Using C++! ^_^ \n");

         

      int i,n;

      FILE*fp;

 

      //二进制字节型

      char *bdata=new char[10];

      fp=fopen("c:\\temp\\a.dat","rb");

      n=fread(bdata,1,10,fp);

      fclose(fp);

      for(i=0;i<10;i++)

      {

             cout<<"二进制";

             cout<<i<<":"<<short(bdata[i])<<endl;

      }

   //二进制整型文件

      short int *idata=new short int[10];

      fp=fopen("c:\\temp\\b.dat","rb");

      n=fread(idata,2,10,fp);

      fclose(fp);

      for(i=0;i<10;i++)

      {

             cout<<"整型";

             cout<<i<<":"<<idata[i]<<endl;

      }

      //二进制浮点文件

      float *fdata=new float[10];

      fp=fopen("c:\\temp\\c.dat","rb");

      n=fread(fdata,4,10,fp);

      fclose(fp);

      for(i=0;i<10;i++)

      {

             cout<<"浮点";

             cout<<i<<":"<<fdata[i]<<endl;

      }

      //二进制长整型文件

      long *ldata=new long[10];

      fp=fopen("c:\\temp\\d.dat","rb");

      n=fread(ldata,4,10,fp);

      fclose(fp);

      for(i=0;i<10;i++)

      {

             cout<<"长整型";

             cout<<i<<":"<<ldata[i]<<endl;

      }

   //双精度double

      double *ddata=new double[10];

      fp=fopen("c:\\temp\\e.dat","rb");

      n=fread(ddata,8,10,fp);

      fclose(fp);

      for(i=0;i<10;i++)

      {

             cout<<"双精度型";

             cout<<i<<":"<<ddata[i]<<endl;

      }

 

 

      return 0;

}

 

最后输出:

标签:fp,10,cout,dat,栅格,ENVI,TM,文件格式,lun
From: https://www.cnblogs.com/enviidl/p/16657373.html

相关文章

  • ENVI二次开发综述与代码分享
    ENVI二次开发综述与代码分享 ENVI具备了丰富的二次开发功能函数接口,基本涵盖了ENVI下所有的功能,且通过IDL语言有输出助手(导出为COM或JAVA类)、Callable、IDLDrawWidget和......
  • ENVI5.5.3/IDL8.7.3新特性介绍
    ENVI5.5.3/IDL8.7.3于2020年2月正式发布。在ENVI5.5.3版本中,改进了一些更人性化的工具和设置,如主界面右下角显示文件的基本信息、可以更改窗口背景颜色等;帮助我们在ENVI中......
  • ENVI自动配准流程化工具的另类用法
    这里说的另类用法是指:只想利用自己手动添加的同名点用于图像配准,而不希望工具自动找点。这种需求一般用于无法自动找点的情况,比如卫星图像与DRG之类的线划图进行配准时。......
  • ENVI中高分六号WFV数据大气校正方法
    高分六号于2019年3月21日正式投入使用,它是一颗低轨光学遥感卫星,具有高分辨率、宽覆盖、高质量和高效成像等特点,配置2米全色/8米多光谱高分辨率相机(PMS)、16米多光谱中分辨率......
  • ENVI5.5.2/IDL8.7.2新特性
    2019年2月,ENVI5.5.2、IDL8.7.2 新版本发布。ENVI5.5.2主要新功能如下:新增波段扩展工具新增波谱库维数扩展工具新增开源遥感数据下载工具改进ReprojectRaster、Laye......
  • Vite Build Development Environment
    Normally,vitebuildbydefaultisbuildingtheproductionenvironmentonly,butwestillcanmakeitbuilddevelopmentenvironmentbyadding--modedevelopme......
  • 如何判断7z压缩文件格式
    如果压缩文件的后缀不是7z,那么如何如何判断文件格式呢?那就是通过文件头判断。7z文件头前6位,固定是:377ABCAF271C,其中前两位37、7A分别是“7”“z”的ASC码值,BCAF271C是固......
  • environment lighting
    环境光照是一种无限距离远和所有方向的光照  为了算出着色,所以需要Solvingtherenderingequation,其中的V项代表了光线是否能够到达,在去除V项之后就是单纯的光线发......
  • Asp.Net Core 如何获取IWebHostEnvironment
    一、IWebHostEnvironment 服务器主机信息:网站硬盘目录,网站名称,环境变量名称////摘要://Providesinformationaboutthewebhostingenvironmen......
  • 中文版ENVI强势来袭
    声明:本中文版 ENVI 系易智瑞遥感事业部出品。大家在使用过程中发现有任何问题或翻译不当的地方,实属正常。请将问题发邮件至 [email protected],谢谢。 由于ENVI......