【问题标题】:VTK - How to use vtkNetCDFCFReader to read an array or variable array at specific time frameVTK - 如何使用 vtkNetCDFCFReader 在特定时间范围内读取数组或变量数组
【发布时间】:2017-04-08 17:38:44
【问题描述】:

我试图从 netCDF 文件 (.nc) 加载特定时间范围内的数组(例如,如果它有 50 个帧或时间单位,则获取对应于第二个时间范围的数组)。我目前正在使用 vtkNetCDFCFReader 并从第一个时间框架中获取数据数组“vwnd”,如下所示:

vtkSmartPointer<vtkNetCDFCFReader> reader = vtkSmartPointer<vtkNetCDFCFReader>::New();
reader->SetFileName(path.c_str());
reader->UpdateMetaData();

vtkSmartPointer<vtkStructuredGridGeometryFilter> geometryFilter = vtkSmartPointer<vtkStructuredGridGeometryFilter>::New();
geometryFilter->SetInputConnection(reader->GetOutputPort());
geometryFilter->Update();

vtkSmartPointer<vtkPolyData> ncPolydata = vtkSmartPointer<vtkPolyData>::New();
ncPolydata = geometryFilter->GetOutput();
vtkSmartPointer<vtkDataArray> dataArray = ncPolydata->GetCellData()->GetArray("vwnd");

变量数组有:lat、lon、time、vwnd(vwnd 有维度 (lat,lon))。我也有兴趣获取纬度和经度的数组。任何帮助将不胜感激。

提前致谢

【问题讨论】:

    标签: vtk netcdf


    【解决方案1】:

    由于lat/lon的维度与vwnd不同,需要2个vtknetCDFreader来读取不同维度的数据。只需记住在创建阅读器后设置维度即可。

    例如在 C++ 中:

    vtknetCDFReader* reader = vtknetCDFReader::New();
    reader->SetFileName(fileName.c_str());
    reader->UpdateMetaData();
    //here you specify the dimension of the reader
    reader->SetDimension(dim);
    reader->SetVariableArrayStatus("lat",1)
    reader->SetVariableArrayStatus("lon",1)
    reader->Update();
    

    如果你操作正确,你可以读取任何数组并将其存储到 vtkDataArray。

    如果您想在第二个时间步中读取 vwnd 数据,只需跳过第一个 lat*lon 值即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2013-02-20
      • 2013-06-14
      • 2023-03-03
      相关资源
      最近更新 更多