c++实现netcdf数据的存储与

转自:http://blog.sina.com.cn/s/blog_687960370101hiks.html

1.首先下载netcdf的c++接口版本,下载地址:https://www.unidata.ucar.edu/downloads/netcdf/netcdf-cxx/index.jsp

2.下载netcdf的C语言版本,下载地址:https://www.unidata.ucar.edu/software/netcdf/docs/winbin.html(注意32位和64位,该版本为exe版,直接安装会生成include,lib和bin几个文件)


使用方法:

1.解压netcdf-cxx的压缩包,会得到cxx、example、m4、man4及若干配置文件;

2.将配置文件中的config.h.in改为config.h;

3.我们一共需要用到config.h、ncvalues.h、netcdfcpp.h、ncvalues.cpp和netcdf.cpp这五个文件;

4.把这五个文件放入你的工程目录下,添加到工程头文件和源文件中,在VS项目属性—VC++目录—包含目录,添加config.h,netcdfcpp.h,ncvalues.h和netcdf.h头文件所在的位置;

5.将netcdf的c语言的头文件netcdf.h,动态链接库netcdf.dll和库文件netcdf.lib添加到VS中,VS中项目属性——链接器——常规——附加库目录,这里添加你的bin文件中的netcdf.dll路径,这里我虽然添加了但运行时报错缺少netcdf.dll文件,可以把它放在工程exe对应文件夹下,VS中项目属性——链接器——输入——附加依赖项,这里添加netcdf.lib库文件,VS中项目属性——VC++目录——包含目录,添加netcdf.h头文件的位置,VS中项目属性——VC++目录——库目录,添加netcdf.lib库文件的位置。

这样便完成了c++下netcdf库的配置。

可以用一下代码进行测试

这是写入数据,如果运行成功,在工程目录里会生成对应nc数据

#include <iostream>
#include <netcdfcpp.h>
using namespace std;
static const int NX = 6;
static const int NY = 12;
static const int NC_ERR = 2;
int main(void)
{
   int dataOut[NX][NY];
   for(int i = 0; i < NX; i++) 
      for(int j = 0; j < NY; j++)
dataOut[i][j] = i * NY + j;
   NcFile dataFile("simple_xy.nc", NcFile::Replace);
   if (!dataFile.is_valid())
   {
      cout << "Couldn't open file!\n";
      return NC_ERR;
   }
   NcDim* xDim = dataFile.add_dim("x", NX);
   NcDim* yDim = dataFile.add_dim("y", NY);
   NcVar *data = dataFile.add_var("data", ncInt, xDim, yDim);
   data->put(&dataOut[0][0], NX, NY);
   cout << "*** SUCCESS writing example file simple_xy.nc!" << endl;
   return 0;
}

读取nc数据,制台窗口会显示0,1,2,3,4,....71数据,则成功

#include <iostream>
#include <netcdfcpp.h>
using namespace std;
static const int NX = 6;
static const int NY = 12;
static const int NC_ERR = 2;
int main(void)
{
   int dataIn[NX][NY]; 
   NcFile dataFile("simple_xy.nc", NcFile::ReadOnly);
   if (!dataFile.is_valid())
   {
      cout << "Couldn't open file!\n";
      return NC_ERR;
   }
   NcVar *data = dataFile.get_var("data");
   data->get(&dataIn[0][0], NX, NY);
   for (int i = 0; i < NX; i++)
      for (int j = 0; j < NY; j++)
 {
 if (dataIn[i][j] != i * NY + j)
 return NC_ERR;
 cout<<dataIn[i][j]<<endl;
 }
   cout << "*** SUCCESS reading example file simple_xy.nc!" << endl;
   system("pause");
   return 0;
}



猜你喜欢

转载自blog.csdn.net/jaggerjack330/article/details/78743180