- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[高等教育]ArcObjects GIS应用开发-基于Cchap7
几何字段的设计 几何字段用于存储要素的几何形状,几何字段没有缺省值。 设计一个几何字段的时候,有一个属性是必须设置的,即 IField::GeometryDef。它是一个 GeometryDef对象,用于预定义一个几何字段的几何属性。GeometryDef对象的两个接口分别是IGeometryDef和IGeometryDefEdit,由于两个接口定义的属性都是可读写的,如 GeometryType为可读,GeometryType_2为可写。 IGeometryDef::GeometryType属性用于设置几何字段的几何类型,如点、点集、多边形、环等;SpatialRefrence属性则用于设置几何字段的空间参考。对于一个几何字段而言,这两个属性是必需的。 IGeometryDef和IGeometryDefEdit private void DefineGeometryField(ISpatialReference pSpatRef) { IGeometryDef pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.AvgNumPoints_2 = 5; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; pGeoDefEdit.GridCount_2 = 2; pGeoDefEdit.set_GridSize(0, 200); pGeoDefEdit.set_GridSize(1, 500); pGeoDefEdit.HasM_2 = false; pGeoDefEdit.HasZ_2 = true; pGeoDefEdit.SpatialReference_2 = pSpatRef; IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = SHAPE; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldEdit.GeometryDef_2 = pGeoDef; pFieldEdit.IsNullable_2 = true; } 索引集和索引 索引集(Indexes)对象和字段集对象相似,它用于管理被设置为索引的字段,IIndexes接口用于管理索引集对象,如IIndexes::index属性可以按照索引值得到一个表中的某个特定的索引。 索引对象代表了一个表的索引。一个要素类存在两种形式的索引:空间索引和属性索引。空间索引存在一个要素类的几何字段中,当一个要素类被创建的时候,系统会自动给这个要素类创建一个空间索引。对于GeoDatabase而言,它也会给要素类自动建立一个属性索引,这个索引是基于OID字段的。 Index对象支持IIndex接口和IIndexEdit接口,使用这两个接口可以产生一个索引并设置它的属性。 public void IIndexes_FindIndexesByFieldName_Example(IFeatureClass featureClass, string nameOfField)? {? ? IIndexes indexes = featureClass.Indexes;?????? ?Console.WriteLine(The feature class has an index count of: {0}, indexes.IndexCount);int indexPosition;??????? indexes.FindIndex(Temp_Index, out indexPosition);??????? Iindex index = indexes.get_Index(indexPosition);??????? //or??????? ???? IEnumIndex enumIndex = indexes.FindIndexesByFieldName(nameOfField);??????? ???? index = enumIndex.Next();??????? ???? while (index != null)??????? ???? {??if (index.Name == Temp_Index)????? ?{????????
文档评论(0)