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章地图组成及图层控制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);。
ArcEngineIMap接口使用方法
ArcEngineIMap接口使用方法使用IMap接口显示各种数据源的数据。
IMap接口的成员ActiveGraphicsLayer:活动图形图层,如果没有将创建一个基本memory graphics layer。
AddLayer:向地图中添加单个图层。
AddLayers:向地图中添加多个图层。
AddMapSurround:向地图中添加map surround。
AnnotationEngine:地图使用的注记(标签)引擎。
AreaOfInterest:地图的感兴趣区域。
Barriers:barriers列表和标签权重。
BasicGraphicsLayer:基本图形层。
ClearLayers:从地图中移除所有图层。
ClearMapSurrounds:从地图中移除所有旁注。
ClearSelection:清除地图选择。
ClipBorder:ClipGeometry周围一个可选边界。
ClipGeometry:地图图层中一个要剪切的形状。
ComputeDistance:计算地图上两个点的距离并返回结果。
CreateMapSurround:创建并初始化一个map surround。
从样式集中指定一个可选样式。
DelayDrawing:暂停绘制。
DelayEvents:将操作按批组合来减少通知。
DeletLayer:从map中删除图层。
DeleteMapSurround:从地图中删除map surround。
Description:地图描述。
DistanceUnits:地图的距离单位。
Expanded:指出地图是否可以扩张。
FeatureSelection:地图中选择的要素。
GetPageSize:获得地图的页面大小。
IsFramed:指出地图是否在一个框架内而不是在整个窗口中绘制。
Layer:给定序号的layer。
LayerCount:地图中图层的数目。
Layers:以uid表明类型的地图图层。
如果recursive是true,将以layers的形式返回layers。
ArcGIS_Engine类,接口一览表
第 3 页,共 147 页
Type
类型 Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface
9.1 Library esri3DAnalystUI esri3DAnalystUI esri3DAnalystUI esri3DAnalystUI esri3DAnalystUI esri3DAnalystUI esri3DAnalystUI esriArcCatalog esriArcCatalog esriArcGlobe esriArcGlobe esriArcGlobe esriArcGlobe esriArcGlobe esriArcGlobe esriArcGlobe esriArcGlobe
第 2 页,共 147 页
Type
类型 Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface
Type Interface
类型 Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface Interface
ArcEngine接口大全二
ArcEngine接口大全二ArcEngine接口大全(二)《转自ESRI中国社区》7. 关于IPolyline接口(esriGeometry)IPolyline接口的第一个属性FromPoint与ToPoint(读写,设置或者读取该点的起始点和终止点,返回都是IPoint类型的变量)IPolyline接口的第二个方法QueryFromPoint (from )(方法,返回IPoint 类型的变量到参数from)IPolyline接口的第三个方法QueryToPoint (to )(方法,返回IPoint类型的变量到参数to)1.Public Sub t_ICurve_QueryPoints()2. Dim pID As New UID3. pID = "esriEditor.editor"4. Dim pEditor As IEditor5. Dim pApp As IApplication6. Set pApp = MxApplication7. Set pEditor = pApp.FindExtensionByCLSID(pID)8.9. If pEditor.SelectionCount <> 1 Then10. MsgBox "select one Curve"11. Exit Sub12. End If13.14. Dim pEnumFeat As IEnumFeature15. Dim pFeature As IFeature16.17. Set pEnumFeat = pEditor.EditSelection18.19. Dim pCurve As ICurve20. Dim pPointFrom As IPoint21. Dim pPointT o As IPoint22.23. Set pPointFrom = New Point24. Set pPointTo = New Point25.26. Set pFeature = pEnumFeat.Next27.28. While Not pFeature Is Nothing29. If pFeature.Shape.GeometryType = esriGeometryPolyline Or _30. esriGeometryPolyline Or esriGeometryLine Then31. Set pCurve = pFeature.Shape32. pCurve.QueryFromPoint pPointFrom33. pCurve.QueryToPoint pPointT o34. MsgBox "+++ICurve properties..." & vbCrLf _35. & "Curve.QueryFromPoint (x,y) = " & pPointFrom.X & "," & pPointFrom.Y & vbCrLf _36. & "Curve.QueryToPoint (x,y) = " & pPointTo.X & ","& pPointTo.Y & vbCrLf37. End If38. Set pFeature = pEnumFeat.Next39. WendIPolyline接口的第四个方法Generalize (maxAllowableOffset )(方法,用道格拉斯普克发来简化polyline)IPolyline接口的第五个方法Weed (maxAllowableOffsetFactor ) (方法,和方法Generalize类似,均为简化polyline的方法,不同的是参数。
ArcEngine接口大全五
ArcEngine接口大全(五)《转自ESRI中国社区》37.想用ITopologicalOperator做图层剪切1.Dim pTopoO As ITopologicalOperator2.Set pTopoO = pFeature.Shape3.Dim pEnv As IEnvelope4.Set pEnv = New Envelope5.pEnv.XMax = 1006.pEnv.XMin = 907.pEnv.YMax = 1008.pEnv.YMin = 909.pTopoO.Clip epnv10.pFeature.Store38.FJJ关于ISpatialFilter接口方法的问题ing System;ing System.Collections.Generic;ing ponentModel;ing System.Data;ing System.Drawing;ing System.Text;ing System.Windows.Forms;ing ESRI.ArcGIS.Geodatabase;ing ESRI.ArcGIS.Carto;space Solutions11.{12. public partial class Form1 : Form13. {14. public Form1()15. {16. InitializeComponent();17. ILayer pLayer;18. IFeatureLayer pFeatureLayer;19. IFeatureClass pFeatureClass;20. IFeatureCursor pFeatureCursor;21. IFeature pFeature;22. ISpatialFilter pSpatialFilter;23. pSpatialFilter = new SpatialFilterClass();24. pSpatialFilter.Geometry = pGeom; ///这个pGeom就是传进来的参数,就是你所谓的那个“选择了地图上的一块区域”25. pSpatialFilter.SpatialRel =esriSpatialRelEnum.esriSpatialRelContains;26. int layerCount = yerCount;27. for (int i = 0; i < layerCount; i++)28. {29. pLayer = axMapControl1.get_Layer(i);30. pFeatureLayer = (IFeatureLayer)pLayer;31. pFeatureClass = pFeatureLayer.FeatureClass;32. pFeatureCursor =pFeatureClass.Search((IQueryFilter)pSpatialFilter, false);33. pFeature = pFeatureCursor.NextFeature();34. while (pFeature != null)35. {36. listView1.Items.Add();37. }38. }39. }40. }41.}39.关于更改符号的代码1.private void axTOC1_OnDoubleClick(object sender,ITOCControlEvents_OnDoubleClickEvent e)2. {3. esriTOCControlItem itemType =esriTOCControlItem.esriTOCControlItemNone;4. IBasicMap basicMap = null;5. ILayer layer = null;6. object unk = null;7. object data = null;8. axTOC1.HitTest(e.x, e.y, ref itemType, ref basicMap, reflayer, ref unk, ref data);9. if (e.button == 1)10. {11. if (itemType ==esriTOCControlItem.esriTOCControlItemLegendClass)12. {13. //取得图例14. ILegendClass pLegendClass =((ILegendGroup)unk).get_Class((int)data);15. //创建符号选择器SymbolSelector实例16. FormSymbolControl SymbolSelectorFrm = newFormSymbolControl(pLegendClass, layer);17. if (SymbolSelectorFrm.ShowDialog() ==DialogResult.OK)18. {19. //局部更新主Map控件20. //m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);21. axMap1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);22. //设置新的符号23. pLegendClass.Symbol =SymbolSelectorFrm.pSymbol;24. //更新主Map控件和图层控件25. this.axMap1.ActiveView.Refresh();26. this.axTOC1.Refresh();27. }28. }29. }30. }40.关于显示属性的代码1. ///2. /// 填充DataTable中的数据3. ///4. ///5. ///6. ///7. public static DataTable CreateDataTable(ILayer pLayer, stringtableName)8. {9. //创建空DataTable10. DataTable pDataTable = CreateDataTableByLayer(pLayer,tableName);11. //创建DataTable的行对象12. DataRow pDataRow = null;13. //取得图层类型14. string shapeType = getShapeType(pLayer);15. //从ILayer查询到ITable16. ITable pTable = pLayer as ITable;17. ICursor pCursor = pTable.Search(null, false);18. //取得ITable中的行信息19. IRow pRow = pCursor.NextRow();20. int n = 0;21. while (pRow != null)22. {23. //新建DataTable的行对象24. pDataRow = pDataTable.NewRow();25. for (int i = 0; i < pRow.Fields.FieldCount; i++)26. {27. //如果字段类型为esriFieldTypeGeometry,则根据图层类型设置字段值28. if (pRow.Fields.get_Field(i).Type ==esriFieldType.esriFieldTypeGeometry)29. {30. pDataRow = shapeType;31. }32. //当图层类型为Anotation时,要素类中会有esriFieldTypeBlob类型的数据,33. //其存储的是标注内容,如此情况需将对应的字段值设置为Element34. else if (pRow.Fields.get_Field(i).Type ==esriFieldType.esriFieldTypeBlob)35. {36. pDataRow = "Element";37. }38. else39. {40. pDataRow = pRow.get_Value(i);41. }42. }43. //添加DataRow到DataTable44. pDataTable.Rows.Add(pDataRow);45. pDataRow = null;46. n++;47. pRow = pCursor.NextRow();48. ////为保证效率,一次只装载最多条记录49. //if (n == 2000)50. //{51. // pRow = null;52. //}53. //else54. //{55. // pRow = pCursor.NextRow();56. //}57. }58. return pDataTable;59. }41.关于IFeature变量添加进List<IFeature>数组里的问题1.List<IFeature> listFeature = new List<IFeature>();2.try3.{4. pFC_TER_LN =pFeatureWorkspace.OpenFeatureClass("GD10K_DLG_TER_LN_l");5.}6.catch7.{8. richTextBox1.SelectionStart = richTextBox1.Text.Length;9. richTextBox1.SelectedText = "地形图:" + + "中没有TER_LN_l图层!\n";10. richTextBox1.Refresh();11. continue;12.}13.for (int i = 0; i < pFC_TER_LN.FeatureCount([color=Red]null[/color]);i++) ///将该图层的每个Feature提取出来以供编辑时依次赋值,并且可以设置FeatureCount方法的参数为一个IQueryFilter类型的变量,就可以实现你所要求的方法了,用Search()方法,应该是不可以的,希望你们试一下。
ArcEngine接口大全(带示例)
ArcEngine接口大全(带示例)1、抽象类,类,和组件对象类抽象类是不能实例化的,抽象类中是一系列抽象的方法,故是不能实例化的,它只能被继承。
不同的类可以继承同一个抽象类,但内部对同一方法的实现可能是不一样的。
如AO中的接口都是抽象类。
用户可以在类中实现这些接口,也就是继承这些接口。
如用户可以在自己的类中实现ICommand接口,生成一个Command,或者实现ICommand、IT ool接口,生成一个T ool.类是不能直接实例化的,它只能作为另一个类的属性或者被其它类的对象实例化。
如Sde3Workspace Class、Sde4Workspace Class,FeatureClass,FeatureDataset它们是不能通过New 直接实例化的,只能通过SdeWorkspaceFactory CoClass这个组件对象类所实现的IWorkspaceFactory接口里的Open方法来实例化。
FeatureClass,FeatureDataset也是不能直接实例化的,他只能通过IFeatureWorkspace接口里的CreateFeatureClass,CreateFeatureDataset 方法来实例化。
组件对象类能够通过New来直接实例化。
如SdeWorkspaceFactory,QueryFilter它们是可以通过New来直接实例化的。
2、继承类继承(type inheritance)定义了专门的类,它们拥有超类的属性和方法,并且同时也有自身的属性和方法。
上图说明primary line 和secondary line 是line 的一种类型。
实例化(Instantiation)指定一个类的对象有这样的方法,它能够创建另外一个类的对象。
pole 对象有一个方法能够创建transformer 对象。
3、类和接口的实现一些类可能实现多个接口,一个接口也可能被多个类所实现,但不同的类实现同一个接口可能内部并不是一样的,这就实现了多态性.如ILayer这个接口被多个接口实现,其中包括FeatureLayer和RasterLayer,但这两个类实现ILayer接口时内部实现肯定是不一样的!但在外部对ILayer的操作是一样的!4、接口之间的相互查询一个类可以实现多个接口,每一个接口可能包括一系列的属性和方法,但有时候一个接口里可能没有你想要的方法和属性,可能在这个类所实现接口的另一个接口里,这就涉及到从一个接口转到这个类所实现接口的另一个接口里,对于类所实现的一系列接口里,接口间是可以相互跳转的。
arcengine
arcengine 缓冲区查询缓冲区查询特别有⽤,也很⽅便,照着别⼈的⾃⼰写了⼀个,记录⼀下。
缓冲区查询主要⽤到的核⼼接⼝就两个,ITopologcialOperator和ISpatialFilter这两个接⼝。
第⼀个接⼝⽤来构建缓冲区和进⾏其他的拓扑操作,第⼆个接⼝是空间过滤器,其中提供空间查询的各种关系。
这两个接⼝还有很多其他属性和⽅法,⽤到时⾃⾏查看帮助。
⼀下是缓冲区查询的核⼼代码,当然之前必须指定查找的⽬标图层和建⽴缓冲区的图层和对象。
IGeometry pGeometry = TestFeature.Shape;ITopologicalOperator pTopologicalOperator = pGeometry as ITopologicalOperator;pGeometry = pTopologicalOperator.Buffer(Distence);//Distence是缓冲距离pTopologicalOperator.Simplify();ISpatialFilter pSpatialfilter = new SpatialFilterClass();pSpatialfilter.Geometry = pGeometry;pSpatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;pSpatialfilter.GeometryField = "Shape";ILayer pLayer = this.axMCl1.get_Layer(0);IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;IFeatureCursor FeatureCursor = pFeatureClass.Search(pSpatialfilter, false);IFeature Feature = FeatureCursor.NextFeature();。
ArcEngine接口大全
ArcEngine接口大全[转载]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.To String());5. System.Collections.ArrayList pArr = newSystem.Collections.ArrayList();6. while (pFeature != null)7. {8. string theFieldValue =pFeature.get_Value(pFieldIndex).T oString();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 GoT o 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.FocusM ap11. pObjectCopy.Overwrite(pCopiedMap, pToOverwriteMap)12. frmMap.AxMapControl1.MousePointer13.=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPoin terArrow14. 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。
ArcgisEngine(ae)接口详解(5):IGeometry几何基础操作
ArcgisEngine(ae)接⼝详解(5):IGeometry⼏何基础操作//点操作~~~~~~~~~~~~~~~~~~~~~~~~~//通过坐标⽣成点IPoint point = new PointClass();point.PutCoords(100, 200);//获取点坐标double x = point.X;double y = point.Y;//线操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//通过点集⽣成线IPolyline polyline = new PolylineClass();//思路是通过点集接⼝IPointCollection添加线的点,创建线和⾯同样可⽤此⽅法IPointCollection pointColl = polyline as IPointCollection;point = new PointClass();point.PutCoords(100, 200);pointColl.AddPoint(point);point = new PointClass();point.PutCoords(300, 100);pointColl.AddPoint(point);//通过点集⽣成线完成~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//获取线的起点和终点IPoint pointStart = polyline.FromPoint;IPoint pointEnd = polyline.ToPoint;//获取线的长度double length = polyline.Length;//获取线的矩形范围(envelop),⾯的获取⽅式也⼀样//线和⾯都有envelope,不过点的envelop没有意义IEnvelope envelope = polyline.Envelope;//获取线是否是闭合的线bool isClosed = polyline.IsClosed;//把线的⽅向反转,就是起点和终点,点的顺序反转polyline.ReverseOrientation();//获取线的所有点,对于⾯同样可⽤此⽅法for (int i = 0; i < pointColl.PointCount; i++){IPoint point1 = pointColl.Point[i];}//⾯操作~~~~~~~~~~~~~~~~~~~~~~~~~~~IPolygon polygon = new PolygonClass();//通过点集⽣成线:与线⼀样//注意:⽣成⾯时点集要求第⼀个点做坐标和最后⼀个点的坐标⼀样,也可理解为同⼀个点添加了两次,否则会出错//获取⾯的周长length = polygon.Length;IArea area = polygon as IArea;//获取⾯的⾯积double area1 = area.Area;//获取⾯的所有点,跟线获取的⽅法⼀样//⼏何通⽤操作~~~~~~~~~~~~~~~~~~~~~~~~~~~//点线⾯都可以as到IGeometry,所有⼏何对象的类型都可以,因此所有⼏何类型接⼝都继承了IGeometryIGeometry geometry = polygon as IGeometry;//获取⼏何类型,可以区分出点,线,⾯等//如果有种情况获取到的⼏何对象的类型是IGeometry,那可以通过这个判断是什么⼏何类型,然后在as到对应的接⼝再做下⼀步操作esriGeometryType geometryType = geometry.GeometryType;//获取是否空⼏何对象//空⼏何对象和null不同,例如点对象可是没有点坐标,线对象没有⼀个点等等//空⼏何对象其中⼀种情况是,从feature获取到的⼏何对象,可能是空的,因为⼀条要素肯定有⼀个对应的⼏何对象,可是编辑时⼜可以不录⼊⼏何对象(⽽只是录⼊属性字段值)bool isEmpty = geometry.IsEmpty;//矩形范围(Envelope)操作~~~~~~~~~~~~~~~~~~~~~~~~~~~IEnvelope envelope2 = polygon.Envelope;//获取矩形的坐标,矩形⽤最⼩点(左下⾓的点)和最⼤点(右上⾓的点)两个点就⾜够表⽰double xmin = envelope2.XMin;double ymin = envelope2.YMin;double xmax = envelope2.XMax;double ymax = envelope2.YMax;//获取矩形的宽和⾼double height = envelope2.Height;double width = envelope2.Width;//通过坐标创建矩形envelope2 = new EnvelopeClass();envelope2.PutCoords(100, 200, 300, 400);//扩⼤和缩⼩//有两种情况,根据参数3设置,false=按长度,true=按⽐例//下例是⽔平扩⼤10(⽶),垂直扩⼤20(⽶)envelope2.Expand(10, 20, false);//下例是⽔平设为原来的0.8倍(可以理解为缩⼩了20%),垂直设为原来的1.1倍(可以理解为放⼤了10%) envelope2.Expand(0.8, 1.1, true);//移动//把矩形中⼼点移到某个点(实际是整个矩形移动)envelope2.CenterAt(point);//矩形转⾯//逻辑上矩形也是⾯,但在ae对象中IEnvelop和IPolygon不能互转,下⾯是edm的转换⽅法polygon = GeometryHelper.EnvelopeToPolygon(envelope);。
ArcEngine接口大全六
ArcEngine接口大全(六)《转自ESRI中国社区》44.Map接口在ArcMap中Map对象是由MXDocument对象的MapFrame对象管理,MapFrame是一个框架元素。
Map对象有双重身份,一方面是数据的管理容器,可以加载地理数据和图形元素,扮演了数据管理器的角色,另一方面它又可以让用户看到这些数据即扮演了数据显示器的角色,当加载数据到Map对象的时候,Map对象是数据的管理者;当改变视图范围,刷新地图的时候它是数据的显示者。
Map对象主要实现的接口由IMap,IGraphicContainer,IActiveView,IMapBookmarks 等接口。
IMap接口主要用于管理Map对象中的Layer对象,要素选择集对象,MapSourround对象,空间参考等对象。
Map对象可以显示图形元素(Graphics Element),Map对象通过IGraphicsContainer接口来管理这些元素对象,包括图形元素和框架元素。
IGraphicsContainer返回的是Map对象中处于活动状态的Graphics layer引用指针,它可以是一个Basicgraphicslayer,也可以是CompositeGraphicsLayer中的一个图层,或者是一个FDOGraphicsLayer注记图层。
45.IActiveView接口IActiveView接口定义了Map对象的数据显示功能。
使用该接口可以改变视图的范围,刷新视图。
IActiveView的PartialRefresh(esriViewGeography, pLayer, null)用于刷新指定图层:IActiveView的PartialRefresh(esriViewGeography, null, null) 用于刷新刷新所有图层:IActiveView的PartialRefresh(esriViewGeoSelection, null, null) 用于刷新所选择的对象:IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新图形元素:IActiveView的PartialRefresh(esriViewGraphics, pElement, null) 用于刷新指定图形元素IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新所有图形元素IActiveView的PartialRefresh(esriViewGraphicSelection, null, null)用于刷新所选择的图元。
- 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的时候就会出现问题,有可能是空间参考的问题。