zoukankan      html  css  js  c++  java
  • 创建FILE GEODATABASE 和栅格目录及向栅格目录中添加影像

    using System;
    using System.IO;
    using ESRI.ArcGIS.DataSourcesGDB;
    using ESRI.ArcGIS.DataSourcesRaster;
    using ESRI.ArcGIS.Geodatabase;
    using ESRI.ArcGIS.Geometry;
    using ESRI.ArcGIS.DataManagementTools;
    using ESRI.ArcGIS.Geoprocessor;
    using ESRI.ArcGIS.Geoprocessing;
    using ESRI.ArcGIS.esriSystem;
    using ESRI.ArcGIS.DataSourcesFile;
    using ESRI.ArcGIS.Carto;
    namespace RasterOperation
    {
    public class RasterCatalogOperation
    {
    /// <summary>
    /// fileGDB路径
    /// </summary>
    public string FileGDBPath
    {
    get ;
    set ;
    }
    /// <summary>
    /// 栅格数据目录
    /// </summary>
    public string SourceRasterDic
    {
    get;
    set;
    }
    /// <summary>
    /// 栅格目录名称
    /// </summary>
    public string RasterDSName
    {
    get;
    set;
    }
    /// <summary>
    /// 栅格坐标系
    /// </summary>
    public ISpatialReference RasterSpRf
    {
    get;
    set;
    }
    /// <summary>
    /// 矢量坐标系
    /// </summary>
    public ISpatialReference GeometrySpRf
    {
    get;
    set;
    }
    /// <summary>
    /// 栅格目录转换为图层
    /// </summary>
    /// <param name="folderName">目录名</param>
    /// <param name="datasetName">数据集名</param>
    /// <returns>要素图层</returns>
    public ILayer AddRasterCatalogLayer(string folderName, string datasetName)
    {
    IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();
    try
    {
    IWorkspace workspc = workspaceFactory.OpenFromFile(folderName, 0);
    IRasterWorkspaceEx pRaterWs = (IRasterWorkspaceEx)workspc;
    IRasterCatalog rasterCatalog = pRaterWs.OpenRasterCatalog(datasetName);
    ESRI.ArcGIS.Carto.IGdbRasterCatalogLayer rastercatalogLayer = new
    GdbRasterCatalogLayerClass();
    rastercatalogLayer.Setup((ITable)rasterCatalog);
    //Add it to map if the layer is valid.
    if (!(rastercatalogLayer == null))
    {
    return rastercatalogLayer as ILayer;
    }
    else
    return null;
    }
    catch
    {
    return null;
    }
    //Create a raster catalog layer.

    }

    /// <summary>
    /// 创建FileGDB
    /// </summary>
    /// <param name="fullPath">路径名</param>
    public void CreateFileGDB(string fullPath)
    {
    if (!Directory.Exists(fullPath))
    {
    IWorkspaceFactory2 wsFctry = new FileGDBWorkspaceFactoryClass();
    wsFctry.Create(System.IO.Path.GetDirectoryName(fullPath),
    System.IO.Path.GetFileName(fullPath), null, 0);
    FileGDBPath = fullPath;
    wsFctry = null;
    }
    }

    /// <summary>
    /// 创建RasterCatalog
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="catalogName">名称</param>
    /// <param name="rasterCoordSys">栅格坐标系</param>
    /// <param name="geometryCoordsys">矢量坐标系</param>
    public void CreateRasterCatalog_GP(string path, string catalogName, ISpatialReference rasterCoordSys, ISpatialReference geometryCoordsys)
    {
    //坐标转换
    //Coordinate system for raster column
    IGPCoordinateSystem rSR = new GPCoordinateSystemClass();
    rSR.SpatialReference = rasterCoordSys;
    //Coordinate system for geometry column
    IGPSpatialReference gSR = new GPSpatialReferenceClass();
    gSR.SpatialReference = geometryCoordsys;

    //初始化GeoProcessor
    ESRI.ArcGIS.Geoprocessor.Geoprocessor geoProcessor = new ESRI.ArcGIS.Geoprocessor.Geoprocessor();
    RasterDSName = catalogName;
    //创建工具
    CreateRasterCatalog createRasterCatalog = new CreateRasterCatalog();

    //设置参数
    createRasterCatalog.out_path = path;
    createRasterCatalog.out_name = catalogName;
    createRasterCatalog.raster_spatial_reference = rSR;
    createRasterCatalog.spatial_reference = gSR;

    //利用工具创建RasterCatalog
    geoProcessor.Execute(createRasterCatalog, null);
    //ReturnMessages(geoProcessor);
    }

    //GP message handling
    public void ReturnMessages(Geoprocessor gp)
    {
    if (gp.MessageCount > 0)
    {
    for (int Count = 0; Count <= gp.MessageCount - 1; Count++)
    {
    Console.WriteLine(gp.GetMessage(Count));
    }
    }
    }
    //static string rasterFolder = @"c: empdata";
    //static string outRC = @"Database Connectionsconnection to raster.sde c_203";
    //LoadDirtoRasterCatalog(outRC, rasterFolder);


    /// <summary>
    /// 输入整个目录到库中
    /// </summary>
    /// <param name="outRasterCatalog">目标栅格库全路径</param>
    /// <param name="inputDir">输入目录</param>
    public void LoadDirtoRasterCatalog(string outRasterCatalog, string inputDir)
    {
    if (!Directory.Exists(inputDir))
    {
    System.Windows.Forms.MessageBox.Show("路径不正确,请重新输入", "提示");
    return;
    }
    //初始化 GeoProcessor
    ESRI.ArcGIS.Geoprocessor.Geoprocessor geoProcessor = new ESRI.ArcGIS.Geoprocessor.Geoprocessor();

    //设置参数
    IVariantArray parameters = new VarArrayClass();

    //输入的文件夹目录
    parameters.Add(inputDir);

    //目标栅格库路径
    parameters.Add(outRasterCatalog);

    //Execute the tool to load rasters in the directory to raster catalog
    geoProcessor.Execute("WorkspaceToRasterCatalog", parameters, null);
    // ReturnMessages(geoProcessor);
    }
    /// <summary>
    /// 选择要素的坐标系
    /// </summary>
    /// <param name="refFileName"></param>
    /// <returns></returns>
    public ISpatialReference InputReferece()
    {
    System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
    if (SourceRasterDic != string.Empty || SourceRasterDic != " ")
    {
    openFileDialog.InitialDirectory = SourceRasterDic;

    }
    openFileDialog.Title = "加载图层数据";
    openFileDialog.Filter = "Tif文件(*.tif)|*.tif|Shp文件(*.shp)|*.shp|Jpg文件(*.jpg)|*.jpg|Bmp文件(*.bmp)|*.bmp|Gif文件(*.gif)|*.gif|Img文件(*.img)|*.img|Png文件(*.png)|*.png|Tiff文件(*.tiff)|*.tiff";
    openFileDialog.Multiselect = false;
    openFileDialog.DefaultExt = "*.tif|*.shp";
    openFileDialog.SupportMultiDottedExtensions = true;
    string refFileName = string.Empty;
    if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
    refFileName = openFileDialog.FileName;
    }
    else
    {
    return null;
    }
    IWorkspaceFactory pWorkspaceFactory = null;
    string p = System.IO.Path.GetExtension(refFileName);
    string fileNameWithoutExtentsion = System.IO.Path.GetFileNameWithoutExtension(refFileName);
    string pathName = System.IO.Path.GetDirectoryName(refFileName);
    string fileName = System.IO.Path.GetFileName(refFileName);
    if (p == ".shp" || p == ".SHP")
    {
    IFeatureWorkspace ws;
    IFeatureClass pFeatureClass;
    pWorkspaceFactory = new ShapefileWorkspaceFactory();
    ws = pWorkspaceFactory.OpenFromFile(pathName, 0) as IFeatureWorkspace;
    pFeatureClass = ws.OpenFeatureClass(fileName);
    ws = null;
    return (pFeatureClass as IGeoDataset).SpatialReference;
    }
    if (p == ".jpg" || p == ".bmp" || p == ".gif" || p == ".img" || p == ".png" || p == ".tif" || p == ".tiff"
    || p == ".JPG" || p == ".BMP" || p == ".GIF" || p == ".IMG" || p == ".PNG" || p == ".TIF" || p == ".TIFF")
    {
    IRasterLayer pRasterLayer = new RasterLayerClass();
    IRasterWorkspace pRasterWorkspace;
    IRaster pRaster;
    IRasterDataset pRasterDataset;
    IWorkspace pWorkspace;
    pWorkspaceFactory = new RasterWorkspaceFactoryClass();
    pWorkspace = pWorkspaceFactory.OpenFromFile(pathName, 0);//0
    pRasterWorkspace = pWorkspace as IRasterWorkspace;
    pRasterDataset = pRasterWorkspace.OpenRasterDataset(fileName);
    pRaster = pRasterDataset.CreateDefaultRaster();
    pRasterLayer.CreateFromRaster(pRaster);
    IRasterProps pRasterProps = pRasterLayer.Raster as IRasterProps;
    return pRasterProps.SpatialReference;
    }
    return null;
    }
    /// <summary>
    /// 获取要素数据集
    /// </summary>
    /// <param name="workspace">工作空间</param>
    /// <returns>要素数据集</returns>
    public IFeatureClass GetFirstFClass(IWorkspace workspace)
    {
    IFeatureClass FClass = null;
    IEnumDataset enumDataset = workspace.get_Datasets(esriDatasetType.esriDTAny);
    enumDataset.Reset();
    IDataset perFeatSet = enumDataset.Next();
    while (perFeatSet != null)
    {
    esriDatasetType getDatasetType = perFeatSet.Type;
    switch (getDatasetType)
    {

    case esriDatasetType.esriDTFeatureClass:
    ILayerFactoryHelper layerFactoryHelper = new LayerFactoryHelperClass();
    IEnumLayer enumLayer = layerFactoryHelper.CreateLayersFromName(perFeatSet.FullName);
    enumLayer.Reset();
    ILayer layer = enumLayer.Next();
    while (layer != null)
    {
    //筛选出第一个面状要素数据集
    if (layer is IFeatureLayer &&
    (layer as IFeatureLayer).FeatureClass.ShapeType
    == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
    {
    return (layer as IFeatureLayer).FeatureClass;
    }
    layer = enumLayer.Next();
    }
    System.Runtime.InteropServices.Marshal.ReleaseComObject(enumLayer);
    break;
    case esriDatasetType.esriDTFeatureDataset:
    case esriDatasetType.esriDTTable:
    case esriDatasetType.esriDTRasterDataset:
    break;
    default:
    break;
    }
    perFeatSet = enumDataset.Next();
    }
    System.Runtime.InteropServices.Marshal.ReleaseComObject(enumDataset);
    return FClass;
    }
    }

    }

    来自:http://www.cnblogs.com/wylaok/archive/2012/07/20/2600660.html

  • 相关阅读:
    殷浩详解DDD:如何避免写流水账代码?
    如何从 0 到 1 开发 PyFlink API 作业
    探秘RocketMQ源码——Series1:Producer视角看事务消息
    教父郭盛华透露:PHP编程语言中多个代码执行缺陷
    互联网用户仍然容易受到黑客社会工程学攻击
    揭秘郭盛华在世界的排名,才华与颜值并存的男神
    什么是逆向工程?黑客是如何构建可利用的漏洞?
    人工智能时代,计算机网络主要面临哪些安全威胁?
    【2020-10-01】国庆堵车不堵心
    【2020-09-30】走起来慢,但实际很快
  • 原文地址:https://www.cnblogs.com/gisoracle/p/3823497.html
Copyright © 2011-2022 走看看