第三章 城市地下管线信息系统的算法研究.docx
- 文档编号:5660630
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:11
- 大小:212.21KB
第三章 城市地下管线信息系统的算法研究.docx
《第三章 城市地下管线信息系统的算法研究.docx》由会员分享,可在线阅读,更多相关《第三章 城市地下管线信息系统的算法研究.docx(11页珍藏版)》请在冰豆网上搜索。
第三章城市地下管线信息系统的算法研究
第三章城市地下管线信息系统的算法研究
3.1拓扑数据生成算法
由于管网的空间关系相对较为简单,基本上不存在线与面的关系,只包含线与弧段、线与结点、弧段与结点之间的拓扑关系。
它们之间的拓扑关系在第二章已阐述。
管网拓扑数据通过管线索引数据文件生成。
算法采用VisualC++5.0编程实现,在算法的设计过程中主要使用数组、结构及结构数组的数据存贮方式。
有关拓扑数据生成算法如下(PAD图):
3.2管线点MIF、MID文件生成算法
MIF文件用于保存管线点的图形数据,而MID文件用于保存管线点的属性数据,它们是管网成图的关键。
MIF、MID文件是在管线拓扑数据文件的基础上生成的。
管线点MIF、MID文件生成的算法如下:
voidCTopolbuildView:
:
OnPointBuild()//生成管线点MIF文件
{
设置一对话框
if(确认)
{
获取管线点标准坐标数据文件
读该文件并以行为一记录写入数组linearray中
确定管线点的总点数
for(管线的总点数)
{
从linearry中逐记录分离出各每一记录的内部元素
写数据元素到管线点结构数组中
}
释放linearray
MessageBox("管线点数据文件已成功写入结构coordata!
");
//为不重复写结点而设置一标记
for(所有结点)
{
nodearray.SetAtGrow(l,"fause");
}
写所有管线点MIF文件的头
for(所有管线根数)
{
//根据LineUserID确定管线点MIF文件的名、颜色及类型
if(line[k].LineID<200000&&line[k].LineID>=100000)
{
CStringgoal="c:
\\mappipeline\\data\\mif\\JSP001.mif";
CStringgoal1="c:
\\mappipeline\\data\\mif\\JSP001.mid";
CStringgoal2="c:
\\mappipeline\\data\\mif\\JST001.mif";
CStringLColor="255";
ltype="JS";
//写管线点MIF文件的数据节
CTopolbuildView:
:
WriteMifLinePointEntry
(k,goal,goal1,goal2,LColor,ltype);
}
...(共九类,其实现算法同上述给水管线。
)
}
MessageBox("各类管线点的*.mif;*.mid文件生成完毕!
");
Invalidate();
}
}
3.3管线点MIF文件数据节的生成算法
如前所述,MIF文件包括两部分,即MIF文件的头和数据节。
MIF文件的数据节主要对应的是点对象、线对象、区域对象等图形信息,如无数据节,则所得到的MIF文件只是一个空表并无实际意义。
管线点MIF文件数据节的生成算法如下:
voidCTopolbuildView:
:
WriteMifLinePointEntry
(ints,CStringgoalfile,CStringgoalfile1,
CStringgoalfile2,CStringLColor,CStringLType)
//生成管线点MIF文件数据节
{
定义变量用于写MIF文件的数据节
利用VC的CstdioFile类定义一文件对象,该对象实现文件的写操作
置该文件尾部
写一回车换行符号
for(一管线的组成弧段数)
{
for(所有弧段数)
{
if(该管线的一组成弧段是某一弧段)
{
for(所有管线点数)
{
if(该弧段的起结点是某一管线点)
{
for(所有的管线结点数)
{
if(该弧段的起结点是某一结点)
{
if(该结点标记为“fause”,)
{
按MapInfo的MIF文件格式写管线点数据CTopolbuildView:
:
WriteMidLinePAtribute(n,goalfile1,LType);//写管线点MID文件CTopolbuildView:
:
WriteMifPText(n,goalfile2,LType);//写管线点注记文件
nodearray[h]="true";//写完结点后,作一标记
}
}
}
}
}
//写弧段内点
for(该弧段内点数)
{
for(所有管线点数)
{
if(该弧段一内点是某一管线点)
{
按MapInfo的MIF文件格式写管线点数据
CTopolbuildView:
:
WriteMidLinePAtribute
(n,goalfile1,LType);//写管线点MID文件
CTopolbuildView:
:
WriteMifPText
(n,goalfile2,LType);//写管线点注记文件
}
}
}
//写终结点,算法同起结点相同
//MessageBox("thesecondwrited");
}
}
}
entryfile.Close();//关闭该文件
}
3.4交点搜索和线性内插算法
该算法是绘制管线纵横断面图的关键。
通过该算法,可获取管线断面与所截管线的交点的平面位置,同时可搜索出交点的两个相邻点,并采用线性内插的方法求出该交点的地面高、管顶高和管底高。
交点搜索和线性内插算法主要由三个部分构成:
判断断面与管线相交并求交点、搜索交点两相邻点、线性内插。
算法描述如下:
(1)计算管线图中已打开的相关管线表的个数,逐表进行扫描、循环。
(2)计算某一管线TAB表中的记录数(管线根数),逐记录进行扫描、循环。
判断断面线是否与该记录相交,如果相交求出交点的X,Y。
如果不相交则继续对表的下一记录进行判断。
(3)如果存在交点,依次求该管线每连续两点的最小BOX,判断交点是否在最小BOX内。
(4)如果在某一最小BOX内,则进行如下判断:
(5)求交点到这两点所确定的直线的距离,如果该距离大于一给定限值,则此最小BOX不是所要求的最小BOX,继续进行搜索。
(6)如果距离小于给定的限值,则该最小BOX即为所要查找的BOX,然后求出此最小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、ZB1
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.5空间分析算法
管线空间分析主要包括空间位置分析、相交分析、包含分析和网络分析,本文主要研究相交分析(叠置分析)和包含分析算法。
3.5.1相交分析算法
相交分析算法实现区域对象(任一图上区域或用户自定义区域)与管线线对象及区域对象的相交叠置计算,通过该算法可获取相交计算后的管线线对象的长度及面对象的面积。
相交分析算法如下:
//主程序
submain
定义各变量
打开表fzxc.tab用于用户自定义一区域
获取表的存贮路径
if用户选择了一个表中的一面对象,then
获取所选表的表名
把该面对象赋值给一对象变量
获取所选对象类型
if所选对象类型为一区域(region)then
调相交分析子程序(subintersectsys)进行相交计算
endif
else
note"请在地图窗口选择一个区域对象"
endif
endsub
//相交分析计算
subintersectsys
定义各变量
创建一新表"INSresult.tab"用于相交分析结果属性数据显示输出
定义一地图窗口用于相交分析结果图形显示输出
curpen=Currentpen()//获取目前线样式
curbrush=MakeBrush(1,BLUE,red)//获取目前区域样式
//逐表进行相交运算(如下为给水管线表)
求给水管线同所选区相交的记录,并赋给一临时表jsl_temp.tab中
获取表中的记录数
if记录数不为零then
选择第一条记录
do
jsl_zone=jsl_temp.obj//把该记录所对应的对象赋给一对象变量
returns=Overlap(region1,jsl_zone)//获取相交计算后的对象
改变线样式
设置记录加数器
通过s1、s2、s3、s4、s5、s6设置相交分析结果表属性值
InsertIntoINSresultValues(s1,s2,s3,s4,s5,s6)
//插入相交分析结果表(INSresult)一记录,并更新。
FetchNextFromjsl_temp//搜索下一记录,进行如上操作。
LoopWhileNotEOT(jsl_temp)//如果未到表结束,继续进行循环
endif
...
//对其它表进行相交计算,如排水管线表、燃气管线表等共九类表,其算法相同。
//区域与面对象的相交计算的算法与上述算法一致。
Endsub
3.5.2包含分析算法
包含分析算法实现区域对象(任一图上区域或用户自定义区域)与管线点点对象的包含计算,通过该算法可查询分析出该区域对象内的用户所要获取的信息。
包含分析算法如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 城市地下管线信息系统的算法研究 第三 城市 地下 管线 信息系统 算法 研究
![提示](https://static.bdocx.com/images/bang_tan.gif)