基于ArcPy的大比例尺地形图图幅接合表自动绘制方法

2022-10-02 02:49郑继武邓学锋
地理空间信息 2022年9期
关键词:图幅绘制自动

郑继武,邓学锋*

(1.河南省测绘工程院,河南 郑州 450003)

在国家基本比例尺地形图测绘中,图幅接合表是一个重要图件,是用于标明某一区域多幅图或分幅图相关位置的略图[1]。图幅接合表可手工绘制或采用计算机绘图软件人机交互制作。手工绘制方式在区域小、图幅数量较少的情况下具有优势,图形按比例缩小,制式单一,不扩充,图号按照规则推算;人机交互方式适用于较大区域,可按实际坐标绘制,图号按坐标依规则生成,相比手工绘制方法有很大改进,但操作起来仍需不少步骤。图幅接合表至少包括区域范围、图幅四廓、邻接关系、图号、图名等核心元素,前4个元素容易具备,图名则需根据作业进展由人工添加,有一个多方协同的时序过程,易出现错漏。随着测绘地理信息的发展,图幅接合表不仅应用于生产管理和应用检索,还承载了更多信息,派生出其他数据信息。国家基本比例尺地形图测绘时,中小比例尺地形图图幅接合表继承使用上一代成果,图名变动少,一般采用个别更新的方式,不存在重新制作问题;而1∶500、1∶1 000、1∶2 000比例尺地形图,由于区域性强,与域外的统一性和连续性较弱,接合表多属新制,典型代表为全域测绘。因此,本文提出了一种以范围线为数据源自动绘制大比例尺地形图图幅接合表的方法,以期实现图形自动绘制、图名自动提取注记,完备接合表基本形态,并扩充属性为应用扩展奠定基础。

1 大比例尺地形图分幅和编号常用方法

GB/T 13989-2012《国家基本比例尺地形图分幅和编号》规定了各种比例尺地形图的分幅和编号方法,其中1∶500、1∶1 000、1∶2 000地形图分幅包括经纬度分幅、正方形分幅和矩形分幅[2],其编号则有与分幅相适应的多种方法,如坐标编号法、流水号法、行列编号法等,日常测绘工作中尤以正方形分幅的坐标编号法最为常用。坐标编号法一般采用图廓西南角坐标编号,X坐标公里数在前,Y坐标公里数在后,1∶2 000、1∶1 000地形图取至0.1 km,1∶500地形图取至0.01 km。这是自动化绘制图幅接合表的基础约束条件。

2 自动化绘制的系统基础

实现自动化绘制的系统基础包括硬件和软件,硬件为目前主流的计算机;软件包括Windows7或Windows10操作系统、ArcMap10.2应用软件、ArcPy站点包和ArcGIS配装的Python编程语言[3]。在ArcMap环境中利用ArcPy站点包,采用Python语言,将地理处理函数和方法有机地组合起来[4],实现图幅接合表的自动绘制;再创建基本信息属性,生成图号,自动采集图名,完善接合表核心元素。

3 自动化绘制的设计流程

测绘工作中,确定测区范围线后,需确定图幅数量和分布,因此需绘制图幅接合表。手工绘制方法借助于公里格网分割制作,人机交互也类似,过程复杂。数字时代的范围线是数字化的,包含坐标信息,因此自动化绘制的条件是具备的。根据范围线数据以dwg格式居多,也有shp格式或地理数据库的特点,基于要素复制、增密、分割、转点等地理处理函数,利用编辑会话函数,按照分幅原则,首先自动绘制接合表图形,创建并按幅一一充实基础的图号字段信息;再创建图名字段,对以dwg格式存储的成果分幅图,在人工不接触、无视感状况下采集图名信息,并根据图号对号入座。图名产生在作业过程中,具有随时性,需相对独立的功能支撑;图名与图号标注和注记功能、图幅状态设置、图幅接边状况等制图、生产管理功能同样需要独立。遵循该思路,具体绘制流程如图1所示。

图1 自动化绘制流程图

4 需要解决的问题

自动绘制图幅接合表需要解决的问题包括:①图名为汉字,支持正确显示的问题;②从数据源范围线解析出覆盖边界的图幅图廓坐标的技术;③根据分幅原则,按照图廓坐标绘制穿越边界图幅图形的方法;④范围线内部图幅的绘制方法;⑤图名信息自动提取技术;⑥图名、图号一体显示方法;⑦图幅作业状况和接边情况的管理技术。

5 程序设计

5.1 汉字信息显示问题处理

在设置不正确的情况下,汉字信息的显示常出现乱码,处理方法为首先设置“#-*-coding:utf-8-*-”,再引入sys并按以下方法重载:

5.2 设置控制信息

正确的自动绘制,需在参数控制下进行。输入参数包括范围线数据、生成的接合表数据存放位置、比例尺、坐标系统、数据模板等,前3个参数必须设置,后两个可选。dwg数据在ArcMap中需要设定坐标系[5],便于成果后续使用。参数输入界面如图2所示,比例尺参数通过下拉框选择。

图2 参数输入界面

5.3 比例尺、图廓边长处理函数

比例尺和图廓边长处理函数需自定义,依据比例尺参数,获得对应图廓边长,存入变量以待调用。

5.4 数据源处理

1)shp、mdb、gdb数据可直接使用,dwg数据在ArcMap中只能调入不能操作使用,需经过处理转换为shp、mdb或gdb格式数据。根据CadDrawingDataset数据类型属性描述信息判定dwg数据;通过CopyFeatures方法实现,涉及输入、输出数据[6],输入为已有dwg数据,输出为转换后数据,由程序内定,属临时数据,用后销毁。

2)数据源形态多样,直线段与曲线段交替分布,互有交错。直线两点跨度大,曲线折点跨度不均,为统一量化,通过Densify方法实现。Densify直接操作元数据,应在复制数据上进行,结果为固定间隔的密集的点组成的线。控制Densify效果的DISTANCE参数内置为100.0 Meters,这是由于数值小将增加点的密度,将导致图幅重复;而数值大有的图幅则缺乏点数据支撑,形成图幅漏洞,相对而言,重复比漏洞易于处理,后期处理的图廓重复问题即来源于此。

3)对线数据进行SplitLine处理,按折点分解折线为线段,利用FeatureVerticesToPoints方法将线段首末端点转化为点,为数据的进一步应用创造条件。

5.5 归化点数据,获取图廓坐标

1)继承的点数据,坐标值有随意性,需归化得到图廓坐标。对应于比例尺,根据公里格网和内图廓边长,归化得到点所在图幅的图廓左下角坐标。以1∶500比例尺为例,图廓边长为250 m,格网间隔为50 m,X、Y坐标各按int(x/a)a做两次归化,先格网再图廓各取其长,得到m、n。以k=m-n-250为数组[-250,0,250]中值时,直接取m为图廓坐标值;k为正数时,取n+250为图廓坐标值;k为负数时,取n+500为图廓坐标值,组对成为图廓点坐标,以追加的方式将图廓坐标聚合成数组。

2)数据归化为图廓点坐标后,重复较多,需清除重复值,进行轻量化处理。采用新建数组,唯一化复制原值的方法实现。

通过参数控制、数据处理、坐标归化、轻量化处理等一系列程序从范围线解析出覆盖边界的图幅图廓坐标。

5.6 自动绘制设置

接合表图形为图幅内图廓面行列有序集合,起端为面要素创建;同步创建“Nx”、“Ey”、“tuming”、“tuhao”、“zhuangtai”等属性字段用于保存图廓纵横坐标、图名、图号、作业状态等内容[7]。

5.7 自动绘制过程

程序打开编辑器进行编辑会话,在操作状态下进行自动绘制。这是一个循环过程,通过图廓四角点坐标计算形成点对象数组,通过程序自动构建覆盖范围线的图廓面[8],储存图廓西南角坐标属性,销毁中间文件,从而实现根据分幅原则,按照图廓坐标绘制穿越边界图幅图形的方法。

范围线内部图幅的图廓线绘制,借助于已绘制的图廓面要素,需自定义用于按纵坐标排序的函数和按图廓边长内插一排图廓西南角坐标的函数,通过调用实现,后者与比例尺相关。调取生成的图廓坐标,按纵坐标排序分类,定义数组、词典、变量,通过数据访问函数SearchCursor循环返回令牌属性实现。经过这些处理,即可绘制范围线内部的图幅图廓线。

在复杂的程序操控下,图幅接合表图形基本绘制完成。为防止范围线外有意外的图形生产,需要检验和清除,其自动化步骤为:①范围线转换为范围面,利用增密线的各点坐标生成面,这样二者契合严密,而线转面函数会“疏松”点间距,面边缘与线有裂隙;②图层定义和调入,显示到“内容列表”中,根据位置选择对范围面和图廓面进行内存操作,删除多余图廓,同时销毁一些中间生成的文件;③在属性表中按照规则利用CalculateField方法生成图号信息。

5.8 图名提取

图名不同于图号,是在作业过程中逐步形成的,根据图幅内地名或企、事业单位名称来命名,困难时才可只注图号,因此可单独或批量采集,数据源为dwg分幅成果数据。ArcMap的dwg数据集包括点、线、面、注记等数据,图名、图号信息在注记数据中。利用图名、图号的图式标准化位置,通过调入、显示、访问地图文档和数据框架、图层定义和添加、格网规范化定位、指定位置矩形选择等一系列程序方法完成图名信息的自动提取。

5.9 图名、图号一体显示

接合表图名、图号一体显示方法替代繁琐手工操作的技巧在于,由程序实现地图文档和图层设置,将定制的分行显示控制代码传递给图层标注表达式,实现对图名、图号的自动标识。在ArcMap中可设定合适比例、纸张尺寸,在布局视图里可利用地图导出功能,实现接合表的分发服务,这是人工的。从范围线到绘制接合表图形以及图名、图号标注内存中的变化过程如图3所示。

图3 自动绘制历变图

6 应用拓展与功能集成

测区工作不是一蹴而就的,从任务分配到成果完成,每幅图都经历了待测、在测、一检、二检、接边、成果等不同阶段和状态,生产过程中需对此进行管理,了解图幅流向和作业进度。采用的方式是在接合表中以不同的符号或颜色进行标识,可人工纸质标识或人机交互标识,但缺乏信息丰富的渠道,难以实现自动统计。在接合表自动绘制的基础上,通过指定图幅号和图幅状态参数,根据图号自动匹配到接合表,更新状态信息。接合表参照图层分色显示模板,实现对图幅不同情形的表达,利用统计功能掌握进度状况,服务生产管理。接边状况记载,是通过指定图幅号以及与其完成接边的边的方位,利用接合表中图廓点西南角坐标推算锁定,在线要素数据中自动绘制该边线的方法实现的。线要素和接合表结合显示,表明接边情况。图幅作业状态和接边情况管理功能如图4所示。

图4 图幅作业状态和接边情况标示

接合表图形绘制、图名提取、图名图号标注显示、图幅状态、接边情况等程序均通过制作脚本工具来使用,利用加载项技术将脚本工具顺序集成为工具条实现功能调用。由于涉及文件数量多,为方便使用,将相关程序文件制作为安装程序,通过自动安装对复杂过程进行简化。工具条界面如图5所示。接合表工具属性参数设定如图6所示,其他工具条属性参数设定与此类似,这里不再一一列出。

图5 工具条界面

图6 接合表工具属性参数设定

接合表自动绘制方法应用于全域测绘取得了明显效果,具有绘制速度快、使用简捷、成果正确可靠等特点。其服务生产管理功能,不仅能实现对各种状况的准确管理,还能快速生成和呈报任务快报,效率明显。整个测区任务完成后,还可再次全面提取更新一次,从而避免生成过程中可能的遗漏。

该方法尚缺乏对图幅质量责任主体的信息管理,这是改进的方向之一。如果已有图幅成果,在缺乏接合表的情况下,要清楚了解图幅分布状况,利用成果反向生成接合表,这也是改进的方向之一。

7 结语

在ArcMap中利用Python语言合理组织ArcPy地理处理函数,在适当参数的支持和汉语环境下,以测区范围线为数据源,解析并推算得到覆盖边界的图幅和图幅图廓坐标,自动绘制图幅接合表,利用dwg图幅数据图名标准位置定位、采集图名和图号,以图号匹配图名,将二者一体标注显示,完备接合表的核心元素形态。作为拓展应用,该方法实现了图幅作业状况和接边情况的管理。通过在全域测绘、数字县域等项目中的应用发现,工具界面简洁明了,功能设置与作业和管理顺序协调,操作简便,具有一键式服务的特点,提高了工作效率,有效避免了错漏;还拉长了接合表的使用链条,可持续应用于后期的建库阶段或元数据制作中。

猜你喜欢
图幅绘制自动
基于ArcEngine自动生成1∶5万地形图标准分幅图框
作品赏析
基于Excel VBA和AutoCAD的滚动轴承参数化比例图绘制方法
自动捕盗机
地形图空间信息提取方法研究
超萌小鹿课程表
基于Arcpy的地形图接图表快速生成方法
让小鸭子自动转身
自动摇摆的“跷跷板”
关于自动驾驶