ArcEngine 柵格數據


1、ArcEngine中的柵格數據組織方式(詳細信息見:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/009t0000000n000000/

  1.1 柵格數據集(RasterDataset)

       大多數影像和柵格數據(例如正射影像或 DEM)都以柵格數據集的形式提供。柵格數據集這個術語是指存儲在磁盤或地理數據庫中的任何柵格數據模型。它是構建其他數據的最基本的柵格數據存儲模型 - 鑲嵌數據集和柵格目錄管理柵格數據集。柵格數據集是組織成一個或多個波段的任何有效的柵格格式。每個波段由一系列像素(單元)數組組成,每個像素都有一個值。柵格數據集至少有一個波段。可以采用許多格式存儲柵格數據集,包括 TIFF、JPEG 2000、Esri Grid 和 MrSid。

  1.2 鑲嵌數據集(MosaicDataset)

    鑲嵌數據集是若干柵格數據集(影像)的集合,它以目錄形式存儲並以單個鑲嵌影像或單獨影像(柵格)的方式顯示或訪問。這些集合的總文件大小和柵格數據集數量都會非常大。鑲嵌數據集中的柵格數據集可以采用本機格式保留在磁盤上,也可在需要時加載到地理數據庫中。可通過柵格記錄以及屬性表中的屬性來管理元數據。通過將元數據存儲為屬性,可以更方便地管理諸如傳感器方向數據等參數,同時也可以提高對選擇內容的查詢速度。

    鑲嵌數據集中的柵格數據不必相鄰或疊置,也可以以未連接的不連續數據集的形式存在。例如,您可以使用完全覆蓋某個區域的影像,也可使用沒有連接到一起形成連續影像的多條影像(例如,沿管線)。數據甚至可以完全或部分疊置,但需要在不同的日期進行捕獲。鑲嵌數據集是一種用於存儲臨時數據的理想數據集。您可以在鑲嵌數據集中根據時間或日期查詢所需的影像,也可以使用某種鑲嵌方法來根據時間或日期屬性顯示鑲嵌影像。

  1.3 柵格目錄(RasterCatalog)

    柵格目錄是以表格式定義的柵格數據集的集合,其中每個記錄表示目錄中的一個柵格數據集。柵格目錄可以大到包含數千個影像。柵格目錄通常用於顯示相鄰、完全重疊或部分重疊的柵格數據集,而無需將它們鑲嵌為一個較大的柵格數據集。

2、ArcEngine操作柵格

  2.1 讀取柵格數據

    ArcEngine中的柵格數據存儲分為兩類:以單獨的文件形式存儲,如:TIFF、JPEG 2000、Esri Grid 和 MrSid等;存儲在地理數據庫(SDE數據庫、個人數據庫、文件數據庫等)中。

IRasterWorkspace 接口一般用於打開文件格式存儲的柵格數據,IRasterWorkspaceEx 接口用於打開存儲於地理數據庫中的柵格數據。

    打開文件格式存儲的柵格數據:

// Libraries needed to run the code:
// ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.DataSourcesRaster
public IRasterDataset OpenRasterDataset(string directoryName, string fileName)
{
  //Open the raster dataset with the given name.
  //directoryName is the directory where the file resides
  //fileName is the filename to be opened
    
  //Open the workspace 
  IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();

  // define the directory as a raster workspace
  IRasterWorkspace rasterWorkspace = workspaceFactory.OpenFromFile(directoryName, 0) as IRasterWorkspace;

  //Open the raster dataset 
  IRasterDataset rasterDataset = null;
  rasterDataset = rasterWorkspace.OpenRasterDataset(fileName);

  // Return raster dataset
  return rasterDataset;
}

    打開地理數據庫中的柵格數據(以個人數據庫為例):

// Libraries needed to run this code:
//   ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.DataSourcesGDB
public IRasterCatalog OpenPGDBRasterCatalog(string pathName, string rasterCatalogName)
{
  // Open personal geodatabase raster catalog with the given name
  // pathName is the PGDB path (location of the personal geodatabase)
  // rasterCatalogName is the name of the raster catalog to be opened
    
  //Open the Access workspace 
  IWorkspaceFactory2 workspaceFactory = new AccessWorkspaceFactoryClass();

  IRasterWorkspaceEx rasterWorkspaceEx = workspaceFactory.OpenFromFile(pathName, 0) as IRasterWorkspaceEx;

  //Open the PGDB raster Catalog 
  IRasterCatalog rasterCatalog = null;
  rasterCatalog = rasterWorkspaceEx.OpenRasterCatalog(rasterCatalogName);

  return rasterCatalog;
}

  2.2 創建柵格數據

    創建以文件格式存儲的柵格數據集:

// Libraries needed to run this code:
//   ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.DataSourcesRaster, ESRI.ArcGIS.Geometry
public 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)
  {
    System.Diagnostics.Debug.WriteLine(ex.Message);
    return null;
  } 
}

public IRasterWorkspace2 createRasterWorkspace(string pathName)
{
  // Create RasterWorkspace 
  IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();

  return workspaceFactory.OpenFromFile(pathName, 0) as IRasterWorkspace2;
}

    創建存儲在地理數據庫中的柵格目錄:

// Libraries needed to run this code:
//   ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry
public IRasterCatalog createCatalog(IRasterWorkspaceEx rasterWorkspaceEx, string catalogName, 
                                    string rasterFieldName, string shapeFieldName,
                                    ISpatialReference shapeSpatialReference, ISpatialReference rasterSpatialReference,
                                    bool isManaged, IFields fields, string keyword)
{
  // Create a raster catalog in a geodatabase workspace
  
  // rasterWorkspaceEx == destination geodatabase workspace (personal or ArcSDE)
  // catalogName == name of the raster catalog
  // rasterFieldName == name of the raster column
  // shapeFieldName == name of the geometry column
  // shapeSpatialReference == spatial reference of the geometry column
  // rasterSpatialReference == spatial reference fo the raster column
  // isManaged == for personal geodatabase only, if true, the rasters are managed by the GDB
  // fields == fields of the raster catalog table
  // keyword == ArcSDE only, configuration keyword

  if (fields == null)
    fields = createFields(rasterFieldName, shapeFieldName, isManaged, shapeSpatialReference, rasterSpatialReference);
  
  if (keyword.Length == 0)
    keyword = "defaults";
  
  // create raster catalog 
  IRasterCatalog newRasterCatalog = null;
  newRasterCatalog = rasterWorkspaceEx.CreateRasterCatalog(catalogName, fields, shapeFieldName, rasterFieldName, keyword);

  return newRasterCatalog;
}

private IFields createFields(string rasterFieldName, string shapeFieldName, bool isManaged, 
                             ISpatialReference shapeSpatialReference, ISpatialReference rasterSpatialReference)
{
                           
  // create Fields 
  // add OID field 
  IFieldsEdit fieldsEdit = new FieldsClass();
  fieldsEdit.AddField(createOIDField("ObjectID"));
     
  // add NAME field 
  fieldsEdit.AddField(createNameField("name"));
  
  // add RASTER field 
  fieldsEdit.AddField(createRasterField(rasterFieldName, isManaged, rasterSpatialReference));

  // add SHAPE field 
  fieldsEdit.AddField(createShapeField(shapeFieldName, shapeSpatialReference));
  
  // add XML field for METADATA
  fieldsEdit.AddField(createXMLField());

  return (IFields) fieldsEdit;
}
  
private IField createNameField(string fieldName)
{
  // create Name field 
  IFieldEdit fieldEdit = new FieldClass();
  
  fieldEdit.Name_2 = fieldName;
  fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
 
  return (IField) fieldEdit;
}

private IField createOIDField(string oidFieldName)
{
  // Create OID field 
  IFieldEdit fieldEdit = new FieldClass();
  
  fieldEdit.Name_2 = oidFieldName;
  fieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;

  return (IField) fieldEdit;
}

private IField createRasterField(string rasterFieldName, bool isManaged, ISpatialReference spatialReference)
{
  // create Raster field 
  IFieldEdit2 rasterFieldEdit = new FieldClass() as IFieldEdit2;

  IRasterDef rasterDef = new RasterDefClass();
  rasterDef.Description = "this is a raster catalog";

  // only for PGDB 
  rasterDef.IsManaged = isManaged;

  if (rasterFieldName.Length == 0)
    rasterFieldName = "RASTER";
  
  rasterFieldEdit.Name_2 = rasterFieldName;
  rasterFieldEdit.Type_2 = esriFieldType.esriFieldTypeRaster;
  
  // Set unknown spatial reference if not set 
  if (spatialReference == null)
    spatialReference = new UnknownCoordinateSystemClass();
  
  rasterDef.SpatialReference = spatialReference;
  
  // Set rasterdef 
  rasterFieldEdit.RasterDef = rasterDef;
  
  return (IField) rasterFieldEdit;
}

private IField createShapeField(string shapeFieldName, ISpatialReference spatialReference)
{
  // Create Shape field 
  IFieldEdit fieldEdit = new FieldClass();
  
  if (shapeFieldName.Length == 0)
    shapeFieldName = "SHAPE";

  fieldEdit.Name_2 = shapeFieldName;
  fieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
  
  fieldEdit.GeometryDef_2 = createGeometryDef(spatialReference);

  return (IField) fieldEdit;
}

private IField createXMLField()
{
  // create METADATA field
  IFieldEdit fieldEdit = new FieldClass();
  
  fieldEdit.Name_2 = "METADATA";
  fieldEdit.Type_2 = esriFieldType.esriFieldTypeBlob;

  return (IField) fieldEdit;
}

private IGeometryDef createGeometryDef(ISpatialReference spatialReference)
{
  // Create GeometryDef 
  IGeometryDefEdit geometryDefEdit = new GeometryDefClass();

  geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
  geometryDefEdit.AvgNumPoints_2 = 4;
  geometryDefEdit.GridCount_2 = 1;
  geometryDefEdit.set_GridSize(0,1000);
  
  // Set unknown spatial reference is not set
  if (spatialReference == null)
    spatialReference = new UnknownCoordinateSystemClass();

  geometryDefEdit.SpatialReference_2 = spatialReference;

  return (IGeometryDef) geometryDefEdit;
}

    創建存儲在地理數據庫中的柵格數據集:

// Libraries needed to run this code:
//   ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry 
public IRasterDataset createSDERasterDs(IRasterWorkspaceEx rasterWorkspaceEx,
                                        string rasterDatasetName, int numberOfBands,
                                        rstPixelType pixelType, ISpatialReference spatialReference,
                                        IRasterStorageDef rasterStorageDef, IRasterDef rasterDef,
                                        string keyword)
{
  // Create a raster dataset in a geodatabase workspace
  
  // rasterWorkspaceEx == destination geodatabase workspace (personal or ArcSDE)
  // rasterDatasetName == Name of raster dataset to create
  // numberOfBands == number of bands in the raster dataset that will be created
  // pixelType == type of pixel in target raster dataset
  // spatialReference == desired spatial reference in raster dataset
  // rasterStorageDef == RasterStorageDef object of Raster dataset -- defines pyramids, tiling, etc
  // rasterDef == definition for spatial reference
  // sKeyword == ArcSDE only, configuration keyword 
 
  IRasterDataset rasterDataset = null;
  IGeometryDef geometryDef;

  // if rasterdef is missing, create one with specified/unknown spatialreference
  if (rasterDef == null)
    rasterDef = createRasterDef(false, spatialReference);
  
  // if rasterstoragedef is missing, use default parameters 
  if (rasterStorageDef == null)
    rasterStorageDef = createRasterStorageDef();

  // create geometry definition
  geometryDef = createGeometryDef(spatialReference);

  // if keyword is missing, use default 
  if (keyword.Length == 0)
    keyword = "DEFAULTS";

  rasterDataset = rasterWorkspaceEx.CreateRasterDataset(rasterDatasetName, numberOfBands, pixelType,
    rasterStorageDef, keyword, rasterDef, geometryDef);
  
  return rasterDataset;
}

private IRasterDef createRasterDef(bool isManaged, ISpatialReference spatialReference)
{
  // Create rasterdef 
  IRasterDef rasterDef = new RasterDefClass();

  rasterDef.Description = "Raster Dataset";
  if (spatialReference == null)
    spatialReference = new UnknownCoordinateSystemClass();

  rasterDef.SpatialReference = spatialReference;
  
  return rasterDef;
}

private IRasterStorageDef createRasterStorageDef()
{
  // Create rasterstoragedef 
  IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();

  rasterStorageDef.CompressionType = esriRasterSdeCompressionTypeEnum.esriRasterSdeCompressionTypeRunLength;
  rasterStorageDef.PyramidLevel = 2;
  rasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
  rasterStorageDef.TileHeight = 128;
  rasterStorageDef.TileWidth = 128;
  
  return rasterStorageDef;
}

private IGeometryDef createGeometryDef(ISpatialReference spatialReference)
{
  // Create GeometryDef 
  IGeometryDefEdit geometryDefEdit = new GeometryDefClass();
    
  geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
  geometryDefEdit.AvgNumPoints_2 = 4;
  geometryDefEdit.GridCount_2 = 1;
  geometryDefEdit.set_GridSize(0,1000);
  
  // Set unknown spatial reference is not set
  if (spatialReference == null)
    spatialReference = new UnknownCoordinateSystemClass();
        
  geometryDefEdit.SpatialReference_2 = spatialReference;
        
  return (IGeometryDef) geometryDefEdit;
}

     創建鑲嵌數據集:

        //Libraries needed to run this code:        
        // ESRI.ArcGIS.DataManagementTools, ESRI.ArcGIS.Geoprocessor, ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry
        void CreateMosaicDataset(IWorkspace ws, string strMosaicDatasetName, ISpatialReference spr, int nBandNum, string strPixel_type)
        {
            if (ws == null)
                return;
            IWorkspace2 pWorkspace2 = ws as IWorkspace2;
            if (pWorkspace2.get_NameExists(esriDatasetType.esriDTMosaicDataset, txtDatasetName.Text))
            {
                //Dataset Has Existed
                return;
            }
            //Create CreateMosaicDataset
            CreateMosaicDataset gpProcess = new CreateMosaicDataset();
            //Set Paramers
            gpProcess.in_workspace = ws;
            gpProcess.in_mosaicdataset_name = strMosaicDatasetName;
            gpProcess.coordinate_system = spr;
            gpProcess.num_bands = nBandNum;
            gpProcess.pixel_type = strPixel_type;
            //Call the IGPProcess Interface
            IGPProcess pGPProcess = gpProcess;

            Geoprocessor geoprocessor = new Geoprocessor();
            geoprocessor.OverwriteOutput = true;
            try
            {
                //Do Create
                geoprocessor.Execute(pGPProcess, null);
            }
            catch
            {
                //Failed
            }

        }

  2.3 加載柵格數據

    添加 IRasterDataset 到Map:

// Libraries needed to use this code:
// ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Carto, ESRI.ArcGIS.Display
void  AddRasterLayer(IMap map, IRasterDataset rasterDataset)
{
  // rasterDataset represents a RasterDataset from raster workspace, access workspace or sde workspace.
  // map represents the Map to add the layer to once it is created
       
  // Create a raster layer. Use CreateFromRaster method when creating from a Raster.
  IRasterLayer rasterLayer = new RasterLayerClass();
  rasterLayer.CreateFromDataset(rasterDataset);

  // Add the raster layer to Map 
  map.AddLayer(rasterLayer);

  // QI for availabilty of the IActiveView interface for a screen update
  IActiveView activeView = map as IActiveView;

  if (activeView != null) 
    activeView.Refresh();
}

    創建 IGdbRasterCatalogLayer 

// Libraries needed to run this code:
//   ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Carto 
private IGdbRasterCatalogLayer createGeodatabaseRasterLayer(IRasterWorkspaceEx rasterWorkspaceEx, string catalogName)
{

  // rasterWorkspaceEx represents the workspace wher the raster catalog resides
  // catalogName is the name of the raster catalog 

  IGdbRasterCatalogLayer gdbRasterCatalogLayer = null;
  //Open the raster catalog 
  IRasterCatalog rasterCatalog = null;
  rasterCatalog = rasterWorkspaceEx.OpenRasterCatalog(catalogName);
    
  //Create the GdbRasterCatalogLayer 
  if (rasterCatalog != null)
  {
    gdbRasterCatalogLayer = new GdbRasterCatalogLayerClass();

    if (gdbRasterCatalogLayer.Setup((ITable)rasterCatalog) == false)
    {
      gdbRasterCatalogLayer = null;
      return gdbRasterCatalogLayer;
    }
  }

  return gdbRasterCatalogLayer;
}

    創建 IRasterCatalogLayer

// Libraries needed to run this code:
//   ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.DataSourcesRaster, ESRI.ArcGIS.Carto
public IRasterCatalogLayer createTableBasedRasterLayer(IFeatureWorkspace featureWorkspace, string name)
{
  //featureWorkspace is the workspace where the table based raster catalog resides.
  //name is the name of the raster catalog that will be open 
    
  try
  {
    //Open the raster catalog as a regular table 
    ITable table;
    table = featureWorkspace.OpenTable(name);
       
    //Create raster catalog table
    IRasterCatalogTable catalogTable = new RasterCatalogTableClass();
    catalogTable.Table = table;
    catalogTable.Update();
        
    //Create raster catalog layer
    IRasterCatalogLayer rasterCatalogLayer = new RasterCatalogLayerClass();
    rasterCatalogLayer.Create(catalogTable);
    
    return rasterCatalogLayer; 
  }
  catch (Exception ex)
  {
    System.Diagnostics.Debug.WriteLine(ex.Message);
    return null;
  } 
}

  2.4 管理柵格數據

    更改柵格數據空間參考:

// Libraries needed to run this code: 
//   ESRI.ArcGIS.DataSourcesRaster, ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry 
public static IRaster reprojectRasterDataset(string rasterWorkspaceName, string inRasterDatasetName, 
                                             int projectedCoordinateCode)
{
  IWorkspaceFactory rasterWorkspaceFactory = new RasterWorkspaceFactoryClass();
  IRasterWorkspace rasterWorkspace = rasterWorkspaceFactory.OpenFromFile(rasterWorkspaceName, 0) as IRasterWorkspace;
  IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(inRasterDatasetName);

  // open rasterdataset and get default raster
  IRaster raster = rasterDataset.CreateDefaultRaster();
  System.Console.WriteLine("Created default raster: " + inRasterDatasetName);

  // define spatial reference
  SpatialReferenceEnvironment spatialReferenceEnvironment = new SpatialReferenceEnvironmentClass();
  ISpatialReference projectedSpatialReference = spatialReferenceEnvironment.CreateProjectedCoordinateSystem(projectedCoordinateCode);
  IRasterProps rasterProps = raster as IRasterProps;
  System.Console.WriteLine("Orig Raster Coordinate System: ." + rasterProps.SpatialReference.Name.ToString());
  rasterProps.SpatialReference = projectedSpatialReference;
  System.Console.WriteLine("New Raster Coordinate System: ." + rasterProps.SpatialReference.Name.ToString());

  // set raster property
  rasterProps.Height = (rasterProps.Height / 2);
  rasterProps.Width = (rasterProps.Width / 2);
        
  return raster;
}

    添加影像到鑲嵌數據集:

        /// <summary>
        /// 導入鑲嵌數據集
        /// </summary>
        /// <param name="MDatasetName">鑲嵌數據集名稱</param>
        /// <param name="filePath">物理路徑</param>
        /// <param name="pWorkspace">工作空間</param>
        /// <param name="error"></param>
        /// <returns></returns>
        public static bool InputRasterMoasicDataset(string MDatasetName, string filePath, IWorkspace pWorkspace, out Exception error)
        {
            //Open Dataset
            IMosaicWorkspaceExtensionHelper mosaicExtHelper = new MosaicWorkspaceExtensionHelperClass();
            // Find the right extension from the workspace.
            IMosaicWorkspaceExtension mosaicExt = mosaicExtHelper.FindExtension(pWorkspace);
            // Use the extension to open the mosaic dataset.
            IMosaicDataset theMosaicDataset = mosaicExt.OpenMosaicDataset(MDatasetName);
            try
            {
                Geoprocessor geoprocessor = new Geoprocessor();
                geoprocessor.OverwriteOutput=true;

                AddRastersToMosaicDataset addMosaicDataSet = new AddRastersToMosaicDataset();
                addMosaicDataSet.in_mosaic_dataset = theMosaicDataset;//1  
                addMosaicDataSet.raster_type="Raster Dataset";//2  
                addMosaicDataSet.input_path=filePath;//待入庫的文件目錄  
                addMosaicDataSet.filter="*"+Path.GetExtension(filePath);//匹配入鑲嵌數據集中的文件類型  
                addMosaicDataSet.update_overviews="true";
                addMosaicDataSet.update_boundary = "true";
                addMosaicDataSet.update_cellsize_ranges = "true";
                addMosaicDataSet.maximum_cell_size = 0;
                addMosaicDataSet.minimum_dimension = 1500;
                /** ALLOW_DUPLICATES 全部添加
                 * EXCLUDE_DUPLICATES 只添加更新的
                 * OVERWRITE_DUPLICATES 重寫以前添加的 
                 * */
                addMosaicDataSet.duplicate_items_action = "ALLOW_DUPLICATES";
                IGPProcess pGPProcess = addMosaicDataSet;
                //執行  
                geoprocessor.Execute(pGPProcess, null);
                error = null;
                return true;
            }
            catch (Exception ee)
            {
                error = ee;
                return false;
            } 
        }

    添加影像到柵格目錄:

        /// <summary>
        /// 導入數據(柵格目錄庫)
        /// </summary>
        /// <param name="RCDatasetName">柵格目錄名稱</param>
        /// <param name="filepaths">源數據路徑</param>
        /// <param name="pWorkspace">柵格目錄工作空間</param>
        /// <param name="eError"></param>
        /// <returns></returns>
        private static bool InputRasterCatalogData(string RCDatasetName, string filepaths, IWorkspace pWorkspace, out Exception eError)
        {
            eError = null;

            try
            {
                IRasterCatalogLoader pRCLoader = new RasterCatalogLoaderClass();
                pRCLoader.Workspace = pWorkspace;
                pRCLoader.LoadDatasets(RCDatasetName, filepaths, null);
return true; } catch (Exception eX) { eError = eX; return false; } }

    移除鑲嵌數據集中的數據:

        /// <summary>
        /// 移除鑲嵌數據集中的數據
        /// </summary>
        /// <param name="mosaicDataset">鑲嵌數據集</param>
        /// <param name="sql">刪除命令  例如:name='005'</param>
        public void RemoveMosaicDataSet(object mosaicDataset, string sql)
        {
            Geoprocessor  geoprocessor = null;  
            try {  
                geoprocessor = new Geoprocessor ();  
                geoprocessor.OverwriteOutput=true;
         
                RemoveRastersFromMosaicDataset deleteFeatures = new RemoveRastersFromMosaicDataset();  
                deleteFeatures.in_mosaic_dataset=mosaicDataset;
                deleteFeatures.where_clause=sql;
          
                IGPProcess pGPProcess = deleteFeatures;  
                geoprocessor.OverwriteOutput=true;
                //執行   
                geoprocessor.Execute(pGPProcess, null);  
            } catch{}
        }  

 

For more information,please visit  http://www.cnblogs.com/chen-whutgis/ or write emial to chen_whutgis@163.com .Best Regards!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM