zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/94cool/p/3171101.html
Copyright © 2011-2022 走看看