ArcEngine接口大全
ArcEngine接口大全三

ArcEngine接口大全(三)《转自ESRI中国社区》9. 关于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)10. 关于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接口的第六个方法intersect (inEnvelope )(方法,返回与输入参数相交的区域的几何边框,并将结果赋值给第一个边框,即调用此方法的object)IEnvelope接口的第七个方法PutCoords (XMin, YMin,XMax,YMax)(方法,将新建的一个边框的4个极坐标设置为输入的参数)IEnvelope接口的第八个方法QueryCoords (XMin, YMin,XMax,YMax)(方法,将已有的一个边框的4个极坐标输出到参数当中以备后用)IEnvelope接口的第九个方法Expand (dx, dy, asRatio)(方法,按照输入的dx与dy参数来放大或者缩小当前的边框,用与对ArcMap窗体的中心放大或缩小,或者点击屏幕获得点击点的坐标,并将中心点设置成点击点,并进行一定比例的放大或者缩小)IEnvelope接口的第十个方法Offset (X, Y)(方法,将已有的一个边框的按照输入参数的大小来进行水平竖直的移动)11. 关于IFeature接口(esriGeoDatabase)IFeature接口的第一个属性Class(只读)IFeature接口的第二个方法Delete(方法,删除该行。
ArcEngine接口大全

1.IField接口(esriGeoDatabase)IField接口的第一个属性AliasName(只读,获得字段的别名)IField接口的第二个方法CheckValue(Value)(方法,对于指定的属性字段,基于字段类型判断参数值是否有效,有效,则返回True,否则返回False)例子代码:1.Set pField = pFields.Field(6) ’第六个字段2.bChkField = pField.CheckValue(45.86)3.If bChkField = True Th en……IField接口的其他属性均为只读属性,常用有Name(只读,获得字段的名称)例子代码:1.Dim pFields As IFields2.Dim pField As IField3.Dim pGeoDef As IGeometryDef4.Dim pDomain As IDomain5.Dim i As Long6.Set pFields = pFeatClass.Fields7.For i = 0 To pFields.FieldCount - 18. Set pField = pFields.Field(i)9. If pField.Type = esriFieldTypeGeometry Then10. Set pGeoDef = pField.GeometryDef11. Else12. Debug.Print pField.AliasName13. Debug.Print pField.DefaultValue14. Set pDomain = pField.Domain15. Debug.Print pField.Editable16. Debug.Print pField.IsNullable17. Debug.Print pField.Length18. Debug.Print 19. Debug.Print pField.Precision20. Debug.Print pField.Required21. Debug.Print pField.Scale22. Debug.Print pField.Type23. Debug.Print pField.VarType24. End If25.Next2. IFieldEdit接口(esriGeoDatabase)所有该接口的属性均为可读可写,经常用与对新建字段的设置,因为字段一旦被设置,其基本属性就不能被更改,所以就需要该接口类型的变量去转换,方法为:IFeatureClass pFC_SCP_PT;IFieldEdit editPT = new FieldClass();pFC_SCP_PT.AddField((IField)editPT);如果在vb中去编写代码,则赋值和获取均为同一属性,而在C#中,为了区分设置和获取,属性均有两个,类似于Name和Name_2,这样就可以区分了,普遍用设置的带有_2的那个属性。
ArcEngine接口大全七

ArcEngine接口大全(七)《转自ESRI中国社区》51.RulerSettings对象标尺对象是为了辅助图形元素的放置而出现在PageLayout对象上方和左方的辅助尺如图所示,通过IPageLayout的RulerSettings属性可以获得PageLayout上的RulerSettings对象.RulerSettings对象主要实现了IRulerSettings接口它只有一个SmallestDivision属性用于设置RulerSettings对象的最小刻度值属性52Element对象在Map对象和PageLayout对象显示的数据除了地理数据之外,另一种即为元素数据Element是一个非常庞大复杂的对象集合如下图所示,它主要分为两大部分:图形元素(GraphicElement)和框架元素(Frame Element)。
图形元素(GraphicElement)包LineElement, MarkerElement, TextElement, GroupElement, FillshapElement,PictureElement,MultiPatchElement等。
它们都是作为图形的形式而存在,在地图视图或者PageLayout视图上时可见的。
框架元素(Frame Element)包括MapFrameElement, MapSurroundElement等它们是作为不可见的容器而存在的。
Map对象或者PageLayout对象可以通过IGraphicsContainer接口来管理这些元素,使用IGraphicsContainer接口可以添加,删除和更新位于Map或PageLayout上的元素。
使用GroupElement对象还可以将多个元素编组为单个实体来给用户使用。
IElement是所有图形元素(GraphicElement)和框架元素(Frame Element)都实现的接口,通过IElement接口可以确定Element对象的Geometry属性,同时IElment接口也提供了用于查找和绘制元素的方法。
ArcGIS接口详细说明

ArcGIS接口详细说明 (1)GeometryGeometry 库处理存储在特征类(feature classes)或其它图形要素(graphical elements)中的特征的 geometry 或 shape。
大多数用户交互的基本几何对象有 Point 、MultiPoint 、Polyline 和 Polygon 。
除了这些顶层的实体,还有作为 Polylines 和 Polygons 构建模块的几何体(geometries)。
这些是组成几何体的基元(primitives)。
它们是 Segments、Paths 和 Rings。
Polylines 和 Polygons 由形成一条 Path 的依次相连的 Segments 组成。
一个 Segment 包含两个不同的点,起点和终点,和一个定义从起点到终点的曲线的要素类型。
这种 segments 有 CircularArc、 Line、 EllipticArc 和 BezierCurve。
所有的几何对象都可以有与它们顶点相关的 Z、和 IDs。
MISegmentCollection接口被Path,Ring,Polyline和Polygon四个类所实现,它们被称作是Segment集合对象,使用这个接口可以处理组成Segment集合对象中的每一个子Segment对象。
使用ISegmentCollection接口可以为一个Segment集合对象添加,插入,删除Segment子对象。
ISegmentCollection接口SetCircle和SetRectangle方法提供了一种简单不需要添加Segment的情况下构建一个完成的Path,Ring,Polyline和Polygon的方法。
Geometry集合接口通过前边对于具体的Geometry对象的介绍可知,除了Point对象之外,其他几何对象都是通过其他几何对象集合构建而成。
如MultiPoint对象是点的集合,Path 对象是Segment对象的集合,Polyline对象是Path对象的集合,Polygon对象是Ring对象的集合,Multipatch对象是Triangle Strip和Trangle Fan, Trangle,Ring对象的集合。
ArcGIS_Engine常用接口

下面根据依赖关系的顺序对一些常用类库进行讨论。
模型图中在每个类库框的右上角显示了其序列号。
例如,作为ArcGIS体系结构基础的System类库,其编号为1,而编号为7的GeoDatabase类库依赖于模型图中其前面的6个类库--System、SystemUI、Geometry、Display、Server和Output。
System类库System类库是ArcGIS体系结构中最底层的类库。
System类库包含给构成ArcGIS的其他类库提供服务的组件。
System类库中定义了大量开发者可以实现的接口。
AoInitializer对象就是在System类库中定义的,所有的开发者必须使用这个对象来初始化ArcGIS Engine和解除ArcGIS Engine的初始化。
开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。
SystemUI类库SystemUI类库包含用户界面组件接口定义,这些用户界面组件可以在ArcGIS Engine中进行扩展。
包含ICommand、ITool和IToolControl接口。
开发者用这些接口来扩展UI组件,ArcGIS Engine开发人员自己的组件将使用这些UI组件,且一般是在高层次的类库中实现。
这个类库中包含的对象是一些使用工具对象,开发人员可以通过使用这些对象简化用户界面的开发。
开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。
Geometry类库Geometry类库处理存储在要素类中的要素几何图形或形状或其他图形元素。
大多数用户会遇到的基本几何图形对象为Point、MultiPoint、Polyline和Polygon。
除了这些顶级实体外,就是作为多义线和多边形的组成部分的几何图形,是组成几何图形的子要素。
它们是Segment、Path和Ring。
Polyline和Polygon由一系列相连接的、构成列Path的片段组成。
ArcEngine接口总结

ArcGIS接口详细说明之个人开发心得1. 关于IField接口(esriGeoDatabase)2. 关于IFieldEdit接口(esriGeoDatabase)3. 关于IFields接口(esriGeoDatabase)4. 关于IPoint接口(esriGeometry)5. 关于IPointArray接口(esriGeometry)6. 关于IPointCollection接口(esriGeometry)7. 关于IPolyline接口(esriGeometry)8. 关于IGeometry接口(esriGeometry)9. 关于IArea接口(esriGeometry)10. 关于IEnvelope接口(esriGeometry)11. 关于IFeature接口(esriGeoDatabase)12. 关于IRow接口(esriGeoDatabase)13. 关于IFeatureClass接口(esriGeoDatabase)14. 关于ITable接口(esriGeoDatabase)15. 关于IFeatureCursor接口(esriGeoDatabase)16. 关于IQueryFilter接口(esriGeoDatabase)17. 关于IFeatureLayer接口(esriCarto)18. 关于IFeatureSelection接口(esriCarto)19. 关于IMap接口(esriCarto)20. 关于IPropertySet接口(esriSystem)21. 关于IFeatureWorkspace接口(esriGeoDatabase)22. 关于IWorkspaceEdit接口(esriGeoDatabase)23. 关于IWorkspaceFactory接口(esriGeoDatabase)24. 关于ITopologicalOperator接口(esriGeometry)25. 创建Buffer并选择里面的要素26. Merge要素Union要素27. 怎样从Table中获取具体需求值的Row28. 怎样ZoomInCenter29. 怎样读取一个字段内的所有值30. 怎样编辑更改属性字段的值31. 怎样将MapControl中的Map复制到PageLayoutControl中32. 怎样判断是否出于编辑状态33. 怎样用点创建一个Polygon34. 怎样运用属性来计算总面积35. 关于属性域的一些心得36. 怎样实现翻折Flip方法37. 回答cumtbGIS关于ITopologicalOperator接口Clip方法的问题38. 回答机器猫FJJ关于ISpatialFilter接口方法的问题(完整函数)39. 回答网友韶华响当当关于更改符号的代码(完整函数)40. 回答网友韶华响当当关于显示属性的代码(完整函数)1. 关于IField接口(esriGeoDatabase)IField接口的第一个属性AliasName(只读,获得字段的别名)IField接口的第二个方法CheckValue(Value)(方法,对于指定的属性字段,基于字段类型判断参数值是否有效,有效,则返回True,否则返回False)例子代码:'Get FieldSet pField = pFields.Field(6)bChkField = pField.CheckV alue(45.86)If bChkField = True Then'Add data to selected rows for the field selected.End If复制代码IField接口的其他属性均为只读属性,常用有Name(只读,获得字段的名称)例子代码:Dim pFields As IFieldsDim pField As IFieldDim pGeoDef As IGeometryDefDim pDomain As IDomainDim i As LongSet pFields = pFeatClass.FieldsFor i = 0 To pFields.FieldCount - 1Set pField = pFields.Field(i)If pField.Type = esriFieldTypeGeometry ThenSet pGeoDef = pField.GeometryDefElseDebug.Print pField.AliasNameDebug.Print pField.DefaultValueSet pDomain = pField.DomainDebug.Print pField.EditableDebug.Print pField.IsNullableDebug.Print pField.LengthDebug.Print Debug.Print pField.PrecisionDebug.Print pField.RequiredDebug.Print pField.ScaleDebug.Print pField.TypeDebug.Print pField.VarTypeEnd IfNext2. 关于IFieldEdit接口(esriGeoDatabase)所有该接口的属性均为可读可写,经常用与对新建字段的设置,因为字段一旦被设置,其基本属性就不能被更改,所以就需要该接口类型的变量去转换,方法为:IFeatureClass pFC_SCP_PT;IFieldEdit editPT = new FieldClass();pFC_SCP_PT.AddField((IField)editPT);如果在vb中去编写代码,则赋值和获取均为同一属性,而在C#中,为了区分设置和获取,属性均有两个,类似于Name和Name_2,这样就可以区分了,普遍用设置的带有_2的那个属性。
4.1.1 IMap接口_ArcGIS Engine 开发从入门到精通_[共4页]
![4.1.1 IMap接口_ArcGIS Engine 开发从入门到精通_[共4页]](https://img.taocdn.com/s3/m/0e36d8c9650e52ea54189848.png)
第4章地图组成及图层控制4.1 地图对象地图(Map)是ArcEngine的主要组成部分。
Map对象既是数据的管理容器,同时也是数据显示的主要载体。
Map对象的主要接口有IMap、IGraphicsContainer、IActiveView、IActiveViewEvents、IMapBookmark和ITableCollection等。
Map对象共有35个接口,更多的接口请查看“帮助”文件。
本节介绍几个主要的接口。
4.1.1 IMap接口IMap接口主要用于管理Map对象中的layer对象、要素选择集、MapSourround对象和标注等。
Map对象通过图层的方式管理地理数据。
在IMap接口中定义了大量的方法来操作其中的图层对象,如AddLayer、AddLayers,这两个方法分别是将一个、多个图层加载进Map对象;ClearLayers是清除Map中所有的图层;LayerCount则是Map中的图层记数器,计算Map中有多少个图层;SelectFeature是在Map中选择实体;SelectByShape是通过指定的实体在Map中选择实体;SelectionCount是获取选择实体的个数。
当图层添加进Map对象时,最先添加的图层放在最下面,后续添加的图层则依次叠加在原有图层上。
下面通过例子演示如何使用这些主要方法和属性。
新建一个VS2005工程,工程命名为“lesson1”,在Form1窗体上添加一个ToolbarControl 控件,一个MapControl控件,一个LicenseControl1控件,一个Button控件;然后在ToolbarControl 控件的属性里设置“伙伴控件”为MapControl,如图4-1所示。
ArcgisEngine(ae)接口详解(5):IGeometry几何高级操作

ArcgisEngine(ae)接⼝详解(5):IGeometry⼏何⾼级操作 IPoint point = new PointClass();point.PutCoords(100, 200);//ITopologicalOperator接⼝⽤于⼏何对象的⼏何操作ITopologicalOperator topo = point as ITopologicalOperator;//做⼀个⼏何对象的缓冲区(结果也是个⼏何对象),参数1是缓冲半径//点线⾯的缓冲区都是⾯,所以可以直接as到IPolygonIPolygon polygon = topo.Buffer(100) as IPolygon;ITopologicalOperator2 topo2 = point as ITopologicalOperator2;//错误⼏何对象的修复,如果当⼏何对象有⼏何错误,例如⾯有⾃相交,可以⽤此修复topo2.IsKnownSimple_2 = false;topo2.Simplify();topo = polygon as ITopologicalOperator;//获取⾯的边,⾯的边是线IPolyline polyline = topo.Boundary as IPolyline;IPolygon polygon2 = new PolygonClass();topo = polygon as ITopologicalOperator;//求两个⼏何对象的重叠部分//两个⼏何对象的重叠部分,可以有很多种⼏何类型组合,例如⾯与⾯重叠是⾯,线与线重叠是线或者点,点与点重叠是点,点与⾯重叠是点,线与⾯重叠是线等等 //参数2是返回结果是多少维的意思,根据经验如果返回结果是点就是0维(esriGeometry0Dimension),线就是1维,⾯就是2维//官⽅⽂档还有详细说明,使⽤者要结合⽂档和实际使⽤情况相互对照来学习IGeometry geometry3 = topo.Intersect(polygon2, esriGeometryDimension.esriGeometry2Dimension);//两个⼏何对象的⼏何操作还有://Union 求两个⼏何对象合并后的,也就是求并集//Clip 裁剪//Cut ⽤线把⾯⼀份为⼆//Difference 擦除//IRelationalOperator⽤于判断两个⼏何对象的空间关系//IRelationalOperator的每种空间关系在官⽅⽂档有具体截图IRelationalOperator relaOper = polygon as IRelationalOperator;//求两个⼏何对象是否有重叠部分,注意:Overlaps判断的两个⼏何对象的⼏何类型必须相同bool result = relaOper.Overlaps(polygon2);//其他空间关系判断有://Contains-完全包含//Crosses-穿过?//Disjoint-完全不相交//Equals-完全重叠(就是两个⼏何对象完全⼀样,常⽤)//Touches-边沿重叠?//Within-完全包含2IPoint point2 = new PointClass();point.PutCoords(200, 300);//计算两点距离double distance = GeometryHelper.TwoPointDistance(point, point2);。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[转载]ArcEngine接口大全(四)《转自ESRI中国社区》(2010-11-14 14:58:22)转载原文标签:分类:AE开发转载原文地址:ArcEngine接口大全(四)《转自ESRI中国社区》作者:GisEr27.怎样从Table中获取具体需求值的Row:1.ITable pTable = (ITable)pFC;2. int index =pTable.Fields.FindField("FieldName");3. IQueryFilter pQFilter = new QueryFilterClass();4. ICursor pCur;5. pCur = pTable.Search(pQFilter, false);6. IRow pRow = new Row();7. IRow pAnswerRow = new Row();8. pRow = pCur.NextRow();9. while (pRow != null)10. {11. string Value =pRow.get_Value(index).ToString();12. if (Value == "Value")13. {14. pAnswerRow = pRow;15. break;16. }17. pRow = pCur.NextRow();18. }28.怎样ZoomInCenter:1.Public Sub ZoomInCenter()2. Dim pMxDocument As IMxDocument3. Dim pActiveView As IActiveView4. Dim pDisplayTransform As IDisplayTransformation5. Dim pEnvelope As IEnvelope6. Dim pCenterPoint As IPoint7. Set pMxDocument = Application.Document8. Set pActiveView = pMxDocument.FocusMap9. Set pDisplayTransform =pActiveView.ScreenDisplay.DisplayTransformation10. Set pEnvelope = pDisplayTransform.VisibleBounds11. 'In this case, we could have set pEnvelope toIActiveView::Extent12. 'Set pEnvelope = pActiveView.Extent13. Set pCenterPoint = New Point14.15. pCenterPoint.x = ((pEnvelope.XMax - pEnvelope.XMin) / 2) +pEnvelope.XMin16. pCenterPoint.y = ((pEnvelope.YMax - pEnvelope.YMin) / 2) +pEnvelope.YMin17. pEnvelope.width = pEnvelope.width / 218. pEnvelope.height = pEnvelope.height / 219. pEnvelope.CenterAt pCenterPoint20. pDisplayTransform.VisibleBounds = pEnvelope21. pActiveView.Refresh22.End Sub29.怎样读取一个字段内的所有值:1. IFeatureClass pFC =m_SDEQuery.getFeatureClass();2. IFeatureCursor pFeaCur = pFC.Search(null,false);3. IFeature pFeature = pFeaCur.NextFeature();4. int pFieldIndex =pFC.Fields.FindField(this.m_cboQryFld.SelectedItem.Value.ToString());5. System.Collections.ArrayList pArr = newSystem.Collections.ArrayList();6. while (pFeature != null)7. {8. string theFieldValue =pFeature.get_Value(pFieldIndex).ToString();9. if (!pArr.Contains(theFieldValue) &&(theFieldValue.Trim() != ""))10. {11. m_cboQryText.Items.Add(theFieldValue);12. pArr.Add(theFieldValue);13. }14. pFeature = pFeaCur.NextFeature();15. }30怎样编辑更改属性字段的值:1.IRow prow = (IRow)bendiFeatureC.GetFeature(1);2.MessageBox.Show(prow.Table.Fields.FieldCount.ToString());3.ITable ptable = (ITable)bendiFeatureC;4.IQueryFilter pqfilter = new QueryFilterClass();5.pqfilter.WhereClause = ""dkmc" = '北江路南郊一公里'";6.IFeatureCursor pfeatcur;7.pfeatcur = bendiFeatureC.Search(pqfilter, false);8.IFeature pfff = pfeatcur.NextFeature();9.while (pfff != null)10.{11. IRow prrr = (IRow)pfff;12. prrr.set_Value(prrr.Fields.FindField("dkmc"), "北江路南郊二公里");13. pfff = (IFeature)prrr;14. pfff.Store();15. pfff = pfeatcur.NextFeature();16.}31怎样将MapControl中的Map复制到PageLayoutControl中1.Public Sub CopyAndOverwriteMap()2. On Error GoTo CopyAndOverwriteMap_err3. Dim pObjectCopy As IObjectCopy4. pObjectCopy = New ObjectCopy5. Dim pToCopyMap As Object6. pToCopyMap = frmMap.AxMapControl1.Map7. Dim pCopiedMap As Object8. pCopiedMap = pObjectCopy.Copy(pToCopyMap)9. Dim pToOverwriteMap As Object10. pToOverwriteMap =PrintPageLayout.AxPageLayoutControl1.ActiveView.FocusMap11. pObjectCopy.Overwrite(pCopiedMap, pToOverwriteMap)12. frmMap.AxMapControl1.MousePointer13.=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerArrow14. frmMain.StatusMessage.Text = ""15. PrintPageLayout.ShowDialog()16. Exit Sub17. CopyAndOverwriteMap_err:18. MsgBox(Err.Number & " - " & Err.Description,MsgBoxStyle.Critical, Application.ProductName & "- Copy Map")19. Exit Sub20.End Sub32怎样判断是否出于编辑状态:1.If m_pEditor.EditState = esriStateEditing Then2. m_pEditor.StartOperation3. '删除冗余节点4. DelSubPoint pMap5. m_pEditor.StopOperation "OK"6.End If33。
怎样用点创建一个Polygon:1.Dim pPnt0 as IPoint, pPnt1 as IPoint, pPnt2 as IPoint2.Set pPnt0 = New Point3.Set pPnt1 = New Point4.Set pPnt2 = New Point5.pPnt0.PutCoords x1, y16.pPnt1.PutCoords x2, y27.pPnt2.PutCoords x3, y38.Dim pPolygon as IPointCollection(注意,这里的polygon是设置为点集的)9.Set pPolygon =New Polygon10.pPolygon.AddPoint pPnt011.pPolygon.AddPoint pPnt112.pPolygon.AddPoint pPnt213.pPolygon.AddPoint pPnt0(注意,这里一定要闭合回到pPnt0才能形成一个Polygon)14.Set pFeature.Shape = pPolygon15.pFeature.Store16.(用这种方法可以创建一个Polyline:17.Dim pPolyline as IPointCollection18.Set pPolyline =New Line19.pPolyline.AddPoint pPnt020.pPolyline.AddPoint pPnt121.pPolyline.AddPoint pPnt2(这时就是一个polyline,不是闭合的)22.还可以用另外一种方法,画一条两点之间的线段:23.Dim pLine As ILine24.Set pLine = New esriGeometry.Line25.pLine.PutCoords pPnt0, pPnt1(第一个为from点,第二个为to点)26.)34样运用属性来计算总面积:1.Dim pDoc As IMxDocument2.Dim pMap As IMap3.Dim pFeatureLayer As IFeatureLayer4.Dim pFeatureClass As IFeatureClass5.6.Set pDoc = m_pApplication.Document7.Set pMap = pDoc.ActiveView.FocusMap8.Set pFeatureLayer = yer(0)9.Set pFeatureClass = pFeatureLayer.FeatureClass10.11.' +++ create the query filter, and give12.' +++ it a where clause13.Dim pQueryFilt As IQueryFilter14.Dim pFeatureCursor As IFeatureCursor15.16.Set pQueryFilt = New QueryFilter17.pQueryFilt.WhereClause = "subtype = 'COM'"18.Set pFeatureCursor = pFeatureClass.Search(pQueryFilt, False)19.20.' +++ get the area field21.Dim pFields As IFields22.Dim pField As IField23.Dim lAIndex As Long24.25.Set pFields = pFeatureClass.FieldsIndex = pFields.FindField("Area")27.Set pField = pFields.Field(lAIndex)28.29.' +++ a variable to hold the total area30.Dim dtotArea As Double31.dtotArea = 0#32.33.' +++ loop through all of the features and34.' +++ calculate the sum of all of the areas35.Dim pFeature As IFeature36.Set pFeature = pFeatureCursor.NextFeature37.Do38.dtotArea = dtotArea + pFeature.Value(lAIndex)39.Set pFeature = pFeatureCursor.NextFeature40.Loop Until pFeature Is Nothing41.42.' +++ send the total area to a message box43.MsgBox dtotArea35关于属性域的一些心得1.Dim pField As IField2. Dim pFields As IFields3. Dim pFieldEdit As IFieldEdit4. Dim pFieldsEdit As IFieldsEdit5. Dim pGeometryDef As IGeometryDef6. Dim pGeometryDefEdit As IGeometryDefEdit7.8. Set pFields = New Fields9. Set pFieldsEdit = pFields10. pFieldsEdit.FieldCount = 3511.12. Set pField = New Field13. Set pFieldEdit = pField14. With pFieldEdit15. .Name = "OBJECTID"16. .AliasName = "OBJECTID"17. .Type = esriFieldTypeOID18. End With19. Set pFieldsEdit.Field(0) = pField20.21. Set pField = New Field22. Set pFieldEdit = pField23. = "SHAPE"24. pFieldEdit.Type = esriFieldTypeGeometry25.26. Set pGeometryDef = New GeometryDef27. Set pGeometryDefEdit = pGeometryDef28. With pGeometryDefEdit29. .GeometryType = esriGeometryPolygon30. Set .SpatialReference = New UnknownCoordinateSystem31. End With32. Set pFieldEdit.GeometryDef = pGeometryDef33. Set pFieldsEdit.Field(1) = pField复制代码个人觉得,在创建shp文件时,运用上面的方法就可以创建,但是当在GDB中创建featureclass的时候就会出现问题,有可能是空间参考的问题。