常君锋,孙增辉,王 月
(1.中国有色金属工业西安勘察设计研究院有限公司,陕西 西安 710054)
公路横断面测量即根据设计文件确定的线路中线,按照一定的间距实际测量与路线正交方向上的地形变化点,可用于路基、挡墙、防护工程等方案的设计以及土石方工程数量的计算。目前横断面测量的方法主要包括水准仪—皮尺法、GPS-RTK法、全站仪法、经纬仪视距法、架置式无棱镜激光测距仪法、数字地面模型法、手持式无棱镜激光测距仪法、水准仪法和抬杆法等。测量后的数据需整理成不同的数据格式,以便不同公路设计软件应用。
随着高速公路从平原微丘区向山岭重丘区延伸,路线方案所经过的地形条件越来越复杂,部分路段的地形极其破碎,采用常规测量方法难度大、效率低,且正确的横断面方向也难以保证。本文利用Visual LISP语言编制了相应软件,结合不规则三角网(TIN)模型和实测地形图数据,对路线横断面数据自动提取方法进行了探讨。
横断面测量是测定中桩两侧垂直于中线的地面 线[1],即按一定的间距测量路线中桩点法线方向上设计范围内的地表起伏特征点。常规的横断面测量方法为:在中桩上架设好仪器,对中整平后,瞄准垂直于路线的横断面方向,指挥移动棱镜在每个高程变化点处立镜,并测量距离和高差(或直接测量高程);也可利用全站仪自带的对边测量功能测量所需的断面数据。
全要素高程测量是指采用全站仪、GPS-RTK等测量仪器对线路中线两侧预测横断面宽度范围进行三维坐标测量。全要素高程测量主要采用极坐标法测量地形点,根据全站仪的观测精度,在几百 m距离范围内的误差均在1 cm左右[2]。采集要素主要为地形特征点高程、特征线高程以及居民地、道路、境界、水系、植被与独立地物等的三维信息,即陡坎上下边缘线、塘底、塘堤、坡脚高程、坡顶高程、地形变换点等的三维坐标,这些特征点一定要测量。实地测量的平面和高程精度应不低于JTG C10-2007《公路勘测规范》中横断面测量精度的要求[3]。碎部点采集完成后,内业在AutoCAD中展点,并按要素进行编辑处理。外业高程局部施测点分布如图1所示。
图1 外业高程局部施测图
横断面数据提取结果如图2所示,图中粗虚线为预提取的横断面线,在AutoCAD中,利用Visual LISP语言的SSGET函数可得到与之相交的所有实体选择集[4],逐条求解所有选取的目标与中线的交点坐标、高程,再计算该点与中线的距离,即可得到该横断面数据。
图2 横断面数据提取结果
3.1.1 中桩坐标与方位角计算
通常设计单位都会提供路线方案的中线坐标文件,这时可选用Visual LISP语言中的以下函数来获取中线实体目标[5]:①利用setq zx(ssget)获取中线实体; ②利用setq ent(ssname zx 0)获取中线图元名; ③利用setq pt_xy(xyp-get-CurvePointAtDist ent(-kp Qdzh))语句获得曲线某点(点(kp)与中线起点(Qdzh)的距离)的坐标;④利用setq af(xyp-get-AngleAtPoint ent xpt)语句获得曲线上某点(kp)的切线方位角。
3.1.2 横断面左右边界点坐标计算
利用Visual LISP语言中的polar函数以及计算得到的中桩坐标(pt_xy)、切线方位角(af)、左边线距离(zbxjl)、右边线距离(ybxjl)即可计算得到横断面左边界点和右边界点坐标(图2中A、B点),即
setq pt_z (polar pt_xy (- af (* 0.5 pi)) zbxjl)
setq pt_y (polar pt_xy (+ af (* 0.5 pi)) ybxjl)
3.1.3 横断面相交实体选择
得到横断面左右两端点坐标后,可通过以下语句获得与之相交的实体:
setq ptlist (list pt_z pt_y)
setq ssdmx (ssget "CP" ptlist)
通过setq ndm_s(sslength ssdmx)语句获得与横断面线相交的实体个数,再逐一求解横断面线与选择实体的交点坐标、高程。
一般情况下,横断面左右两端点不一定与其他地物相交,如图2中 A、B点,因此计算其左右两端点高程,需按端点附近高程点进行计算。
3.2.1 TIN构建
以一定的半径在端点(以A为例)附近搜索所有高程点,并组建TIN,具体流程如图3所示。构建的TIN如图4所示。
图3 求解高程点流程图
图4 TIN构建结果
3.2.2 高程计算
建立TIN后,即可由TIN求解该区域内任意一点的高程。一般情况下采用线性内插的方法,即以三角形三点确定的斜平面作为地表面进行三角网内插,具体步骤为:
1)格网点检索。给定一点的平面坐标P(x,y),要基于TIN内插该点的高程H,首先需确定P点落在 哪个TIN三角形中。常用方法是通过距离计算得到距P点最近的点,设为Q1;依次取出以Q1为顶点的三角形,判断P点是否位于该三角形内,可通过P点是否与该三角形每一顶点在该顶点所对边的同侧加以判断;若P点不在以Q1为顶点的任意一个三角形中,则取离P点次最近的格网点,重复上述处理,直至确定P点所在的三角形,即检索到用于内插P点高程的3个格网点[6]。
2)高程内插。假设P(x,y)所在的三角形为ΔQ1Q2Q3,3个顶点坐标为(x1,y1,h1)、(x2,y2,h2)和(x3,y3,h3),则由Q1、Q2、Q3确定的平面方程为:
或
令
则P点的高程为:
采用相同方法可求得右端点和中点的高程。
3.2.3 坎的属性判别与高程计算
CASS软件是目前国内CAD外业数字化成图的主要软件之一,操作简单、程序化高。CASS软件在数据结构上与CAD软件有所不同,CASS自定义了扩展代码,因此有必要研究CASS的数据格式,以便提取CASS数据格式扩展数据[7]。
1)CASS外部扩展属性数据格式。-3 ("SOUTH" (1000. "204201") (1040 . 1.5))是CASS的外部扩展属性,其中“SOUTH”(南方)为外部扩展属性名称,“204201”为CASS内部代码,利用CAD的List是查不出来的,因此查看外部扩展属性数据需采用其他方法。
2)读取坎高属性。通过对CASS数据格式的研究,可通过以下语句获得坎高信息:
setq pgc (cdr(car(cdr(cdr(cadr (assoc -3 (entget PA '("SOUTH"))))))));坎高(或其他扩展信息)
3.2.4 横断面数据排序
通过横断面线相交实体选取、交点坐标与高程点计算后,得到一系列数据xy_List,但这些数据需经处理才能成为标准横断面数据。按从左到右的顺序对数据xy_List进行排序,执行语句为:
setq xy_list (vl-sort xy_list (function (lambda (e1 e2)
(< (* (distance pt_z (list (car e1) (cadr e1) 0)))
(* (distance pt_z (list (car e2) (cadr e2) 0)))))))
3.2.5 横断面数据输出
通常横断面数据要求的格式为距中桩(或前一点) 的距离、高程或高差,并非上述解算的点坐标和高程数据,因此需要对坐标数据进行计算,可通过VLISP中的基本函数功能来实现。①利用setq hdm_file (getfiled "保存横断面数据文件!" path_cad "txt" 1)保存横断面数据文件名;②利用setq file_hd(open hdm_file "w")输写方式打开文件;③利用setq dd(distance pt_xy(list(car pt)(cadr pt)0))计算各点距中桩的距离; ④利用setq gcjc(-(caddr pt)zzgc)计算各点与中桩高程的高差;⑤利用setq hdsj (strcat hdsj (rtos dd 2 2) "," (rtos gcjc 2 2))组成距离、高差数据;⑥利用write-line hdsj file_hd在文件中写入横断面数据。
针对如何在地形破碎、交通不便区域快速、准确地获取路线横断面数据的问题,本文基于Visual LISP语言对AutoCAD进行了二次开发,实践表明:①采用全要素地形测量与Visual LISP语言编制软件自动提取数据相结合的方法,能快速、高质量地获取横断面数据信息,大大提高生产效率;②在全要素地形测量中,应注意地形特征点、特征线的高程采样; ③在构建TIN时,应判断三角网与地性线、坡坎线的相交问题;④计算高程时,应遍历TIN,所求点位置必须落在某三角形内,否则应扩大搜索半径,重新组建TIN,直至满足要求为止。