From 9318cbca4e6cb10bc64c314064a7cf2a081ef39a Mon Sep 17 00:00:00 2001 From: PopSlime Date: Fri, 6 Jun 2025 19:31:27 +0800 Subject: [PATCH] feat: Add new event sources --- Assets/Cryville.EEW.Unity/Config.cs | 2 ++ .../Cryville.EEW.Unity/Map/MapElementManager.cs | 4 ++++ Assets/Cryville.EEW.Unity/Worker.cs | 15 +++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/Assets/Cryville.EEW.Unity/Config.cs b/Assets/Cryville.EEW.Unity/Config.cs index 27d319c..6d28485 100644 --- a/Assets/Cryville.EEW.Unity/Config.cs +++ b/Assets/Cryville.EEW.Unity/Config.cs @@ -55,6 +55,7 @@ namespace Cryville.EEW.Unity { [JsonDerivedType(typeof(BMKGOpenDataEventSourceConfig), "BMKGOpenData")] [JsonDerivedType(typeof(CWAOpenDataEventSourceConfig), "CWAOpenData")] [JsonDerivedType(typeof(EMSCRealTimeEventSourceConfig), "EMSCRealTime")] + [JsonDerivedType(typeof(GeoNetEventSourceConfig), "GeoNet")] [JsonDerivedType(typeof(GlobalQuakeServerEventSourceConfig), "GlobalQuakeServer")] [JsonDerivedType(typeof(GlobalQuakeServer15EventSourceConfig), "GlobalQuakeServer15")] [JsonDerivedType(typeof(JMAAtomEventSourceConfig), "JMAAtom")] @@ -66,6 +67,7 @@ namespace Cryville.EEW.Unity { record BMKGOpenDataEventSourceConfig([property: JsonRequired] string[] Subtypes) : EventSourceConfig; record CWAOpenDataEventSourceConfig([property: JsonRequired] string Subtype, [property: JsonRequired] string Token) : EventSourceConfig; record EMSCRealTimeEventSourceConfig() : EventSourceConfig; + record GeoNetEventSourceConfig(int MinimumMMI = 3, bool DoGetFullHistory = false, bool DoGetStrongMotionInfo = true) : EventSourceConfig; record GlobalQuakeServerEventSourceConfig([property: JsonRequired] string Host, int Port = 38000) : EventSourceConfig; record GlobalQuakeServer15EventSourceConfig(string Host, int Port = 38000) : GlobalQuakeServerEventSourceConfig(Host, Port); record JMAAtomEventSourceConfig(IReadOnlyCollection Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig; diff --git a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs index cd75eab..5b12ab5 100644 --- a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs +++ b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs @@ -2,6 +2,7 @@ using Cryville.EEW.BMKGOpenData.Map; using Cryville.EEW.Core; using Cryville.EEW.CWAOpenData.Map; using Cryville.EEW.EMSC.Map; +using Cryville.EEW.GeoNet.Map; using Cryville.EEW.GlobalQuake.Map; using Cryville.EEW.JMAAtom.Map; using Cryville.EEW.Map; @@ -135,6 +136,9 @@ namespace Cryville.EEW.Unity.Map { new CWATsunamiMapGenerator(), new EMSCRealTimeEventMapGenerator(), new FujianEEWMapGenerator(), + new GeoNetQuakeHistoryMapGenerator(), + new GeoNetQuakeMapGenerator(), + new GeoNetStrongMapGenerator(), new GlobalQuakeMapViewGenerator(), new JMAAtomMapGenerator(), new JMAEEWMapGenerator(), diff --git a/Assets/Cryville.EEW.Unity/Worker.cs b/Assets/Cryville.EEW.Unity/Worker.cs index 888edd3..99578c7 100644 --- a/Assets/Cryville.EEW.Unity/Worker.cs +++ b/Assets/Cryville.EEW.Unity/Worker.cs @@ -5,6 +5,8 @@ using Cryville.EEW.CWAOpenData; using Cryville.EEW.CWAOpenData.Model; using Cryville.EEW.CWAOpenData.TTS; using Cryville.EEW.EMSC; +using Cryville.EEW.GeoNet; +using Cryville.EEW.GeoNet.TTS; using Cryville.EEW.GlobalQuake; using Cryville.EEW.JMAAtom; using Cryville.EEW.JMAAtom.TTS; @@ -100,6 +102,9 @@ namespace Cryville.EEW.Unity { worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator()); worker.RegisterViewModelGenerator(new EMSCRealTimeEventRVMGenerator()); worker.RegisterViewModelGenerator(new FujianEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new GeoNetQuakeHistoryRVMGenerator()); + worker.RegisterViewModelGenerator(new GeoNetQuakeRVMGenerator()); + worker.RegisterViewModelGenerator(new GeoNetStrongRVMGenerator()); worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator()); worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator()); worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator()); @@ -117,6 +122,9 @@ namespace Cryville.EEW.Unity { worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new FujianEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new GeoNetQuakeHistoryTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new GeoNetQuakeTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new GeoNetStrongTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator()); @@ -147,6 +155,7 @@ namespace Cryville.EEW.Unity { _ => throw new InvalidOperationException("Unknown CWA open data sub-type."), }, EMSCRealTimeEventSourceConfig => new EMSCRealTimeWorker(new("wss://www.seismicportal.eu/standing_order/websocket")), + GeoNetEventSourceConfig geoNet => BuildGeoNetWorker(new(new("https://api.geonet.org.nz/quake"), new("https://api.geonet.org.nz/quake/history/index"), new("https://api.geonet.org.nz/intensity/strong/processed/index")), geoNet), GlobalQuakeServer15EventSourceConfig gq => new GlobalQuakeWorker15(gq.Host, gq.Port), GlobalQuakeServerEventSourceConfig gq => new GlobalQuakeWorker(gq.Host, gq.Port), JMAAtomEventSourceConfig jmaAtom => BuildJMAAtomWorkerFilter(new JMAAtomWorker(new("https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml")), jmaAtom), @@ -190,6 +199,12 @@ namespace Cryville.EEW.Unity { worker.SetDataUris(config.Subtypes.Select(i => new Uri(string.Format(CultureInfo.InvariantCulture, "https://data.bmkg.go.id/DataMKG/TEWS/{0}.json", i)))); return worker; } + static GeoNetWorker BuildGeoNetWorker(GeoNetWorker worker, GeoNetEventSourceConfig pref) { + worker.MinimumMMI = pref.MinimumMMI; + worker.DoGetFullHistory = pref.DoGetFullHistory; + worker.DoGetStrongMotionInfo = pref.DoGetStrongMotionInfo; + return worker; + } static USGSQuakeMLWorker BuildUSGSQuakeMLWorkerUri(USGSQuakeMLWorker worker, USGSQuakeMLEventSourceConfig config) { worker.SetFeedRelativeUri(new(string.Format(CultureInfo.InvariantCulture, "/earthquakes/feed/v1.0/summary/{0}.quakeml", config.Subtype), UriKind.Relative)); return worker;