diff --git a/Forms/MainForm.Designer.cs b/Forms/MainForm.Designer.cs index 58805e6..0834222 100644 --- a/Forms/MainForm.Designer.cs +++ b/Forms/MainForm.Designer.cs @@ -92,6 +92,7 @@ btnStartAdjust.TabIndex = 3; btnStartAdjust.Text = "开始平差"; btnStartAdjust.UseVisualStyleBackColor = true; + btnStartAdjust.Click += btnStartAdjust_Click; // // button2 // @@ -161,7 +162,7 @@ // 数据输入ToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { 从文件ToolStripMenuItem, 手动输入ToolStripMenuItem }); 数据输入ToolStripMenuItem.Name = "数据输入ToolStripMenuItem"; - 数据输入ToolStripMenuItem.Size = new Size(218, 34); + 数据输入ToolStripMenuItem.Size = new Size(270, 34); 数据输入ToolStripMenuItem.Text = "数据输入"; // // 从文件ToolStripMenuItem @@ -181,14 +182,16 @@ // 删除当前数据ToolStripMenuItem // 删除当前数据ToolStripMenuItem.Name = "删除当前数据ToolStripMenuItem"; - 删除当前数据ToolStripMenuItem.Size = new Size(218, 34); + 删除当前数据ToolStripMenuItem.Size = new Size(270, 34); 删除当前数据ToolStripMenuItem.Text = "删除当前数据"; + 删除当前数据ToolStripMenuItem.Click += 删除当前数据ToolStripMenuItem_Click; // // 数据检查ToolStripMenuItem // 数据检查ToolStripMenuItem.Name = "数据检查ToolStripMenuItem"; - 数据检查ToolStripMenuItem.Size = new Size(218, 34); + 数据检查ToolStripMenuItem.Size = new Size(270, 34); 数据检查ToolStripMenuItem.Text = "数据检查"; + 数据检查ToolStripMenuItem.Click += 数据检查ToolStripMenuItem_Click; // // 开始平差ToolStripMenuItem // diff --git a/Forms/MainForm.cs b/Forms/MainForm.cs index 210c392..37a1c48 100644 --- a/Forms/MainForm.cs +++ b/Forms/MainForm.cs @@ -46,13 +46,7 @@ namespace kcsj.Forms private void 从文件ToolStripMenuItem_Click(object sender, EventArgs e) { FileInputForm form = new FileInputForm(); - - if (form.ShowDialog() == DialogResult.OK) - { - LogService.AddLog("主窗体已接收文件导入数据。"); - LogService.AddLog($"已知点数量:{DataStore.KnownPoints.Count}"); - LogService.AddLog($"观测数据数量:{DataStore.Observations.Count}"); - } + form.ShowDialog(); } private void 手动输入ToolStripMenuItem_Click(object sender, EventArgs e) @@ -69,7 +63,45 @@ namespace kcsj.Forms private void 开始平差ToolStripMenuItem_Click(object sender, EventArgs e) { + try + { + if (!DataStore.HasData) + { + MessageBox.Show("请先导入或输入已知点和观测数据。"); + return; + } + LeastSquaresResult result = + LeastSquaresAdjustmentService.Adjust( + DataStore.KnownPoints, + DataStore.Observations); + + MessageBox.Show("间接平差计算完成。"); + + // 示例:把未知点结果输出到日志 + foreach (var item in result.UnknownElevations) + { + string pointName = item.Key; + double elevation = item.Value; + double error = result.UnknownElevationErrors[pointName]; + + LogService.AddLog( + $"{pointName} 平差高程 = {elevation:F4} m,中误差 = ±{error:F4} m"); + } + + // 示例:输出观测改正数 + foreach (var obsResult in result.ObservationResults) + { + LogService.AddLog( + $"第{obsResult.Index}段 {obsResult.FromPoint}->{obsResult.ToPoint}:" + + $"v = {obsResult.Residual:F6},平差后高差 = {obsResult.AdjustedHeightDiff:F6}"); + } + } + catch (Exception ex) + { + MessageBox.Show("平差失败:" + ex.Message); + LogService.AddLog("平差失败:" + ex.Message); + } } private void 查看结果ToolStripMenuItem_Click(object sender, EventArgs e) @@ -106,5 +138,94 @@ namespace kcsj.Forms MessageBoxButtons.OK, MessageBoxIcon.Information); } + + private void btnStartAdjust_Click(object sender, EventArgs e) + { + try + { + if (!DataStore.HasData) + { + MessageBox.Show("请先导入或输入已知点和观测数据。"); + return; + } + + LeastSquaresResult result = + LeastSquaresAdjustmentService.Adjust( + DataStore.KnownPoints, + DataStore.Observations); + + MessageBox.Show("间接平差计算完成。"); + + // 示例:把未知点结果输出到日志 + foreach (var item in result.UnknownElevations) + { + string pointName = item.Key; + double elevation = item.Value; + double error = result.UnknownElevationErrors[pointName]; + + LogService.AddLog( + $"{pointName} 平差高程 = {elevation:F4} m,中误差 = ±{error:F4} m"); + } + + // 示例:输出观测改正数 + foreach (var obsResult in result.ObservationResults) + { + LogService.AddLog( + $"第{obsResult.Index}段 {obsResult.FromPoint}->{obsResult.ToPoint}:" + + $"v = {obsResult.Residual:F6},平差后高差 = {obsResult.AdjustedHeightDiff:F6}"); + } + } + catch (Exception ex) + { + MessageBox.Show("平差失败:" + ex.Message); + LogService.AddLog("平差失败:" + ex.Message); + } + } + + private void 删除当前数据ToolStripMenuItem_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show( + "确定要清空当前数据吗?", + "二次确认", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning + ); + + if (result == DialogResult.Yes) + { + DataStore.Clear(); + LogService.AddLog("当前数据已清空"); + } + else + { + this.Close(); + LogService.AddLog("用户取消清空数据"); + } + } + + private void 数据检查ToolStripMenuItem_Click(object sender, EventArgs e) + { + DataCheckResult result = DataCheck.Check(DataStore.KnownPoints, DataStore.Observations); + + LogService.AddLog(result.ToLogText()); + LogService.AddLog(Environment.NewLine); + + if (!result.IsValid) + { + MessageBox.Show( + "数据检查未通过,请查看日志信息。", + "数据检查", + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + + return; + } + + MessageBox.Show( + "数据检查通过,可以进行平差计算。", + "数据检查", + MessageBoxButtons.OK, + MessageBoxIcon.Information); + } } } diff --git a/Services/Adjustment.cs b/Services/Adjustment.cs new file mode 100644 index 0000000..b16a43d --- /dev/null +++ b/Services/Adjustment.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace kcsj.Services +{ + public class Adjustment + { + + } +} diff --git a/Services/Report.cs b/Services/Report.cs new file mode 100644 index 0000000..7f20eb6 --- /dev/null +++ b/Services/Report.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace kcsj.Services +{ + internal class Report + { + } +}