ArcGIS_Engine类,接口一览表
- 格式:xls
- 大小:2.27 MB
- 文档页数:147
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的那个属性。
arcgisengine帮助文档icirculararc 解析
ArcGIS Engine 是一个用于构建 GIS 应用程序的软件开发包 (SDK)。
它允许开发人员将 GIS 功能集成到自定义应用程序中。
`ICircularArc` 是 ArcGIS Engine 中的一个接口,用于表示圆弧。
这个接口提供了一些方法来查询和操作圆弧对象。
解析 `ICircularArc` 接口,以下是其主要属性和方法:
属性
1. Center (几何中心): 圆弧的中心点。
2. Radius: 圆弧的半径。
3. StartAngle: 圆弧的起始角度。
4. SweepAngle: 圆弧的跨越角度。
5. Type: 圆弧的类型,例如 `arcopen`, `arclockwise`, 或 `arccw`。
方法
1. QueryPoint(double x, double y): 根据给定的 x 和 y 坐标查询圆弧上或外的点。
2. QuerySegment(double x, double y): 根据给定的 x 和 y 坐标查询圆弧上或外的线段。
3. QueryCircle(double radius): 根据给定的半径查询圆弧上或外的圆。
4. Map(Graphics): 将圆弧映射到给定的 Graphics 对象上。
这只是 `I CircularArc` 接口的一些基本属性和方法。
为了深入了解和使用这个接口,建议查阅 ArcGIS Engine 的官方文档或相关的开发指南。
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接口也提供了用于查找和绘制元素的方法。
第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所示。
1ArcEngine类库ESRI.ArcGIS.esriSystem; //包括IArray,ISet,IFile,等一些基础底层接口和类ESRI.ArcGIS.SystemUI; //包括ICommand,ITool,等一些用户界面的接口和类ESRI.ArcGIS.Geometry; //包括点,线,面,路径,环,等核心几何对象3D,地理坐标,投影坐标等ESRI.ArcGIS.Display; //包括ISymbol,IColor,IDraw,等一些用来在地图上显示或绘制的接口和类ESRI.ArcGIS.DisplayUI; //提供一些可视化的界面去设置display里的东西ESRI.ArcGIS.Controls; //MapControl,TOC,Toolbar,Licence,PageLa yout等核心可视化组件ESRI.ArcGIS.ArcMapUI; //提供一些ArcMap自带的可视化界面的接口,实现在ArcmapESRI.ArcGIS.Framework; //提供一些程序核心对象,如IApplication,IDocument,等ESRI.ArcGIS.Carto; //包括一些数据显示的接口和类,如ILegend,IMap,ILayer,等ESRI.ArcGIS.Geodatabase;//提供操作地理数据库的接口,如IWorkspace,IDataset,IFeature,IFileds,ITin等ESRI.ArcGIS.DataSourcesFile;//提供打开矢量数据的接口,如ICoverage,ICadTransformation等ESRI.ArcGIS.DataSourcesGDB;//提供打开Access及一些SDE支持的RDBMS接口ESRI.ArcGIS.DataSourcesOleDB;//提供打开一些支持oledb的数据库的接口ESRI.ArcGIS.DataSourcesRaster;//提供打开一些栅格数据及转换数据的接口ESRI.ArcGIS.OutPut //提供一些打印、转换输出接口,如IBmpExporter================以上为一些常用到的接口除了ESRI.ArcGIS.SystemUI外其余以UI结尾的namespace均属AO的范畴1.1System类库System类库是ArcGIS体系结构中最底层的类库。
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);。
下面将概述ArcGISEngine中的各个类库。
本节中的各个模型图展示了ArcGISEngine的类库架构。
理解类库结构、它们的依赖关系和基本功能将有助于开发人员了解ArcGISEngine的组件。
下面根据依赖关系的顺序对类库进行讨论。
模型图中在每个类库框的右上角显示了其序列号。
例如,作为ArcGIS体系结构基础的System类库,其编号为1,而编号为7的GeoDatabase类库依赖于模型图中其前面的6个类库—SyStem、SystemUI、Geometry、Display、Server和Output。
System类库System类库是ArcGIS体系结构中最底层的类库。
System类库包含给构成ArcGIS的其他类库提供服务的组件。
System类库中定义了大量开发者可以实现的接口。
AoInitializer对象就是在System类库中定义的,所有的开发者必须使用这个对象来初始化ArcGISEngine和解除ArcGISEngine的初始化。
开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。
SystemUI类库SystemUI类库包含用户界面组件接口定义,这些用户界面组件可以在ArcGIS Engine中进行扩展。
包含ICommand、ITool和IToolControl接口。
开发者用这些接口来扩展UI组件,ArcGIS Engine开发人员自己的组件将使用这些UI组件。
这个类库中包含的对象是一些实用工具对象,开发人员可以通过使用这些对象简化用户界面的开发。
开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。
Geometry类库Geometry类库处理存储在要素类中的要素几何图形或形状或其他图形元素。
大多数用户会遇到的基本几何图形对象为Point、MultiPoint、Polyline和Polygon。
除了这些顶级实体外,就是作为多义线和多边形的组成部分的几何图形,是组成几何图形的子要素。
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接口大全(五)《转自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()方法,应该是不可以的,希望你们试一下。