当前位置:首页 期刊杂志

基于ArcGIS的钻孔柱状图自动生成方法

时间:2024-07-06

李志国,王庶懋,刘 钦

(1.中国电力工程顾问集团华东电力设计院有限公司,200063,上海;2.中国地震台网中心,100036,北京)

0 引言

钻探是各类勘察工程的主要手段之一[1]。各种类型的工程勘察柱状图是日常勘察工作中产出的最基本,也是使用数量最多的钻探成果图件。应用于工程勘察的柱状图包括单孔钻孔柱状图、动力触探试验成果图、静力触探试验成果图等多种类型的图件。这类图件如采用传统的手工绘制方式,往往效率低,容易出错而且不易修改,不能满足实际工作的需要。随着计算机技术的应用,国内外开发了一系列专业软件实现钻孔柱状图的绘制,但是这些软件往往是半自动成图,修改起来也不方便,而且不能根据专业特点添加填充图样[2]。为了能够更好地完成钻孔柱状图的绘制,现代绘制技术主要分为两类:一类采用AutoCAD、CorelDRAW等计算机辅助制图软件进行钻孔柱状图的自动或半自动生成;另一类采用ArcGIS、MapInfo等组件式GIS平台进行二次开发生成钻孔柱状图[3]。这2种方式往往均存在通用性、灵活性和扩展性不强等问题,无法对产出模板进行灵活的定义。

针对以上问题,本文提出基于Jinja2模板引擎,通过Excel排版实现钻孔柱状图模板格式配置的灵活定义和表达。基于ArcGIS平台,利用空间数据和属性数据管理功能,实现钻孔数据在模板引擎上的渲染,以及钻孔柱状图的自动绘制和输出功能。

1 系统总体设计

1.1 钻孔柱状图格式分析

从各类图件的表现形式中可以看出,钻孔柱状图是一种表格式的图件。表格中地层厚度、试验曲线、取样位置等单元格比较特殊,其高度需要按比例符合实际的精确度,而地层描述等单元格则需要根据描述内容文字的高度,通过缓冲线标识相对位置,以便达到整体美观、协调的目的。

钻孔柱状图的绘制内容由文字、花纹、符号和曲线等要素构成。文字为表格中的各种数据和描述文字,花纹为柱状图中表示地层岩性的各种填充花纹,符号为柱状图中标识地下水位、标贯点和取样类型等位置的点状符号,曲线为静力触探、动力触探等各类物理性质试验曲线。所有内容的绘制和表达均需要符合国家、部门或行业的标准。

1.2 数据模型设计

钻孔数据由工程信息、钻孔信息、地层信息、取样信息、标贯信息、静探信息、动探信息等一系列的表组成,每个与钻孔相关的信息通过钻孔编号相关联。这些信息的录入可以通过Excel导入的功能,按对应的项目导入到系统的数据库中,也可直接读取Excel中的数据进行柱状图的绘制。

根据不同行业的工程情况,可以将工程信息表、勘探点信息表、勘探点地层表、钻孔取样信息表、标贯试验成果表、静探试验成果表、动探试验成果表等信息建立数据模型。通过数据的导入,将成果信息转换为JSON格式便于后续处理。

图2 数据模型ER图

1.3 系统架构设计

本文提出的自动成图工具利用ArcToolbox的开发接口,使用ArcPy实现用户自定义工具,从而便捷快速地进行钻孔柱状图的处理和产出。

ArcGIS Desktop软件是ESRI公司开发的专业地理信息处理软件,软件的ArcToolbox工具箱提供了一套处理地理数据任务的工具集。ArcToolbox包含了ArcGIS地理处理的大部分分析工具和数据管理工具[4],这些工具可以单独使用,也可以通过ModelBuilder工具把它们的处理流程连接起来,建立空间分析工作流模型,还可以通过代码把这些工具引用到定制脚本中来创建自己的工具和工具箱,用来扩展ArcGIS的功能。本文采用ArcPy定制一系列的工具箱和工具的方式,来实现灵活的钻孔柱状图产出功能。

自定义工具的整体结构包括定义参数、验证参数和处理工作流3个部分。分别定义输入的参数,验证参数合法性和执行产出处理过程。

输入数据可以选择存放工程信息的数据库或Excel文件,定义了数据输出所需要的各类信息,默认输出工程内的所有钻孔信息,也可以通过可选参数,指定要输出的钻孔编号,来限定产出范围。

图3 自定义工具界面

为了实现钻孔柱状图的灵活定义,出图模板由两部分组成,一个是基于Excel文件的钻孔柱状图表格结构的数据模板,定义了钻孔柱状图表格结构、变量位置等柱状图结构信息;一个是基于ArcGIS文件页面布局的版面模板,定义了符号表达、标注位置、页面布局等渲染出图信息。

通过模板定义的表达信息实现出图的表格结构和页面框架,使用实际工程数据,将模板中的动态内容进行渲染,即可产出一套完整的钻孔柱状图图册。

2 自动成图关键技术

2.1 模板引擎技术

Jinja2是一个基于Python语言的模板引擎(Template Engine)。它定义了一套简单易用的模板语言(Template Language),可以用来引用Json形式的数据对象,实现内容的动态产出。当Jinja2应用于动态内容产出的场景时,负责产出产品页面的设计人员可以和负责数据产出的程序开发人员在约定好数据的结构后,就可以分别独立同步进行各自的工作,程序开发人员可以只关注业务逻辑代码的编写,页面设计人员可以只关注页面的表现形式,并可以根据业务情况随时灵活地修改页面的结构信息,而不需要重新编写代码。利用模板引擎技术将数据资源从页面表现中分离出来,为软件的长期维护提供了便利。

采用Jinja2模板引擎技术,将数据与表格结构分离,构建了基于模板引擎技术的表格内容结构定义系统,利用Excel表格定义结构信息,实现了表格结构和展示内容的灵活智能化定义。利用模板引擎,可以将变量使用双花括号“{{变量名称}}”标记,当Jinja2解释器读取到该内容后,会自动将该变量替换为真正的指,从而实现基于数据的模板渲染。也可使用类似“{%...%}”格式的条件语句,针对不同的条件进行判断和有针对性地输出相关内容。

文本扩展该项技术,将应用范围扩大到Excel表格结构中。首先,将Excel的表格格式转为Json格式;然后,利用Jinja2模板引擎渲染替换动态内容,形成针对工程的表格Json数据;最后,利用ArcGIS将该数据定义转换为点、线、面和标记形式的数据,在并扩展定义“{| S...| S}”形式的矢量标注标签,从而将数据输出到ArcGIS格式。

2.2 岩性花纹绘制

利用ArcGIS的StyleManager构建各类岩性花纹是一种解决方案[5],但是有2个问题,一是不同版本ArcGIS符号库的兼容性问题会导致系统在不同的版本之间无法迁移,无法满足灵活性的需要;二是无法进行复合花纹样式的表达,由于地质的复杂性,当遇到某一岩层出现多种岩性的情况时,需要将每种岩性对应的花纹样式进行复合填充到同一区域。因此,本文使用AutoDESK公司的填充图案为规则,将不同岩性的图案通过算法写入矢量文件中进行表达。

填充图案在一个或多个文件扩展名为.pat的定义文件中定义。由标题行和描述行组成,下面是文件的基本格式。

*pattern-name[, description]

angle, x-origin,y-origin, delta-x,delta-y,dash-1,dash-2, …

第1行是标题行,以星号开头;pattern-name定义了图案名称,方括号为可选的说明内容。

第2行是图案的描述行,可以有一行或多行;每条阵列线都被视为直线族的第1个成员,通过在2个方向上应用增量偏移来生成无限的平行线族而创建直线族,符号代表的含义如下。

angle代表绘制直线的角度;

x-origin,y-origin代表填充直线族中第一条直线所经过点的X、Y轴坐标;

delta-x代表直线族成员之间在直线方向上的位移,它仅用于表达虚线;

delta-y代表直线族成员之间的间距,也就是多个直线间的垂直距离;

dash-n代表一条直线的长度,可取正、负值或为零,取正值表示该长度为实线,取负值表示该线段留空,取零则画点。若不含dash-n,则为实线。

根据该算法,即可将多条线段组合成为需要的岩性填充符号,并填充在指定的区域内。

对于复合岩性花纹,系统则自动识别其中的多个岩性,并在岩性花纹库中进行查找比对,将多个岩性花纹在同一区域内绘制,从而实现复合岩性花纹的表达。

在模板文件中,使用“{| SHTC={{hatch_name}}| S}”标签动态定义要表达的岩性花纹符号,在系统渲染后,进行矢量内容输出时,会根据该标签,在填充图案库中查找对应的填充图案,对于符合地层,将识别该地层包含的所有岩性符号并叠加绘制。

2.3 缓冲线绘制技术

当钻孔柱状图的某一个地层岩性描述文字较多,而地层划分又比较薄,其所在岩性高度无法容纳下全部的岩性文字时,需要通过绘制缓冲线的方式,向上面的地层或下面的地层借出一定的空间,从而达到岩性描述文字能够美观地显示出来的目的。在进行绘制缓冲线时,往往会遇到一些比较复杂的情况,需要设计合理的算法计算来绘制出比较合适的线。本文采用动态修正技术实现缓冲线的绘制。在绘制岩性描述线时,该矢量线由起点、缓冲点、终点组成,默认情况下这几个点是一条直线,即不向上层或下层借位。

当文字占用高度高于岩层厚度时,则需要最低限度原则,向上层和下层借出需要的最小绘制高度,具体过程如下。

1)当绘制一个地层时,如果该层的岩性描述文字所占总高度大于该层厚度,首先修改上一层的岩性描述线,提高上一层缓冲点和终点的位置,根据上一层的岩性描述文字高度和剩余空间的计算,向上一层借出所需的最大高度。

2)如果该层的岩性描述文字所占总高度不大于该层厚度(包括向上层借出的高度),则以岩层底部绘制岩性描述线。

3)如果向上一层借出高度仍然不够,则绘制该岩层缓冲线时,将缓冲点和终点的位置下调,向下层预借出所需的高度。

经过上面的步骤,即可完成岩性描述缓冲线的绘制,同时岩性描述文字关联到线的属性中,后续只需在ArcGIS配图文件中,设置文字标注显示在线上即可实现岩性描述的贴线显示。

在模板定义时,使用“{| Svm| S}{| SELR=line-width| S}”定义缓冲线区域,其中“{| Svm| S}”标签表示对于多条记录,进行单元格的合并。line-width定义岩性描述文字每行的字数,在实现时,会识别中文和英文的宽度,使得每行内容长度保持一致。

2.4 矢量内容填充

首先,根据Excel形式的模板定义要生成面状的表格框架及内容,每个单元格对应一个面状要素。针对单元格内容填充动态的矢量内容。

针对数据属性,进行动态矢量内容的生成。动态矢量内容包括文字标注、点符号、线符号3种类型。

文字标注:直接将面要素的文字内容以点要素的形式生成到单元格框架内的合适位置。

点符号:包括岩性填充花纹中标记取样类型、稳定水位、标贯点等位置的符号。

线符号:包括岩性填充花纹、缓冲线、稳定水位、标贯点位置、数据曲线及标头等内容。

在模板定义时,使用以下特殊的符号定义矢量内容:

{| Svm| S}:垂直合并单元格,将多个地层的单元格合并作为整体进行渲染。

{| Srh={{layer.thickness}}| S}:定义地层单元格的高度,在渲染时,会根据比例尺及实际地层厚度,计算每个单元格的高度。

{| SHTC={{layer.name}}| S}:定义岩性花纹的填充,如果渲染内容有取样数据、标贯数据和水位数据,会在岩性花纹对应深度标注这些数据的位置和符号。

{| SELR=line-width | S}:定义岩性描述的缓冲线及每行文字的宽度。

{| SSLT| S}:定义取样数据的位置,并标注取样编号和深度。

{| SSPT| S}:定义标贯数据的位置,并标注标贯击数和深度。

{| SDW| S}:定义水位数据的位置,并标注深度和测量日期。

{| SCPT.head.res| S}:定义静探数据锥尖阻力和侧壁摩阻力的表头内容,包括比例尺、图例。

{| SCPT.res| S}:定义静探数据锥尖阻力和侧壁摩阻力的数据曲线。

{| SCPT.head.frr| S}:定义静探数据摩阻比的表头内容,包括比例尺及标题。

{| SCPT.frr| S}:定义静探数据摩阻比的数据曲线。

2.5 数据驱动制图

通过数据驱动制图,可基于单个地图文档创建统一的幅面与排版布局,将同一个工程下的多个钻孔的内容输出到一个PDF文件中,从而形成图册资料进行归档,实现钻孔柱状图的批量生产。

要使用数据驱动制图,通过设定的幅面大小,预先生成钻孔柱状图的索引要素,系统根据索引要素的大小,按比例根据模板布局自动渲染绘制钻孔柱状图。在输出时,基于索引要素将数据分割为多个部分,并为每个索引要素生成一个相应的页面。每一个页面对应着一个钻孔柱状图数据,同时可关联显示页面名称和页码等动态文本内容。从而实现图库一体的自动化制图技术。

具体实现为,系统首先根据要输出的钻孔编号,输出页面范围,然后利用模板引擎技术,为每个页面生成矢量内容,最后,利用数据驱动制度,将每一页的数据内容,按照预定义的模板标注格式,渲染成一本pdf形式的图册产出。

3 功能实现及工程应用

3.1 设计表格结构

由于每个单位都有自己的柱状图格式,而且各个格式也不尽相同,为了很好地解决这个问题,采用模板引擎技术,实现利用Excel表格直观的设计模板的格式。

可按照期望的格式和内容,在Excel中填充各类信息。其中“{{…}}”定义了动态变量信息,“{%...%}”定义了条件语句和循环语句,可用来循环输出地层信息,“{| S...| S}”定义了矢量内容信息,可在渲染时,根据该内容输出相应的矢量数据。

图4 柱状图模板结构定义

3.2 设计成图版面

利用ArcGIS将最终的成果渲染呈现,可在软件中定义各标注位置与符号、颜色等表达方式,以及图名、图签等内容,其中图签包括编录、制图、审核、制图日期、图号、顺序号等内容。

利用文中的动态渲染技术,可将输出的点、线、面等数据根据内容和格式进行灵活地定义,使用符号和标注将内容进行合理展示,并添加标题、页码、页签等动态内容和页面整饰内容,从而使得输出的图件符合实际工程需求。

图5 版面内容定义

图6 柱状图的图册批量输出

3.3 数据渲染制图

利用ArcGIS的数据驱动制图页面将整个工程的所有图件导出为多页面的PDF文档。PDF格式的特点为兼容性很好,并且转码后排版不变,可以在不同的平台查看和打印,并保证格式始终如一。是分发文档和建立档案的理想格式。通过ArcMap产出的PDF文件是矢量格式输出,可以在多种图形应用程序中编辑,同时会保留 ArcMap 内容列表中的标注、注记和属性数据等内容。由于PDF文件支持嵌入字体,因此即使文档分发的对象未安装 ArcGIS中使用的字体,也可以正确地打开并显示符号。

4 结束语

经过系统化的分析,介绍了基于ArcGIS的通用钻孔柱状图的自动绘制方法,并在实际工作中发挥了重要作用,具有灵活的适应性和广阔的应用前景。

通过使用模板引擎技术来扩展定义柱状图布局模板,使得调整柱状图的表现方式变得非常简单,只需要简单地修改Excel模板中的表格布局和变量位置,即可灵活地定制钻孔柱状图的结构。通过修改ArcGIS模板的页面布局,可以为数据输出增加很多适合实际生产需求动态内容。对于不同专业的柱状图,除了钻孔深度,采样间隔等技术不同以外,对同种地层或岩性的表达方式也可能不同。对于本系统的设计,只需要将其他专业的岩性符号文件进行简单替换即可,从而真正实现多专业通用绘制,使得本系统有着良好的移植性和扩展性。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!