AE接口使用理解Geodatabase篇(一)
来源:互联网 发布:淘宝退款骗局揭秘 编辑:程序博客网 时间:2024/04/30 03:01
Geodatabase类型:
1.personal:ACCESS数据库,2G数据
2.file:作用于1相同,不需要一栏ACCESS
3.ArcSDE:基于大型关系数据库,如:SQL SERVER,Oracle,DB2,是基于关系型数据库基础上的地理数据库服务器。
1). Dataset:
A: 用于简单数据集,如table,feature class,geometric network,topologies,
打开数据集:通过接口IFeatureWorkspace和IFeatureClassContainer使用open方法打开已存在的数据集
创建新数据集:IFeatureWorkspace的CreateFeatureClassf方法,要求提供数据及名称,fields,以及在geodatabase中的存储方式。
B: network datasets,terrains,representations,cadastral fabrics.
打开数据集:IDatasetContainer2,提供数据集名或索引
创建数据集:IDatasetContainer2的CreateDataset方法,提供dataelement
2)
ITable.CreateRow, IFeatureClass.CreateFeature分别设置属性和空间几何对象,然后调用IRow.Store和IFeatureClass.Store方法保存
创建多行和多个feature
ITable.CreateRowBuffer和IFeatureClass.CreateFeatureBuffer创建,用ITable.Insert和IFeatureClass.Insert保存
4)Fields:组成Tables, Objects和Features
通过IFields 和IIndex接口访问,当创建了字段集合以后,将Fields作为参数传给IFeatureWorkspace.CreateFeatureClass方法,用于创建feature class。
对已存在的数据集进行添加、删除字段操作,使用IClass接口的AddField,DeleteField和FindField方法,而不是IFieldsEdit接口
5)Domains:数据约束(属性规则),给字段指定有效值,存在于工作空间级别,可以被多个object class中的字段共享
类型:CodedValueDomain以字符串的形式给出某字段所有的有效值
RangeDomain以最大最小值的形式给出某字段的取值范围
IField 读取字段信息,IFieldEdit修改字段信息
6)Subtypes:将具有相似规则与行为的对象划分到单独的objectclass中,在单个的objectclass中定义,不能共享,通过ISubtypes接口访问
7)Cursors和selection sets
A. cursors用于逐条遍历记录,只能往一个方向遍历
类型:search:检索、编辑记录 ; update:编辑、删除记录; insert:添加记录。
创建:通过接口ITable,IFeatureClass,ISelectionSet,IQueryDef创建,三种类型的cursors都可以通过ICursor和IFeatureCursor访问
B. selection sets包含了某个数据集的子集,并一定包含ObjectID字段,通常通过ITable.Select方法获取,可以反复遍历多次
8) Queries:
最简单的查询方法:ITable.Search和ITable.Select分别返回search cursor和selection set 通过IQueryFilter接口访问
如果只获取符合条件的记录中的某几个字段的值,可以通过IQueryFilter.SubFields属性获取
ISpatialFilter:
IQueryDef:联合查询。
一,只能对同一工作空间中的对象进行查询, 使用WhereClause属性设置联合查询条件;SubFields属性设置结果集中的字段集合;Evaluate方法获取查询结果。
二、从已存在的QueryDef对象创建query table,即创建IQueryName2类型的对象,并肩已有的QueryDef对象赋值给IQueryName2.QueryDef属性
public void QueryName2_Direct(IWorkspace workspace)
{
IFeatureWorkspace pFtWS=(IFeatureWorkspace)workspace;
IQueryDef queryDef=pFtWS.CreateQueryDef();
queryDef.SubFields="*";
queryDef.Table="parcels,house_listings";
queryDef.WhereClaus="parcel.parcel_id=house_listing.parcel_id";
IQueryName2 queryName2=new TableQueryNameClass();
queryName2.PrimaryKey="parcel.parcel_id";
queryName2.QueryDef=queryDef;
}
三、根据relationship类对象创建RelQueryTable对象,用以联接任意数据源的数据进行联合查询,实现ITable和IFeatureClass接口
public void RelQryTabExample(IFeatureClass featureClass,string featureClassField,ITable table,string tableField)
{
IMemoryRelationshipClassFactory memoryRelationClassFactory = new MemoryRelationshipClassFactoryClass();
IRelationshipClass relationshioClass = memoryRelationClassFactory.Open("samplejoin",(IObjectClass)featureClass,featureClassField,(IObjectClass)table,tableField,"forward","backward",esriRelCardinality.esriRelCardinalityOneToMany);
IRelQueryTableFactory relQueryTableFactory = new RelQueryTableFactoryClass();
ITable relQueryTable = (ITable)relQueryTableFactory.Open(relationshioClass,true,null,null,"",true,true);
ICursor cursor = relQueryTable.Search(null,true);
IFields fields = cursor.Fields;
int i = fields.FieldCount;
for (int j = 0; j < i;j++)
{
IField field = fields.get_Field(j);
Console.WriteLine(field.Name);
}
}
- AE接口使用理解Geodatabase篇(一)
- AE接口使用理解Geodatabase篇
- Geodatabase 理解
- Geodatabase 10.2新特性(一)
- AE初学的一点理解及有关QI(接口查询)
- ArcGIS——数据库与服务备份(一、oracle中的geodatabase备份使用impdp与expdp)
- ArcGIS Engine开发Geodatabase代码(一)——Cursors
- 关于AO和AE中使用小问题(新手理解)
- 用AE(C#)怎么新建Geodatabase(非专业人士专用)
- AE开发之路(一)
- 接口测试理解一
- AE接口解析
- Geodatabase概述(翻译)
- Geodatabase
- geodatabase
- ESRI的Geodatabase设计指导[理解数据结构]
- ESRI的Geodatabase设计指导[理解数据结构]
- 深入理解Java接口(一)
- 优化SQL查询:如何写出高性能SQL语句
- 百度2013校园招聘笔试题 个人答案分析
- (转)Android中Preference的使用以及监听事件分析
- vs快捷键(全面)
- PhoneGap 文件上传(Java 后台代码)
- AE接口使用理解Geodatabase篇(一)
- 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view
- 第一次作业
- 灵活有效的数据仓库解决方案:仓库设计和数据建模
- php图像压缩类
- json的初步认识
- 在CentOS上安装Git
- Android 面试题 经典