ArcGIS Engine开发(1)
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的区别与联系
- esriFeatureType通常用来表示数据的存储结构,即物理层;
- 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的点集
- 获取要素的图形
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)相关推荐
- ArcGIS Engine开发前基础知识(2)
ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...
- 【转】使用ArcGIS Engine开发ArcGIS Server的胖客户端浏览程序
摘要:在ArcGIS 9的家族中,增加了两个新产品:ArcGIS Engine和ArcGIS Server.由于它们各自分别在C/S领域和B/S领域的强大开发能力,一经推出就备受瞩目.其中ArcGIS ...
- ArcGIS Engine开发:框架/结构+对象库
ArcGIS Engine开发:框架/结构+对象库 框架/结构: ArcGIS Engine 开发人员有权使用一系列的控制器,这些控制器 准许很多属性.事件和方法的使用.尽管一个简单的应用软件 仅仅通 ...
- ArcGIS Engine开发基础总结(一)
标准Engine功能 地图浏览 地图制作 数据查询 数据分析 及 所有的开发控件 -MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...
- C#,ArcGIS Engine开发入门教程
利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 Dixon整理 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法 ...
- ArcGIS Engine开发---图层符号化
使用ServerStyle 如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系 ...
- GIS二次开发:实验一 ArcGIS Engine 开发初步
实验一 ArcGIS Engine 开发初步 一.实验目的 掌握ArcGIS Engine的安装: 熟悉ArcGIS Engine中几个常用的控件: 搭建第一个简单的ArcGIS Engine 程序: ...
- ArcGIS Engine开发的类ArcCatalog数据管理工具
这是以前的ArcGIS Engine开发成果,主要是Geodatabase方面的,模仿ArcCatalog的相关功能,进行了相关的开发 系统环境: VS2010.ArcGIS Engine10.Dev ...
- ArcGIS Engine开发前基础知识(4)
ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...
最新文章
- ntfs分区对linux的局限,如何使Linux支持NTFS分区
- 粒子群PSO优化算法学习笔记 及其python实现(附讲解如何使用python语言sko.PSO工具包)
- 南通大学计算机网络及应用,南通大学《计算机网络》课程设计资料.pdf
- staf工作笔记-stax自定义信号和信号处理功能
- golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
- Python使用数学形态学方法处理图像
- 【毕业答辩】如何制作优秀的毕业论文答辩PPT?
- 计算机系统保密检查整改情况函,民政局保密工作整改情况的报告
- 【学习随记】Gyro,Btn,filters_addClass
- 如何查看内存条的实际使用频率
- Flash网页小游戏开发教程
- xshell免费版本下载
- 大数据数据湖之hudi
- mysql和myODBC安装和配置
- 迭代器(lterator)
- 作为一名计算机学院普通的大学生如何提高兴趣敲代码?谈谈我的感受,欢迎交流
- Mixly21:遥控彩灯
- 渗透测试实战 - 外网渗透内网穿透(超详细)
- python匿名函数可以赋值给变量_python3的匿名函数 | 吴老二
- python split()
热门文章
- ttl值设置多少才合适
- 成都理工大学地理信息系统导论804——2021年考研真题
- 5分钟讲解直流线性稳压降压电源基本原理
- linux 循环 cpu使用率脚本,监控CPU使用率的三种方法(shell脚本)
- 显示网格_C4D怎么隐藏或显示坐标网格?Ngon线,隐藏空白点
- Java 关键字之abstract用法
- 悟纤和师傅去女儿国「线程并行变为串行,Thread你好牛」- 第296篇
- Nature子刊:刘威/潘玉峰等发现肠道微生物可以影响果蝇的攻击行为
- 时区 : America/Mexico_City 中文:美国中部时间(墨西哥城) 的夏令时
- RedisKey值出现\xAC\xED\x00\x05t\x00\x19原因及解决方案。