Arcgis vba 点构面 polygon ring 涉及 环 岛

第一次写VBA 有点不惯 尤其涉及对象引用要用Set  while wend 

 

一股脑全写了 面条到底  没重构 有好多重复代码

 

mxd保存了 发给人家还不知能不能复用 

 

问题是: 一堆坐标 有序 一个地块包含多个环

 

内环或洞 顺时针

岛或外环 逆时针

 

自动构建地块

 

解决思路:Excel数据 有5列 地块号,X,Y,环号列(每个地块有n个环,环号依次是1,2...n), 内外环(0为内环,1为外环)

 

通过Arcmap Add XY Data 导入Excel生成临时图层导出生成实际图层

 

arcCatalog 创建面图层 都加载到arcmap中  ok

 

写代码 运行

 

效果:

 

 

代码如下:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C# ArcGIS,可以通过以下步骤添加多边形的内外: 1. 创建一个多边形对象和一个集合对象,用于存储多边形的坐标和内外的坐标。 ```csharp IPolygon polygon = new PolygonClass(); IPointCollection points = polygon as IPointCollection; IGeometryCollection rings = polygon as IGeometryCollection; ``` 2. 添加外的坐标集合对象。 ```csharp IPoint point1 = new PointClass(); point1.PutCoords(0, 0); points.AddPoint(point1); IPoint point2 = new PointClass(); point2.PutCoords(0, 10); points.AddPoint(point2); IPoint point3 = new PointClass(); point3.PutCoords(10, 10); points.AddPoint(point3); IPoint point4 = new PointClass(); point4.PutCoords(10, 0); points.AddPoint(point4); points.AddPoint(point1); // 添加起,形成闭合的多边形 ``` 3. 创建一个新的对象,用于存储内的坐标。 ```csharp IRing innerRing = new RingClass(); IPointCollection innerPoints = innerRing as IPointCollection; ``` 4. 添加内的坐标集合对象。 ```csharp IPoint innerPoint1 = new PointClass(); innerPoint1.PutCoords(2, 2); innerPoints.AddPoint(innerPoint1); IPoint innerPoint2 = new PointClass(); innerPoint2.PutCoords(2, 8); innerPoints.AddPoint(innerPoint2); IPoint innerPoint3 = new PointClass(); innerPoint3.PutCoords(8, 8); innerPoints.AddPoint(innerPoint3); IPoint innerPoint4 = new PointClass(); innerPoint4.PutCoords(8, 2); innerPoints.AddPoint(innerPoint4); innerPoints.AddPoint(innerPoint1); // 添加起,形成闭合的内 ``` 5. 将内对象添加到集合对象。 ```csharp rings.AddGeometry(innerRing); ``` 完整代码如下: ```csharp IPolygon polygon = new PolygonClass(); IPointCollection points = polygon as IPointCollection; IGeometryCollection rings = polygon as IGeometryCollection; // 添加外的坐标 IPoint point1 = new PointClass(); point1.PutCoords(0, 0); points.AddPoint(point1); IPoint point2 = new PointClass(); point2.PutCoords(0, 10); points.AddPoint(point2); IPoint point3 = new PointClass(); point3.PutCoords(10, 10);points.AddPoint(point3); IPoint point4 = new PointClass(); point4.PutCoords(10, 0); points.AddPoint(point4); points.AddPoint(point1); // 添加起,形成闭合的多边形 // 添加内的坐标 IRing innerRing = new RingClass(); IPointCollection innerPoints = innerRing as IPointCollection; IPoint innerPoint1 = new PointClass(); innerPoint1.PutCoords(2, 2); innerPoints.AddPoint(innerPoint1); IPoint innerPoint2 = new PointClass(); innerPoint2.PutCoords(2, 8); innerPoints.AddPoint(innerPoint2); IPoint innerPoint3 = new PointClass(); innerPoint3.PutCoords(8, 8); innerPoints.AddPoint(innerPoint3); IPoint innerPoint4 = new PointClass(); innerPoint4.PutCoords(8, 2); innerPoints.AddPoint(innerPoint4); innerPoints.AddPoint(innerPoint1); // 添加起,形成闭合的内 // 将内对象添加到集合对象 rings.AddGeometry(innerRing); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值