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 Then
    MsgBox ("打开记录集失败!!")
    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 Then
        Set mFeature = 宗地表.GetFeature(N)
        宗地号 = Left(mFeature.Value(3), 19)
    End If
    
    N = pFeature.Value(3)
    If N >= 0 Then
        Set mFeature = 宗地表.GetFeature(N)
        宗地号 = IIf(宗地号 = "", Left(mFeature.Value(3), 19), 宗地号 + "\" + Left(mFeature.Value(3), 19))
    End If
        
    Set pLine = pFeature.Shape
    Set pPointCol1 = pLine
    For N = 0 To pPointCol1.PointCount - 2
        Set pPoint1 = pPointCol1.point(N)
        Set pPoint2 = pPointCol1.point(N + 1)
        '定义并初始化一个线对象
        Dim PlyLine As IPolyline
        Set PlyLine = New Polyline
        Set pts = PlyLine    '点集合=线
        pts.AddPoint pPoint1
        pts.AddPoint pPoint2
        s = PlyLine.Length

        Dim 属性表(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",权属争议原由书,Varbin
        
        If s > 0.001 Then 记录编号 = AddFeature(界址线, PlyLine, 属性表)
    Next
    Set pFeature = pFeatureCursor.NextFeature
Loop
Call 停止编辑(界址线)
Debug.Print Now
Debug.Print 记录编号
MsgBox ("恭喜你,完成了!")
End Sub



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目前包含功能: 国图农村地籍数据库 自动赋界址线位置; 计算线走向; 删除重复要素: 使用环境: winXP(32、64),Win7(32、64) 系统必备: Microsoft .NET Framework 2.0; ArcEngine Runtime 9.3 arcGIS 9.3 不安装上述工具无法运行 功能介绍: 1、国图农村地籍数据库 自动赋界址线位置: 说明: 本功能只适用于《国图村庄地籍数据库》,城镇地籍数据库未经测试,其他格式数据库不适用。 使用本功能前已经使用国图地籍软件,自动填写过地籍调查表、更新界址编号、顺序等,并经过要素重复性检查、界址线检查、界址号重复性检查。 鉴于地籍数据库拓扑要求并不严格,不在进行严密的拓扑错误检查,容差在0.01范围内不在指示出拓扑错误。 在界址线图层自动添加一个text型字段“检查”,问题都写在这里。存在问题的界址线需要手动填写位置类别,或者修改后在自动添加。 界址线类别可以通过ArcMap的空间筛选批量添加在界址线图层的界址线类别字段中,并不费事所以就没必要编写代码了。 界址线赋位置之前,界址线图层界址线类别字段必须上好。界址线位置完全根据界址线图层的界址线类别来计算,然后位置与类别共同储存在国图地籍数据库界址标识表中,上好后的位置与类别可通过国图地籍建库软件查看。 2、计算线走向: 说明: 在线要素图层自动建立一个Double类型的“走向”字段。记录线的走向,既起终与正北方的夹角。用于地质、矿产计算断裂走向等方面。 3删除重复要素: 说明: 只是删除完全重合的线、区要素,相交重叠的并不删除。 4线 与空间分析功能 目前未完善。
ARCGIS 工具集 V 0.3测试版 目前包含功能: 国图农村地籍数据库 自动赋界址线位置; 计算线走向; 删除重复要素: 使用环境: winXP(32、64),Win7(32、64) 系统必备: Microsoft .NET Framework 2.0; ArcEngine Runtime 9.3 arcGIS 9.3 不安装上述工具无法运行 功能介绍: 1、国图农村地籍数据库 自动赋界址线位置: 说明: 本功能只适用于《国图村庄地籍数据库》,城镇地籍数据库未经测试,其他格式数据 库不适用。 使用本功能前已经使用国图地籍软件,自动填写过地籍调查表、更新界址编号、顺 序等,并经过要素重复性检查、界址线检查、界址号重复性检查。 鉴于地籍数据库拓扑要求并不严格,不在进行严密的拓扑错误检查,容差在0.01范围 内不在指示出拓扑错误。 在界址线图层自动添加一个text型字段“检查”,问题都写在这里。存在问题的界址 线需要手动填写位置类别,或者修改后在自动添加。 界址线类别可以通过ArcMap的空间筛选批量添加在界址线图层的界址线类别字段中, 并不费事所以就没必要编写代码了。 界址线赋位置之前,界址线图层界址线类别字段必须上好。界址线位置完全根据界址 线图层的界址线类别来计算,然后位置与类别共同储存在国图地籍数据库界址标识表 中,上好后的位置与类别可通过国图地籍建库软件查看。 2、计算线走向: 说明: 在线要素图层自动建立一个Double类型的“走向”字段。 记录线的走向,既起终与正北方的夹角。 用于地质、矿产计算断裂走向等方面。 3删除重复要素: 说明: 只是删除完全重合的线、区要素,相交重叠的并不删除。 4线 与空间分析功能 目前未完善。
### 回答1: ArcMap界址编号工具ArcGIS软件中一个重要的工具,用来为不动产的界址进行编码。界址编号是用于标识不动产界址的唯一编号,包括道路、河流、地图等多种不同的数据类型。编码过程中要考虑到不同的编码格式和规范,以保证编码的准确性和可靠性。 该工具的使用可以使得不动产管理更加规范化和高效化。因为界址编码是不动产管理中非常重要的一环,不仅能提高不动产信息的有效性和管理效率,还能减少不动产信息管理中的错误和繁琐操作。 使用界址编号工具可以快速生成不动产界址编码,在ArcMap软件中进行操作只需简单的几个步骤,就能完成对不动产界址的编码。使用该工具的过程需要注意编码规范和格式,避免出现错误,要仔细核对编码结果,确保编码的准确性和可靠性。 总之,ArcMap界址编号工具在不动产管理中起到了重要的作用,使得不动产信息管理更加高效、规范和可靠,是一个必不可少的工具。 ### 回答2: ArcMap是一款广泛用于地理信息系统(GIS)应用的软件工具,它提供了许多有用的功能来支持地理数据的管理、分析和制图。其中,界址编号工具是对地籍图件进行数字化处理,在地图上标出界址的编号,是一项特别重要的功能。 界址编号工具的运用可以使地籍图件数字化后更易于管理和查询,也是对法定界址进行标注和识别的必要手段。它可以高效地管理地籍数据,避免了传统手工绘图方式中可能出现的错误和繁琐过程,同时也保证了地籍测绘数据准确性和可靠性。 使用ArcMap界址编号工具,用户可以通过简单的命令快速地完成地籍图件的标准化数字化处理,并可灵活地控制标注位置和字体大小等参数。此外,该工具还能够根据用户的需求自动生成地籍图件的相应元数据信息,方便进一步的数据分析和应用。 总之,ArcMap界址编号工具是一项非常实用的GIS功能,它可以帮助用户高效地管理和利用地籍数据,并提高工作效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值