孔得雨,潘锡山,李兰满
(江苏省海涂研究中心,江苏 南京 210036)
内河航道是内河运输业赖以存在的基础和国家交通基础设施的重要组成部分,具有典型的地理特征,拥有丰富的地表空间信息。正确、有利、高效地管理如此诸多的地物要素以及分析各要素的特性、河流深浅、水体流向、地形地貌等是科学管理航道的根本。传统航道地质剖面图的生成,需耗费大量时间手工绘制图件,且准确度有限。然而根据已有钻孔数据自动生成相关图件则能够节省大量的时间,实现比手工绘制更高的精度。
国内外对地质剖面图的研究方面,Mallet[1]推出了辅助地质目标计算的地质目标计算机辅助设计计划(以下简称“GOCAD”),初步开展了三维SEG/EAEG建模工程(SEM)。Ross等[2]基于GOCAD构建了区域水文地质以及土地利用管理的三维地质框架模型。孙明明等[3]基于MapGIS平台自动绘制了工程地质剖面图,然而在实现复杂地质体的判断与绘制方面研究较浅。杨一鹏等[4]基于知识建立了地质剖面图的自动生成器,实现了应用专家知识实现地质剖面图的自动生成。
前人的研究成果为地质剖面图的自动生成提供了一定的参考,但主要适用于一般松散层剖面的绘制,不太适合复杂地质体剖面的自动生成。本文结合航道管理可视化的需求,提出了一种基于点、线、面、链、链组的五级矢量数据模型和对应的拓扑结构,并对航道地质剖面图的自动生成进行了设计与实现,能够很好地满足航道地质领域的特殊需求。
地质剖面生成算法总体可以归结为两种:横向成图、纵向成图。
由于地层本质上都是横向延展的条状体,剖面横向成图指以横向的地层延展为主,逐一检测每个钻孔从上到下的土层信息[5]。首先绘制第一、第二两个钻孔的最上土层,连接产生相应的三角形、四边形等,并以相应的地层图例填充;然后横向延展,完成通过所有钻孔的最上土层绘制;绘制完最顶层地层后同理依次向下绘制地层,最终完成剖面图的绘制。具体如图1所示,其中的数字代表了绘制地层的顺序。
图1 横向绘制剖面图算法的顺序
鉴于横向成图对复杂地质的判断比较复杂,纵向成图主要以纵向的地层叠加为主。根据相邻钻孔之间深度相近的两土层信息自顶向下逐层匹配,连接成三角形、四边形等多边形土层,并以相应的地层图例填充。纵向完成两个钻孔间剖面绘制后,再横向逐一自顶向下完成两两间钻孔的纵向地层绘制。横向钻孔匹配完成后,即构建出一幅完整的地质纵剖面图。图2为纵向绘制剖面图的示意图,其中数字代表了绘制地层的顺序。
图2 纵向绘制剖面图算法的顺序
矢量数据模型是基于坐标记录的方法尽可能精确地表示点、线和多边形等地理实体的模型,能够准确定义任意位置、长度和面积,包括基础矢量图元、矢量链和组几个方面。
矢量点(VectorPoint)是矢量数据模型中最基本的图元。矢量点的数据信息主要包括该点的显示数据和物理数据。物理数据是矢量点的原始数据,是某个地层形态的某个层底坐标。
矢量线段(VectorLine)是由两个矢量点连接而成的线段。矢量线段在矢量数据链内代表了某个地层的一条边界线,在航道信息中则可表示航道中心线、航道边坡线、孔间距离等。
矢量多边形(VectorPolygon)是由3个及以上的矢量点首位循环链接而形成的多边形。矢量多边形代表了钻孔之间某块地层的矢量图形信息[6]。
矢量数据模型的基本图元包括点、线、多边形的三级结构。
矢量链是指相邻两钻孔间自顶向下地层矢量多边形在垂直方向上的有序组合,数据结构如图3所示。矢量链是系统中构成航道横、纵剖面、钻孔柱状图等的矢量数据。
图3 矢量链数据结构
矢量链组(VectorLists)是指由多条矢量数据链横向依次链接而成的组。
纵向分层剖面的构建比较复杂,目前的算法并不能够实现复杂地质分层的准确表达。为了满足工程应用的需求,可对生成的剖面图进行局部的细微调整[7]。鉴于可视化的地质剖面图与剖面数据结构存在对应的映射关系,可在图形上选取基本的几何元素如矢量点、矢量线段、矢量多边形等,通过移动鼠标的拖曳对矢量图形进行局部微调整,并将图形化的结果、修改后的矢量数据更新到数据库中,完成局部热操作的决策功能。屏幕热调整内部逻辑结构如图4所示。
图4 屏幕热调整内部逻辑结构
上层数据映射逻辑主要完成屏幕热区与系统中逻辑矢量线、矢量面等的对应关系映射,选择了一个屏幕多边形时即是选择了内存中对应的一个矢量多边形逻辑结构。在用户选择对选中屏幕多边形进行调整时,触发数据逻辑映射下的矢量多边形逻辑结构的修改,即是直接对矢量逻辑结构的修改,修改完成后,由底层数据映射逻辑完成对钻孔知识库的更新,实现屏幕地质剖面的完全热调整。
基于钻孔数据的地质剖面建模子系统的模型为3层结构,分别是表现层、应用逻辑层和数据服务层,如图5所示。
图5 剖面建模逻辑模型
数据层主要提供钻孔数据和剖面成图的数据,逻辑数据源直接提供基于点、线、面、链、链组的矢量逻辑数据结构,为剖面的生成与调整提供直接的映射与支撑。
逻辑层主要是利用纵向分层剖面算法对剖面的生成、绘制、平面热调整程序逻辑进行封装的程序逻辑实现,以插件dll的形式进行动态的加载与调用。
表现层主要提供剖面成图后的基本图形展现,包括钻孔柱状图表、航道地质横、纵剖面图的直观图形展现,直观的图形热调整及剖面的导入导出等功能。
航道地质剖面图自动生成系统采用Arc GIS Server开发,ASP.NET C#作为编程语言,Microsoft Visual Studio 2008作为开发环境,Oracle 11G标准版作为数据库。
航道纵剖面图的生成是根据本文提出的纵向分层剖面算法的思想得以实现的,利用点、线、面、链、链组的拓扑结构进行绘制。在选择绘制之前,需要选择钻孔投影方式,不同的投影方式生成不同的航道纵剖面图。直连表示直接将钻孔连接,投影表示将钻孔坐标投影到航道中心线上再绘制。利用直连方式绘制出的航道纵剖面图,如图6所示。
图6 航道纵剖面
航道横剖面图反映了垂直于航道中心线的横切面地质情况。在本系统中,是在选择了一个已有航道纵剖面后,在GIS图层上对航道中心线进行任意方向上的交叉切割,得到某一切割的航道横剖面,如图7所示。
图7 航道横剖面
剖面图采取热修改调整时,必须保证整体数据结构的正确性不会受到任一图元的变化而遭到破坏。本文设计的基于点、线、面、链、链组的三级拓扑结构能很好地满足这一点,对剖面进行热调整的过程实际上是选取第i条链第j个多边形第k条线段或左、右端点,或第i条链第j个多边形第k个顶点。无论对点、线段或多边形进行调整都对应钻孔剖面的一个逻辑数据结构,对屏幕剖面进行热调整的过程即是对对应的剖面逻辑结构进行修改的过程,具体如图8所示。
图8 剖面屏幕热调整
在分析了传统的剖面成图算法后,本研究设计了一种点、线、面、链、链组的五级矢量数据模型,提出了地质剖面的纵向分层剖面算法,给出了地质剖面模块的逻辑设计及剖面数据的存取设计,介绍了航道纵、横剖面图的自动绘制和屏幕热调整的具体实现过程,实现了航道纵、横剖面的自动生成与绘制,并给出了地质剖面屏幕热调整的机理和解决方案,为航道管理提供了高效的决策支撑。
下一步,笔者将二维地质剖面图的自动绘制与热调整研究上升到三维空间,研究在三维空间中,地质剖面如何展现、数据结构如何组织设计、地质剖面成图的算法、成图方式和投影映射方法。