HDF文件包括科学数据和VData部分。读取HDF格式的calipso数据,用GDAL可以方便的读取其中的子数据集,但是没有发现GDAL中提供读取Vdata的方法。所以只好考虑借助hdf-4.2.6类库本身。毕竟GDAL也是采用的hdf-4.2.6类库进行了一次封装。

首先从HdfGroup网站下载一个编译好的安装包。解压后目录如下:

新建一个Win32控制台项目。

添加包含和引用的lib,注意安装目录文件夹下的lib文件夹中的.lib文件应该是relese版本的,我这里引用了dll文件夹下的.lib文件。

从Hdf4.2.6源码中找到VD_create_onefield_vdatas.c文件。我这里修改为VD_create_onefield_vdatas.cpp,添加到项目中,把项目中的HdfFirst.cpp直接排除掉,因为里面有个Main函数。

同时在VD_create_onefield_vdatas.cpp添加

#include "stdafx.h"

完整代码:

 1 #include "stdafx.h"
 2 #include "hdf.h"
 3
 4 #define  FILE_NAME      "General_Vdatas.hdf"
 5 #define  CLASS1_NAME    "5x1 Array"
 6 #define  CLASS2_NAME    "6x4 Array"
 7 #define  VDATA1_NAME    "First Vdata"
 8 #define  VDATA2_NAME    "Second Vdata"
 9 #define  FIELD1_NAME    "Single-component Field"
10 #define  FIELD2_NAME    "Multi-component Field"
11 #define  N_RECORDS_1    5    /* number of records the first vdata contains  */
12 #define  N_RECORDS_2    6    /* number of records the second vdata contains */
13 #define  ORDER_2        4    /* order of the field in the second vdata      */
14                 /* Note that the order of the field in the first vdata is 1 */
15
16 int main( )
17 {
18    /************************* Variable declaration **************************/
19
20    intn  status_n;      /* returned status for functions returning an intn  */
21    int32 status_32;     /* returned status for functions returning an int32 */
22    int32 file_id, vdata1_ref, vdata2_ref;
23
24    /*
25    * Define an array to buffer the data of the first vdata.
26    */
27    char8 vdata1_buf [N_RECORDS_1] = {'V', 'D', 'A', 'T', 'A'};
28
29    /*
30    * Define an array to buffer the data of the second vdata.
31    */
32    int32 vdata2_buf [N_RECORDS_2][ORDER_2] = {{1, 2, 3, 4}, {2, 4, 6, 8},
33                                               {3, 6, 9, 12}, {4, 8, 12, 16},
34                                               {5, 10, 15, 20}, {6, 12, 18, 24}};
35
36    /********************** End of variable declaration **********************/
37
38    /*
39    * Open the HDF file for writing.
40    */
41    file_id = Hopen (FILE_NAME, DFACC_WRITE, 0);
42
43    /*
44    * Initialize the VS interface.
45    */
46    status_n = Vstart (file_id);
47
48    /*
49    * Create the first vdata and populate it with data from the vdata1_buf
50    * array. Note that the buffer vdata1_buf is cast to (uint8 *) for the
51    * benefit of generic data type.
52    */
53    vdata1_ref = VHstoredata (file_id, FIELD1_NAME, (uint8 *)vdata1_buf,
54                        N_RECORDS_1, DFNT_CHAR8, VDATA1_NAME, CLASS1_NAME);
55
56    /*
57    * Create the second vdata and populate it with data from the vdata2_buf
58    * array.
59    */
60    vdata2_ref = VHstoredatam (file_id, FIELD2_NAME, (uint8 *)vdata2_buf,
61                N_RECORDS_2, DFNT_INT32, VDATA2_NAME, CLASS2_NAME, ORDER_2);
62
63    /*
64    * Terminate access to the VS interface and close the HDF file.
65    */
66    status_n = Vend (file_id);
67    status_32 = Hclose (file_id);
68    return 0;
69 }

View Code

将Dll文件拷贝到Debug目录下,运行,发现目录下生成了General_Vdatas.hdf文件。在Matlab中查看:

转载于:https://www.cnblogs.com/yhlx125/p/4447229.html

[HDF]hdf-4.2.6类库的使用相关推荐

  1. python把hdf转为tif_命令行记录-python读取hdf图层,转成tif文件

    主体内容来自 https://www.cnblogs.com/ninicwang/p/11535170.html 1.安装pyhdf包 2.读hdf4文件 #导入包 from pyhdf.SD imp ...

  2. matlab怎么输入输出文件,[转载]底层文件输入输出函数

    [转载]底层文件输入输出函数 http://sincerewfeng.spaces.live.com/ fclose :关闭文件 fopen :打开文件 fread :从文件中读入二进制数据 fwri ...

  3. 导出matlab程序,Matlab数据导入导出

    Matlab提供了从磁盘文件或剪贴簿转载数据至工作区(数据导入)和将工作区变量存入磁盘文件(数据导出)的多种途径. 最简单的办法是使用界面导入向导,打开文件菜单中的导入数据而后按提示操作. 一.导入文 ...

  4. 【竞赛相关】特征/模型存储的5种方法

    Hello大家好,我是Coggle菌.今天我将继续和大家一起学习竞赛中的各种基础知识点,从基础库使用到具体的比赛案例. 今天将介绍的比赛中存储特征的几种方法,供大家学习和选择. 方法1:csv/txt ...

  5. GDAL\OGR读取数据示例 C#版本

    首先创建一个Windows窗体应用程序,然后拖几个按钮和文本框,如下图所示.第一行用来显示栅格数据的路径,点击浏览找到一个栅格文件,将路径显示在文本框中,然后点击读取,将图像的基本信息显示在最下方的富 ...

  6. matlab处理各种数据、文件

    MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据:将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据.至于选择哪种机制,则根据下面两个因素决定:● 用户 ...

  7. 空间数据计算引擎GeoSpark调研

    什么是空间数据 空间数据(Spatial Data) 空间数据又称几何数据,它用来表示物体的位置.形态.大小分布等各方面的信息,是对 现实世界中存在的具有定位意义的事物和现象的定量描述.根据在计算机系 ...

  8. 腾讯云服务器挂载云硬盘

    腾讯云服务器挂载云硬盘 1.到腾讯云服务器购买一块云硬盘,然后直接挂载到你的服务器下就可以了,如果服务器不能识别,请看部分存量云服务器无法识别弹性云盘的解决方法 2.挂载完云硬盘之后,云硬盘默认处于未 ...

  9. 数据分析中常见的存储方式

    点击上方"大话coding",选择"星标"公众号 重磅干货,第一时间送达 大家好,我是小轩 这两天整理了在数据分析中常见的5种存储格式 内容比较多,只是简要整理 ...

最新文章

  1. 只因写了一段爬虫,公司200多人被抓 ?
  2. addroid 自定义布局
  3. 使用Spring Session和JDBC DataStore进行会话管理
  4. Oracle数据库(三)
  5. mysql 命令desc tables_oracle中与mysql中的命令 show databases, show tables, desc table类似的命令集...
  6. 正常血压(信息学奥赛一本通-T1076)
  7. 停机断网也能充话费了!微信和三大运营商打造绿色通道:太方便了!
  8. jsf ajax循环调用,每次JSF ajax回发后执行JavaScript
  9. Powershell进阶学习(6) 部署 Windows PowerShell Web 访问
  10. intellij中使用git插件将项目上传到码云
  11. python新手入门.pdf_所有Python入门书籍的整理,初学者必看,附赠所有电子版(一)...
  12. 今日分享idea精彩好看的主题+网站地址
  13. R pdf大小_PDF如何压缩?这两招教您快速压缩PDF!
  14. GooglePlay内购服务器验单配置
  15. RT-thread Nano移植并实现多线程任务
  16. 修改 Mixamo 导出的动画名字
  17. 精准填报志愿、一分不浪费……靠谱吗?
  18. 晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。
  19. win11右击文件夹假死
  20. 6 个超酷的学习算法网站,Leetcode 不是第一 ?

热门文章

  1. vue 定义全局函数
  2. linux 自动备份脚本
  3. 安装apache+gd2(jpeg,png等)+mysql-client+php脚本
  4. C++下简单的socket编程
  5. ChannelFactory创建和销毁昂贵
  6. Python之面向对象进阶系列
  7. 测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题
  8. uva11584 Partitioning by Palindromes
  9. [Zabbix] 怎样实现邮件报警通知以及免费短信报警通知
  10. postgresql查询栅格数据范围(extent)