• c#中使用NetCDF存储二维数据的读写操作简单应用


      1 public static class NetCDF
      2     {
      3         [DllImport("netcdf4.dll")]
      4         public static extern int nc_put_att_uchar(int ncid, int varid, string name, NcType xtype, int len, byte[] op);
      5         [DllImport("netcdf4.dll")]
      6         public static extern int nc_get_att_uchar(int ncid, int varid, string name, byte[] op);
      7 
      8         [DllImport("netcdf4.dll")]
      9         public static extern int nc_get_var_uchar(int ncid, int varid, byte[] ip);
     10         [DllImport("netcdf4.dll")]
     11         public static extern int nc_get_var_text(int ncid, int varid, StringBuilder ip);
     12       
     13 
     14         [DllImport("netcdf4.dll")]
     15         public static extern int nc_open(string path, CreateMode mode, out int ncidp);
     16         [DllImport("netcdf4.dll")]
     17         public static extern int nc_create(string path, CreateMode mode, out int ncidp);
     18         [DllImport("netcdf4.dll")]
     19         public static extern int nc_close(int ncidp);
     20         [DllImport("netcdf4.dll")]
     21         public static extern int nc_sync(int ncid);
     22         [DllImport("netcdf4.dll")]
     23         public static extern int nc_enddef(int ncid);
     24         [DllImport("netcdf4.dll")]
     25         public static extern int nc_redef(int ncid);
     26         [DllImport("netcdf4.dll")]
     27         public static extern string nc_strerror(int ncerror);
     28 
     29         [DllImport("netcdf4.dll")]
     30         public static extern int nc_inq(int ncid, out int ndims, out int nvars, out int ngatts, out int unlimdimid);
     31 
     32         [DllImport("netcdf4.dll")]
     33         public static extern int nc_def_var(int ncid, string name, NcType xtype, int ndims, int[] dimids, out int varidp);
     34         [DllImport("netcdf4.dll")]
     35         public static extern int nc_inq_var(int ncid, int varid, StringBuilder name, out NcType type, out int ndims, int[] dimids, out int natts);
     36         [DllImport("netcdf4.dll")]
     37         public static extern int nc_inq_varids(int ncid, out int nvars, int[] varids);
     38         [DllImport("netcdf4.dll")]
     39         public static extern int nc_inq_vartype(int ncid, int varid, out NcType xtypep);
     40         [DllImport("netcdf4.dll")]
     41         public static extern int nc_inq_varnatts(int ncid, int varid, out int nattsp);
     42         [DllImport("netcdf4.dll")]
     43         public static extern int nc_inq_varid(int ncid, string name, out int varidp);
     44 
     45         [DllImport("netcdf4.dll")]
     46         public static extern int nc_inq_ndims(int ncid, out int ndims);
     47         [DllImport("netcdf4.dll")]
     48         public static extern int nc_inq_nvars(int ncid, out int nvars);
     49         [DllImport("netcdf4.dll")]
     50         public static extern int nc_inq_varname(int ncid, int varid, StringBuilder name);
     51         [DllImport("netcdf4.dll")]
     52         public static extern int nc_inq_varndims(int ncid, int varid, out int ndims);
     53         [DllImport("netcdf4.dll")]
     54         public static extern int nc_inq_vardimid(int ncid, int varid, int[] dimids);
     55         [DllImport("netcdf4.dll")]
     56         public static extern int nc_inq_var_fill(int ncid, int varid, out int no_fill, out object fill_value);
     57 
     58 
     59         [DllImport("netcdf4.dll")]
     60         public static extern int nc_inq_natts(int ncid, out int ngatts);
     61         [DllImport("netcdf4.dll")]
     62         public static extern int nc_inq_unlimdim(int ncid, out int unlimdimid);
     63         [DllImport("netcdf4.dll")]
     64         public static extern int nc_inq_format(int ncid, out int format);
     65 
     66         [DllImport("netcdf4.dll")]
     67         public static extern int nc_inq_attname(int ncid, int varid, int attnum, StringBuilder name);
     68         [DllImport("netcdf4.dll")]
     69         public static extern int nc_inq_att(int ncid, int varid, string name, out NcType type, out int length);
     70         [DllImport("netcdf4.dll")]
     71         public static extern int nc_get_att_text(int ncid, int varid, string name, StringBuilder value);
     72         [DllImport("netcdf4.dll")]
     73         public static extern int nc_get_att_schar(int ncid, int varid, string name, sbyte[] data);
     74         [DllImport("netcdf4.dll")]
     75         public static extern int nc_get_att_short(int ncid, int varid, string name, short[] data);
     76         [DllImport("netcdf4.dll")]
     77         public static extern int nc_get_att_int(int ncid, int varid, string name, int[] data);
     78         [DllImport("netcdf4.dll")]
     79         public static extern int nc_get_att_float(int ncid, int varid, string name, float[] data);
     80         [DllImport("netcdf4.dll")]
     81         public static extern int nc_get_att_double(int ncid, int varid, string name, double[] data);
     82         [DllImport("netcdf4.dll")]
     83         public static extern int nc_get_att_long(int ncid, int varid, string name, long[] data);
     84         [DllImport("netcdf4.dll")]
     85         public static extern int nc_get_att_longlong(int ncid, int varid, string name, long[] data);
     86 
     87         [DllImport("netcdf4.dll")]
     88         public static extern int nc_put_att_text(int ncid, int varid, string name, int len, string tp);
     89         [DllImport("netcdf4.dll")]
     90         public static extern int nc_put_att_double(int ncid, int varid, string name, NcType type, int len, double[] tp);
     91         [DllImport("netcdf4.dll")]
     92         public static extern int nc_put_att_int(int ncid, int varid, string name, NcType type, int len, int[] tp);
     93         [DllImport("netcdf4.dll")]
     94         public static extern int nc_put_att_short(int ncid, int varid, string name, NcType type, int len, short[] tp);
     95         [DllImport("netcdf4.dll")]
     96         public static extern int nc_put_att_float(int ncid, int varid, string name, NcType type, int len, float[] tp);
     97         [DllImport("netcdf4.dll")]
     98         public static extern int nc_put_att_byte(int ncid, int varid, string name, NcType type, int len, sbyte[] tp);
     99         [DllImport("netcdf4.dll")]
    100         public static extern int nc_put_att_long(int ncid, int varid, string name, NcType type, int len, long[] tp);
    101         [DllImport("netcdf4.dll")]
    102         public static extern int nc_put_att_longlong(int ncid, int varid, string name, NcType type, int len, long[] tp);
    103 
    104         [DllImport("netcdf4.dll")]
    105         public static extern int nc_def_dim(int ncid, string name, int len, out int dimidp);
    106         [DllImport("netcdf4.dll")]
    107         public static extern int nc_inq_dim(int ncid, int dimid, StringBuilder name, out int length);
    108         [DllImport("netcdf4.dll")]
    109         public static extern int nc_inq_dimname(int ncid, int dimid, StringBuilder name);
    110         [DllImport("netcdf4.dll")]
    111         public static extern int nc_inq_dimid(int ncid, string name, out int dimid);
    112         [DllImport("netcdf4.dll")]
    113         public static extern int nc_inq_dimlen(int ncid, int dimid, out int length);
    114 
    115 
    116         [DllImport("netcdf4.dll")]
    117         public static extern int nc_get_var_text(int ncid, int varid, byte[] data);
    118         [DllImport("netcdf4.dll")]
    119         public static extern int nc_get_var_schar(int ncid, int varid, sbyte[] data);
    120         [DllImport("netcdf4.dll")]
    121         public static extern int nc_get_var_short(int ncid, int varid, short[] data);
    122         [DllImport("netcdf4.dll")]
    123         public static extern int nc_get_var_int(int ncid, int varid, int[] data);
    124         [DllImport("netcdf4.dll")]
    125         public static extern int nc_get_var_long(int ncid, int varid, long[] data);
    126         [DllImport("netcdf4.dll")]
    127         public static extern int nc_get_var_float(int ncid, int varid, float[,] data);
    128         [DllImport("netcdf4.dll")]
    129         public static extern int nc_get_var_double(int ncid, int varid, double[] data);
    130 
    131         [DllImport("netcdf4.dll")]
    132         public static extern int nc_put_var_ubyte(int ncid, int varid, byte[,] data);
    133         [DllImport("netcdf4.dll")]
    134         public static extern int nc_put_var_int(int ncid, int varid, int[,] data);
    135         [DllImport("netcdf4.dll")]
    136         public static extern int nc_put_var_text(int ncid, int varid, string op);
    137         [DllImport("netcdf4.dll")]
    138         public static extern int nc_put_var_uchar(int ncid, int varid, out byte[] op);
    139         [DllImport("netcdf4.dll")]
    140         public static extern int nc_put_var_float(int ncid, int varid, float[,] data);
    141         [DllImport("netcdf4.dll")]
    142         public static extern int nc_put_var_long(int ncid, int varid, long[] data);
    143 
    144 
    145         [DllImport("netcdf4.dll")]
    146         public static extern int nc_put_vara_double(int ncid, int varid, int[] start, int[] count, double[] dp);
    147         [DllImport("netcdf4.dll")]
    148         public static extern int nc_put_vara_float(int ncid, int varid, int[] start, int[] count, float[] fp);
    149         [DllImport("netcdf4.dll")]
    150         public static extern int nc_put_vara_short(int ncid, int varid, int[] start, int[] count, short[] sp);
    151         [DllImport("netcdf4.dll")]
    152         public static extern int nc_put_vara_int(int ncid, int varid, int[] start, int[] count, int[] ip);
    153         [DllImport("netcdf4.dll")]
    154         public static extern int nc_put_vara_long(int ncid, int varid, int[] start, int[] count, long[] lp);
    155         [DllImport("netcdf4.dll")]
    156         public static extern int nc_put_vara_ubyte(int ncid, int varid, int[] start, int[] count, byte[] bp);
    157         [DllImport("netcdf4.dll")]
    158         public static extern int nc_put_vara_schar(int ncid, int varid, int[] start, int[] count, sbyte[] cp);
    159         [DllImport("netcdf4.dll")]
    160         public static extern int nc_put_vara_string(int ncid, int varid, int[] start, int[] count, string[] sp);
    161 
    162 
    163         [DllImport("netcdf4.dll")]
    164         public static extern int nc_get_vara_text(int ncid, int varid, int[] start, int[] count, byte[] data);
    165         [DllImport("netcdf4.dll")]
    166         public static extern int nc_get_vara_schar(int ncid, int varid, int[] start, int[] count, sbyte[] data);
    167         [DllImport("netcdf4.dll")]
    168         public static extern int nc_get_vara_short(int ncid, int varid, int[] start, int[] count, short[] data);
    169         [DllImport("netcdf4.dll")]
    170         public static extern int nc_get_vara_ubyte(int ncid, int varid, int[] start, int[] count, byte[] data);
    171         [DllImport("netcdf4.dll")]
    172         public static extern int nc_get_vara_long(int ncid, int varid, int[] start, int[] count, long[] data);
    173         [DllImport("netcdf4.dll")]
    174         public static extern int nc_get_vara_int(int ncid, int varid, int[] start, int[] count, int[] data);
    175         [DllImport("netcdf4.dll")]
    176         public static extern int nc_get_vara_float(int ncid, int varid, int[] start, int[] count, float[] data);
    177         [DllImport("netcdf4.dll")]
    178         public static extern int nc_get_vara_double(int ncid, int varid, int[] start, int[] count, double[] data);
    179         [DllImport("netcdf4.dll")]
    180         public static extern int nc_get_vara_string(int ncid, int varid, int[] start, int[] count, string[] data);
    181    
    182         ///<summary>
    183         ///'size' argument to ncdimdef for an unlimited dimension
    184         ///</summary>
    185         public const int NC_UNLIMITED = 0;
    186 
    187         ///<summary>
    188         ///attribute id to put/get a global attribute
    189         ///</summary>
    190         public const int NC_GLOBAL = -1;
    191 
    192         ///<summary>
    193         ///The netcdf external data types
    194         ///</summary>
    195         public enum NcType : int
    196         {
    197             ///<summary>signed 1 byte intege</summary>
    198             NC_BYTE = 1,
    199             ///<summary>ISO/ASCII character</summary>
    200             NC_CHAR = 2,
    201             ///<summary>signed 2 byte integer</summary>
    202             NC_SHORT = 3,
    203             ///<summary>signed 4 byte integer</summary>
    204             NC_INT = 4,
    205             ///<summary>single precision floating point number</summary>
    206             NC_FLOAT = 5,
    207             ///<summary>double precision floating point number</summary>
    208             NC_DOUBLE = 6,
    209             ///<summary>signed 8-byte int</summary>
    210             NC_INT64 = 10,
    211             ///<summary>string</summary>
    212             NC_STRING = 12
    213         }
    214 
    215         public static Type GetCLRType(NcType ncType)
    216         {
    217             switch (ncType)
    218             {
    219                 case NcType.NC_BYTE:
    220                 return typeof(byte);
    221                 case NcType.NC_CHAR:
    222                 return typeof(sbyte);
    223                 case NcType.NC_SHORT:
    224                 return typeof(short);
    225                 case NcType.NC_INT:
    226                 return typeof(int);
    227                 case NcType.NC_INT64:
    228                 return typeof(long);
    229                 case NcType.NC_FLOAT:
    230                 return typeof(float);
    231                 case NcType.NC_DOUBLE:
    232                 return typeof(double);
    233                 case NcType.NC_STRING:
    234                 return typeof(string);
    235                 default:
    236                 throw new ApplicationException("Unknown nc type");
    237             }
    238         }
    239 
    240         public static NcType GetNcType(Type type)
    241         {
    242             switch (Type.GetTypeCode(type))
    243             {
    244                 case TypeCode.Double:
    245                 return NcType.NC_DOUBLE;
    246 
    247                 case TypeCode.Single:
    248                 return NcType.NC_FLOAT;
    249 
    250                 case TypeCode.Int64:
    251                 return NcType.NC_INT64;
    252 
    253                 case TypeCode.Int32:
    254                 return NcType.NC_INT;
    255 
    256                 case TypeCode.Int16:
    257                 return NcType.NC_SHORT;
    258 
    259                 case TypeCode.Byte:
    260                 return NcType.NC_BYTE;
    261 
    262                 case TypeCode.SByte:
    263                 return NcType.NC_CHAR;
    264 
    265                 case TypeCode.String:
    266                 return NcType.NC_STRING;
    267 
    268                 case TypeCode.DateTime:
    269                 return NcType.NC_INT64;
    270 
    271 
    272                 default:
    273                 throw new NotSupportedException("Not supported type of data.");
    274             }
    275         }
    276 
    277         public enum CreateMode : int
    278         {
    279             NC_NOWRITE = 0,
    280             ///<summary>read & write</summary>
    281             NC_WRITE = 0x0001,
    282             NC_CLOBBER = 0,
    283             ///<summary>Don't destroy existing file on create</summary>
    284             NC_NOCLOBBER = 0x0004,
    285             ///<summary>argument to ncsetfill to clear NC_NOFILL</summary>
    286             NC_FILL = 0,
    287             ///<summary>Don't fill data section an records</summary>
    288             NC_NOFILL = 0x0100,
    289             ///<summary>Use locking if available</summary>
    290             NC_LOCK = 0x0400,
    291             ///<summary>Share updates, limit cacheing</summary>
    292             NC_SHARE = 0x0800,
    293             NC_64BIT_OFFSET = 0x0200,
    294             ///<summary>Enforce strict netcdf-3 rules</summary>
    295             NC_CLASSIC = 0x0100,
    296             ///<summary>causes netCDF to create a HDF5/NetCDF-4 file</summary>
    297             NC_NETCDF4 = 0x1000
    298         }
    299 
    300         public enum ResultCode : int
    301         {
    302             ///<summary>No Error</summary>
    303             NC_NOERR = 0,
    304             ///<summary>Invalid dimension id or name</summary>
    305             NC_EBADDIM = -46,
    306             ///<summary>Attribute not found</summary>
    307             NC_ENOTATT = -43,
    308         }
    309 
    310         ///<summary>
    311         ///    Default fill values, used unless _FillValue attribute is set.
    312         ///These values are stuffed into newly allocated space as appropriate.
    313         ///The hope is that one might use these to notice that a particular datum
    314         ///has not been set.
    315         ///</summary>
    316         public static class FillValues
    317         {
    318             public const byte NC_FILL_BYTE = 255;
    319             public const char NC_FILL_CHAR = (char)0;
    320             public const short NC_FILL_SHORT = -32767;
    321             public const int NC_FILL_INT = -2147483647;
    322             public const float NC_FILL_FLOAT = 9.96921E+36f;    /* near 15 * 2^119 */
    323             public const double NC_FILL_DOUBLE = 9.969209968386869E+36;
    324         }
    325 
    326 
    327         ///<summary>These maximums are enforced by the interface, to facilitate writing
    328         ///applications and utilities.  However, nothing is statically allocated to
    329         ///these sizes internally.</summary>
    330         public enum Limits
    331         {
    332             ///<summary>max dimensions per file </summary>
    333             NC_MAX_DIMS = 10,
    334             ///<summary>max global or per variable attributes </summary>
    335             NC_MAX_ATTRS = 2000,
    336             ///<summary>max variables per file</summary>
    337             NC_MAX_VARS = 2000,
    338             ///<summary>max length of a name </summary>
    339             NC_MAX_NAME = 128,
    340             ///<summary>max per variable dimensions </summary>
    341             NC_MAX_VAR_DIMS = 10
    342         }
    343     }
    View Code
      1 /// <summary>
      2     /// 二维网格数据文件创建、读、写
      3     /// </summary>
      4     class TwoDimDB : IDataBase
      5     {
      6         public TwoDimDB(string filename)
      7         {
      8             dbfile = filename;
      9         }
     10 
     11         public override bool Create(string[] varname, string xdimname, string ydimname, long[] xdim, long[] ydim)
     12         {
     13             try
     14             {
     15                 int ndims = 2;
     16                 int ncid, res, varid;
     17                 int x_dimid, y_dimid;
     18                 int[] dimids = new int[ndims];
     19 
     20                 //创建文件
     21                 res = NetCDF.nc_create(dbfile, NetCDF.CreateMode.NC_NETCDF4, out ncid);
     22                 if (res != 0) return false;
     23 
     24                 int NX = xdim.Length;
     25                 int NY = ydim.Length;
     26                 int[,] datas = new int[NX, NY];
     27 
     28                 //定义维度
     29                 res = NetCDF.nc_def_dim(ncid, xdimname, NX, out x_dimid);
     30                 if (res != 0) return false;
     31                 res = NetCDF.nc_def_dim(ncid, ydimname, NY, out y_dimid);
     32                 if (res != 0) return false;
     33 
     34                 res = NetCDF.nc_put_att_longlong(ncid, NetCDF.NC_GLOBAL, xdimname, NetCDF.NcType.NC_INT64, xdim.Length, xdim);
     35                 if (res != 0) return false;
     36                 res = NetCDF.nc_put_att_longlong(ncid, NetCDF.NC_GLOBAL, ydimname, NetCDF.NcType.NC_INT64, ydim.Length, ydim);
     37                 if (res != 0) return false;
     38 
     39                 dimids[0] = x_dimid;
     40                 dimids[1] = y_dimid;
     41 
     42                 //定义变量
     43                 if (varname != null)
     44                 {
     45                     foreach (var vn in varname)
     46                     {
     47                         res = NetCDF.nc_def_var(ncid, vn, NetCDF.NcType.NC_FLOAT, 2, dimids, out varid);
     48                         if (res != 0) continue;
     49 
     50                         res = NetCDF.nc_enddef(ncid);
     51                         if (res != 0) continue;
     52 
     53                         NetCDF.nc_put_var_int(ncid, varid, datas);
     54                         if (res != 0) continue;
     55                     }
     56                 }
     57 
     58                 //关闭文件
     59                 res = NetCDF.nc_close(ncid);
     60                 if (res == 0) return true;
     61             }
     62             catch (Exception ex)
     63             {
     64 
     65             }
     66             return false;
     67         }
     68 
     69         public override bool Write(string[] varName, string dimName, long dimValue, int[][] value, bool isXdim = false)
     70         {
     71             try
     72             {
     73                 int ncid, res, varid;
     74 
     75                 //创建文件
     76                 res = NetCDF.nc_open(dbfile, NetCDF.CreateMode.NC_WRITE, out ncid);
     77                 if (res != 0) return false;
     78 
     79                 #region GetDimIndex
     80 
     81                 int dimIdx = 0;
     82                 NetCDF.NcType dimXTtype;
     83                 int dimAttLen = 0;
     84 
     85                 res = NetCDF.nc_inq_att(ncid, NetCDF.NC_GLOBAL, dimName, out dimXTtype, out dimAttLen);
     86                 if (res != 0) return false;
     87                 long[] xdimValue = new long[dimAttLen];
     88                 res = NetCDF.nc_get_att_longlong(ncid, NetCDF.NC_GLOBAL, dimName, xdimValue);
     89                 dimIdx = Array.IndexOf(xdimValue, dimValue);
     90                 if (dimIdx == -1) dimIdx = 0;
     91 
     92                 #endregion
     93 
     94                 int xdimBeginIndex = isXdim ? dimIdx : 0;
     95                 int ydimBeginIndex = !isXdim ? dimIdx : 0;
     96 
     97                 int xdimNumber = !isXdim ? value.Length : 1;
     98                 int ydimNumber = isXdim ? value.Length : 1;
     99 
    100                 //定义变量    
    101                 if (varName != null)
    102                 {
    103                     for (int i = 0; i < varName.Length; i++)
    104                     {
    105                         res = NetCDF.nc_inq_varid(ncid, varName[i], out varid);
    106                         if (res != 0) continue;
    107 
    108                         var origin = new int[] { xdimBeginIndex, ydimBeginIndex };//第一维的1开始,第二维从0开始
    109                         var size = new int[] { xdimNumber, ydimNumber };//数量分别为1,2
    110 
    111                         NetCDF.nc_put_vara_int(ncid, varid, origin, size, value[i]);
    112                         if (res != 0) return false;
    113                     }
    114                 }
    115 
    116                 //关闭文件
    117                 res = NetCDF.nc_close(ncid);
    118                 if (res == 0) return true;
    119             }
    120             catch (Exception ex)
    121             {
    122 
    123             }
    124             return false;
    125         }
    126 
    127         public override int[][] Read(string[] varname, string xdimname, string ydimname, long? xdimValue = null, long? ydimValue = null)
    128         {
    129             long[] xDimValue;
    130             long[] yDimValue;
    131             Dictionary<long, int[][]> dic = new Dictionary<long, int[][]>();
    132             try
    133             {
    134                 int ndims = 2;
    135                 int ncid, res, varid;
    136                 int[] dimids = new int[ndims];
    137 
    138                 //打开文件
    139                 res = NetCDF.nc_open(dbfile, NetCDF.CreateMode.NC_NOWRITE, out ncid);
    140                 if (res != 0) return null;
    141 
    142                 #region XDimIndex
    143 
    144                 int xDimIdx = 0;
    145                 NetCDF.NcType xDimxtype;
    146                 int xDimAttlen = 0;
    147 
    148                 res = NetCDF.nc_inq_att(ncid, NetCDF.NC_GLOBAL, xdimname, out xDimxtype, out xDimAttlen);
    149                 if (res != 0) return null;
    150                 xDimValue = new long[xDimAttlen];
    151 
    152                 res = NetCDF.nc_get_att_longlong(ncid, NetCDF.NC_GLOBAL, xdimname, xDimValue);
    153                 if (xdimValue != null)
    154                 {
    155                     xDimIdx = Array.IndexOf(xDimValue, xdimValue);
    156                     if (xDimIdx == -1) xDimIdx = 0;
    157                 }
    158                 #endregion
    159 
    160                 #region YDimIndex
    161 
    162                 int yDimIdx = 0;
    163                 NetCDF.NcType yDimxtype;
    164                 int yDimAttlen = 0;
    165 
    166                 res = NetCDF.nc_inq_att(ncid, NetCDF.NC_GLOBAL, ydimname, out yDimxtype, out yDimAttlen);
    167                 if (res != 0) return null;
    168                 yDimValue = new long[yDimAttlen];
    169                 res = NetCDF.nc_get_att_longlong(ncid, NetCDF.NC_GLOBAL, ydimname, yDimValue);
    170                 if (ydimValue != null)
    171                 {
    172                     yDimIdx = Array.IndexOf(yDimValue, ydimValue);
    173                     if (yDimIdx == -1) yDimIdx = 0;
    174                 }
    175 
    176                 #endregion
    177 
    178                 int NX = xDimValue.Length;
    179                 int NY = yDimValue.Length;
    180 
    181                 int xdimCount = NX - xDimIdx;
    182                 int ydimCount = NY - yDimIdx;
    183                 int resCount = xdimCount * ydimCount;
    184                 if (xdimValue == null)
    185                 {
    186                     resCount = xdimCount;
    187                     xdimCount = NX;
    188                     ydimCount = 1;
    189                 }
    190                 if (ydimValue == null)
    191                 {
    192                     resCount = ydimCount;
    193                     xdimCount = 1;
    194                     ydimCount = NY - yDimIdx;
    195                 }
    196 
    197                 int[] origin = new int[] { xDimIdx, yDimIdx };//第一维的1开始,第二维从0开始
    198                 int[] size = new int[] { xdimCount, ydimCount };//数量分别为1,2
    199 
    200                 int[][] result = new int[varname.Length + 1][];
    201                
    202                 for (int i = 0; i < varname.Length; i++)
    203                 {
    204                     res = NetCDF.nc_inq_varid(ncid, varname[i], out varid);
    205                     if (res != 0) continue;
    206 
    207                     result[i+1] = new int[resCount];
    208                     NetCDF.nc_get_vara_int(ncid, varid, origin, size, result[i + 1]);
    209                     if (res != 0) continue;
    210                 }
    211                 
    212 
    213                 res = NetCDF.nc_close(ncid);
    214                 if (res == 0) return result;
    215             }
    216             catch (Exception ex)
    217             {
    218 
    219             }
    220             finally
    221             {
    222                 xDimValue = null;
    223                 yDimValue = null;
    224                 GC.Collect();
    225             }
    226             return null;
    227         }
    228     }
  • 相关阅读:
    单例模式(Singleton)在SQLite操作中的应用
    android中自定義progress
    eclipse中高亮显示相同的变量
    android定时滚动
    Android GridView中设置了Button以后就不能响应OnItemClick()
    java中转换文件大小
    android 的代码仓库
    Eclipse中代码提示功能补全
    poj 3635 Full Tank? (优先队列 + bfs)
    hdu 4279 Number (规律题 2012 ACM/ICPC Asia Regional Tianjin Online )
  • 原文地址:https://www.cnblogs.com/94cool/p/3171101.html
Copyright © 2020-2023  润新知