ArcGIS Engine开发

  • 一、要素的类型 esriFeatureType
  • 二、esriFeatureType与esriGeometryType的区别与联系
  • 三、Arcgis Engine 接口说明(转)
  • 四、esriFieldType 要素字段类型
  • 五、读取FeatureClass的字段
  • 六、获取Feature的点集
  • 七、读取FeatureClass的字段
  • 八、复制字段名称

适合新入门小白查看,花了1周时间理解ArcGIS Engine内部工作空间、要素工作空间、要素类、要素等关系,还有GDB、MDB、Shapefile的读取与写入。

一、要素的类型 esriFeatureType

//pFeatureClass为IFeatureClass对象,获取要素类型
esriFeatureType type = pFeatureClass.FeatureType;
public enum esriFeatureType{esriFTSimple = 1,esriFTSimpleJunction = 7,esriFTSimpleEdge = 8,esriFTComplexJunction = 9,esriFTComplexEdge = 10,esriFTAnnotation = 11,esriFTCoverageAnnotation = 12,esriFTDimension = 13,esriFTRasterCatalogItem = 14
}
Constant Value Description
esriFTSimple 1 Simple Feature.简单要素。
esriFTSimpleJunction 7 Simple Junction Feature.简单的接线功能。
esriFTSimpleEdge 8 Simple Edge Feature.简单的边缘特征。
esriFTComplexJunction 9 Complex Junction Feature.复杂的接线功能。
esriFTComplexEdge 10 Complex Edge Feature.复杂的边缘特征。
esriFTAnnotation 11 Annotation Feature.注释功能。
esriFTCoverageAnnotation 12 Coverage Annotation Feature.覆盖注释功能。
esriFTDimension 13 Dimension Feature.维特征。
esriFTRasterCatalogItem 14 Raster Catalog Item.栅格目录项。

二、esriFeatureType与esriGeometryType的区别与联系

  1. esriFeatureType通常用来表示数据的存储结构,即物理层;
  2. esriGeometryType通常用来表示数据的几何形状,即表现层。构成了图形的基本类型。

esriGeometryType枚举类型详解

Constant Value Description
esriGeometryNull 0 未知类型(Unknown)
esriGeometryPoint 1 点(Point)
esriGeometryMultipoint 2 多点(Multipoint)
esriGeometryLine 13 线段(Line)
esriGeometryCircularArc 14 圆弧(CircularArc)
esriGeometryEllipticArc 16 椭圆弧(EllipticArc)
esriGeometryBezier3Curve 15 贝兹曲线(BezierCurve)
esriGeometryPath 6 路径(Path)
esriGeometryPolyline 3 多段线(Polyline)
esriGeometryRing 11 环(Ring)
esriGeometryPolygon 4 多边形(Polygon)
esriGeometryEnvelope 5 外包(Envelope)
esriGeometryAny 7 任何类型(Any valid geometry)
esriGeometryBag 17 任意几何类型的集合(GeometryBag)
esriGeometryMultiPatch 9 表面几何(MultiPatch)
esriGeometryTriangleStrip 18 三角带(TriangleStrip)
esriGeometryTriangleFan 19 三角扇形(TriangleFan)
esriGeometryRay 20 射线(Ray)
esriGeometrySphere 21 球体(Sphere)
esriGeometryTriangles 22 三角形(Triangles)

看图:

三、Arcgis Engine 接口说明(转)

链接: 接口说明。

四、esriFieldType 要素字段类型

namespace ESRI.ArcGIS.Geodatabase
{[Guid("4CA2D959-5A38-11D2-AABD-00C04FA37585")]public enum esriFieldType{esriFieldTypeSmallInteger = 0,esriFieldTypeInteger = 1,esriFieldTypeSingle = 2,esriFieldTypeDouble = 3,esriFieldTypeString = 4,esriFieldTypeDate = 5,esriFieldTypeOID = 6,esriFieldTypeGeometry = 7,esriFieldTypeBlob = 8,esriFieldTypeRaster = 9,esriFieldTypeGUID = 10,esriFieldTypeGlobalID = 11,esriFieldTypeXML = 12}
}

五、读取FeatureClass的字段

FeatureClass中存储字段名称,Feature中存储字段值,字段值是每个Feature的属性。

   IFields fieldsSrc = pFeatureCls.Fields;string mf = "";string mf2 = "";for (int ii = 0; ii < fieldsSrc.FieldCount; ii++){mf += fieldsSrc.Field[ii].Name + "\r\n";  //第几个参数mf2 += fieldsSrc.Field[ii].AliasName + "\r\n";  //第几个参数}获取要素字段值
int cnt = pFeature.Fields.FieldCount;for (int ii = 0; ii < fieldsSrc.FieldCount; ii++){textboxLogShow(pFeature.get_Value(ii).ToString());}

六、获取Feature的点集

  1. 获取要素的图形
   IGeometry pGeo = pFeature.ShapeCopy;
IPoint ptSrc = pGeo as IPoint;
IPointCollection pc = pGeo as IPointCollection;
  • 线:
pointCollection = new PolylineClass();
IPolyline polyline = pGeo as IPolyline;
pointCollection = polyline as IPointCollection;
  • 面:
    Method 1:这种方法只适用于只有一个整面的面,即只有1个面,面内没有被挖去的部分,面外也没有其他的填充面,也就是说只有一个外部Ring
IGeometry pGeo = pFeatureClass.ShapeCopy;pointCollection = pGeo as IPointCollection;//坐标转换for (int j2 = 0; j2 < pointCollection.PointCount; j2++){ptSrc = new PointClass();pointCollection.QueryPoint(j2, ptSrc);/*Work!*/pointCollection.UpdatePoint(j2, ptCal);}pGeo = ClsArcGIS.GetPolygonGeometry(pointCollection);pFeature.Shape = pGeo;

Method 2:面对象是一个有序Ring对象的集合,面中外部Ring方向是顺时针内部Ring方向是逆时针,不存在面积为0的Ring.所以获取面对象坐标,就要获取面的内部和外部所有Ring对象即可。

//遍历找出面的内外部Ring:Dictionary<IRing, List<IRing>> dicRings = new Dictionary<IRing, List<IRing>>();IGeometry pShape = null;esriGeometryType pGeoType = pGeo.GeometryType;try{IPolygon4 polygon = pGeo as IPolygon4;//外环个数int exRingCount = polygon.ExteriorRingCount;IGeometryBag exteriorRings = polygon.ExteriorRingBag;//For each exterior rings find the interior rings associated with it IEnumGeometry exteriorRingsEnum = exteriorRings as IEnumGeometry;exteriorRingsEnum.Reset();IRing currentExteriorRing = exteriorRingsEnum.Next() as IRing;while (currentExteriorRing != null){if (!dicRings.ContainsKey(currentExteriorRing)){dicRings[currentExteriorRing] = new List<IRing>();}IGeometryBag interiorRings = polygon.get_InteriorRingBag(currentExteriorRing);IEnumGeometry interiorRingsEnum = interiorRings as IEnumGeometry;interiorRingsEnum.Reset();IRing currentInteriorRing = interiorRingsEnum.Next() as IRing;while (currentInteriorRing != null){dicRings[currentExteriorRing].Add(currentInteriorRing);currentInteriorRing = interiorRingsEnum.Next() as IRing;}currentExteriorRing = exteriorRingsEnum.Next() as IRing;}

七、读取FeatureClass的字段

FeatureClass中存储字段名称,Feature中存储字段值,字段值是每个Feature的属性。

  IFields fieldsSrc = pFeatureCls.Fields;string mf = "";string mf2 = "";for (int ii = 0; ii < fieldsSrc.FieldCount; ii++){mf += fieldsSrc.Field[ii].Name + "\r\n";  //第几个参数mf2 += fieldsSrc.Field[ii].AliasName + "\r\n";  //第几个参数}//获取要素字段值
int cnt = pFeature.Fields.FieldCount;for (int ii = 0; ii < fieldsSrc.FieldCount; ii++){textboxLogShow(pFeature.get_Value(ii).ToString());}

八、复制字段名称

Method 1:首先获取要素类的IFields字段集合,然后遍历字段,添加到新的IFields中。

 #region 获取属性字段 Method 1IGeometryDefEdit geomDefEdit = null;IFields pFields = pFeatCls.Fields;IFields pNewFields = new FieldsClass();IFieldsEdit pNewFieldsEdit = pNewFields as IFieldsEdit;//保证源要素类与新要素类的字段结构一致,但空间范围不一样,即自己手动设计Geometry字段for (int i = 0; i < pFields.FieldCount; i++){pField = pFields.get_Field(i);if (pField.Type != esriFieldType.esriFieldTypeGeometry){pNewFieldsEdit.AddField(pField);}else{pGeoField = pField;geomDefEdit = pGeoField.GeometryDef as IGeometryDefEdit;geomDefEdit.SpatialReference_2 = pSpatialReference;pNewFieldsEdit.AddField(pGeoField);}}#endregion

Method 2:通过字段检查对象IFieldChecker ,获得原有要素类的所有字段。

 #region 获取属性字段 Method 2//属性信息// 创建字段检查对象IWorkspace pTWorkspace = pWorkspace as IWorkspace;IFieldChecker pFieldChecker = new FieldCheckerClass();IEnumFieldError pEnumFieldError = null;IFields fieldsTar;pFieldChecker.ValidateWorkspace = pTWorkspace;pFieldChecker.Validate(pFeatCls.Fields, out pEnumFieldError, out fieldsTar);#endregion

ArcGIS Engine开发(1)相关推荐

  1. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  2. 【转】使用ArcGIS Engine开发ArcGIS Server的胖客户端浏览程序

    摘要:在ArcGIS 9的家族中,增加了两个新产品:ArcGIS Engine和ArcGIS Server.由于它们各自分别在C/S领域和B/S领域的强大开发能力,一经推出就备受瞩目.其中ArcGIS ...

  3. ArcGIS Engine开发:框架/结构+对象库

    ArcGIS Engine开发:框架/结构+对象库 框架/结构: ArcGIS Engine 开发人员有权使用一系列的控制器,这些控制器 准许很多属性.事件和方法的使用.尽管一个简单的应用软件 仅仅通 ...

  4. ArcGIS Engine开发基础总结(一)

    标准Engine功能 地图浏览    地图制作 数据查询 数据分析 及 所有的开发控件 -MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...

  5. C#,ArcGIS Engine开发入门教程

    利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 Dixon整理 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法 ...

  6. ArcGIS Engine开发---图层符号化

    使用ServerStyle 如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系 ...

  7. GIS二次开发:实验一 ArcGIS Engine 开发初步

    实验一 ArcGIS Engine 开发初步 一.实验目的 掌握ArcGIS Engine的安装: 熟悉ArcGIS Engine中几个常用的控件: 搭建第一个简单的ArcGIS Engine 程序: ...

  8. ArcGIS Engine开发的类ArcCatalog数据管理工具

    这是以前的ArcGIS Engine开发成果,主要是Geodatabase方面的,模仿ArcCatalog的相关功能,进行了相关的开发 系统环境: VS2010.ArcGIS Engine10.Dev ...

  9. ArcGIS Engine开发前基础知识(4)

    ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...

最新文章

  1. ntfs分区对linux的局限,如何使Linux支持NTFS分区
  2. 粒子群PSO优化算法学习笔记 及其python实现(附讲解如何使用python语言sko.PSO工具包)
  3. 南通大学计算机网络及应用,南通大学《计算机网络》课程设计资料.pdf
  4. staf工作笔记-stax自定义信号和信号处理功能
  5. golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
  6. Python使用数学形态学方法处理图像
  7. 【毕业答辩】如何制作优秀的毕业论文答辩PPT?
  8. 计算机系统保密检查整改情况函,民政局保密工作整改情况的报告
  9. 【学习随记】Gyro,Btn,filters_addClass
  10. 如何查看内存条的实际使用频率
  11. Flash网页小游戏开发教程
  12. xshell免费版本下载
  13. 大数据数据湖之hudi
  14. mysql和myODBC安装和配置
  15. 迭代器(lterator)
  16. 作为一名计算机学院普通的大学生如何提高兴趣敲代码?谈谈我的感受,欢迎交流
  17. Mixly21:遥控彩灯
  18. 渗透测试实战 - 外网渗透内网穿透(超详细)
  19. python匿名函数可以赋值给变量_python3的匿名函数 | 吴老二
  20. python split()

热门文章

  1. ttl值设置多少才合适
  2. 成都理工大学地理信息系统导论804——2021年考研真题
  3. 5分钟讲解直流线性稳压降压电源基本原理
  4. linux 循环 cpu使用率脚本,监控CPU使用率的三种方法(shell脚本)
  5. 显示网格_C4D怎么隐藏或显示坐标网格?Ngon线,隐藏空白点
  6. Java 关键字之abstract用法
  7. 悟纤和师傅去女儿国「线程并行变为串行,Thread你好牛」- 第296篇
  8. Nature子刊:刘威/潘玉峰等发现肠道微生物可以影响果蝇的攻击行为
  9. 时区 : America/Mexico_City 中文:美国中部时间(墨西哥城) 的夏令时
  10. RedisKey值出现\xAC\xED\x00\x05t\x00\x19原因及解决方案。