jma_code 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +49 -0
- data/data/20130523_AreaMarineAJ/AreaMarineA.csv +78 -0
- data/data/20130523_AreaMarineAJ/AreaMarineJ.csv +67 -0
- data/data/20201026_WmoObservingStations.csv +176 -0
- data/data/20240216_AreaInformationCity-AreaForecastLocalM/AreaForecastLocalM/357/274/210/343/202/263/343/203/274/343/203/210/343/202/231/350/241/250/357/274/211.csv +616 -0
- data/data/20240216_AreaInformationCity-AreaForecastLocalM/AreaForecastLocalM/357/274/210/351/226/242/344/277/202/350/241/250/343/200/200/347/253/234/345/267/273/346/263/250/346/204/217/346/203/205/345/240/261.csv +391 -0
- data/data/20240216_AreaInformationCity-AreaForecastLocalM/AreaForecastLocalM/357/274/210/351/226/242/344/277/202/350/241/250/343/200/200/350/255/246/345/240/261/343/203/273/346/263/250/346/204/217/345/240/261.csv +399 -0
- data/data/20240216_AreaInformationCity-AreaForecastLocalM/AreaInformationCity.csv +2094 -0
- data/data/20240315_RiverOffice.csv +163 -0
- data/data/20240325_PointAmedas/ame_master.csv +1378 -0
- data/data/20240325_PointAmedas/snow_master.csv +341 -0
- data/data/20240418_WaterLevelStation.csv +641 -0
- data/data/Volcano_Earthquake/20240618_AdditionalCommentEarthquake.csv +72 -0
- data/data/Volcano_Earthquake/20240618_AreaEpicenter.csv +348 -0
- data/data/Volcano_Earthquake/20240618_AreaEpicenterAbbreviation.csv +171 -0
- data/data/Volcano_Earthquake/20240618_AreaEpicenterDetail.csv +762 -0
- data/data/Volcano_Earthquake/20240618_AreaEpicenterSuppliment.csv +46 -0
- data/data/Volcano_Earthquake/20240618_AreaForecastEEW.csv +19 -0
- data/data/Volcano_Earthquake/20240618_AreaForecastLocalEEW.csv +61 -0
- data/data/Volcano_Earthquake/20240618_AreaForecastLocalE_ AreaInformationCity_ PointSeismicIntensity.csv +4377 -0
- data/data/Volcano_Earthquake/20240618_AreaForecastLocalE_AreaInformationCity_PointRealtimeIntensity.csv +666 -0
- data/data/Volcano_Earthquake/20240618_AreaForecastLocalE_PointSeismicLgIntensity.csv +708 -0
- data/data/Volcano_Earthquake/20240618_AreaInformationPrefectureEarthquake.csv +52 -0
- data/data/Volcano_Earthquake/20240618_AreaTsunami.csv +103 -0
- data/data/Volcano_Earthquake/20240618_CoastTsunami.csv +70 -0
- data/data/Volcano_Earthquake/20240618_EarthquakeForecast.csv +11 -0
- data/data/Volcano_Earthquake/20240618_EarthquakeInformation.csv +28 -0
- data/data/Volcano_Earthquake/20240618_EarthquakeWarning.csv +7 -0
- data/data/Volcano_Earthquake/20240618_PointTsunami.csv +560 -0
- data/data/Volcano_Earthquake/20240618_PointVolcano.csv +125 -0
- data/data/Volcano_Earthquake/20240618_TokaiInformation.csv +8 -0
- data/data/Volcano_Earthquake/20240618_TsunamiWarning.csv +14 -0
- data/data/Volcano_Earthquake/20240618_VolcanicWarning.csv +55 -0
- data/lib/jma_code/area_flood_forecast.rb +30 -0
- data/lib/jma_code/area_forecast_local.rb +52 -0
- data/lib/jma_code/area_information_city.rb +97 -0
- data/lib/jma_code/area_marine.rb +91 -0
- data/lib/jma_code/ext/blank.rb +61 -0
- data/lib/jma_code/point_amedas.rb +134 -0
- data/lib/jma_code/river_office.rb +30 -0
- data/lib/jma_code/version.rb +3 -0
- data/lib/jma_code/water_level_station.rb +44 -0
- data/lib/jma_code/wmo_observing_station.rb +68 -0
- data/lib/jma_code.rb +13 -0
- metadata +100 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
"PointVolcano コード表
|
2
|
+
(種別:""火山名"")
|
3
|
+
",,,,,,
|
4
|
+
PointVolcano,,,,,,
|
5
|
+
Code,Name,ふりがな,備考,,,
|
6
|
+
101,知床硫黄山,しれとこいおうざん,,,,
|
7
|
+
102,羅臼岳,らうすだけ,,,,
|
8
|
+
103,摩周,ましゅう,,,,
|
9
|
+
104,アトサヌプリ,あとさぬぷり,,,,
|
10
|
+
105,雌阿寒岳,めあかんだけ,,,,
|
11
|
+
106,丸山,まるやま,,,,
|
12
|
+
107,大雪山,たいせつざん,,,,
|
13
|
+
108,十勝岳,とかちだけ,,,,
|
14
|
+
109,樽前山,たるまえさん,,,,
|
15
|
+
110,恵庭岳,えにわだけ,,,,
|
16
|
+
111,倶多楽,くったら,,,,
|
17
|
+
112,有珠山,うすざん,,,,
|
18
|
+
113,北海道駒ヶ岳,ほっかいどうこまがたけ,,,,
|
19
|
+
114,恵山,えさん,,,,
|
20
|
+
115,渡島大島,おしまおおしま,,,,
|
21
|
+
116,利尻山,りしりざん,,,,
|
22
|
+
117,羊蹄山,ようていさん,,,,
|
23
|
+
118,ニセコ,にせこ,,,,
|
24
|
+
119,天頂山,てんちょうざん,,,,
|
25
|
+
120,雄阿寒岳,おあかんだけ,,,,
|
26
|
+
151,茂世路岳,もよろだけ,,,,
|
27
|
+
152,散布山,ちりっぷさん,,,,
|
28
|
+
153,指臼岳,さしうすだけ,,,,
|
29
|
+
154,小田萌山,おだもいさん,,,,
|
30
|
+
155,択捉焼山,えとろふやけやま,,,,
|
31
|
+
156,択捉阿登佐岳,えとろふあとさぬぷり,,,,
|
32
|
+
157,ベルタルベ山,べるたるべさん,,,,
|
33
|
+
158,爺爺岳,ちゃちゃだけ,,,,
|
34
|
+
159,羅臼山,らうすさん,,,,
|
35
|
+
160,泊山,とまりやま,,,,
|
36
|
+
161,ルルイ岳,るるいだけ,,,,
|
37
|
+
201,恐山,おそれざん,,,,
|
38
|
+
202,岩木山,いわきさん,,,,
|
39
|
+
203,八甲田山,はっこうださん,,,,
|
40
|
+
204,十和田,とわだ,,,,
|
41
|
+
205,秋田焼山,あきたやけやま,,,,
|
42
|
+
206,八幡平,はちまんたい,,,,
|
43
|
+
207,岩手山,いわてさん,,,,
|
44
|
+
208,秋田駒ヶ岳,あきたこまがたけ,,,,
|
45
|
+
209,鳥海山,ちょうかいさん,,,,
|
46
|
+
210,栗駒山,くりこまやま,,,,
|
47
|
+
211,鳴子,なるこ,,,,
|
48
|
+
212,蔵王山,ざおうざん(ざおうさん),2つのふりがなを併記,,,
|
49
|
+
213,吾妻山,あづまやま,,,,
|
50
|
+
214,安達太良山,あだたらやま,,,,
|
51
|
+
215,磐梯山,ばんだいさん,,,,
|
52
|
+
216,燧ヶ岳,ひうちがたけ,,,,
|
53
|
+
217,肘折,ひじおり,,,,
|
54
|
+
218,沼沢,ぬまざわ,,,,
|
55
|
+
301,那須岳,なすだけ,,,,
|
56
|
+
302,日光白根山,にっこうしらねさん,,,,
|
57
|
+
303,赤城山,あかぎさん,,,,
|
58
|
+
304,榛名山,はるなさん,,,,
|
59
|
+
305,草津白根山,くさつしらねさん,,,,
|
60
|
+
306,浅間山,あさまやま,,,,
|
61
|
+
307,新潟焼山,にいがたやけやま,,,,
|
62
|
+
308,妙高山,みょうこうさん,,,,
|
63
|
+
309,弥陀ヶ原,みだがはら,,,,
|
64
|
+
310,焼岳,やけだけ,,,,
|
65
|
+
311,乗鞍岳,のりくらだけ,,,,
|
66
|
+
312,御嶽山,おんたけさん,,,,
|
67
|
+
313,白山,はくさん,,,,
|
68
|
+
314,富士山,ふじさん,,,,
|
69
|
+
315,箱根山,はこねやま,,,,
|
70
|
+
316,伊豆東部火山群,いずとうぶかざんぐん,,,,
|
71
|
+
317,伊豆大島,いずおおしま,,,,
|
72
|
+
318,新島,にいじま,,,,
|
73
|
+
319,神津島,こうづしま,,,,
|
74
|
+
320,三宅島,みやけじま,,,,
|
75
|
+
321,八丈島,はちじょうじま,,,,
|
76
|
+
322,青ヶ島,あおがしま,,,,
|
77
|
+
323,ベヨネース列岩,べよねーすれつがん,,,,
|
78
|
+
324,須美寿島,すみすじま,,,,
|
79
|
+
325,伊豆鳥島,いずとりしま,,,,
|
80
|
+
326,西之島,にしのしま,,,,
|
81
|
+
327,海徳海山,かいとくかいざん,,,,
|
82
|
+
328,噴火浅根,ふんかあさね,,,,
|
83
|
+
329,硫黄島,いおうとう,,,,
|
84
|
+
330,北福徳堆,きたふくとくたい,,,,
|
85
|
+
331,福徳岡ノ場,ふくとくおかのば,,,,
|
86
|
+
333,高原山,たかはらやま,,,,
|
87
|
+
334,横岳,よこだけ,,,,
|
88
|
+
335,アカンダナ山,あかんだなやま,,,,
|
89
|
+
336,利島,としま,,,,
|
90
|
+
337,御蔵島,みくらじま,,,,
|
91
|
+
338,孀婦岩,そうふがん,,,,
|
92
|
+
339,海形海山,かいかたかいざん,,,,
|
93
|
+
340,南日吉海山,みなみひよしかいざん,,,,
|
94
|
+
341,日光海山,にっこうかいざん,,,,
|
95
|
+
342,男体山,なんたいさん,,,,
|
96
|
+
350,草津白根山(白根山(湯釜付近)),くさつしらねさん(しらねさん(ゆがまふきん)),,,,
|
97
|
+
351,草津白根山(本白根山),くさつしらねさん(もとしらねさん),,,,
|
98
|
+
401,三瓶山,さんべさん,,,,
|
99
|
+
502,九重山,くじゅうさん,,,,
|
100
|
+
503,阿蘇山,あそさん,,,,
|
101
|
+
504,雲仙岳,うんぜんだけ,,,,
|
102
|
+
505,霧島山,きりしまやま,,,,
|
103
|
+
506,桜島,さくらじま,,,,
|
104
|
+
507,開聞岳,かいもんだけ,,,,
|
105
|
+
508,薩摩硫黄島,さつまいおうじま,,,,
|
106
|
+
509,口永良部島,くちのえらぶじま,,,,
|
107
|
+
510,中之島,なかのしま,,,,
|
108
|
+
511,諏訪之瀬島,すわのせじま,,,,
|
109
|
+
512,阿武火山群,あぶかざんぐん,,,,
|
110
|
+
513,鶴見岳・伽藍岳,つるみだけ・がらんだけ,,,,
|
111
|
+
514,由布岳,ゆふだけ,,,,
|
112
|
+
515,福江火山群,ふくえかざんぐん,,,,
|
113
|
+
516,米丸・住吉池,よねまる・すみよしいけ,,,,
|
114
|
+
517,若尊,わかみこ,,,,
|
115
|
+
518,池田・山川,いけだ・やまがわ,,,,
|
116
|
+
519,口之島,くちのしま,,,,
|
117
|
+
550,霧島山(御鉢),きりしまやま(おはち),,,,
|
118
|
+
551,霧島山(新燃岳),きりしまやま(しんもえだけ),,,,
|
119
|
+
552,霧島山(えびの高原(硫黄山)周辺),きりしまやま(えびのこうげん(いおうやま)しゅうへん),,,,
|
120
|
+
553,霧島山(大幡池),きりしまやま(おおはたいけ),,,,
|
121
|
+
601,硫黄鳥島,いおうとりしま,,,,
|
122
|
+
602,西表島北北東海底火山,いりおもてじまほくほくとうかいていかざん,,,,
|
123
|
+
900,全国の活火山,ぜんこくのかつかざん,,,,
|
124
|
+
901,その他の活火山,そのたのかつかざん,,,,
|
125
|
+
902,新たな活火山,あらたなかつかざん,,,,
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"TsunamiWarning コード表
|
2
|
+
(種別:""警報等情報要素/津波警報・注意報・予報"")",,,,,
|
3
|
+
TsunamiWarning,,,,,
|
4
|
+
Code,Name,備考,,,
|
5
|
+
00,津波なし,,,,
|
6
|
+
50,警報解除,大津波警報または津波警報の解除,,,
|
7
|
+
51,津波警報,,,,
|
8
|
+
52,大津波警報,,,,
|
9
|
+
53,大津波警報:発表,"大津波警報の新規発表または切替(移行措置用電文のCodeには""52""を記載する)",,,
|
10
|
+
60,津波注意報解除,,,,
|
11
|
+
62,津波注意報,,,,
|
12
|
+
71,津波予報(若干の海面変動),,,,
|
13
|
+
72,津波予報(若干の海面変動),津波注意報解除、津波予報(若干の海面変動)への切替,,,
|
14
|
+
73,津波予報(若干の海面変動),大津波警報または津波警報の解除、津波予報(若干の海面変動)への切替,,,
|
@@ -0,0 +1,55 @@
|
|
1
|
+
"VolcanicWarning コード表
|
2
|
+
(種別:""警報等情報要素/噴火警報・予報等"")
|
3
|
+
",,,,,
|
4
|
+
VolcanicWarning,,,,,
|
5
|
+
Code,Name,備考,,,
|
6
|
+
01,噴火警報,,,,
|
7
|
+
02,火口周辺警報,,,,
|
8
|
+
03,噴火警報(周辺海域),,,,
|
9
|
+
04,噴火予報:警報解除,,,,
|
10
|
+
05,噴火予報,,,,
|
11
|
+
06,降灰予報(定時),,,,
|
12
|
+
07,降灰予報(速報),,,,
|
13
|
+
08,降灰予報(詳細),,,,
|
14
|
+
11,レベル1(活火山であることに留意),,,,
|
15
|
+
12,レベル2(火口周辺規制),,,,
|
16
|
+
13,レベル3(入山規制),,,,
|
17
|
+
14,レベル4(高齢者等避難),,,,
|
18
|
+
15,レベル5(避難),,,,
|
19
|
+
21,活火山であることに留意,,,,
|
20
|
+
22,火口周辺危険,,,,
|
21
|
+
23,入山危険,,,,
|
22
|
+
24,山麓厳重警戒,,,,
|
23
|
+
25,居住地域厳重警戒,,,,
|
24
|
+
31,海上警報(噴火警報),,,,
|
25
|
+
32,海上警報(噴火警報解除),,,,
|
26
|
+
33,海上予報(噴火予報),,,,
|
27
|
+
35,活火山であることに留意(海底火山),,,,
|
28
|
+
36,周辺海域警戒,,,,
|
29
|
+
41 ,噴火警報:避難等,,,,
|
30
|
+
42,噴火警報:入山規制等,,,,
|
31
|
+
43,火口周辺警報:入山規制等,,,,
|
32
|
+
44,噴火警報(周辺海域):周辺海域警戒,,,,
|
33
|
+
45,活火山であることに留意,,,,
|
34
|
+
46,噴火警報:当該居住地域厳重警戒,,,,
|
35
|
+
47,噴火警報:当該山麓厳重警戒,噴火警報(山麓)の場合、46に代えて使用する。,,,
|
36
|
+
48,噴火警報:火口周辺警戒,,,,
|
37
|
+
49,火口周辺警報:火口周辺警戒,,,,
|
38
|
+
51,爆発,,,,
|
39
|
+
52,噴火,,,,
|
40
|
+
53,噴火開始,平成26年12月から運用上使用しない,,,
|
41
|
+
54,連続噴火継続,,,,
|
42
|
+
55,連続噴火停止,,,,
|
43
|
+
56,噴火多発,,,,
|
44
|
+
61,爆発したもよう,,,,
|
45
|
+
62,噴火したもよう,,,,
|
46
|
+
63,噴火開始したもよう,平成26年12月から運用上使用しない,,,
|
47
|
+
64,連続噴火が継続しているもよう,,,,
|
48
|
+
65,連続噴火は停止したもよう,,,,
|
49
|
+
70,降灰,,,,
|
50
|
+
71,少量の降灰,,,,
|
51
|
+
72,やや多量の降灰,,,,
|
52
|
+
73,多量の降灰,,,,
|
53
|
+
75,小さな噴石の落下,,,,
|
54
|
+
91,不明,,,,
|
55
|
+
99,その他の現象,,,,
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "csv"
|
2
|
+
|
3
|
+
module JMACode
|
4
|
+
class AreaFloodForecast < Struct.new(
|
5
|
+
:code, :name, :name_phonetic,
|
6
|
+
keyword_init: true
|
7
|
+
)
|
8
|
+
HEADERS = %i(code name name_phonetic)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def load_20230105(&block)
|
12
|
+
path = File.join(File.dirname(__FILE__), "../../data/20230105_AreaFloodForecast.csv")
|
13
|
+
File.open(path) do |f|
|
14
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
15
|
+
if block_given?
|
16
|
+
yield(csv)
|
17
|
+
else
|
18
|
+
load(csv, num_headers: 3, &block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def load(csv, num_headers: 3)
|
24
|
+
csv.drop(num_headers).map do |row|
|
25
|
+
new(code: row[:code], name: row[:name], name_phonetic: row[:name_phonetic])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
module JMACode
|
3
|
+
using Blank
|
4
|
+
|
5
|
+
class AreaForecastLocal < Struct.new(
|
6
|
+
:code, :name, :name_phonetic, :used_by,
|
7
|
+
keyword_init: true
|
8
|
+
)
|
9
|
+
HEADERS = %i(
|
10
|
+
code
|
11
|
+
name
|
12
|
+
name_phonetic
|
13
|
+
)
|
14
|
+
|
15
|
+
class << self
|
16
|
+
attr_accessor :area_information_cities
|
17
|
+
|
18
|
+
def load_20240216(&block)
|
19
|
+
path = File.join(File.dirname(__FILE__), "../../data/20240216_AreaInformationCity-AreaForecastLocalM/AreaForecastLocalM(コード表).csv")
|
20
|
+
File.open(path) do |f|
|
21
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
22
|
+
if block_given?
|
23
|
+
yield(csv)
|
24
|
+
else
|
25
|
+
load(csv, num_headers: 3, &block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def load(csv, num_headers: 3)
|
31
|
+
list = []
|
32
|
+
csv.each.with_index do |row, i|
|
33
|
+
next if i < num_headers
|
34
|
+
list << build_by_csv_row(row)
|
35
|
+
end
|
36
|
+
list
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_by_csv_row(row)
|
40
|
+
new(
|
41
|
+
code: row[:code],
|
42
|
+
name: row[:name],
|
43
|
+
name_phonetic: row[:name_phonetic],
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def area_information_city
|
49
|
+
@area_information_city ||= (self.class.area_information_cities || []).find{|x| x.area_forecast_local_code == code}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
module JMACode
|
3
|
+
using Blank
|
4
|
+
|
5
|
+
class AreaInformationCity < Struct.new(
|
6
|
+
:code, :name, :alt_name, :alt_name_phonetic,
|
7
|
+
:area_forecast_local_code, :used_by,
|
8
|
+
keyword_init: true
|
9
|
+
)
|
10
|
+
HEADERS = %i(
|
11
|
+
code
|
12
|
+
name
|
13
|
+
name_used_by_weather
|
14
|
+
name_phonetic_used_by_weather
|
15
|
+
area_forecast_local_code
|
16
|
+
used_by_weather_alert
|
17
|
+
used_by_tornado_alert
|
18
|
+
used_by_long_surge_alert
|
19
|
+
used_by_short_surge_alert
|
20
|
+
used_by_landslide_alert
|
21
|
+
used_by_flood_alert
|
22
|
+
name_used_by_earthquake
|
23
|
+
name_phonetic_used_by_earthquake
|
24
|
+
name_used_by_volcano
|
25
|
+
name_phonetic_used_by_volcano
|
26
|
+
name_used_by_uv
|
27
|
+
name_phonetic_used_by_uv
|
28
|
+
name_used_by_rainstorm_alert
|
29
|
+
name_phonetic_used_by_rainstorm_alert
|
30
|
+
)
|
31
|
+
|
32
|
+
class << self
|
33
|
+
attr_accessor :area_forecast_locals
|
34
|
+
|
35
|
+
def load_20240216(&block)
|
36
|
+
path = File.join(File.dirname(__FILE__), "../../data/20240216_AreaInformationCity-AreaForecastLocalM/AreaInformationCity.csv")
|
37
|
+
File.open(path) do |f|
|
38
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
39
|
+
if block_given?
|
40
|
+
yield(csv)
|
41
|
+
else
|
42
|
+
load(csv, num_headers: 3, &block)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def load(csv, num_headers: 3)
|
48
|
+
list = []
|
49
|
+
csv.each.with_index do |row, i|
|
50
|
+
next if i < num_headers
|
51
|
+
list << build_by_csv_row(row)
|
52
|
+
end
|
53
|
+
list
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_by_csv_row(row)
|
57
|
+
alt_name, alt_name_phonetic = if row[:name_used_by_weather].present?
|
58
|
+
[row[:name_used_by_weather], row[:name_phonetic_used_by_weather]]
|
59
|
+
elsif row[:name_used_by_earthquake].present?
|
60
|
+
[row[:name_used_by_earthquake], row[:name_phonetic_used_by_earthquake]]
|
61
|
+
elsif row[:name_used_by_volcano].present?
|
62
|
+
[row[:name_used_by_volcano], row[:name_phonetic_used_by_volcano]]
|
63
|
+
elsif row[:name_used_by_uv].present?
|
64
|
+
[row[:name_used_by_uv], row[:name_phonetic_used_by_uv]]
|
65
|
+
elsif row[:name_used_by_rainstorm_alert].present?
|
66
|
+
[row[:name_used_by_rainstorm_alert], row[:name_phonetic_used_by_rainstorm_alert]]
|
67
|
+
else
|
68
|
+
[]
|
69
|
+
end
|
70
|
+
|
71
|
+
new(
|
72
|
+
code: row[:code],
|
73
|
+
name: row[:name],
|
74
|
+
alt_name: alt_name,
|
75
|
+
alt_name_phonetic: alt_name_phonetic,
|
76
|
+
area_forecast_local_code: row[:area_forecast_local_code],
|
77
|
+
used_by: [
|
78
|
+
row[:used_by_weather_alert] == '1' ? :weather_alert : nil,
|
79
|
+
row[:used_by_tornado_alert] == '1' ? :tornado_alert : nil,
|
80
|
+
row[:used_by_long_surge_alert] == '1' ? :long_surge_alert : nil,
|
81
|
+
row[:used_by_short_surge_alert] == '1' ? :short_surge_alert : nil,
|
82
|
+
row[:used_by_landslide_alert] == '1' ? :landslide_alert : nil,
|
83
|
+
row[:used_by_flood_alert] == '1' ? :flood_alert : nil,
|
84
|
+
row[:name_used_by_earthquake].present? ? :earthquake : nil,
|
85
|
+
row[:name_used_by_volcano].present? ? :volcano : nil,
|
86
|
+
row[:name_used_by_uv].present? ? :uv : nil,
|
87
|
+
row[:name_used_by_rainstorm_alert].present? ? :rainstorm_alert : nil,
|
88
|
+
].compact
|
89
|
+
)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def area_forecast_local
|
94
|
+
@area_forecast_local ||= (self.class.area_forecast_locals || []).find{|x| x.code == area_forecast_local_code}
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require "csv"
|
2
|
+
|
3
|
+
module JMACode::AreaMarine
|
4
|
+
class A < Struct.new(
|
5
|
+
:code, :name, :name_phonetic,
|
6
|
+
keyword_init: true
|
7
|
+
)
|
8
|
+
HEADERS = %i(
|
9
|
+
code
|
10
|
+
name
|
11
|
+
name_phonetic
|
12
|
+
)
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def load_20130523(&block)
|
16
|
+
path = File.join(File.dirname(__FILE__), "../../data/20130523_AreaMarineAJ/AreaMarineA.csv")
|
17
|
+
File.open(path) do |f|
|
18
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
19
|
+
if block_given?
|
20
|
+
yield(csv)
|
21
|
+
else
|
22
|
+
load(csv, num_headers: 3, &block)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def load(csv, num_headers: 2)
|
28
|
+
list = []
|
29
|
+
csv.each.with_index do |row, i|
|
30
|
+
next if i < num_headers
|
31
|
+
list << build_by_csv_row(row)
|
32
|
+
end
|
33
|
+
list
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_by_csv_row(row)
|
37
|
+
new(
|
38
|
+
code: row[:code],
|
39
|
+
name: row[:name],
|
40
|
+
name_phonetic: row[:name_phonetic],
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class J < Struct.new(
|
47
|
+
:code, :name, :name_phonetic, :used_by_local_marine_warning, :used_by_volcanic_marine_warning,
|
48
|
+
keyword_init: true
|
49
|
+
)
|
50
|
+
HEADERS = %i(
|
51
|
+
code
|
52
|
+
name
|
53
|
+
name_phonetic
|
54
|
+
used_by_local_marine_warning
|
55
|
+
used_by_volcanic_marine_warning
|
56
|
+
)
|
57
|
+
|
58
|
+
class << self
|
59
|
+
def load_20130523(&block)
|
60
|
+
path = File.join(File.dirname(__FILE__), "../../data/20130523_AreaMarineAJ/AreaMarineJ.csv")
|
61
|
+
File.open(path) do |f|
|
62
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
63
|
+
if block_given?
|
64
|
+
yield(csv)
|
65
|
+
else
|
66
|
+
load(csv, num_headers: 4, &block)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def load(csv, num_headers: 2)
|
72
|
+
list = []
|
73
|
+
csv.each.with_index do |row, i|
|
74
|
+
next if i < num_headers
|
75
|
+
list << build_by_csv_row(row)
|
76
|
+
end
|
77
|
+
list
|
78
|
+
end
|
79
|
+
|
80
|
+
def build_by_csv_row(row)
|
81
|
+
new(
|
82
|
+
code: row[:code],
|
83
|
+
name: row[:name],
|
84
|
+
name_phonetic: row[:name_phonetic],
|
85
|
+
used_by_local_marine_warning: row[:used_by_local_marine_warning],
|
86
|
+
used_by_volcanic_marine_warning: row[:used_by_volcanic_marine_warning],
|
87
|
+
)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module JMACode
|
2
|
+
module Blank
|
3
|
+
refine Object do
|
4
|
+
def blank?
|
5
|
+
respond_to?(:empty?) ? !!empty? : !self
|
6
|
+
end
|
7
|
+
|
8
|
+
def present?
|
9
|
+
!blank?
|
10
|
+
end
|
11
|
+
|
12
|
+
def presence
|
13
|
+
self if present?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
refine NilClass do
|
18
|
+
def blank?
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
refine FalseClass do
|
24
|
+
def blank?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
refine TrueClass do
|
30
|
+
def blank?
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
refine Array do
|
36
|
+
alias_method :blank?, :empty?
|
37
|
+
end
|
38
|
+
|
39
|
+
refine Hash do
|
40
|
+
alias_method :blank?, :empty?
|
41
|
+
end
|
42
|
+
|
43
|
+
refine String do
|
44
|
+
def blank?
|
45
|
+
empty? || /\A[[:space:]]*\z/.match?(self)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
refine Numeric do
|
50
|
+
def blank?
|
51
|
+
false
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
refine Time do
|
56
|
+
def blank?
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require "csv"
|
2
|
+
|
3
|
+
module JMACode::PointAmedas
|
4
|
+
class Ame < Struct.new(
|
5
|
+
:code, :name, :name_phonetic, :type, :government_branch_name, :managed_by,
|
6
|
+
:location, :lat, :lng, :altitude, :altitude_anemometer, :altitude_thermometer, :observation_started_since,
|
7
|
+
keyword_init: true
|
8
|
+
)
|
9
|
+
HEADERS = %i(
|
10
|
+
government_branch_name
|
11
|
+
code
|
12
|
+
type
|
13
|
+
name
|
14
|
+
name_phonetic
|
15
|
+
location
|
16
|
+
lat_major
|
17
|
+
lat_minor
|
18
|
+
lng_major
|
19
|
+
lng_minor
|
20
|
+
altitude
|
21
|
+
altitude_anemometer
|
22
|
+
altitude_thermometer
|
23
|
+
observation_started_since
|
24
|
+
memo1
|
25
|
+
memo2
|
26
|
+
)
|
27
|
+
|
28
|
+
class << self
|
29
|
+
def load_20240325(&block)
|
30
|
+
path = File.join(File.dirname(__FILE__), "../../data/20240325_PointAmedas/ame_master.csv")
|
31
|
+
File.open(path) do |f|
|
32
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
33
|
+
if block_given?
|
34
|
+
yield(csv)
|
35
|
+
else
|
36
|
+
load(csv, num_headers: 2, &block)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def load(csv, num_headers: 2)
|
42
|
+
managed_by = nil
|
43
|
+
list = []
|
44
|
+
csv.each.with_index do |row, i|
|
45
|
+
next if i < num_headers
|
46
|
+
branch = row[:government_branch_name]
|
47
|
+
if branch && branch.end_with?('管理')
|
48
|
+
managed_by = branch
|
49
|
+
else
|
50
|
+
list << build_by_csv_row(row, managed_by: managed_by)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
list
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_by_csv_row(row, managed_by: nil)
|
57
|
+
new(
|
58
|
+
code: row[:code],
|
59
|
+
name: row[:name],
|
60
|
+
name_phonetic: row[:name_phonetic],
|
61
|
+
managed_by: managed_by,
|
62
|
+
government_branch_name: row[:government_branch_name],
|
63
|
+
type: row[:type],
|
64
|
+
location: row[:location],
|
65
|
+
lat: "#{row[:lat_major]}.#{row[:lat_minor]}".to_f,
|
66
|
+
lng: "#{row[:lng_major]}.#{row[:lng_minor]}".to_f,
|
67
|
+
altitude: row[:altitude],
|
68
|
+
altitude_anemometer: row[:altitude_anemometer],
|
69
|
+
altitude_thermometer: row[:altitude_thermometer],
|
70
|
+
observation_started_since: row[:observation_started_since],
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class Snow < Struct.new(
|
77
|
+
:code, :name, :name_phonetic, :type, :government_branch_name,
|
78
|
+
:location, :lat, :lng, :altitude, :observation_started_since,
|
79
|
+
keyword_init: true
|
80
|
+
)
|
81
|
+
HEADERS = %i(
|
82
|
+
government_branch_name
|
83
|
+
code
|
84
|
+
type
|
85
|
+
name
|
86
|
+
name_phonetic
|
87
|
+
location
|
88
|
+
lat_major
|
89
|
+
lat_minor
|
90
|
+
lng_major
|
91
|
+
lng_minor
|
92
|
+
altitude
|
93
|
+
observation_started_since
|
94
|
+
)
|
95
|
+
|
96
|
+
class << self
|
97
|
+
def load_20240325(&block)
|
98
|
+
path = File.join(File.dirname(__FILE__), "../../data/20240325_PointAmedas/snow_master.csv")
|
99
|
+
File.open(path) do |f|
|
100
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
101
|
+
if block_given?
|
102
|
+
yield(csv)
|
103
|
+
else
|
104
|
+
load(csv, num_headers: 2, &block)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def load(csv, num_headers: 2)
|
110
|
+
list = []
|
111
|
+
csv.each.with_index do |row, i|
|
112
|
+
next if i < num_headers
|
113
|
+
list << build_by_csv_row(row)
|
114
|
+
end
|
115
|
+
list
|
116
|
+
end
|
117
|
+
|
118
|
+
def build_by_csv_row(row)
|
119
|
+
new(
|
120
|
+
code: row[:code],
|
121
|
+
name: row[:name],
|
122
|
+
name_phonetic: row[:name_phonetic],
|
123
|
+
government_branch_name: row[:government_branch_name],
|
124
|
+
type: row[:type],
|
125
|
+
location: row[:location],
|
126
|
+
lat: "#{row[:lat_major]}.#{row[:lat_minor]}".to_f,
|
127
|
+
lng: "#{row[:lng_major]}.#{row[:lng_minor]}".to_f,
|
128
|
+
altitude: row[:altitude],
|
129
|
+
observation_started_since: row[:observation_started_since],
|
130
|
+
)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "csv"
|
2
|
+
|
3
|
+
module JMACode
|
4
|
+
class RiverOffice < Struct.new(
|
5
|
+
:code, :name,
|
6
|
+
keyword_init: true
|
7
|
+
)
|
8
|
+
HEADERS = %i(code name)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def load_20240315(&block)
|
12
|
+
path = File.join(File.dirname(__FILE__), "../../data/20240315_RiverOffice.csv")
|
13
|
+
File.open(path) do |f|
|
14
|
+
csv = CSV.new(f, headers: HEADERS, row_sep: "\r\n")
|
15
|
+
if block_given?
|
16
|
+
yield(csv)
|
17
|
+
else
|
18
|
+
load(csv, num_headers: 3, &block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def load(csv, num_headers: 3)
|
24
|
+
csv.drop(num_headers).map do |row|
|
25
|
+
new(code: row[:code], name: row[:name])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|