zoukankan      html  css  js  c++  java
  • Arcgis Engine(ae)接口详解(6):workspace操作

                    //此处用的workspace来源与用户选择
                    IWorkspace workspace = null;
    
                    //workspace一般等同于数据库
    
                    //工作空间类型,也可理解为数据库类型
                    //esriFileSystemWorkspace:可能为shp
                    //esriLocalDatabaseWorkspace:可能为file gdb,mdb
                    //esriRemoteDatabaseWorkspace:可能为sde
                    esriWorkspaceType workspaceType = workspace.Type;
    
                    //路径,对于本地文件类型的(例如shp,file gdb,mdb)有意义,就是他们的文件路径
                    string path = workspace.PathName;
    
                    //数据库连接配置,通常对于sde有效
                    IPropertySet propertySet = workspace.ConnectionProperties;
                    //以下是遍历他的值的代码
                    object objNames = null;
                    object objValue = null;
                    //获取所有值,结构是类似字段的key/value格式,参数1是name的数组,参数2是value的数组                
                    //参数类型是object,但实际分别是string数组和object数组
                    propertySet.GetAllProperties(out objNames, out objValue);
                    string[] names = (string[])objNames;
                    object[] values = (object[])objValue;
                    //遍历获取各个值
                    for (int i = 0; i < names.Length; i++)
                    {
                        //参数名
                        string name = names[i];
                        //参数值
                        string value = values[i].ToString();
                    }
    
                    //以下代码由于不具备测试数据,只看代码不运行
                    if (1 == 2)
                    {
                        //执行原生sql
                        //如果Workspace数据类型是数据库如sde,可以通过此方法执行原生sql
                        //这里只能执行不返回结果的sql,例如insert,update等,而不能select
                        workspace.ExecuteSQL("update xxx set eee=111");
                    }
    
                    //PS:以上代码可以获取sde数据库的配置,但密码获取到的是乱码,因为想在ae获取sde完整的连接参数(通常用于再次新建对sde的连接)是不可能的
    
                    //遍历workspace下所有的数据集
                    //get_Datasets方法用于获取workspace下的成员,参数1是获取的数据类型
                    //IEnum开头的接口类似于游标,用于遍历一些查询结果
                    IEnumDataset enumDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
                    enumDataset.Reset();
                    //因为下面还要遍历数据集下的featureClass,因此用了IFeatureDataset,其实也可以as到IDataset
                    IFeatureDataset featureDataset = null;
                    while ((featureDataset = enumDataset.Next() as IFeatureDataset) != null)
                    {
                        //数据集的基础属性
    
                        IDataset dataset = featureDataset as IDataset;
                        //数据集名称
                        string datasetName = dataset.Name;
                        //数据集类型
                        esriDatasetType datasetType = dataset.Type;
    
                        //IGeoDataset是几何相关的接口
                        IGeoDataset geoDataset = featureDataset as IGeoDataset;
                        //空间参考
                        ISpatialReference spatialReference2 = geoDataset.SpatialReference;
    
    
                        //获取数据集下所有的featureClass
    
                        IFeatureClassContainer featureClassContainer = featureDataset as IFeatureClassContainer;
                        IEnumFeatureClass enumFeatureClass = featureClassContainer.Classes;
                        enumFeatureClass.Reset();
                        IFeatureClass featureClass = null;
                        //遍历数据集里的要素类
                        while ((featureClass = enumFeatureClass.Next()) != null)
                        {
    
    
                        }
                        //IEnum开头的接口用完都要手动释放(与游标一样)
                        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(enumFeatureClass);
                    }
                    //IEnum开头的接口用完都要手动释放(与游标一样)
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(enumDataset);
    
                    //遍历workspace下的featureClass
                    //PS:结合上面的代码可以注意到,获取数据集下的featureClass和获取workspace下的featureClass的代码是分开的
    
                    enumDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
                    enumDataset.Reset();
                    IFeatureClass featureClass2 = enumDataset.Next() as IFeatureClass;
                    while ((featureClass2 = enumDataset.Next() as IFeatureClass) != null)
                    {
    
                    }
                    //IEnum开头的接口用完都要手动释放(与游标一样)
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(enumDataset);
    
                    //获取Workspace的所有FeatureClass(包括Dataset里面的)
                    List<IFeatureClass> lstFeatureClass = WorkspaceEdmHelper.GetAllFeatureClassInWorkspace(workspace as IFeatureWorkspace);
    
                    //Workspace关于featureClass操作的接口
                    IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
                    //以下代码由于不具备测试数据,只看代码不运行
                    if (1 == 2)
                    {
                        //通过名称获取featureClass
                        //PS:即使featureClass在数据集下也可以这样获取,这点跟遍历不同
                        featureClass2 = featureWorkspace.OpenFeatureClass("www");
    
                        //通过名称获取数据集
                        featureDataset = featureWorkspace.OpenFeatureDataset("rrr");
    
    
                        //通过文件路径或数据库连接参数,新建数据库或打开数据库
    
                        //创建File Gdb,参数1是文件所在文件夹,参数2是数据库名称
                        //由于一个file gdb数据库等同于一个workspace,因此创建file gdb等同于创建workspace                    
                        featureWorkspace = WorkspaceEdmHelper.CreateFileGdb("C:\aaa", "test.gdb");
    
                        //创建personal gdb(mdb),参数1是文件所在文件夹,参数2是数据库名称
                        featureWorkspace = WorkspaceEdmHelper.CreatePersonalGdb("C:\aaa", "test.mdb");                   
                    }
  • 相关阅读:
    union all 与order by的连用
    oracle--trunc与to_char的区别
    oracle函数--trunc
    大公司能给你什么
    要么忍要么滚
    scp报错:not a regular file,解决方法:加参数 -r
    hive中的一种假NULL现象
    使用Python scikit-learn 库实现神经网络算法
    随机梯度下降算法求解SVM
    机器学习算法--svm实战
  • 原文地址:https://www.cnblogs.com/cannel/p/11074323.html
Copyright © 2011-2022 走看看