博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)AE加载不同数据的方法(GeoDatabase空间数据管理)
阅读量:6432 次
发布时间:2019-06-23

本文共 5964 字,大约阅读时间需要 19 分钟。

 

先看一下GeoDatabase核心结构模型图:

 

   

 

1  工作空间工厂WorkspaceFactory对象

 

   WorkspaceFactory是GeoDatabase的入口,是一个抽象类,拥有很多子类,例如SdeWorkspaceFactory, AccessWorkspaceFactory, ShapfileWorkspaceFactory  CadWorkspaceFactory等

 

   IWorkspaceFactory接口定义了所有工作空间对象的一般属性和方法

 

   public  Create ( parentDirectory, Name, ConnectionProperties, hWnd);用于产生一个新的工作空间名称对象,前两个参数是数据库的路径和名称,第三个参数是一个属性集(properset)对象。   public  Open (  ConnectionProperties, hWnd);打开一个已经存在的工作空间像SDE数据库等;

 

      public  OpenFromFile ( fileName, hWnd);打开一个文件类型的数据

 

 

 

2 工作空间WorkSpace对象

 

   Workspace在逻辑上是一个包含空间数据集和非空间数据集的数据容器,数据包括要素类、栅格数据集、表等对象

 

   Workspace对象主要的一些接口:

 

        1 IWorkspace接口:定义了一个工作空间最普通的属性和方法。

 

        2  IFeatureWorkspace接口

 

        这个接口主要用于管理要素的数据集,如表(Table)、对象类(ObjectClass)、要素类(FeatureClass)、要素数据集(FeatureDataset)和关系类(RelationshipClass)等。

 

   主要的成员:

 

  

 

   public  OpenFeatureClass (  Name打开一个已经存在的要素类,无论这个要素类是在工作空间还是在一个要素数据集中   public  OpenFeatureDataset ( Name);打开一个已经存在的要素数据集   public  OpenTable ( Name);打开一个已经存在的表;

 

3 RasterWorkspace对象

 

   主要实现了IRasterWorkspace接口

 

    public  OpenRasterDataset (  Name);

 

4 属性集Propertyset对象

 

  Propertyset对象是一个专门用于设置属性的对象,它是一种name-value对应的集合,类似于Hash表。属性名必须是字符串,属性值可以是字符串、数值或日期也可以是一个对象

 

  public  SetProperty ( Name,  Value);

 

5 DataSet数据集对象

 

   Dataset对象可分为两大类:Table和GeoDataset,GeoDataset是一个抽象类,代表了拥有空间属性的数据集,包括FeatureDataset、要素类FeatureClass、TIN和栅格数据集RasterDataset。

 

6  FeatureDataset对象

 

 实现的主要接口:

 

1 IFeatureDataset接口

 

      public  Subsets {get;}Datasets contained within this dataset.

 

2 IFeatureClassContainer接口

 

   用于管理要素数据集里面的要素类,该接口的ClassByName和Class(index)等属性可以用来获取数据集中的特定的要素类(这里很奇怪在帮助文档中只有属性没有方法但点进去却是一个方法Ok你大概不理解我说的)

 

 

 

       public  get_Class ( ClassIndex);

 

       public  get_ClassByID ( ID);

 

      public  get_ClassByName ( Name);

 

 

 

   接下来举几个加载各种数据的例子

 

   1 加载Shapefiles文件

 

            OpenFileDialog dlg=new OpenFileDialog();

            dlg.Title="打开shapefile文件";
            dlg.Filter="(*.shp)|*.shp";
            dlg.ShowDialog();
            string filename=dlg.FileName;
            int index=filename.LastIndexOf(@"\");
            string path=filename.Substring(0,index);
            string name=filename.Substring(index+1);

 

            IWorkspaceFactory pWsFactory = new ShapefileWorkspaceFactoryClass();

            IFeatureWorkspace  pWorkSpace = pWsFactory.OpenFromFile(path, 0) as IFeatureWorkspace;
            IFeatureClass pFeatureClass = pWorkSpace.OpenFeatureClass(name);
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            pFeatureLayer.Name = pFeatureClass.AliasName;
            pFeatureLayer.FeatureClass = pFeatureClass;

 

            axMapControl1.Map.AddLayer(pFeatureLayer);

            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

 

   2.加载栅格数据

 

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Title = "打开Raster文件";
            dlg.Filter = " Layer File(*.lyr)|*.jpg;*.bmp;*.tiff ";
            dlg.ShowDialog();
            string filename = dlg.FileName;
            int index = filename.LastIndexOf(@"\");
            string path = filename.Substring(0, index);
            string name = filename.Substring(index + 1);

 

            IWorkspaceFactory pWsFactory =new RasterWorkspaceFactoryClass();

            IRasterWorkspace pRasterWorkspace = pWsFactory.OpenFromFile(path, 0) as IRasterWorkspace;
            IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(name);
            IRasterLayer pRasterLayer = new RasterLayerClass();
            pRasterLayer.CreateFromDataset(pRasterDataset);
            axMapControl1.Map.AddLayer(pRasterLayer);
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

 

    3 加载CAD数据

 

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Title = "打开CAD文件";
            dlg.Filter = " CAD(*.dwg)|*.dwg|All Files(*.*)|*.* ";
            dlg.ShowDialog();
            string filename = dlg.FileName;
            int index = filename.LastIndexOf(@"\");
            string path = filename.Substring(0, index);
            string name = filename.Substring(index + 1);

 

            IWorkspaceFactory pWsFactory = new CadWorkspaceFactoryClass();

            IFeatureWorkspace pFeatureWorkspace = pWsFactory.OpenFromFile(path, 0) as IFeatureWorkspace;
            IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(name);
            IFeatureClassContainer pFCContainer = pFeatureDataset as IFeatureClassContainer;
            for (int i = 0; i < pFCContainer.ClassCount; i++)
            {
                IFeatureClass pFeatureClass = pFCContainer.get_Class(i);
                if (pFeatureClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
                {
                    IFeatureLayer pFeatureLayer = new CadAnnotationLayerClass();

 

                }

                else
                {
                    IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                    pFeatureLayer.FeatureClass = pFeatureClass;
                    pFeatureLayer.Name = pFeatureClass.AliasName;
                    axMapControl1.Map.AddLayer(pFeatureLayer);

 

                }

                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

 

      4 加载PersonGeodatabase数据

 

        

 

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Title = "打开Geodatabase文件";
            dlg.Filter = " Personal Geodatabase(*.mdb)|*.mdb|All Files(*.*)|*.* ";
            dlg.ShowDialog();
            string path = dlg.FileName;

 

            IWorkspaceFactory pAccessWorkspaceFactory;

            IFeatureWorkspace pFeatureWorkspace;
            IFeatureLayer pFeatureLayer;
            IFeatureDataset pFeatureDataset;
            pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
          
            IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(path, 0);
            IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);
            pEnumDataset.Reset();
            IDataset pDataset = pEnumDataset.Next();
           
            if (pDataset is IFeatureDataset)
            {
                pFeatureWorkspace = (IFeatureWorkspace)pAccessWorkspaceFactory.OpenFromFile(path, 0);
                pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name);
                IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;
                pEnumDataset1.Reset();
                IDataset pDataset1 = pEnumDataset1.Next();
               
                if (pDataset1 is IFeatureClass)
                {
                    pFeatureLayer = new FeatureLayerClass();
                    pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset1.Name);
                    pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
                    axMapControl1.Map.AddLayer(pFeatureLayer);
                    axMapControl1.ActiveView.Refresh();
                }
               
              
            }
            else
            {
                pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
                pFeatureLayer = new FeatureLayerClass();
                pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset.Name);
                pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
                axMapControl1.Map.AddLayer(pFeatureLayer);
                axMapControl1.ActiveView.Refresh();
            }

 

 

转载于:https://www.cnblogs.com/linhugh/archive/2012/04/06/2435235.html

你可能感兴趣的文章
JavaScript颜色选择器插件
查看>>
区块链和电子商务 | 大规模电子购物
查看>>
深入理解Fsync
查看>>
c++构造函数详解
查看>>
定制 LAMP 网站服务平台
查看>>
shell中数字计算方法(bc/expr/$(())/let/awk)
查看>>
关于CDH6的一些介绍
查看>>
bzoj 2456: mode
查看>>
windows 2008下无法改变文件(文件夹)权限时,可以看一下其所有者
查看>>
Python的系统管理_04_python_函数
查看>>
linux 修改计算机名
查看>>
在Windows Server 2008 R2中禁用 IPv6
查看>>
2950交换机SI与EI区别
查看>>
Java 数据类型
查看>>
JVM性能优化
查看>>
zabbix1.8.3 安装配置
查看>>
RH124-06 文件系统权限
查看>>
源码安装 php+nginx 构建BBS平台 (以CentOS6为例)
查看>>
你使用DBA数据库吗?
查看>>
const
查看>>