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

          实现过程:创建或打开一个FileGDB-->创建或打开一个栅格目录-->选择一个文件夹,把此文件夹下的栅格数据导入栅格目录:

    下面为核心代码

    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:\tempdata";
            //static string outRC = @"Database Connections\connection to raster.sde\rc_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;
            } 
        }
    
    }
  • 相关阅读:
    2016年3月17日----Javascript的正则表达式
    2016年3月17日----Javascript的时间与日期
    2016年3月9日----Javascript的对象和数组
    2016年3月8日----Javascript的函数
    2016年3月7日----Javascript的运算符
    2016年3月7日----Javascript的数据类型
    2016年3月1日----Javascript的数组元素的添加、移除以及其他常用方法
    console深入理解
    浏览器特性和安全策略
    每日新知
  • 原文地址:https://www.cnblogs.com/wylaok/p/2600660.html
Copyright © 2011-2022 走看看