//此处用的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 = ; i < names.Length; i++)
{
//参数名
string name = names[i];
//参数值
string value = values[i].ToString();
} //以下代码由于不具备测试数据,只看代码不运行
if ( == )
{
//执行原生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 ( == )
{
//通过名称获取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");
}

Arcgis Engine(ae)接口详解(6):workspace操作的更多相关文章

  1. JDBC常用接口详解

    JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...

  2. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  3. socket接口详解

    1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...

  4. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第八十三章:内部类与接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...

  7. [转载]MII/MDIO接口详解

    原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...

  8. map接口详解

    1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...

  9. ReadWriteLock 接口详解

    ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); 只要没有写锁,读锁可 ...

  10. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

随机推荐

  1. 工作记录:maven远程下载的问题

    最近使用maven的时候遇到一个问题,每次构建都从https://repository.apache.org/snapshots仓库下载一些maven-metadata.xml,但是公司的环境又连不上 ...

  2. [android开发篇]项目目录结构

  3. sql server中的数据类型转换函数

    1.cast(字段名 as varchar(40)) 2.convert(varchar(50),字段名)  日期转换: CONVERT(varchar(20), GETDATE(),120)

  4. 新一代 javascript 模板引擎

    artTemplate-3.0 新一代 javascript 模板引擎 <!DOCTYPE html> <html lang="en"> <head& ...

  5. [UOJ#128][BZOJ4196][Noi2015]软件包管理器

    [UOJ#128][BZOJ4196][Noi2015]软件包管理器 试题描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管 ...

  6. 雅礼培训 Problem A 【线段树】

    题意 维护一段区间,支持求区间最大值,区间且,区间或 \(n,q<=2*10^5\) 题解 我们用线段树维护区间最大值 对于and和or运算, and实质就是强行把一些位改为0 or实质就是强行 ...

  7. BZOJ3130 [Sdoi2013]费用流 【网络流 + 二分】

    题目 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案必须满足:(1)每 ...

  8. BZOJ2244 [SDOI2011]拦截导弹 【cdq分治 + 树状数组】

    题目 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高于前一发的高度,其 ...

  9. oracle的split函数

    PL/SQL 中没有split函数,需要自己写. 代码: create or replace type type_split as table of varchar2(50);  --创建一个 typ ...

  10. Python脚本实现值更新事件赋值过程记录日志监控

    #LogWatch 实现值更新事件赋值过程记录日志监控 clr.AddReference('System') clr.AddReference('Kingdee.BOS') clr.AddRefere ...