读取多个文件

master
gekoukate 1 year ago
parent 385c645823
commit 5f42163a8c

@ -12,97 +12,13 @@ namespace mseedChart.MainModule.Models
{ {
public class MmEvent : CoordBase public class MmEvent : CoordBase
{ {
private bool isShow;
public int MoniID = 0;
public int LayerID = 0;
public int EventID = 0;
private int _second;
private int _milliSecond;
private DateTime _eventTime; private DateTime _eventTime;
private double _horiError;
private double _vertError;
private double _cnt;
private double _ml; private double _ml;
private double _rms; private double _rms;
private Dictionary<string, int> _phases;
public float[] standData;
public float[][] nearData;
public float minTimeDiff = 0f;
public bool Falcone = false;
public float errorCircularRadius = 0f;
public float errorH = 0f;
public int isShowed = 1;
public float Hlen = 0f;
public float Llen = 0f;
public float VF = 0f;
public List<int> SN = new List<int>();
public List<int> PM = new List<int>();
public List<int> GCS = new List<int>();
public int WorkAreaID { get; set; } = 0;
public bool IsShow
{
get
{
return isShow;
}
set
{
isShow = value;
}
}
public int Second
{
get
{
return _second;
}
set
{
_second = value;
}
}
public int Millisecond
{
get
{
return _milliSecond;
}
set
{
_milliSecond = value;
}
}
public string EventTimeStr { get; set; } public string EventTimeStr { get; set; }
public DateTime EventTime public DateTime EventTime
@ -117,42 +33,6 @@ namespace mseedChart.MainModule.Models
} }
} }
public double HoriError
{
get
{
return _horiError;
}
set
{
_horiError = value;
}
}
public double VertError
{
get
{
return _vertError;
}
set
{
_vertError = value;
}
}
public double Cnt
{
get
{
return _cnt;
}
set
{
_cnt = value;
}
}
public double ML public double ML
{ {
get get
@ -177,6 +57,7 @@ namespace mseedChart.MainModule.Models
} }
} }
private Dictionary<string, int> _phases;
public Dictionary<string, int> Phases public Dictionary<string, int> Phases
{ {
get get
@ -189,167 +70,56 @@ namespace mseedChart.MainModule.Models
} }
} }
public double Stress { get; set; }
public double Energy { get; set; }
public int LocSta { get; set; }
public int MLSta { get; set; }
public string EventTpye { get; set; }
public int SourceChara { get; set; }
public double Direction { get; set; }
public double StressDrop { get; set; }
public double DominantFreq { get; set; } public double DominantFreq { get; set; }
public double MW { get; set; }
public double Amplitude { get; set; }
public double Semiperiod { get; set; }
public double Coda { get; set; }
public string JsonFile { get; set; } public string JsonFile { get; set; }
public string MseedFile { get; set; }
public string AsciiFile { get; set; } public string AsciiFile { get; set; }
public float Amp { get; set; } public static float SetAmp(List<float> amps)
public FocalMechanismType FocalType { get; set; }
public static void SavePos(string fn, List<MmEvent> mMEvents)
{
StreamWriter streamWriter = new StreamWriter(fn);
try
{
if (mMEvents != null && mMEvents.Count > 0)
{
streamWriter.WriteLine(mMEvents.Count.ToString());
List<MmEvent> list = (from o in mMEvents
orderby o.Second, o.Millisecond
select o).ToList();
for (int i = 0; i < list.Count; i++)
{
MmEvent mmEvent = list[i];
streamWriter.WriteLine(Math.Round(mmEvent.X, 1) + "\t" + Math.Round(mmEvent.Y, 1) + "\t" + Math.Round(mmEvent.Z, 1) + "\t" + mmEvent.Second + "." + mmEvent.Millisecond);
}
}
}
catch (Exception)
{
throw;
}
finally
{
streamWriter.Close();
}
}
public static void SaveNewPin(string fn, int layerIndex, List<MmEvent> mMEvents)
{
StreamWriter streamWriter = new StreamWriter(fn);
int num = layerIndex;
int num2 = layerIndex;
try
{
List<MmEvent> list = (from o in mMEvents
orderby o.Second, o.Millisecond
select o).ToList();
for (int i = 0; i < list.Count; i++)
{
MmEvent mmEvent = list[i];
string pMStr = GetPMStr(mmEvent);
streamWriter.WriteLine(Math.Round(mmEvent.X, 1) + "\t" + Math.Round(mmEvent.Y, 1) + "\t" + Math.Round(mmEvent.Z, 1) + "\t" + mmEvent.Second + "." + mmEvent.Millisecond + "\t" + num + "\t" + num2 + "\t" + mmEvent.errorCircularRadius + "\t" + mmEvent.errorH + "\t" + 0 + "\t" + mmEvent.ML + pMStr);
}
streamWriter.Close();
}
catch (Exception)
{
throw;
}
finally
{
streamWriter.Close();
}
}
public static void SaveOldPin(string fn, int layer, List<MmEvent> mMEvents)
{ {
StreamWriter streamWriter = new StreamWriter(fn); amps.Sort();
try return amps[amps.Count / 2];
{
List<MmEvent> list = (from o in mMEvents
orderby o.Second, o.Millisecond
select o).ToList();
for (int i = 0; i < list.Count; i++)
{
MmEvent mmEvent = list[i];
string pMStr = GetPMStr(mmEvent);
streamWriter.WriteLine(layer + "\t" + Math.Round(mmEvent.X, 0) + "\t" + Math.Round(mmEvent.Y, 0) + "\t" + Math.Round(mmEvent.Z, 0) + "\t" + mmEvent.Second + "." + mmEvent.Millisecond + "\t" + mmEvent.ML + "\t" + mmEvent.errorCircularRadius + "\t" + mmEvent.errorH + "\t" + mmEvent.minTimeDiff + pMStr);
}
streamWriter.Close();
}
catch (Exception)
{
throw;
}
finally
{
streamWriter.Close();
}
} }
}
public static string GetPMStr(MmEvent p)
{
string text = "\t";
int[] mpIndex = new int[p.SN.Count];
for (int j = 0; j < mpIndex.Length; j++)
{
mpIndex[j] = p.SN[j];
}
for (int k = 0; k < mpIndex.Length - 1; k++)
{
for (int l = 0; l < mpIndex.Length - 1 - k; l++)
{
if (mpIndex[l] > mpIndex[l + 1])
{
int num = mpIndex[l];
mpIndex[l] = mpIndex[l + 1];
mpIndex[l + 1] = num;
}
}
}
int i;
for (i = 0; i < p.PM.Count; i++)
{
int index = p.SN.FindIndex((int s) => s == mpIndex[i]);
text = ((p.PM.Count - 1 != i) ? (text + p.SN[index] + ":" + p.PM[index] + "\t") : (text + p.SN[index] + ":" + p.PM[index]));
}
return text; public class JsonST
} {
public DateTime otime { get;set;}
public void SetEnergy() public double lon { get; set; }
{ public double lat { get; set; }
Energy = Math.Round(63000.0 * Math.Pow(10.0, 1.47 * ML), 2); public double depth { get; set; }
} public double ml { get; set; }
public double rms { get; set; }
public List<phases> phases { get; set; }
public List<amps> amps { get; set; }
}
public static float SetAmp(List<float> amps) public class phases
{ {
amps.Sort(); public string id { get; set; }
return amps[amps.Count / 2]; public string name { get; set; }
public DateTime atime { get; set; }
public double resi { get; set; }
public double first_motion_direct { get; set; }
public double fmd_semi_period { get; set; }
public double deltaKm { get; set; }
public double disKm { get; set; }
public double model_time { get; set; }
public double weight { get; set; }
public double prob { get; set; }
}
public class amps
{
public string id { get; set; }
public string name { get; set; }
public DateTime atime { get; set; }
public string mag_type { get; set; }
public double mag_value { get; set; }
public double amp { get; set;
} }
} }
} }

@ -37,11 +37,6 @@ namespace mseedChart.MainModule.Models
public List<double> de = new List<double>(); public List<double> de = new List<double>();
public ConcurrentQueue<double> cz = new ConcurrentQueue<double>();
public ConcurrentQueue<double> ce = new ConcurrentQueue<double>();
public ConcurrentQueue<double> cn = new ConcurrentQueue<double>();
public string Name { get; set; } public string Name { get; set; }

@ -72,7 +72,7 @@ namespace mseedChart.MainModule.Models
seriesZ.SamplingFrequency = samplingFrequency; seriesZ.SamplingFrequency = samplingFrequency;
seriesZ.FirstSampleTimeStamp = 1.0 / samplingFrequency; seriesZ.FirstSampleTimeStamp = 1.0 / samplingFrequency;
seriesZ.LineStyle.Width = 1; seriesZ.LineStyle.Width = 0.5;
seriesZ.LineStyle.AntiAliasing = LineAntialias.None; seriesZ.LineStyle.AntiAliasing = LineAntialias.None;
seriesZ.ScrollModePointsKeepLevel = 1; seriesZ.ScrollModePointsKeepLevel = 1;
seriesZ.ScrollingStabilizing = true; seriesZ.ScrollingStabilizing = true;
@ -100,7 +100,7 @@ namespace mseedChart.MainModule.Models
seriesE.SamplingFrequency = samplingFrequency; seriesE.SamplingFrequency = samplingFrequency;
seriesE.FirstSampleTimeStamp = 1.0 / samplingFrequency; seriesE.FirstSampleTimeStamp = 1.0 / samplingFrequency;
seriesE.LineStyle.Width = 1; seriesE.LineStyle.Width = 0.5;
seriesE.LineStyle.AntiAliasing = LineAntialias.None; seriesE.LineStyle.AntiAliasing = LineAntialias.None;
seriesE.ScrollModePointsKeepLevel = 1; seriesE.ScrollModePointsKeepLevel = 1;
seriesE.ScrollingStabilizing = true; seriesE.ScrollingStabilizing = true;
@ -128,7 +128,7 @@ namespace mseedChart.MainModule.Models
seriesN.SamplingFrequency = samplingFrequency; seriesN.SamplingFrequency = samplingFrequency;
seriesN.FirstSampleTimeStamp = 1.0 / samplingFrequency; seriesN.FirstSampleTimeStamp = 1.0 / samplingFrequency;
seriesN.LineStyle.Width = 1; seriesN.LineStyle.Width = 0.5;
seriesN.LineStyle.AntiAliasing = LineAntialias.None; seriesN.LineStyle.AntiAliasing = LineAntialias.None;
seriesN.ScrollModePointsKeepLevel = 1; seriesN.ScrollModePointsKeepLevel = 1;
seriesN.ScrollingStabilizing = true; seriesN.ScrollingStabilizing = true;
@ -176,138 +176,14 @@ namespace mseedChart.MainModule.Models
} }
return new List<AxisY>(); return new List<AxisY>();
} }
public MmEvent Json2MmEvent(string jsonFile)
{ public JsonST mseedJsonResolve(string jsonFile)
using (StreamReader sr = System.IO.File.OpenText(jsonFile))
{
MmEvent mmEvent = new MmEvent();
mmEvent.JsonFile = jsonFile;
string filePath = System.IO.Path.GetDirectoryName(jsonFile);
string fileName = System.IO.Path.GetFileNameWithoutExtension(jsonFile).TrimEnd('B').TrimEnd('A');
string ascName = filePath + "\\" + fileName + ".txt";
mmEvent.AsciiFile = ascName;
JsonTextReader reader = new JsonTextReader(sr);
JArray jArray = (JArray)JToken.ReadFrom(reader);
//解析普通属性和数组混合的Json文件
//数组0是普通属性集合
JObject jobj = (JObject)jArray[0];
string dateStr = jobj["otime"].ToString();
mmEvent.EventTime = DateTime.Parse(dateStr);
mmEvent.EventTimeStr = dateStr;
mmEvent.X = double.Parse(jobj["lon"].ToString());
mmEvent.Y = double.Parse(jobj["lat"].ToString());
mmEvent.Z = double.Parse(jobj["depth"].ToString());
mmEvent.ML = double.Parse(jobj["ml"].ToString());
mmEvent.RMS = double.Parse(jobj["rms"].ToString());
mmEvent.SetEnergy();
mmEvent.DominantFreq = 15;
mmEvent.Phases = new Dictionary<string, int>();
List<double> DominantFreqlist = new List<double>();
JArray phaseArr = JArray.FromObject(jobj["phases"]);
List<double> DominantFreqList = new List<double>();
for (int i = 0; i < phaseArr.Count; i++)
{
if (phaseArr[i]["first_motion_direct"] != null)
{
mmEvent.Phases.Add(phaseArr[i]["id"].ToString().Substring(3, 3),
int.Parse(phaseArr[i]["first_motion_direct"].ToString()));
}
if (phaseArr[i]["fmd_semi_period"] != null)
{
DominantFreqlist.Add(double.Parse(phaseArr[i]["fmd_semi_period"].ToString()));
}
}
if (DominantFreqlist.Count > 0)
{
if (DominantFreqlist.Count > 3)
{
double min = DominantFreqlist.Min();
double max = DominantFreqlist.Max();
DominantFreqlist.Remove(min);
DominantFreqlist.Remove(max);
mmEvent.DominantFreq = DominantFreqlist.Sum() / (double)DominantFreqlist.Count;
}
else
{
mmEvent.DominantFreq = 0;
}
}
return mmEvent;
}
//return null;
}
public MmEvent Json2MmEventWithPara(string jsonFile)
{ {
using (StreamReader sr = System.IO.File.OpenText(jsonFile)) var str = File.ReadAllText(jsonFile);
{ var st = JsonConvert.DeserializeObject<JsonST[]>(str);
MmEvent mmEvent = new MmEvent();
mmEvent.JsonFile = jsonFile;
string filePath = System.IO.Path.GetDirectoryName(jsonFile);
string fileName = System.IO.Path.GetFileNameWithoutExtension(jsonFile).TrimEnd('B').TrimEnd('A');
//fileName=fileName.TrimEnd('B');
//fileName.TrimEnd('A');
string ascName = filePath + "\\" + fileName + ".txt";
mmEvent.AsciiFile = ascName;
JsonTextReader reader = new JsonTextReader(sr);
JArray jArray = (JArray)JToken.ReadFrom(reader);
//解析普通属性和数组混合的Json文件
//数组0是普通属性集合
JObject jobj = (JObject)jArray[0];
string dateStr = jobj["otime"].ToString();
//LocalSqLiteServerAccess localSqLiteServerAccess = new LocalSqLiteServerAccess();
//int selectResult = localSqLiteServerAccess.SelectWithTime(dateStr);
int selectResult = 1;
if (selectResult < 1)
{
return null;
}
else
{
mmEvent.Phases = new Dictionary<string, int>();
List<double> Semiperiodlist = new List<double>();
JArray phaseArr = JArray.FromObject(jobj["phases"]);
List<double> DominantFreqList = new List<double>();
for (int i = 0; i < phaseArr.Count; i++)
{
if (phaseArr[i]["first_motion_direct"] != null)
{
mmEvent.Phases.Add(phaseArr[i]["id"].ToString().Substring(3, 3),
int.Parse(phaseArr[i]["first_motion_direct"].ToString()));
}
if (phaseArr[i]["fmd_semi_period"] != null)
{
Semiperiodlist.Add(double.Parse(phaseArr[i]["fmd_semi_period"].ToString()));
}
}
if (Semiperiodlist.Count > 0)
{
if (Semiperiodlist.Count > 3)
{
double min = Semiperiodlist.Min();
double max = Semiperiodlist.Max();
Semiperiodlist.Remove(min);
Semiperiodlist.Remove(max);
mmEvent.DominantFreq = Semiperiodlist.Sum() / (double)Semiperiodlist.Count;
}
else
{
mmEvent.DominantFreq = 0;
}
}
JArray ampsArr = JArray.FromObject(jobj["amps"]);
List<float> ampsArrList = new List<float>();
for (int i = 0; i < ampsArr.Count; i++)
{
if (ampsArr[i]["amp"] != null)
{
ampsArrList.Add(float.Parse(ampsArr[i]["amp"].ToString()));
}
}
MmEvent.SetAmp(ampsArrList);
return mmEvent;
}
}
}
JsonST jsonST = st[0];
return jsonST;
}
} }
} }

@ -11,10 +11,10 @@ namespace mseedChart.Core
{ {
public const string ContentRegion = "ContentRegion"; public const string ContentRegion = "ContentRegion";
public static string MseedFilePath = @"H:\EwsCache\Mseed"; //AppDomain.CurrentDomain.BaseDirectory + "EwsCache\\Mseed"; public static string MseedFilePath = @"D:\EwsCache\Mseed"; //AppDomain.CurrentDomain.BaseDirectory + "EwsCache\\Mseed";
public static string TxtFilePath = @"H:\EwsCache\Txt";//;AppDomain.CurrentDomain.BaseDirectory + "EwsCache\\Txt"; public static string TxtFilePath = @"D:\EwsCache\Txt";//;AppDomain.CurrentDomain.BaseDirectory + "EwsCache\\Txt";
public static string DataTypeString = "A"; public static string DataTypeString = "A";

@ -9,9 +9,11 @@ using Prism.Events;
using Prism.Mvvm; using Prism.Mvvm;
using SharpDX.DirectWrite; using SharpDX.DirectWrite;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -19,6 +21,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Markup;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Threading; using System.Windows.Threading;
@ -35,8 +38,9 @@ namespace mseedChart.MainModule.ViewModels
CreateChart(); CreateChart();
(Application.Current.MainWindow as System.Windows.Window).Closing += ApplicationClosingDispose; (Application.Current.MainWindow as System.Windows.Window).Closing += ApplicationClosingDispose;
string fileName = "2023-03-31T07:43:15.464036"; string fileName = "2023-03-28T04:53:46.199584";
ShowWave(null,obj:fileName); // fileName = "2023-03-24T04:53:46.199584";
bool multFlies = true;
string eventTimeStr = fileName; string eventTimeStr = fileName;
string datePath = eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2); string datePath = eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2);
string dataFilePath = RegionNames.MseedFilePath + "\\" + datePath + "\\"; string dataFilePath = RegionNames.MseedFilePath + "\\" + datePath + "\\";
@ -44,7 +48,13 @@ namespace mseedChart.MainModule.ViewModels
+ eventTimeStr.Substring(8, 2) + eventTimeStr.Substring(10, 3) + eventTimeStr.Substring(8, 2) + eventTimeStr.Substring(10, 3)
+ eventTimeStr.Substring(14, 2) + eventTimeStr.Substring(17, 2) + ".01" + RegionNames.DataTypeString; + eventTimeStr.Substring(14, 2) + eventTimeStr.Substring(17, 2) + ".01" + RegionNames.DataTypeString;
string jsonStr = ".json"; string jsonStr = ".json";
_wavesModel.Json2MmEvent(dataFilePath+dataFileName+jsonStr); string mseedStr = ".mseed";
string asciiSavePath = RegionNames.TxtFilePath + "\\" + datePath + "\\";
if (!multFlies)
{
_wavesModel.mseedJsonResolve(dataFilePath + dataFileName + jsonStr);
}
ShowWave(dataFilePath + dataFileName + mseedStr, asciiSavePath + dataFileName + ".txt" , multFlies);
} }
#region 字段 #region 字段
@ -57,7 +67,7 @@ namespace mseedChart.MainModule.ViewModels
WavesModel _wavesModel; WavesModel _wavesModel;
private int _lChartCount = 1; private int _lChartCount = 1;
public List<StationModel> smList; public ConcurrentQueue<StationModel> smList;
#endregion #endregion
#region 属性 #region 属性
@ -159,14 +169,14 @@ namespace mseedChart.MainModule.ViewModels
}; };
if (openFileDialog.ShowDialog() == true) if (openFileDialog.ShowDialog() == true)
{ {
ShowWave(openFileDialog.FileName); //ShowWave(openFileDialog.FileName);
} }
} }
#endregion #endregion
public void UpdateWavesFromTxt(string fn) public List<StationModel> UpdateWavesFromTxt(string fn)
{ {
string allStr; string allStr;
smList = new List<StationModel>(); List<StationModel> temSM = new List<StationModel>();
using (StreamReader streamReader = new StreamReader(fn)) using (StreamReader streamReader = new StreamReader(fn))
{ {
allStr = streamReader.ReadToEnd(); allStr = streamReader.ReadToEnd();
@ -187,18 +197,23 @@ namespace mseedChart.MainModule.ViewModels
int channelFlag = 0; int channelFlag = 0;
for (int i = 1; i < strLines.Length; i++) for (int i = 0; i < strLines.Length; i++)
{ {
string row = strLines[i].Trim(); string row = strLines[i].Trim();
if (strLines[i].Contains("HA")) if (strLines[i].Contains("HA"))
{ {
string[] rowStr = strLines[i].Split(','); string[] rowStr = strLines[i].Split(',');
string chnStr1 = rowStr[0].Substring(21, 3); string chnStr1 = rowStr[0].Substring(21, 3);
if (chnStr1 == "SHZ") string stationName = rowStr[0].Substring(14, 3);
if (!temSM.Any(name => name.Name == stationName))
{ {
smList.Add(station);
station = new StationModel(); station = new StationModel();
station.Name = rowStr[0].Substring(14, 3); station.Name = stationName;
temSM.Add(station);
}
if (chnStr1 == "SHZ")
{
channelFlag = 0;//Z channelFlag = 0;//Z
} }
else if (chnStr1 == "SHN") else if (chnStr1 == "SHN")
@ -226,9 +241,10 @@ namespace mseedChart.MainModule.ViewModels
} }
} }
} }
smList.Add(station); // temSM.Add(station);
smList.Reverse(); temSM.Reverse();
} }
return temSM;
} }
public void MSeed2Asc(string filePath, string savePath) public void MSeed2Asc(string filePath, string savePath)
{ {
@ -237,6 +253,7 @@ namespace mseedChart.MainModule.ViewModels
compiler.StartInfo.FileName = "mseed2ascii.exe"; compiler.StartInfo.FileName = "mseed2ascii.exe";
compiler.StartInfo.Arguments = filePath + " -o " + savePath; compiler.StartInfo.Arguments = filePath + " -o " + savePath;
compiler.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; compiler.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
compiler.StartInfo.CreateNoWindow = true;
compiler.Start(); compiler.Start();
compiler.WaitForExit(); compiler.WaitForExit();
} }
@ -274,11 +291,20 @@ namespace mseedChart.MainModule.ViewModels
LChartALL.ViewXY.XAxes[0].AllowScrolling = false; LChartALL.ViewXY.XAxes[0].AllowScrolling = false;
LChartALL.ViewXY.XAxes[0].PanningEnabled = false; LChartALL.ViewXY.XAxes[0].PanningEnabled = false;
LChartALL.ViewXY.XAxes[0].SweepingGap = 0; LChartALL.ViewXY.XAxes[0].SweepingGap = 0;
// LChartALL.ViewXY.XAxes[0].ValueType = AxisValueType.Number; LChartALL.ViewXY.XAxes[0].ValueType = AxisValueType.DateTime;
LChartALL.ViewXY.XAxes[0].AutoFormatLabels = false; LChartALL.ViewXY.XAxes[0].AutoFormatLabels = false;
// LChartALL.ViewXY.XAxes[0].LabelsNumberFormat = "N0"; // LChartALL.ViewXY.XAxes[0].LabelsNumberFormat = "N0";
// LChartALL.ViewXY.XAxes[0].MajorGrid.Pattern = LinePattern.Solid; // LChartALL.ViewXY.XAxes[0].MajorGrid.Pattern = LinePattern.Solid;
LChartALL.ViewXY.XAxes[0].MinorGrid.Visible = false;
LChartALL.ViewXY.XAxes[0].MajorGrid.Pattern = LinePattern.Solid;
//LChartALL.ViewXY.XAxes[0].MinimumDateTime=DateTime.Now;
LChartALL.ViewXY.XAxes[0].AutoDivSpacing = false;
LChartALL.ViewXY.XAxes[0].MinorDivTickStyle.Visible = true;
LChartALL.ViewXY.XAxes[0].KeepDivCountOnRangeChange = true;
LChartALL.ViewXY.XAxes[0].MajorDivCount = 5;
LChartALL.ViewXY.XAxes[0].LabelsTimeFormat = "HH:mm.ss.ffff";
//图表背景颜色 //图表背景颜色
LChartALL.ViewXY.GraphBackground.Color = Colors.White; LChartALL.ViewXY.GraphBackground.Color = Colors.White;
//LChartALL.ViewXY.GraphBackground.GradientFill = GradientFill.Solid; //LChartALL.ViewXY.GraphBackground.GradientFill = GradientFill.Solid;
@ -292,31 +318,54 @@ namespace mseedChart.MainModule.ViewModels
this.ChildContent = GridChart; this.ChildContent = GridChart;
} }
private void ShowWave(string filePath, string obj = "2023-03-29T06:41:21.348") private void ShowWave(string dataFilePath, string asciiSavePath, bool isMultFile = false)
{ {
string EventTimeStr = obj; if (!Directory.Exists(Path.GetDirectoryName(dataFilePath)))
string datePath = EventTimeStr.Substring(0, 4) + EventTimeStr.Substring(5, 2) + EventTimeStr.Substring(8, 2);
string dataFilePath = RegionNames.MseedFilePath + "\\" + datePath + "\\";
string dataFileName = "HA." + EventTimeStr.Substring(0, 4) + EventTimeStr.Substring(5, 2)
+ EventTimeStr.Substring(8, 2) + EventTimeStr.Substring(10, 3)
+ EventTimeStr.Substring(14, 2) + EventTimeStr.Substring(17, 2) + ".01" + RegionNames.DataTypeString;
string mseedStr = ".mseed";
string asciiSavePath = RegionNames.TxtFilePath + "\\" + datePath + "\\" + dataFileName + ".txt";
if (filePath != null) asciiSavePath = filePath;
if (!Directory.Exists(dataFilePath))
{ {
Directory.CreateDirectory(dataFilePath); Directory.CreateDirectory(Path.GetDirectoryName(dataFilePath));
} }
if (!Directory.Exists(Path.GetDirectoryName(asciiSavePath))) if (!Directory.Exists(Path.GetDirectoryName(asciiSavePath)))
{ {
Directory.CreateDirectory(Path.GetDirectoryName(asciiSavePath)); Directory.CreateDirectory(Path.GetDirectoryName(asciiSavePath));
} }
smList = new ConcurrentQueue<StationModel>();
if (!File.Exists(asciiSavePath)) if (isMultFile)
{ {
MSeed2Asc(dataFilePath + dataFileName + mseedStr, asciiSavePath); var filePath = new DirectoryInfo(Path.GetDirectoryName(dataFilePath));
FileInfo[] files = filePath.GetFiles();
//var dic = file.GetDirectories();
var mseedFiles = files.Where(i => i.Extension == ".mseed");
var asciiFiles = new DirectoryInfo(Path.GetDirectoryName(asciiSavePath));
var asciifile = asciiFiles.GetFiles();
if (asciifile.Count()==0)
{
// 并行运算
Stopwatch sw = Stopwatch.StartNew();
Parallel.ForEach(mseedFiles, (item) =>
{
MSeed2Asc(item.FullName, asciiSavePath + Path.GetFileNameWithoutExtension(item.Name));
});
sw.Stop();
Debug.WriteLine("MSeed2Asc解压时间" +sw.Elapsed.TotalSeconds);
}
// 并行运算
Parallel.ForEach(asciiFiles.GetFiles(), (item) =>
{
var list = UpdateWavesFromTxt(item.FullName);
list.ForEach(i => smList.Enqueue(i));
});
} }
UpdateWavesFromTxt(asciiSavePath); else
{
if (!File.Exists(asciiSavePath))
{
MSeed2Asc(dataFilePath, asciiSavePath);
}
var list = UpdateWavesFromTxt(asciiSavePath);
list.ForEach(i => smList.Enqueue(i));
}
_channelCount = smList.Count * 3; _channelCount = smList.Count * 3;
UpdateChart(); UpdateChart();
UpdateChartData(); UpdateChartData();
@ -329,7 +378,7 @@ namespace mseedChart.MainModule.ViewModels
DisposeAllAndClear(LChartALL.ViewXY.YAxes); DisposeAllAndClear(LChartALL.ViewXY.YAxes);
DisposeAllAndClear(LChartALL.ViewXY.SampleDataSeries); DisposeAllAndClear(LChartALL.ViewXY.SampleDataSeries);
LChartALL.ViewXY.YAxes.AddRange(_wavesModel.CreateYAxisChart(smList, LChartALL)); LChartALL.ViewXY.YAxes.AddRange(_wavesModel.CreateYAxisChart(smList.ToList(), LChartALL));
int seriesIndex = 0; int seriesIndex = 0;
foreach (var axisY in LChartALL.ViewXY.YAxes) foreach (var axisY in LChartALL.ViewXY.YAxes)
{ {
@ -378,7 +427,7 @@ namespace mseedChart.MainModule.ViewModels
LChartALL.ViewXY.XAxes[0].LabelsColor = Colors.Black; LChartALL.ViewXY.XAxes[0].LabelsColor = Colors.Black;
LChartALL.ViewXY.SampleDataSeries.AddRange( LChartALL.ViewXY.SampleDataSeries.AddRange(
_wavesModel.GetSampleDataSeriesPingPu(smList, LChartALL, LChartALL.ViewXY.XAxes[0], _wavesModel.GetSampleDataSeriesPingPu(smList.ToList(), LChartALL, LChartALL.ViewXY.XAxes[0],
LChartALL.ViewXY.YAxes, _samplingFrequency)); LChartALL.ViewXY.YAxes, _samplingFrequency));
} }
private void UpdateChartData() private void UpdateChartData()
@ -388,9 +437,9 @@ namespace mseedChart.MainModule.ViewModels
{ {
for (int channelIndex = 0; channelIndex < smList.Count; channelIndex++) for (int channelIndex = 0; channelIndex < smList.Count; channelIndex++)
{ {
multiChannelData[channelIndex * 3] = smList[channelIndex].dz.ToArray(); multiChannelData[channelIndex * 3] = smList.ElementAt(channelIndex).dz.ToArray();
multiChannelData[channelIndex * 3 + 1] = smList[channelIndex].dn.ToArray(); multiChannelData[channelIndex * 3 + 1] = smList.ElementAt(channelIndex).dn.ToArray();
multiChannelData[channelIndex * 3 + 2] = smList[channelIndex].de.ToArray(); multiChannelData[channelIndex * 3 + 2] = smList.ElementAt(channelIndex).de.ToArray();
} }
// Invoke FeedNewDataToChart. // Invoke FeedNewDataToChart.
_dispatcher.Invoke(() => _dispatcher.Invoke(() =>

Loading…
Cancel
Save