平差逻辑编写

This commit is contained in:
2026-06-16 12:36:56 +08:00 Unverified
parent a44a29e853
commit 7767d52bb9
4 changed files with 159 additions and 10 deletions
+6 -3
View File
@@ -92,6 +92,7 @@
btnStartAdjust.TabIndex = 3; btnStartAdjust.TabIndex = 3;
btnStartAdjust.Text = "开始平差"; btnStartAdjust.Text = "开始平差";
btnStartAdjust.UseVisualStyleBackColor = true; btnStartAdjust.UseVisualStyleBackColor = true;
btnStartAdjust.Click += btnStartAdjust_Click;
// //
// button2 // button2
// //
@@ -161,7 +162,7 @@
// //
ToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ToolStripMenuItem, ToolStripMenuItem }); ToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ToolStripMenuItem, ToolStripMenuItem });
ToolStripMenuItem.Name = "数据输入ToolStripMenuItem"; ToolStripMenuItem.Name = "数据输入ToolStripMenuItem";
ToolStripMenuItem.Size = new Size(218, 34); ToolStripMenuItem.Size = new Size(270, 34);
ToolStripMenuItem.Text = "数据输入"; ToolStripMenuItem.Text = "数据输入";
// //
// 从文件ToolStripMenuItem // 从文件ToolStripMenuItem
@@ -181,14 +182,16 @@
// 删除当前数据ToolStripMenuItem // 删除当前数据ToolStripMenuItem
// //
ToolStripMenuItem.Name = "删除当前数据ToolStripMenuItem"; ToolStripMenuItem.Name = "删除当前数据ToolStripMenuItem";
ToolStripMenuItem.Size = new Size(218, 34); ToolStripMenuItem.Size = new Size(270, 34);
ToolStripMenuItem.Text = "删除当前数据"; ToolStripMenuItem.Text = "删除当前数据";
ToolStripMenuItem.Click += ToolStripMenuItem_Click;
// //
// 数据检查ToolStripMenuItem // 数据检查ToolStripMenuItem
// //
ToolStripMenuItem.Name = "数据检查ToolStripMenuItem"; ToolStripMenuItem.Name = "数据检查ToolStripMenuItem";
ToolStripMenuItem.Size = new Size(218, 34); ToolStripMenuItem.Size = new Size(270, 34);
ToolStripMenuItem.Text = "数据检查"; ToolStripMenuItem.Text = "数据检查";
ToolStripMenuItem.Click += ToolStripMenuItem_Click;
// //
// 开始平差ToolStripMenuItem // 开始平差ToolStripMenuItem
// //
+128 -7
View File
@@ -46,13 +46,7 @@ namespace kcsj.Forms
private void ToolStripMenuItem_Click(object sender, EventArgs e) private void ToolStripMenuItem_Click(object sender, EventArgs e)
{ {
FileInputForm form = new FileInputForm(); FileInputForm form = new FileInputForm();
form.ShowDialog();
if (form.ShowDialog() == DialogResult.OK)
{
LogService.AddLog("主窗体已接收文件导入数据。");
LogService.AddLog($"已知点数量:{DataStore.KnownPoints.Count}");
LogService.AddLog($"观测数据数量:{DataStore.Observations.Count}");
}
} }
private void ToolStripMenuItem_Click(object sender, EventArgs e) private void ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -69,7 +63,45 @@ namespace kcsj.Forms
private void ToolStripMenuItem_Click(object sender, EventArgs e) 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) private void ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -106,5 +138,94 @@ namespace kcsj.Forms
MessageBoxButtons.OK, MessageBoxButtons.OK,
MessageBoxIcon.Information); 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);
}
} }
} }
+13
View File
@@ -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
{
}
}
+12
View File
@@ -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
{
}
}