基于ArcEngine的灾害地质立体图图切剖面算法设计与实现

2012-01-02 06:45裴丽娜孔春芳乔立锦张军强
关键词:剖面图产状图层

裴丽娜,孔春芳,刘 刚,吴 勇,乔立锦,张军强

(1.黄河勘测规划设计有限公司,郑州 450003;2.中国地质大学(武汉)计算机学院,武汉 430074)

图切地质剖面图(Transverse Cutting Profile)是地质剖面图的一种,是指在地质图上,选择某一方向,根据各种地质、地理要素,按一定的比例尺,用投影方法编绘而成的地质剖面图[1-3].图切地质剖面图其目的是同地质图配合,反映地质体与地质构造在空间上的相互关系及地质演化关系[1-2,4].一般情况下,一幅区域地质图除了包括平面地质图(又称为主图,是地质图的主体部分)外,通常还附有1~2条与区域构造方向垂直,并且穿过地层较为齐全的横向图切剖面地质图[2].图切剖面是区域地质图的重要组成部分,与区域地质图相配合,可以清晰地反映出图区内地层、岩体、构造的空间分布特征[1],同样地,图切剖面与灾害地质立体图相配合,也可以清晰地反映出图区内地层、岩性、产状及崩塌、滑坡等特殊地质现象的分布特征,为工程治理和防治提供及时可靠的依据.

目前一些GIS软件,譬如Section、MapGIS、AutoCAD、南方CASS等都具有图切剖面功能,但是步骤繁琐、过程复杂,而且受钻孔数据的限制[5-6],无法在灾害地质工程中应用,所以基于现有的灾害地质数据,如何更快、更精确、更方便地实现图切剖面是本文研究的目的所在.一些专家、学者对图切剖面进行了深入研究,并开发了相关软件,如方世明等(2002)利用ArcView开发的基于GIS的地质图图切剖面计算机辅助编绘系统,该系统是基于二维地质图与地形图进行的,其图切剖面过程是由计算机辅助编绘系统实现的,主要步骤包括矢量化地图、选择剖面线、提取所需数据、绘剖面、花纹填充、人工修编、整饰打印等[1].朱永红等(2006)在南方CASS和MAPGIS软件支持下,利用勘探线测量坐标成果数据,编制数字化剖面图,并对图切剖面提出了编制思路和图切坐标数据的获取方法[6].朱莹等(2007)基于 GIS技术,融合基础地质数据、钻孔数据,实现了地质剖面图的自动绘制[4].陈嶷瑛(2008)提出一种基于知识的地质体智能识别框架,实现任意基于钻井的地质剖面图自动生成.并利用面向对象技术,采用具有层次结构的知识表示和嵌入式的推理机制,以某煤矿为例,实现了剖面图的自动生成与显示[7].刘杰等(2009)利用C++语言与MapGIS平台,实现了图切地质剖面的自动绘制及花纹填充[8].宋光浩(2009)利用南方CASS软件改造MAPGIS格式地形地质图,在其基础上绘制图切勘探线剖面[9].除此之外,方世明等 (2002)[10]、唐春艳等(2004)[11]、毛启明(2006)[12]研究了图切剖面中褶皱构造形态和花纹填充算法.这些研究为地质图图切剖面研究起到了积极的推动作用.

目前具有图切剖面功能的软件,虽然这个功能已经相当成熟,但是仍要经过很多步骤,处理相关数据,还要修饰图面,所以过程还是相当复杂,如果操作人员不太了解软件或者不太了解地质图就切不出剖面来,也就达不到通过读图辅助地质决策分析的目的[7,11,13].大多数系统图切剖面功能还是依赖钻孔数据、槽探数据等,所以系统通用性不强,譬如在灾害地质预测防治方面的研究,如果这些数据不存在,或者找不到这些数据,那么图切剖面分析就进行不了.

因此,对于图切剖面的研究,针对以上两个方面:步骤繁琐复杂和所依赖数据的不同,如何简化步骤,增加系统的自适应性,把这些步骤转为后台程序,使用户不用了解图切剖面的复杂原理,跳过这些步骤,轻松就能达到图切剖面的目的,以及增强系统在灾害地质研究方面的通用性是本文的主要方向和技术攻关的难点,也是本文选题的出发点.

地质剖面图数据具有多源、多量、多类、多维、多主题等特征[14],从而决定了其绘制过程将会是一个非常复杂的过程.本文以三峡库区杨老山地区为例,研究的主要内容有以下几个方面.

(1)分析研究区域内地层、岩性、产状,及崩塌、滑坡等特殊地质现象的空间分布特征,将这些实体抽象成概念模型,据此总结出从灾害地质立体图图切剖面的“知识规则”.

(2)研究在GIS技术支持下,实现灾害地质图图切剖面,其间涉及到地层线、地层面的生成规则、生成算法.

(3)考虑到与“三峡库区地质灾害预警指挥系统”其他上下游软件或者其他管理软件的集成,如在网页上输入任意两个空间地理坐标点,就能切出这两个坐标点间的剖面.这里是把剖面线按图幅剪断成多条剖面线,再针对每条剖面线和它所属的图幅区域进行实现,这就需要把原三维信息、中途生成的信息以及最后表现出来的二维剖面图信息以数组形式按图幅存储,每个图幅的信息一一对应,地层线、地表线、地层面、地层产状、地层面填充、标注信息一一对应,才能最终生成正确的跨图幅剖面图.

本文在中国地质大学(武汉)信息所开发QuantyView平台工作的基础上[15],针对三维环境平台的特点提出了地质剖面图生成的思路与方法,并基于该思路与方法实现了在ArcGlobe平台支持的三维环境下生成二维地质剖面图的功能,该功能是利用C#.NET语言,基于ArcEngine平台进行开发实现的,它不仅实现了对任意地区任意地段地质剖面的绘制,并且也体现了地下复杂产状构造的地质结构特征.

1 方法与技术

首先依据具备的数据并参照以往学者的地质剖面图制图研究以及剖面图应用领域的不同,为地质剖面图、地层产状、断层线、滑坡定义如下数据结构:

(1)剖面图的数据结构:

public struct SectMap

public IPolyline sectline;//用户画的剖面线

public IFeatureLayer stratumLine2dLayer;//地层线图层

public IFeatureLayer stratumGroup2dLayer;//地层面图层

public IFeatureLayer altitude2dLayer;//产状图层

public IRasterLayer elevLayer;//栅 格 地 表图层

public string nodename;//剖面图的图名

(2)地层产状数据结构

private struct Altitude

public double x;//地层产状X坐标

public double y;//地层产状Y坐标

public double tendency;//地层产状倾向

public double angle;//地层产状倾角

(3)断层线数据结构

private struct FaultLine

public int ID;//断层线的ID编号

public string name;//断层线名称

public double type;//断层性质

(4)滑坡数据结构

private struct LandSlide

public int ID;//滑坡的ID编号

public string name;//滑坡名称

public double trend;//滑坡发展趋势}

1.1 整体结构设计

灾害地质立体图图切剖面采用三层结构,分为用户层、中间层和数据层.用户层指用户在软件界面进行图切剖面,用户的所有操作都是在界面上完成.中间层是软件后台调用数据并分析地质地层、构造的知识规则建立模型、运算、绘制图切剖面的过程.数据层是存放在关系型数据库Access中的属性数据和以FileGeodatabase来管理的空间数据,或者是利用ArcSDE和Oracle数据库来管理的数据,图切剖面的整体结构设计如图1所示.

图1 整体结构设计流程图Fig.1 The flowchart of the overall structure

1.2 地质剖面图的构建

本文具体技术路线如图2所示,各阶段做的具体研究任务如下.

(1)资料收集、数据整理、转换:分析图切剖面所需数据,并将所需数据整理、对于不是AcrGIS格式的数据,将其转换成AcrGIS数据格式.

(2)地质数据库建模:本系统采用了两种不同的数据管理方式.第一种是利用ArcSDE和Oracle数据库来管理数据,将所需的60个地区数据导入到Geodatabase中,在oracle数据库中通过ArcSDE来进行统一访问和管理;第二种是利用Access和FileGeodatabase来管理数据,主用是利用源数据的Geodatabase格式,同时继承了源数据的图层编码格式[16].

图2 图切剖面技术路线.Fig.2 The technology flowchart of transverse cutting profile

(3)建立图切剖面数据模型:针对已有的数据和预期达到的效果,进行了图切剖面概念模型、逻辑模型、计算数据模型、绘制数据模型结构设计[17].

(4)生成地层线:根据三维地质图中的地层产状、地质构造分布、地层分界线和地质基础数据确定图切剖面的地层分界线,将三维灾害地质图中的地层产状、地质构造分布、地层分界线及其他地质基础数据的信息都传递给图切剖面的地层分界线,使图切剖面的地层线的倾斜角度、倾斜方向都具有一定的地质信息.

(5)生成辅助要素:主要是地形线、图切剖面的边界线、坐标轴等辅助表达要素的生成,这些都是根据图切剖面的剖面线、DEM地表、剖面图的主体确定的.

(6)生成地层面:有了图切地质剖面图的线要素层sectionlinelayer上的地形线、底部线、剖面边界线、地层分界线和灾害体边界线,并且这些线组成了若干闭合的区域,那么就可以利用ArcGISEngine相关接口方法创建地层横截面.

(7)属性赋值,纹理填充:根据区域地质图图示图例国家标准,在ArcGIS中自制一个具有所需线符号,岩性符号的图例库,进行唯一值渲染,即可填充上线型或花纹.

(8)模板打印:主要通过调用ArcGIS Engine中IPageLayoutControl和IPrinter接口内置的函数和方法来实现.

1.2.1 数据模型建立 本文建立了地层、地质构造、灾害体、图切剖面的概念模型和逻辑模型,图切剖面的计算数据模型和绘制模型[18].其中最主要的图切剖面逻辑模型如图3所示,图切剖面逻辑模型是在建立了地层逻辑模型和地质构造逻辑模型基础上建立的,主要描述剖面图主体(地层面、地层线、地层产状、地质构造等)和其他辅助表达要素,图切地质剖面与地层的关系是组合关系,与地质构造的关系是关联关系,图切剖面中的要素包括剖面图主体、剖面名称、坐标轴、图例.图切地质剖面计算数据模型只负责对地质信息的抽象和计算,绘制数据模型则负责将计算数据模型转化成屏幕上的图形显示出来,并且是能够利用AE绘制的绘制数据模型,如图4所示,图切剖面的显示需要依赖点、线、面要素的显示.在利用灾害地质立体图绘制二维地质剖面图的过程中,需要调用图切剖面点要素、线要素、面要素的绘制方法,线要素图层里的线要素绘制主要指地层分界线、滑坡边界线、断层线及坐标轴线的绘制;面要素图层中面要素的绘制指地层横截面、滑坡面的绘制;点要素图层中点要素的绘制主要指标注点的绘制.

图3 图切剖面逻辑模型Fig.3 The logic model of transverse cutting profile

图4 图切剖面绘制数据模型Fig.4 The drawing data model of transverse cutting profile

1.2.2 地层分界线生成 首先创建一个线图层sectionLineLayer,并给该图层创建字段Line-Type(线类型)、LeftType(线左边地层类型)、RightType(线右边地层类型)、视倾角、倾向,然后根据剖面线和区域地质数据先后生成地层分界线、地表线、底部线、边界线,最后利用IFeatureCursor、IFeatureBuffer、IFeature接 口 内 置 的方法属性将这些线添加到sectionLineLayer线图层.

根据研究显示的地区不同,从数据库获取该地区的产状、地层线、地层面和DEM.任意画一条剖面线,利用ITopologicalOperator接口的ITopologicalOperator.Intersect方法拓扑求交得到它与地层边界线、河流、断层及其他灾害体边界的交点point(x,y),再通过IRasterSurface.PutRaster、ISurface.GetElevation方法以及DEM地表栅格图层就可给交点赋高程值得到该交点对应的三维坐标point(x,y,z).与此同时,对岩层产状图层进行预处理,从数据库获取产状数据,将所有产状要素以结构Altitude形式表示出来,利用反距离加权差值法求得点point(x,y)的产状信息,有了产状信息即可知该点处的视倾角,这个视倾角的补角可赋给地层线的倾斜角度,在这里这不仅代表地层线周围的产状信息,又起到一个临时容器的作用,把这个角度值传给地层面的产状.为时剖面图更美观、完整、清晰得表达,还要计算出剖面线走向,并显示在剖面图的右上角位置.

有剖面线及剖面线与地层线等在三维坐标系中的交点,根据三维坐标到二维坐标,→X,Z→Y 转换的原理,利用 ArcEngine接口ICurve3D.QueryPointAndDistance方法得到该交点映射到二维环境中的坐标pt(x,y),二维剖面图中的地层线有了倾角,和一个已知点(即点pt(x,y)),假定地层有一个厚度H,即可得到地层线,具体流程如图5所示.现在剖面线被地层分界线、河流、滑坡分成了一段一段,每一段剖面线落在哪个地层或河流或灾害体上,需要对其进行判断,这里采用的方法是判断每一段剖面线的中点落在哪一个地层面或河流或灾害体上,那么,这段剖面线就属于什么地层类型,而将地层分界线添加到sectionLineLayer线图层上时,其字段Li-neType(线类型)、LeftType(线左边地层类型)、RightType(线右边地层类型)、视倾角、倾向也就可以进行赋值了,LineType很清楚是地层分界线,LeftType就是该地层分界线左边的那段剖面线所属的地层类型,RightType就是该地层分界线右边的那段剖面线所属的地层类型,视倾角和倾向就是从上述在point(x,y,z)交点处插值的产状中得到的.

图5 生成地层分界线流程图Fig.5 The flowchart of generating stratigraphic boundary

1.2.3 地形线、坐标轴生成 地形线是利用剖面线,DEM和AE相关接口得到的,根据三维坐标到二维坐标,→X,Z→Y转换的原理,即可得到该点在二维剖面图中对应的地形线.

坐标轴,获取剖面图线要素图层的范围(最大值、最小值),即可确定坐标轴.

1.2.4 地层面生成 (1)创建地层面.有了地形线、底部线、剖面边界线线和地层分界线,这些线都在图切地质剖面图的线要素层section linelayer上,并且这些线组成了若干闭合的区域,那么就可以创建地层横截面了,首先创建一个图切地质剖面的面要素图层section polygon layer,同时给这个面要素图层中的面要素类创建自定义的字段属性地层类型(GeoType)、角度、倾向,然后利用ArcEngine创建要素的接口IFeature Construction的方法Construct Polygons From Features From Cursor即可创建剖面图中的面要素图层中的地层横截面要素,然后给地层横截面的属性字段赋值.(2)给地层面赋予相应的名称及产状.取图切地质剖面的线要素图层中的线要素类和面要素图层中的面要素类,也就是一个个取出地层分界线和地层横截面,判断面线邻接,将地层线的产状属性传给与它邻接的面.假设有n条地层线,m个Polygon,先取第一条地层线,将所有的面遍历,判断是否和该线邻接,如邻接则放在容器list Polygon Features中.然后对容器中的元素赋值,再取第二条地层线,同样遍历所有的面,判断面是否与该线邻接,如临接,则放容器中,等待赋值.按此方法,依次判断第三条、第四条,……直至最后一条,判断出该地层面与哪两个地层分界线邻接,然后给面赋值,对于list Polygon Features中的元素,只需判断它在线的左侧还是右侧,具体算法是如果线的外包盒的最小X坐标值大于面的外包盒的最小X坐标值或者线的外包盒的最大X坐标值大于面的外包盒的最大X坐标值,那么面在线的左边,否则面在线的右边.如在左侧,就把线左边的产状信息赋给面;如在右侧,就把线右边的产状信息赋给面.给地层面赋值的流程如图6所示.

图6 给面赋值流程图Fig.6 The flowchart of assigning the polygon

1.2.5 岩性符号填充 最后是对图切地质剖面图的各种线要素进行渲染和对地层横截面进行岩性花纹填充,根据区域地质图图示图例国家标准,在ArcGIS中自制一个通用、开放的图例库PMT.style,其中的Line Symbols是线符号,如图7所示(底部线是没有颜色的线),Fill Symbols是岩性符号如图8所示.符号库制作完毕,再利用ArcGIS自带的转换工具Make Server Style Set将PMT.style转换为PMT.Server Style,以备编程代码调用,具体调用代码如下:string strPath=EvirSetting.Setting.AppSettting+"\\PMT.Server-Style";/strPath为PMT.ServerStyle所存储的路径 ISymbol psymbol= (ISymbol)LoadSymbol(strPath,strValue,"Fill Symbols");//strValue为填充的线或面要素的名称,Fill Symbols为填充的符号的类型,这里这个参数只用到了“Line Symbols”、“Fill Symbols”这两种.

在图例库中遍历各种类型的各种符号,获取对应名称的符号,然后进行唯一值渲染,即可填充上线型或花纹.

图7 线符号Fig.7 Line symbols

图8 面的填充符号Fig.8 Filled symbols of polygons

1.2.6 图面打印 图切剖面的图面打印通过调用ArcGIS Engine中IPage Layout Control和IPrinter接口内置的函数和方法来实现如图9所示.IPage Layout Control.Printer用于连接打印机,IPage Layout Control.Page用于连接跟该控件相关的页面.IPrinter.Driver Name用于指定驱动名称,IPrinter.Does Driver Support Printer用用于判断用于打印的打印机是否被驱动支持,IPrinter.StartPrinting用于开始打印,IPrinter.Finish Printing用于结束打印.

2 实验结果

以三峡库区杨老山地区为例,如图10所示,在基于ArcGlobe开发的三维环境中任意画出一条剖面线,自动由图生成一幅该剖面线切出的地质剖面图,如图11所示,其中有地表线、地层线、底部线和其他辅助线,两种不同的花纹之间是地层线,不同的花纹代表不同的地层产状信息,图12所示是切出的剖面图的局部放大图.实践证明该算法依据专家知识规则,具有显著的合理性,且图切剖面步骤简单,只需画一条剖面线就可自动切剖面,其它软件由人工进行的提取所需数据、绘剖面各要素、花纹填充等步骤在这里完全由程序进行,使得图切剖面的速度更快、步骤更简单、操作更方便,该功能实现模块具有较高推广和实用价值.

图10 在三维环境中画一条剖面线Fig.10 Drawing a section line in three-dimensional environment

3 结论

比起目前具有图切剖面功能的应用软件,本文研究的灾害地质立体图图切剖面功能具有如下优点.

图11 图10对应的地质剖面图Fig.11 The geological profile corresponding to Fig.10

图12 图11的局部放大图Fig.12 Enlarged map of the Fig.11

(1)操作简单,实现了自动图切剖面.由于设计的目标就把纷繁复杂的地质知识规则分析、计算交给了程序,用户只需在所需数据存在的前提下,在想要研究的区域画一条剖面线,就可实现图切剖面,不需要处理数据、修饰图面之类的.其他软件的图切剖面过程中,处理数据最为繁琐,对于一个不了解图切剖面原理的用户来说,甚至不知道如何处理,处理成什么样子才能达到图切剖面所需数据的效果.

(2)更适用于灾害地质研究.其他软件的图切剖面都是依赖钻孔数据、槽探数据等,所以系统通用性不强,在灾害地质预测防治方面的研究,这些数据不存在,那么图切剖面分析就进行不了.而在本文研究的图切剖面中,利用勘查工程、地层地貌、工程地质岩组、构造、地层产状、灾害体信息实现了灾害地质立体图图切剖面.

(3)灾害地质立体图图切剖面功能通用性比较强,对于不同地区,只要具备数据,同样适用,当剖面线跨越两个甚至多个地区时仍能切出相应的剖面图.而其他软件的图切剖面针对具体的某一区域或某几个特定的钻孔可以正确地构建图切剖面,而对其它区域甚至其它任意钻孔,便不能自动生成正确的剖面图.

[1]方世明,吴冲龙,刘 刚,等.基于GIS的地质图图切剖面计算机辅助编绘[J].中国地质,2002,21(4):440-444.

[2]邹云翔.矿山地质剖面绘制系统设计与研究[D].中南大学.2010.

[3]百度百科.http://baike.baidu.comview2461798.htm.

[4]朱 莹,刘学军,陈锁忠.基于GIS的地质剖面图自动绘制软件的研究[J].南京师大学报:自然科学版,2007,30(4):104-108.

[5]张 凯,何 英.如何使用AutoCAD2004编制图切剖面图[J].贵州地质,2007,24(2):161-164.

[6]朱永红,周 勇,邓万进,等.南方CASS和MAPGIS精确编制剖面图的方法[J].贵州地质,2006,23(2):56-161.

[7]陈嶷瑛,武 强,关文革.基于地质体智能识别的剖面图自动绘制研究[J].计算机技术与发展,2008,18(10):233-236.

[8]刘 杰,梁立恒,王海鹏.MapGIS下图切地质剖面自动绘制方法探究[J].测绘与空间地理信息,2009,32(5):52-54.

[9]宋光浩.MAPGIS格式地形图图切剖面绘制的又一种方法[J].贵州地质,2009,26(1):75-78.

[10]方世明,刘 刚,赵温霞,等.地质图切剖面图中褶皱构造的计算机辅助编绘[J].地质与勘探,2002(3):52-54.

[11]唐春艳,王玉兰,彭继兵,等.地质剖面图自动绘制方法[J].世界地质,2004,23(4):348-353.

[12]毛启明.地质图三维可视化研究与实现[D].杭州:浙江大学,2006.

[13]高明忠,谢和平,李 洪,等.基于GIS的地质剖面图形生成技术[J].岩土力学,2006,27(10):1791-1794.

[14]吴冲龙.资源信息系统教程[M].地质出版社,2004.

[15]刘志峰.基于GeoView三维平台的任意剖面图生成技术研究与应用[D].武汉:中国地质大学(武汉),2008.

[16]中国地质调查局地质调查技术标准——数字地质图空间数据库[S].2006,12.

[17]陈国旭,吴冲龙,张夏林,等.三维地质建模与地矿勘察图件编制一体化方法研究[J].地质与勘探,2010,46(3):542-546.

[18]李蒙文,赵财胜,郑榕芬,等.勘探线剖面图三维坐标与剖面图二维坐标转换计算方法[J].吉林大学学报:自然科学版,2005,35(6):818-822.

猜你喜欢
剖面图产状图层
浅谈砂岩储层的岩石学特征
激电联合剖面在判断矽卡岩型矿床矿体产状中的应用
“三点解析法”估算地质体产状及应用
广东省风门坳锡矿地球化学特征与找矿标志
喷气式民航客机剖面图?
赤平投影法在边坡稳定性分析中的应用
巧用混合图层 制作抽象动感森林
图层法在地理区域图读图中的应用
勘探线剖面图精确绘制方法探析
跟我学添加真实的光照效果