ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:212.21KB ,
资源ID:5660630      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5660630.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三章 城市地下管线信息系统的算法研究.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三章 城市地下管线信息系统的算法研究.docx

1、第三章 城市地下管线信息系统的算法研究第三章 城市地下管线信息系统的算法研究3.1 拓扑数据生成算法由于管网的空间关系相对较为简单,基本上不存在线与面的关系,只包含线与弧段、线与结点、弧段与结点之间的拓扑关系。它们之间的拓扑关系在第二章已阐述。管网拓扑数据通过管线索引数据文件生成。算法采用Visual C+ 5.0编程实现,在算法的设计过程中主要使用数组、结构及结构数组的数据存贮方式。有关拓扑数据生成算法如下(PAD图): 3.2 管线点MIF、MID文件生成算法 MIF文件用于保存管线点的图形数据,而MID文件用于保存管线点的属性数据,它们是管网成图的关键。MIF、MID文件是在管线拓扑数据

2、文件的基础上生成的。管线点MIF、MID文件生成的算法如下: void CTopolbuildView:OnPointBuild() / 生成管线点MIF文件 设置一对话框 if(确认) 获取管线点标准坐标数据文件 读该文件并以行为一记录写入数组linearray中 确定管线点的总点数 for (管线的总点数) 从linearry中逐记录分离出各每一记录的内部元素 写数据元素到管线点结构数组中 释放linearray MessageBox(管线点数据文件已成功写入结构coordata!); / 为不重复写结点而设置一标记 for(所有结点) nodearray.SetAtGrow( l, fa

3、use); 写所有管线点MIF文件的头 for(所有管线根数) /根据LineUserID 确定管线点MIF文件的名、颜色及类型 if (linek.LineID=100000) CString goal=c:mappipelinedatamifJSP001.mif; CString goal1=c:mappipelinedatamifJSP001.mid; CString goal2=c:mappipelinedatamifJST001.mif; CString LColor=255; ltype=JS; / 写管线点MIF文件的数据节 CTopolbuildView:WriteMifLin

4、ePointEntry (k,goal,goal1,goal2,LColor,ltype); (共九类,其实现算法同上述给水管线。) MessageBox(各类管线点的*.mif;*.mid文件生成完毕!); Invalidate(); 3.3 管线点MIF文件数据节的生成算法 如前所述,MIF文件包括两部分,即MIF文件的头和数据节。MIF文件的数据节主要对应的是点对象、线对象、区域对象等图形信息,如无数据节,则所得到的MIF文件只是一个空表并无实际意义。管线点MIF文件数据节的生成算法如下: void CTopolbuildView:WriteMifLinePointEntry (int

5、s ,CString goalfile,CString goalfile1, CString goalfile2,CString LColor,CString LType) / 生成管线点MIF文件数据节 定义变量用于写MIF文件的数据节 利用VC 的CstdioFile类定义一文件对象,该对象实现文件的写操作 置该文件尾部 写一回车换行符号 for(一管线的组成弧段数) for(所有弧段数) if (该管线的一组成弧段是某一弧段) for(所有管线点数) if(该弧段的起结点是某一管线点) for(所有的管线结点数) if (该弧段的起结点是某一结点) if(该结点标记为“fause”,)

6、按MapInfo的MIF文件格式写管线点数据 CTopolbuildView:WriteMidLinePAtribute(n,goalfile1,LType);/写管线点MID文件 CTopolbuildView:WriteMifPText(n,goalfile2,LType);/写管线点注记文件 nodearrayh=true;/写完结点后,作一标记 /写弧段内点 for(该弧段内点数) for(所有管线点数) if(该弧段一内点是某一管线点) 按MapInfo的MIF文件格式写管线点数据 CTopolbuildView:WriteMidLinePAtribute (n,goalfile1,

7、LType);/写管线点MID文件 CTopolbuildView:WriteMifPText (n,goalfile2,LType);/写管线点注记文件 /写终结点,算法同起结点相同 /MessageBox(the second writed); entryfile.Close();/ 关闭该文件 3.4 交点搜索和线性内插算法 该算法是绘制管线纵横断面图的关键。通过该算法,可获取管线断面与所截管线的交点的平面位置,同时可搜索出交点的两个相邻点,并采用线性内插的方法求出该交点的地面高、管顶高和管底高。 交点搜索和线性内插算法主要由三个部分构成:判断断面与管线相交并求交点、搜索交点两相邻点、线

8、性内插。算法描述如下: (1) 计算管线图中已打开的相关管线表的个数,逐表进行扫描、循环。 (2) 计算某一管线TAB表中的记录数(管线根数),逐记录进行扫描、循环。判断断面线是否与该记录相交,如果相交求出交点的X,Y。如果不相交则继续对表的下一记录进行判断。 (3) 如果存在交点,依次求该管线每连续两点的最小BOX,判断交点是否在最小BOX内。 (4) 如果在某一最小BOX内,则进行如下判断: (5) 求交点到这两点所确定的直线的距离,如果该距离大于一给定限值,则此最小BOX不是所要求的最小BOX,继续进行搜索。 (6) 如果距离小于给定的限值,则该最小BOX即为所要查找的BOX,然后求出此

9、最小BOX的大小两点(即交点的前后两点),记录点标识(POINTID)。 (7) 通过如上所得的点标识(POINTID),分别得到1点的X、Y、Z、ZT、ZB和2点的X、Y、Z、ZT、ZB,如图3-1。 (8) 求交点p与1点的距离S1和1、2两点的距离S。 (9) 求交点的Z、ZT、ZB 1 Zp=Z1+S1/S * (Z2 - Z1) p ZTp=ZT1+S1/S * (ZT2 - ZT1) ZBp=Z1+S1/S * (ZB2 - ZB1) 2 (10) 把这此数据写入自定义的数据结构中。 图3-1 (11) 逐记录逐表进行循环,直至全部结束。 (12) 把交点数据写入数据文件之中。3.

10、5 空间分析算法 管线空间分析主要包括空间位置分析、相交分析、包含分析和网络分析,本文主要研究相交分析(叠置分析)和包含分析算法。3.5.1 相交分析算法 相交分析算法实现区域对象(任一图上区域或用户自定义区域)与管线线对象及区域对象的相交叠置计算,通过该算法可获取相交计算后的管线线对象的长度及面对象的面积。相交分析算法如下:/主程序sub main 定义各变量 打开表fzxc.tab用于用户自定义一区域 获取表的存贮路径 if 用户选择了一个表中的一面对象,then 获取所选表的表名 把该面对象赋值给一对象变量 获取所选对象类型 if 所选对象类型为一区域(region) then 调相交分

11、析子程序(sub intersectsys)进行相交计算 end if else note 请在地图窗口选择一个区域对象 end ifend sub /相交分析计算sub intersectsys 定义各变量 创建一新表INSresult.tab用于相交分析结果属性数据显示输出定义一地图窗口用于相交分析结果图形显示输出 curpen = Currentpen() /获取目前线样式 curbrush=MakeBrush(1, BLUE,red) / 获取目前区域样式 /逐表进行相交运算(如下为给水管线表) 求给水管线同所选区相交的记录,并赋给一临时表jsl_temp.tab中 获取表中的记录数

12、if 记录数不为零 then 选择第一条记录 do jsl_zone=jsl_temp.obj /把该记录所对应的对象赋给一对象变量 returns=Overlap(region1,jsl_zone)/获取相交计算后的对象 改变线样式 设置记录加数器 通过s1、s2、s3、s4、s5、s6设置相交分析结果表属性值 Insert Into INSresult Values(s1,s2,s3,s4,s5,s6) /插入相交分析结果表(INSresult)一记录,并更新。 Fetch Next From jsl_temp/ 搜索下一记录,进行如上操作。 Loop While Not EOT(jsl_temp)/ 如果未到表结束,继续进行循环 end if /对其它表进行相交计算,如排水管线表、燃气管线表等共九类表,其算法相同。 /区域与面对象的相交计算的算法与上述算法一致。End sub 3.5.2 包含分析算法 包含分析算法实现区域对象(任一图上区域或用户自定义区域)与管线点点对象的包含计算,通过该算法可查询分析出该区域对象内的用户所要获取的信息。包含分析算法如下:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1