ArcEngine开发,读取NC文件,使用SelectDimensionByValue,报错:对 COM 组件的调用返回了错误 HRESULT E_FAIL
C#开发,读取NC文件,因为NC文件里有维度,所以需要使用SelectDimensionByValue,指定维度列,读取不同层深的数据,但是调用的时候一直报错,对 COM 组件的调用返回了错误 HRESULT E_FAIL。
depth就是我的维度,有30多层。
lincense选的是 Arcgis Advanced,也勾选了所有的Extensions。Arcgis版本是10.2 。
贴一下代码:
private void CreateRaster_NC(string filedName, string filedX, string filedY, string pPath, string filedZ, string zVlaue)
{
IMap pMap = this.axMapControl1.Map;
IInterpolationOp3 pInterpolationOp = new RasterInterpolationOpClass(); //IInterpolationOp目前已被IInterpolationOp3所取代
//定义工作空间
IWorkspaceFactory pWorkspaceFactory = new NetCDFWorkspaceFactory();
string pFolder = System.IO.Path.GetDirectoryName(pPath);
string pFileName = System.IO.Path.GetFileName(pPath);
IWorkspaceName wksname = new WorkspaceNameClass();
wksname.WorkspaceFactoryProgID = "esriDataSourcesNetCDF.NetCDFWorkspaceFactory";
wksname.PathName = pFolder;
IWorkspaceFactory wsf = new NetCDFWorkspaceFactoryClass();
INetCDFWorkspace netws = (INetCDFWorkspace)wsf.OpenFromFile(pPath, 0);
IStringArray vararr = netws.GetVariables();
IMDRasterDatasetView mdrasview = new NetCDFRasterDatasetNameClass();
mdrasview.Variable = filedName;
mdrasview.XDimension = filedX;
mdrasview.YDimension = filedY;
IMDDatasetView datasetView = mdrasview as IMDDatasetView;
IMDWorkspace mdwksp = netws as IMDWorkspace;
IRasterDataset rasterds = mdwksp.CreateView("myview", datasetView) as IRasterDataset;
if (!string.IsNullOrWhiteSpace(filedZ))
{
datasetView.SelectDimensionByValue(filedZ, Convert.ToDouble(zVlaue)); //可以设置维度
}
IRasterLayer rl = new RasterLayerClass();
rl.CreateFromDataset(rasterds);
this.SetStretchColorRampRenderer(rl);
axMapControl1.AddLayer((ILayer)rl);
}
depth就是我的维度,有30多层。
lincense选的是 Arcgis Advanced,也勾选了所有的Extensions。Arcgis版本是10.2 。
贴一下代码:
private void CreateRaster_NC(string filedName, string filedX, string filedY, string pPath, string filedZ, string zVlaue)
{
IMap pMap = this.axMapControl1.Map;
IInterpolationOp3 pInterpolationOp = new RasterInterpolationOpClass(); //IInterpolationOp目前已被IInterpolationOp3所取代
//定义工作空间
IWorkspaceFactory pWorkspaceFactory = new NetCDFWorkspaceFactory();
string pFolder = System.IO.Path.GetDirectoryName(pPath);
string pFileName = System.IO.Path.GetFileName(pPath);
IWorkspaceName wksname = new WorkspaceNameClass();
wksname.WorkspaceFactoryProgID = "esriDataSourcesNetCDF.NetCDFWorkspaceFactory";
wksname.PathName = pFolder;
IWorkspaceFactory wsf = new NetCDFWorkspaceFactoryClass();
INetCDFWorkspace netws = (INetCDFWorkspace)wsf.OpenFromFile(pPath, 0);
IStringArray vararr = netws.GetVariables();
IMDRasterDatasetView mdrasview = new NetCDFRasterDatasetNameClass();
mdrasview.Variable = filedName;
mdrasview.XDimension = filedX;
mdrasview.YDimension = filedY;
IMDDatasetView datasetView = mdrasview as IMDDatasetView;
IMDWorkspace mdwksp = netws as IMDWorkspace;
IRasterDataset rasterds = mdwksp.CreateView("myview", datasetView) as IRasterDataset;
if (!string.IsNullOrWhiteSpace(filedZ))
{
datasetView.SelectDimensionByValue(filedZ, Convert.ToDouble(zVlaue)); //可以设置维度
}
IRasterLayer rl = new RasterLayerClass();
rl.CreateFromDataset(rasterds);
this.SetStretchColorRampRenderer(rl);
axMapControl1.AddLayer((ILayer)rl);
}
0 个回复