110,499
社区成员
发帖
与我相关
我的任务
分享
public static partial class NetCDF
{
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_open(string path, CreateMode mode, out int ncidp);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_create(string path, CreateMode mode, out int ncidp);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_close(int ncidp);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_sync(int ncid);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_enddef(int ncid);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_redef(int ncid);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern string nc_strerror(int ncerror);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq(int ncid, out int ndims, out int nvars, out int ngatts, out int unlimdimid);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_def_var(int ncid, string name, NcType xtype, int ndims, int[] dimids, out int varidp);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_var(int ncid, int varid, StringBuilder name, out NcType type, out int ndims, int[] dimids, out int natts);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varids(int ncid, out int nvars, int[] varids);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_vartype(int ncid, int varid, out NcType xtypep);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varnatts(int ncid, int varid, out int nattsp);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varid(int ncid, string name, out int varidp);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_ndims(int ncid, out int ndims);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_nvars(int ncid, out int nvars);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varname(int ncid, int varid, StringBuilder name);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varndims(int ncid, int varid, out int ndims);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_vardimid(int ncid, int varid, int[] dimids);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_var_fill(int ncid, int varid, out int no_fill, out object fill_value);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_natts(int ncid, out int ngatts);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_unlimdim(int ncid, out int unlimdimid);
[DllImport("netcdf4.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_format(int ncid, out int format);
}
public bool ConvertNetCDF_UV(string input_path, string output_path)
{
int re = NetCDF.nc_open(input_path, NetCDF.CreateMode.NC_NOWRITE, out i);
NetCDF.nc_inq_varid(i, "u", out varid); //获取输入列的序列
NetCDF.nc_inq_var(i, varid, name, out type, out ndims, dimids, out natts); //用来查询列的属性,这里主要拿来看维度的,其他的用不上
float[, ,] tempdata_u = new float[depth_length, lat_length, lon_length];
NetCDF.nc_get_var_float(i, varid, tempdata_u); //获取数据没有问题
float[, ,] tempdata_v = new float[depth_length, lat_length, lon_length];
NetCDF.nc_inq_varid(i, "v", out varid); //获取输入列的序列
NetCDF.nc_get_var_float(i, varid, tempdata_v); //获取数据
NetCDF.nc_close(i);
for (int j = 0; j < depth_length; j++)
{
float[,] values_float = new float[lat_length, lon_length];
for (int k = 0; k < lat_length; k++)
{
for (int l = 0; l < lon_length; l++)
{
float u = tempdata_u[j, k, l]; //取数字没有问题
float v = tempdata_v[j, k, l]; //取数字没有问题
string val = Math.Sqrt(u * u + v * v).ToString(); //在这里就会报错,而且不是每次都报错,执行到三维数组第6次开始就可能报错,而且每次报错的索引还都不一样。
}
}
}
}
bool FireSDK_GetDeviceList(int loginid, DEVICE ** devinfo, int * devcount, CHANNEL ** chinfo, int * chcount);
struct devinfo
{
public string devID;
public string devName;
//……
}
//调用
devinfo di = new devinfo();
di.devID = "KD0000299";
di.devName="myDevice";
GCHandle C_di = GCHandle.Alloc(di, GCHandleType.Pinned);
FireSDK_GetDeviceList(loginid,out C_di.AddrOfPinnedObject(),...);
C_di.Free();