arcEngine如何读取NetCDF数据?

已邀请:

刘峥 - ArcGIS多面手

赞同来自:

参考代码:
private void Open_NetCDF(string filepath, string filename) 

IWorkspaceName wksname = new WorkspaceNameClass(); 
wksname.WorkspaceFactoryProgID = "esriDataSourcesNetCDF.NetCDFWorkspaceFactory"; 
wksname.PathName = filepath; 

IWorkspaceFactory wsf = new NetCDFWorkspaceFactoryClass(); 
string file = filepath + filename; 
INetCDFWorkspace netws = (INetCDFWorkspace)wsf.OpenFromFile(file, 0); 
IStringArray vararr = netws.GetVariables(); 
for (int i = 0; i < vararr.Count; i++) 

Console.WriteLine(vararr.get_Element(i).ToString()); 

IStringArray dimarr = netws.GetDimensions(); 
IStringArray atrarr = netws.GetAttributeNames(vararr.get_Element(1).ToString()); 
for (int i = 0; i < atrarr.Count; i++) 

Console.WriteLine(atrarr.get_Element(i).ToString()); 


IMDRasterDatasetView mdrasview = new NetCDFRasterDatasetNameClass(); 
mdrasview.Variable = "myVar"; 
mdrasview.XDimension = "Xdim"; 
mdrasview.YDimension = "Ydim"; 

IMDWorkspace mdwksp = netws as IMDWorkspace; 
IRasterDataset rasterds = mdwksp.CreateView("myview", (IMDDatasetView)mdrasview) as IRasterDataset; 

IRasterLayer rl = new RasterLayerClass(); 
rl.CreateFromDataset(rasterds); 
axMapControl1.AddLayer((ILayer)rl); 

蝶泉戏梦

赞同来自:

以上代码确实可以实现读取CDF数据 但只能读取第一个小时的数据 我想读出特定(如第5小时)小时的数据。但是我写的代码运行时报错 (加粗部分) 请高手指点。 
 IWorkspaceFactory fc = (IWorkspaceFactory)new NetCDFWorkspaceFactory();
            INetCDFWorkspace netCDFWorkspace = fc.OpenFromFile(@"G:\3.24\cmaq_domain1_surface_20151029.MapUni.nc", 0) as INetCDFWorkspace;
            IStringArray variables = netCDFWorkspace.GetVariables();
            for (int i = 0; i < variables.Count; i )
            {
                Console.WriteLine(variables.get_Element(i));
            }
  
            IMDRasterDatasetView rasterView = new NetCDFRasterDatasetNameClass();
            rasterView.XDimension = "ROW";
            rasterView.YDimension = "COL";
            rasterView.Variable = "SO2_map";

            IMDDatasetView datasetView = rasterView as IMDDatasetView;
            datasetView.SelectDimensionByValue("HOUR", 5); 

            IMDWorkspace kk = netCDFWorkspace as IMDWorkspace;
            IDataset result = kk.CreateView("sdf", datasetView );      
            IRasterDataset rasterDataset = result as IRasterDataset;
            IRasterLayer rasterLayer = new RasterLayer();          
            rasterLayer.CreateFromDataset(rasterDataset);
            axMapControl1.AddLayer(rasterLayer as ILayer);
            axMapControl1.Refresh();

lorice

赞同来自:

可以看一下arcgis帮助中关于多维工具箱的介绍,了解一下各个参数的含义,通过调相应的gp工具来读取

lorice

赞同来自:

你的"HOUR"是怎么来的,是不是IMDRasterDatasetView.BandDimension没设
 

蝶泉戏梦

赞同来自:

"HOUR"是个维度 我的文件中有 行列时间3个维度 BandDimension是波段维度 是个可选值 在GP工具中时不需要设置的 。需要设置的是维度值 就是这个IMDDatasetView接口不知道怎么用。

要回复问题请先登录注册