public IFunctionRasterDataset returnFunctionRasterDatasetNetCDF(string netCdfPath, string var, string x, string y, string band) { IWorkspace wks = geoUtil.OpenRasterWorkspace(netCdfPath); string rsDset = System.IO.Path.GetFileNameWithoutExtension(netCdfPath); INetCDFWorkspace rsWks = (INetCDFWorkspace)wks; IMDWorkspace mdWks = (IMDWorkspace)wks; NetCDFRasterDatasetName rsDsetName = new NetCDFRasterDatasetNameClass(); IMDRasterDatasetView rsDsetV = (IMDRasterDatasetView)rsDsetName; rsDsetV.Variable = var; rsDsetV.XDimension = x; rsDsetV.YDimension = y; rsDsetV.BandDimension = band; return createIdentityRaster((IRasterDataset)mdWks.CreateView(rsDset, (IMDDatasetView)rsDsetV)); }
/// <summary> /// Opens a raster dataset given a string path /// </summary> /// <param name="rasterPath">full path to a raster dataset</param> /// <returns>IRasterDataset</returns> public IRasterDataset openRasterDataset(string rasterPath,out string bnd) { IRasterDataset rstDset = null; bnd = "all"; try { IWorkspace wks = null; string rstDir = ""; string extTest = System.IO.Path.GetExtension(rasterPath).ToLower(); if (extTest == ".nc" || extTest == ".afr") { wks = geoUtil.OpenRasterWorkspace(rasterPath); rstDir = System.IO.Path.GetDirectoryName(rasterPath); } else { wks = openRasterDatasetRec(rasterPath); rstDir = wks.PathName; } string rstName = rasterPath.Replace(rstDir, "").TrimStart(new char[] { '\\' }); string[] rstNameSplit = rstName.Split(new char[] { '\\' }); string dataSet = ""; string rsDset = ""; switch (rstNameSplit.Length) { case 1: rsDset = rstNameSplit[0]; break; case 2: rsDset = rstNameSplit[0]; bnd = rstNameSplit[1]; break; default: dataSet = rstNameSplit[0]; rsDset = rstNameSplit[1]; bnd = rstNameSplit[2]; string[] bndsp = bnd.Split(new char[] { '_' }); bnd = bndsp[bndsp.Length - 1]; break; } //Console.WriteLine("Raster Dir = " + rstDir); //Console.WriteLine("Raster Name = " + rstName); //Console.WriteLine("Raster DataSet = " + dataSet); //Console.WriteLine("RsDset = " + rsDset); //Console.WriteLine("Bnd = " + bnd); if (wks.Type == esriWorkspaceType.esriLocalDatabaseWorkspace || wks.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) { IRasterWorkspaceEx rsWks = (IRasterWorkspaceEx)wks; rstDset = rsWks.OpenRasterDataset(rsDset); } else { //Console.WriteLine(wks.PathName); //Console.WriteLine(wks.WorkspaceFactory.get_WorkspaceDescription(true)); //string ext = System.IO.Path.GetExtension(wks.PathName).ToLower(); if (extTest == ".nc") { INetCDFWorkspace rsWks = (INetCDFWorkspace)wks; IMDWorkspace mdWks = (IMDWorkspace)wks; NetCDFRasterDatasetName rsDsetName = new NetCDFRasterDatasetNameClass(); IMDRasterDatasetView rsDsetV = (IMDRasterDatasetView)rsDsetName; string xDim, yDim, bandDim, vNm; getDeminsions(rsWks, out xDim, out yDim, out bandDim, out vNm); //Console.WriteLine("BandDim = " + bandDim.ToString()); //Console.WriteLine("xDim = " + xDim.ToString()); //Console.WriteLine("yDim = " + yDim.ToString()); rsDsetV.Variable = vNm; rsDsetV.XDimension = xDim; rsDsetV.YDimension = yDim; rsDsetV.BandDimension = bandDim; rstDset = (IRasterDataset)mdWks.CreateView(rsDset, (IMDDatasetView)rsDsetV); } else if (extTest == ".afr") { IFunctionRasterDatasetName fDsName = new FunctionRasterDatasetNameClass(); fDsName.FullName = rasterPath; IName name = (IName)fDsName; IFunctionRasterDataset ds = (IFunctionRasterDataset)name.Open(); rstDset = (IRasterDataset)ds; } else { IRasterWorkspace rsWks = (IRasterWorkspace)wks; rstDset = rsWks.OpenRasterDataset(rsDset); } } return rstDset; } catch { return null; } }