DuanMian.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using SuperMap.Data;
  2. using SuperMap.Mapping;
  3. using System;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. using WWPipeLine.MapBasic;
  8. using WWPipeLine.MapBasic.Conditions;
  9. namespace WWPipeLine.MapTools.Conditions.AnalystToolBar
  10. {
  11. public class DuanMian : BasicToolBar
  12. {
  13. private GeoLine m_TheLine;
  14. private Recordset m_Guanxian;
  15. public DuanMian() : base()
  16. {
  17. this.ConditionPanelName = "断面分析";
  18. var startDrawToolStripButton = new ToolStripButton()
  19. {
  20. DisplayStyle = ToolStripItemDisplayStyle.ImageAndText,
  21. Text = "开始绘制断面",
  22. Name = "StartDraw",
  23. AutoToolTip = false
  24. };
  25. var analystToolStripButton = new ToolStripButton()
  26. {
  27. DisplayStyle = ToolStripItemDisplayStyle.ImageAndText,
  28. Text = "分析",
  29. Name = "Analyst",
  30. AutoToolTip = false
  31. };
  32. base.ToolStrip.Items.Add(startDrawToolStripButton);
  33. base.ToolStrip.Items.Add(analystToolStripButton);
  34. startDrawToolStripButton.Click += StartDrawToolStripButton_Click;
  35. analystToolStripButton.Click += AnalystToolStripButton_Click;
  36. }
  37. private void AnalystToolStripButton_Click(object sender, EventArgs e)
  38. {
  39. DataTable dt = new DataTable { TableName = "DuanMianAnalystResult" };
  40. DataColumn dataColumn;
  41. dataColumn = new DataColumn { ColumnName = "dmgc", Caption = "地面高程(M)" }; dt.Columns.Add(dataColumn);
  42. dataColumn = new DataColumn { ColumnName = "gxgc", Caption = "管线高程(M)" }; dt.Columns.Add(dataColumn);
  43. dataColumn = new DataColumn { ColumnName = "gxms", Caption = "管线埋深(M)" }; dt.Columns.Add(dataColumn);
  44. dataColumn = new DataColumn { ColumnName = "gxgj", Caption = "管线管径(MM)" }; dt.Columns.Add(dataColumn);
  45. dataColumn = new DataColumn { ColumnName = "gxSMID", Caption = "管线ID" }; dt.Columns.Add(dataColumn);
  46. dataColumn = new DataColumn { ColumnName = "jl", Caption = "距离(M)" }; dt.Columns.Add(dataColumn);
  47. if (m_TheLine is null) return;
  48. Point2D m_TheLine_start = new Point2D(m_TheLine[0][0].X, m_TheLine[0][0].Y);
  49. Point2D m_TheLine_end = new Point2D(m_TheLine[0][1].X, m_TheLine[0][1].Y);
  50. Point2D m_Guanxian_start;
  51. Point2D m_Guanxian_end;
  52. Point2D m_JiaoDian;
  53. Point2D m_JiaoDian_temp = new Point2D();
  54. double m_JiaoDian_jl = 0.0D;
  55. double m_Guanxian_start_ms = 0.0D;
  56. double m_Guanxian_end_ms = 0.0D;
  57. double m_JiaoDian_ms = 0.0D;
  58. double m_Guanxian_start_gc = 0.0D;
  59. double m_Guanxian_end_gc = 0.0D;
  60. double m_JiaoDian_gc = 0.0D;
  61. m_Guanxian.MoveFirst();
  62. DataRow dr;
  63. DataTable dsJSJDPT2Count;
  64. dt.Rows.Clear();
  65. while (!m_Guanxian.IsEOF)
  66. {
  67. dr = dt.NewRow();
  68. dsJSJDPT2Count = ComsStatic.QueryDataTable(ComsStatic.dvJSJDPT, string.Format(" (bsm ='{0}' OR wth='{1}') AND ms is not null ", m_Guanxian.GetFieldValue("qsdh").ToString(), m_Guanxian.GetFieldValue("zddh").ToString()));
  69. if (dsJSJDPT2Count.Rows.Count == 2)//理论生只会查询到2条记录,分别是管线的起点物探号和终点物探号
  70. {
  71. //获得管线的 起点坐标 起始埋深 终点坐标 终点埋深 来自管点JSJDPT数据
  72. m_Guanxian_start = new Point2D(double.Parse(dsJSJDPT2Count.Rows[0]["x"].ToString()), double.Parse(dsJSJDPT2Count.Rows[0]["y"].ToString()));
  73. m_Guanxian_end = new Point2D(double.Parse(dsJSJDPT2Count.Rows[1]["x"].ToString()), double.Parse(dsJSJDPT2Count.Rows[1]["y"].ToString()));
  74. m_JiaoDian = Geometrist.IntersectLine(m_TheLine_start, m_TheLine_end, m_Guanxian_start, m_Guanxian_end, false);
  75. //开始计算交点的埋深数据
  76. Double.TryParse(dsJSJDPT2Count.Rows[0]["ms"].ToString(), out m_Guanxian_start_ms);
  77. Double.TryParse(dsJSJDPT2Count.Rows[1]["ms"].ToString(), out m_Guanxian_end_ms);
  78. m_JiaoDian_ms = MapBasic.ComsStatic.getPointHeight(m_Guanxian_start, m_Guanxian_start_ms, m_Guanxian_end, m_Guanxian_end_ms, m_JiaoDian);
  79. //开始计算交点的地面高程
  80. Double.TryParse(dsJSJDPT2Count.Rows[0]["dmgc"].ToString(), out m_Guanxian_start_gc);
  81. Double.TryParse(dsJSJDPT2Count.Rows[1]["dmgc"].ToString(), out m_Guanxian_end_gc);
  82. m_JiaoDian_gc = MapBasic.ComsStatic.getPointHeight(m_Guanxian_start, m_Guanxian_start_gc, m_Guanxian_end, m_Guanxian_end_gc, m_JiaoDian);
  83. //开始计算交点 之间的距离 第一个交点距离为0
  84. if (m_JiaoDian_temp.X > 0 && m_JiaoDian_temp.Y > 0)
  85. {
  86. GeoLine geoline = new GeoLine(new Point2Ds { m_JiaoDian, m_JiaoDian_temp });
  87. m_JiaoDian_jl = Math.Round(geoline.Length, 2);
  88. }
  89. m_JiaoDian_temp = m_JiaoDian;
  90. dr["dmgc"] = m_JiaoDian_gc;
  91. dr["gxgc"] = m_JiaoDian_gc - m_JiaoDian_ms;
  92. dr["gxms"] = m_JiaoDian_ms;
  93. dr["gxgj"] = m_Guanxian.GetFieldValue("gj");
  94. dr["jl"] = m_JiaoDian_jl == 0 ? "" : m_JiaoDian_jl.ToString();
  95. dr["gxSMID"] = m_Guanxian.GetFieldValue("smid");
  96. dt.Rows.Add(dr);
  97. }
  98. m_Guanxian.MoveNext();
  99. }
  100. if (dt.Rows.Count == m_Guanxian.RecordCount && dt.Rows.Count > 0)
  101. {
  102. DuanMianAnalystResult duanMianAnalystResult = new DuanMianAnalystResult(dt);
  103. duanMianAnalystResult.ShowDialog();
  104. }
  105. else if (dt.Rows.Count < m_Guanxian.RecordCount)
  106. {
  107. Sunny.UI.UIMessageTip.ShowWarning(string.Format("应生成{0}个横切面,共生成{1}个横切面,请首先检查管线的起始点号和终点点号数据!", m_Guanxian.RecordCount, dt.Rows.Count), 5000);
  108. DuanMianAnalystResult duanMianAnalystResult = new DuanMianAnalystResult(dt);
  109. duanMianAnalystResult.ShowDialog();
  110. this.CloseToolBar();
  111. }
  112. else
  113. {
  114. Sunny.UI.UIMessageTip.ShowError("构建查询结果失败,请重新绘制断面", 5000);
  115. }
  116. }
  117. private void MapControl_Tracked(object sender, SuperMap.UI.TrackedEventArgs e)
  118. {
  119. m_TheLine = e.Geometry.Clone() as GeoLine;
  120. if (m_TheLine is null) return;
  121. m_TheLine.Style = new GeoStyle { LineColor = Color.Red, LineWidth = 1 };
  122. MapControl.Map.TrackingLayer.Clear();
  123. MapControl.Map.TrackingLayer.Add(m_TheLine, "StartDraw");
  124. m_Guanxian = ComsStatic.dvJSLK.Query(m_TheLine, 0, CursorType.Static);
  125. if (m_Guanxian.RecordCount < 1)
  126. {
  127. Sunny.UI.UIMessageTip.ShowError("当前断面没有管线信息,请重新绘制断面!至少2个断面才可以展示", 2000);
  128. }
  129. else
  130. {
  131. Sunny.UI.UIMessageTip.ShowOk("当前断面筛选到" + m_Guanxian.RecordCount + "条管线信息,需要生成个" + m_Guanxian.RecordCount + "横切面", 2000);
  132. }
  133. }
  134. private void StartDrawToolStripButton_Click(object sender, EventArgs e)
  135. {
  136. MapControl.Map.TrackingLayer.Clear();
  137. MapControl.Action = SuperMap.UI.Action.CreateLine;
  138. MapControl.Tracked += MapControl_Tracked;
  139. }
  140. public override void AfterClose()
  141. {
  142. ComsStatic.RecordsetDispose(m_Guanxian);
  143. MapControl.Tracked -= MapControl_Tracked;
  144. base.AfterClose();
  145. }
  146. private void InitializeComponent()
  147. {
  148. this.SuspendLayout();
  149. //
  150. // DuanMian
  151. //
  152. this.Name = "DuanMian";
  153. this.ResumeLayout(false);
  154. this.PerformLayout();
  155. }
  156. }
  157. }