/** get the root group and all the alone objects */ private void getRootGroup() { sw.Restart(); //LoadVgroups(_file_id);//暂时取消加载整个树结构,目前这个加载比较慢,暂时也用不着。 sw.Stop(); em = sw.ElapsedMilliseconds; Console.WriteLine("LoadVgroups" + em + "毫秒"); sw.Restart(); int num_ds = 0; int num_global = 0; status = HDF4Helper.SDfileinfo(_sd_id, out num_ds, out num_global); _num_datasets = num_ds; _num_global_attrs = num_global; for (int i = 0; i < num_ds; i++) { H4SDS ds = H4SDS.Load(_sd_id, i); _datasets.Add(ds); } for (int i = 0; i < num_global; i++) { HDFAttribute global_attr = HDFAttribute.Load(_sd_id, i); _global_attrs.Add(global_attr); } sw.Stop(); em = sw.ElapsedMilliseconds; Console.WriteLine("SDfileinfo" + em + "毫秒"); sw.Restart(); //Finding All Vdatas that are Not Members of a Vgroup: VSlone //初始化Vdata(读取表格数据,表格列名称参数) int[] ref_array = new int[1024]; HDF4API.VSlone(_file_id, ref_array, 1024); //初始化Vdata(读取表格数据,表格列名称参数) istat; int vdata_ref; int istat = HDF4API.Vstart(_file_id); vdata_ref = -1; List <H4Vdata> vdatas = new List <H4Vdata>(); while ((vdata_ref = HDF4API.VSgetid(_file_id, vdata_ref)) != HDFConstants.FAIL) { H4Vdata vdata = LoadVdata(_file_id, vdata_ref); vdatas.Add(vdata); } _vdatas = vdatas; sw.Stop(); em = sw.ElapsedMilliseconds; Console.WriteLine("VSlone" + em + "毫秒"); }
private void TestHelper() { int major_v; int minor_v; int release; StringBuilder libraryversion = new StringBuilder(); HDF4API.Hgetlibversion(out major_v, out minor_v, out release, libraryversion); string fullfilename = @"E:\Smart\CloudArgs\cloudsat\2007101034511_05065_CS_2B-GEOPROF_GRANULE_P_R04_E02.hdf"; int file_id = HDF4API.Hopen(fullfilename, DFACC.DFACC_READ, 0); HDF4API.Hgetfileversion(file_id, out major_v, out minor_v, out release, libraryversion); H4File hdf = new H4File(null, null, null, null); hdf.Load(fullfilename); //测试读取的全局属性 for (int i = 0; i < hdf.Num_Global_Attrs; i++) { dynamic attValue = hdf.GlobalAttrs[i].Value; } //测试读取的科学数据集及其属性 for (int i = 0; i < hdf.Num_Datasets; i++) { H4SDS sd = hdf.Datasets[i]; HDFAttribute[] attrs = sd.SDAttributes; if (sd.Rank == 2) { int buffersize = (int)sd.Dimsizes[0] * sd.Dimsizes[1]; int typesize = HDFDataType.GetSize(sd.Datatype); IntPtr ptr = Marshal.AllocHGlobal(buffersize * typesize); sd.Read(new int[] { 0, 0 }, null, sd.Dimsizes, ptr); short[] buffer = new short[buffersize]; Marshal.Copy(ptr, buffer, 0, buffersize); Marshal.FreeHGlobal(ptr); } } //测试读取的Vdata }
public CloudSatRasterBand(IRasterDataProvider rasterDataProvider, H4SDS sds, int bandNo) : base(rasterDataProvider) { _rasterProvider = rasterDataProvider as CloudsatDataProvider; _sds = sds; _bandNo = bandNo; _attribute = _attributes.CreateAttributeDomain("Attribute"); int rank = sds.Rank; int[] dims = sds.Dimsizes; if (rank == 1) { _width = 1; _height = dims[0]; } else if (rank == 2) { _height = dims[0]; _width = dims[1]; } _bandNmae = sds.Name; _dataType = enumDataType.Int16; }
public static H4SDS Load(int sd_id, int sds_index) { int status = 0; int sds_id = 0; int sds_ref = 0; StringBuilder sds_name = new StringBuilder(); int rank = 0; int[] dimsizes = new int[MAX_DIMSIZES]; HDF4Helper.DataTypeDefinitions datatype; int num_attrs = 0; sds_id = H4SDAPI.SDselect(sd_id, sds_index); sds_ref = HDF4API.SDidtoref(sds_id); int sds_index2 = HDF4API.SDreftoindex(sd_id, sds_ref); //HDF4Helper.SDreaddata status = HDF4Helper.SDgetinfo(sds_id, sds_name, out rank, dimsizes, out datatype, out num_attrs); status = HDF4Helper.SDendaccess(sds_id); int[] dims = new int[rank]; for (int i = 0; i < rank; i++) { dims[i] = dimsizes[i]; } H4SDS ds = new H4SDS(); ds._sd_id = sd_id; ds._sds_ref = sds_ref; ds._sds_id = sds_id; ds._sds_name = sds_name.ToString(); ds._rank = rank; ds._dimsizes = dims; ds._datatype = datatype; ds._num_attrs = num_attrs; return(ds); }
internal void AddVdata(H4SDS sd) { _sds.Add(sd); }
private H4Vgroup LoadVgroup(int file_id, int vgroup_ref, H4Vgroup pgroup) { int vgroup_id = 0; int vgroup_tag = 0; int n_vgroup_attr = 0; int n_entries = 0; int n_tagrefs = 0; int[] tag_array = new int[HDFConstants.NLONE]; int[] ref_array = new int[HDFConstants.NLONE]; StringBuilder vgroup_class = null; StringBuilder vgroup_name = null; vgroup_id = HDF4API.Vattach(file_id, vgroup_ref, "r"); vgroup_tag = HDF4API.VQuerytag(vgroup_id); vgroup_class = new StringBuilder(HDFConstants.VGCLASSLENMAX); vgroup_name = new StringBuilder(HDFConstants.VGNAMELENMAX); status = HDF4API.Vgetclass(vgroup_id, vgroup_class); if ((status = HDF4API.Vinquire(vgroup_id, out n_entries, vgroup_name)) == HDFConstants.FAIL)//整个文件fullname也会作为一个lone的group,这时vgroup_name是带路径的文件全名fullname { HDF4API.Vdetach(vgroup_id); return(null); } // ignore the Vgroups created by the GR interface if (string.Equals(vgroup_class.ToString(), HDFConstants.GR_NAME, StringComparison.OrdinalIgnoreCase) ||// do not display Vdata named "Attr0.0" string.Equals(vgroup_class.ToString(), HDFConstants.RI_NAME, StringComparison.OrdinalIgnoreCase) || string.Equals(vgroup_class.ToString(), HDFConstants.RIGATTRNAME, StringComparison.OrdinalIgnoreCase) || string.Equals(vgroup_class.ToString(), HDFConstants.RIGATTRCLASS, StringComparison.OrdinalIgnoreCase) || string.Equals(vgroup_class.ToString(), HDFConstants.HDF_CDF, StringComparison.OrdinalIgnoreCase) ) { HDF4API.Vdetach(vgroup_id); return(null); } n_vgroup_attr = HDF4API.Vnattrs(vgroup_id); n_tagrefs = HDF4API.Vntagrefs(vgroup_id); H4Vgroup vgroup = new H4Vgroup(this, vgroup_name.ToString(), "/", pgroup, new long[] { vgroup_tag, vgroup_ref }); vgroup.Vgroup_ref = vgroup_ref; vgroup.Vgroup_id = vgroup_id; vgroup.Vgroup_tag = vgroup_tag; vgroup.Vgroup_name = vgroup_name.ToString(); vgroup.Vgroup_class = vgroup_class.ToString(); vgroup.N_attrs = n_vgroup_attr; vgroup.N_entries = n_entries; vgroup.N_tagrefs = n_tagrefs; if (n_tagrefs == 0) { if ((status = HDF4API.Vdetach(vgroup_id)) == HDFConstants.FAIL) { return(null); } return(vgroup); } int tag = 0; int ref_id = 0; int sds_index = 0; for (int index = 0; index < n_tagrefs; index++) { if ((status = HDF4API.Vgettagref(vgroup_id, index, out tag, out ref_id)) == HDFConstants.FAIL) { //Vdetach( break; } switch (tag) { case HDFConstants.DFTAG_VG: H4Vgroup vg = LoadVgroup(file_id, ref_id, vgroup); Console.WriteLine(vg); vgroup.AddVgroup(vg); break; case HDFConstants.DFTAG_VH: case HDFConstants.DFTAG_VS: { H4Vdata vdata = LoadVdata(file_id, ref_id); Console.WriteLine(vdata); vgroup.AddVdata(vdata); break; } case HDFConstants.DFTAG_NDG: //数据集 case HDFConstants.DFTAG_SDG: case HDFConstants.DFTAG_SD: { try { sds_index = HDF4API.SDreftoindex(_sd_id, ref_id); } catch (Exception ex) { sds_index = HDFConstants.FAIL; } if (sds_index != HDFConstants.FAIL) { //H4SDS sds = getSDS(tag, index, fullPath, true); //pgroup.addToMemberList(sds); //if ((sds != null) && (pnode != null)) //{ // node = new DefaultMutableTreeNode(sds); // pnode.add(node); //} } Console.WriteLine(string.Format("TAG:{0},{1},{2}", tag, ref_id, sds_index)); H4SDS sd = H4SDS.Load(_sd_id, sds_index); vgroup.AddVdata(sd); Console.WriteLine(sd); } break; case HDFConstants.DFTAG_RIG: case HDFConstants.DFTAG_RI: case HDFConstants.DFTAG_RI8: #region //try //{ // index = HDF4API.GRreftoindex(grid, (short) ref); //} //catch (Exception ex) //{ // index = HDFConstants.FAIL; //} //if (index != HDFConstants.FAIL) //{ // H4GRImage gr = getGRImage(tag, index, fullPath, true); // pgroup.addToMemberList(gr); // if ((gr != null) && (pnode != null)) // { // node = new DefaultMutableTreeNode(gr); // pnode.add(node); // } //} #endregion break; default: Console.WriteLine(string.Format("TAG:{0},{1},{2}", tag, ref_id, index)); break; } /* end of switch */ //if (ret != NO_OBJECT) break; } /* end of for loop */ if ((status = HDF4API.Vdetach(vgroup_id)) == HDFConstants.FAIL) { return(null); } return(vgroup); }