13 Commits

193 changed files with 4542 additions and 303 deletions

View File

@@ -1,3 +1,3 @@
using System.Reflection;
[assembly: AssemblyVersion("0.0.3")]
[assembly: AssemblyVersion("0.0.5")]

View File

@@ -1,5 +1,9 @@
using Cryville.EEW.Core;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Cryville.EEW.Unity {
@@ -8,11 +12,18 @@ namespace Cryville.EEW.Unity {
float SeverityColorMappingLuminanceMultiplier,
bool UseContinuousColor,
string ColorScheme,
string LocationNamer,
string OverrideTimeZone,
bool DoDisplayTimeZone,
bool DoSwitchBackToHistory,
string NowcastWarningDelayTolerance,
string OverrideDisplayCulture,
IReadOnlyCollection<TTSCultureConfig> TTSCultures,
bool DoIgnoreLanguageVariant,
IReadOnlyCollection<EventSourceConfig> EventSources
) {
public static Config Default => new(
@@ -20,11 +31,18 @@ namespace Cryville.EEW.Unity {
1f,
false,
"Default",
"FERegionLong",
null,
true,
true,
"1:00:00",
"",
new List<TTSCultureConfig> { new(SharedCultures.CurrentUICulture) },
true,
new List<EventSourceConfig> {
new JMAAtomEventSourceConfig(Array.Empty<string>()),
new UpdateCheckerEventSourceConfig(),
@@ -54,9 +72,23 @@ namespace Cryville.EEW.Unity {
record NOAAEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
record UpdateCheckerEventSourceConfig : EventSourceConfig;
record USGSQuakeMLEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
record WolfxEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig;
record WolfxEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false, bool UseRawCENCLocationName = false) : EventSourceConfig;
[JsonSerializable(typeof(Config))]
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSourceGenerationOptions(Converters = new Type[] { typeof(CultureInfoConverter) }, WriteIndented = true)]
sealed partial class ConfigSerializationContext : JsonSerializerContext { }
sealed class CultureInfoConverter : JsonConverter<CultureInfo> {
public override CultureInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
Debug.Assert(typeToConvert == typeof(CultureInfo));
var value = reader.GetString();
if (value == null) return CultureInfo.InvariantCulture;
if (value == "") return SharedCultures.CurrentUICulture;
return SharedCultures.Get(value);
}
public override void Write(Utf8JsonWriter writer, CultureInfo value, JsonSerializerOptions options) {
writer.WriteStringValue(value.Name);
}
}
}

View File

@@ -17,19 +17,24 @@ namespace Cryville.EEW.Unity.Map {
GameObject m_prefabTile;
[SerializeField]
GameObject m_prefabBitmapHolder;
[SerializeField]
int m_maxMapTileZoom = 10;
[SerializeField]
bool m_isEditor;
readonly MapTileCacheManager _tiles = new();
MapTileCacheManager _tiles;
float _elementLayerZ;
void Start() {
_camera = GetComponent<Camera>();
_tiles = m_isEditor ? new EditorMapTileCacheManager() : new MapTileCacheManager();
_tiles.ExtraCachedZoomLevel = 20;
_tiles.Parent = m_layerTile;
_tiles.PrefabTile = m_prefabTile;
_tiles.PrefabBitmapHolder = m_prefabBitmapHolder;
_tiles.CacheDir = Application.temporaryCachePath;
_camera.orthographicSize = 0.5f / MathF.Max(1, (float)_camera.pixelWidth / _camera.pixelHeight);
_elementLayerZ = m_layerElement.transform.position.z;
if (m_layerElement != null) _elementLayerZ = m_layerElement.transform.position.z;
_mapElementUpdated = true;
}
void OnDestroy() {
@@ -74,7 +79,7 @@ namespace Cryville.EEW.Unity.Map {
}
}
void ZoomToMapElement() {
var aabb = m_layerElement.AABB;
var aabb = m_layerElement != null ? m_layerElement.AABB : null;
if (aabb is not RectangleF b) return;
if (b.Width * _camera.pixelHeight < _camera.pixelWidth * b.Height)
Scale = b.Height;
@@ -97,26 +102,30 @@ namespace Cryville.EEW.Unity.Map {
transform.localPosition = new(nx, Math.Clamp(transform.position.y, h / 2 - 1, -h / 2), -20);
var bounds = new Bounds((Vector2)transform.position, new Vector2(w, h));
int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, 10);
int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, m_maxMapTileZoom);
int zoomScale = 1 << zoom;
_tiles.MoveTo(
new(Mathf.FloorToInt(bounds.min.x * zoomScale), Mathf.FloorToInt(-bounds.max.y * zoomScale), zoom),
new(Mathf.CeilToInt(bounds.max.x * zoomScale), Mathf.CeilToInt(-bounds.min.y * zoomScale), zoom)
);
m_layerElement.Scale = h;
m_layerElementSub.Scale = h;
if (m_layerElement != null) {
m_layerElement.Scale = h;
}
if (m_layerElementSub != null) {
m_layerElementSub.Scale = h;
if (nx - w / 2 < 0) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ);
}
else if (nx + w / 2 > 1) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ);
}
else {
m_layerElementSub.gameObject.SetActive(false);
if (nx - w / 2 < 0) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ);
}
else if (nx + w / 2 > 1) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ);
}
else {
m_layerElementSub.gameObject.SetActive(false);
}
}
}
}

View File

@@ -0,0 +1,15 @@
using Cryville.EEW.Core.Map;
using System.IO;
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class EditorMapTileCacheManager : MapTileCacheManager {
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
index,
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
new($"https://tile.openstreetmap.org/{index.Z}/{index.NX}/{index.NY}.png")
);
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map_editor/{index.Z}/{index.NX}/{index.NY}");
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 478198b8ecc0082449fa3f68795174a9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -7,10 +7,12 @@ using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class MapTileBitmapHolder : Core.Map.MapTileBitmapHolder {
MapTileBitmapHolderBehaviour _behaviour;
readonly MapTileBitmapHolderBehaviour _behaviour;
readonly Uri _uri;
public MapTileBitmapHolder(MapTileIndex index, GameObject gameObject) : base(index) {
public MapTileBitmapHolder(MapTileIndex index, GameObject gameObject, Uri uri) : base(index) {
_behaviour = gameObject.GetComponent<MapTileBitmapHolderBehaviour>();
_uri = uri;
}
protected override void Dispose(bool disposing) {
@@ -20,8 +22,7 @@ namespace Cryville.EEW.Unity.Map {
}
}
protected override Uri GetUri() =>
new($"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{Index.Z}/{Index.NY}/{Index.NX}");
protected override Uri GetUri() => _uri;
protected override Task LoadBitmap(FileInfo file, CancellationToken cancellationToken) {
_behaviour.Load(file);

View File

@@ -45,13 +45,13 @@ namespace Cryville.EEW.Unity.Map {
_isReady = false;
}
if (_req == null || !_req.isDone) return;
if (_texHandler.isDone) {
if (_texHandler.isDone && _texHandler.texture != null) {
_tex = _texHandler.texture;
_tex.wrapMode = TextureWrapMode.Clamp;
_sprite = Sprite.Create(_tex, new Rect(0, 0, _tex.width, _tex.height), Vector2.zero, _tex.height, 0, SpriteMeshType.FullRect, Vector4.zero, false);
}
else {
Debug.LogError(_req.error);
Debug.LogError(_texHandler.error);
_localFile.Delete();
}
_req.Dispose();

View File

@@ -4,7 +4,7 @@ using System.IO;
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class MapTileCacheManager : MapTileCacheManager<MapTileBitmapHolder> {
class MapTileCacheManager : MapTileCacheManager<MapTileBitmapHolder> {
public GameObject PrefabTile { get; set; }
public GameObject PrefabBitmapHolder { get; set; }
@@ -12,8 +12,12 @@ namespace Cryville.EEW.Unity.Map {
public string CacheDir { get; set; }
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(index, GameObject.Instantiate(PrefabBitmapHolder, Parent, false));
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
index,
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
new($"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{index.Z}/{index.NY}/{index.NX}")
);
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map/{index.Z}/{index.NX}/{index.NY}");
readonly Dictionary<MapTile<MapTileBitmapHolder>, MapTile> _map = new();

View File

@@ -0,0 +1,219 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
using TMPro;
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class RegionEditor : MonoBehaviour {
QuadTreeNode _root;
[SerializeField] CameraController m_cameraController;
[SerializeField] GameObject m_regionViewPrefab;
[SerializeField] TMP_Text m_textSelectedInfo;
[SerializeField] TMP_Text m_textHoveredInfo;
[SerializeField] TMP_InputField m_inputId;
readonly Dictionary<QuadTreeNode, RegionView> _map = new();
void Start() {
var file = new FileInfo(Path.Combine(Application.persistentDataPath, "regions.json"));
if (file.Exists) {
using var stream = file.OpenRead();
_root = JsonSerializer.Deserialize<QuadTreeNode>(stream);
}
else {
_root = NewNode();
}
BuildView(_root);
}
public void Save() {
var file = new FileInfo(Path.Combine(Application.persistentDataPath, "regions.json"));
using var stream = file.Open(FileMode.Create);
JsonSerializer.Serialize(stream, _root);
}
void BuildView(QuadTreeNode node) {
var view = Instantiate(m_regionViewPrefab, transform, false).GetComponent<RegionView>();
view.Init(node.X, node.Y, node.Z);
view.Id = node.Data.Id;
view.IsLeaf = node.Children == null;
_map.Add(node, view);
BuildChildViews(node);
}
void BuildChildViews(QuadTreeNode node) {
if (node.Children == null) return;
foreach (var child in node.Children) {
BuildView(child);
}
}
void DestroyChildViews(QuadTreeNode node) {
if (node.Children == null) return;
foreach (var child in node.Children) {
Destroy(_map[child].gameObject);
_map.Remove(child);
}
}
QuadTreeNode _hoveredNode;
QuadTreeNode _selectedNode;
Vector3? _ppos;
void Update() {
var pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
pos.y += 1;
var hoveredNode = _root.Get(pos);
if (hoveredNode != _hoveredNode) {
HoverNode(hoveredNode);
}
if (Input.GetMouseButtonDown(0)) {
_ppos = Input.mousePosition;
}
if (Input.GetMouseButton(0) && _ppos is Vector3 pos0) {
if (Input.mousePosition != pos0) {
_ppos = null;
}
}
if (hoveredNode == null) return;
if (Input.GetMouseButtonUp(0) && _ppos != null) {
SelectNode(hoveredNode);
_ppos = null;
}
if (m_inputId.isFocused)
return;
if (Input.GetKeyUp(KeyCode.A)) {
MergeNode(hoveredNode);
}
if (Input.GetKeyUp(KeyCode.S)) {
SplitNode(hoveredNode);
}
if (Input.GetKeyUp(KeyCode.C)) {
m_inputId.text = hoveredNode.Data.Id;
}
if (Input.GetKeyUp(KeyCode.V)) {
hoveredNode.Data.Id = m_inputId.text;
_map[hoveredNode].Id = hoveredNode.Data.Id;
}
}
void HoverNode(QuadTreeNode node) {
if (_hoveredNode != null) {
_map[_hoveredNode].IsHovered = false;
}
_hoveredNode = node;
if (_hoveredNode != null) {
_map[_hoveredNode].IsHovered = true;
m_textHoveredInfo.text = string.Format(CultureInfo.InvariantCulture, "<Hovered>\nZ: {2}, XY: ({0}, {1})\nD: {3}", node.X, node.Y, node.Z, node.Data.Id);
}
else {
m_textHoveredInfo.text = "";
}
}
void SelectNode(QuadTreeNode node) {
if (_selectedNode != null) {
_map[_selectedNode].IsSelected = false;
}
_selectedNode = node;
if (_selectedNode != null) {
_map[_selectedNode].IsSelected = true;
m_textSelectedInfo.text = string.Format(CultureInfo.InvariantCulture, "<Selected>\nZ: {2}, XY: ({0}, {1})\nD: {3}", node.X, node.Y, node.Z, node.Data.Id);
}
else {
m_textSelectedInfo.text = "";
}
}
void MergeNode(QuadTreeNode node) {
var parent = node.Parent;
if (parent == null)
return;
DestroyChildViews(parent);
_map[parent].IsLeaf = true;
parent.Merge();
_hoveredNode = null;
if (_selectedNode != null && !_map.ContainsKey(_selectedNode)) {
_selectedNode = null;
}
}
void SplitNode(QuadTreeNode node) {
node.Split();
_map[node].IsLeaf = false;
BuildChildViews(node);
}
static QuadTreeNode NewNode() => new() { Data = new("") };
sealed class QuadTreeNode {
QuadTreeNode[] m_children;
public QuadTreeNode[] Children {
get => m_children;
set {
if (m_children != null) {
foreach (var child in m_children) {
child.DetachFromParent();
}
}
m_children = value;
UpdateChildren();
}
}
QuadTreeNode m_parent;
[JsonIgnore] public QuadTreeNode Parent => m_parent;
void AttachToParent(QuadTreeNode parent, int index) {
if (m_parent != null && m_parent != parent)
throw new InvalidOperationException("Node already in a tree.");
m_parent = parent;
X = (parent.X << 1) | (index is 0 or 3 ? 1 : 0);
Y = (parent.Y << 1) | (index is 0 or 1 ? 1 : 0);
Z = parent.Z + 1;
UpdateChildren();
}
void DetachFromParent() => m_parent = null;
void UpdateChildren() {
if (m_children != null) {
for (int i = 0; i < m_children.Length; i++) {
m_children[i].AttachToParent(this, i);
}
}
}
[JsonIgnore] public int X { get; private set; }
[JsonIgnore] public int Y { get; private set; }
[JsonIgnore] public int Z { get; private set; }
public RegionData Data { get; set; }
public QuadTreeNode Get(Vector2 pos) {
if ((pos.x is < 0 or >= 1) || (pos.y is < 0 or >= 1))
return null;
if (m_children == null)
return this;
Vector2 subPos = pos * 2;
subPos.x %= 1;
subPos.y %= 1;
return pos.x >= 0.5f
? (pos.y >= 0.5f ? m_children[0] : m_children[3]).Get(subPos)
: (pos.y >= 0.5f ? m_children[1] : m_children[2]).Get(subPos);
}
public void Merge() {
Children = null;
}
public void Split() {
Children = new QuadTreeNode[] {
new() { Data = Data.Copy() },
new() { Data = Data.Copy() },
new() { Data = Data.Copy() },
new() { Data = Data.Copy() },
};
}
}
sealed record RegionData(string Id) {
public string Id { get; set; } = Id;
public RegionData Copy() => (RegionData)MemberwiseClone();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fd7b70d11ebfe324e830806e394cc334
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,68 @@
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class RegionView : MonoBehaviour {
[SerializeField]
SpriteRenderer m_spriteRenderer;
Color _color;
bool m_isHovered;
public bool IsHovered {
get => m_isHovered;
set {
m_isHovered = value;
UpdateColor();
}
}
bool m_isSelected;
public bool IsSelected {
get => m_isSelected;
set {
m_isSelected = value;
UpdateColor();
}
}
bool m_isLeaf = true;
public bool IsLeaf {
get => m_isLeaf;
set {
m_isLeaf = value;
UpdateColor();
}
}
string m_id;
public string Id {
get => m_id;
set {
m_id = value;
unchecked {
uint hash = (uint)value.GetHashCode();
_color = Color.HSVToRGB(((hash >> 24) ^ ((hash >> 16) & 0xff) ^ ((hash >> 8) & 0xff) ^ (hash & 0xff)) / (float)0xff, 1, 1);
}
UpdateColor();
}
}
public void Init(int x, int y, int z) {
float scale = 1f / (1 << z);
transform.localScale = new Vector3(scale, scale, 1);
transform.localPosition = new Vector3(x * scale, y * scale - 1, -1 - z / 100f);
}
void UpdateColor() {
if (!m_isLeaf)
_color.a = 0.0f;
else if (m_isSelected)
_color.a = 0.6f;
else if (m_isHovered)
_color.a = 0.4f;
else
_color.a = 0.2f;
m_spriteRenderer.color = _color;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c57a0e86eb63b6048ba265e9d98e84f6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,4 +1,5 @@
using Cryville.EEW.Colors;
using Cryville.EEW.Core;
using Cryville.EEW.Core.Colors;
using Cryville.EEW.FERegion;
using Cryville.EEW.Map;
@@ -25,8 +26,23 @@ namespace Cryville.EEW.Unity {
public IColorScheme ColorScheme { get; private set; } = new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.Instance);
public ISubColorScheme BorderColorScheme { get; private set; } = new WrappedColorScheme(new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.SecondaryInstance));
public ISubColorScheme TextColorScheme { get; private set; } = new DefaultTextColorScheme(Color.White, Color.Black);
public ILocationConverter LocationConverter => new FERegionLongConverter(); // TODO TTS
public TimeSpan NowcastWarningDelayTolerance => TimeSpan.FromMinutes(60); // TODO TTS
public TimeSpan NowcastWarningDelayTolerance { get; private set; } = TimeSpan.FromMinutes(60);
public CultureInfo RVMCulture { get; private set; } = SharedCultures.CurrentUICulture;
readonly int _infoLocationSpecificity = 3;
readonly int _ttsLocationSpecificity = 3;
readonly LocationNamer _locationNamer = new() { Namer = new FERegionLongNamer() };
public bool NameLocation(double lat, double lon, CultureInfo localCulture, ref CultureInfo targetCulture, out string name, out int specificity) {
specificity = _ttsLocationSpecificity;
return _locationNamer.Name(lat, lon, localCulture, ref targetCulture, out name, ref specificity);
}
public bool NameLocation(double lat, double lon, CultureInfo localCulture, ref CultureInfo targetCulture, out string name) {
int specificity = _infoLocationSpecificity;
return _locationNamer.Name(lat, lon, localCulture, ref targetCulture, out name, ref specificity);
}
public IReadOnlyCollection<TTSCultureConfig> TTSCultures { get; private set; }
public bool DoIgnoreLanguageVariant { get; private set; }
public TimeZoneInfo OverrideTimeZone { get; private set; }
public bool DoDisplayTimeZone { get; private set; } = true;
@@ -101,9 +117,20 @@ namespace Cryville.EEW.Unity {
"SREV" => new DefaultTextColorScheme(Color.White, Color.FromArgb(28, 28, 28), 0.555f),
_ => new DefaultTextColorScheme(Color.White, Color.Black),
};
_locationNamer.Namer = config.LocationNamer switch {
"FERegionShort" => new FERegionShortNamer(),
_ => new FERegionLongNamer(),
};
if (config.NowcastWarningDelayTolerance is string nowcastWarningDelayTolerance)
NowcastWarningDelayTolerance = TimeSpan.Parse(nowcastWarningDelayTolerance, CultureInfo.InvariantCulture);
OverrideTimeZone = ParseTimeZone(config.OverrideTimeZone);
DoDisplayTimeZone = config.DoDisplayTimeZone;
DoSwitchBackToHistory = config.DoSwitchBackToHistory;
RVMCulture = config.OverrideDisplayCulture is string rvmCulture
? (string.IsNullOrEmpty(rvmCulture) ? SharedCultures.CurrentUICulture : SharedCultures.Get(rvmCulture))
: CultureInfo.InvariantCulture;
TTSCultures = config.TTSCultures ?? new List<TTSCultureConfig> { new(CultureInfo.InvariantCulture) };
DoIgnoreLanguageVariant = config.DoIgnoreLanguageVariant;
EventSources = config.EventSources;
}

View File

@@ -5,7 +5,7 @@ using System.IO;
using UnityEngine;
namespace Cryville.EEW.Unity {
class SoundPlayer : Core.SoundPlayer {
class SoundPlayer : Core.Audio.SoundPlayer {
public SoundPlayer() : base(GetEngineList(), AudioUsage.NotificationEvent) { }
static List<Type> GetEngineList() => new() {
typeof(Audio.Wasapi.MMDeviceEnumeratorWrapper),

View File

@@ -1,11 +1,19 @@
using SpeechLib;
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
namespace Cryville.EEW.Unity {
class TTSWorker : Core.TTSWorker {
public TTSWorker() : base(CreateSoundPlayer()) { }
class TTSWorker : Core.Audio.TTSWorker {
readonly SpVoiceClass _voice;
public TTSWorker() : base(CreateSoundPlayer()) {
try {
_voice = new SpVoiceClass();
}
catch { }
}
static SoundPlayer CreateSoundPlayer() {
try {
@@ -16,10 +24,24 @@ namespace Cryville.EEW.Unity {
}
}
protected override bool IsSpeaking() => false;
protected override bool IsSpeaking() {
if (_voice == null) return false;
_voice.GetStatus(out var status, out _);
return (status.dwRunningState & (uint)SpeechRunState.SRSEIsSpeaking) != 0;
}
protected override Task Speak(CultureInfo culture, string content, CancellationToken cancellationToken) => Task.CompletedTask;
protected override Task Speak(CultureInfo culture, string content, CancellationToken cancellationToken) {
if (_voice == null) return Task.CompletedTask;
_voice.Speak(
string.Format(CultureInfo.InvariantCulture, "<LANG LANGID=\"{0:x}\">{1}</LANG>", culture.LCID, content),
SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak
);
return Task.CompletedTask;
}
protected override void StopCurrent() { }
protected override void StopCurrent() {
if (_voice == null) return;
_voice.Skip("SENTENCE", int.MaxValue);
}
}
}

View File

@@ -23,6 +23,7 @@ namespace Cryville.EEW.Unity.UI {
child.SetViewModel(e);
child.transform.SetParent(m_listView, false);
_displayingViews.Add(child);
OnDisplayingViewsChanged();
SwitchTo(_displayingReports.Count - 1);
@@ -37,6 +38,7 @@ namespace Cryville.EEW.Unity.UI {
child.SetParent(null, false);
Destroy(child.gameObject);
_displayingViews.RemoveAt(index);
OnDisplayingViewsChanged();
if (_displayingReports.Count == 0) {
m_currentView.gameObject.SetActive(false);
@@ -49,6 +51,14 @@ namespace Cryville.EEW.Unity.UI {
if (_displayingReports.Count <= 1) m_listView.gameObject.SetActive(false);
}
void OnDisplayingViewsChanged() {
_maxBaseDuration = 1;
foreach (var e in _displayingReports) {
float duration = GetBaseDuration(e);
if (duration > _maxBaseDuration)
_maxBaseDuration = duration;
}
}
void Awake() {
if (Instance != null) {
@@ -63,6 +73,7 @@ namespace Cryville.EEW.Unity.UI {
int _index = -1;
float _tickDown;
float _maxBaseDuration;
void Update() {
if (_displayingReports.Count == 0) return;
_tickDown -= Time.deltaTime;
@@ -77,12 +88,15 @@ namespace Cryville.EEW.Unity.UI {
_index = index;
var e = _displayingReports[index];
m_currentView.SetViewModel(e, true);
var keyProp = e.Properties.FirstOrDefault();
_displayingViews[_index].SetCurrent(true);
_tickDown = MathF.Exp(Math.Max(-1f, keyProp?.Severity ?? -1f) + 1);
_tickDown = GetBaseDuration(e) / Math.Min(_maxBaseDuration, 4) * 4;
m_currentView.gameObject.SetActive(true);
Worker.Instance.SetCurrent(e);
}
static float GetBaseDuration(ReportViewModel e) {
return MathF.Exp(Math.Max(-1f, e.Properties.FirstOrDefault()?.Severity ?? -1f) + 1);
}
public void OnItemClicked(ReportViewModel viewModel) {
int index = _displayingReports.IndexOf(viewModel);
if (index == -1) return;

View File

@@ -12,8 +12,8 @@ namespace Cryville.EEW.Unity.UI {
_textView = GetComponent<TMP_Text>();
}
StringBuilder _sb = new();
char[] _buffer = new char[256];
readonly StringBuilder _sb = new();
readonly char[] _buffer = new char[256];
void Update() {
_sb.Clear();
_sb.AppendFormat(

View File

@@ -64,6 +64,9 @@ namespace Cryville.EEW.Unity {
BuildWorkers();
_worker.RVMGeneratorContext = SharedSettings.Instance;
_worker.TTSMessageGeneratorContext = SharedSettings.Instance;
_worker.RVMCulture = SharedSettings.Instance.RVMCulture;
_worker.SetTTSCultures(SharedSettings.Instance.TTSCultures ?? new TTSCultureConfig[0]);
_worker.IgnoreLanguageVariant = SharedSettings.Instance.DoIgnoreLanguageVariant;
_ongoingReportManager.Changed += OnOngoingReported;
_worker.Reported += OnReported;
_grouper.GroupUpdated += OnGroupUpdated;
@@ -87,9 +90,10 @@ namespace Cryville.EEW.Unity {
_ongoingReportManager.Dispose();
}
static void RegisterViewModelGenerators(CoreWorker worker) {
CENCEarthquakeRVMGenerator _cencEarthquakeRVMGenerator;
void RegisterViewModelGenerators(CoreWorker worker) {
worker.RegisterViewModelGenerator(new BMKGEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(new CENCEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(_cencEarthquakeRVMGenerator = new CENCEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator());
worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator());
@@ -104,9 +108,10 @@ namespace Cryville.EEW.Unity {
worker.RegisterViewModelGenerator(new SichuanEEWRVMGenerator());
worker.RegisterViewModelGenerator(new VersionRVMGenerator());
}
static void RegisterTTSMessageGenerators(CoreWorker worker) {
CENCEarthquakeTTSMessageGenerator _cencEarthquakeTTSMessageGenerator;
void RegisterTTSMessageGenerators(CoreWorker worker) {
worker.RegisterTTSMessageGenerator(new BMKGEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CENCEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(_cencEarthquakeTTSMessageGenerator = new CENCEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator());
@@ -129,7 +134,7 @@ namespace Cryville.EEW.Unity {
BMKGOpenDataWorker bmkgWorker = new(new Uri("http://localhost:9095/autogempa.json"));
bmkgWorker.SetDataUris(new Uri[] { new("http://localhost:9095/gempadirasakan.json") });
_worker.AddWorker(bmkgWorker);
_worker.AddWorker(new NOAAAtomWorker(new("http://localhost:9095/PAAQAtom.xml")));
_worker.AddWorker(new NOAAAtomWorker(new("http://localhost:9095/PAAQAtom.xml"), forceHttps: false));
_worker.AddWorker(new UpdateCheckerWorker(typeof(Worker).Assembly.GetName().Version?.ToString(3) ?? "", "unity"));
#else
foreach (var source in SharedSettings.Instance.EventSources) {
@@ -163,7 +168,7 @@ namespace Cryville.EEW.Unity {
worker.IsFilterWhitelist = config.IsFilterWhitelist;
return worker;
}
static WolfxWorker BuildWolfxWorkerFilter(WolfxWorker worker, WolfxEventSourceConfig config) {
WolfxWorker BuildWolfxWorkerFilter(WolfxWorker worker, WolfxEventSourceConfig config) {
if (config.Filter != null) worker.SetFilter(config.Filter.Select(i => i switch {
"cenc_eew" => typeof(CENCEEW),
"cenc_eqlist" => typeof(WolfxEarthquakeList<CENCEarthquake>),
@@ -174,6 +179,11 @@ namespace Cryville.EEW.Unity {
_ => throw new InvalidOperationException("Unknown Wolfx event type."),
}));
worker.IsFilterWhitelist = config.IsFilterWhitelist;
_cencEarthquakeRVMGenerator.UseRawLocationName
= _cencEarthquakeTTSMessageGenerator.UseRawLocationName
= config.UseRawCENCLocationName;
return worker;
}
static BMKGOpenDataWorker BuildBMKGOpenDataWorkerUris(BMKGOpenDataWorker worker, BMKGOpenDataEventSourceConfig config) {

View File

@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 550171b48a648b34e9ce5f1aba6244f1
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 0f848a4ea2f35e7449e584beee48c659
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -14,10 +14,10 @@
The shared instance of the <see cref="T:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext" /> class.
</summary>
</member>
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.LocationConverter">
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NowcastWarningDelayTolerance">
<inheritdoc />
</member>
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NowcastWarningDelayTolerance">
<member name="M:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@)">
<inheritdoc />
</member>
<member name="T:Cryville.EEW.TTS.ITTSMessageGeneratorContext">
@@ -25,16 +25,22 @@
Represents a context used in TTS message generators.
</summary>
</member>
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.LocationConverter">
<summary>
The location converter.
</summary>
</member>
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NowcastWarningDelayTolerance">
<summary>
The delay tolerance before a nowcast warning event cannot trigger sounds and TTS.
</summary>
</member>
<member name="M:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@)">
<summary>
Names a location in a culture.
</summary>
<param name="lat">The latitude of the location.</param>
<param name="lon">The longitude of the location.</param>
<param name="localCulture">The local culture supported by the event itself.</param>
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
<param name="name">The location name.</param>
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
</member>
<member name="T:Cryville.EEW.TTS.TTSEntry">
<summary>
Represents an entry sent to a TTS worker.
@@ -101,7 +107,7 @@
</member>
<member name="P:Cryville.EEW.TTS.TTSEntry.IssueTime">
<summary>
The time when the entry is created.
The time when the entry is created in UTC.
</summary>
</member>
</members>

Binary file not shown.

Binary file not shown.

View File

@@ -30,17 +30,17 @@
<param name="amount">The amount of phase to increment.</param>
<returns>The next delay value.</returns>
</member>
<member name="T:Cryville.EEW.EmptyLocationConverter">
<member name="T:Cryville.EEW.EmptyLocationNamer">
<summary>
An empty <see cref="T:Cryville.EEW.ILocationConverter" />.
An empty <see cref="T:Cryville.EEW.ILocationNamer" />.
</summary>
</member>
<member name="P:Cryville.EEW.EmptyLocationConverter.Instance">
<member name="P:Cryville.EEW.EmptyLocationNamer.Instance">
<summary>
The shared instance of the <see cref="T:Cryville.EEW.EmptyLocationConverter" /> class.
The shared instance of the <see cref="T:Cryville.EEW.EmptyLocationNamer" /> class.
</summary>
</member>
<member name="M:Cryville.EEW.EmptyLocationConverter.Convert(Cryville.EEW.INamedLocation,System.Globalization.CultureInfo@)">
<member name="M:Cryville.EEW.EmptyLocationNamer.Name(System.Double,System.Double,System.Globalization.CultureInfo@,System.Int32@)">
<inheritdoc />
</member>
<member name="T:Cryville.EEW.GeoUtils">
@@ -213,18 +213,20 @@
<param name="culture">The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object.</param>
<returns>The generated object.</returns>
</member>
<member name="T:Cryville.EEW.ILocationConverter">
<member name="T:Cryville.EEW.ILocationNamer">
<summary>
Represents a converter that converts a named location to a name in a specified culture.
Represents a namer that names a location in a specified culture.
</summary>
</member>
<member name="M:Cryville.EEW.ILocationConverter.Convert(Cryville.EEW.INamedLocation,System.Globalization.CultureInfo@)">
<member name="M:Cryville.EEW.ILocationNamer.Name(System.Double,System.Double,System.Globalization.CultureInfo@,System.Int32@)">
<summary>
Converts a named location to a name in a specified culture.
Names a location in a specified culture.
</summary>
<param name="location">The named location.</param>
<param name="lat">The latitude.</param>
<param name="lon">The longitude.</param>
<param name="culture">The preferred culture of the name. When the method returns, set to the actual culture of the name.</param>
<returns>The converted name.</returns>
<param name="specificity">The preferred specificity of the name. When the method returns, set to the actual specificity of the name.</param>
<returns>The name.</returns>
</member>
<member name="T:Cryville.EEW.ISourceWorker">
<summary>
@@ -349,6 +351,16 @@
<returns>The string of the specified name in the resource.</returns>
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The string of the specified name is not found.</exception>
</member>
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringOrDefault(Cryville.EEW.IMessageStringSet,System.String,System.String)">
<summary>
Gets a string in the string set, or a default string in the string set if not found.
</summary>
<param name="set">The string set.</param>
<param name="name">The name of the string.</param>
<param name="defaultName">The name of the default string.</param>
<returns>The string of the specified name in the resource, or the default string of the specified default name in the string set if not found.</returns>
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The default string of the specified default name is not found.</exception>
</member>
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringSetRequired(Cryville.EEW.IMessageStringSet,System.String)">
<summary>
Gets a string set in the string set.
@@ -960,61 +972,6 @@
</summary>
<param name="value">An instance of the <see cref="T:Cryville.EEW.Models.XmlSerializedDateTimeOffset" /> struct.</param>
</member>
<member name="T:Cryville.EEW.INamedLocation">
<summary>
Represents a named location.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Name">
<summary>
The source name of the location.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Culture">
<summary>
The source culture of <see cref="P:Cryville.EEW.INamedLocation.Name" />.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Latitude">
<summary>
The latitude of the location.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Longitude">
<summary>
The longitude of the location.
</summary>
</member>
<member name="T:Cryville.EEW.NamedLocation">
<summary>
Represents a named location.
</summary>
<param name="Name">The source name of the location.</param>
<param name="Culture">The source culture of <paramref name="Name" />.</param>
<param name="Latitude">The latitude of the location.</param>
<param name="Longitude">The longitude of the location.</param>
</member>
<member name="M:Cryville.EEW.NamedLocation.#ctor(System.String,System.Globalization.CultureInfo,System.Double,System.Double)">
<summary>
Represents a named location.
</summary>
<param name="Name">The source name of the location.</param>
<param name="Culture">The source culture of <paramref name="Name" />.</param>
<param name="Latitude">The latitude of the location.</param>
<param name="Longitude">The longitude of the location.</param>
</member>
<member name="P:Cryville.EEW.NamedLocation.Name">
<summary>The source name of the location.</summary>
</member>
<member name="P:Cryville.EEW.NamedLocation.Culture">
<summary>The source culture of <paramref name="Name" />.</summary>
</member>
<member name="P:Cryville.EEW.NamedLocation.Latitude">
<summary>The latitude of the location.</summary>
</member>
<member name="P:Cryville.EEW.NamedLocation.Longitude">
<summary>The longitude of the location.</summary>
</member>
<member name="T:Cryville.EEW.NonstandardDateTimeJsonConverter">
<summary>
Converts instances of the <see cref="T:System.DateTime" /> struct to or from JSON.
@@ -1039,7 +996,7 @@
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.SeverityScheme">
<inheritdoc />
</member>
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.LocationConverter">
<member name="M:Cryville.EEW.Report.EmptyRVMGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@,System.Int32@)">
<inheritdoc />
</member>
<member name="T:Cryville.EEW.Report.EmptySeverityScheme">
@@ -1192,10 +1149,34 @@
The severity scheme.
</summary>
</member>
<member name="P:Cryville.EEW.Report.IRVMGeneratorContext.LocationConverter">
<member name="M:Cryville.EEW.Report.IRVMGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@,System.Int32@)">
<summary>
The location converter.
Names a location in a culture.
</summary>
<param name="lat">The latitude of the location.</param>
<param name="lon">The longitude of the location.</param>
<param name="localCulture">The local culture supported by the event itself.</param>
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
<param name="name">The location name.</param>
<param name="specificity">The location specificity. See <see cref="P:Cryville.EEW.Report.ReportViewModel.LocationSpecificity" />.</param>
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
</member>
<member name="T:Cryville.EEW.Report.RVMGeneratorContextExtensions">
<summary>
Provides a set of <see langword="static" /> methods related to <see cref="T:Cryville.EEW.Report.IRVMGeneratorContext" />.
</summary>
</member>
<member name="M:Cryville.EEW.Report.RVMGeneratorContextExtensions.NameLocationTo(Cryville.EEW.Report.IRVMGeneratorContext,Cryville.EEW.Report.ReportViewModel,System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo)">
<summary>
Names a location in a culture and sets the result to a report view model.
</summary>
<param name="context">The context.</param>
<param name="e">The report view model.</param>
<param name="lat">The latitude of the location.</param>
<param name="lon">The longitude of the location.</param>
<param name="localCulture">The local culture supported by the event itself.</param>
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
</member>
<member name="T:Cryville.EEW.Report.ISeverityScheme">
<summary>

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,76 @@
fileFormatVersion: 2
guid: 17df7db50754b8f459aa29934b507000
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
: Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux64: 1
Exclude OSXUniversal: 1
Exclude Win: 0
Exclude Win64: 0
- first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
- first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: Win
second:
enabled: 1
settings:
CPU: x86
- first:
Standalone: Win64
second:
enabled: 1
settings:
CPU: x86_64
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,132 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2984379317001549352
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2984379317001549359}
- component: {fileID: 2962259339337128397}
m_Layer: 0
m_Name: RegionView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2984379317001549359
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2984379317001549352}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3524170046801625328}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2962259339337128397
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2984379317001549352}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c57a0e86eb63b6048ba265e9d98e84f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_spriteRenderer: {fileID: 3524170046801625329}
--- !u!1 &3524170046801625335
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3524170046801625328}
- component: {fileID: 3524170046801625329}
m_Layer: 0
m_Name: Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3524170046801625328
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3524170046801625335}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: 0.5, z: 1}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2984379317001549359}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &3524170046801625329
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3524170046801625335}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 0.2509804}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: bcdaa327335962646879336458cd7379
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1973
Assets/RegionEditor.unity Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8d07fde72bae47a4990c95f764ca2b43
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -6,7 +6,7 @@
"HeadlineMagnitude": " of magnitude {0:F1}",
"MaxIntensity": "The maximum intensity observed is {0}.",
"Region": "The epicenter is in {0}.",
"Title": "Earthquake Data.",
"TitleStandAlone": "Earthquake Data"
"Title": "Earthquake data.",
"TitleStandAlone": "Earthquake data"
}
}

View File

@@ -6,7 +6,7 @@
"HeadlineMagnitude": ", dengan magnitudo {0:F1}",
"MaxIntensity": "Intensitas gempa maksimum yang dirasakan adalah {0}.",
"Region": "Pusat gempa berada di {0}.",
"Title": "Data Gempabumi.",
"TitleStandAlone": "Data Gempabumi"
"Title": "Data gempabumi.",
"TitleStandAlone": "Data gempabumi"
}
}

View File

@@ -3,7 +3,7 @@
"Strings": {
"Headline": "印度尼西亞西部時間{0},發生咗一次{1}地震。{2}",
"HeadlineDepth": "震源深度{0}公里。",
"HeadlineMagnitude": "規模{0:F1}級",
"HeadlineMagnitude": "震級{0:F1}級",
"MaxIntensity": "觀測到嘅最大烈度為{0}。",
"Region": "震中位於{0}。",
"Title": "地震數據。",

View File

@@ -3,7 +3,7 @@
"Strings": {
"Headline": "印度尼西亞西部時間{0},發生了一次{1}地震。{2}",
"HeadlineDepth": "震源深度{0}公里。",
"HeadlineMagnitude": "規模{0:F1}級",
"HeadlineMagnitude": "規模{0:F1}級",
"MaxIntensity": "觀測到的最大震度為{0}。",
"Region": "震中位於{0}。",
"Title": "地震數據。",

View File

@@ -3,7 +3,7 @@
"Strings": {
"Headline": "印度尼西亚西部时间{0},发生了一次{1}地震。{2}",
"HeadlineDepth": "震源深度{0}千米。",
"HeadlineMagnitude": "规模{0:F1}级",
"HeadlineMagnitude": "震级{0:F1}级",
"MaxIntensity": "观测到的最大烈度为{0}。",
"Region": "震中位于{0}。",
"Title": "地震数据。",

View File

@@ -1,6 +1,12 @@
{
"Culture": "en-US",
"Strings": {
"SourceName": "BMKG Open Data"
"AuthorityName": "BMKG",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "Max intensity",
"SourceName": "BMKG Open Data",
"Title": "Earthquake data"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "id-ID",
"Strings": {
"SourceName": "Data Terbuka BMKG"
"AuthorityName": "BMKG",
"PropertyDepth": "Kedalaman",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "Intensitas maks.",
"SourceName": "Data Terbuka BMKG",
"Title": "Data gempabumi"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "yue-HK",
"Strings": {
"SourceName": "BMKG 開放數據"
"AuthorityName": "BMKG",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "最大烈度",
"SourceName": "BMKG 開放數據",
"Title": "地震數據"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "zh-TW",
"Strings": {
"SourceName": "BMKG 開放數據"
"AuthorityName": "BMKG",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "最大震度",
"SourceName": "BMKG 開放數據",
"Title": "地震數據"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "zh-CN",
"Strings": {
"SourceName": "BMKG 开放数据"
"AuthorityName": "BMKG",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "最大烈度",
"SourceName": "BMKG 开放数据",
"Title": "地震数据"
}
}

View File

@@ -13,6 +13,7 @@
"Title": {
"Strings": {
"地震報告": "Earthquake report",
"海嘯消息": "Tsunami message",
"海嘯警報": "Tsunami warning",
"海嘯警報解除": "Tsunami warning lifted"
}

View File

@@ -1,7 +1,7 @@
{
"Culture": "yue-HK",
"Strings": {
"EarthquakeBody": "{0}{1}發生規模{2:F1}有感地震,最大震度{3}。",
"EarthquakeBody": "{0}{1}發生震級{2:F1}有感地震,最大震度{3}。",
"EarthquakeFocalDepth": "震源深度{0}公里。",
"TsunamiForecast": "以下地區預計海嘯高度{0}。",
"TsunamiForecastArea": "{0}。預計到達時間{1:HH:mm}。",
@@ -13,6 +13,7 @@
"Title": {
"Strings": {
"地震報告": "地震報告",
"海嘯消息": "海嘯消息",
"海嘯警報": "海嘯警報",
"海嘯警報解除": "海嘯警報解除"
}

View File

@@ -1,7 +1,7 @@
{
"Culture": "zh-CN",
"Strings": {
"EarthquakeBody": "{0}{1}发生规模{2:F1}有感地震,最大震度{3}。",
"EarthquakeBody": "{0}{1}发生震级{2:F1}有感地震,最大震度{3}。",
"EarthquakeFocalDepth": "震源深度{0}千米。",
"TsunamiForecast": "以下地区预计海啸高度{0}。",
"TsunamiForecastArea": "{0}。预计到达时间{1:HH:mm}。",
@@ -13,6 +13,7 @@
"Title": {
"Strings": {
"地震報告": "地震报告",
"海嘯消息": "海啸消息",
"海嘯警報": "海啸警报",
"海嘯警報解除": "海啸警报解除"
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "en-US",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "Max intensity",
"PropertyMaxTsunamiHeight": "Max tsunami height",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "Unknown",
"PropertyTsunamiMessage": "Tsunami message",
"PropertyTsunamiWarning": "Tsunami warning",
"SourceName": "CWA ({0})"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "Earthquake",
"Tsunami": "Tsunami"
}
},
"PropertyMagnitude": {
"Strings": {
"": "Magnitude",
"芮氏規模": "Richter magnitude"
}
},
"Title": {
"Strings": {
"地震報告": "Earthquake report",
"海嘯消息": "Tsunami message",
"海嘯警報": "Tsunami warning",
"海嘯警報解除": "Tsunami warning lifted"
}
}
}
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "zh-TW",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxTsunamiHeight": "最大波高",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "不明",
"PropertyTsunamiMessage": "海\u2060嘯消\u2060息",
"PropertyTsunamiWarning": "海\u2060嘯警\u2060報",
"SourceName": "CWA{0}"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "地震",
"Tsunami": "海嘯"
}
},
"PropertyMagnitude": {
"Strings": {
"": "規模",
"芮氏規模": "芮氏規模"
}
},
"Title": {
"Strings": {
"地震報告": "地震報告",
"海嘯消息": "海嘯消息",
"海嘯警報": "海嘯警報",
"海嘯警報解除": "海嘯警報解除"
}
}
}
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "yue-HK",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxTsunamiHeight": "最大波高",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "不明",
"PropertyTsunamiMessage": "海\u2060嘯消\u2060息",
"PropertyTsunamiWarning": "海\u2060嘯警\u2060報",
"SourceName": "CWA{0}"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "地震",
"Tsunami": "海嘯"
}
},
"PropertyMagnitude": {
"Strings": {
"": "震級",
"芮氏規模": "黎克特制震級"
}
},
"Title": {
"Strings": {
"地震報告": "地震報告",
"海嘯消息": "海嘯消息",
"海嘯警報": "海嘯警報",
"海嘯警報解除": "海嘯警報解除"
}
}
}
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "zh-CN",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxTsunamiHeight": "最大波高",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "不明",
"PropertyTsunamiMessage": "海\u2060啸消\u2060息",
"PropertyTsunamiWarning": "海\u2060啸警\u2060报",
"SourceName": "CWA{0}"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "地震",
"Tsunami": "海啸"
}
},
"PropertyMagnitude": {
"Strings": {
"": "震级",
"芮氏規模": "里氏震级"
}
},
"Title": {
"Strings": {
"地震報告": "地震报告",
"海嘯消息": "海啸消息",
"海嘯警報": "海啸警报",
"海嘯警報解除": "海啸警报解除"
}
}
}
}

View File

@@ -1,6 +1,11 @@
{
"Culture": "en-US",
"Strings": {
"SourceName": "EMSC"
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "Earthquake event"
}
}

View File

@@ -0,0 +1,11 @@
{
"Culture": "yue-HK",
"Strings": {
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "地震事件"
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9c44f369185730644b6e777e84ee0569
guid: 0bc7279c4dd92ae43afb3f503643a84c
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,11 @@
{
"Culture": "zh-TW",
"Strings": {
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "地震事件"
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 704940476687b1b43a713305dd275d3c
guid: dcc04accbfc4e6b43a60d0bac2a76202
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,11 @@
{
"Culture": "zh-CN",
"Strings": {
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "地震事件"
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 643c09fce5fa33048a0a599cab63f9e3
guid: c900640f0d0bccc42a6017504c74a8cb
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -52,7 +52,7 @@
"142": "ウルグアイ",
"143": "チリ南部沖",
"144": "チリ南部",
"145": "チリ南部/アルゼンチン国境",
"145": "チリ/アルゼンチン国境南部",
"146": "アルゼンチン南部",
"147": "ティエラデルフエゴ",
"148": "フォークランド諸島",
@@ -232,7 +232,7 @@
"304": "カシミール/チベット自治区(中国)境界",
"305": "チベット自治区西部(中国)/インド国境",
"306": "チベット自治区(中国)",
"307": "中国、スーチョワン(四川)省",
"307": "中国、スーチョワン(四川)省/チョンチン(重慶)市",
"308": "インド北部",
"309": "ネパール/インド国境",
"31": "オレゴン州沿岸",
@@ -250,7 +250,7 @@
"320": "キルギス/シンチアンウイグル自治区(中国)国境",
"321": "中国、シンチアンウイグル自治区南部",
"322": "中国、カンスー(甘粛)省",
"323": "中国、ネイモンクー(内蒙古)自治区西部",
"323": "中国、ネイモンクー(内蒙古)自治区西部/ニンシャー(寧夏)回族自治区",
"324": "カシミール/シンチアンウイグル自治区(中国)境界",
"325": "中国、チンハイ(青海)省",
"326": "シベリア南西部",
@@ -283,7 +283,7 @@
"350": "アフガニスタン南西部",
"351": "アラビア半島東部",
"352": "ペルシャ湾",
"353": "イラン",
"353": "イラン南部",
"354": "パキスタン南西部",
"355": "オマーン湾",
"356": "パキスタン沖",
@@ -429,7 +429,7 @@
"482": "ミズーリ/カンザス州境",
"483": "ミズーリ州",
"484": "ミズーリ/アーカンソー州境",
"485": "ミズーリ/イリノイ州境",
"485": "ミズーリ州東部",
"486": "ミズーリ州南東部",
"487": "ミズーリ州、ケープジラード",
"488": "イリノイ州南部",
@@ -442,7 +442,7 @@
"494": "ニュージャージー州",
"495": "アリゾナ州東部",
"496": "ニューメキシコ州",
"497": "テキサス州北西部/オクラホマ州境",
"497": "テキサス州回廊地帯",
"498": "テキサス州西部",
"499": "オクラホマ州",
"5": "アリューシャン列島ニア諸島",
@@ -558,7 +558,7 @@
"599": "オーストラリア南方沖",
"6": "アリューシャン列島ラット諸島",
"60": "オアハカ州",
"600": "オーストラリア岸",
"600": "サウスオーストラリア沿岸",
"601": "ニューサウスウェールズ",
"602": "オーストラリア、ビクトリア",
"603": "オーストラリア南東岸",
@@ -630,7 +630,7 @@
"663": "オホーツク海",
"664": "中国南東部",
"665": "黄海",
"666": "中国東部東方沖",
"666": "中国東部東方沖",
"667": "ノボシビルスク(ニューシベリアン)諸島北方",
"668": "ノボシビルスク(ニューシベリアン)諸島",
"669": "東シベリア海",
@@ -678,7 +678,7 @@
"706": "スマトラ北部",
"707": "マレー半島",
"708": "タイ湾",
"709": "アフガニスタン",
"709": "アフガニスタン南東部",
"71": "グアテマラ沿岸",
"710": "パキスタン",
"711": "カシミール南西部",
@@ -756,7 +756,7 @@
"95": "ウィンドワード諸島",
"96": "コロンビア北岸",
"97": "ベネズエラ沿岸",
"98": "トリニダード・トバゴ",
"98": "トリニダード",
"99": "コロンビア北部",
"AU": "オーストラリア",
"CA": "カナダ",
@@ -769,8 +769,10 @@
"KI": "キリバス",
"MacroregionFormat": "{0}、{1}",
"MX": "メキシコ",
"NC": "ニューカレドニア",
"NO": "ノルウェー",
"NZ": "ニュージーランド",
"PF": "フランス領ポリネシア",
"PG": "パプアニューギニア",
"PT": "ポルトガル",
"RU": "ロシア",

View File

@@ -18,8 +18,8 @@
"111": "northern Peru",
"112": "Peru-Brazil border",
"113": "Amazonas, Brazil",
"114": "off the coast of central Peru",
"115": "near the coast of central Peru",
"114": "off the coast of Peru",
"115": "near the coast of Peru",
"116": "central Peru",
"117": "southern Peru",
"118": "Peru-Bolivia border",
@@ -99,7 +99,7 @@
"185": "Vanuatu vicinity",
"186": "Vanuatu",
"187": "New Caledonia",
"188": "Loyalty Islands, New Caledonia",
"188": "Loyalty Islands",
"189": "southeast of the Loyalty Islands",
"19": "southeastern Alaska",
"190": "New Ireland",
@@ -232,7 +232,7 @@
"304": "Kashmir-Xizang border",
"305": "western Xizang-India border",
"306": "Xizang, China",
"307": "Sichuan, China",
"307": "Sichuan-Chongqing, China",
"308": "northern India",
"309": "Nepal-India border",
"31": "near the coast of Oregon",
@@ -250,7 +250,7 @@
"320": "Kyrgyzstan-Xinjiang border",
"321": "southern Xinjiang, China",
"322": "Gansu, China",
"323": "western Nei Mongol, China",
"323": "western Nei Mongol-Ningxia, China",
"324": "Kashmir-Xinjiang border",
"325": "Qinghai, China",
"326": "southwestern Siberia",
@@ -272,7 +272,7 @@
"340": "Turkmenistan",
"341": "Turkmenistan-Iran border",
"342": "Turkmenistan-Afghanistan border",
"343": "Turkey-Iran border",
"343": "Türkiye-Iran border",
"344": "Armenia-Azerbaijan-Iran border",
"345": "northwestern Iran",
"346": "Iran-Iraq border",
@@ -297,8 +297,8 @@
"363": "Greece-Bulgaria border",
"364": "Greece",
"365": "Aegean Sea",
"366": "eastern Turkey",
"367": "Georgia-Armenia-Turkey border",
"366": "Türkiye",
"367": "Georgia-Armenia-Türkiye border",
"368": "southern Greece",
"369": "Dodecanese Islands, Greece",
"37": "Nevada",
@@ -306,7 +306,7 @@
"371": "eastern Mediterranean Sea",
"372": "Cyprus",
"373": "Dead Sea",
"374": "Syria",
"374": "Jordan-Syria",
"375": "Iraq",
"376": "Portugal",
"377": "Spain",
@@ -385,18 +385,18 @@
"442": "Hudson Strait",
"443": "northern Quebec",
"444": "Davis Strait",
"445": "Labrador, Newfoundland and Labrador",
"445": "Labrador",
"446": "Labrador Sea",
"447": "southern Quebec",
"448": "Gaspe Peninsula, Quebec",
"448": "Gaspe Peninsula",
"449": "eastern Quebec",
"45": "California-Baja California border",
"450": "Anticosti Island, Quebec",
"450": "Anticosti Island",
"451": "New Brunswick",
"452": "Nova Scotia",
"453": "Prince Edward Island",
"454": "Gulf of St. Lawrence",
"455": "Newfoundland, Newfoundland and Labrador",
"455": "Newfoundland",
"456": "Montana",
"457": "eastern Idaho",
"458": "Hebgen Lake",
@@ -507,7 +507,7 @@
"552": "Libya",
"553": "Egypt",
"554": "Red Sea",
"555": "western Saudi Arabia",
"555": "western Arabian Peninsula",
"556": "Chad",
"557": "Sudan",
"558": "Ethiopia",
@@ -588,11 +588,11 @@
"625": "Tokelau",
"626": "northern Cook Islands",
"627": "Cook Islands",
"628": "Society Islands, French Polynesia",
"629": "Tubuai Islands, French Polynesia",
"628": "Society Islands",
"629": "Tubuai Islands",
"63": "off the coast of Mexico",
"630": "Marquesas Islands, French Polynesia",
"631": "Tuamotu Archipelago, French Polynesia",
"630": "Marquesas Islands",
"631": "Tuamotu Archipelago",
"632": "South Pacific Ocean",
"633": "Lomonosov Ridge",
"634": "Arctic Ocean",
@@ -648,7 +648,7 @@
"68": "off the coast of Chiapas",
"680": "western Greenland",
"681": "Baffin Bay",
"682": "Baffin Island, Nunavut",
"682": "Baffin Island",
"683": "southeast central Pacific Ocean",
"684": "southern East Pacific Rise",
"685": "Easter Island",
@@ -678,7 +678,7 @@
"706": "northern Sumatra",
"707": "Malay Peninsula, Malaysia",
"708": "Gulf of Thailand",
"709": "central Afghanistan",
"709": "southeastern Afghanistan",
"71": "near the coast of Guatemala",
"710": "Pakistan",
"711": "southwestern Kashmir",
@@ -769,8 +769,10 @@
"KI": "Kiribati",
"MacroregionFormat": "{1}, {0}",
"MX": "Mexico",
"NC": "New Caledonia",
"NO": "Norway",
"NZ": "New Zealand",
"PF": "French Polynesia",
"PG": "Papua New Guinea",
"PT": "Portugal",
"RU": "Russia",

View File

@@ -11,15 +11,15 @@
"105": "厄瓜多爾沿岸",
"106": "哥倫比亞—厄瓜多爾邊境",
"107": "厄瓜多爾",
"108": "秘魯近海",
"109": "秘魯沿岸",
"108": "秘魯北部近海",
"109": "秘魯北部沿岸",
"11": "布里斯托爾灣",
"110": "秘魯—厄瓜多爾邊境",
"111": "秘魯北部",
"112": "秘魯—巴西邊境",
"113": "巴西亞馬遜",
"114": "秘魯中部近海",
"115": "秘魯中部沿岸",
"114": "秘魯近海",
"115": "秘魯沿岸",
"116": "秘魯中部",
"117": "秘魯南部",
"118": "秘魯—玻利維亞邊境",
@@ -99,7 +99,7 @@
"185": "溫納圖附近",
"186": "溫納圖",
"187": "新喀里多尼亞",
"188": "新喀里多尼亞洛亞蒂群島",
"188": "洛亞蒂群島",
"189": "洛亞蒂群島東南",
"19": "阿拉斯加東南部",
"190": "新愛爾蘭",
@@ -232,7 +232,7 @@
"304": "克什米爾—西藏邊境",
"305": "西藏西部—印度邊境",
"306": "中國西藏",
"307": "中國四川",
"307": "中國四川、重慶",
"308": "印度北部",
"309": "尼泊爾—印度邊境",
"31": "俄勒岡沿岸",
@@ -250,7 +250,7 @@
"320": "吉爾吉斯—新疆邊境",
"321": "中國新疆南部",
"322": "中國甘肅",
"323": "中國內蒙古西部",
"323": "中國內蒙古西部、寧夏",
"324": "克什米爾—新疆邊境",
"325": "中國青海",
"326": "西伯利亞西南部",
@@ -297,7 +297,7 @@
"363": "希臘—保加利亞邊境",
"364": "希臘",
"365": "愛琴海",
"366": "土耳其東部",
"366": "土耳其",
"367": "格魯吉亞—亞美尼亞—土耳其邊境",
"368": "希臘南部",
"369": "希臘佐澤卡尼索斯群島",
@@ -306,7 +306,7 @@
"371": "地中海東部",
"372": "塞浦路斯",
"373": "死海",
"374": "敘利亞",
"374": "約旦—敘利亞",
"375": "伊拉克",
"376": "葡萄牙",
"377": "西班牙",
@@ -374,7 +374,7 @@
"432": "克羅澤群島",
"433": "凱爾蓋朗群島",
"434": "斷裂海嶺",
"435": "印度洋洋中脊東南部",
"435": "印度洋東南海嶺",
"436": "凱爾蓋朗海台南部",
"437": "澳大利亞以南",
"438": "沙斯卡寸旺省",
@@ -385,18 +385,18 @@
"442": "哈得遜海峽",
"443": "魁北克省北部",
"444": "戴維斯海峽",
"445": "紐芬蘭與拉布拉多省拉布拉多",
"445": "拉布拉多",
"446": "拉布拉多海",
"447": "魁北克省南部",
"448": "魁北克省加斯佩半島",
"448": "加斯佩半島",
"449": "魁北克省東部",
"45": "加利福尼亞—下加利福尼亞邊境",
"450": "魁北克省安蒂科斯蒂島",
"450": "安蒂科斯蒂島",
"451": "新不倫瑞克省",
"452": "新斯科舍省",
"453": "愛德華王子島省",
"454": "聖勞倫斯灣",
"455": "紐芬蘭與拉布拉多省紐芬蘭",
"455": "紐芬蘭",
"456": "蒙大拿",
"457": "愛達荷東部",
"458": "希伯根湖",
@@ -507,7 +507,7 @@
"552": "利比亞",
"553": "埃及",
"554": "紅海",
"555": "沙特阿拉伯西部",
"555": "阿拉伯半島西部",
"556": "乍得",
"557": "蘇丹",
"558": "埃塞俄比亞",
@@ -588,11 +588,11 @@
"625": "托克勞",
"626": "庫克群島北部",
"627": "庫克群島",
"628": "法屬波利尼西亞社會群島",
"629": "法屬波利尼西亞土布艾群島",
"628": "社會群島",
"629": "土布艾群島",
"63": "墨西哥近海",
"630": "法屬波利尼西亞馬克薩斯群島",
"631": "法屬波利尼西亞土阿莫土群島",
"630": "馬克薩斯群島",
"631": "土阿莫土群島",
"632": "南太平洋",
"633": "羅蒙諾索夫海嶺",
"634": "北冰洋",
@@ -600,7 +600,7 @@
"636": "格陵蘭島東部",
"637": "冰島附近",
"638": "冰島",
"639": "央麥恩島",
"639": "揚馬延島",
"64": "米卻肯近海",
"640": "格陵蘭海",
"641": "冷岸群島以北",
@@ -648,7 +648,7 @@
"68": "恰帕斯近海",
"680": "格陵蘭島西部",
"681": "巴芬灣",
"682": "努納武特巴芬島",
"682": "巴芬島",
"683": "太平洋中部東南部",
"684": "東太平洋海隆南部",
"685": "復活節島",
@@ -678,7 +678,7 @@
"706": "蘇門答臘北部",
"707": "馬來西亞馬來半島",
"708": "泰國灣",
"709": "阿富汗部",
"709": "阿富汗東南部",
"71": "危地馬拉沿岸",
"710": "巴基斯坦",
"711": "克什米爾西南部",
@@ -769,8 +769,10 @@
"KI": "基里巴斯",
"MacroregionFormat": "{0}{1}",
"MX": "墨西哥",
"NC": "新喀里多尼亞",
"NO": "挪威",
"NZ": "新西蘭",
"PF": "法屬玻里尼西亞",
"PG": "巴布亞新畿內亞",
"PT": "葡萄牙",
"RU": "俄羅斯",

View File

@@ -11,15 +11,15 @@
"105": "厄瓜多沿岸",
"106": "哥倫比亞—厄瓜多邊境",
"107": "厄瓜多",
"108": "秘魯近海",
"109": "秘魯沿岸",
"108": "秘魯北部近海",
"109": "秘魯北部沿岸",
"11": "布里斯托爾灣",
"110": "秘魯—厄瓜多邊境",
"111": "秘魯北部",
"112": "秘魯—巴西邊境",
"113": "巴西亞馬遜",
"114": "秘魯中部近海",
"115": "秘魯中部沿岸",
"114": "秘魯近海",
"115": "秘魯沿岸",
"116": "秘魯中部",
"117": "秘魯南部",
"118": "秘魯—玻利維亞邊境",
@@ -99,7 +99,7 @@
"185": "萬那杜附近",
"186": "萬那杜",
"187": "新喀里多尼亞",
"188": "新喀里多尼亞羅雅提群島",
"188": "羅雅提群島",
"189": "羅雅提群島東南",
"19": "阿拉斯加東南部",
"190": "新愛爾蘭",
@@ -232,7 +232,7 @@
"304": "喀什米爾—西藏邊境",
"305": "西藏西部—印度邊境",
"306": "中國西藏",
"307": "中國四川",
"307": "中國四川、重慶",
"308": "印度北部",
"309": "尼泊爾—印度邊境",
"31": "奧勒岡沿岸",
@@ -250,7 +250,7 @@
"320": "吉爾吉斯—新疆邊境",
"321": "中國新疆南部",
"322": "中國甘肅",
"323": "中國內蒙古西部",
"323": "中國內蒙古西部、寧夏",
"324": "喀什米爾—新疆邊境",
"325": "中國青海",
"326": "西伯利亞西南部",
@@ -297,7 +297,7 @@
"363": "希臘—保加利亞邊境",
"364": "希臘",
"365": "愛琴海",
"366": "土耳其東部",
"366": "土耳其",
"367": "喬治亞—亞美尼亞—土耳其邊境",
"368": "希臘南部",
"369": "希臘佐澤卡尼索斯群島",
@@ -306,7 +306,7 @@
"371": "地中海東部",
"372": "賽普勒斯",
"373": "死海",
"374": "敘利亞",
"374": "約旦—敘利亞",
"375": "伊拉克",
"376": "葡萄牙",
"377": "西班牙",
@@ -374,7 +374,7 @@
"432": "克羅澤群島",
"433": "凱爾蓋朗群島",
"434": "斷裂海嶺",
"435": "印度洋洋中脊東南部",
"435": "印度洋東南海嶺",
"436": "凱爾蓋朗海台南部",
"437": "澳大利亞以南",
"438": "薩克其萬省",
@@ -385,18 +385,18 @@
"442": "哈得遜海峽",
"443": "魁北克省北部",
"444": "戴維斯海峽",
"445": "紐芬蘭與拉布拉多省拉布拉多",
"445": "拉布拉多",
"446": "拉布拉多海",
"447": "魁北克省南部",
"448": "魁北克省加斯佩半島",
"448": "加斯佩半島",
"449": "魁北克省東部",
"45": "加利福尼亞—下加利福尼亞邊境",
"450": "魁北克省安蒂科斯蒂島",
"450": "安蒂科斯蒂島",
"451": "新不倫瑞克省",
"452": "新斯科舍省",
"453": "愛德華王子島省",
"454": "聖勞倫斯灣",
"455": "紐芬蘭與拉布拉多省紐芬蘭",
"455": "紐芬蘭",
"456": "蒙大拿",
"457": "愛達荷東部",
"458": "希伯根湖",
@@ -507,7 +507,7 @@
"552": "利比亞",
"553": "埃及",
"554": "紅海",
"555": "沙烏地阿拉伯西部",
"555": "阿拉伯半島西部",
"556": "查德",
"557": "蘇丹",
"558": "衣索比亞",
@@ -588,11 +588,11 @@
"625": "托克勞",
"626": "庫克群島北部",
"627": "庫克群島",
"628": "法屬玻里尼西亞社會群島",
"629": "法屬玻里尼西亞土布艾群島",
"628": "社會群島",
"629": "土布艾群島",
"63": "墨西哥近海",
"630": "法屬玻里尼西亞馬克薩斯群島",
"631": "法屬玻里尼西亞土阿莫土群島",
"630": "馬克薩斯群島",
"631": "土阿莫土群島",
"632": "南太平洋",
"633": "羅蒙諾索夫海嶺",
"634": "北冰洋",
@@ -600,7 +600,7 @@
"636": "格陵蘭島東部",
"637": "冰島附近",
"638": "冰島",
"639": "央麥恩島",
"639": "揚馬延島",
"64": "米卻肯近海",
"640": "格陵蘭海",
"641": "冷岸群島以北",
@@ -648,7 +648,7 @@
"68": "恰帕斯近海",
"680": "格陵蘭島西部",
"681": "巴芬灣",
"682": "努納武特巴芬島",
"682": "巴芬島",
"683": "太平洋中部東南部",
"684": "東太平洋海隆南部",
"685": "復活節島",
@@ -678,7 +678,7 @@
"706": "蘇門答臘北部",
"707": "馬來西亞馬來半島",
"708": "泰國灣",
"709": "阿富汗部",
"709": "阿富汗東南部",
"71": "瓜地馬拉沿岸",
"710": "巴基斯坦",
"711": "喀什米爾西南部",
@@ -769,8 +769,10 @@
"KI": "吉里巴斯",
"MacroregionFormat": "{0}{1}",
"MX": "墨西哥",
"NC": "新喀里多尼亞",
"NO": "挪威",
"NZ": "紐西蘭",
"PF": "法屬玻里尼西亞",
"PG": "巴布亞紐幾內亞",
"PT": "葡萄牙",
"RU": "俄羅斯",

View File

@@ -11,15 +11,15 @@
"105": "厄瓜多尔沿岸",
"106": "哥伦比亚—厄瓜多尔边境",
"107": "厄瓜多尔",
"108": "秘鲁近海",
"109": "秘鲁沿岸",
"108": "秘鲁北部近海",
"109": "秘鲁北部沿岸",
"11": "布里斯托尔湾",
"110": "秘鲁—厄瓜多尔边境",
"111": "秘鲁北部",
"112": "秘鲁—巴西边境",
"113": "巴西亚马孙",
"114": "秘鲁中部近海",
"115": "秘鲁中部沿岸",
"114": "秘鲁近海",
"115": "秘鲁沿岸",
"116": "秘鲁中部",
"117": "秘鲁南部",
"118": "秘鲁—玻利维亚边境",
@@ -99,7 +99,7 @@
"185": "瓦努阿图附近",
"186": "瓦努阿图",
"187": "新喀里多尼亚",
"188": "新喀里多尼亚洛亚蒂群岛",
"188": "洛亚蒂群岛",
"189": "洛亚蒂群岛东南",
"19": "阿拉斯加东南部",
"190": "新爱尔兰",
@@ -232,7 +232,7 @@
"304": "克什米尔—西藏边境",
"305": "西藏西部—印度边境",
"306": "中国西藏",
"307": "中国四川",
"307": "中国四川、重庆",
"308": "印度北部",
"309": "尼泊尔—印度边境",
"31": "俄勒冈沿岸",
@@ -250,7 +250,7 @@
"320": "吉尔吉斯斯坦—新疆边境",
"321": "中国新疆南部",
"322": "中国甘肃",
"323": "中国内蒙古西部",
"323": "中国内蒙古西部、宁夏",
"324": "克什米尔—新疆边境",
"325": "中国青海",
"326": "西伯利亚西南部",
@@ -297,7 +297,7 @@
"363": "希腊—保加利亚边境",
"364": "希腊",
"365": "爱琴海",
"366": "土耳其东部",
"366": "土耳其",
"367": "格鲁吉亚—亚美尼亚—土耳其边境",
"368": "希腊南部",
"369": "希腊佐泽卡尼索斯群岛",
@@ -306,7 +306,7 @@
"371": "地中海东部",
"372": "塞浦路斯",
"373": "死海",
"374": "叙利亚",
"374": "约旦—叙利亚",
"375": "伊拉克",
"376": "葡萄牙",
"377": "西班牙",
@@ -374,7 +374,7 @@
"432": "克罗泽群岛",
"433": "凯尔盖朗群岛",
"434": "断裂海岭",
"435": "印度洋洋中脊东南部",
"435": "印度洋东南海岭",
"436": "凯尔盖朗海台南部",
"437": "澳大利亚以南",
"438": "萨斯喀彻温省",
@@ -385,18 +385,18 @@
"442": "哈得孙海峡",
"443": "魁北克省北部",
"444": "戴维斯海峡",
"445": "纽芬兰与拉布拉多省拉布拉多",
"445": "拉布拉多",
"446": "拉布拉多海",
"447": "魁北克省南部",
"448": "魁北克省加斯佩半岛",
"448": "加斯佩半岛",
"449": "魁北克省东部",
"45": "加利福尼亚—下加利福尼亚边境",
"450": "魁北克省安蒂科斯蒂岛",
"450": "安蒂科斯蒂岛",
"451": "新不伦瑞克省",
"452": "新斯科舍省",
"453": "爱德华王子岛省",
"454": "圣劳伦斯湾",
"455": "纽芬兰与拉布拉多省纽芬兰",
"455": "纽芬兰",
"456": "蒙大拿",
"457": "爱达荷东部",
"458": "希伯根湖",
@@ -507,7 +507,7 @@
"552": "利比亚",
"553": "埃及",
"554": "红海",
"555": "沙特阿拉伯西部",
"555": "阿拉伯半岛西部",
"556": "乍得",
"557": "苏丹",
"558": "埃塞俄比亚",
@@ -588,11 +588,11 @@
"625": "托克劳",
"626": "库克群岛北部",
"627": "库克群岛",
"628": "法属波利尼西亚社会群岛",
"629": "法属波利尼西亚土布艾群岛",
"628": "社会群岛",
"629": "土布艾群岛",
"63": "墨西哥近海",
"630": "法属波利尼西亚马克萨斯群岛",
"631": "法属波利尼西亚土阿莫土群岛",
"630": "马克萨斯群岛",
"631": "土阿莫土群岛",
"632": "南太平洋",
"633": "罗蒙诺索夫海岭",
"634": "北冰洋",
@@ -600,7 +600,7 @@
"636": "格陵兰岛东部",
"637": "冰岛附近",
"638": "冰岛",
"639": "央麦恩岛",
"639": "扬马延岛",
"64": "米却肯近海",
"640": "格陵兰海",
"641": "斯瓦尔巴群岛以北",
@@ -648,7 +648,7 @@
"68": "恰帕斯近海",
"680": "格陵兰岛西部",
"681": "巴芬湾",
"682": "努纳武特巴芬岛",
"682": "巴芬岛",
"683": "太平洋中部东南部",
"684": "东太平洋海隆南部",
"685": "复活节岛",
@@ -678,7 +678,7 @@
"706": "苏门答腊北部",
"707": "马来西亚马来半岛",
"708": "泰国湾",
"709": "阿富汗部",
"709": "阿富汗东南部",
"71": "危地马拉沿岸",
"710": "巴基斯坦",
"711": "克什米尔西南部",
@@ -769,8 +769,10 @@
"KI": "基里巴斯",
"MacroregionFormat": "{0}{1}",
"MX": "墨西哥",
"NC": "新喀里多尼亚",
"NO": "挪威",
"NZ": "新西兰",
"PF": "法属波利尼西亚",
"PG": "巴布亚新几内亚",
"PT": "葡萄牙",
"RU": "俄罗斯",

View File

@@ -1,6 +1,28 @@
{
"Culture": "en-US",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "Quality",
"SourceName": "GlobalQuakeServer",
"Title": "Detected",
"TitleArchived": "Archived",
"TitleCanceled": "Canceled"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -1,6 +1,28 @@
{
"Culture": "yue-HK",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "品質",
"SourceName": "GlobalQuakeServer",
"Title": "檢出",
"TitleArchived": "歸檔",
"TitleCanceled": "取消"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -1,6 +1,28 @@
{
"Culture": "zh-TW",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "品質",
"SourceName": "GlobalQuakeServer",
"Title": "檢出",
"TitleArchived": "歸檔",
"TitleCanceled": "取消"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -1,6 +1,28 @@
{
"Culture": "zh-CN",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "质量",
"SourceName": "GlobalQuakeServer",
"Title": "检出",
"TitleArchived": "归档",
"TitleCanceled": "取消"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -106,7 +106,7 @@
"0226": "There is a possibility of a destructive local tsunami near the epicenter.",
"0227": "Minor local tsunami may occur near the epicenter, but no tsunami damage is expected.",
"0228": "A shallow earthquake with the same magnitude in a sea area may generate a tsunami.",
"0229": "The possibility of tsunami generation toward Japan in currently under evaluation.",
"0229": "The possibility of tsunami generation toward Japan is currently under evaluation.",
"0230": "This earthquake poses no tsunami risk to Japan.",
"0241": "Earthquake Early Warning is in effect for this earthquake.",
"0242": "Earthquake Early Warning is in effect for this earthquake. Its maximum seismic intensity was 2.",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "This report is for drilling.",
"試験": "This report is for experiment."
"試験": "This report is for testing."
}
},
"Title": {
"Strings": {
"": "report",
"": "Information",
"北海道・三陸沖後発地震注意情報": "Hokkaido and off-Sanriku aftershock notice",
"南海トラフ地震に関連する情報": "Information related to Nankai Trough earthquake",
"噴火に関する火山観測報": "Volcano observation information about eruption",

View File

@@ -118,7 +118,7 @@
},
"EarthquakeMagnitudeUnknown": {
"Strings": {
"": "地震嘅規模不明。",
"": "地震嘅震級不明。",
"M8を超える巨大地震": "推定呢次地震係震級大於8嘅巨大地震。"
}
},
@@ -131,7 +131,7 @@
},
"NankaiTroughInfo": {
"Strings": {
"111": "南海海槽地震嘅監視區域內發生咗規模6.8或以上嘅地震。\n氣象廳已經開始調查呢次發生嘅地震與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請根據各自嘅情況採取行動保護自身安全。",
"111": "南海海槽地震嘅監視區域內發生咗震級6.8或以上嘅地震。\n氣象廳已經開始調查呢次發生嘅地震與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請根據各自嘅情況採取行動保護自身安全。",
"112": "應變觀測點觀測到咗顯著嘅變化,且變化正在增大。\n氣象廳已經開始調查觀測到嘅現象與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請注意後續嘅資訊。",
"113": "觀測到咗可能表明預想震源域內嘅板塊邊界嘅固著狀態發生變化嘅現象。\n氣象廳已經開始調查觀測到嘅現象與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請注意後續嘅資訊。",
"120": "氣象廳臨時舉辦咗關於沿南海海槽地震嘅評估檢討會。評估認為由於本次地震嘅矩震級為8.0或以上,包括唔係呢次地震嘅震源域嘅區域在內,南海海槽地震嘅預想震源域內,大規模地震發生嘅可能性與平常相比相對較高。\n請根據政府同自治體等後續嘅呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動嘅推移。",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "呢報係訓練報。",
"試験": "呢報係試報。"
"試験": "呢報係試報。"
}
},
"Title": {
"Strings": {
"": "電文",
"": "資訊",
"北海道・三陸沖後発地震注意情報": "北海道、三陸外海餘震注意資訊",
"南海トラフ地震に関連する情報": "關於南海海槽地震嘅資訊",
"噴火に関する火山観測報": "關於火山噴發嘅火山觀測報",
@@ -227,7 +227,7 @@
"32": "海上警報(火山噴發警報解除)",
"33": "海上預報(火山噴發預報)",
"35": "活火山留意(海底火山)",
"36": "邊海域警戒",
"36": "邊海域警戒",
"51": "爆發",
"52": "噴發",
"53": "開始噴發",

View File

@@ -12,7 +12,7 @@
"EarthquakeHypocenterDepth": "震源深度約{0}公里。",
"EarthquakeHypocenterDepth0": "震源深度為極淺。",
"EarthquakeHypocenterDepthUnknown": "震源深度不明。",
"EarthquakeMagnitude": "表示地震規模的震級推定為{0:F1}級。",
"EarthquakeMagnitude": "地震規模推定為{0:F1}級。",
"EarthquakeMultiple": "本資訊是由於多次地震而發表的。",
"EarthquakeMultipleIndex": "地震{0}",
"HeadlineAshDetailed": "此次{0}噴發,降灰等情況的詳細預報如下。",
@@ -119,7 +119,7 @@
"EarthquakeMagnitudeUnknown": {
"Strings": {
"": "地震的規模不明。",
"M8を超える巨大地震": "推定本次地震為震級大於8的巨大地震"
"M8を超える巨大地震": "推定本次地震為規模大於8的巨大地震"
}
},
"HeadlineVolcanoWarning": {
@@ -134,7 +134,7 @@
"111": "南海海槽地震的監視區域內發生了規模6.8或以上的地震。\n氣象廳已經開始調查本次發生的地震與南海海槽地震的關聯性並舉辦關於沿南海海槽地震的評估檢討會。\n若位於南海海槽地震的預想受災地區請根據各自的情況採取行動保護自身安全。",
"112": "應變觀測點觀測到了顯著的變化,且變化正在增大。\n氣象廳已經開始調查觀測到的現象與南海海槽地震的關聯性並舉辦關於沿南海海槽地震的評估檢討會。\n若位於南海海槽地震的預想受災地區請注意後續的資訊。",
"113": "觀測到了可能表明預想震源域內的板塊邊界的固著狀態發生變化的現象。\n氣象廳已經開始調查觀測到的現象與南海海槽地震的關聯性並舉辦關於沿南海海槽地震的評估檢討會。\n若位於南海海槽地震的預想受災地區請注意後續的資訊。",
"120": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,由於本次地震的矩震級為8.0或以上,包括不是本次地震的震源域的區域在內,南海海槽地震的預想震源域內,大規模地震發生的可能性與平常相比相對較高。\n請根據政府和自治體等後續的呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"120": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,由於本次地震的地震矩規模為8.0或以上,包括不是本次地震的震源域的區域在內,南海海槽地震的預想震源域內,大規模地震發生的可能性與平常相比相對較高。\n請根據政府和自治體等後續的呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"130": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,南海海槽地震的預想震源域內,大規模地震發生的可能性與平常相比相對較高。\n請根據政府和自治體等後續的呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"190": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,沒有觀測到能夠表明沿南海海槽的大規模地震發生的可能性與平常相比相對較高的變化。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"200": "氣象廳舉辦了關於沿南海海槽地震的評估檢討會。當前,沒有觀測到能夠表明沿南海海槽的大規模地震發生的可能性與平常相比相對較高的變化。",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "本報為訓練報。",
"試験": "本報為試報。"
"試験": "本報為試報。"
}
},
"Title": {
"Strings": {
"": "電文",
"": "資訊",
"北海道・三陸沖後発地震注意情報": "北海道、三陸外海餘震注意資訊",
"南海トラフ地震に関連する情報": "關於南海海槽地震的資訊",
"噴火に関する火山観測報": "關於火山噴發的火山觀測報",

Some files were not shown because too many files have changed in this diff Show More