Arcgis Engine(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,所有几何对象的类型都可以,因此所有几何类型接口都继承了IGeometry IGeometry 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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!