|
|
|
|
using Aspose.Cells;
|
|
|
|
|
using log4net;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Converters;
|
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
using SciColorMaps.Portable;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
using Txgy.EWS.Client.FocalMechanism.Core;
|
|
|
|
|
using Txgy.EWS.Client.FocalMechanism.Model;
|
|
|
|
|
using Txgy.EWS.Client.Models;
|
|
|
|
|
using Txgy.Microseismic.BaseLib.Models;
|
|
|
|
|
using WW.Cad.Base;
|
|
|
|
|
using FmGrid = Txgy.EWS.Client.FocalMechanism.Model.FmGrid;
|
|
|
|
|
using FMStation = Txgy.EWS.Client.FocalMechanism.Model.FMStation;
|
|
|
|
|
|
|
|
|
|
namespace Txgy.EWS.Client.Common
|
|
|
|
|
{
|
|
|
|
|
public class GlobalConfig
|
|
|
|
|
{
|
|
|
|
|
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
|
|
|
|
|
public static bool IsDesign = false;
|
|
|
|
|
public static DateTime DStartTime = new DateTime(2022, 9, 1, 16, 28, 0);
|
|
|
|
|
public static int DRefreshInterval = 1;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设备整体灵敏度
|
|
|
|
|
/// </summary>
|
|
|
|
|
public const double KW = 833760427.0;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 波形截取长度(点数)
|
|
|
|
|
/// </summary>
|
|
|
|
|
public const int WaveCutLen = 1000;
|
|
|
|
|
public static string timeFormatStr = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFF";
|
|
|
|
|
public static ProjectConfigModel ProjectConfig { get; set; }
|
|
|
|
|
public static FocalMechanism.Model.FmGrid fmGrid { get; set; }
|
|
|
|
|
public static int StationCount;
|
|
|
|
|
public static double BaseX, BaseY,BaseZ;
|
|
|
|
|
public static List<string> DwgLayersDisplay = new List<string>();
|
|
|
|
|
//public static List<Color> eventDepthColor = new List<Color>();
|
|
|
|
|
|
|
|
|
|
public static bool IsRealtime;
|
|
|
|
|
public static string UseResultTable;
|
|
|
|
|
public static string UseWaveDataTable;
|
|
|
|
|
public static string UseFocalMechanismTable;
|
|
|
|
|
public static string DataTypeString;
|
|
|
|
|
public static string EventIDColName;
|
|
|
|
|
|
|
|
|
|
public static Color[] eventDepthColor;
|
|
|
|
|
public static string ColorPalette = "plasma";
|
|
|
|
|
public static int ColorCountDefault = 256;
|
|
|
|
|
public static double eventDSize = 1;
|
|
|
|
|
|
|
|
|
|
public static ProcessCore fmCore;
|
|
|
|
|
public static Factory fmFactory;
|
|
|
|
|
private static ObservableCollection<CadLayerModel> cadLayerConfigs = new ObservableCollection<CadLayerModel>();
|
|
|
|
|
|
|
|
|
|
public static ObservableCollection<CadLayerModel> CadLayerConfigs
|
|
|
|
|
{
|
|
|
|
|
get { return cadLayerConfigs; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
cadLayerConfigs = value;
|
|
|
|
|
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("CadLayerConfigs"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private static string _systemNameCN;
|
|
|
|
|
public static string SystemNameCN
|
|
|
|
|
{
|
|
|
|
|
get { return _systemNameCN; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_systemNameCN = value;
|
|
|
|
|
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("SystemNameCN"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private static string _systemNameEN;
|
|
|
|
|
|
|
|
|
|
public static string SystemNameEN
|
|
|
|
|
{
|
|
|
|
|
get { return _systemNameEN; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_systemNameEN = value;
|
|
|
|
|
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("SystemNameEN"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static string _commpanyName;
|
|
|
|
|
|
|
|
|
|
public static string CommpanyName
|
|
|
|
|
{
|
|
|
|
|
get { return _commpanyName; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_commpanyName = value;
|
|
|
|
|
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("CommpanyName"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private static string _workAreaName;
|
|
|
|
|
|
|
|
|
|
public static string WorkAreaName
|
|
|
|
|
{
|
|
|
|
|
get { return _workAreaName; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_workAreaName = value;
|
|
|
|
|
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("WorkAreaName"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private static string _systemShortName;
|
|
|
|
|
|
|
|
|
|
public static string SystemShortName
|
|
|
|
|
{
|
|
|
|
|
get { return _systemShortName; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_systemShortName = value;
|
|
|
|
|
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs("SystemShortName"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public static void ReadConfig()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
string cn = System.Configuration.ConfigurationManager.AppSettings["SystemNameCn"].ToString();
|
|
|
|
|
GlobalConfig.SystemNameCN = System.Configuration.ConfigurationManager.AppSettings["SystemNameCn"].ToString();
|
|
|
|
|
GlobalConfig.SystemNameEN = System.Configuration.ConfigurationManager.AppSettings["SystemNameEn"].ToString();
|
|
|
|
|
GlobalConfig.CommpanyName = System.Configuration.ConfigurationManager.AppSettings["CommpanyName"].ToString();
|
|
|
|
|
GlobalConfig.WorkAreaName = System.Configuration.ConfigurationManager.AppSettings["WorkAreaName"].ToString();
|
|
|
|
|
GlobalConfig.SystemShortName = System.Configuration.ConfigurationManager.AppSettings["SystemShortName"].ToString();
|
|
|
|
|
string jsonText;
|
|
|
|
|
//读取工区配置文件
|
|
|
|
|
using (System.IO.StreamReader sr = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
System.Configuration.ConfigurationManager.AppSettings["WorkAreaFilePath"].ToString()))
|
|
|
|
|
{
|
|
|
|
|
jsonText = sr.ReadToEnd();
|
|
|
|
|
}
|
|
|
|
|
ProjectConfig = JsonConvert.DeserializeObject<ProjectConfigModel>(jsonText);
|
|
|
|
|
|
|
|
|
|
//初始化波形数据、Json文件路径
|
|
|
|
|
InitializationPath();
|
|
|
|
|
|
|
|
|
|
//从app.config内读取X,Y基址
|
|
|
|
|
//BaseX = double.Parse(System.Configuration.ConfigurationManager.AppSettings["BaseX"].ToString());
|
|
|
|
|
//BaseY = double.Parse(System.Configuration.ConfigurationManager.AppSettings["BaseY"].ToString());
|
|
|
|
|
|
|
|
|
|
//从ProjectConfig中读取EMin,NMin作为X,Y基址
|
|
|
|
|
BaseX = ProjectConfig.WorkArea.EMin;
|
|
|
|
|
BaseY = ProjectConfig.WorkArea.NMin;
|
|
|
|
|
BaseZ= double.Parse(System.Configuration.ConfigurationManager.AppSettings["BaseZ"].ToString());
|
|
|
|
|
//读取Cad层配置文件
|
|
|
|
|
//using (System.IO.StreamReader sr = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
// System.Configuration.ConfigurationManager.AppSettings["DwgJsonSetting"].ToString()))
|
|
|
|
|
//{
|
|
|
|
|
// jsonText = sr.ReadToEnd();
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//读取Dwg图层配置文件
|
|
|
|
|
string jsonFile = AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
System.Configuration.ConfigurationManager.AppSettings["DwgJsonSetting"].ToString();
|
|
|
|
|
var jlist = CadLayerModel.CreateFromJson(jsonFile);
|
|
|
|
|
GlobalConfig.CadLayerConfigs = new ObservableCollection<CadLayerModel>(jlist);
|
|
|
|
|
foreach (var item in GlobalConfig.CadLayerConfigs)
|
|
|
|
|
{
|
|
|
|
|
item.SetColor();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取报表事件分级配置文件
|
|
|
|
|
string eventLevelFile= AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
System.Configuration.ConfigurationManager.AppSettings["ReportEventLevelSetting"].ToString();
|
|
|
|
|
var elList = ReportEventLevel.CreateFromJson(eventLevelFile);
|
|
|
|
|
GlobalData.ReportEventLevelList= new ObservableCollection<ReportEventLevel>(elList);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//设置实时监测数据配置文件
|
|
|
|
|
IsRealtime=bool.Parse(System.Configuration.ConfigurationManager.AppSettings["IsRealtime"].ToString());
|
|
|
|
|
if (IsRealtime)
|
|
|
|
|
{
|
|
|
|
|
UseResultTable = System.Configuration.ConfigurationManager.AppSettings["RealtimeResultTable"].ToString();
|
|
|
|
|
UseFocalMechanismTable = System.Configuration.ConfigurationManager.AppSettings["RealtimeFocalmechanismTable"].ToString();
|
|
|
|
|
UseWaveDataTable= System.Configuration.ConfigurationManager.AppSettings["RealtimeWaveDataTable"].ToString();
|
|
|
|
|
DataTypeString = "A";
|
|
|
|
|
EventIDColName = "RTEventID";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
UseResultTable = System.Configuration.ConfigurationManager.AppSettings["PostResultTable"].ToString();
|
|
|
|
|
UseFocalMechanismTable = System.Configuration.ConfigurationManager.AppSettings["PostFocalmechanismTable"].ToString();
|
|
|
|
|
UseWaveDataTable = System.Configuration.ConfigurationManager.AppSettings["PostWaveDataTable"].ToString();
|
|
|
|
|
DataTypeString = "B";
|
|
|
|
|
EventIDColName = "PostEventID";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//从app.config内读取Cad背景图文件
|
|
|
|
|
ProjectConfig.CadFileName = AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
System.Configuration.ConfigurationManager.AppSettings["CadDwgFilePath"].ToString();
|
|
|
|
|
|
|
|
|
|
//从app.config内读取台站列表文件
|
|
|
|
|
ProjectConfig.StationDic = CreateStationFromCSV(AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
System.Configuration.ConfigurationManager.AppSettings["StationsCsvFilePath"].ToString());
|
|
|
|
|
//台站数量
|
|
|
|
|
StationCount = ProjectConfig.StationDic.Count;
|
|
|
|
|
|
|
|
|
|
//创建深度颜色数组
|
|
|
|
|
var colorMap = new ColorMap(ColorPalette, colorCount: ColorCountDefault);
|
|
|
|
|
//var cmap3 = new MirrorColorMap(cmap2);
|
|
|
|
|
eventDepthColor = colorMap.Colors().Select((color) => color.ToMediaColor()).ToArray();
|
|
|
|
|
|
|
|
|
|
//配置震源机制参数
|
|
|
|
|
FocalMechanism.Model.FmGrid fmGrid = CreateFmGrid(GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin,
|
|
|
|
|
GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin, GlobalConfig.ProjectConfig.StationDic);
|
|
|
|
|
GlobalConfig.fmCore = new ProcessCore(fmGrid);
|
|
|
|
|
GlobalConfig.fmFactory = new Factory(fmGrid);
|
|
|
|
|
}
|
|
|
|
|
public static void InitializationPath()
|
|
|
|
|
{
|
|
|
|
|
ProjectConfig.MseedFilePath = System.Configuration.ConfigurationManager.AppSettings["WavesMseedFilePath"].ToString();
|
|
|
|
|
ProjectConfig.TxtFilePath= System.Configuration.ConfigurationManager.AppSettings["WavesTxtFilePath"].ToString();
|
|
|
|
|
if (!Directory.Exists(ProjectConfig.MseedFilePath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(ProjectConfig.MseedFilePath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (File.Exists(ProjectConfig.TxtFilePath))
|
|
|
|
|
{
|
|
|
|
|
// Console.WriteLine(File.GetAttributes(ProjectConfig.CacheFilePath).ToString());
|
|
|
|
|
File.SetAttributes(ProjectConfig.TxtFilePath, FileAttributes.Hidden);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(ProjectConfig.TxtFilePath);
|
|
|
|
|
File.SetAttributes(ProjectConfig.TxtFilePath, FileAttributes.Hidden);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public static void SaveConfig()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public static Dictionary<string, StationModel> CreateStationFromCSV(string fn)
|
|
|
|
|
{
|
|
|
|
|
Dictionary<string, StationModel> stations = new Dictionary<string, StationModel>();
|
|
|
|
|
Aspose.Cells.TxtLoadOptions lo = new TxtLoadOptions();
|
|
|
|
|
lo.Encoding = Encoding.Default;//设置编码方式
|
|
|
|
|
Workbook workbook = new Workbook(fn, lo);
|
|
|
|
|
|
|
|
|
|
//配置读取文件的类型(CSV)
|
|
|
|
|
workbook.FileFormat = FileFormatType.CSV;//可在此配置Excel文件类型
|
|
|
|
|
Worksheet worksheet = workbook.Worksheets[0];//默认第一个Sheet页
|
|
|
|
|
|
|
|
|
|
Cells cells = worksheet.Cells;
|
|
|
|
|
|
|
|
|
|
//读取到DataTable中
|
|
|
|
|
DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxColumn + 1, true);
|
|
|
|
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
DataRow row = dt.Rows[i];
|
|
|
|
|
StationModel model = new StationModel();
|
|
|
|
|
model.Name = row[1].ToString();
|
|
|
|
|
model.E = double.Parse(row[2].ToString());
|
|
|
|
|
model.N = double.Parse(row[3].ToString());
|
|
|
|
|
model.Z = double.Parse(row[4].ToString());
|
|
|
|
|
model.Sens = double.Parse(row[5].ToString());
|
|
|
|
|
model.BeginUseTime = DateTime.Parse(row[6].ToString());
|
|
|
|
|
model.StopUseTime = DateTime.Parse(row[7].ToString());
|
|
|
|
|
stations.Add(model.Name, model);
|
|
|
|
|
}
|
|
|
|
|
//释放资源
|
|
|
|
|
workbook = null;
|
|
|
|
|
worksheet = null;
|
|
|
|
|
return stations;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static FmGrid CreateFmGrid(ProjectConfigModel projectConfigModel)
|
|
|
|
|
{
|
|
|
|
|
FmGrid fg = new FmGrid();
|
|
|
|
|
fg.xmax = projectConfigModel.WorkArea.EMax - projectConfigModel.WorkArea.EMin;
|
|
|
|
|
fg.ymax = projectConfigModel.WorkArea.NMax - projectConfigModel.WorkArea.NMin;
|
|
|
|
|
fg.xmin = 0;
|
|
|
|
|
fg.ymin = 0;
|
|
|
|
|
fg.StationCount = projectConfigModel.StationDic.Count;
|
|
|
|
|
fg.StationList = new List<FMStation>();
|
|
|
|
|
int sc = 0;
|
|
|
|
|
foreach (var item in projectConfigModel.StationDic)
|
|
|
|
|
{
|
|
|
|
|
fg.StationList.Add(new FMStation(sc, item.Key, item.Value.E - projectConfigModel.WorkArea.EMin,
|
|
|
|
|
item.Value.N - projectConfigModel.WorkArea.NMin));
|
|
|
|
|
fg.StationList.Add(new FMStation(sc, item.Key, item.Value.E, item.Value.N));
|
|
|
|
|
sc++;
|
|
|
|
|
}
|
|
|
|
|
fg.initZeroCenter();
|
|
|
|
|
fg.computeDistance();
|
|
|
|
|
return fg;
|
|
|
|
|
}
|
|
|
|
|
public static List<string> ReadDwgLayerDisplay()
|
|
|
|
|
{
|
|
|
|
|
List<string> lds= new List<string>();
|
|
|
|
|
string filePath = AppDomain.CurrentDomain.BaseDirectory +
|
|
|
|
|
System.Configuration.ConfigurationManager.AppSettings["DwgSettings"].ToString();
|
|
|
|
|
string[] rows;
|
|
|
|
|
using (StreamReader sr=new StreamReader(filePath))
|
|
|
|
|
{
|
|
|
|
|
rows = sr.ReadToEnd().Trim().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 1; i < rows.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
lds.Add(rows[i].Trim('\r'));
|
|
|
|
|
}
|
|
|
|
|
return lds;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static FocalMechanism.Model.FmGrid CreateFmGrid(double XMax, double YMax, Dictionary<string, StationModel> StationDic)
|
|
|
|
|
{
|
|
|
|
|
FocalMechanism.Model.FmGrid fmGrid = new FocalMechanism.Model.FmGrid();
|
|
|
|
|
fmGrid.xmin = 0;
|
|
|
|
|
fmGrid.xmax = XMax;
|
|
|
|
|
fmGrid.ymin = 0;
|
|
|
|
|
fmGrid.ymax = YMax;
|
|
|
|
|
fmGrid.StationCount = StationDic.Count;
|
|
|
|
|
fmGrid.StationList = new List<FocalMechanism.Model.FMStation>();
|
|
|
|
|
int sc = 0;
|
|
|
|
|
foreach (var item in StationDic)
|
|
|
|
|
{
|
|
|
|
|
fmGrid.StationList.Add(new FocalMechanism.Model.FMStation(sc, item.Key, item.Value.E - GlobalConfig.ProjectConfig.WorkArea.EMin,
|
|
|
|
|
item.Value.N - GlobalConfig.ProjectConfig.WorkArea.NMin));
|
|
|
|
|
sc++;
|
|
|
|
|
}
|
|
|
|
|
fmGrid.initZeroCenter();
|
|
|
|
|
fmGrid.computeDistance();
|
|
|
|
|
|
|
|
|
|
return fmGrid;
|
|
|
|
|
}
|
|
|
|
|
public static class LogObject
|
|
|
|
|
{
|
|
|
|
|
public static ILog Log(string LoggerName)
|
|
|
|
|
{ //log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
|
return LogManager.GetLogger(LoggerName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public static void WriteLog(string exp = null, string loggerName = "InfoLogger")
|
|
|
|
|
{
|
|
|
|
|
//新建的一个静态类
|
|
|
|
|
LogObject.Log(loggerName).Info(exp);
|
|
|
|
|
LogObject.Log(loggerName).Error(exp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public static class ColorUtils
|
|
|
|
|
{
|
|
|
|
|
public static Color ToMediaColor(this byte[] rgb)
|
|
|
|
|
{
|
|
|
|
|
return Color.FromRgb(rgb[0], rgb[1], rgb[2]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|