您的位置:首页 > 大数据 > 人工智能

GP学习(十)-Mosaic raster datasets to a file raster format

2016-07-22 20:33 471 查看
<span style="color: rgb(255, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12.48px; line-height: 17.472px;"><strong>声明:仅做自己学习整理用,内容拷贝自ArcEngine SDK开发文档</strong></span>
// Copyright 2010 ESRI
//
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
//
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
//
// See the use restrictions.
//

using System;
using Microsoft.Win32;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataManagementTools;
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.Geoprocessing;
using ESRI.ArcGIS.DataSourcesGDB;

namespace CreateFileRasterMosaic
{
//Sample creating a file raster mosaic from rasters in a folder and its subfolders
//Steps:
//  1. Create an unmanaged PGDB raster catalog
//  2. Load rasters in the input folder and its subfolders to the new raster catalog
//  3. Create a mosaic file raster dataset from the unmanaged raster catalog

class CreateFileRasterMosaic
{
//Local variables for data path
//The TEMP directory will be used to create temporary raster catalog and output raster dataset
//Remove temp.mdb in TEMP directory if it exists
//You can substitute the paths with your data location

static string inputFolder = @"C:\data";
static string outputFolder = @"C:\Temp";
static string outputName = "mosaic.tif";
static string tempRasterCatalog = "temp_rc";
static string tempPGDB = "temp.mdb";
static string tempPGDBPath = outputFolder + "\\" + tempPGDB;
static string tempRasterCatalogPath = tempPGDBPath + "\\" + tempRasterCatalog;

static void Main(string[] args)
{
ESRI.ArcGIS.esriSystem.AoInitialize aoInit = null;
try
{
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
aoInit = new AoInitializeClass();
esriLicenseStatus licStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView);
Console.WriteLine("License Checkout successful.");
}
catch (Exception exc)
{
// If it fails at this point, shutdown the test and ignore any subsequent errors.
Console.WriteLine(exc.Message);
}

try
{
//Create temporary unmanaged raster catalog and load all rasters
CreateUnmanagedRasterCatalog();

//Open raster catalog
IRasterWorkspaceEx rasterWorkspaceEx = (IRasterWorkspaceEx)OpenRasterPGDBWorkspace(tempPGDBPath);
IRasterCatalog rasterCatalog = rasterWorkspaceEx.OpenRasterCatalog(tempRasterCatalog);

//Mosaic rasters in the raster catalog
Mosaic(rasterCatalog);
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}

Console.Write("Please press any key to close the application.");
Console.ReadKey();

//Do not make any call to ArcObjects after ShutDown() call
aoInit.Shutdown();
}

static void CreateUnmanagedRasterCatalog()
{
try
{
//Use geoprocessing to create the geodatabase, the raster catalog, and load our directory
//to the raster catalog.
Geoprocessor geoprocessor = new Geoprocessor();

//Create personal GDB in the TEMP directory
CreatePersonalGDB createPersonalGDB = new CreatePersonalGDB();
createPersonalGDB.out_folder_path = outputFolder;
createPersonalGDB.out_name = tempPGDB;

geoprocessor.Execute(createPersonalGDB, null);

//Create an unmanaged raster catalog in the newly created personal GDB
CreateRasterCatalog createRasterCatalog = new CreateRasterCatalog();

createRasterCatalog.out_path = tempPGDBPath;
createRasterCatalog.out_name = tempRasterCatalog;
createRasterCatalog.raster_management_type = "unmanaged";

geoprocessor.Execute(createRasterCatalog, null);

//Load data into the unmanaged raster catalog
WorkspaceToRasterCatalog wsToRasterCatalog = new WorkspaceToRasterCatalog();

wsToRasterCatalog.in_raster_catalog = tempRasterCatalogPath;
wsToRasterCatalog.in_workspace = inputFolder;
wsToRasterCatalog.include_subdirectories = "INCLUDE_SUBDIRECTORIES";

geoprocessor.Execute(wsToRasterCatalog, null);
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
}

static void Mosaic(IRasterCatalog rasterCatalog)
{
try
{
//Mosaics all rasters in the raster catalog to an output raster dataset
IMosaicRaster mosaicRaster = new MosaicRasterClass();
mosaicRaster.RasterCatalog = rasterCatalog;

//Set mosaicking options, you may not need to set these for your data
mosaicRaster.MosaicColormapMode = rstMosaicColormapMode.MM_MATCH;
mosaicRaster.MosaicOperatorType = rstMosaicOperatorType.MT_LAST;

//Open output workspace
IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();
IWorkspace workspace = workspaceFactory.OpenFromFile(outputFolder, 0);

//Save out to a target raster dataset
//It can be saved to TIFF, IMG, GRID, BMP, GIF, JPEG2000, JPEG, Geodatabase, ect.
ISaveAs saveas = (ISaveAs)mosaicRaster;
saveas.SaveAs(outputName, workspace, "TIFF");
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
}

static IWorkspace OpenRasterPGDBWorkspace(string connStr)
{
Type t = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");
System.Object obj = Activator.CreateInstance(t);
IWorkspaceFactory2 workspaceFactory = obj as IWorkspaceFactory2;
return workspaceFactory.OpenFromFile(connStr, 0);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arcengine GP