/// <summary> /// 获取该栅格图像的相关数据 /// <remarks> /// <list type="bullet"> /// <item> /// <term> /// 初始化_pDataset /// </term> /// <item> /// 获取栅格的Height和Width /// </item> /// </item> /// </list> /// </remarks> /// </summary> /// <returns></returns> private void Open() { //Open IWorkspaceFactory pRFactory = new RasterWorkspaceFactoryClass(); IRasterWorkspace2 rasterWorkspace = pRFactory.OpenFromFile(_rasterWorkSapce, 0) as IRasterWorkspace2; if (rasterWorkspace == null) { throw new ArgumentException("栅格文件无法打开"); } _pDataset = rasterWorkspace.OpenRasterDataset(_rasterName); //set height and width IRasterProps pRasterProps = (IRasterProps)GetRaster(); RasterInfo = new RasterInformation() { Width = pRasterProps.Width, Height = pRasterProps.Height, XCellSize = pRasterProps.MeanCellSize().X, YCellSize = pRasterProps.MeanCellSize().Y, OriginPoint = new PointClass() { X = pRasterProps.Extent.XMin, Y = pRasterProps.Extent.YMin }, SpatialReference = ((IGeoDataset)_pDataset).SpatialReference }; }
//按照名称与类型打开数据集,针对featureDataset和rasterDataset public static object openByTypeAndName(string name, string type) { try { if (type.Equals("featureDataset")) { IFeatureWorkspace w = vec_workspace as IFeatureWorkspace; IFeatureDataset data = w.OpenFeatureDataset(name); return(data); } else if (type.Equals("rasterDataset")) { IRasterWorkspace2 w = ras_workspace as IRasterWorkspace2; IRasterDataset data = w.OpenRasterDataset(name); return(data); } else { LogHelper.writeLog("error openByTypeAndName wrong type"); MessageBox.Show("wrong type"); } } catch (System.Exception ex) { LogHelper.writeLog("error openByTypeAndName " + ex.Message); MessageBox.Show("error : " + ex.Message); } return(null); }
public void Write(float?[,] rasterValue, string format) { FileHelper.DeleteFile(_workSpace, _fileName, ".tif", ".tfw", ".tif.aux"); IRasterWorkspace2 rasterWs = OpenRasterWorkspace(); if (rasterWs == null) { throw new NullReferenceException("栅格文件打开失败"); } IRasterDataset rasterDataset = rasterWs.CreateRasterDataset(_fileName + ".tif", format, RasterInfo.OriginPoint, RasterInfo.Width, RasterInfo.Height, RasterInfo.XCellSize, RasterInfo.YCellSize, 1, rstPixelType.PT_FLOAT, RasterInfo.SpatialReference, true); IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset; var rasterBand = rasterBands.Item(0); var rasterProps = (IRasterProps)rasterBand; //Set NoData if necessary. For a multiband image, NoData value needs to be set for each band. rasterProps.NoDataValue = -1; //Create a raster from the dataset. IRaster raster = rasterDataset.CreateDefaultRaster(); //Create a pixel block. IPnt blocksize = new PntClass(); blocksize.SetCoords(RasterInfo.Width, RasterInfo.Height); IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3; //Populate some pixel values to the pixel block. var pixels = (Array)pixelblock.get_PixelData(0); for (int i = 0; i < RasterInfo.Width; i++) { for (int j = 0; j < RasterInfo.Height; j++) { if (rasterValue[i, j].HasValue) { pixels.SetValue((float)rasterValue[i, j], i, j); } else { pixels.SetValue(-1, i, j); } } } pixelblock.set_PixelData(0, pixels); //Define the location that the upper left corner of the pixel block is to write. IPnt upperLeft = new PntClass(); upperLeft.SetCoords(0, 0); //Write the pixel block. IRasterEdit rasterEdit = (IRasterEdit)raster; rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock); //Release rasterEdit explicitly. Marshal.ReleaseComObject(rasterEdit); }
public bool CopyRaster(IRasterWorkspace2 pRW, string pFileName, IRasterWorkspaceEx pWorkSpace, string pDestName) { try { IRasterDataset pRds = pRW.OpenRasterDataset(pFileName); IRasterProps pRasterProps = (IRasterProps)pRds.CreateDefaultRaster(); IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass(); IRasterDef pRasterDef = new RasterDefClass(); pRasterDef.SpatialReference = pRasterProps.SpatialReference; IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; pGeoDefEdit.AvgNumPoints_2 = 4; pGeoDefEdit.GridCount_2 = 1; pGeoDefEdit.set_GridSize(0, 1000); pGeoDefEdit.SpatialReference_2 = pRasterProps.SpatialReference; IRasterDataset pRasterDataset = pWorkSpace.SaveAsRasterDataset(pDestName, pRds.CreateDefaultRaster(), pRasterStorageDef, "", pRasterDef, pGeoDef); return true; } catch (System.Exception ex) { return false; } }
public bool CopyRaster(IRasterWorkspace2 pRW, string pFileName, IRasterWorkspaceEx pWorkSpace, string pDestName) { try { IRasterDataset pRds = pRW.OpenRasterDataset(pFileName); IRasterProps pRasterProps = (IRasterProps)pRds.CreateDefaultRaster(); IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass(); IRasterDef pRasterDef = new RasterDefClass(); pRasterDef.SpatialReference = pRasterProps.SpatialReference; IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; pGeoDefEdit.AvgNumPoints_2 = 4; pGeoDefEdit.GridCount_2 = 1; pGeoDefEdit.set_GridSize(0, 1000); pGeoDefEdit.SpatialReference_2 = pRasterProps.SpatialReference; IRasterDataset pRasterDataset = pWorkSpace.SaveAsRasterDataset(pDestName, pRds.CreateDefaultRaster(), pRasterStorageDef, "", pRasterDef, pGeoDef); return(true); } catch (System.Exception ex) { return(false); } }
private void button1_Click(object sender, EventArgs e) { try { //create raster dataset from the JPIP service url Type factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory"); IWorkspaceFactory wsFact = Activator.CreateInstance(factoryType) as IWorkspaceFactory; string tempPath = Path.GetTempPath(); IRasterWorkspace2 ws = wsFact.OpenFromFile(tempPath, 0) as IRasterWorkspace2; IRasterDataset rds = ws.OpenRasterDataset(txtJPIPUrl.Text); //create a layer from the raster dataset IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromDataset(rds); string layerName = txtLayerName.Text; if (layerName == "") { layerName = txtJPIPUrl.Text.Substring(txtJPIPUrl.Text.LastIndexOf("/") + 1, txtJPIPUrl.Text.Length - txtJPIPUrl.Text.LastIndexOf("/") - 1); } rasterLayer.Name = layerName; //add the JPIP layer to the current data frame of ArcMap ArcMap.Document.FocusMap.AddLayer(rasterLayer); this.Close(); } catch { MessageBox.Show("Couldn't connect to the specified URL, sample url: jpip://myserver:8080/JP2Server/imagealias"); } }
public static void exportRasterData(string parth, IRasterLayer rasterLayer, float[,] rasterMat) //输出栅格数据 { string directory = parth.Substring(0, parth.LastIndexOf("\\")); string name = parth.Substring(parth.LastIndexOf("\\") + 1); IWorkspaceFactory workspaceFac = new RasterWorkspaceFactoryClass(); IRasterWorkspace2 rasterWorkspace2 = workspaceFac.OpenFromFile(directory, 0) as IRasterWorkspace2; IRasterInfo rasterInfo = (rasterLayer.Raster as IRawBlocks).RasterInfo; IPoint originPoint = new Point(); originPoint.PutCoords(rasterInfo.Origin.X, rasterInfo.Origin.Y - (rasterLayer.Raster as IRasterProps).Height * (rasterLayer.Raster as IRasterProps).MeanCellSize().Y); IRasterProps rasterProps = rasterLayer.Raster as IRasterProps; IRasterDataset rasterDataSet = rasterWorkspace2.CreateRasterDataset(name, "IMAGINE Image", originPoint, rasterProps.Width, rasterProps.Height, rasterProps.MeanCellSize().X, rasterProps.MeanCellSize().Y, 1, rstPixelType.PT_FLOAT, rasterProps.SpatialReference, true) as IRasterDataset2; IRaster2 raster2 = rasterDataSet.CreateDefaultRaster() as IRaster2; IPnt pntClass = new Pnt(); pntClass.X = rasterProps.Width; pntClass.Y = rasterProps.Height; IRasterCursor rasterCursor = raster2.CreateCursorEx(pntClass); IRasterCursor inRasterCursor = (rasterLayer.Raster as IRaster2).CreateCursorEx(pntClass); IRasterEdit rasterEdit = raster2 as IRasterEdit; if (rasterEdit.CanEdit()) { IPixelBlock3 pixelBlock3 = rasterCursor.PixelBlock as IPixelBlock3; IPixelBlock3 inPixelBlock3 = inRasterCursor.PixelBlock as IPixelBlock3; System.Array pixels = (System.Array)rasterMat; pixelBlock3.set_PixelData(0, (System.Array)pixels); rasterEdit.Write(rasterCursor.TopLeft, (IPixelBlock)pixelBlock3); System.Runtime.InteropServices.Marshal.ReleaseComObject(pixelBlock3); } rasterEdit.Refresh(); IGeoDataset inDataset = rasterLayer.Raster as IGeoDataset; IGeoDataset outDataset = rasterDataSet as IGeoDataset; IExtractionOp op = new RasterExtractionOpClass(); var outDataset1 = op.Raster(outDataset, inDataset); var clipRaster = (IRaster)outDataset1; ISaveAs pSaveAs = clipRaster as ISaveAs; System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterCursor); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); System.Runtime.InteropServices.Marshal.ReleaseComObject(raster2); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterDataSet); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterWorkspace2); System.Runtime.InteropServices.Marshal.ReleaseComObject(workspaceFac); if (File.Exists(parth)) { File.Delete(parth); } workspaceFac = new RasterWorkspaceFactoryClass(); IDataset outdataset = pSaveAs.SaveAs(name, workspaceFac.OpenFromFile(directory, 0), "IMAGINE Image"); System.Runtime.InteropServices.Marshal.ReleaseComObject(outdataset); return; }
private IDataset TryOpenDataset(Moves.GisDataset dataset, IWorkspace workspace, IDatasetName datasetName) { if (dataset.DatasourceType.AsDatasetType() == null) { return(null); } var datasetType = dataset.DatasourceType.AsDatasetType().Value; if (datasetType == esriDatasetType.esriDTFeatureClass) { try { IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(datasetName.Name); return((IDataset)featureClass); } catch (Exception) { return(null); } } // For opening raster data see https://desktop.arcgis.com/en/arcobjects/10.5/net/webframe.htm#62937a09-b1c5-47d7-a1ac-f7a5daab3c89.htm if (datasetType == esriDatasetType.esriDTRasterDataset) { try { // ReSharper disable once SuspiciousTypeConversion.Global // Raster Workspace Class is in ESRI.ArcGIS.DataSourcesRaster IRasterWorkspace2 rasterWorkspace = (IRasterWorkspace2)workspace; IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(datasetName.Name); // ReSharper disable once SuspiciousTypeConversion.Global // Three possible co-classes FunctionRasterDataset, RasterBand, RasterDataset are in ESRI.ArcGIS.DataSourcesRaster return((IDataset)rasterDataset); } catch (Exception) { return(null); } } if (datasetType == esriDatasetType.esriDTRasterCatalog || datasetType == esriDatasetType.esriDTMosaicDataset) { try { IRasterWorkspaceEx rasterWorkspace = (IRasterWorkspaceEx)workspace; IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(datasetName.Name); // ReSharper disable once SuspiciousTypeConversion.Global // Three possible co-classes FunctionRasterDataset, RasterBand, RasterDataset are in ESRI.ArcGIS.DataSourcesRaster return((IDataset)rasterDataset); } catch (Exception) { return(null); } } //TODO: Open additional types of data sources, support at least all in theme Manager return(null); }
public static IRasterDataset CreateRasterSurf(string string_0, string string_1, string string_2, IPoint ipoint_0, int int_0, int int_1, double double_0, double double_1, rstPixelType rstPixelType_0, ISpatialReference2 ispatialReference2_0, bool bool_0) { IWorkspaceFactory factory = new RasterWorkspaceFactory(); IRasterWorkspace2 workspace2 = factory.OpenFromFile(string_0, 0) as IRasterWorkspace2; return(workspace2.CreateRasterDataset(string_1, string_2, ipoint_0, int_0, int_1, double_0, double_1, 1, rstPixelType_0, ispatialReference2_0, bool_0)); }
/// <summary> /// 创建RasterDataset文件 张琪 20110614 /// </summary> /// <param name="sDir">保存路径</param> /// <param name="sName">文件名</param> /// <param name="sFormat"></param> /// <param name="pOrigin">点</param> /// <param name="nCol"></param> /// <param name="nRow"></param> /// <param name="cellsizeX"></param> /// <param name="cellsizeY"></param> /// <param name="ePixelType"></param> /// <param name="pSR"></param> /// <param name="bPerm"></param> /// <returns></returns> public IRasterDataset CreateRasterSurf(String sDir, String sName, String sFormat, ESRI.ArcGIS.Geometry.IPoint pOrigin, int nCol, int nRow, Double cellsizeX, Double cellsizeY, rstPixelType ePixelType, ISpatialReference2 pSR, bool bPerm) { IWorkspaceFactory prWksFac = new RasterWorkspaceFactoryClass(); IWorkspace pWorkspace = prWksFac.OpenFromFile(sDir, 0); IRasterWorkspace2 pRasterWorkspace2 = pWorkspace as IRasterWorkspace2; int numbands = 1; IRasterDataset pRasterDataset = pRasterWorkspace2.CreateRasterDataset(sName, sFormat, pOrigin, nCol, nRow, cellsizeX, cellsizeY, numbands, ePixelType, pSR, bPerm); return(pRasterDataset); }
/// <summary> /// 矢量转栅格 /// </summary> /// <param name="IFeatureClass">要转换的矢量数据</param> /// <param name="eleField">转换的字段名</param> /// <param name="cellsize">栅格大小,默认为null</param> ///<param name="rasterSavePath">保存路径</param> ///<param name="demName">dem名称</param> /// <returns>返回ILayer类型的图层</returns> public ILayer FeatureToRaster(IFeatureClass pFeatureClass, string eleField, object cellSize, string rasterSavePath, string demName) { IFeatureClassDescriptor pFeatureClassDescriptor = new FeatureClassDescriptorClass(); //获取转化的字段 pFeatureClassDescriptor.Create(pFeatureClass, null, eleField); //转换字段 IGeoDataset pGeoDataset = (IGeoDataset)pFeatureClassDescriptor; //获取第一个参数 //默认栅格大小 if (Convert.ToDouble(cellSize) <= 0) { IEnvelope envelope = pGeoDataset.Extent; if (envelope.Width > envelope.Height) { cellSize = envelope.Height / 250; } else { cellSize = envelope.Width / 250; } } IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass(); IRasterWorkspace2 rasterWorkspace2 = workspaceFactory.OpenFromFile(rasterSavePath, 0) as IRasterWorkspace2; //in case that there is already an existing raster with the raster name, try to delete it if (System.IO.Directory.Exists(System.IO.Path.Combine(rasterSavePath, demName))) { IDataset dataset = rasterWorkspace2.OpenRasterDataset(demName) as IDataset; dataset.Delete(); } IConversionOp conversionOp = new RasterConversionOpClass(); IRasterAnalysisEnvironment rasterAnalysisEnvironment = conversionOp as IRasterAnalysisEnvironment; rasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSize); IRasterDataset rasterDataset = null; try { rasterDataset = conversionOp.ToRasterDataset(pGeoDataset, "TIFF", (IWorkspace)rasterWorkspace2, demName); } catch (Exception ee) { MessageBox.Show(ee.Message); } ILayer layer = null; if (rasterDataset != null) { IRasterLayer pRlyr = new RasterLayerClass(); pRlyr.CreateFromDataset(rasterDataset); layer = pRlyr as ILayer; } return(layer); }
static void Main(string[] args) { //ESRI License Initializer generated code. m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeAdvanced }, new esriLicenseExtensionCode[] { }); //ESRI License Initializer generated code. //Get a path to the raster workspace and create a RasterWorkspace object Type factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory"); IWorkspaceFactory workspaceFactory = Activator.CreateInstance(factoryType) as IWorkspaceFactory; IRasterWorkspace2 rasterWorkspace = (IRasterWorkspace2)workspaceFactory.OpenFromFile("\\\\Filepath\\ToRaster\\Folder", 0); IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset("DEM_Resample.tif"); //Create a raster layer to get the raster object from it IRasterLayer rasterLayer = new RasterLayer(); rasterLayer.CreateFromDataset(rasterDataset); IRaster raster = rasterLayer.Raster; //Get the raster properties so we can modify them later and get details about them if we so choose. IRasterProps rasterProps = raster as IRasterProps; double cellSize = 60; //Declate a new spatial reference if you want to change the spatial reference used. ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironment(); ISpatialReference2 srReference = srFactory.CreateProjectedCoordinateSystem(26917) as ISpatialReference2; //Create an IRasterGeometryProc object as this has the projectFast method we are looking for. IRasterGeometryProc rasterGeometryProc = new RasterGeometryProc(); rasterGeometryProc.ProjectFast(rasterProps.SpatialReference, rstResamplingTypes.RSP_NearestNeighbor, ((object)cellSize), raster); //Create a new rasterBandCollection to store the raster in and save it there. IRasterBandCollection rasterBandCollection = raster as IRasterBandCollection; String outName = "NewImage.tif"; String outType = "TIFF"; rasterBandCollection.SaveAs(outName, ((IWorkspace)rasterWorkspace), outType); Console.WriteLine("DONE"); Console.ReadLine(); //Do not make any call to ArcObjects after ShutDownApplication() m_AOLicenseInitializer.ShutdownApplication(); }
public static IRasterDataset createFileRasterDataset(IRasterWorkspace2 irasterWorkspace2_0, string string_0, int int_0, rstPixelType rstPixelType_0, ISpatialReference ispatialReference_0) { try { IRasterDataset dataset = null; IPoint origin = new Point(); origin.PutCoords(0.0, 0.0); if (ispatialReference_0 == null) { ispatialReference_0 = new UnknownCoordinateSystem() as ISpatialReference; } dataset = irasterWorkspace2_0.CreateRasterDataset(string_0, "IMAGINE Image", origin, 200, 100, 1.0, 1.0, int_0, rstPixelType_0, ispatialReference_0, true); IRawPixels pixels = null; IPixelBlock3 block = null; IPnt tlc = null; IPnt size = null; IRasterBandCollection bands = (IRasterBandCollection)dataset; pixels = (IRawPixels)bands.Item(0); IRasterProps props = (IRasterProps)pixels; tlc = new DblPnt(); tlc.SetCoords(0.0, 0.0); size = new DblPnt(); size.SetCoords((double)props.Width, (double)props.Height); block = (IPixelBlock3)pixels.CreatePixelBlock(size); pixels.Read(tlc, (IPixelBlock)block); object[,] objArray = (object[, ])block.get_PixelDataByRef(0); for (int i = 0; i < props.Width; i++) { for (int j = 0; j < props.Height; j++) { objArray[i, j] = (i * j) % 255; } } object cache = pixels.AcquireCache(); pixels.Write(tlc, (IPixelBlock)block); pixels.ReturnCache(cache); return(dataset); } catch (Exception exception) { Debug.WriteLine(exception.Message); return(null); } }
private IRaster createRasterWithoutData(Point2D ptLeftTop, double dbResolution, int[] nSize, string pRasterFile) { IRaster pRaster = null; try { if (File.Exists(pRasterFile)) { File.Delete(pRasterFile); } string Path = System.IO.Path.GetDirectoryName(pRasterFile); string FileName = System.IO.Path.GetFileName(pRasterFile); IRasterWorkspace2 rasterWs = OpenRasterWorkspace(Path); //Define the spatial reference of the raster dataset. ISpatialReference sr = new UnknownCoordinateSystemClass(); //Define the origin for the raster dataset, which is the lower left corner of the raster. IPoint origin = new PointClass(); origin.PutCoords(ptLeftTop.X, ptLeftTop.Y); //Define the dimensions of the raster dataset. int width = nSize[0]; //This is the width of the raster dataset. int height = nSize[1]; //This is the height of the raster dataset. double xCell = dbResolution; //This is the cell size in x direction. double yCell = dbResolution; //This is the cell size in y direction. int NumBand = 1; // This is the number of bands the raster dataset contains. //Create a raster dataset in TIFF format. IRasterDataset rasterDataset = rasterWs.CreateRasterDataset(FileName, "TIFF", origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr, true); //Set NoData if necessary. For a multiband image, a NoData value needs to be set for each band. //rasterProps.NoDataValue = -9999; //Create a raster from the dataset. pRaster = rasterDataset.CreateDefaultRaster(); return(pRaster); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Error: " + ex.Message); return(null); } return(pRaster); }
public static IRasterDataset exportRasterData(string parth, IRasterLayer rasterLayer, float[,] rasterMat) { string directory = parth.Substring(0, parth.LastIndexOf("\\")); string name = parth.Substring(parth.LastIndexOf("\\") + 1); IWorkspaceFactory workspaceFac = new RasterWorkspaceFactoryClass(); IRasterWorkspace2 rasterWorkspace2 = workspaceFac.OpenFromFile(directory, 0) as IRasterWorkspace2; IRasterInfo rasterInfo = (rasterLayer.Raster as IRawBlocks).RasterInfo; IPoint originPoint = new Point(); originPoint.PutCoords(rasterInfo.Origin.X, rasterInfo.Origin.Y - (rasterLayer.Raster as IRasterProps).Height * (rasterLayer.Raster as IRasterProps).MeanCellSize().Y); IRasterProps rasterProps = rasterLayer.Raster as IRasterProps; IRasterDataset rasterDataSet = rasterWorkspace2.CreateRasterDataset(name, "IMAGINE Image", originPoint, rasterProps.Width, rasterProps.Height, rasterProps.MeanCellSize().X, rasterProps.MeanCellSize().Y, 1, rstPixelType.PT_FLOAT, rasterProps.SpatialReference, true); IRaster2 raster2 = rasterDataSet.CreateDefaultRaster() as IRaster2; IPnt pntClass = new Pnt(); pntClass.X = rasterProps.Width; pntClass.Y = rasterProps.Height; IRasterCursor rasterCursor = raster2.CreateCursorEx(pntClass); IRasterEdit rasterEdit = raster2 as IRasterEdit; if (rasterEdit.CanEdit()) { IRasterBandCollection bands = rasterDataSet as IRasterBandCollection; IPixelBlock3 pixelBlock3 = rasterCursor.PixelBlock as IPixelBlock3; System.Array pixels = (System.Array)pixelBlock3.get_PixelData(0); for (int i = 0; i < rasterProps.Width; i++) { for (int j = 0; j < rasterProps.Height; j++) { pixels.SetValue(Convert.ToSingle(rasterMat[j, i]), i, j); } } pixelBlock3.set_PixelData(0, (System.Array)pixels); rasterEdit.Write(rasterCursor.TopLeft, (IPixelBlock)pixelBlock3); } (raster2 as IRasterProps).NoDataValue = 0f; rasterEdit.Refresh(); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); return(rasterDataSet); }
public static ILayer RasterView(string gdb_Path, string feat_Name) { try { IWorkspaceFactory2 pWKF = new FileGDBWorkspaceFactoryClass(); IRasterWorkspace2 pRasterWKEx = (IRasterWorkspace2)pWKF.OpenFromFile(gdb_Path, 0); IRasterLayer featLyr = new RasterLayerClass(); IRasterDataset rstDs = pRasterWKEx.OpenRasterDataset(feat_Name) as IRasterDataset; IRaster rst = rstDs.CreateDefaultRaster(); featLyr.CreateFromRaster(rst); ILayer lyr = featLyr as ILayer; lyr.Name = feat_Name; return(lyr); } catch (Exception e) { return(null); } }
/// <summary> /// 创建栅格数据集 /// </summary> /// <param name="pGDBType"></param> /// <param name="pPath"></param> /// <param name="pFileName"></param> /// <param name="pWidth"></param> /// <param name="pHeight"></param> /// <param name="pXCell"></param> /// <param name="pYCell"></param> /// <param name="pNumBand"></param> /// <returns></returns> public IRasterDataset CreateRasterDataset(GDBType pGDBType, string pPath, string pFileName, int pWidth, int pHeight, double pXCell, double pYCell, int pNumBand) { try { IRasterWorkspace2 pRWs = GetWorkspace(pPath, pGDBType) as IRasterWorkspace2; ISpatialReference sr = new UnknownCoordinateSystemClass(); IPoint origin = new PointClass(); origin.PutCoords(0.0, 0.0); IRasterDataset rasterDataset = pRWs.CreateRasterDataset(pFileName, "TIFF", origin, pWidth, pHeight, pXCell, pYCell, pNumBand, rstPixelType.PT_UCHAR, sr, true); return(rasterDataset); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
public IRasterDataset CreateRasterSurf(string sDir, string sName, string sFormat, IPoint pOrigin, int nCol, int nRow, double cellsizeX, double cellsizeY, rstPixelType ePixelType, ISpatialReference2 pSR, bool bPerm) { //IWorkspaceFactory rWksFac = new RasterWorkspaceFactory(); //IWorkspace wks = rWksFac.OpenFromFile(sDir, 0); //IRasterWorkspace2 rWks = wks as IRasterWorkspace2; //int numbands = 1; //IRasterDataset pRDS;// = new RasterDatasetClass(); //pRDS = rWks.CreateRasterDataset(sName, sFormat, pOrigin, nCol, nRow, cellsizeX, cellsizeY, numbands, ePixelType, pSR, bPerm); //return pRDS; IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0); ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)pname.Open(); IPoint originpoint = pOrigin; IRasterWorkspace2 rasterws = (IRasterWorkspace2)inmemWor; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset("Dataset", "MEM", originpoint, nCol, nRow, (double)cellsizeX, (double)cellsizeY, 1, rstPixelType.PT_DOUBLE, null, true); try { System.Runtime.InteropServices.Marshal.ReleaseComObject(pname); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceFactory); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceName); System.Runtime.InteropServices.Marshal.ReleaseComObject(inmemWor); } catch { } GC.Collect(); return(demdataset); }
public static IRasterDataset CreateRasterDataset(string filePath, string fileName, IRasterLayer rasterLayer, StructRasterMetaData structRasterMetaData, int[,] data, int noDataValue) { try { IRasterWorkspace2 rasterWorkspace2 = OpenRasterWorkspace(filePath); //Define the origin for the raster dataset, which is the lower left corner of the raster. IPoint originPoint = new PointClass(); originPoint.PutCoords(structRasterMetaData.XMin, structRasterMetaData.YMin); //Define the dimensions of the raster dataset. int width = structRasterMetaData.RowCount; //This is the width of the raster dataset. int height = structRasterMetaData.ColumnCount; //This is the height of the raster dataset. IRaster r = rasterLayer.Raster; IRasterDefaultProps rdp = r as IRasterDefaultProps; double xCellSize = rdp.DefaultPixelWidth; //This is the cell size in x direction. double yCellSize = rdp.DefaultPixelHeight; //This is the cell size in y direction. ISpatialReference spatialReference = rdp.DefaultSpatialReference; int bandCount = 1; // This is the number of bands the raster dataset contains. //Create a raster dataset in TIFF format. IRasterDataset rasterDataset = rasterWorkspace2.CreateRasterDataset(fileName, "IMAGINE Image", originPoint, height, width, xCellSize, yCellSize, bandCount, rstPixelType.PT_UCHAR, spatialReference, true); //If you need to set NoData for some of the pixels, you need to set it on band //to get the raster band. IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset; IRasterBand rasterBand; IRasterProps rasterProps; rasterBand = rasterBands.Item(0); rasterProps = (IRasterProps)rasterBand; //Set NoData if necessary. For a multiband image, a NoData value needs to be set for each band. rasterProps.NoDataValue = -9999f; //Create a raster from the dataset. IRaster raster = rasterDataset.CreateDefaultRaster(); //Create a pixel block using the weight and height of the raster dataset. //If the raster dataset is large, a smaller pixel block should be used. //Refer to the topic "How to access pixel data using a raster cursor". IPnt blocksize = new PntClass(); blocksize.SetCoords(height, width); IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3; object temp = pixelblock.get_PixelDataByRef(0); System.Byte[,] pixelData = (System.Byte[, ])temp; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if (data[i, j] == -9999f) { pixelData[j, i] = (System.Byte)noDataValue; //System.Diagnostics.Debug.WriteLine(i.ToString() + "+" + j.ToString()); } else { if (pixelData[j, i] != Convert.ToByte(data[i, j])) { pixelData[j, i] = Convert.ToByte(data[i, j]); } //System.Diagnostics.Debug.WriteLine(i.ToString() + "-" + j.ToString()); } } } pixelblock.set_PixelData(0, pixelData); //Define the location that the upper left corner of the pixel block is to write. IPnt upperLeft = new PntClass(); upperLeft.SetCoords(0, 0); //Write the pixel block. IRasterEdit rasterEdit = (IRasterEdit)raster; rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock); //Release rasterEdit explicitly. System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); return(rasterDataset); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
// From ArcObjects Help: How to Create a Raster dataset // http://resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/index.html#/How_to_create_a_raster_dataset/000100000464000000/ public static IRasterDataset CreateRasterDataset(string Path, string FileName) { try { IRasterWorkspace2 rasterWs = OpenRasterWorkspace(Path); // This is a custom method that's at the bottom of this code. //Define the spatial reference of the raster dataset. ISpatialReference sr = new UnknownCoordinateSystemClass(); //Define the origin for the raster dataset, which is the lower left corner of the raster. IPoint origin = new PointClass(); origin.PutCoords(15.0, 15.0); //Define the dimensions of the raster dataset. int width = 100; //This is the width of the raster dataset. int height = 100; //This is the height of the raster dataset. double xCell = 30; //This is the cell size in x direction. double yCell = 30; //This is the cell size in y direction. int NumBand = 1; // This is the number of bands the raster dataset contains. //Create a raster dataset in TIFF format. IRasterDataset rasterDataset = rasterWs.CreateRasterDataset(FileName, "TIFF", origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr, true); //If you need to set NoData for some of the pixels, you need to set it on band //to get the raster band. IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset; IRasterBand rasterBand; IRasterProps rasterProps; rasterBand = rasterBands.Item(0); rasterProps = (IRasterProps)rasterBand; //Set NoData if necessary. For a multiband image, a NoData value needs to be set for each band. rasterProps.NoDataValue = 255; //Create a raster from the dataset. IRaster raster = ((IRasterDataset2)rasterDataset).CreateFullRaster(); //Create a pixel block using the weight and height of the raster dataset. //If the raster dataset is large, a smaller pixel block should be used. //Refer to the topic "How to access pixel data using a raster cursor". IPnt blocksize = new PntClass(); blocksize.SetCoords(width, height); IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3; //Populate some pixel values to the pixel block. System.Array pixels; pixels = (System.Array)pixelblock.get_PixelData(0); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if (i == j) { pixels.SetValue(Convert.ToByte(255), i, j); } else { pixels.SetValue(Convert.ToByte((i * j) / 255), i, j); } } } pixelblock.set_PixelData(0, (System.Array)pixels); //Define the location that the upper left corner of the pixel block is to write. IPnt upperLeft = new PntClass(); upperLeft.SetCoords(0, 0); //Write the pixel block. IRasterEdit rasterEdit = (IRasterEdit)raster; rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock); //Release rasterEdit explicitly. System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); return(rasterDataset); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
/// <summary> /// 创建栅格数据集,本地 /// </summary> /// <param name="directoryName"></param> /// <param name="fileName"></param> /// <returns></returns> private IRasterDataset CreateFileRasterDataset(string directoryName, string fileName) { // This function creates a new img file in the given workspace // and then assigns pixel values try { IRasterDataset rasterDataset = null; IPoint originPoint = new PointClass(); originPoint.PutCoords(0, 0); // Create the dataset IRasterWorkspace2 rasterWorkspace2 = null; rasterWorkspace2 = CreateRasterWorkspace(directoryName); rasterDataset = rasterWorkspace2.CreateRasterDataset(fileName, "IMAGINE Image", originPoint, 200, 100, 1, 1, 1, rstPixelType.PT_UCHAR, new UnknownCoordinateSystemClass(), true); IRawPixels rawPixels = null; IPixelBlock3 pixelBlock3 = null; IPnt pixelBlockOrigin = null; IPnt pixelBlockSize = null; IRasterBandCollection rasterBandCollection; IRasterProps rasterProps; // QI for IRawPixels and IRasterProps rasterBandCollection = (IRasterBandCollection)rasterDataset; rawPixels = (IRawPixels)rasterBandCollection.Item(0); rasterProps = (IRasterProps)rawPixels; // Create pixelblock pixelBlockOrigin = new DblPntClass(); pixelBlockOrigin.SetCoords(0, 0); pixelBlockSize = new DblPntClass(); pixelBlockSize.SetCoords(rasterProps.Width, rasterProps.Height); pixelBlock3 = (IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize); // Read pixelblock rawPixels.Read(pixelBlockOrigin, (IPixelBlock)pixelBlock3); // Get pixeldata array System.Object[,] pixelData; pixelData = (System.Object[, ])pixelBlock3.get_PixelDataByRef(0); // Loop through all the pixels and assign value for (int i = 0; i < rasterProps.Width; i++) { for (int j = 0; j < rasterProps.Height; j++) { pixelData[i, j] = (i * j) % 255; } } // Write the pixeldata back System.Object cachePointer; cachePointer = rawPixels.AcquireCache(); rawPixels.Write(pixelBlockOrigin, (IPixelBlock)pixelBlock3); rawPixels.ReturnCache(cachePointer); // Return raster dataset return(rasterDataset); } catch (Exception ex) { //******************************************************************* //guozheng added if (ModData.SysLog != null) { ModData.SysLog.Write(ex, null, DateTime.Now); } else { ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog(); ModData.SysLog.Write(ex, null, DateTime.Now); } //******************************************************************** System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
public IRaster TINToDEM(ITin pTin) { IPoint pOrigin = pTin.Extent.LowerLeft; IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0); ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)pname.Open(); IPoint originpoint = pOrigin; IRasterWorkspace2 rasterws = (IRasterWorkspace2)inmemWor; int nCol, nRow; nCol = 500; nRow = 500; double cellsizeX, cellsizeY; cellsizeX = pTin.Extent.Width / nCol; cellsizeY = pTin.Extent.Height / nRow; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset("Dataset", "MEM", originpoint, nCol, nRow, (double)cellsizeX, (double)cellsizeY, 1, rstPixelType.PT_DOUBLE, null, true); try { System.Runtime.InteropServices.Marshal.ReleaseComObject(pname); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceFactory); System.Runtime.InteropServices.Marshal.ReleaseComObject(pworkspaceName); System.Runtime.InteropServices.Marshal.ReleaseComObject(inmemWor); } catch { } //IRawPixels pRawPixels = GetRawPixels(pRDS, 0); IRaster pRaster = demdataset.CreateDefaultRaster(); IPnt pBlockSize = new DblPnt(); //nCol = 50; //nRow = 50; pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize); //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize); IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3; //object val = pPixelBlock.get_SafeArray(0); ITinSurface pTinSurf = pTin as ITinSurface; // IRasterProps pRasterProps = pRawPixels as IRasterProps; IRasterProps pRasterProps = pRaster as IRasterProps; object nodata; //pOrigin.X = pOrigin.X + (cellsize * 0.5); //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y + (cellsizeY * nRow); nodata = pRasterProps.NoDataValue; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); //这个pOrigin为栅格左上角 //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val); //if (pTin.ProcessCancelled) // return null; //val.GetType(); CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsizeX, cellsizeY, ref pPixelBlock3); IPnt pOffset = new DblPnt(); pOffset.X = 0; pOffset.Y = 0; //pPixelBlock3.set_PixelData(0, val); //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘 IRasterEdit prasteredit = pRaster as IRasterEdit; prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3); //pRDS = OpenOutputRasterDataset(sDir, sName); //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize); //pRaster.Read(pOffset,pb); return(pRaster); }
public IRasterDataset TinToRaster_new(ITinAdvanced pTin, esriRasterizationType eRastConvType, String sDir, String sName, rstPixelType ePixelType, Double cellsize, IEnvelope pExtent, bool bPerm) { IPoint pOrigin = pExtent.LowerLeft; //pOrigin.X = pOrigin.X - (cellsize * 0.5); //pOrigin.Y = pOrigin.Y - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y; int nCol, nRow; nCol = (int)Math.Round(pExtent.Width / cellsize); nRow = (int)Math.Round(pExtent.Height / cellsize); IGeoDataset pGDS = pTin as IGeoDataset; ISpatialReference2 pSR = pGDS.SpatialReference as ISpatialReference2; //这个pOrigin为栅格左下角 IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace2 rasterws = pworkspaceFactory.OpenFromFile(sDir, 0) as IRasterWorkspace2; IPoint originpoint = pOrigin; //用于计算的 float型的栅格数据 IRasterDataset demdataset = rasterws.CreateRasterDataset(sName, "TIFF", originpoint, nCol, nRow, cellsize, cellsize, 1, rstPixelType.PT_DOUBLE, null, true); IRasterDataset pRDS = demdataset; //IRawPixels pRawPixels = GetRawPixels(pRDS, 0); IRaster pRaster = pRDS.CreateDefaultRaster(); IPnt pBlockSize = new DblPnt(); //nCol = 50; //nRow = 50; pBlockSize.X = nCol; pBlockSize.Y = nRow; IPixelBlock pPixelBlock = pRaster.CreatePixelBlock(pBlockSize); //IPixelBlock pPixelBlock = pRawPixels.CreatePixelBlock(pBlockSize); IPixelBlock3 pPixelBlock3 = pPixelBlock as IPixelBlock3; //object val = pPixelBlock.get_SafeArray(0); ITinSurface pTinSurf = pTin as ITinSurface; // IRasterProps pRasterProps = pRawPixels as IRasterProps; IRasterProps pRasterProps = pRaster as IRasterProps; object nodata; //pOrigin.X = pOrigin.X + (cellsize * 0.5); //pOrigin.Y = pOrigin.Y + (cellsize * nRow) - (cellsize * 0.5); pOrigin.X = pOrigin.X; pOrigin.Y = pOrigin.Y + (cellsize * nRow); nodata = pRasterProps.NoDataValue; IGeoDatabaseBridge2 pbridge2 = (IGeoDatabaseBridge2) new GeoDatabaseHelperClass(); //这个pOrigin为栅格左上角 //pbridge2.QueryPixelBlock(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodata, ref val); //if (pTin.ProcessCancelled) // return null; //val.GetType(); CalPixelArray(pTinSurf, pOrigin.X, pOrigin.Y, cellsize, cellsize, ref pPixelBlock3); IPnt pOffset = new DblPnt(); pOffset.X = 0; pOffset.Y = 0; //pPixelBlock3.set_PixelData(0, val); //pRawPixels.Write(pOffset, (IPixelBlock)pPixelBlock3);//写入硬盘 IRasterEdit prasteredit = pRaster as IRasterEdit; prasteredit.Write(pOffset, (IPixelBlock)pPixelBlock3); //pRDS = OpenOutputRasterDataset(sDir, sName); //IPixelBlock pb = pRaster.CreatePixelBlock(pBlockSize); //pRaster.Read(pOffset,pb); // ISaveAs pSaveas = pRasterProps as ISaveAs2; // pSaveas.SaveAs(sDir + "\\" + sName, null, "TIFF"); prasteredit.Refresh(); return(pRDS); }
private IRaster CreateRaster(Point2D ptLeftTop, double[] dbResolution, int[] nSize) { try { IWorkspaceFactory pworkspaceFactory = new RasterWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspaceName = pworkspaceFactory.Create(null, "MyWorkspace", null, 0); ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)pname.Open(); IRasterWorkspace2 rasterWs = (IRasterWorkspace2)inmemWor; //Define the spatial reference of the raster dataset. ISpatialReference sr = new UnknownCoordinateSystemClass(); //Define the origin for the raster dataset, which is the lower left corner of the raster. IPoint origin = new PointClass(); origin.PutCoords(ptLeftTop.X, ptLeftTop.Y); //Define the dimensions of the raster dataset. int width = nSize[0]; //This is the width of the raster dataset. int height = nSize[1]; //This is the height of the raster dataset. double xCell = dbResolution[0]; //This is the cell size in x direction. double yCell = dbResolution[1]; //This is the cell size in y direction. int NumBand = 1; // This is the number of bands the raster dataset contains. //Create a raster dataset in TIFF format. IRasterDataset rasterDataset = rasterWs.CreateRasterDataset("", "MEM", origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr, true); //If you need to set NoData for some of the pixels, you need to set it on band //to get the raster band. IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset; IRasterBand rasterBand; IRasterProps rasterProps; rasterBand = rasterBands.Item(0); rasterProps = (IRasterProps)rasterBand; //Set NoData if necessary. For a multiband image, a NoData value needs to be set for each band. //rasterProps.NoDataValue = -9999f; //Create a raster from the dataset. IRaster raster = rasterDataset.CreateDefaultRaster(); //Create a pixel block using the weight and height of the raster dataset. //If the raster dataset is large, a smaller pixel block should be used. //Refer to the topic "How to access pixel data using a raster cursor". //IPnt blocksize = new PntClass(); //blocksize.SetCoords(width, height); //IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3; ////Populate some pixel values to the pixel block. //System.Array pixels; //pixels = (System.Array)pixelblock.get_PixelData(0); //for (int i = 0; i < width; i++) //{ // for (int j = 0; j < height; j++) // { // pixels.SetValue(dbData[i, j], i, j); // } //} //pixelblock.set_PixelData(0, (System.Array)pixels); ////Define the location that the upper left corner of the pixel block is to write. //IPnt upperLeft = new PntClass(); //upperLeft.SetCoords(ptLeftTop.X, ptLeftTop.Y); ////Write the pixel block. //IRasterEdit rasterEdit = (IRasterEdit)raster; //rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock); //rasterEdit.Refresh(); //Release rasterEdit explicitly. //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterDataset); //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterWs); //System.Runtime.InteropServices.Marshal.ReleaseComObject(sr); // GC.Collect(); return(raster); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } return(null); }
/// <summary> /// 导入数据(栅格数据集) /// </summary> /// <param name="RDDatasetName">栅格数据集名称</param> /// <param name="filePath">源数据路径</param> /// <param name="pWorkspace">栅格数据集工作空间</param> /// <param name="eError"></param> /// <returns></returns> private bool InputRasterDataset(string RDDatasetName, string filePath, IWorkspace pWorkspace, out Exception eError) { eError = null; FileInfo pFileInfo = new FileInfo(filePath); string pFileDic = pFileInfo.DirectoryName; //文件目录 string pFileName = pFileInfo.Name; //文件名 try { //IMosaicRaster pMosaicR = null; //目标栅格数据集 IRasterDataset pObjRasterDataset = GetRasterDataset(RDDatasetName, pWorkspace, out eError); if (pObjRasterDataset == null) { return(false); } //IRaster pObjRaster = pObjRasterDataset.CreateDefaultRaster(); //if(pObjRaster!=null) //{ // pMosaicR = pObjRaster as IMosaicRaster; //} //栅格数据工作空间 IWorkspaceFactory pOrgRasterWsFac = new RasterWorkspaceFactoryClass(); IWorkspace pWS = pOrgRasterWsFac.OpenFromFile(pFileDic, 0); IRasterWorkspace2 pRasterWS = pWS as IRasterWorkspace2; if (pRasterWS == null) { return(false); } IRasterDataset pOrgRDataset = pRasterWS.OpenRasterDataset(pFileName); IRaster pOrgRaster = pOrgRDataset.CreateDefaultRaster(); //load raster data to exist raster dataset IRasterLoader pRasterLoad = new RasterLoaderClass(); if (pOrgRaster != null) { //if(pMosaicR!=null) //{ // //若目标要素不为空,则进行拼接 // //pMosaicR.MosaicOperatorType = rstMosaicOperatorType.MT_LAST; // pMosaicR.OrderByField = "Name"; // pMosaicR.Ascending = true; // pMosaicR.MosaicColormapMode = rstMosaicColormapMode.MM_MATCH; // IMosaicOperator pMosaicOpe=pMosaicR.MosaicOperator; //} pRasterLoad.Background = 0; //background value be ignored when loading pRasterLoad.PixelAlignmentTolerance = 0; //重采样的容差 pRasterLoad.MosaicColormapMode = rstMosaicColormapMode.MM_LAST; //拼接的颜色采用 last map color pRasterLoad.Load(pObjRasterDataset, pOrgRaster); } Marshal.ReleaseComObject(pRasterLoad); } catch (System.Exception ex) { //******************************************************************* //guozheng added if (ModData.SysLog != null) { ModData.SysLog.Write(ex, null, DateTime.Now); } else { ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog(); ModData.SysLog.Write(ex, null, DateTime.Now); } //******************************************************************** eError = ex; return(false); } return(true); }
private void CopyRasterMethod() { try { double Size = 0; string gdb_Path = target.In_Directory; string feat_Name = target.In_FileName; string outputFolderPath = target.Out_Directory; string outputName = target.Out_FileName; ESRI.ArcGIS.DataManagementTools.CopyRaster cr = new ESRI.ArcGIS.DataManagementTools.CopyRaster(); cr.in_raster = gdb_Path + "\\" + feat_Name; if (System.IO.Path.GetExtension(outputFolderPath).ToUpper().Equals(".GDB")) { cr.out_rasterdataset = outputFolderPath + "\\" + GetNameGDB(outputFolderPath, outputName); } else { cr.out_rasterdataset = outputFolderPath + "\\" + GetNameRaster(outputFolderPath, outputName); } IWorkspaceFactory2 in_wsf = new FileGDBWorkspaceFactoryClass(); IRasterWorkspace2 in_rstWs = (IRasterWorkspace2)in_wsf.OpenFromFile(gdb_Path, 0); IRasterLayer in_rstLyr = new RasterLayerClass(); IRasterDataset in_rstDs = in_rstWs.OpenRasterDataset(feat_Name); in_rstLyr.CreateFromDataset(in_rstDs); IRasterProps in_rasterProps = (IRasterProps)in_rstLyr.Raster; int Height = in_rasterProps.Height; int Width = in_rasterProps.Width; rstPixelType in_rstPT = in_rasterProps.PixelType; int BandsCount = in_rstLyr.BandCount; Dictionary <rstPixelType, int> DictPT = new Dictionary <rstPixelType, int>(); DictPT.Clear(); DictPT.Add(rstPixelType.PT_DOUBLE, 64); DictPT.Add(rstPixelType.PT_FLOAT, 32); DictPT.Add(rstPixelType.PT_LONG, 32); DictPT.Add(rstPixelType.PT_SHORT, 32); DictPT.Add(rstPixelType.PT_UCHAR, 8); DictPT.Add(rstPixelType.PT_ULONG, 32); DictPT.Add(rstPixelType.PT_USHORT, 32); DictPT.Add(rstPixelType.PT_CHAR, 8); int Depth = 32; DictPT.TryGetValue(in_rasterProps.PixelType, out Depth); Size = 1.0 * Height * Width * BandsCount * Depth / 8.0 / 1024 / 1024; target.Size = Size; Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; IGeoProcessorResult gpr = gp.Execute(cr, null) as IGeoProcessorResult; if (gpr != null && gpr.Status == esriJobStatus.esriJobSucceeded) { DateTime tm2 = DateTime.Now; TimeSpan ts1 = new TimeSpan(startTime.Ticks); TimeSpan ts2 = new TimeSpan(tm2.Ticks); TimeSpan ts3 = ts2.Subtract(ts1); string out1, out2; GetConfig("Size", out out1); GetConfig("Time", out out2); double size = double.Parse(out1); double time = double.Parse(out2); SaveConfig("Size", (size + Size).ToString()); SaveConfig("Time", (time + ts3.TotalSeconds).ToString()); target.IsFinished = true; target.IsBusy = false; OnFinished(new LayerOperaEventArgs(target)); } else { } } catch (Exception e) { } }