GIS VBA 结合ArcMap工具创建界址线

2023-11-22 17:50

本文主要是介绍GIS VBA 结合ArcMap工具创建界址线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

江苏省地质测绘院 姜法明

本文介绍ArcMap VBA二次开发创建界址线的方法,宗地图层(面要素)有6426个宗地(要素),通过面转线得到权属线23006条,利用二次开发程序把权属线转为界址线,生成界址线 397722 条。

  1. 面转线

1打开宗地图层

2【ArcToolbok】-【数据管理工具】-【要素】-【面转线】

 

3

 

 

 

权属线是二个宗地的公共部份,私下条权属线中包含多条界址线。如上图所示,生成的权属线的属性表中,有左、右宗地的FID号,通过FID号,可以获取面要素的宗地号。

2.创建界址线图层

利用IFeatureWorkspace接口的CreateFeatureClass方法创建界址点Shape文件需要5个参数:

目录:利用IWorkspace接口 的PathName属性获取宗地图层的路径。

文件名:”888888JZX”

类型:esriGeometryPolyline

空间参考:利用ISpatialReference接口获取宗地图层的空间参考

字段清单:准备好的文本文件,文件内容如下:

 

每一行数据分别是:序号、字段名、字段类型、字段长度、字段精度(小数位数)。

3.加载Shape文件

利用IMxDocument接口的IMaps的AddLayer方法加载新建的界址线图层。

4.创建界址线要素

利用IFeatureCursor接口的Insertfeature方法创建界址点要素 。

 

附:核心源代码

'权属线 23006 条,生成界址线 397722 条,运行36分钟。
Public Sub 权属线To界址线()
'访问数据集的变量
Dim 权属线  As IFeatureClass, 权属线表名 As String
Dim 界址线  As IFeatureClass, 界址线表名 As String
Dim 宗地表  As IFeatureClass, 宗地表名 As String
Dim pFeatureCursor As IFeatureCursor       '记录集
Dim pFeature As IFeature                   '记录
Dim mFeature As IFeature                   '记录
'创建线要素的变量
Dim pLine As IPolyline                     '线对象
Dim pPointCol1 As IPointCollection         '点的集合
Dim pts        As IPointCollection
Dim pPoint1    As IPoint                   'Path 的 Point(组成路线的点)
Dim pPoint2    As IPoint                   'Path 的 Point(组成路线的点)
Dim 记录编号 As Long, N As Long
Dim 左宗地 As String, 右宗地 As String, 宗地号 As String
Dim s As Double
On Error Resume Next
权属线表名 = "340523QSX"
界址线表名 = "340523JZX"
宗地表名 = "340523NewZD"
Set 权属线 = 表名打开图层(权属线表名)
Set 界址线 = 表名打开图层(界址线表名)
Set 宗地表 = 表名打开图层(宗地表名)
If 权属线 Is Nothing Or 界址线 Is Nothing Or 宗地表 Is Nothing ThenMsgBox ("打开记录集失败!!")Exit Sub
End If
Debug.Print Now
Call 开始编辑(界址线)Set pFeatureCursor = Nothing
Set pFeatureCursor = 权属线.Update(Nothing, False)
Set pFeature = pFeatureCursor.NextFeature
Do While Not pFeature Is Nothing宗地号 = ""N = pFeature.Value(2)If N >= 0 ThenSet mFeature = 宗地表.GetFeature(N)宗地号 = Left(mFeature.Value(3), 19)End IfN = pFeature.Value(3)If N >= 0 ThenSet mFeature = 宗地表.GetFeature(N)宗地号 = IIf(宗地号 = "", Left(mFeature.Value(3), 19), 宗地号 + "\" + Left(mFeature.Value(3), 19))End IfSet pLine = pFeature.ShapeSet pPointCol1 = pLineFor N = 0 To pPointCol1.PointCount - 2Set pPoint1 = pPointCol1.point(N)Set pPoint2 = pPointCol1.point(N + 1)'定义并初始化一个线对象Dim PlyLine As IPolylineSet PlyLine = New PolylineSet pts = PlyLine    '点集合=线pts.AddPoint pPoint1pts.AddPoint pPoint2s = PlyLine.LengthDim 属性表(12) As Variant属性表(2) = 1                                                '2,"BSM",标设码,int,10(>0)属性表(3) = 宗地号                                           '3,"ZDZHDM",宗地代码,Varchar(50位)属性表(4) = "3001060000"                                     '4,"YSDM",要素代码,Char,10(6011060000)属性表(5) = s                                                '5,"JZXCD",界址线长度,Float,15,2(>0)属性表(6) = "7"                                              '6,"JZXLB",界址线类别,Char ,2(7:两点边线)属性表(7) = "2"                                              '7,"JZXWZ",界址线位置,Char,1(2:中)属性表(8) = "600001"                                         '8,"JXXZ",界结性质,Char,6(600001:已定界)属性表(9) = "321456789gfhtt"                                 '9,"QSJXXYSBH",权属界线协议书编号,Char,30属性表(10) = "gfhni987562fgmif999ht"                         '10,"QSJXXYS",权属界线协议书,Varbin'属性表(11) = 0                                             '11,"QSZYYYSBH",权属争议原由书编号,Char,30'属性表(12) = 0                                             '12,"QSZYYYS",权属争议原由书,VarbinIf s > 0.001 Then 记录编号 = AddFeature(界址线, PlyLine, 属性表)NextSet pFeature = pFeatureCursor.NextFeature
Loop
Call 停止编辑(界址线)
Debug.Print Now
Debug.Print 记录编号
MsgBox ("恭喜你,完成了!")
End Sub

这篇关于GIS VBA 结合ArcMap工具创建界址线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/411872

相关文章

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并