收藏 分享(赏)

城市地下管线信息系统的算法研究.doc

上传人:cjc2202537 文档编号:1525157 上传时间:2018-07-24 格式:DOC 页数:11 大小:218KB
下载 相关 举报
城市地下管线信息系统的算法研究.doc_第1页
第1页 / 共11页
城市地下管线信息系统的算法研究.doc_第2页
第2页 / 共11页
城市地下管线信息系统的算法研究.doc_第3页
第3页 / 共11页
城市地下管线信息系统的算法研究.doc_第4页
第4页 / 共11页
城市地下管线信息系统的算法研究.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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

2、及 结 构 数 组 的 数 据 存 贮 方 式 。有 关 拓 扑 数 据 生 成 算 法 如 下 ( PAD图 ) :通 过 对 话 框 获 取 管 线 数 据 索 引 文 件p1读 该 文 件 , 并 以 行 为 记 录 写 入 一 数 组linearay中 p2While C=100000) CString goal=“c:mappipelinedatamifJSP001.mif“;CString goal1=“c:mappipelinedatamifJSP001.mid“;CString goal2=“c:mappipelinedatamifJST001.mif“;CString LCo

3、lor=“255“;ltype=“JS“;/ 写 管 线 点 MIF 文 件 的 数 据 节 CTopolbuildView:WriteMifLinePointEntry(k,goal,goal1,goal2,LColor,ltype); ( 共 九 类 , 其 实 现 算 法 同 上 述 给 水 管 线 。 )MessageBox(“各 类 管 线 点 的 *.mif;*.mid 文 件 生 成 完 毕 !“);Invalidate(); 3.3 管 线 点 MIF文 件 数 据 节 的 生 成 算 法如 前 所 述 , MIF文 件 包 括 两 部 分 , 即 MIF文 件 的 头 和 数

4、 据 节 。 MIF文 件 的 数据 节 主 要 对 应 的 是 点 对 象 、 线 对 象 、 区 域 对 象 等 图 形 信 息 , 如 无 数 据 节 , 则 所 得到 的 MIF文 件 只 是 一 个 空 表 并 无 实 际 意 义 。 管 线 点 MIF文 件 数 据 节 的 生 成 算 法 如下 :void CTopolbuildView:WriteMifLinePointEntry(int s ,CString goalfile,CString goalfile1,CString goalfile2,CString LColor,CString LType)/ 生 成 管 线 点

5、 MIF 文 件 数 据 节定 义 变 量 用 于 写 MIF 文 件 的 数 据 节利 用 VC 的 CstdioFile 类 定 义 一 文 件 对 象 , 该 对 象 实 现 文 件 的 写 操 作置 该 文 件 尾 部写 一 回 车 换 行 符 号for(一 管 线 的 组 成 弧 段 数 )for(所 有 弧 段 数 )if (该 管 线 的 一 组 成 弧 段 是 某 一 弧 段 ) for(所 有 管 线 点 数 )if(该 弧 段 的 起 结 点 是 某 一 管 线 点 )for(所 有 的 管 线 结 点 数 )if (该 弧 段 的 起 结 点 是 某 一 结 点 )if(

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

7、管 线 点 )按 MapInfo 的 MIF 文 件 格 式 写 管 线 点 数 据CTopolbuildView:WriteMidLinePAtribute(n,goalfile1,LType);/写 管 线 点 MID 文 件CTopolbuildView:WriteMifPText(n,goalfile2,LType);/写 管 线 点 注 记 文 件/写 终 结 点 , 算 法 同 起 结 点 相 同/MessageBox(“the second writed“); entryfile.Close();/ 关 闭 该 文 件3.4 交 点 搜 索 和 线 性 内 插 算 法该 算 法

8、是 绘 制 管 线 纵 横 断 面 图 的 关 键 。 通 过 该 算 法 , 可 获 取 管 线 断 面 与 所 截管 线 的 交 点 的 平 面 位 置 , 同 时 可 搜 索 出 交 点 的 两 个 相 邻 点 , 并 采 用 线 性 内 插 的 方法 求 出 该 交 点 的 地 面 高 、 管 顶 高 和 管 底 高 。交 点 搜 索 和 线 性 内 插 算 法 主 要 由 三 个 部 分 构 成 : 判 断 断 面 与 管 线 相 交 并 求 交点 、 搜 索 交 点 两 相 邻 点 、 线 性 内 插 。 算 法 描 述 如 下 :(1) 计 算 管 线 图 中 已 打 开 的 相

9、 关 管 线 表 的 个 数 , 逐 表 进 行 扫 描 、 循 环 。(2) 计 算 某 一 管 线 TAB表 中 的 记 录 数 ( 管 线 根 数 ) , 逐 记 录 进 行 扫 描 、 循 环 。判 断 断 面 线 是 否 与 该 记 录 相 交 , 如 果 相 交 求 出 交 点 的 X, Y。 如 果 不 相 交 则 继 续对 表 的 下 一 记 录 进 行 判 断 。(3) 如 果 存 在 交 点 , 依 次 求 该 管 线 每 连 续 两 点 的 最 小 BOX, 判 断 交 点 是 否 在最 小 BOX内 。(4) 如 果 在 某 一 最 小 BOX内 , 则 进 行 如 下

10、 判 断 :(5) 求 交 点 到 这 两 点 所 确 定 的 直 线 的 距 离 , 如 果 该 距 离 大 于 一 给 定 限 值 , 则此 最 小 BOX不 是 所 要 求 的 最 小 BOX, 继 续 进 行 搜 索 。(6) 如 果 距 离 小 于 给 定 的 限 值 , 则 该 最 小 BOX即 为 所 要 查 找 的 BOX, 然 后求 出 此 最 小 BOX的 大 小 两 点 ( 即 交 点 的 前 后 两 点 ) , 记 录 点 标 识 ( POINTID) 。(7) 通 过 如 上 所 得 的 点 标 识 ( POINTID) , 分 别 得 到 1点 的X、 Y、 Z、

11、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

12、.5 空 间 分 析 算 法管 线 空 间 分 析 主 要 包 括 空 间 位 置 分 析 、 相 交 分 析 、 包 含 分 析 和 网 络 分 析 , 本文 主 要 研 究 相 交 分 析 ( 叠 置 分 析 ) 和 包 含 分 析 算 法 。3.5.1 相 交 分 析 算 法相 交 分 析 算 法 实 现 区 域 对 象 ( 任 一 图 上 区 域 或 用 户 自 定 义 区 域 ) 与 管 线 线 对象 及 区 域 对 象 的 相 交 叠 置 计 算 , 通 过 该 算 法 可 获 取 相 交 计 算 后 的 管 线 线 对 象 的 长度 及 面 对 象 的 面 积 。 相 交 分 析

13、 算 法 如 下 :/主 程 序sub main定 义 各 变 量打 开 表 fzxc.tab用 于 用 户 自 定 义 一 区 域获 取 表 的 存 贮 路 径 if 用 户 选 择 了 一 个 表 中 的 一 面 对 象 , then 获 取 所 选 表 的 表 名把 该 面 对 象 赋 值 给 一 对 象 变 量获 取 所 选 对 象 类 型if 所 选 对 象 类 型 为 一 区 域 ( region) then调 相 交 分 析 子 程 序 (sub intersectsys)进 行 相 交 计 算end ifelsenote “ 请 在 地 图 窗 口 选 择 一 个 区 域 对

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

15、 并 赋 给 一 临 时 表 jsl_temp.tab中获 取 表 中 的 记 录 数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,

16、s5,s6) /插 入 相 交 分 析 结 果 表 ( INSresult) 一 记 录 ,并 更 新 。Fetch Next From jsl_temp/ 搜 索 下 一 记 录 , 进 行 如 上 操 作 。Loop While Not EOT(jsl_temp)/ 如 果 未 到 表 结 束 , 继 续 进 行 循 环end if /对 其 它 表 进 行 相 交 计 算 , 如 排 水 管 线 表 、 燃 气 管 线 表 等 共 九 类 表 , 其 算法 相 同 。/区 域 与 面 对 象 的 相 交 计 算 的 算 法 与 上 述 算 法 一 致 。End sub3.5.2 包 含

17、分 析 算 法包 含 分 析 算 法 实 现 区 域 对 象 ( 任 一 图 上 区 域 或 用 户 自 定 义 区 域 ) 与 管 线 点 点对 象 的 包 含 计 算 , 通 过 该 算 法 可 查 询 分 析 出 该 区 域 对 象 内 的 用 户 所 要 获 取 的 信 息 。包 含 分 析 算 法 如 下 : C1: 所 选 对 象 是 否 为 一 区 域 对 象 ;C2: 是 否 选 取 对 话 框 确 认 按 钮定 义 变 量 p1获 取 所 选 区 域 对 象 所 在 表 的 表 名 p2转 到 p7 p3设 置 对 话 框 用 于 用 户 选 择 包 含 分 析 条 件 p4

18、进 行 包 含 分 析 计 算 p5结 束 程 序 运 行 p6提 示 用 户 选 择 一 区 域 对 象 p7结 束 程 序 运 行 p8C1C2其 中 C3: 是 否 忽 略 条 件 ; L1: “=”、 L2: “”、 L3: “”; L1、 L12、 、L121: 表 示 管 线点 各 属 性 字 段 内 容 。P5定 义 变 量删 除 临 时 表把 所 选 区 域 对 象 赋 给 一 对 象 变 量进 行 包 含 运 算 Cal calculate0Cal calculate 101Cal calculate 102Cal calculate 104Cal calculate 103

19、Cal calculate 201Cal calculate 202Cal calculate 204Cal calculate 203Cal calculate 301Cal calculate 302Cal calculate 321Cal calculate 303Cal calculate 401Cal calculate 402Cal calculate 421Cal calculate 403C3 L1L2L3L4 L1L12L13L121L1L12L13L121L1L12L13L121L1L12L13L121其 中 C4: 是 否 选 择 所 有 管 线 点 表 ;C5: 是 否

20、 选 择 了 给 水 管 线 点 表 ;C6: 是 否 是 第 一 次 写 分 析 结 果 到 结 果 表 中 ;C7: 是 否 选 择 了 排 水 管 线 点 表 ;Calculate10定 义 变 量 对 附 合 条 件 的 给 水 管 线 点 进 行 包 含 运 算对 附 合 条 件 的 排 水 管 线 点 进 行 包 含 运 算 共 九 类 管 线 点合 并 包 含 分 析 结 果 到 表 temp1.tab中 4进 行 包 含 运 算空 操 作C5 C6另 存 分 析 结 果 表 为temp1.tab并 打 开 表设 置 一 标 计插 入 分 析 结 果 到 结 果 表 中C7 对 应 于 各 类 管 线 点 共 九 种 选 择同 上同 上输 出 包 含 分 析 结 果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报