You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
13 KiB
C#
276 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.Threading.Tasks;
|
|
using System.IO;
|
|
using Txgy.EWS.Client.FocalMechanism.Model;
|
|
using Txgy.Microseismic.BaseLib.Models;
|
|
using FmGrid = Txgy.EWS.Client.FocalMechanism.Model.FmGrid;
|
|
|
|
namespace Txgy.EWS.Client.FocalMechanism.Core
|
|
{
|
|
public class ProcessCore
|
|
{
|
|
public Model.FmGrid grid { get; set; }
|
|
public delegate void dshowProgress(int current, int total);
|
|
public event dshowProgress OnShowProgress;
|
|
public ProcessCore(FmGrid g)
|
|
{
|
|
grid = g;
|
|
//canvas = new CanvasFactory(grid);
|
|
}
|
|
|
|
public ComputationResult ComputeResult(FMMap map)
|
|
{
|
|
//check null point
|
|
for (int j = 0; j < map.posStation.Count; j++)
|
|
{
|
|
int fj = grid.StationList.ToList<Model.FMStation>().FindIndex(fi => fi.Name==map.posStation[j]);
|
|
if (fj == -1)
|
|
{
|
|
map.posStation.RemoveAt(j);
|
|
j--;
|
|
}
|
|
}
|
|
for (int j = 0; j < map.negStation.Count; j++)
|
|
{
|
|
int fj = grid.StationList.ToList<Model.FMStation>().FindIndex(fi => fi.Name == map.negStation[j]);
|
|
if (fj == -1)
|
|
{
|
|
map.negStation.RemoveAt(j);
|
|
j--;
|
|
}
|
|
}
|
|
|
|
//识别震源机制性质
|
|
if (map.posStation.Count != 0 || map.negStation.Count != 0)
|
|
{
|
|
LineFactory lf = new LineFactory(this.grid);
|
|
|
|
//判断是否为走滑
|
|
ComputationResult l = lf.generateResult(map);
|
|
if (l != null)
|
|
{
|
|
return l;
|
|
}
|
|
//判断是否为倾滑
|
|
CrossLineFactory cf = new CrossLineFactory(this.grid);
|
|
ComputationResult c = cf.generateResult(map);
|
|
if (c != null)
|
|
{
|
|
return c;
|
|
}
|
|
//判断是否为张性
|
|
PolygonFactory pf = new PolygonFactory(this.grid);
|
|
ComputationResult poly = pf.generateResult(map);
|
|
if (poly != null)
|
|
{
|
|
return poly;
|
|
}
|
|
}
|
|
//无法识别返回张性震源,NE45
|
|
ComputationResult polyUnknown = new ComputationResult();
|
|
polyUnknown.Direction = 0;
|
|
polyUnknown.FocalType = FocalMechanismType.unknown;
|
|
map.T = FocalMechanismType.unknown;
|
|
return polyUnknown;
|
|
|
|
}
|
|
public BatchOutputResult BatchOutputForTxt(string path, string prefix, int start, int end, List<FMMap> maps)
|
|
{
|
|
//ExcelEdit editor = new ExcelEdit();
|
|
BatchOutputResult re = new BatchOutputResult();
|
|
//Microsoft.Office.Interop.Excel.Worksheet ws = null;
|
|
//Microsoft.Office.Interop.Excel.Worksheet wsUnhandled = null;
|
|
StreamWriter sw;
|
|
string waveTypeStr = "";
|
|
//try
|
|
{
|
|
sw = new StreamWriter(path + "\\" + prefix + "震源机制数据.txt", false, Encoding.Default);
|
|
sw.WriteLine("序号\t裂缝性质\t裂缝走向");
|
|
|
|
//path = path + "\\" + prefix;
|
|
//if (!Directory.Exists(path))
|
|
//{
|
|
// Directory.CreateDirectory(path);
|
|
//}
|
|
//editor.Create();
|
|
//ws = editor.GetSheet("Sheet1");
|
|
//wsUnhandled = editor.AddSheet("Final Result");
|
|
//editor.SetCellValue(ws, 1, 1, "序号");
|
|
//editor.SetCellValue(ws, 1, 2, "裂缝性质");
|
|
//editor.SetCellValue(ws, 1, 3, "裂缝走向");
|
|
//editor.SetCellValue(ws, 1, 4, "倾滑方向");
|
|
//editor.SetCellValue(ws, 1, 5, "X");
|
|
//editor.SetCellValue(ws, 1, 6, "Y");
|
|
//editor.SetCellValue(ws, 1, 7, "R");
|
|
for (int i = start; i <= end; i++)
|
|
{
|
|
if (i==28)
|
|
{
|
|
Console.WriteLine(1);
|
|
}
|
|
ComputationResult r = this.ComputeResult(maps[i]);
|
|
//r.bmp.Save(path + "\\" + prefix + "_" + (i + 1) + ".png", ImageFormat.Png);
|
|
//editor.SetCellValue(ws, i - start + 2, 1, i + 1);
|
|
//editor.SetCellValue(ws, i - start + 2, 5, maps[i].X);
|
|
//editor.SetCellValue(ws, i - start + 2, 6, maps[i].Y);
|
|
//editor.SetCellValue(ws, i - start + 2, 7, maps[i].R);
|
|
switch (r.FocalType)
|
|
{
|
|
case FocalMechanismType.dipSlip:
|
|
waveTypeStr = "倾滑";
|
|
//editor.SetCellValue(ws, i - start + 2, 2, "倾滑");
|
|
re.dipSlipCount++;
|
|
//if (r.angle < 90) editor.SetCellValue(ws, i - start + 2, 4, "NW" + r.angle);
|
|
//else editor.SetCellValue(ws, i - start + 2, 4, "NE" + (180 - r.angle));
|
|
|
|
break;
|
|
case FocalMechanismType.strikeSlip:
|
|
waveTypeStr = "走滑";
|
|
//editor.SetCellValue(ws, i - start + 2, 2, "走滑");
|
|
re.strikeSlipCount++;
|
|
break;
|
|
case FocalMechanismType.tensile:
|
|
waveTypeStr = "张性";
|
|
//editor.SetCellValue(ws, i - start + 2, 2, "张性");
|
|
re.tensileCount++;
|
|
break;
|
|
default:
|
|
waveTypeStr = "无法识别";
|
|
//editor.SetCellValue(ws, i - start + 2, 2, "张性");
|
|
re.unknownCount++;
|
|
//editor.SetCellValue(wsUnhandled, 4 + re.unknownCount, 1, i+1);
|
|
//re.unknownCount++;
|
|
continue;
|
|
}
|
|
//if (r.angle < 90) editor.SetCellValue(ws, i - start + 2, 3, "NE" + (90 - r.angle));
|
|
//else editor.SetCellValue(ws, i - start + 2, 3, "NW" + (r.angle - 90));
|
|
|
|
sw.WriteLine((i + 1).ToString() + "\t" + waveTypeStr + "\t" + ((int)r.FocalType).ToString() + "\t" + r.Direction.ToString());
|
|
if (OnShowProgress != null) this.OnShowProgress(i - start + 1, end - start + 1);
|
|
}
|
|
sw.Close();
|
|
sw.Dispose();
|
|
|
|
//editor.SetCellValue(wsUnhandled, 1, 1, "走滑");
|
|
//editor.SetCellValue(wsUnhandled, 1, 2, "倾滑");
|
|
//editor.SetCellValue(wsUnhandled, 1, 3, "张性");
|
|
//editor.SetCellValue(wsUnhandled, 1, 4, "未处理");
|
|
//editor.SetCellValue(wsUnhandled, 3, 1, "未处理:");
|
|
//editor.SetCellValue(wsUnhandled, 2, 1, re.strikeSlipCount);
|
|
//editor.SetCellValue(wsUnhandled, 2, 2, re.dipSlipCount);
|
|
//editor.SetCellValue(wsUnhandled, 2, 3, re.tensileCount);
|
|
//editor.SetCellValue(wsUnhandled, 2, 4, re.unknownCount);
|
|
//editor.SaveAs(path + "\\" + prefix + "_Final");
|
|
}
|
|
//finally
|
|
//{
|
|
// //editor.Close();
|
|
//}
|
|
return re;
|
|
}
|
|
/// <summary>
|
|
/// 导出到Excel
|
|
/// </summary>
|
|
/// <param name="path"></param>
|
|
/// <param name="prefix"></param>
|
|
/// <param name="start"></param>
|
|
/// <param name="end"></param>
|
|
/// <param name="maps"></param>
|
|
/// <returns></returns>
|
|
public BatchOutputResult BatchOutputForExcel(string path, string prefix, int start, int end, List<FMMap> maps)
|
|
{
|
|
BatchOutputResult re = new BatchOutputResult();
|
|
//ExcelEdit editor = new ExcelEdit();
|
|
//Microsoft.Office.Interop.Excel.Worksheet ws = null;
|
|
//Microsoft.Office.Interop.Excel.Worksheet wsUnhandled = null;
|
|
//StreamWriter sw;
|
|
//string waveTypeStr = "";
|
|
//try
|
|
//{
|
|
// sw = new StreamWriter(path + "\\" + prefix + "震源机制数据.txt", false, Encoding.Default);
|
|
// sw.WriteLine("序号\t裂缝性质\t裂缝走向");
|
|
|
|
// path = path + "\\" + prefix;
|
|
// if (!Directory.Exists(path))
|
|
// {
|
|
// Directory.CreateDirectory(path);
|
|
// }
|
|
// editor.Create();
|
|
// ws = editor.GetSheet("Sheet1");
|
|
// wsUnhandled = editor.AddSheet("Final Result");
|
|
// editor.SetCellValue(ws, 1, 1, "序号");
|
|
// editor.SetCellValue(ws, 1, 2, "裂缝性质");
|
|
// editor.SetCellValue(ws, 1, 3, "裂缝走向");
|
|
// editor.SetCellValue(ws, 1, 4, "倾滑方向");
|
|
// editor.SetCellValue(ws, 1, 5, "X");
|
|
// editor.SetCellValue(ws, 1, 6, "Y");
|
|
// editor.SetCellValue(ws, 1, 7, "R");
|
|
// for (int i = start; i <= end; i++)
|
|
// {
|
|
// ComputationResult r = this.ComputeResult(maps[i]);
|
|
// r.bmp.Save(path + "\\" + prefix + "_" + (i + 1) + ".png", ImageFormat.Png);
|
|
// editor.SetCellValue(ws, i - start + 2, 1, i + 1);
|
|
// editor.SetCellValue(ws, i - start + 2, 5, maps[i].X);
|
|
// editor.SetCellValue(ws, i - start + 2, 6, maps[i].Y);
|
|
// editor.SetCellValue(ws, i - start + 2, 7, maps[i].R);
|
|
// switch (r.type)
|
|
// {
|
|
// case WaveType.dipSlip:
|
|
// waveTypeStr = "倾滑";
|
|
// editor.SetCellValue(ws, i - start + 2, 2, "倾滑");
|
|
// re.dipSlipCount++;
|
|
// if (r.angle < 90) editor.SetCellValue(ws, i - start + 2, 4, "NW" + r.angle);
|
|
// else editor.SetCellValue(ws, i - start + 2, 4, "NE" + (180 - r.angle));
|
|
|
|
// break;
|
|
// case WaveType.strikeSlip:
|
|
// waveTypeStr = "走滑";
|
|
// editor.SetCellValue(ws, i - start + 2, 2, "走滑");
|
|
// re.strikeSlipCount++;
|
|
// break;
|
|
// case WaveType.tensile:
|
|
// waveTypeStr = "张性";
|
|
// editor.SetCellValue(ws, i - start + 2, 2, "张性");
|
|
// re.tensileCount++;
|
|
// break;
|
|
// default:
|
|
// waveTypeStr = "张性";
|
|
// editor.SetCellValue(ws, i - start + 2, 2, "张性");
|
|
// re.tensileCount++;
|
|
// //editor.SetCellValue(wsUnhandled, 4 + re.unknownCount, 1, i+1);
|
|
// //re.unknownCount++;
|
|
// continue;
|
|
// }
|
|
// if (r.angle < 90) editor.SetCellValue(ws, i - start + 2, 3, "NE" + (90 - r.angle));
|
|
// else editor.SetCellValue(ws, i - start + 2, 3, "NW" + (r.angle - 90));
|
|
|
|
// sw.WriteLine((i + 1).ToString() + "\t"+waveTypeStr+"\t" + r.angle.ToString());
|
|
// if(OnShowProgress!=null) this.OnShowProgress(i - start + 1, end - start + 1);
|
|
// }
|
|
// sw.Close();
|
|
// sw.Dispose();
|
|
|
|
// editor.SetCellValue(wsUnhandled, 1, 1, "走滑");
|
|
// editor.SetCellValue(wsUnhandled, 1, 2, "倾滑");
|
|
// editor.SetCellValue(wsUnhandled, 1, 3, "张性");
|
|
// editor.SetCellValue(wsUnhandled, 1, 4, "未处理");
|
|
// editor.SetCellValue(wsUnhandled, 3, 1, "未处理:");
|
|
// editor.SetCellValue(wsUnhandled, 2, 1, re.strikeSlipCount);
|
|
// editor.SetCellValue(wsUnhandled, 2, 2, re.dipSlipCount);
|
|
// editor.SetCellValue(wsUnhandled, 2, 3, re.tensileCount);
|
|
// editor.SetCellValue(wsUnhandled, 2, 4, re.unknownCount);
|
|
// editor.SaveAs(path + "\\" + prefix + "_Final");
|
|
//}
|
|
//finally
|
|
//{
|
|
// editor.Close();
|
|
//}
|
|
return re;
|
|
}
|
|
}
|
|
}
|