




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高程点拟合断面及断面转换高程点软件说明报告编制: 陈礼坤审核: 贾克永审定: 赵振刚共 20 页中铁工程设计咨询集团有限公司济南设计院2015年01月 济南一、软件开发原因: 在隧道口地形和断面测量过程中,需要进行断面测量(一般要求5m一个断面)和地形测量(1:500)两项工作,如果已经测量了隧道口断面,我们可以将断面点转换成地形高程点,这样就可以在地形测量过程中,少测量一些地形点,或者我们已经有了隧道工点地形,可以直接利用测区高程点进行断面拟合,最后生成断面线,这样我们做好其中一项工作,就可以完成另外一项工作内容了。尤其是在隧道口这样测量条件较差的工作环境下,可以充分利用既有的测量成果,减少
2、一定的重复工作。 那么如何将高程点拟合成断面,或者将断面点转换成高程点,就需要对相关的算法进行研究,最终通过编程实现这些功能。以方便的实现利用高程点拟合断面和将断面转换成高程点。为此编写了高程点拟合断面及断面转换高程点软件,下面是软件的具体介绍。一、 软件功能1、 功能一:可以将全站仪断面数据(距离,高差格式),通过转换成CASS格式的.dat高程点数据文件。2、 功能二:可以将地形图上的高程点数据,按照设置要求,通过区域拟合转换成断面数据(距离,高差格式)。3、 适应范围:当地形图上高程点不足时,可以使用本功能一,将断面数据转换成高程点,当地形点较多,采用功能二直接进行断面拟合,尤其在隧道口
3、地形和断面测量过程中,以往需要进行断面(一般要求5m一个断面)和地形测量(1:500)两项工作,现在采用此软件可以断面点转换成高程点,或者直接利用高程点进行断面拟合,只需进行好一项工作即可。二、 软件特色1、 本软件采用VC6.0语言,采用易于交互操作的对话框模板和MSFlexGrid控件,在MFC开发环境下进行编程,软件的数据导入、计算的结果、均可直接在图表中呈现,做到所见即所得,便于数据的检查和核对,整个软件的界面简洁直观,功能清晰、易学易用。2、 本软件集地形高程点拟合断面和断面数据转换成地形高程点两个功能于一体,在两个功能中,通过算法设计,测量中桩里程、设计中桩里程和既有断面里程相互之
4、间可以自动匹配,不论测量中桩点、设计中桩点的顺序和多少,均能自动寻找和匹配。并且当设计中桩里程没有断面里程点时,可以根据设计中桩点的里程、坐标,自动计算出断面点的里程和坐标。3、 本软件的难点在于如何使用地形高程点进行断面拟合,采用自定义格网确定每个断面点的拟合区域,然后采用距离定权逐点进行断面点的高程和到中桩点的距离拟合,优点是在拟合范围内不遗漏点,但是算法较复杂,尤其是确定每个格网内有哪些待拟合点,拟合格网示意图如下:示意图一:拟合格网三、 软件编程实现1、利用Visual C+ 6.0软件中的MFC AppWizard创建MFC应用软件框架,采用对话框的应用程序结构进行可视化编程,将复杂
5、的计算隐藏在文档中,实现文件数据的交换,以达到软件界面简洁直观、友好易用的目的。软件界面如下图所示:其中左侧是软件功能实现按钮以及格网数据设置区,右侧是测量数据导入的显示、计算结果的显示,保存的数据格式的显示。2、算法思想:2.1首先确定我们需要实现的目标,能够利用高程点拟合出指定里程的断面和将已知断面数据转换成坐标高程点。为此,采用文件输入输出格式,设置专门的参数设置区域,利用编辑框进行参数设置,根据软件实现的两个功能,和两个功能实现过程中的关联和差异处,分共用功能按钮区和各自的专用功能按钮区三个功能区块,使软件界面能够一目了然。在文件输入和输出过程中,规定好数据的输入、输出格式。在Clas
6、sView中新增加一个数据读入读出类个类FreadCouSave,它具有导入、显示、修改、保存数据文件的功能,为了在视类展示和编辑数据,采用CEditMSFlexGrid控件,并对其进行二次开发,为按钮增加相关的函数和变量,具体函数示意如下:2.2,关键算法介绍和程序实现实现本程序难点主要有两部分,一个是两个功能均需要读入三个数据文件,在不同文件之间如何自动匹配同一个断面里程点,例如,在功能二中,先点击“读入既有横断面数据”后,获得我们想转换的所有断面里程。然后点击“读入测量中桩高程数据”和“读入设计中桩坐标数据”后,采用for循环和if-else选择结构,采用全局搜索,根据第一个文件的断面里
7、程,逐个搜索后两个文件的相关里程,并且同时进行坐标和高程匹配。如果既有横断面的里程再设计中桩坐标中没有的话,在在坐标匹配的过程中,还需要计算既有横断面的中桩点的坐标以及在区域线位的方位角,以便下一步计算。这些实现的部分具体代码如下: if(m_Pand1!=5|m_Pand2!=6|m_Pand3!=7)AfxMessageBox("请先读入断面数据、测量中桩、设计中桩三个数据文件!");else int i=0,j=0,j2=0,k=0,k2=10000,k3=10000;/i是断面数double xx=0.0,yy=0.0,aa=0.0,az=0.0,ay=0.0,XP
8、2=0.0,YP2=0.0;m_gn=0; for(i=0;i<m_DuanCount;i+)for(j=0;j<m_nn2/4-1;j+)if(m_LCdmi*30>=atof(Res.GetAt(j*4+0)&&m_LCdmi*30<atof(Res.GetAt(j*4+4)/找出中桩在设计中桩的位置k2=j; /找到断面中桩在设计中桩的位置k2for(j2=0;j2<m_nn4/2-1;j2+)/测量中桩数据if(m_LCdmi*30=atof(Res3.GetAt(j2*2+0) k3=j2; /找到断面中桩在测量中桩的位置k3if(k2!
9、=10000&&k3!=10000)xx=atof(Res.GetAt(k2*4+5)-atof(Res.GetAt(k2*4+1);yy=atof(Res.GetAt(k2*4+6)-atof(Res.GetAt(k2*4+2); aa=QJD(yy,xx);/断面中桩点的方位角az=aa-3.141592654/2;/左侧断面方位角ay=aa+3.141592654/2;/右侧断面方位角XP2=atof(Res.GetAt(k2*4+1)+fabs(m_LCdmi*30-atof(Res.GetAt(k2*4+0)*cos(aa); YP2=atof(Res.GetAt(k
10、2*4+2)+fabs(m_LCdmi*30-atof(Res.GetAt(k2*4+0)*sin(aa);/断面中桩点的坐标k=0;while(k<120)/将左侧的数据转换坐标,同时加高程,并把转换后的数据赋给数组if(m_LCdmi*3+1k!=-500)Agaocdm_gn0=m_gn;Agaocdm_gn1=XP2+m_LCdmi*3+1k*cos(az);/变换坐标Agaocdm_gn2=YP2+m_LCdmi*3+1k*sin(az);/变换坐标Agaocdm_gn3=m_LCdmi*3+1k+1+atof(Res3.GetAt(k3*2+1);另一个关键算法是如何确定每个
11、断面点的拟合区域和如何进行断面点的拟合,其实是一个高程内插的过程,这本身就是DEM研究的核心问题,有不少算法,由于我们的拟合点已经被限制在了每一个断面线上,就使得我们必须采取一种以距离定权的分块内插的拟合方法。然后逐点进行断面点的高程拟合和到中桩点的距离拟合,优点是在拟合范围内不遗漏点,但是算法较复杂,尤其是确定每个格网内有哪些待拟合点,以及格网内没有符合条件的拟合点、或者左右侧,有一侧不需要拟合的情况。编制的部分代码如下所示:for(j=0;j<m_nn2/4-1;j+)/找出中桩在设计中桩的位置 if(atof(Res3.GetAt(m*2+0)>=atof(Res.GetAt
12、(j*4+0)&&atof(Res3.GetAt(m*2+0)<atof(Res.GetAt(j*4+4)k2=j;/k2用来标记测量中桩高程的里程所在的设计里程的行数,从0开始算,用来计算方位角的 /找到测量的高程中桩在设计中桩的位置k2 if(k2!=10000)xx=atof(Res.GetAt(k2*4+5)-atof(Res.GetAt(k2*4+1);yy=atof(Res.GetAt(k2*4+6)-atof(Res.GetAt(k2*4+2); aa=QJD(yy,xx);/断面中桩点的方位角az=aa-3.141592654/2;/左侧断面方位角ay=a
13、a+3.141592654/2;/右侧断面方位角XP2=atof(Res.GetAt(k2*4+1)+fabs(atof(Res3.GetAt(m*2+0)-atof(Res.GetAt(k2*4+0)*cos(aa); YP2=atof(Res.GetAt(k2*4+2)+fabs(atof(Res3.GetAt(m*2+0)-atof(Res.GetAt(k2*4+0)*sin(aa);/断面中桩点的坐标if(m_fanw!=0)m_DianGeS=ceil(m_fanw/m_djianju);/左侧需要拟合的断面点的个数,向上取整elsem_DianGeS=0;if(m_fanwy!=0
14、)m_DianGeSy=ceil(m_fanwy/m_djianju);/左侧需要拟合的断面点的个数,向上取整elsem_DianGeSy=0;/右侧需要拟合的断面点的个数if(m_DianGeS=0)/如果左侧不需要拟合点m_LCdm2m2+10=0;m_LCdm2m2+11=0;elsek=0;j3=0;/k表示左侧待拟合的高程点的个数 while(k<m_DianGeS)/进行左侧断面数据的拟合 XP3=XP2+(m_djianju/2+m_djianju*k)*cos(az);/左侧拟合点的X坐标XP3YP3=YP2+(m_djianju/2+m_djianju*k)*sin(a
15、z);/左侧拟合点的Y坐标YP3qzz=0.0; /拟合每一个点之前都需要置0juliz=0.0;/拟合每一个点之前都需要置0m_ng=0.0;m_nl=0.0;k3=0;/每个拟合点的k3重新置0,k3表示每个拟合方框内符合条件点的个数for(i2=0;i2<m_nn3/4;i2+)/i2代表行数,m_nn3表示已知高程点的数据总数njuli1i2=sqrt(atof(Res2.GetAt(i2*4+2)-XP3)*(atof(Res2.GetAt(i2*4+2)-XP3)+(atof(Res2.GetAt(i2*4+1)-YP3)*(atof(Res2.GetAt(i2*4+1)-Y
16、P3)+0.00000000001; xx2=atof(Res2.GetAt(i2*4+2)-XP3;yy2=atof(Res2.GetAt(i2*4+1)-YP3; aa2=QJD(yy2,xx2);/拟合断面点到已知高程点的方位角 dk1=m_djianju/2-fabs(njuli1i2*sin(aa2-aa);dk2=m_qhjuli-fabs(njuli1i2*cos(aa2-aa);if(dk1>=0&&dk2>=0)/njuli2k30=njuli1i2;/将合格点的距离存入新数组中njuli2/njuli2k31=atof(Res2.GetAt(i2
17、*4+3);/将合格点的高程存入新数组中njuli2njuli2k30=atof(Res2.GetAt(i2*4+0);/点名njuli2k31=atof(Res2.GetAt(i2*4+2);/北坐标Xnjuli2k32=atof(Res2.GetAt(i2*4+1);/东坐标Ynjuli2k33=atof(Res2.GetAt(i2*4+3);/高程k3=k3+1;/将距离合格的点的挑选出来放入njuli2k34数组中,总计k3个/处理完每一点的距离,并挑选出距离合格的点jsq1k=k3;/将k3的值存入数组中,用于特殊情况处理 if(k3!=0) for(k5=0;k5<k3;k5
18、+) xx3=njuli2k51-XP2; yy3=njuli2k52-YP2;/拟合断面点到中桩点的坐标差 aa3=QJD(yy3,xx3);/拟合断面点到中桩点的方位角 dk3=sqrt(njuli2k51-XP2)*(njuli2k51-XP2) +(njuli2k52-YP2)*(njuli2k52-YP2)+0.00000000001;/符合条件的点到中桩点的距离 njuli4k50=njuli2k50;/点名 njuli4k51=fabs(dk3*sin(aa3-az);/点到断面线的垂直距离 njuli4k52=fabs(dk3*cos(aa3-az);/投影点到中桩点的距离,用
19、于断面距离计算3、 程序设计时的细节问题 如果某一个断面左侧的拟合距离是0,或者没有一个符合要求的拟合点,那么载拟合过程中,左侧拟合的断面的数据将会用(0 0)提示。当导入的断面个数超过80个,或者导入的中桩高程点或者设计中桩点超过9600个时,会给出友好提示。每个断面每侧的数据不会超过60个点。五、使用流程1、如果需要从已知高程点里面拟合出断面,需要首先对拟合的格网参数进行设置,下图是默认的参数设置 其中:(1.1)“左侧拟合宽度”和“右侧拟合宽度”是每一个断面拟合格网范围内参与拟合点的分布宽度,不足100m的,程序自动补足100m,高程以前一点为准。左右两侧可分别设置拟合宽度。(1.2)“
20、前后拟合范围各”这个参数意思是沿线路前进方向断面两侧的拟合宽度,比如2800这个断面和2850断面之间的距离是50m,可以设置“前后拟合范围各”的参数值是25,这样两个断面之间拟合范围在沿里程方向可以无缝衔接,当然,前后拟合范围也可以重合。(1.3)“断面点拟合间距”,是指断面左右两侧每隔多长距离,就需要拟合一个高程点,它和“前后拟合范围”这个参数一起构成一个拟合格网,具体含义还可参考前面的示意图一2、根据实际工作需要完成参数设置后,先点击这两个按钮,完成线路数据的输入。其中:“读入测量中桩高程数据”的数据格式如下所示:其中第一列是点名,必须是数字,第二列是测量的中桩高程,可以使新线的打线资料
21、或者既有线的抄中平资料。如果不知道中桩高程,只有需要拟合断面的中桩里程,那么只需将第二列的中桩高程全部改为0,最后保存的横断面数据将是(距离、高程)的数据格式。点名必须是数字。读入“设计中桩坐标数据”的数据格式如下图所示第一列为点名,第二列是北坐标,第三列是东坐标,第四列备注,是线路设计部门提供的中桩坐标通用格式。然后依次点击下图中的三个按钮,得到拟合出的横断面数据。其中“读入已知高程点数据”的数据格式如下图所示:第一列为点名,第二列是东坐标,第三列是北坐标,第四列高程,是CASS软件导入导出的高程点数据格式,在本软件数据导入中,数据之间的逗号,可用空格代替。点击“断面点拟合并显示”按钮后,结
22、果在右边的表格中显示,最后点击“保存断面点数据” 按钮,得到我们想要的拟合断面,和上一步表格显示的数据完全一致的。最后得到的数据格式如下图所示:1、 如果需要将既有横断面数据转换成高程点数据,那么首先点击这两个按钮,完成线路数据的输入。其中:“读入测量中桩高程数据”的数据格式如下所示:其中第一列是点名,必须是数字,第二列是测量的中桩高程,可以使新线的打线资料或者既有线的抄中平资料。如果不知道中桩高程,只有需要拟合断面的中桩里程,那么只需将第二列的中桩高程全部改为0,最后保存的横断面数据将是(距离、高程)的数据格式。读入“设计中桩坐标数据”的数据格式如下图所示第一列为点名,第二列是北坐标,第三列是东坐标,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 助学贷款抵押合同样本
- 优先股认购合同样本
- 买卖奶粉合同范例
- 包装销售合同标准文本
- 包装花束采购合同样本
- 包括合同样本
- 分手赔偿合同标准文本
- 买期房合同范例
- 建设工程施工合同总结报告5
- 2025年中国节水滴灌带行业市场前景预测及投资价值评估分析报告
- 2025-2030中国锻造(锻件)行业投资策略及规划建议研究研究报告
- 2025年上半年四川广元旺苍县引进高层次人才23人重点基础提升(共500题)附带答案详解
- 2025年心理b证笔试试题及答案
- 《冠心病病人的护理》课件
- 2024年湖南省长沙市中考历史试卷(附答案)
- 2023年胸痛中心质控报告-全国版
- 专题一电磁感应与电路ppt课件
- GDFJ005修改个人信息申请表
- JJF 1363-2019硫化氢气体检测仪型式评价大纲(高清版)
- 氟喹诺酮类抗菌药物的不良反应和临床应用概要
- 小学数学四年级下册小数点移动练习题(共2页)
评论
0/150
提交评论