ArcGIS接口总结

更新时间:2024-06-29 11:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ARCGIS接口详细说明

ArcGIS接口详细说明

目录

ArcGIS接口详细说明... 1

1. IField接口(esriGeoDatabase)... 2 2. IFieldEdit接口(esriGeoDatabase)... 2 3. IFields接口(esriGeoDatabase)... 2 4. IRow接口(esriGeoDatabase)... 3 5. ITable接口(esriGeoDatabase)... 3 6. IArea接口(esriGeometry)... 4 7. IEnvelope接口(esriGeometry)... 4 8. IPoint接口(esriGeometry)... 5 9. IPointArray接口(esriGeometry)... 5 10. IPointCollection接口(esriGeometry)... 6 11. IPolyline接口(esriGeometry)... 6 12. IGeometry接口(esriGeometry)... 6 13. IFeature接口(esriGeoDatabase)... 7 14. IFeatureLayer接口(esriCarto)... 8 15. IFeatureClass接口(esriGeoDatabase)... 8 16. IFeatureCursor接口(esriGeoDatabase)... 9 17. ISpatialFilter接口(esriGeoDatabase)... 9 18. IQueryFilter接口(esriGeoDatabase)... 11 19. IFeatureSelection接口(esriCarto)... 11 20. IMap接口(esriCarto). 11

21. IPropertySet接口(esriSystem). 12

22. IFeatureWorkspace接口(esriGeoDatabase)... 12 23. IWorkspaceEdit接口(esriGeoDatabase)... 12 24. IWorkspaceFactory接口(esriGeoDatabase)... 13 25. ITopologicalOperator接口(esriGeometry)... 13

1. IField接口(esriGeoDatabase)

IField接口的第一个属性AliasName(只读,获得字段的别名)

IField接口的第二个方法CheckValue(Value)(方法,对于指定的属性字段,基于字段类型判断参数值是否有效,有效,则返回True,否则返回False) 例子代码:

IFeatureClass pFC_SCP_PT; editPT = new FieldClass(); editPT.Precision_2 = 8; editPT.Scale_2 = 3; editPT.Name_2 = \

editPT.Type_2 = esriFieldType.esriFieldTypeDouble;

IField接口的其他属性均为只读属性,常用有Name(只读,获得字段的名称)

2. IFieldEdit接口(esriGeoDatabase)

所有该接口的属性均为可读可写,经常用与对新建字段的设置,因为字段一旦被设置,其基本属性就不能被更改,所以就需要该接口类型的变量去转换,方法为: IFeatureClass pFC_SCP_PT;

IFieldEdit editPT = new FieldClass(); pFC_SCP_PT.AddField((IField)editPT);

如果在vb中去编写代码,则赋值和获取均为同一属性,而在C#中,为了区分设置和获取,属性均有两个,类似于Name和Name_2,这样就可以区分了,普遍用设置的带有_2的那个属性。

IFieldEdit接口的第一个属性Name (读写,设置或者获取该变量类型变量字段的名称) IFieldEdit接口的第二个属性Precision(读写,设置或者获取该变量类型变量字段的长度) IFieldEdit接口的第三个属性Scale(读写,设置或者获取该变量类型变量字段的精度) IFieldEdit接口的第四个属性Type(读写,设置或者获取该变量类型变量字段的类型)

3. IFields接口(esriGeoDatabase)

IFields接口的第一个属性Field(Index)(只读,以用于获取具体的字段,返回类型为IField) IFields接口的第二个属性FieldCount(只读,以用于获取属性的数量) 利用上面两个接口并用索引去依次循环获得每一列的属性pField(Ifield接口)

IFields接口的第三个方法FindField(Name)(方法,输入想要查找的属性域字段的名称,如果有,则返回该属性域字段在此Fields的索引,没有则返回-1)

IFields接口的第四个方法FindFieldByAliasName(Name)(方法,与第三个方法类似,此时输入的为该列属性字段的别名,此方法不经常用)

4. IRow接口(esriGeoDatabase)

IRow接口的第一个方法Delete(方法,删除该行)

IRow接口的第二个属性Fields(只读,获取该Feature要素的字段集合,返回值为IFields类型)此方法类似于IFeature接口的Fields属性

IRow 接口的第三个方法Store(方法,保存该行。)此方法类似于IFeature接口的Store方法 IRow接口的第四个属性Table(只读,获取该行所在的表格,返回值为ITable类型)

IRow接口的第五个属性Value(Index) (读写,获取该行在参数索引的字段的值,注意,索引Index是从0开始的。)

object.Value(Index ) = [ value ]

IRow接口的第六个属性HasOID(只读,判断指出该行是否有OID) IRow接口的第七个属性OID(只读,获取该行的OID值)

5. ITable接口(esriGeoDatabase)

ITable是把要素类当成一个表格来看,每一列对应一个字段(Field),每一行对应一个要素(Feature),所以对要素类(IFeatureClass)接口的操作均可以类似的在Itable接口中找到。 两个接口可以进行如下强制转化:

IFeatureClass pFC; ITable pTable; pTable =(ITable)pFC;

ITable接口的第一个方法AddField(Field)(方法,增加一个属性字段到这个表,其中传入的参数为一个IField接口的变量,此变量可以由其他表获得并赋值给要操作的表,可用IFeilds接口的Field属性来获得) ITable接口的第二个方法GetRow(OID) (方法,通过OID来从表格数据库中获取一行,返回一个IRow接口的变量)此方法类似于IFeatureClass接口的GetFeature方法

ITable接口的第三个方法GetRows(oids, Recycling) (方法,得到一个游标ICursor,通过一个oids的OID数组参数和一个Recycling的布尔类型的参数,一般为True)此方法类似于IFeatureClass接口的GetFeatures方法

ITable接口的第四个方法RowCount(QueryFilter) (方法,得到满足查询过滤器条件的行数。此方法IFeatureClass接口没有,所以是一个很好的有条件查询要素数量的一个方法)

6. IArea接口(esriGeometry)

IArea接口的第一个属性Area(只读,返回一个double类型的数值,为此Area的面积) IArea接口的第二个属性Centroid(只读,返回一个IPoint类型的变量,为此Area的重心)

IArea接口的第三个属性LablePoint(只读,返回一个IPoint类型的变量,为此Area的标签的位置,一般都在此Area的内部)

IArea接口的第四个方法QueryCentroid (Center ) (方法,Center参数为一个IPoint类型的变量,通过调用此方法将重心点赋值给参数Center)

IArea接口的第五个方法QueryLablePoint (LablePoint ) (方法,LablePoint参数为设置IPoint类型的变量,通过调用此方法将标签点赋值给参数LablePoint)

7. IEnvelope接口(esriGeometry)

IEnvelope接口的第一个方法CenterAt(pPoint) (方法,将这个矩形的边框移动到参数pPoint的位置,但是其他属性不变,如它的Width和Height)

IEnvelope接口的长宽属性Height和Width属性(读写,可以通过该属性获取或设置该边框的长和宽) IEnvelope接口的4个顶点属性UpperLeft、UpperRight、LowerLeft和LowerRight(读写,返回IPoint类型的四个顶点,比直接获得最值坐标更加方便严谨)

IEnvelope接口的最值坐标属性XMax、XMin、YMax和YMin(读写,可以通过该属性获取或设置该边框的四个顶点的坐标)

IEnvelope接口的第五个方法Union (inEnvelope ) (方法,将参数输入的几何边框和调用该方法的几何边框求并集,并将结果赋值给第一个边框,即调用此方法的object) 例子代码:

IEnvelope接口的第六个方法Union (inEnvelope ) (方法,返回与输入参数相交的区域的几何边框,并将结果赋值给第一个边框,即调用此方法的object)

IEnvelope接口的第七个方法PutCoords (XMin, YMin,XMax,YMax) (方法,将新建的一个边框的4个极坐标设置为输入的参数)

IEnvelope接口的第八个方法QueryCoords (XMin, YMin,XMax,YMax)(方法,将已有的一个边框的4个极坐标输出到参数当中以备后用)

IEnvelope接口的第九个方法Expand (dx, dy, asRatio) (方法,按照输入的dx与dy参数来放大或者缩小当前的边框,用与对ArcMap窗体的中心放大或缩小,或者点击屏幕获得点击点的坐标,并将中心点设置成点击点,并进行一定比例的放大或者缩小) 例子代码:

一般情况设置为True,来控制倍数的放大

IEnvelope接口的第十个方法Offset (X, Y)(方法,将已有的一个边框的按照输入参数的大小来进行水平竖直的移动)

8. IPoint接口(esriGeometry)

IPoint接口的第一个方法PutCoords(X,Y)(方法,设置该点的坐标)或者直接调用可以读写的属性X和Y,将坐标赋值给X和Y 例子代码:

Dim pPoint AsIPoint Set pPoint = NewPoint pPoint.PutCoords100,100

IPoint接口的第二个方法QueryCoords(X,Y)(方法,得到该点的坐标) 例子代码:

Dim pPoint asIPoint

Dim dX asDouble,dYasDouble pPoint.QueryCoordsdX,dY

IPoint接口的第三个方法ConstrainAngle (constraintAngle, anchor, allowOpposite ) (方法,如果第三个参数allowOpposite为True,则将第二个参数anchor这个点作为一个原点,然后以第一个参数 constraintAngle为与x轴的角度,做一条直线,再将调用此参数的点向该直线做垂线并交于一个新点,并将调用此方法的点移动到该点)

IPoint接口的第四个方法ConstrainDistance(constraintRadius, anchor ) (方法,以第二个参数anchor这个点为圆心,然后以第一个参数constraintRadius为半径做一个圆,将调用此参数的点移动到该点与圆心做线段交于该圆的交点上)

9. IPointArray接口(esriGeometry)

IPointArray接口的第一个方法Add(p) (方法,向该类型的数组变量添加Point)

[C#]

public void AddField(IField Field)

IFeatureClass.AddField(Field) 方法,增加一个属性字段到这个要素类,其中传入的参数为一个IField接口的变量,此变量可以由其他要素类获得并赋值给要操作的要素类,可用IFeilds接口的Field属性来获得。

返回的错误

-2147220649-FDO_E_TABLE_DUPLICATE_COLUMN 表中已存在指定名称的字段。

-2147220961-FDO_E_NO_SCHEMA_LICENSE

无权修改要素类的结构。使用ArcView的license,向参与集合网络、拓扑和混合关系类(feature-linked annotation)的要素类添加字段能引发这个错误。

15.2、IFeatureClass.DeleteField 方法

[C#]

public void DeleteField(IField Field);

IFeatureClass.DeleteField(Field) 方法,删除一个属性字段,其中传入的参数为一个IField接口的变量。

返回的错误

-2147219878-FDO_E_FIELD_CANNOT_DELETE_WEIGHT_FIELD 不能删除geometric network中与权重相关的字段。

-2147219877-FDO_E_FIEID_CANNOT_DELETE_REQUIRED_FIELD

不能删除所要求的字段。如果字段设为required,可以使用IFieldEdit::Required属性移除required状态,然后就可以删除field了。

-2147220961-FDO_E_NO_SCHEMA_LICENSE

无权修改要素类的结构。使用ArcView的license,向参与集合网络、拓扑和混合关系类(feature-linked annotation)的要素类添加字段能引发这个错误。 -2147215862-FDO_E_SE_DBMS_DOES_NOT_SUPPORT 不能从DB2中删除字段。

DeleteField从从表、对象类或要素类中删除指定字段。Geodatabase需要的和不能删除的字段包括:OBJECTID字段、SHAPE和shape依赖的字段例如SHAPE_Length、网络要素类激活的AncillaryRole和Weight字段、亚字段-如果要删除一个subtype字段,必须以subtype字段删除。 [C#]

//e.g.,fieldName=”MyField”

Public void IClass_DeletField(IFeatureClass featureClass,string fieldname) {

//The following sample code demonstrates one methodology for deleting //a field using DeleteFields IFields fields=featureClass.Fields;

IField field=fields.get_Field(fields.FindField(fieldname)); //IFeatureClass interface inherits from IClass featureClass.DeleteField(field); }

15.3、IFeatureClass.CreateFeature 方法

[C#]

public IFeature CreateFeature();

CreateFeature在要素类中创建一个新要素。这个要素仅分配一个唯一的对象ID(OID),没有其他属性值。使用IFeature::Store方法将这个要素存储到database中。当工作在版本要素类上时,CreateFeature应当在edit时期调用。调用IWorkspaceEdit::StartEditing可以开始edit session。对Topology或Geometric Network要素的编辑要在edit阶段进行,并且要包含edit operation。

调用CreateFeature之后,并不自动设置默认的子类型,也不初始化默认值。如果要素没有子类型,调用IRowSubtypes::InitDefaultValues来初始化默认值。可以调用IRowSubtypes::SubtypeCode来设置要素的要素的子类型。

在要素类上调用CreateFeature方法(通过IFeatureClass接口)同调用CreateRow方法(通过ITable接口)的效果相同,不过IFeatureClass的方法返回一个row对象昂的IFeature接口。 创建一个新要素的步骤是: 1) 创建要素

2) 为要素创建几何图形。 3) 在要素中存储几何图形。 4) 存储要素。

15.4、IFeatureClass.CreateFeatureBuffer 方法

[C#]

public IFeatureBuffer CreateFeatureBuffer();

CreateFeatureBuffer方法创建一个feature缓冲区,并返回IFeatureBuffer类型的变量,然后再对这个变量进行操作。结合insert cursor可以使用这个方法在要素类中创建新要素。调用IFeatureClass的

CreateFeatureBuffer方法和调用ITable中的CreateRowBuffer的作用相同,只是IFeatureClass的方法返回一个row buffer的IFeatureClass指针。

15.5、IFeatureClass.FeatureCount 方法

[C#]

public int FeatureCount(IQueryFilter QueryFilter);

FeatureCount返回满足某些属性或IQueryFilter指定的空间查询的要素的数量。如果没有指定IQueryFilter,返回要素类中所有要素的数量。

15.6、IFeatureClass.FeatureDataset 属性

这个只读属性返回包含该要素类的数据集的IFeatureDataset接口。如果要素类是一个独立的要素类(无dataset),那么这个动能将会返回一个null值。一个coverage要素类返回指向自身的IFeatureDataset接口。Shapefiles返回一个null指针。

15.7、IFeatureClass.GetFeature 方法

[C#]

public IFeature GetFeature(int ID)

通过给定的对象ID(OID)返回要素的IFeature接口。适用于通过OID寻找提顶要素。使用cursor可以遍历要素类中所有要素。

调用要素类的GetFeature方法(使用IFeatureClass接口)同调用GetRow方法(使用要素类的ITable接口)的效果相同,只是IFeatureClass返回IFeature接口。 [C#]//e.g, nameOfField=”City_Name”

public void IFeatureClass_GetFeature(IFeatureClass featureClass,string nameOfField) {

//get the index of the field we are interested in

int fieldIndexValue=featureClass.FindField(nameOfField); //get feature with OID 11,because it is known to exist //This method is typically used to get a feature by know OID //If you wish to loop through a series of features,use a Cursor. IFeature feature=featureClass.GetFeature(1); Console.WriteLine(\of{1}\}

15.8、IFeatureClass.GetFeatures 方法

[C#]

public IFeatureCursor GetFeatures(object fids,bool Recycling);

GetFeatures返回包含要素类所有要素OID的IFeatureCursor。这个方法可以用来遍历已知OID的要素集。 调用IFeatureClass的GetFeatures方法和调用ITable的GetRows方法效果相同,只是返回IFeatureCursor接口。 [C#]

//e.g,nameOfField=”Symbol”

public void IFeatureClass_GetFeatures(IFeatureClass featureClass,string nameOfField) {

//get the index of the field we are interested in

int fieldIndexValue=featureClass.FindField(nameOfField);

System.Collections.Generic.List constructoidList=new System.Collections.Generic.List(); constructoidList.Add(1); constructoidList.Add(2); constructoidList.Add(3); constructoidList.Add(4); constructoidList.Add(10);

int[] oidList=constructoidList.ToArray();

IFeatureCursor featureCursor=featureClass.GetFeatures(oidList,false); IFeature feature=featureCursor.NextFeature();

//loop through the returned features and get the value for the field while(feature!=null) {

//do something with each feature(ie update geometry or attribute) Console.WriteLine(\{1}\ feature=featureCursor.NextFeature(); } }

15.9、IFeatureClass.Search 方法

[C#]

public IFeatureCursor Search(IQueryFilter filter, bool Recycling);

Search返回满足条件的IFeatureCursor。如果IQueryFilter没有给定值,feature cursor返回要素类的所有要素。再用IfeatureCursor的NextFeature的方法依次得到每一个Feature。

Recycling参数控制row的allocation行为。每次调用简单要素对象时,Recycling cursors可以rehydrate该对象,并可以最优化只读访问,例如在绘图时。多次调用cursor的NextFeature,维持recycling cursor返回的引用并不合法。不能修改要素对象返回的recycling cursor。使用Non-recycling cursor每次返回一个单独的要素。non-recycling返回的要素可以修改、存储各种行为。Geodatabase保证在编辑阶段non-recycling要素的唯一语义。如果搜索的要素已经被应用程序引用,将返回一个要素的地址。

Search方法返回的non-recycling要素指针并不用来更新cursor中的要素。Update方法返回的feature cursor可以用来更新要素。 [C#]

//下面的例子使用属性查询和空间查询获得要素的子集。 //在要素类中,遍历所有要素,并计算它们的的总面积。 public void IFeatureClass_Search(IFeatureClass featureClass) {

//在这个函数中将使用空间过滤器,并结合属性查询进行搜索。 //在搜索中不必执行两种过滤类型,可以单独使用每一种。

//创建一个envelope在空间上限制搜索。

//(注意:只有高级geometries、envelopes和geometrybags可以使用)

ESRI.ArcGIS.Geometry.IEnvelope envelope=new ESRI.ArcGIS.Geometry.EnvelopeClass(); envelope.PutCoords(508786,681196,513033,684341);

//创建一个空间查询

ISpatialFilter spatialFilter=new SpatialFilterClass();

//指定一个查询的的几何图形

spatialFilter.Geometry=(ESRI.ArcGIS.Geometry.IGeometry)envelope;

//确定在要素类上查询的几何字段

string shpFld=featureClass.ShapeFieldName; spatialFilter.GeometryFiled=shpFld;

//指定要使用的空间操作

spatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;

//创建where表达式,这里只要要素 //在envelope中有一个子类型\

spatialFilter.WhereClause=\

//将spatial filter赋给IQueryFilter接口

IQueryFilter queryFilter=new QueryFilterClass(); queryFilter=(IQueryFilter)spatialFilter;

//在要素类上进行搜索,使用cursor保存结果

IFeatureCursor featureCursor=featureClass.Search(queryFilter,false);

//第一个返回的要素

IFeature feature=featureCursor.NextFeature();

//获得“Area”字段

IFields fields=featCursor.Fields; int areaIndex=fields.FindField(\

//保存总面积的变量 double searchedArea=0;

//遍历所有要素计算总面积 while(feature!=null) {

searchedArea=searcheArea+(double)feature.get_Value(areaIndex); feature=featureCursor.NextFeature(); }

Console.WriteLine(\ System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); }

15.10、IFeatureClass.Select 方法

[C#]

public ISelectionSet Select(IQueryFilter QueryFilter, esriSelectionType selType, esriSelectionOption selOption, IWorkspace selectionContainer);

Select返回一个满足条件的ISelectionSet。如果IQueryFilter中无值,将选择要素类的所有要素。调用IFeatureClass的Select方法同调用ITable中的相应方法效果相同。调用Select时,selectionContainer不需要参数。实参应为Null(C#,VB.Net)或者Nothing(VB6)。(注意:提供workspace类型的selectionContainer只读参数将会失败,因为Select会将选择的结果写入workspace。 IFeatureClass Select Example [C#]

public void IFeatureClass_Select_Example(IFeatureClass featureClass) {

//创建查询过滤器并附予一个where从句

IQueryFilter queryFilter=new QueryFilterClass(); queryFilter.WhereClause=\ //使用query过滤器选择要素

//调用Select时不需要selectionContainer参数。在C#和VB.Net中赋给其Null值

ISelectionSet

selectionSet=featureClass.Select(queryFilter,esriSelectionType.esriSelectionTypeIDSet,esriSelectionOption.esriSelectionOptionNormal,null); //计算选择的要素数目

Console.WriteLine(\{2}\}

16. IFeatureCursor接口(esriGeoDatabase)

IFeatureCursor接口用于遍历从FeatureLayer等搜索出来的结果,可用来访问要素类中的一系列要素。虽然它并没有继承ICursor接口,但它的操作方法同ICursor一样,这样在处理features时,不像rows那样,可以不使用QI。 成员

DetleteFeature, Fields, FindField, Flush, InsertFeature, NextFeature, UpdateFeature.

16.1、IFeatureCursor.NextFeature方法

[C#]

public IFeature NextFeature();

IFeatureCursor.NextFeature方法,将游标向前跳到下一个位置,并且返回该位置的Feature. 当你使用cursor获取非geodatabase的要素时,返回的空间参考为指定的类型。

不能确保要素的几何图形仍然在该空间参考中。例如,若使用非recycling cursor,你获得的要素可以与其他人共享,任何人在任何时间都能改变其空间参考。如果想恢复或获得指定的空间参考,开发者要测试要素的空间参考或几何图形。

16.2、IFeatureCursor.UpdateFeature方法

[C#]

public void UpdateFeature(IFeature Object);

IFeatureCursor.UpdateFeature(Feature) 方法,对当前游标位置的Feature进行更新) [C#]

public void IFeatureCursor_UpdaterFeature_Example(IFeatureClass featureClass) {

IQeryFilter queryFilter=new QueryFilterClass(); queryFilter.WhereClause=\

IFeatureCursor updateCursor=featureClass.Update(queryFilter,false); int fieldIndex=featureClass.FindField(\ IFeature feature=updateCursor.NextFeature(); While(feature!=null) { m++;

feature.set_Value(fieldIndex,\ updateCursor.UpdateFeature(feature); feature=updateCursor.NextFeature(); }

System.Runtime.InteropServices.Marshal.ReleaseComObject(updateCursor);

16.3、IFeatureCursor.InsertFeature方法

用参数传进来的属性值插入一个新的要素到数据库中,返回该插入新的Feature的ID值,其中参数类型为IFeatureBuffer。

17. ISpatialFilter接口(esriGeoDatabase)

3sNews.Net——最具影响力的中国地理空间信息门户网站 M\

用于返回和修改filter使用的空间关系(空间拓扑查找的功能,即:在图形上通过某一范围查找空间制定要素)。是一个包含空间和属性限制的QueryFilter。因此可以使用SpatialFilter来限制从要素类中获得的要素集。ISpatialFilter继承IQueryFilter接口,因此可以指定一个whereclause、返回的colunms或者指定输出图形的空间参考。使用spatial filter执行空间查询,常将其作为IFeatureClass::Search、IFeatureClass::Select或feature layers上相似方法的参数。

17.1、ISpatialFilter.Geometry属性

Geometry是源图形,根据与其的关系执行空间选择。

17.2、ISpatialFilter. GeometryField属性

GeometryField是图形字段名,将其中的图形与源图形比较。

17.3、ISpatialFilter. SpatialRel属性

SpatialRel属性将一个esriSpatialRelEnum传入来指定空间关系。

ISpatialFilter Example [C#]

NOTE:要用到ISpatialFilter的三个方法Geometry,GeometryField和SpatialRel。 public void ISpatialFilter_(IFeatureClass featureClass) {

//Create a point to use for the search;

ESRI.ArcGIS.Geometry.IPoint point=new ESRI.ArcGIS.Geometry.PointClass(); point.PutCoords(-117.946,35.823);

//Getting a reference;

ISpatialFilter spatialFilter=new SpatialFilterClass();

//Setting the Geometry,GeometryField and SpatialRel parameters;

spatialFilter.Geometry=point;

spatialFilter.GeometryField=featureClass.ShapeFieldName; spatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects; //Execute the spatiafilter;

IFeatureCursor featureCursor=featureClass.Search(spatialFilter,false); }

18. IQueryFilter接口(esriGeoDatabase)

IQueryFilter接口的第一个属性WhereClause(读写,为过滤器设置条件语句)

各种不同的数据,设置条件查询语句的语法是不相同的,如一个shp文件在设置字段的时候要加“””双引号,而在SDE数据连接中,则什么都不加;在gdb文件的语句中,符号是“*”,而在SDE或者shp文件查询中则是“%”

IQueryFilter接口的第二个属性SubFields(读写,为过滤器设置提供赛选的字段,用逗号来分隔每一个逗号,如果不设置该属性,则当做所有字段均为查找字段)

19. IFeatureSelection接口(esriCarto)

IFeatureSelection接口的第一个方法SelectFeatures (Filter, Method, justOne ) (方法,根据指定的标准过滤器filter和方法,选择要素,第一个参数为QueryFilter类型的变量,第二个参数为esriSelectionResultEnum类型的变量,第三个参数为布尔型变量,通常为false)

20. IMap接口(esriCarto)

IMap接口的第一个属性Layers (uid, recursive ) (只读,第二个参数为True的时候,该属性获取第一个参数uid指定的Layers,赋值给一个IEnumLayer的变量)

IMap接口的第二个属性LayerCount(只读,返回该map里面Layer的个数) IMap接口的第三个属性Layer(Index) (只读,返回指定索引index位置的Layer) IMap接口的第四个方法AddLayer(Layer) (方法,向该map添加一个Layer)

IMap接口的第五个方法AddLayers(Layers, autoArrange) (方法,添加一个EnumLayer变量的layers到该map,第一个参数为IEnumLayer类型,第二个参数为bool型变量) IMap接口的第六个方法ClearLayers(方法,将所有的layer从map中移除) IMap接口的第七个方法ClearSelection(方法,将该map中选择的要素清空)

在某些这个方法一般紧接着会跟着pMap.ActiveView.Refresh();但是在某些情况下,这样的可视刷新很耗时间,而且如果需要在刷新的时候删除掉当前选中需要使用pMap.ActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection, null, null); pMap.Map.ClearSelection();

pMap.ActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection, null, null); 这样的格式进行更新,其中esriViewDrawPhase枚举类有如下几种:

esriViewBackground esriViewGeography *esriViewGeoSelection Map grids Layers Page/snap grid Unused Feature selection Unused esriViewGraphics esriViewForeground Labels/graphics Graphics Unused Snap guides esriViewGraphicSelection Graphic selection Element selection 注意点:1-放大缩小全图等操作,必须使用Refresh()

2-常用的局部刷新是使用esriViewGeoSelection对选择集进行刷新,esriViewGraphics是对Label,Element等刷新。

3-可以使用2种或者2种以上的局部刷新结合使用。

IMap接口的第八个属性SelectionCount(只读,返回该map被选中要素的个数)

IMap接口的第九个方法SelectFeature(Layer,Feature) (方法,从一个Layer中选择一个Feature) IMap接口的第十个属性MapScale(读写,获取或者设置当前map的地图比例尺,double类型)

IMap接口的第十一个方法MoveLayer(Layer,toIndex) (方法,把一个Layer从当前的位置移动到指定的索引位置)

IMap接口的第十二个方法SelectByShape(Shape, env, justOne) (方法,从Layer中依靠一个图形的范围shape和一个选择的环境env来选择要素,而在所有图层中只从IFeatureLayer的图层中进行选择)

21. IPropertySet接口(esriSystem)

IPropertySet接口的第一个方法SetProperties (names, values ) (方法,设置属性) IPropertySet接口的第二个方法SetProperty (name, value ) (方法,设置属性)

22. IFeatureWorkspace接口(esriGeoDatabase)

IFeatureWorkspace接口用于访问和管理地理数据库中的要素的重要成分 -- 数据集,如Tables,ObjectClasses,FeatureClasses,FeatureDatasets,和RelationshipClasses。所有的Open方法(例如OpenTable)都要以dataset的名称作为输入。在企业数据库上工作时,就需要使用完全限定名(例如,”database.owner.tablename”或”owner.tablename”)。

处理地理数据库时(personal,file或ArcSDE),workspace将运行一个实例datasets的对象表。不同的opendatasets的方法返回一个对其的引用。

IFeatureWorkspace是用workspace创建和打开对象、对象类的主接口。 成员:

CreateFeatureClass, CreateFeatureDataset, CreateQueryDef,

CreateRelationshipClass, CreateTable, OpenFeatureClass, OpenFeatureDataset, OpenFeatureQuery, OpenRelationshipClass, OPenRelationshipQuery, OpenTable。 常用的成员:

22.1、IFeatureWorkspace.CreateFeatureClass方法

[C#]

public IFeatureClass CreateFeatureClass(string Name,IFields Fields,UID CLSID,UID EXTCLSID,esriFeatureType FeatureType,string ShapeFieldName,string ConfigKeyword);

CreateFeatureClass方法可以用来创建独立的要素类。除了CreateTable所需的参数外,还要指定FeatureType参数(如esriFTsimple,esriFTComplexEdgeFeature和其他)和shapeFieldName。ShapeFieldName表示要素类几何图形字段的名称。在调用CreateFeatureClass之前,设置好GeometryDef对象的空间参考以及空间索引。

在Geodatabase wokspace中创建FeatureClass要包含一些必须的字段。从你要创建的对象类型的类描述中可以获得所需字段(IObjectClassDescription的RequiredFields字段)。

CLSID参数用来指定实例化对象的GUID。如果未传入参数,地理数据库将使用与esriGeoDatabase.Feature有关的CLSID。多数例子中该法可行。如果要素类有自定义的Feature而不是esriGeoDatabase.Feature,这时或以后调用要素类的IClassSchemaEdit接口传入GUID。

EXTCLSID可选参数指定实例化FeatureClassExtension对象的GUID。该对象至少要支持IClassExtension接口。使用configurationKeyword参数可以控制RDBMS中的表的物理布局—例如,在Oracle数据库中,configuration keyword控制表创建的空间、初始化、next extents和其他属性。ArcSDE的configurationKeyword由ArcSDE data adimistrator设置。

在9.2地理数据库之前的workspace中,GeometryDef引用一个低精度的空间参考。9.1和之前的版本只支持低精度的空间参考,9.2要求高精度的空间参考。使用IControlPrecision2::IsHighRecision来管理空间参考的精度。使用IGeodatabaseRelease接口释放geodatabase。 注意:不支持下列表和要素名称前缀:”gdb_”,”sde_”,”delta_”

22.2、IFeatureWorkspace.OpenFeatureClass方法

[C#]

public IFeatureClass OpenFeatureClass(string Name);

使用完全限定名可以打开workspace中任何已存在的要素类。地理数据库中的每一个要素类都有唯一的完全限定名,使用OpenFeatureClass可以直接打开要素类。

使用IDatabaseConnectionInfo接口确定User和Database。ISQLSyntax::QualifyTableName可以用来确定要素类的完全限定名。使用IWorkspace2接口的NameExists来确定geodatabase中的要素类是否有适当的名称。

打开参与topology或geometric network的要素类将在内存中打开所有参与的要素类。 OpenFeatureClass名称参数的一些例子。 Coverage要素类 building:polygon

Oracle 要素类(如果已经连接到要素类,则不需要owner前缀。 gdb.Buildings SQLServer要素类 fdo_data.gdb.Buildings Informix要素类

Bladetest2:gdb.Buildings VPF要素类

Ks032193:veg:vgfarea(library:coverage:feature class)

VPF数据的library名称区分大小写,并且要和LAT中存储的一致(Library Attribute Table)

与Topology有关的4个表格:T_#_DirtyAreas,T_#_PolyErrors,T_#_LineErrors和T_#_PointErrors可以直接编辑。由于这个原因他们不能打开,打开时返回一个地理数据库的错误。

23. IWorkspaceEdit接口(esriGeoDatabase)

在实际问题中,如果有多次操作需要更改Feature的时候,切记要将操作对象重新赋值,不然在pWorkspaceEdit.StopEditing(true)的时候会出现错误,报错代码为-2147467259。

(详细代码可见WindowsApplication6的代码,其中详细操作了对字段的编辑过程,其中涉及到很多对字段Field的方法 Add(Field),Delete(Field),get_value(object value),set_value(intindex, object value)等等操作,其中还涉及到Feature经过ICursor类选取与经过FeatureClass类的方法GetFeature选取的区别)

24. IWorkspaceFactory接口(esriGeoDatabase)

IWorkspaceFactory接口提供创建和打开workspace的成员以及访问workspace factory信息的成员。

当需要创建一个新的workspace,连接已存在的workspace和寻找有关workspace的信息时使用IWorkspaceFactory接口。 成员

24.1、IWorkspaceFactory.ContainsWorkspace方法

[C#]

public bool ContainsWorkspace(sring parentDirectory,IFileNames filenames);

浏览文件系统查询查找workspace时,ContainsWorkspace非常有用。它提供一个parent directory和待检查的文件名称列表。如果parent directory表示这个factory的一个workspace或parent directory包含一个workspace或一个workspace的connection文件时,返回true。 [C#]

//e.g.,nameOFFile=\//nameOFFile=\

public Boolean IWorkspaceFactory_ContainsWorkspace_Example(string nameOfFile) {

//use with AccessWorkspaceFactory IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();

//for FileGDB use ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass();

ESRI.ArcGIS.esrSystem.IFileNames fileNames=new ESRI.ArcGIS.esriSystem.FileNamesClass(); fileNames.Add(nameOfFile);

return workspaceFactory.ContainsWorkspace(\}

24.2、IWorkspaceFactory.Create方法

[C#]

public IWorkspaceName Create(string parentDirectory,string Name,IPropertySet ConnectionProperties,int hWnd);

Workspace factory由多种类型,Create会产生不同的结果。ArcSDE类型,将会产生一个新的connection文件(.sde)。ArcInfo workspace factory类型,创建一个INFO的亚文件夹。ConnectionProperties参数是个可选项,指定任何额外的所需连接属性,例如创建远程数据库workspace时的connection文件所需的server,instance,user和password。如果没有指定连接属性,这个方法将会返回一个对话框提醒用户需要属性。 [C#]

public void IWorkspaceFactory_Create_Example_Access() {

//create a new Access workspace factory IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass(); //Create a workspacename with the workspace factory IWorkspaceName

workspaceName=workspaceFactory.Create(\ //Cast for IName

ESRI.ArcGIS.esriSystem.IName name=(ESRI.ArcGIS.esriSystem.IName)workspaceName; //Open a reference to the access workspace through the name object IWorkspace pGDB_workspace=(IWorkspace)name.Open();

Console.WriteLine(\{1}\}

public void IWorkspaceFactory_Create_Example_FileGDB() {

//create a new FileGDB workspace factory IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass(); //Create a workspacename with the workspace factory IWorkspaceName

workspaceName=workspaceFactory.Create(\ //Cast for IName

ESRI.ArcGIS.esriSystem.IName name=(ESRI.ArcGIS.esriSystem.IName)workspaceName; //Open a reference to the FileGDB workspace through the name object IWorkspace fileGDB_workspace=(IWorkspace)name.Open();

Console.WriteLine(\

{1}\}

public void IWorkspaceFactory_Create_Example_ArcSDE() {

ESRI.ArcGIS.esriSystem.IPropertySet propertySet=new ESRI.ArcGIS.esriSystem.PropertySetClass(); propertySet.SetProperty(\ propertySet.SetProperty(\ propertySet.SetPropert(\ propertySet.SetProperty(\

propertySet.SetProperty(\

//Create a workspacename with the workspace factory IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); //Create a workspacename with the workspace factory IWorkspaceName

workspaceName=workspaceFactory.Create(\t,0);

//Cast for IName

ESRI.ArcGIS.esriSystem.IName name=(ESRI.ArcGIS.esriSystem.IName)workspaceName; //Open a reference to the sde workspace through the name object IWorkspace sde_workspace=(IWorkspace)name.Open(); //the path returned in this case weill be for the sde connection

Console.WriteLine(\}

24.3、IWorkspaceFactory.GetWorkspaceName方法

[C#]

public IWorkspaceName GetWorkspaceName(string parentDirectory,IFileNames filenames); Example [C#]

public void IWorkspaceFactory_GetWorkspaceName_Example() {

ESRI.ArcGIS.esriSystem.IFileNames fileNames=new ESRI.ArcGIS.esriSystem.FileNamesClass(); fileNames.Add(\

fileNames.Add(\

fileNames.Add(\

IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass(); IWorkspaceName

workspaceName=workspaceFactory.GetWorkspaceName(\

Console.WriteLine(workspaceName.PathName);

fileNames.Reset();

string fn=fileNames.Next(); while(fn!=null) {

Console.WriteLine(fn); fn=fileNames.Next(); }

ESRI.ArcGIS.esriSystem.IName name=(ESRI.ArcGIS.esriSystem.IName)workspaceName; IWorkspace workspace=(IWorkspace)name.Open(); }

24.4、IWorkspaceFactory.Open方法

[C#]

public IWorkspace Open(IPropertySet ConnectionProperties,int hWnd); Example [C#]

Public IWorkspace IWorkspaceFactory_Open_Example(String server,String instance,String user,String password,String database,String version) {

ESRI.ArcGIS.esriSystem.IPropertySet propertySet=new ESRI.ArcGIS.esriSystem.PropertySetClass(); propertySet.SetProperty(“SERVER”,server);

propertySet.SetProperty(“INSTANCE”,instance); propertySet.SetProperty(“DATABASE”,database); propertySet.SetProperty(“USER”,user);

propertySet.SetProperty(“PASSWORD”,password); propertySet.SetProperty(“VERSION”,version);

IWorkspaceFactory worspaceFactory=new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); Return workspaceFactory.Open(propertySet,0); }

24.5、IWorkspaceFactory.OpenFromFile方法

[C#]

public IWorkspace OpenFromFile(string fileName,int hWnd);

OpenFromFile采用表示FileSystemWorkspace或LocalDatabaseWorkspace,或是

RemoteDatabaseWorkspace的connection文件的参数,并返回一个指定workspace的接口。这些方法的客户然后就可以打开和访问workspace中的数据集。调用这些方法时,如果属性不足,将提供一个连接对话框提示需要其他属性。

hWnd引数是父窗体或应用程序窗体,确保connection对话框有正确的父窗体。 Example [C#]

//e.g.,nameOfFile=\

public IWorkspace IWorkspaceFactory_OpenFromFile_Example_Access(string nameOfFile) {

IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass(); return workspaceFactory.OpenFromFile(nameOfFile,0); }

//e.g.,nameOfFile=\

public IWorspace IWorkspaceFactory_OpenFromFile_Example_FileGDB(string nameOfFile) {

IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass(); return workspaceFactory.OpenFromFile(nameOfFile,0); }

//e.g.,nameOfFile=\

public IWorkspace IWorkspaceFactory_OpenFromFile_Example_ArcSDE(string nameOfFile) {

IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); return workspaceFactory.OpenFromFile(nameOfFile,0); }

//The connection string for a shapefile should be the full path //to the shapfile's folder(e.g.,\

//Note:location cannot be relative path \

public IWorkspace IWorkspaceFactory_OpenFromFile_Example_Shapefile(string nameOfFile) {

IWorkspaceFactory workspaceFactory=new

ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass(); return workspaceFactory.OpenFromFile(nameOfFile,0); }

WorkspaceFactory负责管理workspace,允许用户通过一系列connection properties连接workspace。一个workspace表示包含一个或多个数据集的数据库。Dataset包括tables,feature classes和relationship classes。一个workspaceFactory是可以单独创建的。一个WorkspaceFactory包括应用程序引用的当前连接的活动的workspaces。使用PropertySet指定Connection属性,并且可以存到connection文件中。WorkspaceFactory也支持浏览和管理file system Workspaces,以及管理remot database workspaces。

25. ITopologicalOperator接口(esriGeometry)

可以将一个Polygon类型的数据或者Polyline的数据赋值给该接口的变量,如: Set pUnionedPolylines =NewPolyline Set pTopOp = pUnionedPolylines

ITopologicalOperator接口的第一个方法ConstructUnion(geometries ) (方法,合并图形的工具,输入的参数是一个IEnumGeometry类型的参数,此方法效率甚高)

ITopologicalOperator接口的第二个方法Cut(cutter, leftGeom, rightGeom) (方法,剪切图形,第一个参数为剪切的线要素,为IPloyline类型,第二个第三个参数均为剪切后的图形,为输出参数)

ITopologicalOperator接口的第三个方法Boundary(方法,获取一个图形的边框,一个Polygon的boundary是一个Polyline类型的要素,一个Polyline的boundary是一个nultipoint类型的要素,一个Point的boundary是为空的)

ITopologicalOperator接口的第四个方法Buffer(distance) (方法,创造一个Polygon的要素来显示缓冲区域,参数为缓冲距离)

ITopologicalOperator接口的第五个方法Clip (clipperEnvelope ) (方法,输入一个IEnvelope类型的变量,来获取被这个边框剪切的要素,并将切割后的变量返回给调用方法的变量)

ITopologicalOperator接口的第六个方法QueryClipped (clipperEnvelope, clippedGeometry ) (方法,与Clip类似,但是第二个参数为剪切后返回输出的参数,本身不会改变)

ITopologicalOperator接口的第七个方法ConvexHull(方法,构造一个Geometry,大部分为Polygon类型的几何要素,该要素为调用此方法的ITopologicalOperator类型的变量最小的外边框)

ITopologicalOperator接口的第八个方法SymmetricDifference (other ) (方法,并集减去交集的部分,调用次方法的变量为第一个参数,other为第二个参数,最后返回变量到一个Geometry类型的变量,该变量的范围均在两个参数范围内,但不在两个参数相交的部分)。

26. IHitTest(esriGeometry)

这个接口只有一个HitTest方法,public bool HitTest ( IPoint QueryPoint,double searchRadius, esriGeometryHitPartType geometryPart,IPoint hitPoint, ref double hitDistance, ref int hitPartIndex, ref int hitSegmentIndex, ref bool bRightSide)

用来访问指定的几何体的最接近点击位置的一部分pHitTest = (IHitTest)pGeom; esriGeometryHitPartType 是用来确定该部分是节点还是其他点

Constant esriGeometryPartNone esriGeometryPartVertex Value 0 1 Description Not used. Locates a vertex of the geometry closest to the query point. esriGeometryPartBoundary 4 Locates a point anywhere on the boundary of a polygon, or anywhere on a polyline, that is closest to the query point. esriGeometryPartMidpoint 8 Locates a midpoint of a segment belonging to a polygon or polyline that is closest to the query point. esriGeometryPartCentroid 32 Locates the geometric centroid of a polygon or the center of an envelope closest to the query point. esriGeometryPartEndpoint 16 Locates an endpoint of the polyline closest to the query point.

本文来源:https://www.bwwdw.com/article/cy63.html

Top