232 lines
7.2 KiB
C#
232 lines
7.2 KiB
C#
using kcsj.Models;
|
||
using kcsj.Services;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
|
||
namespace kcsj.Forms
|
||
{
|
||
public partial class MainForm : Form
|
||
{
|
||
|
||
public MainForm()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
private void btnDataInput_Click(object sender, EventArgs e)
|
||
{
|
||
DataInputForm form = new DataInputForm();
|
||
form.ShowDialog();
|
||
}
|
||
|
||
private void MainForm_Load(object sender, EventArgs e)
|
||
{
|
||
LogService.OnLog += ShowLog;
|
||
|
||
LogService.AddLog("程序启动成功。");
|
||
}
|
||
private void ShowLog(string message)
|
||
{
|
||
LOG.AppendText(message + "\r\n");
|
||
LOG.ScrollToCaret();
|
||
}
|
||
|
||
private void ClearLog_Click(object sender, EventArgs e)
|
||
{
|
||
LOG.Clear();
|
||
}
|
||
|
||
private void 从文件ToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
FileInputForm form = new FileInputForm();
|
||
form.ShowDialog();
|
||
}
|
||
|
||
private void 手动输入ToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
ManualInputForm form = new ManualInputForm();
|
||
|
||
form.ShowDialog();
|
||
}
|
||
|
||
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)
|
||
{
|
||
|
||
}
|
||
|
||
private void btnDataInspect_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);
|
||
}
|
||
|
||
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);
|
||
}
|
||
}
|
||
}
|