Skip to content

Commit d487f32

Browse files
committed
refactoring
1 parent 0f2fc0f commit d487f32

13 files changed

+816
-6
lines changed

README.md

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Earthquake Map
22

33
<p style="text-align: center">
4-
<img src="assets/title.png">
4+
<img src="assets/title.png" width="45%">
5+
<img src="assets/震度速報.png" width="45%">
56
</p>
67

78
## TL;DR
@@ -31,20 +32,22 @@
3132
## Run
3233

3334
```bash
34-
# installs (need yarn and pipenv installed)
35+
# installs (need yarn and docker installed)
3536
yarn install
36-
pipenv install
3737

3838
# build
3939
yarn run build
4040

4141
# run server
42-
pipenv shell
43-
>>> python src/main.py
42+
docker-compose up -d
4443

4544
# connect to http://localhost:5000/
4645
```
4746

47+
## パラメータの説明
48+
49+
[パラメータの説明](./assets/parameters.md)
50+
4851
## 各震度の色
4952

5053
| 震度 ||
@@ -58,3 +61,9 @@ pipenv shell
5861
| 6弱 | ![#f03eb8](https://via.placeholder.com/15/f03eb8/000000?text=+) `#f03eb8` |
5962
| 6強 | ![#f03eb8](https://via.placeholder.com/15/f03eb8/000000?text=+) `#f03eb8` |
6063
| 7 | ![#b347ed](https://via.placeholder.com/15/b347ed/000000?text=+) `#b347ed` |
64+
65+
## ライセンス
66+
67+
MIT
68+
69+
使用した場合、issueにて報告してくれるとありがたいです。

assets/parameters.md

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# URL GETパラメータの説明
2+
3+
##
4+
5+
- 震度分布図(観測地域)
6+
- `http://localhost:5000/?ti=震源・震度情報&point1=36.251:139.9323,38.1715:140.8918&epi=36.544949,140.712890`
7+
- [TohokuEarthquake](../tools/TohokuEarthquake.txt)
8+
- 震度速報(細分区域タイル塗りつぶし)
9+
- `http://localhost:5000/?ti=震度速報&areas1=300,320&epi=36.544949,140.712890`
10+
- `http://localhost:5000/?ti=震度速報&areas6l=442,443&areas5u=440,441&areas4=342,350,356,360,361,411,412,421,422,431,451&areas3=320,321,330,331,332,341,351,354,355,357,380,391,400,401,420,430,432,450,460,500,501,540`
11+
- 海外地震に関する情報
12+
- `http://localhost:5000/?ti=海外地震に関する情報&epi=3.688855,119.882812`
13+
14+
## 個別の説明
15+
16+
- `ti`
17+
- タイトル。画面左上に表示される文字。
18+
- `epi`
19+
- 震源地
20+
- 震源地が海外の場合は自動的に世界地図になります。
21+
- 緯度、経度をスペースなしの`,`で区切る。
22+
- 例: `38.685509,142.734375`
23+
- `areas1`
24+
- 細分区域タイルの塗りつぶし。震度1
25+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
26+
- `areas2`
27+
- 細分区域タイルの塗りつぶし。震度2
28+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
29+
- `areas3`
30+
- 細分区域タイルの塗りつぶし。震度3
31+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
32+
- `areas4`
33+
- 細分区域タイルの塗りつぶし。震度4
34+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
35+
- `areas5l`
36+
- 細分区域タイルの塗りつぶし。震度5弱
37+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
38+
- `areas5u`
39+
- 細分区域タイルの塗りつぶし。震度5強
40+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
41+
- `areas6l`
42+
- 細分区域タイルの塗りつぶし。震度6弱
43+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
44+
- `areas6u`
45+
- 細分区域タイルの塗りつぶし。震度6強
46+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
47+
- `areas7`
48+
- 細分区域タイルの塗りつぶし。震度7
49+
- 気象庁の細分区域コードをスペースなしの`,`で区切る
50+
- `point1`
51+
- 震度観測点。震度1
52+
- 緯度、経度をスペースなし`:`で区切る。
53+
- それらの緯度経度をスペースなしの`,`で区切る。
54+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
55+
- `point2`
56+
- 震度観測点。震度2
57+
- 緯度、経度をスペースなし`:`で区切る。
58+
- それらの緯度経度をスペースなしの`,`で区切る。
59+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
60+
- `point3`
61+
- 震度観測点。震度3
62+
- 緯度、経度をスペースなし`:`で区切る。
63+
- それらの緯度経度をスペースなしの`,`で区切る。
64+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
65+
- `point4`
66+
- 震度観測点。震度4
67+
- 緯度、経度をスペースなし`:`で区切る。
68+
- それらの緯度経度をスペースなしの`,`で区切る。
69+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
70+
- `point5l`
71+
- 震度観測点。震度5弱
72+
- 緯度、経度をスペースなし`:`で区切る。
73+
- それらの緯度経度をスペースなしの`,`で区切る。
74+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
75+
- `point5u`
76+
- 震度観測点。震度5強
77+
- 緯度、経度をスペースなし`:`で区切る。
78+
- それらの緯度経度をスペースなしの`,`で区切る。
79+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
80+
- `point6l`
81+
- 震度観測点。震度6弱
82+
- 緯度、経度をスペースなし`:`で区切る。
83+
- それらの緯度経度をスペースなしの`,`で区切る。
84+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
85+
- `point6u`
86+
- 震度観測点。震度6強
87+
- 緯度、経度をスペースなし`:`で区切る。
88+
- それらの緯度経度をスペースなしの`,`で区切る。
89+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)
90+
- `point7`
91+
- 震度観測点。震度7
92+
- 緯度、経度をスペースなし`:`で区切る。
93+
- それらの緯度経度をスペースなしの`,`で区切る。
94+
- 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される)

assets/title.png

-853 KB
Loading

assets/震度速報.png

721 KB
Loading

src/ts/color.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
/**
2+
* @author: Yuto Watanabe
3+
* @version: 1.0.0
4+
*
5+
* Copyright (c) 2020 Earthquake alert
6+
*/
7+
18
export function color(type: string): string {
29
const colorData : {[key: string]: string} = {
310
'land': '#262626',

src/ts/convertPosition.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
/**
2+
* @author: Yuto Watanabe
3+
* @version: 1.0.0
4+
*
5+
* Copyright (c) 2020 Earthquake alert
6+
*/
7+
18
interface Data {
29
lat: string,
310
lon: string,

src/ts/index.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
/**
2+
* @author: Yuto Watanabe
3+
* @version: 1.0.0
4+
*
5+
* Copyright (c) 2020 Earthquake alert
6+
*/
7+
18
import 'ol/ol.css';
29
import Map from 'ol/Map';
310
import View from 'ol/View';

src/ts/mapStyle.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
/**
2+
* @author: Yuto Watanabe
3+
* @version: 1.0.0
4+
*
5+
* Copyright (c) 2020 Earthquake alert
6+
*/
7+
18
import {Style, Stroke, Fill, Icon} from 'ol/style';
29
import RenderFeature from 'ol/render/Feature';
310
import Feature from 'ol/Feature';

tools/TohokuEarthquake.txt

+1
Large diffs are not rendered by default.

tools/XMLtoURL.py

+145
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
'''
2+
@author: Yuto Watanabe
3+
@version: 1.0.0
4+
5+
Copyright (c) 2020 Earthquake alert
6+
'''
7+
import os
8+
import time
9+
10+
import xmltodict
11+
12+
13+
def main():
14+
'''
15+
convert xml to json.
16+
17+
Args:
18+
file_num (int): file number.
19+
'''
20+
start = time.time()
21+
22+
xml_fp = 'tools/sample.xml'
23+
24+
with open(xml_fp) as f:
25+
text_list = f.readlines()
26+
27+
text = '\n'.join(text_list)
28+
29+
xml_root = xmltodict.parse(text)
30+
31+
output = convert_report(xml_root)
32+
33+
url = 'http://localhost:5000/?'
34+
35+
url += f'ti={output["title"]}'
36+
37+
for areas in output['areas']:
38+
codes = []
39+
si = ''
40+
for code in output['areas'][areas]:
41+
codes.append(str(code))
42+
43+
if areas == '震度7':
44+
si = '7'
45+
elif areas == '震度6強':
46+
si = '6u'
47+
elif areas == '震度6弱':
48+
si = '6l'
49+
elif areas == '震度5強':
50+
si = '5u'
51+
elif areas == '震度5弱':
52+
si = '6l'
53+
elif areas == '震度4':
54+
si = '4'
55+
elif areas == '震度3':
56+
si = '3'
57+
url += f'&areas{si}={",".join(codes)}'
58+
59+
# save url
60+
with open(os.path.join(os.path.dirname(xml_fp), 'converted.txt'), mode='w') as contents:
61+
contents.write(url)
62+
63+
print(f'Time: {time.time() - start}')
64+
65+
66+
def convert_report(earthquake):
67+
'''
68+
Extract the XML of "Seismic intensity bulletin" to json.
69+
Args:
70+
earthquake (Any): XML data.
71+
cache_file_path (str): cache file path.
72+
Returns:
73+
Any: The extracted data.
74+
'''
75+
title = earthquake['Report']['Head']['Title']
76+
77+
explanation = []
78+
explanation.append(earthquake['Report']['Head']['Headline']['Text'])
79+
try:
80+
explanation.append(earthquake['Report']['Body']['Comments']['ForecastComment']['Text'])
81+
except KeyError:
82+
pass
83+
84+
areas = earthquake['Report']['Head']['Headline']['Information']
85+
if isinstance(areas, list):
86+
information = areas[0]['Item']
87+
else:
88+
information = areas['Item']
89+
90+
formated_areas = {}
91+
if isinstance(information, list):
92+
max_seismic_intensity = information[0]['Kind']['Name']
93+
for individual in information:
94+
seismic_intensity = individual['Kind']['Name']
95+
areas = []
96+
if isinstance(individual['Areas']['Area'], list):
97+
for area in individual['Areas']['Area']:
98+
areas.append(area['Code'])
99+
else:
100+
areas.append(individual['Areas']['Area']['Name'])
101+
formated_areas[seismic_intensity] = areas
102+
else:
103+
max_seismic_intensity = information['Kind']['Name']
104+
seismic_intensity = information['Kind']['Name']
105+
areas = []
106+
if isinstance(information['Areas']['Area'], list):
107+
for area in information['Areas']['Area']:
108+
areas.append(area['Name'])
109+
else:
110+
areas.append(information['Areas']['Area']['Code'])
111+
formated_areas[seismic_intensity] = areas
112+
113+
if max_seismic_intensity in {'震度1', '震度1'}:
114+
formated_seismic_intensity = '1'
115+
elif max_seismic_intensity in {'震度2', '震度2'}:
116+
formated_seismic_intensity = '2'
117+
elif max_seismic_intensity in {'震度3', '震度3'}:
118+
formated_seismic_intensity = '3'
119+
elif max_seismic_intensity in {'震度4', '震度4'}:
120+
formated_seismic_intensity = '4'
121+
elif max_seismic_intensity in {'震度5弱', '震度5弱'}:
122+
formated_seismic_intensity = '5-'
123+
elif max_seismic_intensity in {'震度5強', '震度5強'}:
124+
formated_seismic_intensity = '5+'
125+
elif max_seismic_intensity in {'震度6弱', '震度6弱'}:
126+
formated_seismic_intensity = '6-'
127+
elif max_seismic_intensity in {'震度6強', '震度6強'}:
128+
formated_seismic_intensity = '6+'
129+
elif max_seismic_intensity in {'震度7', '震度7'}:
130+
formated_seismic_intensity = '7'
131+
else:
132+
formated_seismic_intensity = '0'
133+
134+
output = {
135+
'title': title,
136+
'max_seismic_intensity': formated_seismic_intensity,
137+
'explanation': explanation,
138+
'areas': formated_areas
139+
}
140+
141+
return output
142+
143+
144+
if __name__ == "__main__":
145+
main()

tools/convertSample.json

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
[
2+
{
3+
"title": "震度速報",
4+
"max_seismic_intensity": "6-",
5+
"explanation": [
6+
"11日05時07分ころ、地震による強い揺れを感じました。震度3以上が観測された地域をお知らせします。"
7+
],
8+
"areas": {
9+
"6l": [
10+
"442",
11+
"443"
12+
],
13+
"5u": [
14+
"440",
15+
"441"
16+
],
17+
"4": [
18+
"342",
19+
"350",
20+
"356",
21+
"360",
22+
"361",
23+
"411",
24+
"412",
25+
"421",
26+
"422",
27+
"431",
28+
"451"
29+
],
30+
"3": [
31+
"320",
32+
"321",
33+
"330",
34+
"331",
35+
"332",
36+
"341",
37+
"351",
38+
"354",
39+
"355",
40+
"357",
41+
"380",
42+
"391",
43+
"400",
44+
"401",
45+
"420",
46+
"430",
47+
"432",
48+
"450",
49+
"460",
50+
"500",
51+
"501",
52+
"540"
53+
]
54+
}
55+
}
56+
]

tools/converted.txt

+1-1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)