利用CAD的数据编程实现等值线图和3D曲面图自动生成的方法
摘 要: 在岩土工程勘察报告中,地基土(岩)层顶板埋深、标高、厚度等值线图和地基土(岩)层顶板3D曲面图是对设计和施工具有直接指导作用的专题地图。SURFER具有由规格数据快速构建散点图、帮写硕士论文等值线图、3D曲面图的功能。本文介绍了利用目前流行的理正勘察CAD的数据,编程实现等值线图和3D曲面图自动生成的方法,取得了较好的应用效果,具有较高的推广应用价值。
关键词: SURFER;岩土工程勘察;专题地图
1. 前 言
岩土工程勘察报告中,除常规钻孔柱状图、地质剖面图、各种测试图表和其他计算统计表外,地基土(岩)层顶板标高、埋深、厚度等值线图和地基土(岩)顶板3D曲面图是两种十分重要的专题地图,尢其是在软弱地基和高层建筑物的桩基础设计施工过程中,具有直接的指导作用。以前岩土工程师们只能手工制作等值线图,工作效率低下,3D曲面图根本无法实现,随着计算机的普及以及图形学技术的发展,自动生成等值线图和3D曲面图的技术已经成熟,在许多大型GIS系统中已得到广泛应用,并产生了一些专门构建等值线图和3D曲面图的工具软件如SURFER等。
理正勘察CAD软件作为国内岩土工程勘察单位使用广泛的CAD软件,具有强大的辅助计算与成图功能,但其基本软件配置中并未提供等值线图的生成功能,需另行购买,而3D曲面图的生成功能尚没有提供,难以满足使用单位和技术人员快速制作等值线图和3D曲面图的要求。SURFER是Goldren Software公司的产品,具有基于规格点数据快速构建散点图、等值线图、3D曲面图和相应的图文编辑功能,并提供丰富的宏命令和OLE支持,为我们自己编程实现等值线图和3D曲面图的自动生成提供了可能。在实际工作中,我们充分利用了理正勘察CAD系统的数据,通过VB编程调用SURFER软件的图形构建功能,实现了等值线图、3D曲面图的实时快速制作,满足了设计施工单位的需求,取得了较好的应用效果。
2. 专题图制作
岩土工程等值线图、3D曲面图的制作就是在钻探点地基土(岩)层顶板标高、埋深、厚度数据和钻探点坐标数据的基础上,通过构建三角网进行数据内插和视角转换构建而成。我们利用VB编程从理正勘察CAD系统数据库中提取所需地层数据(x,y,标高、埋深、厚度)和钻探点数据,通过OLE技术,使用SURFER软件的宏命令进行格网数值内插和图形绘制,既利用了理正勘察CAD的数据,又省去了编写插值和视角转换算法的复杂工作,操作简便,快速可行,效果明显。
2.1 编程中用到的函数与命令
在编程过程中,我们需要用到VB的数据访问对象等许多函数和语句以及SURFER软件的一些宏命令,下面简要介绍编程中需要用到的SURFER宏命令:
(1)StartupPath() :得到SURFER软件启动路径。
(2)GridData((DataFile,xCol,yCol,zCol, ...,OutGrid,...):由datafile点数据文件构造栅格文件,其中参数datafile为点数据文件名,采用表格方式,每行一个点数据,各列用","分开即可,xcol表示栅格X坐标对应数据文件的列(0~255),ycol表示栅格Y坐标对应数据文件的列(0~255),zcol表示栅格Z坐标对应数据文件的列(0~255),outgrid表示生成的栅格文件名,其他参数可采用系统默认值。
(3) MapPost (datafile,xCol,yCol, LabCol,SymCol,..., SymSize...):由数据文件生成点符号图,其中datafile,xcol,ycol与GridData()命令中参数相同,Labcol表示点符号标注列(0~255),SymCol表示点符号类型值,SymSize表示点符号大小值(绘图单位),且要求小于10,其他参数可采用系统默认值。
(4)MapContour(InGrid, ..., Smooth Amount):
由栅格文件生成等值线图,其中参数InGrid表示栅格文件名,Smooth Amount表示等值线曲线园滑程度(0,1,2),2表示最高园滑效果,其他参数可采用系统默认值。
(5)MapSurface(InGrid,...):由栅格文件生成3D曲面图,其中参数InGrid表示栅格文件名,其他参数可采用系统默认值。
(6)FilePrint((Method, ..., Scale):打印图形,其中参数Method表示打印方式,Scale表示缩放比例,100%表示不缩放。
(7)FileExit(Save):退出SURFER系统,参数Save表示退出系统时图形存盘方式。
2.2 专题图用数据的处理
SURFER软件对数据文件的格式要求是2维表格形式,以","分隔或对齐方式均可,我们采用","分隔方式的文本文件格式,数据由理正勘察CAD数据库中取得,使用人员选择工程编号和地基土层名称自动检索生成数据文件,我们用VB编程实现数据文件的生成和程序界面控制。在理正勘察CAD系统中,钻探点坐标与层位数据存放于z zuankong表、z g tuceng表中,工程信息数据存放于x gongcheng表中,各表以GCSY字段关联,数据处理流程如下:选择工程编号→选择工程地层名称→检索工程钻探点数据→逐孔检索选择层顶板埋深数据,或据钻孔坐标与埋深计算选择层顶板标高和厚度→形成目标数据文件。
在处理层位数据时,经常会碰到某些钻探点选择地层缺失的情况,对由于钻探深度不够,选择地层及以下地层都缺失的钻探点数据予以剔除,对选择地层缺失但其下覆地层存在的钻探点,则取选择地层上层层位数据,如其上层缺失,则顺次向上取其上上层数据,其至地面数据为止。主要代码如下:
Private Sub Form Load()‘打开理正数据库并取出工程信息显示在表格中
Dim gcdat As Database , gcinfo As Recordset, gcdc As
Recordset
Dim gcsy as long ,mdbfile as string,password as string
On Error Resume Next
mdbfile = App.Path + "\database\gicad5.mdb"'理正勘察
CAD数据库
set gcdat=OpenDatabase(mdbfile,False,False, ;UID=sa;
PWD=password)
Set gcinfo = gcdat.OpenRecordset("select gcsy,gcbh,gcmc
from x gongcheng")
Set Data1.Recordset = gcinfo‘检索工程编号,名称信息显示到表格中
End Sub
Private Sub DBgrid1 Click()‘选择工程,检索工程地层信息
On Error Resume Next
Gcsy=gcinfo(‘gcsy' )
Sql=" select distinct tczcbh,tcycbh,tccycbh, tclm from z g
tuceng where gcsy="+trim(str(gcsy))
Set gcdc=dcdat.openrecordset(sql)‘检索工程地层名称等信息到列表框中
Set Data2.Recordset = gcdc
End Sub
Private Sub DBlist1 DblClick()‘生成选择层顶板数据文件
On Error Resume Next
datfile = App.Path + "\conture.dat"‘输出数据文件
zkfile = App.Path + "\postzk.dat"‘输出钻探点符号标注文件
Dim symbh As Integer ,zkbh as string‘钻探点符号类型值,钻孔编号变量
Open datfile For Output As #1
Print #1, "′X′,′Y′,′BG′,' MS' ,' HD' "‘x,y坐标,标高,埋深,厚度
Open zkfile For Output As #2
Print #2, "′X′,′Y′,′ZKBH′,′smbh′"‘x,y坐标,钻孔编号,符号类型值
Dim hole as recordset ,zkfc as recordset‘定义钻探点信息、钻探点分层信息记录集
SQL = "select zkbh,zkx,zky,zkbg from z zuankong where
gcsy=“+trim(str(gcsy))+”order by zkbh"‘检索工程钻孔信息(钻孔编号、坐标、孔口标高等)
Set hole = gcdat.OpenRecordset(SQL)
hole.MoveFirst
Do While Not hole.EOF‘循环检索钻孔分层数据
x0 = hole ( " xh"): y0 = hole ( " yh"): z0 = hole ( "
groundlevel")‘钻孔坐标及孔口标高
zkbh = hole("zkbh")‘钻孔编号
sql1 = "select zkbh,tczcbh,tcycbh,tccycbh,tccdsd,tchd from
z g tuceng where gcsy=" +trim(str(gcsy))+”and zkbh=
'”+ zkbh + "′order by zkbh"
Set zkfc = gcdat.OpenRecordset(sql1)′检索工程钻孔编号=
zkbh的钻孔分层及厚度数据
。。。。。。'计算或取得钻探点层位埋深、厚度或标高