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#]