c语言读取hdf投影信息,C语言对HDF文件数据集和属性的读写.docx

C语言对HDF文件数据集和属性的读写

以三维数据读写为例打开,读取空间属性、维度,数据集属性,文件属性,数据集的数据;//写入txt文件(动态定义数组——用指针),写入DAT文件(可以用ENVI打开查看图像),写入HDF文件写入HDF文件属性、数据属性、空间属性,数据压缩。hid_t file_id,space_id,dset_id;hsize_t dims[3]={0,0,0};int ndims=0;int status;int col = 0;int row =0;int high=0;char FileName[200];char OutFileName[200];int N=0;int i,j,k; memset(FileName,0,sizeof(FileName));memset(OutFileName,0,sizeof(OutFileName));strcpy(FileName,"C:\\Users\\hanss\\Desktop\\FY3B_MERSI_GBAL_L10000_1000M_MS.HDF");strcpy(OutFileName,"C:\\Users\\hanss\\Desktop\\FY3B.HDF");unsignedint* dset=newunsignedint[row * col*high];memset(dset,0,sizeof(unsignedint)* row * col*high);打开HDF文件并读取相关数据信息1、打开HDF文件file_id = H5Fopen(FileName, H5F_ACC_RDONLY, H5P_DEFAULT);2、打开数据集dset_id = H5Dopen(file_id,"EV_1KM_RefSB",H5P_DEFAULT);3、获取空间地址space_id = H5Dget_space(dset_id);4、获取空间维度信息ndims=H5Sget_simple_extent_dims(space_id,dims,NULL);5、读取数据集status=H5LTread_dataset(file_id,"EV_1KM_RefSB",H5T_NATIVE_UINT,dset);6、读取数据属性float Slope[30];int _FillValue[1];char band_name[41];H5LTget_attribute_float(file_id,"EV_1KM_RefSB","Slope",Slope);for(int i=0;i<15;i++) printf("Slope:%f\n",Slope[i]);H5LTget_attribute_int(file_id,"EV_1KM_RefSB","_FillValue",_FillValue); printf("_FillValue:%d\n",_FillValue[0]);H5LTget_attribute_string(file_id,"EV_1KM_RefSB","band_name",band_name); printf("%s\n",band_name);或者用H5LTget_attribute_float(dset_id,"/EV_1KM_RefSB","Slope",Slope);(推荐)H5LTget_attribute_float(file_id,"/EV_1KM_RefSB","Slope",Slope);或者char dset_name[20]="EV_1KM_RefSB";H5LTget_attribute_float(file_id,dset_name,"Intercept",Intercept);【注释】如果是file_id的话,不加斜杠也是可以的,但是如果时dse_id则一定要加斜杠如果是file_id,加斜杠也可以输出数组时遍历每个元素才行,直接输出数组名,其实是输出了数组地址,需要加*,那就是输出数组第一个元素值;也可以定义指针,首先分配空间float *Intercept;Intercept=(float*)malloc(sizeof(float)*15);H5LTget_attribute_float(dset_id,"/EV_1KM_RefSB","Intercept",Intercept); printf("Intercept:\n");for(int i=0;i<15;i++)printf("%f\n",*(Intercept+i));不要把IDL语法放到C中C++中的unsigned char就是byte型,0-255值unsigned char DQ[1];H5LTget_attribute_uchar(file_id,"/",

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例程序,该程序演示了如何使用Java读写.hdf5多个组和多个数据集。 ```java import java.util.Arrays; import ncsa.hdf.hdf5lib.*; import ncsa.hdf.hdf5lib.exceptions.*; import ncsa.hdf.object.*; import ncsa.hdf.object.h5.*; public class HDF5Example { public static void main(String[] args) { H5File file = null; try { // 创建一个新的.hdf5文件 file = new H5File("test.h5", H5File.CREATE); // 创建组1和组2 Group group1 = file.createGroup("Group1"); Group group2 = file.createGroup("Group2"); // 在组1中创建两个数据集 int[] data1 = {1, 2, 3, 4, 5}; int[] data2 = {6, 7, 8, 9, 10}; int[] dims = {5}; Datatype dtype = new H5Datatype(Datatype.CLASS_INTEGER, 4, Datatype.NATIVE, Datatype.NATIVE); Dataset dataset1 = file.createScalarDS("Group1/Dataset1", group1, dtype, dims, null, null, 0, data1); Dataset dataset2 = file.createScalarDS("Group1/Dataset2", group1, dtype, dims, null, null, 0, data2); // 在组2中创建一个数据集 float[] data3 = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f}; Dataset dataset3 = file.createScalarDS("Group2/Dataset3", group2, dtype, dims, null, null, 0, data3); // 读取数据集1和数据集3的数据 int[] readData1 = (int[]) dataset1.read(); float[] readData3 = (float[]) dataset3.read(); System.out.println("Data from Dataset1: " + Arrays.toString(readData1)); System.out.println("Data from Dataset3: " + Arrays.toString(readData3)); // 关闭文件 file.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在此示例中,我们首先创建了一个名为“test.h5”的新.hdf5文件。然后,我们创建了两个组“Group1”和“Group2”,并在“Group1”中创建了两个数据集“Dataset1”和“Dataset2”,在“Group2”中创建了一个数据集“Dataset3”。 然后,我们使用`read()`方法从“Dataset1”和“Dataset3”中读取数据,并将其打印到控制台上。最后,我们关闭文件。 请注意,我们使用`ncsa.hdf.object.h5.*`包中的类来读写.hdf5文件。这些类是由HDF Group提供的官方Java接口,可用于读写.hdf5文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值