├── src ├── static │ ├── js │ │ └── .gitkeep │ ├── icon │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5l.png │ │ ├── 5u.png │ │ ├── 6l.png │ │ ├── 6u.png │ │ ├── 7.png │ │ └── epi.png │ └── css │ │ └── style.css ├── main.py ├── templates │ └── index.html └── ts │ ├── color.ts │ ├── index.ts │ ├── convertPosition.ts │ └── mapStyle.ts ├── .eslintignore ├── .vscode └── settings.json ├── tools ├── epi.ai ├── 震度.ai ├── converted.txt ├── jsonToURL.py ├── convert.py ├── convertSample.json ├── XMLtoURL.py ├── jma_area_centroid.csv ├── sample.xml ├── converted.json └── TohokuEarthquake.txt ├── assets ├── title.png └── parameters.md ├── docker-compose.yml ├── Pipfile ├── Dockerfile ├── webpack.config.js ├── LICENSE ├── .eslintrc ├── package.json ├── README.md ├── tsconfig.json ├── .gitignore └── Pipfile.lock /src/static/js/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.js 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "liveServer.settings.port": 5501 3 | } -------------------------------------------------------------------------------- /tools/epi.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/tools/epi.ai -------------------------------------------------------------------------------- /tools/震度.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/tools/震度.ai -------------------------------------------------------------------------------- /assets/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/assets/title.png -------------------------------------------------------------------------------- /src/static/icon/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/1.png -------------------------------------------------------------------------------- /src/static/icon/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/2.png -------------------------------------------------------------------------------- /src/static/icon/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/3.png -------------------------------------------------------------------------------- /src/static/icon/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/4.png -------------------------------------------------------------------------------- /src/static/icon/5l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/5l.png -------------------------------------------------------------------------------- /src/static/icon/5u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/5u.png -------------------------------------------------------------------------------- /src/static/icon/6l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/6l.png -------------------------------------------------------------------------------- /src/static/icon/6u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/6u.png -------------------------------------------------------------------------------- /src/static/icon/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/7.png -------------------------------------------------------------------------------- /src/static/icon/epi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/earthquake-alert/Earthquake-map/HEAD/src/static/icon/epi.png -------------------------------------------------------------------------------- /tools/converted.txt: -------------------------------------------------------------------------------- 1 | http://localhost:8080/?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 2 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | map: 4 | container_name: EarthquakeMap 5 | build: . 6 | ports: 7 | - '127.0.0.1:8080:8080' 8 | tty: true 9 | command: python3 src/main.py 10 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | flake8 = "*" 8 | pylint = "*" 9 | mypy = "*" 10 | autopep8 = "*" 11 | 12 | [packages] 13 | flask = "*" 14 | 15 | [requires] 16 | python_version = "3.6" 17 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nikolaik/python-nodejs:python3.6-nodejs14 2 | 3 | COPY src /src 4 | COPY Pipfile /Pipfile 5 | COPY Pipfile.lock /Pipfile.lock 6 | COPY package.json /package.json 7 | COPY tsconfig.json /tsconfig.json 8 | COPY webpack.config.js /webpack.config.js 9 | COPY yarn.lock /yarn.lock 10 | 11 | RUN yarn install 12 | RUN yarn run build 13 | RUN pip install pipenv 14 | RUN pipenv install --system --deploy 15 | 16 | EXPOSE 8080 17 | -------------------------------------------------------------------------------- /src/main.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime, timedelta, timezone 2 | 3 | from flask import Flask, render_template, request 4 | 5 | app = Flask(__name__) 6 | 7 | 8 | @app.route('/') 9 | def root(): 10 | title = request.args.get('ti') or 'No data.' 11 | date = request.args.get('date') or None 12 | 13 | if date is None: 14 | jst = timezone(timedelta(hours=+9), 'JST') 15 | now = datetime.now(jst) 16 | else: 17 | now = datetime.strptime(str(date), r'%Y%m%d%H%M%S') 18 | 19 | return render_template('index.html', title=title, date=now.strftime('%Y年%m月%d日 %H:%M:%S')) 20 | 21 | 22 | if __name__ == "__main__": 23 | app.run(debug=False, host='0.0.0.0', port=8080) 24 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | mode: 'production', 5 | entry: './src/ts/index.ts', 6 | output: { 7 | path: path.join(__dirname, "./src/static/js"), 8 | filename: 'bundle.js' 9 | }, 10 | module: { 11 | rules: [ 12 | { 13 | test: /\.tsx?$/, 14 | use: 'ts-loader', 15 | exclude: /node_modules/ 16 | }, 17 | { 18 | test: /\.css$/, 19 | use: [ 20 | 'style-loader', 21 | 'css-loader' 22 | ] 23 | } 24 | ] 25 | }, 26 | resolve: { 27 | extensions: ['.ts', '.js'] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Earthquake Map 9 | 10 | 11 | 12 |
13 |
14 | {{title}} 15 |
16 |
17 | 発生日時: {{date}} 18 |
19 |
20 |
21 | 22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tools/jsonToURL.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | 4 | 5 | def main(path: str): 6 | url = 'http://localhost:5000/' 7 | with open(path, mode='r') as contents: 8 | json_body = json.load(contents) 9 | 10 | epi = json_body['epicenter'] 11 | url += f'?epi={epi[1]},{epi[0]}' 12 | 13 | areas = json_body['areas'] 14 | 15 | for si in areas: 16 | position = [] 17 | for element in areas[si]: 18 | position.append(f'{element[1]}:{element[0]}') 19 | url += f'&point{si}={",".join(position)}' 20 | 21 | # save url 22 | with open(os.path.join(os.path.dirname(path), 'converted.txt'), mode='w') as contents: 23 | contents.write(url) 24 | 25 | 26 | if __name__ == "__main__": 27 | main('tools/TohokuEarthquake.json') 28 | -------------------------------------------------------------------------------- /tools/convert.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import json 3 | import os 4 | 5 | 6 | def main(path: str): 7 | converted_dict = {} 8 | converted_txt = '{\n' 9 | 10 | with open(path) as fp: 11 | reader = csv.reader(fp) 12 | for element in reader: 13 | converted_dict[element[0]] = [element[1], element[2], element[3]] 14 | converted_txt += (f'\'{element[0]}\': ' + 15 | '{' + f'lat: \'{element[3]}\', lon: \'{element[2]}\', name: \'{element[1]}\',' + '},\n') 16 | 17 | with open(os.path.join(os.path.dirname(path), 'converted.json'), mode='w') as contents: 18 | json.dump(converted_dict, contents, indent=4, ensure_ascii=False) 19 | 20 | converted_txt += '}' 21 | with open(os.path.join(os.path.dirname(path), 'converted.ts'), mode='w') as contents: 22 | contents.write(converted_txt) 23 | 24 | 25 | if __name__ == "__main__": 26 | main('tools/jma_area_centroid.csv') 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Earthquake alert 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/ts/color.ts: -------------------------------------------------------------------------------- 1 | /*! 2 | * @author: Yuto Watanabe 3 | * @version: 1.0.0 4 | * 5 | * Copyright (c) 2020 Earthquake alert 6 | */ 7 | 8 | export function color(type: string): string { 9 | const colorData : {[key: string]: string} = { 10 | 'land': '#262626', 11 | 'minimapLand': '#b8b8b8', 12 | '1': '#54cfe8', 13 | '2': '#64e375', 14 | '3': '#f0ed4d', 15 | '4': '#eb9423', 16 | '5l': '#f74d4d', 17 | '5u': '#f74d4d', 18 | '6l': '#f03eb8', 19 | '6u': '#f03eb8', 20 | '7': '#b347ed', 21 | '1Stroke': '#62dfe3', 22 | '2Stroke': '#75e089', 23 | '3Stroke': '#e3df6f', 24 | '4Stroke': '#edab74', 25 | '5lStroke': '#eb6767', 26 | '5uStroke': '#eb6767', 27 | '6lStroke': '#f071d4', 28 | '6uStroke': '#f071d4', 29 | '7Stroke': '#b16aeb', 30 | 'prefCountryStroke': '#a6a6a6', 31 | 'areaStroke': '#4a4a4a', 32 | 'waterArea': '#5d7991', 33 | 'minimapStroke': '#ffffff', 34 | }; 35 | const isColor = colorData[type]; 36 | if (typeof isColor != 'undefined'){ 37 | return isColor; 38 | } 39 | return '#f73325'; 40 | } 41 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint:recommended", 4 | "plugin:@typescript-eslint/recommended", 5 | "plugin:@typescript-eslint/eslint-recommended", 6 | "plugin:import/errors" 7 | ], 8 | "plugins": [ 9 | "@typescript-eslint", 10 | "import" 11 | ], 12 | "parser": "@typescript-eslint/parser", 13 | "parserOptions": { 14 | "sourceType": "module", 15 | "project": "./tsconfig.json" 16 | }, 17 | "env": { 18 | "browser": true, 19 | "node": true, 20 | "es6": true 21 | }, 22 | "settings": { 23 | "import/resolver": { 24 | "node": { 25 | "extensions": [ 26 | ".ts" 27 | ] 28 | } 29 | } 30 | }, 31 | "rules": { 32 | // sort import 33 | "import/no-unresolved": "off", 34 | "sort-imports": 0, 35 | "import/order": [ 36 | 2, 37 | { 38 | "alphabetize": { 39 | "order": "asc" 40 | } 41 | } 42 | ], 43 | "semi": [ 44 | "error", 45 | "always" 46 | ] 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "earthquake-map", 3 | "version": "1.0.0", 4 | "private": true, 5 | "description": "Display of seismic intensity distribution map.", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/earthquake-alert/Earthquake-map" 9 | }, 10 | "author": { 11 | "name": "Yuto Watanabe", 12 | "email": "yuto.w51942@gmail.com", 13 | "url": "https://github.com/yuto51942" 14 | }, 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/earthquake-alert/Earthquake-map/issues" 18 | }, 19 | "dependencies": { 20 | "@types/fs-extra": "^9.0.1", 21 | "@types/node": "^14.0.27", 22 | "@types/ol": "^6.3.1", 23 | "csv-parse": "^4.11.1", 24 | "fs": "^0.0.1-security", 25 | "ol": "^6.4.2", 26 | "typescript": "^3.9.7" 27 | }, 28 | "scripts": { 29 | "build": "webpack", 30 | "watch": "webpack -w", 31 | "tsc": "tsc" 32 | }, 33 | "devDependencies": { 34 | "@types/eslint": "^7.2.0", 35 | "@typescript-eslint/eslint-plugin": "^3.9.1", 36 | "@typescript-eslint/parser": "^3.9.1", 37 | "css-loader": "^4.1.1", 38 | "eslint": "^7.7.0", 39 | "eslint-plugin-import": "^2.22.0", 40 | "style-loader": "^1.2.1", 41 | "ts-loader": "^8.0.1", 42 | "tsc": "^1.20150623.0", 43 | "webpack": "^4.44.1", 44 | "webpack-cli": "^3.3.12", 45 | "webpack-dev-server": "^3.11.0" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /tools/convertSample.json: -------------------------------------------------------------------------------- 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 | ] 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Earthquake Map 2 | 3 | ![GitHub package.json version](https://img.shields.io/github/package-json/v/earthquake-alert/earthquake-map?style=flat-square) 4 | 5 |

6 | 7 |

8 | 9 | ## TL;DR 10 | 11 | 震度分布図の描画 12 | 13 | - ミニマップあり 14 | - 海外地震に対応 15 | - HTMLに記述することでさまざまな情報を追加可能 16 | - Seleniumでキャプチャすればかんたんに画像化可能 17 | 18 | ## 描画できるもの 19 | 20 | 地震・津波に関する地図の描画。 21 | 22 | - 震度分布図(震度観測点) 23 | - 用途: 震源・震度に関する情報 24 | - 震度分布図(細分区域のタイル) 25 | - 震度速報 26 | - ~~震度分布図(都道府県のタイル)~~(**追加予定**) 27 | - 緊急地震速報等 28 | - ~~津波警報・注意報図~~(**追加予定**) 29 | - 津波注意報 30 | - 津波警報 31 | - 大津波警報 32 | 33 | ## Run 34 | 35 | ```bash 36 | # need docker installed 37 | 38 | # run server 39 | docker-compose up -d 40 | 41 | # connect to http://localhost:8080/ 42 | ``` 43 | 44 | デモサイト: [https://earthquake-map.vercel.app/](https://earthquake-map.vercel.app/) 45 | 46 | ## パラメータの説明 47 | 48 | [パラメータの説明](./assets/parameters.md) 49 | 50 | ## 各震度の色 51 | 52 | | 震度 | 色 | 53 | | :---: | :-----------------------------------------------------------------------: | 54 | | 1 | ![#54cfe8](https://via.placeholder.com/15/54cfe8/000000?text=+) `#54cfe8` | 55 | | 2 | ![#64e375](https://via.placeholder.com/15/64e375/000000?text=+) `#64e375` | 56 | | 3 | ![#f0ed4d](https://via.placeholder.com/15/f0ed4d/000000?text=+) `#f0ed4d` | 57 | | 4 | ![#eb9423](https://via.placeholder.com/15/eb9423/000000?text=+) `#eb9423` | 58 | | 5弱 | ![#f74d4d](https://via.placeholder.com/15/f74d4d/000000?text=+) `#f74d4d` | 59 | | 5強 | ![#f74d4d](https://via.placeholder.com/15/f74d4d/000000?text=+) `#f74d4d` | 60 | | 6弱 | ![#f03eb8](https://via.placeholder.com/15/f03eb8/000000?text=+) `#f03eb8` | 61 | | 6強 | ![#f03eb8](https://via.placeholder.com/15/f03eb8/000000?text=+) `#f03eb8` | 62 | | 7 | ![#b347ed](https://via.placeholder.com/15/b347ed/000000?text=+) `#b347ed` | 63 | 64 | ## ライセンス 65 | 66 | MIT 67 | 68 | 使用した場合、issueにて報告してくれるとありがたいです。 69 | -------------------------------------------------------------------------------- /src/static/css/style.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | height: 100%; 4 | margin: 0; 5 | padding: 0; 6 | } 7 | 8 | .map { 9 | width: 100%; 10 | height: 100%; 11 | margin: 0; 12 | padding: 0; 13 | background-color: #33424f; 14 | position: absolute; 15 | z-index: 0; 16 | } 17 | 18 | .map .ol-custom-overviewmap .ol-overviewmap-box { 19 | border: 0.2rem solid #d63636; 20 | } 21 | 22 | .map .ol-custom-overviewmap:not(.ol-collapsed) button{ 23 | display:none; 24 | } 25 | 26 | .map .ol-custom-overviewmap, 27 | .map .ol-custom-overviewmap.ol-uncollapsible { 28 | border: 0.25rem solid #c2c2c2; 29 | opacity: 90%; 30 | margin: 0; 31 | padding: 0; 32 | border-radius: 0 0 0 0; 33 | bottom: 0; 34 | left: auto; 35 | right: 0; 36 | top: auto; 37 | } 38 | 39 | .map .ol-custom-overviewmap .ol-overviewmap-map { 40 | background-color: #1f1f1f; 41 | border: none; 42 | width: 28.8vw; 43 | height: 16.2vw; 44 | } 45 | 46 | .ol-overviewmap-map { 47 | border: none; 48 | } 49 | 50 | .ol-overviewmap .ol-overviewmap-map { 51 | margin: 0 !important; 52 | } 53 | 54 | 55 | .ol-attribution :not(.copyright){ 56 | display: none; 57 | } 58 | 59 | .ol-control { 60 | padding: 0 !important; 61 | } 62 | 63 | .copyright { 64 | top: auto; 65 | bottom: 1.2vw; 66 | left: 0; 67 | right: auto; 68 | padding: 0; 69 | margin: 0; 70 | border-radius: 0 !important; 71 | background-color: #a1a1a1 !important; 72 | opacity: 80%; 73 | } 74 | 75 | .map .copyright button { 76 | display: none; 77 | } 78 | 79 | .map .copyright ul { 80 | padding: 0 1vw 0 0.8vw; 81 | margin: 0; 82 | } 83 | 84 | .ol-zoom { 85 | display: none; 86 | } 87 | 88 | /* copyright の文字*/ 89 | .map .copyright ul li { 90 | font-size: 1vw; 91 | font-family: 'Noto Sans JP', sans-serif; 92 | } 93 | 94 | .data { 95 | padding: .5vw 1.5vw 1vw 1.5vw; 96 | color: #ffffff; 97 | background-color: #67728a; 98 | position: absolute; 99 | z-index: 1; 100 | opacity: 80%; 101 | font-family: 'Noto Sans JP', sans-serif; 102 | } 103 | 104 | .title { 105 | text-align: center; 106 | font-size: 3vw; 107 | 108 | } 109 | 110 | .now { 111 | text-align: center; 112 | font-size: 1.5vw; 113 | } 114 | -------------------------------------------------------------------------------- /assets/parameters.md: -------------------------------------------------------------------------------- 1 | # URL GETパラメータの説明 2 | 3 | ## デモサイト 4 | 5 | [https://earthquake-map.vercel.app/](https://earthquake-map.vercel.app/) 6 | 7 | ## 例 8 | 9 | - 震度分布図(観測地域) 10 | - `http://localhost:8080/?ti=震源・震度情報&point1=36.251:139.9323,38.1715:140.8918&epi=36.544949,140.712890` 11 | - [TohokuEarthquake](../tools/TohokuEarthquake.txt) 12 | - 震度速報(細分区域タイル塗りつぶし) 13 | - `http://localhost:8080/?ti=震度速報&areas1=300,320&epi=36.544949,140.712890` 14 | - `http://localhost:8080/?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` 15 | - 海外地震に関する情報 16 | - `http://localhost:8080/?ti=海外地震に関する情報&epi=3.688855,119.882812` 17 | 18 | ## 個別の説明 19 | 20 | - `ti` 21 | - タイトル。画面左上に表示される文字。 22 | - `epi` 23 | - 震源地 24 | - 震源地が海外の場合は自動的に世界地図になります。 25 | - 緯度、経度をスペースなしの`,`で区切る。 26 | - 例: `38.685509,142.734375` 27 | - `areas1` 28 | - 細分区域タイルの塗りつぶし。震度1 29 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 30 | - `areas2` 31 | - 細分区域タイルの塗りつぶし。震度2 32 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 33 | - `areas3` 34 | - 細分区域タイルの塗りつぶし。震度3 35 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 36 | - `areas4` 37 | - 細分区域タイルの塗りつぶし。震度4 38 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 39 | - `areas5l` 40 | - 細分区域タイルの塗りつぶし。震度5弱 41 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 42 | - `areas5u` 43 | - 細分区域タイルの塗りつぶし。震度5強 44 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 45 | - `areas6l` 46 | - 細分区域タイルの塗りつぶし。震度6弱 47 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 48 | - `areas6u` 49 | - 細分区域タイルの塗りつぶし。震度6強 50 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 51 | - `areas7` 52 | - 細分区域タイルの塗りつぶし。震度7 53 | - 気象庁の細分区域コードをスペースなしの`,`で区切る 54 | - `point1` 55 | - 震度観測点。震度1 56 | - 緯度、経度をスペースなし`:`で区切る。 57 | - それらの緯度経度をスペースなしの`,`で区切る。 58 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 59 | - `point2` 60 | - 震度観測点。震度2 61 | - 緯度、経度をスペースなし`:`で区切る。 62 | - それらの緯度経度をスペースなしの`,`で区切る。 63 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 64 | - `point3` 65 | - 震度観測点。震度3 66 | - 緯度、経度をスペースなし`:`で区切る。 67 | - それらの緯度経度をスペースなしの`,`で区切る。 68 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 69 | - `point4` 70 | - 震度観測点。震度4 71 | - 緯度、経度をスペースなし`:`で区切る。 72 | - それらの緯度経度をスペースなしの`,`で区切る。 73 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 74 | - `point5l` 75 | - 震度観測点。震度5弱 76 | - 緯度、経度をスペースなし`:`で区切る。 77 | - それらの緯度経度をスペースなしの`,`で区切る。 78 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 79 | - `point5u` 80 | - 震度観測点。震度5強 81 | - 緯度、経度をスペースなし`:`で区切る。 82 | - それらの緯度経度をスペースなしの`,`で区切る。 83 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 84 | - `point6l` 85 | - 震度観測点。震度6弱 86 | - 緯度、経度をスペースなし`:`で区切る。 87 | - それらの緯度経度をスペースなしの`,`で区切る。 88 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 89 | - `point6u` 90 | - 震度観測点。震度6強 91 | - 緯度、経度をスペースなし`:`で区切る。 92 | - それらの緯度経度をスペースなしの`,`で区切る。 93 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 94 | - `point7` 95 | - 震度観測点。震度7 96 | - 緯度、経度をスペースなし`:`で区切る。 97 | - それらの緯度経度をスペースなしの`,`で区切る。 98 | - 例: `36.251:139.9323,38.1715:140.8918` (この場合2点が表示される) 99 | - `date` 100 | - 地震発生時刻 101 | - `YYYYmmddHHMMSS`で指定。 102 | - 例: 2020年8月5日14:04:05の場合は `20200805140405` 103 | -------------------------------------------------------------------------------- /tools/XMLtoURL.py: -------------------------------------------------------------------------------- 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() 146 | -------------------------------------------------------------------------------- /src/ts/index.ts: -------------------------------------------------------------------------------- 1 | /*! 2 | * @author: Yuto Watanabe 3 | * @version: 1.0.0 4 | * 5 | * Copyright (c) 2020 Earthquake alert 6 | */ 7 | 8 | import 'ol/ol.css'; 9 | import Map from 'ol/Map'; 10 | import View from 'ol/View'; 11 | 12 | import * as control from 'ol/control'; 13 | import * as Format from 'ol/format'; 14 | import * as Layer from 'ol/layer'; 15 | import { fromLonLat, transformExtent } from 'ol/proj'; 16 | import * as Source from 'ol/source'; 17 | 18 | 19 | import {Style, Stroke, Fill} from 'ol/style'; 20 | 21 | import {color} from './color'; 22 | import { 23 | setUrl, 24 | tileStyle, 25 | center, 26 | zoomLevel, 27 | pointGeoJSON, 28 | pointStyle, 29 | isOverseas, 30 | // isTileColor, 31 | } from './mapStyle'; 32 | 33 | const url = location.href; 34 | setUrl(url); 35 | 36 | // 地図データ 37 | const attribution = new control.Attribution({ 38 | className: 'copyright', 39 | collapsible: false, 40 | }); 41 | 42 | // 都道府県のマップ 43 | const prefMap = new Layer.VectorTile({ 44 | source: new Source.VectorTile({ 45 | format: new Format.MVT(), 46 | url: 'https://earthquake-alert.github.io/maps/pbf_japan/pref_jma/{z}/{x}/{y}.pbf', 47 | attributions: [ 48 | 'Copyright(c) 2020 Earthquake alert / 地図データ: 国土数値情報(湖沼データ), 気象庁(地震情報/細分区域, 緊急地震速報/府県予報区)', 49 | ], 50 | }), 51 | style: new Style({ 52 | stroke: new Stroke({ 53 | color: color('prefCountryStroke'), 54 | width: 3, 55 | }), 56 | }), 57 | maxZoom: 10, 58 | minZoom: 0, 59 | maxResolution: 5000, 60 | }); 61 | 62 | // 水域マップ 63 | const waterAreaMap = new Layer.VectorTile({ 64 | source: new Source.VectorTile({ 65 | format: new Format.MVT(), 66 | url: 'https://earthquake-alert.github.io/maps/pbf_water_area/waterArea/{z}/{x}/{y}.pbf', 67 | }), 68 | style: new Style({ 69 | fill: new Fill({ 70 | color: color('waterArea'), 71 | }), 72 | }), 73 | maxZoom: 10, 74 | minZoom: 0, 75 | maxResolution: 5000, 76 | }); 77 | 78 | // 細分区域のマップ 79 | const districtMap = new Layer.VectorTile({ 80 | source: new Source.VectorTile({ 81 | format: new Format.MVT({}), 82 | url: 'https://earthquake-alert.github.io/maps/pbf_japan/distlict_jma/{z}/{x}/{y}.pbf', 83 | }), 84 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 85 | // @ts-ignore 86 | style: tileStyle, 87 | maxZoom: 10, 88 | minZoom: 0, 89 | maxResolution: 5000, 90 | }); 91 | 92 | 93 | // 世界のマップ 94 | const worldMap = new Layer.VectorTile({ 95 | source: new Source.VectorTile({ 96 | format: new Format.MVT(), 97 | url: 'https://earthquake-alert.github.io/maps/pbf_world/world/{z}/{x}/{y}.pbf', 98 | attributions: [ 99 | 'Copyright(c) 2020 Earthquake alert / 地図データ: Natural Earth', 100 | ], 101 | }), 102 | style: new Style({ 103 | fill: new Fill({ 104 | color: color('land'), 105 | }), 106 | stroke: new Stroke({ 107 | color: color('prefCountryStroke'), 108 | width: 2, 109 | }), 110 | }), 111 | maxZoom: 5, 112 | minZoom: 0, 113 | minResolution: 5000, 114 | }); 115 | 116 | // ミニマップ用日本のマップ(都道府県と同じ) 117 | const overviewMap = new Layer.VectorTile({ 118 | source: new Source.VectorTile({ 119 | format: new Format.MVT(), 120 | url: 'https://earthquake-alert.github.io/maps/pbf_japan/pref_jma/{z}/{x}/{y}.pbf', 121 | }), 122 | style: new Style({ 123 | fill: new Fill({ 124 | color: color('minimapLand'), 125 | }), 126 | stroke: new Stroke({ 127 | color: color('minimapStroke'), 128 | width: 0.5, 129 | }), 130 | }), 131 | maxZoom: 10, 132 | minZoom: 0, 133 | }); 134 | 135 | // 震度観測点のマップ 136 | const pointMap = new Layer.Vector({ 137 | source: new Source.Vector({ 138 | features: pointGeoJSON(), 139 | }), 140 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 141 | // @ts-ignore 142 | style: pointStyle, 143 | maxZoom: 10, 144 | minZoom: 0, 145 | }); 146 | 147 | // ミニマップ設定 148 | const overviewMapControl = new control.OverviewMap({ 149 | className: 'ol-overviewmap ol-custom-overviewmap', 150 | layers: [ 151 | overviewMap, 152 | ], 153 | collapsed: false, 154 | view: new View({ 155 | extent: transformExtent([126.914062,26.588527,149.414062,45.213003], 'EPSG:4326', 'EPSG:3857'), 156 | minZoom: 4, 157 | maxZoom: 4, 158 | zoom: 4, 159 | }) 160 | }); 161 | 162 | const mapControl = [attribution]; 163 | 164 | // 海外の場合はミニマップを表示しない 165 | if (!isOverseas){ 166 | mapControl.push(overviewMapControl); 167 | } 168 | 169 | // マップ描画 170 | const map = new Map({ 171 | controls: control.defaults().extend(mapControl), 172 | target: 'map', 173 | view: new View({ 174 | center: fromLonLat(center()), 175 | zoom: zoomLevel(), 176 | maxZoom: 10, 177 | }), 178 | layers: [ 179 | worldMap, 180 | districtMap, 181 | waterAreaMap, 182 | prefMap, 183 | pointMap, 184 | ], 185 | }); 186 | 187 | // // タイル塗りつぶし、海外自地震以外は自動的に拡大率を決める 188 | // if(!(isOverseas || isTileColor)){ 189 | // console.log("OK"); 190 | // const markerSource = new Source.Vector({ 191 | // features: pointGeoJSON(), 192 | // }); 193 | 194 | // map.getView().fit(markerSource.getExtent()); 195 | // } 196 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | /* Basic Options */ 5 | "incremental": true, /* Enable incremental compilation */ 6 | "target": "ES5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 7 | "module": "es2015", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 8 | // "lib": [], /* Specify library files to be included in the compilation. */ 9 | // "allowJs": true, /* Allow javascript files to be compiled. */ 10 | // "checkJs": true, /* Report errors in .js files. */ 11 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 12 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 13 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 14 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 15 | // "outFile": "./", /* Concatenate and emit output to single file. */ 16 | "outDir": "./src/static/js", /* Redirect output structure to the directory. */ 17 | // "rootDir": "./src/ts/", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 18 | // "composite": true, /* Enable project compilation */ 19 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 20 | "removeComments": true, /* Do not emit comments to output. */ 21 | // "noEmit": true, /* Do not emit outputs. */ 22 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 23 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 24 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 25 | /* Strict Type-Checking Options */ 26 | "strict": true, /* Enable all strict type-checking options. */ 27 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 28 | "strictNullChecks": true, /* Enable strict null checks. */ 29 | "strictFunctionTypes": true, /* Enablte strict checking of function types. */ 30 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 31 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 32 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 33 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 34 | /* Additional Checks */ 35 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 36 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 37 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 38 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 39 | /* Module Resolution Options */ 40 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 41 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 42 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 43 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 44 | // "typeRoots": [], /* List of folders to include type definitions from. */ 45 | // "types": [], /* Type declaration files to be included in compilation. */ 46 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 47 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 48 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 49 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 50 | /* Source Map Options */ 51 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 52 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 53 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 54 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 55 | /* Experimental Options */ 56 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 57 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 58 | /* Advanced Options */ 59 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 60 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/python,node,macos,windows,visualstudiocode,venv,vim 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,node,macos,windows,visualstudiocode,venv,vim 4 | 5 | ### macOS ### 6 | # General 7 | .DS_Store 8 | .AppleDouble 9 | .LSOverride 10 | 11 | # Icon must end with two \r 12 | Icon 13 | !src/static/icon 14 | 15 | # Thumbnails 16 | ._* 17 | 18 | # Files that might appear in the root of a volume 19 | .DocumentRevisions-V100 20 | .fseventsd 21 | .Spotlight-V100 22 | .TemporaryItems 23 | .Trashes 24 | .VolumeIcon.icns 25 | .com.apple.timemachine.donotpresent 26 | 27 | # Directories potentially created on remote AFP share 28 | .AppleDB 29 | .AppleDesktop 30 | Network Trash Folder 31 | Temporary Items 32 | .apdisk 33 | 34 | ### Node ### 35 | # Logs 36 | logs 37 | *.log 38 | npm-debug.log* 39 | yarn-debug.log* 40 | yarn-error.log* 41 | lerna-debug.log* 42 | 43 | # Diagnostic reports (https://nodejs.org/api/report.html) 44 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 45 | 46 | # Runtime data 47 | pids 48 | *.pid 49 | *.seed 50 | *.pid.lock 51 | 52 | # Directory for instrumented libs generated by jscoverage/JSCover 53 | lib-cov 54 | 55 | # Coverage directory used by tools like istanbul 56 | coverage 57 | *.lcov 58 | 59 | # nyc test coverage 60 | .nyc_output 61 | 62 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 63 | .grunt 64 | 65 | # Bower dependency directory (https://bower.io/) 66 | bower_components 67 | 68 | # node-waf configuration 69 | .lock-wscript 70 | 71 | # Compiled binary addons (https://nodejs.org/api/addons.html) 72 | build/Release 73 | 74 | # Dependency directories 75 | node_modules/ 76 | jspm_packages/ 77 | 78 | # TypeScript v1 declaration files 79 | typings/ 80 | 81 | # TypeScript cache 82 | *.tsbuildinfo 83 | 84 | # Optional npm cache directory 85 | .npm 86 | 87 | # Optional eslint cache 88 | .eslintcache 89 | 90 | # Microbundle cache 91 | .rpt2_cache/ 92 | .rts2_cache_cjs/ 93 | .rts2_cache_es/ 94 | .rts2_cache_umd/ 95 | 96 | # Optional REPL history 97 | .node_repl_history 98 | 99 | # Output of 'npm pack' 100 | *.tgz 101 | 102 | # Yarn Integrity file 103 | .yarn-integrity 104 | 105 | # dotenv environment variables file 106 | .env 107 | .env.test 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | .cache 111 | 112 | # Next.js build output 113 | .next 114 | 115 | # Nuxt.js build / generate output 116 | .nuxt 117 | dist 118 | 119 | # Gatsby files 120 | .cache/ 121 | # Comment in the public line in if your project uses Gatsby and not Next.js 122 | # https://nextjs.org/blog/next-9-1#public-directory-support 123 | # public 124 | 125 | # vuepress build output 126 | .vuepress/dist 127 | 128 | # Serverless directories 129 | .serverless/ 130 | 131 | # FuseBox cache 132 | .fusebox/ 133 | 134 | # DynamoDB Local files 135 | .dynamodb/ 136 | 137 | # TernJS port file 138 | .tern-port 139 | 140 | # Stores VSCode versions used for testing VSCode extensions 141 | .vscode-test 142 | 143 | ### Python ### 144 | # Byte-compiled / optimized / DLL files 145 | __pycache__/ 146 | *.py[cod] 147 | *$py.class 148 | 149 | # C extensions 150 | *.so 151 | 152 | # Distribution / packaging 153 | .Python 154 | build/ 155 | develop-eggs/ 156 | dist/ 157 | downloads/ 158 | eggs/ 159 | .eggs/ 160 | lib/ 161 | lib64/ 162 | parts/ 163 | sdist/ 164 | var/ 165 | wheels/ 166 | pip-wheel-metadata/ 167 | share/python-wheels/ 168 | *.egg-info/ 169 | .installed.cfg 170 | *.egg 171 | MANIFEST 172 | 173 | # PyInstaller 174 | # Usually these files are written by a python script from a template 175 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 176 | *.manifest 177 | *.spec 178 | 179 | # Installer logs 180 | pip-log.txt 181 | pip-delete-this-directory.txt 182 | 183 | # Unit test / coverage reports 184 | htmlcov/ 185 | .tox/ 186 | .nox/ 187 | .coverage 188 | .coverage.* 189 | nosetests.xml 190 | coverage.xml 191 | *.cover 192 | *.py,cover 193 | .hypothesis/ 194 | .pytest_cache/ 195 | pytestdebug.log 196 | 197 | # Translations 198 | *.mo 199 | *.pot 200 | 201 | # Django stuff: 202 | local_settings.py 203 | db.sqlite3 204 | db.sqlite3-journal 205 | 206 | # Flask stuff: 207 | instance/ 208 | .webassets-cache 209 | 210 | # Scrapy stuff: 211 | .scrapy 212 | 213 | # Sphinx documentation 214 | docs/_build/ 215 | doc/_build/ 216 | 217 | # PyBuilder 218 | target/ 219 | 220 | # Jupyter Notebook 221 | .ipynb_checkpoints 222 | 223 | # IPython 224 | profile_default/ 225 | ipython_config.py 226 | 227 | # pyenv 228 | .python-version 229 | 230 | # pipenv 231 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 232 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 233 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 234 | # install all needed dependencies. 235 | #Pipfile.lock 236 | 237 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 238 | __pypackages__/ 239 | 240 | # Celery stuff 241 | celerybeat-schedule 242 | celerybeat.pid 243 | 244 | # SageMath parsed files 245 | *.sage.py 246 | 247 | # Environments 248 | .venv 249 | env/ 250 | venv/ 251 | ENV/ 252 | env.bak/ 253 | venv.bak/ 254 | 255 | # Spyder project settings 256 | .spyderproject 257 | .spyproject 258 | 259 | # Rope project settings 260 | .ropeproject 261 | 262 | # mkdocs documentation 263 | /site 264 | 265 | # mypy 266 | .mypy_cache/ 267 | .dmypy.json 268 | dmypy.json 269 | 270 | # Pyre type checker 271 | .pyre/ 272 | 273 | # pytype static type analyzer 274 | .pytype/ 275 | 276 | ### venv ### 277 | # Virtualenv 278 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ 279 | [Bb]in 280 | [Ii]nclude 281 | [Ll]ib 282 | [Ll]ib64 283 | [Ll]ocal 284 | [Ss]cripts 285 | pyvenv.cfg 286 | pip-selfcheck.json 287 | 288 | ### Vim ### 289 | # Swap 290 | [._]*.s[a-v][a-z] 291 | !*.svg # comment out if you don't need vector files 292 | [._]*.sw[a-p] 293 | [._]s[a-rt-v][a-z] 294 | [._]ss[a-gi-z] 295 | [._]sw[a-p] 296 | 297 | # Session 298 | Session.vim 299 | Sessionx.vim 300 | 301 | # Temporary 302 | .netrwhist 303 | *~ 304 | # Auto-generated tag files 305 | tags 306 | # Persistent undo 307 | [._]*.un~ 308 | 309 | ### VisualStudioCode ### 310 | .vscode/* 311 | !.vscode/settings.json 312 | !.vscode/tasks.json 313 | !.vscode/launch.json 314 | !.vscode/extensions.json 315 | *.code-workspace 316 | 317 | ### VisualStudioCode Patch ### 318 | # Ignore all local history of files 319 | .history 320 | 321 | ### Windows ### 322 | # Windows thumbnail cache files 323 | Thumbs.db 324 | Thumbs.db:encryptable 325 | ehthumbs.db 326 | ehthumbs_vista.db 327 | 328 | # Dump file 329 | *.stackdump 330 | 331 | # Folder config file 332 | [Dd]esktop.ini 333 | 334 | # Recycle Bin used on file shares 335 | $RECYCLE.BIN/ 336 | 337 | # Windows Installer files 338 | *.cab 339 | *.msi 340 | *.msix 341 | *.msm 342 | *.msp 343 | 344 | # Windows shortcuts 345 | *.lnk 346 | 347 | # End of https://www.toptal.com/developers/gitignore/api/python,node,macos,windows,visualstudiocode,venv,vim 348 | 349 | 350 | src/static/js/*.js 351 | -------------------------------------------------------------------------------- /tools/jma_area_centroid.csv: -------------------------------------------------------------------------------- 1 | 100,石狩地方北部,43.4151931842515,141.49525560707 2 | 101,石狩地方中部,43.010872239411,141.291800149006 3 | 102,石狩地方南部,42.8401853638524,141.496898327669 4 | 105,渡島地方北部,42.2715261571357,140.227924212031 5 | 106,渡島地方東部,41.9171303977866,140.730104639953 6 | 107,渡島地方西部,41.5890677088811,140.250720331631 7 | 110,檜山地方,42.1200892176946,140.117224870458 8 | 115,後志地方北部,43.1570832606841,140.766313140274 9 | 116,後志地方東部,42.8279967803352,140.848074079286 10 | 117,後志地方西部,42.8212795958583,140.381809567057 11 | 119,北海道奥尻島,42.1553384492168,139.473175204362 12 | 120,空知地方北部,43.8088241231416,142.003884974433 13 | 121,空知地方中部,43.510911886567,141.982748253998 14 | 122,空知地方南部,43.1340267466936,141.912806597305 15 | 125,上川地方北部,44.3385114570841,142.392451316326 16 | 126,上川地方中部,43.735583365414,142.644551805745 17 | 127,上川地方南部,43.2002642741056,142.504343797753 18 | 130,留萌地方中北部,44.4989700095592,141.878134955653 19 | 131,留萌地方南部,43.9417545962386,141.733774434506 20 | 135,宗谷地方北部,45.1894445178067,141.918210986196 21 | 136,宗谷地方南部,44.8665568352299,142.43855171702 22 | 139,北海道利尻礼文,45.2387861660525,141.166627699514 23 | 140,網走地方,43.8152965753998,144.382103894481 24 | 141,北見地方,43.8226200374306,143.673887997429 25 | 142,紋別地方,44.1637059557543,143.183999955972 26 | 145,胆振地方西部,42.613359798762,140.894124905183 27 | 146,胆振地方中東部,42.6805610965227,141.697396642325 28 | 150,日高地方西部,42.7170038822428,142.406748749235 29 | 151,日高地方中部,42.4684979347206,142.58710610633 30 | 152,日高地方東部,42.2081311544082,142.999868946709 31 | 155,十勝地方北部,43.3665628834425,143.2988585723 32 | 156,十勝地方中部,42.9092933852102,143.296318802107 33 | 157,十勝地方南部,42.4845011298408,143.153859068292 34 | 160,釧路地方北部,43.5472480898255,144.399883448184 35 | 161,釧路地方中南部,43.180280482733,144.390527256347 36 | 165,根室地方北部,43.7457962290942,144.960978939025 37 | 166,根室地方中部,43.3921494419389,145.017145856032 38 | 167,根室地方南部,43.3154699204573,145.585475423304 39 | 200,青森県津軽北部,40.9012879819584,140.602759340444 40 | 201,青森県津軽南部,40.5837111506307,140.355676664483 41 | 202,青森県三八上北,40.6162098596363,141.217603896412 42 | 203,青森県下北,41.3095280542848,141.077901041411 43 | 210,岩手県沿岸北部,39.8488708107972,141.720190761799 44 | 211,岩手県沿岸南部,39.2071220069916,141.702753491058 45 | 212,岩手県内陸北部,39.931554542287,141.183482398172 46 | 213,岩手県内陸南部,39.2215346022004,141.160891785618 47 | 220,宮城県北部,38.7081798510326,141.022771333641 48 | 221,宮城県南部,38.0409381021126,140.661089277841 49 | 222,宮城県中部,38.3899877375334,141.004064365124 50 | 230,秋田県沿岸北部,40.1200513403522,140.096455999147 51 | 231,秋田県沿岸南部,39.4444677774327,140.171307132117 52 | 232,秋田県内陸北部,40.169818598738,140.578371768009 53 | 233,秋田県内陸南部,39.4107479536497,140.555936110668 54 | 240,山形県庄内,38.7268035929364,139.885451803039 55 | 241,山形県最上,38.7924891508531,140.295120305627 56 | 242,山形県村山,38.3859722184277,140.279056046712 57 | 243,山形県置賜,37.9990598165106,139.976229298984 58 | 250,福島県中通り,37.3914691547508,140.412029876442 59 | 251,福島県浜通り,37.3509163241567,140.838009636233 60 | 252,福島県会津,37.3884896876914,139.696186888682 61 | 300,茨城県北部,36.5650203041214,140.4501572932 62 | 301,茨城県南部,36.0932846746818,140.201946458283 63 | 310,栃木県北部,36.8824768612142,139.796845705343 64 | 311,栃木県南部,36.512030461272,139.834443306022 65 | 320,群馬県北部,36.6945826617991,138.928782969845 66 | 321,群馬県南部,36.3350541464469,139.031683822158 67 | 330,埼玉県北部,36.120612876943,139.362415936756 68 | 331,埼玉県南部,35.9073583025148,139.545329395159 69 | 332,埼玉県秩父,35.9859328237761,138.960967734764 70 | 340,千葉県北東部,35.651395253314,140.471172440167 71 | 341,千葉県北西部,35.6937245250665,140.134108404433 72 | 342,千葉県南部,35.203428130897,140.046035650559 73 | 350,東京都23区,35.6910145729301,139.735181991436 74 | 351,東京都多摩東部,35.676657079624,139.404014712941 75 | 352,東京都多摩西部,35.7841008782466,139.133267741272 76 | 354,神津島,34.2141240116488,139.14756016141 77 | 355,伊豆大島,34.737504801755,139.398860680118 78 | 356,新島,34.3908705243122,139.261953719004 79 | 357,三宅島,34.0281970490155,139.543209588378 80 | 358,八丈島,33.0582036184704,139.791238765374 81 | 359,小笠原,26.4684789419563,142.005446132563 82 | 360,神奈川県東部,35.4158798516042,139.541830262692 83 | 361,神奈川県西部,35.4187572372285,139.170065099832 84 | 370,新潟県上越,37.028577309026,138.153987349162 85 | 371,新潟県中越,37.2523218878926,138.885591560404 86 | 372,新潟県下越,37.9351085765371,139.396426040876 87 | 375,新潟県佐渡,38.0443952706501,138.389834987216 88 | 380,富山県東部,36.6540191718457,137.437080599991 89 | 381,富山県西部,36.6116154042673,136.942745221795 90 | 390,石川県能登,37.2064867460047,136.948180718148 91 | 391,石川県加賀,36.3778009761394,136.609662359906 92 | 400,福井県嶺北,35.9656984036161,136.361479635618 93 | 401,福井県嶺南,35.5232068049401,135.839517060097 94 | 411,山梨県中・西部,35.6343864344763,138.493498877733 95 | 412,山梨県東部・富士五湖,35.5700482506783,138.883889021463 96 | 420,長野県北部,36.6881921251618,138.150078155994 97 | 421,長野県中部,36.1891456600816,138.169651115476 98 | 422,長野県南部,35.654790923255,137.82736831621 99 | 430,岐阜県飛騨,36.1187019703343,137.226141814707 100 | 431,岐阜県美濃東部,35.4816794817731,137.316761509708 101 | 432,岐阜県美濃中西部,35.6069261648036,136.719663959301 102 | 440,静岡県伊豆,34.8745640375043,138.938865846631 103 | 441,静岡県東部,35.2402420829625,138.771488626138 104 | 442,静岡県中部,35.1039139770262,138.238197712947 105 | 443,静岡県西部,34.8836462400842,137.853989125771 106 | 450,愛知県東部,34.9312735856154,137.485860953082 107 | 451,愛知県西部,35.0894580120775,137.073328534043 108 | 460,三重県北部,35.0047600275823,136.526626961888 109 | 461,三重県中部,34.6191734898224,136.313318480575 110 | 462,三重県南部,34.213724255505,136.371820296006 111 | 500,滋賀県北部,35.3900869659917,136.165278079797 112 | 501,滋賀県南部,35.0456639623281,136.104847445449 113 | 510,京都府北部,35.46787882351,135.184751464577 114 | 511,京都府南部,35.0789732223378,135.65562115477 115 | 520,大阪府北部,34.783462719498,135.548853115561 116 | 521,大阪府南部,34.4415819650787,135.455666991985 117 | 530,兵庫県北部,35.4408410901881,134.71872293536 118 | 531,兵庫県南東部,34.9317329074819,135.099406804436 119 | 532,兵庫県南西部,34.9963324958315,134.553780088888 120 | 535,兵庫県淡路島,34.3621637869522,134.838411125225 121 | 540,奈良県,34.3192656265881,135.868735482575 122 | 550,和歌山県北部,34.1028777946241,135.3608210494 123 | 551,和歌山県南部,33.726110390324,135.656947155252 124 | 560,鳥取県東部,35.3918635375182,134.24926000843 125 | 562,鳥取県中部,35.4044079729083,133.789229650776 126 | 563,鳥取県西部,35.2994577316796,133.386845026069 127 | 570,島根県東部,35.2992242948002,132.951146669834 128 | 571,島根県西部,34.7928361651109,132.192509559817 129 | 575,島根県隠岐,36.2013585892796,133.208945191763 130 | 580,岡山県北部,35.0926200808239,133.823930457215 131 | 581,岡山県南部,34.7162121935879,133.802434935664 132 | 590,広島県北部,34.7991919297154,132.765038747369 133 | 591,広島県南東部,34.5591852337011,133.169466482037 134 | 592,広島県南西部,34.3973239449629,132.518452780871 135 | 600,徳島県北部,34.0127123218254,134.155924755563 136 | 601,徳島県南部,33.786975641433,134.365503868782 137 | 610,香川県東部,34.3007139401047,134.167233844802 138 | 611,香川県西部,34.1906564629378,133.817468763363 139 | 620,愛媛県東予,33.9500060023073,133.220443392779 140 | 621,愛媛県中予,33.7395076842639,132.869283566924 141 | 622,愛媛県南予,33.3472717034619,132.610302944072 142 | 630,高知県東部,33.5201666208914,134.065073389848 143 | 631,高知県中部,33.6512155360333,133.501258893035 144 | 632,高知県西部,33.133110128076,132.935115295384 145 | 700,山口県北部,34.3572476995743,131.359776226827 146 | 702,山口県西部,34.1223591161337,131.082290946589 147 | 703,山口県東部,34.1095644130935,132.089922630929 148 | 704,山口県中部,34.1800151405053,131.673551454039 149 | 710,福岡県福岡,33.5952497614343,130.403935574232 150 | 711,福岡県北九州,33.741810156755,130.908182834785 151 | 712,福岡県筑豊,33.6260119930602,130.73968769485 152 | 713,福岡県筑後,33.2675430810854,130.636383954678 153 | 720,佐賀県北部,33.3679017829721,129.948976438451 154 | 721,佐賀県南部,33.2461579827258,130.202283894043 155 | 730,長崎県北部,33.2292689757298,129.696488221909 156 | 731,長崎県南西部,32.8706410511579,129.881495729514 157 | 732,長崎県島原半島,32.745846722548,130.257068659466 158 | 735,長崎県対馬,34.4084515600988,129.32597991825 159 | 736,長崎県壱岐,33.7855297970237,129.716691163743 160 | 737,長崎県五島,32.818834297997,128.886870310454 161 | 740,熊本県阿蘇,32.9619259755635,131.108361031715 162 | 741,熊本県熊本,32.7626764454036,130.784193436199 163 | 742,熊本県球磨,32.2823561048014,130.847453124349 164 | 743,熊本県天草・芦北,32.3538263913408,130.287882170458 165 | 750,大分県北部,33.4988415016572,131.359900066464 166 | 751,大分県中部,33.2228447448591,131.583987201979 167 | 752,大分県南部,32.9206720136167,131.670221607535 168 | 753,大分県西部,33.1772178549274,131.133437868809 169 | 760,宮崎県北部平野部,32.4260541648634,131.521245562521 170 | 761,宮崎県北部山沿い,32.5122652343594,131.26564109005 171 | 762,宮崎県南部平野部,31.7648845865247,131.319831819666 172 | 763,宮崎県南部山沿い,31.924251908024,131.029034121253 173 | 770,鹿児島県薩摩,31.7496641914499,130.484942719855 174 | 771,鹿児島県大隅,31.4208972338992,130.924936450357 175 | 774,鹿児島県十島村,29.6888031620734,129.712994312664 176 | 775,鹿児島県甑島,31.755201316317,129.786634664733 177 | 776,鹿児島県種子島,30.5980929866606,130.918494282116 178 | 777,鹿児島県屋久島,30.346878132117,130.501382304569 179 | 778,鹿児島県奄美北部,28.2881614692973,129.439179108493 180 | 779,鹿児島県奄美南部,27.6311862243228,128.829035604575 181 | 800,沖縄県本島北部,26.6554705574845,128.058172038374 182 | 801,沖縄県本島中南部,26.2609127490052,127.732601148849 183 | 802,沖縄県久米島,26.4106427459504,126.83288263237 184 | 803,沖縄県大東島,25.834855523386,131.258912306859 185 | 804,沖縄県宮古島,24.7741858594093,125.242722844898 186 | 805,沖縄県石垣島,24.4656012809041,124.188763379481 187 | 806,沖縄県与那国島,24.4553666704242,122.988996964954 188 | 807,沖縄県西表島,24.3219449294693,123.82817843395 189 | -------------------------------------------------------------------------------- /tools/sample.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 震度速報 5 | 2009-08-10T20:09:11Z 6 | 通常 7 | 気象庁本庁 8 | 気象庁 9 | 10 | 11 | 震度速報 12 | 2009-08-11T05:09:00+09:00 13 | 2009-08-11T05:07:00+09:00 14 | 20090811050711 15 | 発表 16 | 17 | 震度速報 18 | 1.0_0 19 | 20 | 11日05時07分ころ、地震による強い揺れを感じました。震度3以上が観測された地域をお知らせします。 21 | 22 | 23 | 24 | 震度6弱 25 | 26 | 27 | 28 | 静岡県中部 29 | 442 30 | 31 | 32 | 静岡県西部 33 | 443 34 | 35 | 36 | 37 | 38 | 39 | 震度5強 40 | 41 | 42 | 43 | 静岡県伊豆 44 | 440 45 | 46 | 47 | 静岡県東部 48 | 441 49 | 50 | 51 | 52 | 53 | 54 | 震度4 55 | 56 | 57 | 58 | 千葉県南部 59 | 342 60 | 61 | 62 | 東京都23区 63 | 350 64 | 65 | 66 | 新島 67 | 356 68 | 69 | 70 | 神奈川県東部 71 | 360 72 | 73 | 74 | 神奈川県西部 75 | 361 76 | 77 | 78 | 山梨県中・西部 79 | 411 80 | 81 | 82 | 山梨県東部・富士五湖 83 | 412 84 | 85 | 86 | 長野県中部 87 | 421 88 | 89 | 90 | 長野県南部 91 | 422 92 | 93 | 94 | 岐阜県美濃東部 95 | 431 96 | 97 | 98 | 愛知県西部 99 | 451 100 | 101 | 102 | 103 | 104 | 105 | 震度3 106 | 107 | 108 | 109 | 群馬県北部 110 | 320 111 | 112 | 113 | 群馬県南部 114 | 321 115 | 116 | 117 | 埼玉県北部 118 | 330 119 | 120 | 121 | 埼玉県南部 122 | 331 123 | 124 | 125 | 埼玉県秩父 126 | 332 127 | 128 | 129 | 千葉県北西部 130 | 341 131 | 132 | 133 | 東京都多摩東部 134 | 351 135 | 136 | 137 | 神津島 138 | 354 139 | 140 | 141 | 伊豆大島 142 | 355 143 | 144 | 145 | 三宅島 146 | 357 147 | 148 | 149 | 富山県東部 150 | 380 151 | 152 | 153 | 石川県加賀 154 | 391 155 | 156 | 157 | 福井県嶺北 158 | 400 159 | 160 | 161 | 福井県嶺南 162 | 401 163 | 164 | 165 | 長野県北部 166 | 420 167 | 168 | 169 | 岐阜県飛騨 170 | 430 171 | 172 | 173 | 岐阜県美濃中西部 174 | 432 175 | 176 | 177 | 愛知県東部 178 | 450 179 | 180 | 181 | 三重県北部 182 | 460 183 | 184 | 185 | 滋賀県北部 186 | 500 187 | 188 | 189 | 滋賀県南部 190 | 501 191 | 192 | 193 | 奈良県 194 | 540 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 地震情報/都道府県等 206 | 地震情報/細分区域 207 | 208 | 6- 209 | 210 | 静岡県 211 | 22 212 | 6- 213 | 214 | 静岡県中部 215 | 442 216 | 6- 217 | 218 | 219 | 静岡県西部 220 | 443 221 | 6- 222 | 223 | 224 | 静岡県伊豆 225 | 440 226 | 5+ 227 | 228 | 229 | 静岡県東部 230 | 441 231 | 5+ 232 | 233 | 234 | 235 | 千葉県 236 | 12 237 | 4 238 | 239 | 千葉県南部 240 | 342 241 | 4 242 | 243 | 244 | 千葉県北西部 245 | 341 246 | 3 247 | 248 | 249 | 250 | 東京都 251 | 13 252 | 4 253 | 254 | 東京都23区 255 | 350 256 | 4 257 | 258 | 259 | 新島 260 | 356 261 | 4 262 | 263 | 264 | 東京都多摩東部 265 | 351 266 | 3 267 | 268 | 269 | 神津島 270 | 354 271 | 3 272 | 273 | 274 | 伊豆大島 275 | 355 276 | 3 277 | 278 | 279 | 三宅島 280 | 357 281 | 3 282 | 283 | 284 | 285 | 神奈川県 286 | 14 287 | 4 288 | 289 | 神奈川県東部 290 | 360 291 | 4 292 | 293 | 294 | 神奈川県西部 295 | 361 296 | 4 297 | 298 | 299 | 300 | 山梨県 301 | 19 302 | 4 303 | 304 | 山梨県中・西部 305 | 411 306 | 4 307 | 308 | 309 | 山梨県東部・富士五湖 310 | 412 311 | 4 312 | 313 | 314 | 315 | 長野県 316 | 20 317 | 4 318 | 319 | 長野県中部 320 | 421 321 | 4 322 | 323 | 324 | 長野県南部 325 | 422 326 | 4 327 | 328 | 329 | 長野県北部 330 | 420 331 | 3 332 | 333 | 334 | 335 | 岐阜県 336 | 21 337 | 4 338 | 339 | 岐阜県美濃東部 340 | 431 341 | 4 342 | 343 | 344 | 岐阜県飛騨 345 | 430 346 | 3 347 | 348 | 349 | 岐阜県美濃中西部 350 | 432 351 | 3 352 | 353 | 354 | 355 | 愛知県 356 | 23 357 | 4 358 | 359 | 愛知県西部 360 | 451 361 | 4 362 | 363 | 364 | 愛知県東部 365 | 450 366 | 3 367 | 368 | 369 | 370 | 群馬県 371 | 10 372 | 3 373 | 374 | 群馬県北部 375 | 320 376 | 3 377 | 378 | 379 | 群馬県南部 380 | 321 381 | 3 382 | 383 | 384 | 385 | 埼玉県 386 | 11 387 | 3 388 | 389 | 埼玉県北部 390 | 330 391 | 3 392 | 393 | 394 | 埼玉県南部 395 | 331 396 | 3 397 | 398 | 399 | 埼玉県秩父 400 | 332 401 | 3 402 | 403 | 404 | 405 | 富山県 406 | 16 407 | 3 408 | 409 | 富山県東部 410 | 380 411 | 3 412 | 413 | 414 | 415 | 石川県 416 | 17 417 | 3 418 | 419 | 石川県加賀 420 | 391 421 | 3 422 | 423 | 424 | 425 | 福井県 426 | 18 427 | 3 428 | 429 | 福井県嶺北 430 | 400 431 | 3 432 | 433 | 434 | 福井県嶺南 435 | 401 436 | 3 437 | 438 | 439 | 440 | 三重県 441 | 24 442 | 3 443 | 444 | 三重県北部 445 | 460 446 | 3 447 | 448 | 449 | 450 | 滋賀県 451 | 25 452 | 3 453 | 454 | 滋賀県北部 455 | 500 456 | 3 457 | 458 | 459 | 滋賀県南部 460 | 501 461 | 3 462 | 463 | 464 | 465 | 奈良県 466 | 29 467 | 3 468 | 469 | 奈良県 470 | 540 471 | 3 472 | 473 | 474 | 475 | 476 | 477 | 478 | -------------------------------------------------------------------------------- /src/ts/convertPosition.ts: -------------------------------------------------------------------------------- 1 | /*! 2 | * @author: Yuto Watanabe 3 | * @version: 1.0.0 4 | * 5 | * Copyright (c) 2020 Earthquake alert 6 | */ 7 | 8 | /*! 9 | * location information 10 | * https://github.com/9SQ/jma-eqarea-centroid 11 | * 12 | */ 13 | 14 | interface Data { 15 | lat: string, 16 | lon: string, 17 | name: string, 18 | } 19 | 20 | function positionDistrict(code: string): Data{ 21 | 22 | const positionData: {[key: string]: Data} = { 23 | '100': {lat: '141.49525560707', lon: '43.4151931842515', name: '石狩地方北部',}, 24 | '101': {lat: '141.291800149006', lon: '43.010872239411', name: '石狩地方中部',}, 25 | '102': {lat: '141.496898327669', lon: '42.8401853638524', name: '石狩地方南部',}, 26 | '105': {lat: '140.227924212031', lon: '42.2715261571357', name: '渡島地方北部',}, 27 | '106': {lat: '140.730104639953', lon: '41.9171303977866', name: '渡島地方東部',}, 28 | '107': {lat: '140.250720331631', lon: '41.5890677088811', name: '渡島地方西部',}, 29 | '110': {lat: '140.117224870458', lon: '42.1200892176946', name: '檜山地方',}, 30 | '115': {lat: '140.766313140274', lon: '43.1570832606841', name: '後志地方北部',}, 31 | '116': {lat: '140.848074079286', lon: '42.8279967803352', name: '後志地方東部',}, 32 | '117': {lat: '140.381809567057', lon: '42.8212795958583', name: '後志地方西部',}, 33 | '119': {lat: '139.473175204362', lon: '42.1553384492168', name: '北海道奥尻島',}, 34 | '120': {lat: '142.003884974433', lon: '43.8088241231416', name: '空知地方北部',}, 35 | '121': {lat: '141.982748253998', lon: '43.510911886567', name: '空知地方中部',}, 36 | '122': {lat: '141.912806597305', lon: '43.1340267466936', name: '空知地方南部',}, 37 | '125': {lat: '142.392451316326', lon: '44.3385114570841', name: '上川地方北部',}, 38 | '126': {lat: '142.644551805745', lon: '43.735583365414', name: '上川地方中部',}, 39 | '127': {lat: '142.504343797753', lon: '43.2002642741056', name: '上川地方南部',}, 40 | '130': {lat: '141.878134955653', lon: '44.4989700095592', name: '留萌地方中北部',}, 41 | '131': {lat: '141.733774434506', lon: '43.9417545962386', name: '留萌地方南部',}, 42 | '135': {lat: '141.918210986196', lon: '45.1894445178067', name: '宗谷地方北部',}, 43 | '136': {lat: '142.43855171702', lon: '44.8665568352299', name: '宗谷地方南部',}, 44 | '139': {lat: '141.166627699514', lon: '45.2387861660525', name: '北海道利尻礼文',}, 45 | '140': {lat: '144.382103894481', lon: '43.8152965753998', name: '網走地方',}, 46 | '141': {lat: '143.673887997429', lon: '43.8226200374306', name: '北見地方',}, 47 | '142': {lat: '143.183999955972', lon: '44.1637059557543', name: '紋別地方',}, 48 | '145': {lat: '140.894124905183', lon: '42.613359798762', name: '胆振地方西部',}, 49 | '146': {lat: '141.697396642325', lon: '42.6805610965227', name: '胆振地方中東部',}, 50 | '150': {lat: '142.406748749235', lon: '42.7170038822428', name: '日高地方西部',}, 51 | '151': {lat: '142.58710610633', lon: '42.4684979347206', name: '日高地方中部',}, 52 | '152': {lat: '142.999868946709', lon: '42.2081311544082', name: '日高地方東部',}, 53 | '155': {lat: '143.2988585723', lon: '43.3665628834425', name: '十勝地方北部',}, 54 | '156': {lat: '143.296318802107', lon: '42.9092933852102', name: '十勝地方中部',}, 55 | '157': {lat: '143.153859068292', lon: '42.4845011298408', name: '十勝地方南部',}, 56 | '160': {lat: '144.399883448184', lon: '43.5472480898255', name: '釧路地方北部',}, 57 | '161': {lat: '144.390527256347', lon: '43.180280482733', name: '釧路地方中南部',}, 58 | '165': {lat: '144.960978939025', lon: '43.7457962290942', name: '根室地方北部',}, 59 | '166': {lat: '145.017145856032', lon: '43.3921494419389', name: '根室地方中部',}, 60 | '167': {lat: '145.585475423304', lon: '43.3154699204573', name: '根室地方南部',}, 61 | '200': {lat: '140.602759340444', lon: '40.9012879819584', name: '青森県津軽北部',}, 62 | '201': {lat: '140.355676664483', lon: '40.5837111506307', name: '青森県津軽南部',}, 63 | '202': {lat: '141.217603896412', lon: '40.6162098596363', name: '青森県三八上北',}, 64 | '203': {lat: '141.077901041411', lon: '41.3095280542848', name: '青森県下北',}, 65 | '210': {lat: '141.720190761799', lon: '39.8488708107972', name: '岩手県沿岸北部',}, 66 | '211': {lat: '141.702753491058', lon: '39.2071220069916', name: '岩手県沿岸南部',}, 67 | '212': {lat: '141.183482398172', lon: '39.931554542287', name: '岩手県内陸北部',}, 68 | '213': {lat: '141.160891785618', lon: '39.2215346022004', name: '岩手県内陸南部',}, 69 | '220': {lat: '141.022771333641', lon: '38.7081798510326', name: '宮城県北部',}, 70 | '221': {lat: '140.661089277841', lon: '38.0409381021126', name: '宮城県南部',}, 71 | '222': {lat: '141.004064365124', lon: '38.3899877375334', name: '宮城県中部',}, 72 | '230': {lat: '140.096455999147', lon: '40.1200513403522', name: '秋田県沿岸北部',}, 73 | '231': {lat: '140.171307132117', lon: '39.4444677774327', name: '秋田県沿岸南部',}, 74 | '232': {lat: '140.578371768009', lon: '40.169818598738', name: '秋田県内陸北部',}, 75 | '233': {lat: '140.555936110668', lon: '39.4107479536497', name: '秋田県内陸南部',}, 76 | '240': {lat: '139.885451803039', lon: '38.7268035929364', name: '山形県庄内',}, 77 | '241': {lat: '140.295120305627', lon: '38.7924891508531', name: '山形県最上',}, 78 | '242': {lat: '140.279056046712', lon: '38.3859722184277', name: '山形県村山',}, 79 | '243': {lat: '139.976229298984', lon: '37.9990598165106', name: '山形県置賜',}, 80 | '250': {lat: '140.412029876442', lon: '37.3914691547508', name: '福島県中通り',}, 81 | '251': {lat: '140.838009636233', lon: '37.3509163241567', name: '福島県浜通り',}, 82 | '252': {lat: '139.696186888682', lon: '37.3884896876914', name: '福島県会津',}, 83 | '300': {lat: '140.4501572932', lon: '36.5650203041214', name: '茨城県北部',}, 84 | '301': {lat: '140.201946458283', lon: '36.0932846746818', name: '茨城県南部',}, 85 | '310': {lat: '139.796845705343', lon: '36.8824768612142', name: '栃木県北部',}, 86 | '311': {lat: '139.834443306022', lon: '36.512030461272', name: '栃木県南部',}, 87 | '320': {lat: '138.928782969845', lon: '36.6945826617991', name: '群馬県北部',}, 88 | '321': {lat: '139.031683822158', lon: '36.3350541464469', name: '群馬県南部',}, 89 | '330': {lat: '139.362415936756', lon: '36.120612876943', name: '埼玉県北部',}, 90 | '331': {lat: '139.545329395159', lon: '35.9073583025148', name: '埼玉県南部',}, 91 | '332': {lat: '138.960967734764', lon: '35.9859328237761', name: '埼玉県秩父',}, 92 | '340': {lat: '140.471172440167', lon: '35.651395253314', name: '千葉県北東部',}, 93 | '341': {lat: '140.134108404433', lon: '35.6937245250665', name: '千葉県北西部',}, 94 | '342': {lat: '140.046035650559', lon: '35.203428130897', name: '千葉県南部',}, 95 | '350': {lat: '139.735181991436', lon: '35.6910145729301', name: '東京都23区',}, 96 | '351': {lat: '139.404014712941', lon: '35.676657079624', name: '東京都多摩東部',}, 97 | '352': {lat: '139.133267741272', lon: '35.7841008782466', name: '東京都多摩西部',}, 98 | '354': {lat: '139.14756016141', lon: '34.2141240116488', name: '神津島',}, 99 | '355': {lat: '139.398860680118', lon: '34.737504801755', name: '伊豆大島',}, 100 | '356': {lat: '139.261953719004', lon: '34.3908705243122', name: '新島',}, 101 | '357': {lat: '139.543209588378', lon: '34.0281970490155', name: '三宅島',}, 102 | '358': {lat: '139.791238765374', lon: '33.0582036184704', name: '八丈島',}, 103 | '359': {lat: '142.005446132563', lon: '26.4684789419563', name: '小笠原',}, 104 | '360': {lat: '139.541830262692', lon: '35.4158798516042', name: '神奈川県東部',}, 105 | '361': {lat: '139.170065099832', lon: '35.4187572372285', name: '神奈川県西部',}, 106 | '370': {lat: '138.153987349162', lon: '37.028577309026', name: '新潟県上越',}, 107 | '371': {lat: '138.885591560404', lon: '37.2523218878926', name: '新潟県中越',}, 108 | '372': {lat: '139.396426040876', lon: '37.9351085765371', name: '新潟県下越',}, 109 | '375': {lat: '138.389834987216', lon: '38.0443952706501', name: '新潟県佐渡',}, 110 | '380': {lat: '137.437080599991', lon: '36.6540191718457', name: '富山県東部',}, 111 | '381': {lat: '136.942745221795', lon: '36.6116154042673', name: '富山県西部',}, 112 | '390': {lat: '136.948180718148', lon: '37.2064867460047', name: '石川県能登',}, 113 | '391': {lat: '136.609662359906', lon: '36.3778009761394', name: '石川県加賀',}, 114 | '400': {lat: '136.361479635618', lon: '35.9656984036161', name: '福井県嶺北',}, 115 | '401': {lat: '135.839517060097', lon: '35.5232068049401', name: '福井県嶺南',}, 116 | '411': {lat: '138.493498877733', lon: '35.6343864344763', name: '山梨県中・西部',}, 117 | '412': {lat: '138.883889021463', lon: '35.5700482506783', name: '山梨県東部・富士五湖',}, 118 | '420': {lat: '138.150078155994', lon: '36.6881921251618', name: '長野県北部',}, 119 | '421': {lat: '138.169651115476', lon: '36.1891456600816', name: '長野県中部',}, 120 | '422': {lat: '137.82736831621', lon: '35.654790923255', name: '長野県南部',}, 121 | '430': {lat: '137.226141814707', lon: '36.1187019703343', name: '岐阜県飛騨',}, 122 | '431': {lat: '137.316761509708', lon: '35.4816794817731', name: '岐阜県美濃東部',}, 123 | '432': {lat: '136.719663959301', lon: '35.6069261648036', name: '岐阜県美濃中西部',}, 124 | '440': {lat: '138.938865846631', lon: '34.8745640375043', name: '静岡県伊豆',}, 125 | '441': {lat: '138.771488626138', lon: '35.2402420829625', name: '静岡県東部',}, 126 | '442': {lat: '138.238197712947', lon: '35.1039139770262', name: '静岡県中部',}, 127 | '443': {lat: '137.853989125771', lon: '34.8836462400842', name: '静岡県西部',}, 128 | '450': {lat: '137.485860953082', lon: '34.9312735856154', name: '愛知県東部',}, 129 | '451': {lat: '137.073328534043', lon: '35.0894580120775', name: '愛知県西部',}, 130 | '460': {lat: '136.526626961888', lon: '35.0047600275823', name: '三重県北部',}, 131 | '461': {lat: '136.313318480575', lon: '34.6191734898224', name: '三重県中部',}, 132 | '462': {lat: '136.371820296006', lon: '34.213724255505', name: '三重県南部',}, 133 | '500': {lat: '136.165278079797', lon: '35.3900869659917', name: '滋賀県北部',}, 134 | '501': {lat: '136.104847445449', lon: '35.0456639623281', name: '滋賀県南部',}, 135 | '510': {lat: '135.184751464577', lon: '35.46787882351', name: '京都府北部',}, 136 | '511': {lat: '135.65562115477', lon: '35.0789732223378', name: '京都府南部',}, 137 | '520': {lat: '135.548853115561', lon: '34.783462719498', name: '大阪府北部',}, 138 | '521': {lat: '135.455666991985', lon: '34.4415819650787', name: '大阪府南部',}, 139 | '530': {lat: '134.71872293536', lon: '35.4408410901881', name: '兵庫県北部',}, 140 | '531': {lat: '135.099406804436', lon: '34.9317329074819', name: '兵庫県南東部',}, 141 | '532': {lat: '134.553780088888', lon: '34.9963324958315', name: '兵庫県南西部',}, 142 | '535': {lat: '134.838411125225', lon: '34.3621637869522', name: '兵庫県淡路島',}, 143 | '540': {lat: '135.868735482575', lon: '34.3192656265881', name: '奈良県',}, 144 | '550': {lat: '135.3608210494', lon: '34.1028777946241', name: '和歌山県北部',}, 145 | '551': {lat: '135.656947155252', lon: '33.726110390324', name: '和歌山県南部',}, 146 | '560': {lat: '134.24926000843', lon: '35.3918635375182', name: '鳥取県東部',}, 147 | '562': {lat: '133.789229650776', lon: '35.4044079729083', name: '鳥取県中部',}, 148 | '563': {lat: '133.386845026069', lon: '35.2994577316796', name: '鳥取県西部',}, 149 | '570': {lat: '132.951146669834', lon: '35.2992242948002', name: '島根県東部',}, 150 | '571': {lat: '132.192509559817', lon: '34.7928361651109', name: '島根県西部',}, 151 | '575': {lat: '133.208945191763', lon: '36.2013585892796', name: '島根県隠岐',}, 152 | '580': {lat: '133.823930457215', lon: '35.0926200808239', name: '岡山県北部',}, 153 | '581': {lat: '133.802434935664', lon: '34.7162121935879', name: '岡山県南部',}, 154 | '590': {lat: '132.765038747369', lon: '34.7991919297154', name: '広島県北部',}, 155 | '591': {lat: '133.169466482037', lon: '34.5591852337011', name: '広島県南東部',}, 156 | '592': {lat: '132.518452780871', lon: '34.3973239449629', name: '広島県南西部',}, 157 | '600': {lat: '134.155924755563', lon: '34.0127123218254', name: '徳島県北部',}, 158 | '601': {lat: '134.365503868782', lon: '33.786975641433', name: '徳島県南部',}, 159 | '610': {lat: '134.167233844802', lon: '34.3007139401047', name: '香川県東部',}, 160 | '611': {lat: '133.817468763363', lon: '34.1906564629378', name: '香川県西部',}, 161 | '620': {lat: '133.220443392779', lon: '33.9500060023073', name: '愛媛県東予',}, 162 | '621': {lat: '132.869283566924', lon: '33.7395076842639', name: '愛媛県中予',}, 163 | '622': {lat: '132.610302944072', lon: '33.3472717034619', name: '愛媛県南予',}, 164 | '630': {lat: '134.065073389848', lon: '33.5201666208914', name: '高知県東部',}, 165 | '631': {lat: '133.501258893035', lon: '33.6512155360333', name: '高知県中部',}, 166 | '632': {lat: '132.935115295384', lon: '33.133110128076', name: '高知県西部',}, 167 | '700': {lat: '131.359776226827', lon: '34.3572476995743', name: '山口県北部',}, 168 | '702': {lat: '131.082290946589', lon: '34.1223591161337', name: '山口県西部',}, 169 | '703': {lat: '132.089922630929', lon: '34.1095644130935', name: '山口県東部',}, 170 | '704': {lat: '131.673551454039', lon: '34.1800151405053', name: '山口県中部',}, 171 | '710': {lat: '130.403935574232', lon: '33.5952497614343', name: '福岡県福岡',}, 172 | '711': {lat: '130.908182834785', lon: '33.741810156755', name: '福岡県北九州',}, 173 | '712': {lat: '130.73968769485', lon: '33.6260119930602', name: '福岡県筑豊',}, 174 | '713': {lat: '130.636383954678', lon: '33.2675430810854', name: '福岡県筑後',}, 175 | '720': {lat: '129.948976438451', lon: '33.3679017829721', name: '佐賀県北部',}, 176 | '721': {lat: '130.202283894043', lon: '33.2461579827258', name: '佐賀県南部',}, 177 | '730': {lat: '129.696488221909', lon: '33.2292689757298', name: '長崎県北部',}, 178 | '731': {lat: '129.881495729514', lon: '32.8706410511579', name: '長崎県南西部',}, 179 | '732': {lat: '130.257068659466', lon: '32.745846722548', name: '長崎県島原半島',}, 180 | '735': {lat: '129.32597991825', lon: '34.4084515600988', name: '長崎県対馬',}, 181 | '736': {lat: '129.716691163743', lon: '33.7855297970237', name: '長崎県壱岐',}, 182 | '737': {lat: '128.886870310454', lon: '32.818834297997', name: '長崎県五島',}, 183 | '740': {lat: '131.108361031715', lon: '32.9619259755635', name: '熊本県阿蘇',}, 184 | '741': {lat: '130.784193436199', lon: '32.7626764454036', name: '熊本県熊本',}, 185 | '742': {lat: '130.847453124349', lon: '32.2823561048014', name: '熊本県球磨',}, 186 | '743': {lat: '130.287882170458', lon: '32.3538263913408', name: '熊本県天草・芦北',}, 187 | '750': {lat: '131.359900066464', lon: '33.4988415016572', name: '大分県北部',}, 188 | '751': {lat: '131.583987201979', lon: '33.2228447448591', name: '大分県中部',}, 189 | '752': {lat: '131.670221607535', lon: '32.9206720136167', name: '大分県南部',}, 190 | '753': {lat: '131.133437868809', lon: '33.1772178549274', name: '大分県西部',}, 191 | '760': {lat: '131.521245562521', lon: '32.4260541648634', name: '宮崎県北部平野部',}, 192 | '761': {lat: '131.26564109005', lon: '32.5122652343594', name: '宮崎県北部山沿い',}, 193 | '762': {lat: '131.319831819666', lon: '31.7648845865247', name: '宮崎県南部平野部',}, 194 | '763': {lat: '131.029034121253', lon: '31.924251908024', name: '宮崎県南部山沿い',}, 195 | '770': {lat: '130.484942719855', lon: '31.7496641914499', name: '鹿児島県薩摩',}, 196 | '771': {lat: '130.924936450357', lon: '31.4208972338992', name: '鹿児島県大隅',}, 197 | '774': {lat: '129.712994312664', lon: '29.6888031620734', name: '鹿児島県十島村',}, 198 | '775': {lat: '129.786634664733', lon: '31.755201316317', name: '鹿児島県甑島',}, 199 | '776': {lat: '130.918494282116', lon: '30.5980929866606', name: '鹿児島県種子島',}, 200 | '777': {lat: '130.501382304569', lon: '30.346878132117', name: '鹿児島県屋久島',}, 201 | '778': {lat: '129.439179108493', lon: '28.2881614692973', name: '鹿児島県奄美北部',}, 202 | '779': {lat: '128.829035604575', lon: '27.6311862243228', name: '鹿児島県奄美南部',}, 203 | '800': {lat: '128.058172038374', lon: '26.6554705574845', name: '沖縄県本島北部',}, 204 | '801': {lat: '127.732601148849', lon: '26.2609127490052', name: '沖縄県本島中南部',}, 205 | '802': {lat: '126.83288263237', lon: '26.4106427459504', name: '沖縄県久米島',}, 206 | '803': {lat: '131.258912306859', lon: '25.834855523386', name: '沖縄県大東島',}, 207 | '804': {lat: '125.242722844898', lon: '24.7741858594093', name: '沖縄県宮古島',}, 208 | '805': {lat: '124.188763379481', lon: '24.4656012809041', name: '沖縄県石垣島',}, 209 | '806': {lat: '122.988996964954', lon: '24.4553666704242', name: '沖縄県与那国島',}, 210 | '807': {lat: '123.82817843395', lon: '24.3219449294693', name: '沖縄県西表島',}, 211 | }; 212 | 213 | return positionData[code]; 214 | } 215 | 216 | // 細分区域のコードから緯度経度を返す 217 | export function district(code: string): number[] { 218 | const metaData: Data = positionDistrict(code); 219 | if (typeof metaData != 'undefined'){ 220 | const lon = parseFloat(metaData.lon); 221 | const lat = parseFloat(metaData.lat); 222 | if (typeof lat != 'undefined' && typeof lon != 'undefined'){ 223 | return [lon, lat]; 224 | } 225 | } 226 | return []; 227 | } 228 | 229 | -------------------------------------------------------------------------------- /src/ts/mapStyle.ts: -------------------------------------------------------------------------------- 1 | /*! 2 | * @author: Yuto Watanabe 3 | * @version: 1.0.0 4 | * 5 | * Copyright (c) 2020 Earthquake alert 6 | */ 7 | 8 | import Feature from 'ol/Feature'; 9 | import * as Geom from 'ol/geom'; 10 | 11 | import { fromLonLat } from 'ol/proj'; 12 | import RenderFeature from 'ol/render/Feature'; 13 | import {Style, Stroke, Fill, Icon} from 'ol/style'; 14 | import {color} from './color'; 15 | import {district} from './convertPosition'; 16 | 17 | interface Parameter { 18 | areas1: string[], 19 | areas2: string[], 20 | areas3: string[], 21 | areas4: string[], 22 | areas5l: string[], 23 | areas5u: string[], 24 | areas6l: string[], 25 | areas6u: string[], 26 | areas7: string[], 27 | pref: string[], 28 | epicenter: string[], 29 | point1: string[], 30 | point2: string[], 31 | point3: string[], 32 | point4: string[], 33 | point5l: string[], 34 | point5u: string[], 35 | point6l: string[], 36 | point6u: string[], 37 | point7: string[], 38 | } 39 | 40 | const parameter: Parameter = { 41 | areas1: [], 42 | areas2: [], 43 | areas3: [], 44 | areas4: [], 45 | areas5l: [], 46 | areas5u: [], 47 | areas6l: [], 48 | areas6u: [], 49 | areas7: [], 50 | pref: [], 51 | epicenter: [], 52 | point1: [], 53 | point2: [], 54 | point3: [], 55 | point4: [], 56 | point5l: [], 57 | point5u: [], 58 | point6l: [], 59 | point6u: [], 60 | point7: [], 61 | }; 62 | 63 | let count = 0; 64 | let pointScale = 0.8; 65 | // [lon, lat] 66 | const centerPosition: number[] = [0, 0]; 67 | const latMaxMin: number[] = [0, 0]; 68 | const lonMaxMin: number[] = [0, 0]; 69 | 70 | export let isOverseas = false; 71 | export let isTileColor = false; 72 | 73 | const features: Feature[] = []; 74 | 75 | // urlからパラメータを取得 76 | function getUrl(url: string, name: string): string[]{ 77 | const regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"); 78 | const results = regex.exec(decodeURI(url)); 79 | 80 | if (results != null){ 81 | return results[2].replace(/\+/g, " ").split(','); 82 | } 83 | return []; 84 | } 85 | 86 | // urlのパラメータから変数を設定 87 | export function setUrl(url: string): void { 88 | // areas 細分区域タイル塗りつぶし 89 | parameter.areas1 = getUrl(url, 'areas1'); 90 | parameter.areas2 = getUrl(url, 'areas2'); 91 | parameter.areas3 = getUrl(url, 'areas3'); 92 | parameter.areas4 = getUrl(url, 'areas4'); 93 | parameter.areas5l = getUrl(url, 'areas5l'); 94 | parameter.areas5u = getUrl(url, 'areas5u'); 95 | parameter.areas6l = getUrl(url, 'areas6l'); 96 | parameter.areas6u = getUrl(url, 'areas6u'); 97 | parameter.areas7 = getUrl(url, 'areas7'); 98 | // parameter.pref = getUrl(url, 'pref'); 99 | 100 | // 震度観測点 101 | parameter.point1 = getUrl(url, 'point1'); 102 | parameter.point2 = getUrl(url, 'point2'); 103 | parameter.point3 = getUrl(url, 'point3'); 104 | parameter.point4 = getUrl(url, 'point4'); 105 | parameter.point5l = getUrl(url, 'point5l'); 106 | parameter.point5u = getUrl(url, 'point5u'); 107 | parameter.point6l = getUrl(url, 'point6l'); 108 | parameter.point6u = getUrl(url, 'point6u'); 109 | parameter.point7 = getUrl(url, 'point7'); 110 | 111 | // 震源地 [lon, lat] & featuresに追加 112 | parameter.epicenter = getUrl(url, 'epi'); 113 | 114 | if (parameter.epicenter.length != 0){ 115 | addEpicenter(parameter.epicenter); 116 | const lon = parseFloat(parameter.epicenter[0]); 117 | const lat = parseFloat(parameter.epicenter[1]); 118 | 119 | features.push( 120 | new Feature({ 121 | type: 'epi', 122 | geometry: new Geom.Point(fromLonLat([lat, lon])), 123 | }) 124 | ); 125 | } 126 | 127 | addPosition(parameter.areas1, 'point1'); 128 | addPosition(parameter.areas2, 'point2'); 129 | addPosition(parameter.areas3, 'point3'); 130 | addPosition(parameter.areas4, 'point4'); 131 | addPosition(parameter.areas5l, 'point5l'); 132 | addPosition(parameter.areas5u, 'point5u'); 133 | addPosition(parameter.areas6l, 'point6l'); 134 | addPosition(parameter.areas6u, 'point6u'); 135 | addPosition(parameter.areas7, 'point7'); 136 | 137 | selecePoints(); 138 | 139 | setGeoJSON(); 140 | } 141 | 142 | // 地図の中心座標、拡大率を求める際に使用する観測点を最大震度ごとにフィルター 143 | function selecePoints(){ 144 | const si3OverLength = parameter.point4.length + 145 | parameter.point5l.length + 146 | parameter.point5u.length + 147 | parameter.point6l.length + 148 | parameter.point6u.length + 149 | parameter.point7.length; 150 | 151 | if (si3OverLength === 0){ 152 | // 最大震度3以下の場合はそれら3つの震度観測点から 153 | addPoint(parameter.point1); 154 | addPoint(parameter.point2); 155 | addPoint(parameter.point3); 156 | } 157 | else if (parameter.point7.length !== 0){ 158 | // 震度7の場合は、5弱5強6弱6強7の観測点から 159 | addPoint(parameter.point5l); 160 | addPoint(parameter.point5u); 161 | addPoint(parameter.point6l); 162 | addPoint(parameter.point6u); 163 | addPoint(parameter.point7); 164 | }else{ 165 | // 最大震度4以上の場合は震度3以上の観測点から 166 | addPoint(parameter.point3); 167 | addPoint(parameter.point4); 168 | addPoint(parameter.point5l); 169 | addPoint(parameter.point5u); 170 | addPoint(parameter.point6l); 171 | addPoint(parameter.point6u); 172 | } 173 | 174 | 175 | } 176 | 177 | // 中心座標を求める 178 | export function center(): number[] { 179 | if (centerPosition[0] == 0 && centerPosition[1] == 0){ 180 | return [139.570312, 35.621581]; 181 | } 182 | return [centerPosition[1] / count, centerPosition[0] / count]; 183 | } 184 | 185 | // GeoJSONを設定 186 | function setGeoJSON() { 187 | for(const element of parameter.point1){ 188 | addGeoJSON(element, 'point1'); 189 | } 190 | for(const element of parameter.point2){ 191 | addGeoJSON(element, 'point2'); 192 | } 193 | for(const element of parameter.point3){ 194 | addGeoJSON(element, 'point3'); 195 | } 196 | for(const element of parameter.point4){ 197 | addGeoJSON(element, 'point4'); 198 | } 199 | for(const element of parameter.point5l){ 200 | addGeoJSON(element, 'point5l'); 201 | } 202 | for(const element of parameter.point5u){ 203 | addGeoJSON(element, 'point5u'); 204 | } 205 | for(const element of parameter.point6l){ 206 | addGeoJSON(element, 'point6l'); 207 | } 208 | for(const element of parameter.point6u){ 209 | addGeoJSON(element, 'point6u'); 210 | } 211 | for(const element of parameter.point7){ 212 | addGeoJSON(element, 'point7'); 213 | } 214 | } 215 | 216 | // GeoJSONに各ポイントを追加 217 | function addGeoJSON(point: string, si: string){ 218 | const dividedPint = point.split(':'); 219 | const lon = parseFloat(dividedPint[0]); 220 | const lat = parseFloat(dividedPint[1]); 221 | 222 | features.push( 223 | new Feature({ 224 | type: si, 225 | geometry: new Geom.Point(fromLonLat([lat, lon])), 226 | }) 227 | ); 228 | } 229 | 230 | // 拡大率を求める 231 | export function zoomLevel(): number { 232 | // 海外の場合 233 | if (isOverseas){ 234 | return 1; 235 | } 236 | if ((latMaxMin[0]+latMaxMin[1]) == 0 && (lonMaxMin[0]+lonMaxMin[1]) == 0){ 237 | return 6; 238 | } 239 | else{ 240 | // 3平方の定理を用いて対角線長を求める。 241 | const distance = Math.sqrt(Math.pow((latMaxMin[0]-latMaxMin[1]), 2) + Math.pow((lonMaxMin[0]-lonMaxMin[1]), 2)); 242 | 243 | if(distance < 1){ 244 | pointScale = 0.8; 245 | return isTileColor? 9 : 10; 246 | } 247 | if(distance >= 1 && distance < 2){ 248 | pointScale = 0.7; 249 | return isTileColor? 8 : 9; 250 | } 251 | if(distance >= 2 && distance < 3){ 252 | pointScale = 0.6; 253 | return isTileColor? 8 : 9; 254 | } 255 | if(distance >= 3 && distance < 4){ 256 | pointScale = 0.5; 257 | return isTileColor? 8 : 9; 258 | } 259 | if(distance >= 4 && distance < 5){ 260 | pointScale = 0.5; 261 | return isTileColor? 7 : 9; 262 | } 263 | if(distance >= 5 && distance < 6){ 264 | pointScale = 0.5; 265 | return isTileColor? 7 : 8; 266 | } 267 | if(distance >= 6 && distance < 7){ 268 | pointScale = 0.5; 269 | return isTileColor? 7 : 8; 270 | } 271 | if(distance >= 7 && distance < 8){ 272 | pointScale = 0.5; 273 | return isTileColor? 7 : 8; 274 | } 275 | if(distance >= 8 && distance < 9){ 276 | pointScale = 0.5; 277 | return isTileColor? 7 : 8; 278 | } 279 | if(distance >= 9 && distance < 10){ 280 | pointScale = 0.5; 281 | return isTileColor? 7 : 8; 282 | } 283 | if(distance >= 10){ 284 | pointScale = 0.5; 285 | return isTileColor ? 7 : 7; 286 | } 287 | return 6; 288 | } 289 | } 290 | 291 | // 震度観測点、震源を返す 292 | export function pointGeoJSON(): Feature[] { 293 | return features; 294 | } 295 | 296 | // エリアタイル(細分区域) 297 | function addPosition(codes: string[], si: string){ 298 | for(const code of codes){ 299 | isTileColor = true; 300 | const metaData = district(code); 301 | positionCalculate(metaData); 302 | 303 | addGeoJSON(`${metaData[0]}:${metaData[1]}`, si); 304 | } 305 | } 306 | 307 | // 震源地 308 | function addEpicenter(position: string[]) { 309 | const lon = parseFloat(position[0]); 310 | const lat = parseFloat(position[1]); 311 | 312 | // 海外の地震の場合 313 | if(lon < 20.2531 || lon > 45.3326 || lat < 122.5557 || lat > 153.5912){ 314 | isOverseas = true; 315 | } 316 | positionCalculate([lon, lat]); 317 | } 318 | 319 | // 震度観測点 320 | function addPoint(position: string[]){ 321 | for(const element of position){ 322 | const areaPosition = element.split(':'); 323 | if(areaPosition.length != 2){ 324 | return; 325 | } 326 | positionCalculate([parseFloat(areaPosition[0]), parseFloat(areaPosition[1])]); 327 | } 328 | } 329 | 330 | // 緯度経度から中心位置、拡大率を求めるためにすべての合計と最大最小を取得 331 | function positionCalculate(metaData: number[]) { 332 | count++; 333 | 334 | if (metaData != []){ 335 | // 中心位置用のすべての合計 336 | centerPosition[0] += metaData[0]; 337 | centerPosition[1] += metaData[1]; 338 | 339 | // 初期設定 340 | if ((latMaxMin[0]+latMaxMin[1]) == 0 && (lonMaxMin[0]+lonMaxMin[1]) == 0){ 341 | lonMaxMin[0] = metaData[0]; 342 | lonMaxMin[1] = metaData[0]; 343 | latMaxMin[0] = metaData[1]; 344 | latMaxMin[1] = metaData[1]; 345 | }else { 346 | // 各緯度の最大最小を取得 347 | if (lonMaxMin[0] < metaData[0]){ 348 | lonMaxMin[0] = metaData[0]; 349 | }else if(lonMaxMin[1] > metaData[0]){ 350 | lonMaxMin[1] = metaData[0]; 351 | } 352 | // 各経度の最大最小を取得 353 | if (latMaxMin[0] < metaData[1]){ 354 | latMaxMin[0] = metaData[1]; 355 | }else if (latMaxMin[1] > metaData[1]){ 356 | latMaxMin[1] = metaData[1]; 357 | } 358 | } 359 | } 360 | } 361 | 362 | // 細分区域のstyle 363 | export function tileStyle(feature: RenderFeature): Style{ 364 | 365 | const properties = feature.getProperties(); 366 | 367 | if (parameter.areas1.indexOf(properties.code) !== -1){ 368 | // 震度1 タイル 369 | return new Style({ 370 | fill: new Fill({ 371 | color: color('1'), 372 | }), 373 | stroke: new Stroke({ 374 | color: color('1Stroke'), 375 | width: 2, 376 | }), 377 | }); 378 | }else if(parameter.areas2.indexOf(properties.code) !== -1){ 379 | // 震度2 タイル 380 | return new Style({ 381 | fill: new Fill({ 382 | color: color('2'), 383 | }), 384 | stroke: new Stroke({ 385 | color: color('2Stroke'), 386 | width: 2, 387 | }), 388 | }); 389 | }else if(parameter.areas3.indexOf(properties.code) !== -1){ 390 | // 震度3 タイル 391 | return new Style({ 392 | fill: new Fill({ 393 | color: color('3'), 394 | }), 395 | stroke: new Stroke({ 396 | color: color('3Stroke'), 397 | width: 2, 398 | }), 399 | }); 400 | }else if(parameter.areas4.indexOf(properties.code) !== -1){ 401 | // 震度4 タイル 402 | return new Style({ 403 | fill: new Fill({ 404 | color: color('4'), 405 | }), 406 | stroke: new Stroke({ 407 | color: color('4Stroke'), 408 | width: 2, 409 | }), 410 | }); 411 | }else if(parameter.areas5l.indexOf(properties.code) !== -1){ 412 | // 震度5弱 タイル 413 | return new Style({ 414 | fill: new Fill({ 415 | color: color('5l'), 416 | }), 417 | stroke: new Stroke({ 418 | color: color('5lStroke'), 419 | width: 2, 420 | }), 421 | }); 422 | }else if(parameter.areas5u.indexOf(properties.code) !== -1){ 423 | // 震度5強 タイル 424 | return new Style({ 425 | fill: new Fill({ 426 | color: color('5u'), 427 | }), 428 | stroke: new Stroke({ 429 | color: color('5uStroke'), 430 | width: 2, 431 | }), 432 | }); 433 | }else if(parameter.areas6l.indexOf(properties.code) !== -1){ 434 | // 震度6弱 タイル 435 | return new Style({ 436 | fill: new Fill({ 437 | color: color('6l'), 438 | }), 439 | stroke: new Stroke({ 440 | color: color('6lStroke'), 441 | width: 2, 442 | }), 443 | }); 444 | }else if(parameter.areas6u.indexOf(properties.code) !== -1){ 445 | // 震度6強 タイル 446 | return new Style({ 447 | fill: new Fill({ 448 | color: color('6u'), 449 | }), 450 | stroke: new Stroke({ 451 | color: color('6uStroke'), 452 | width: 2, 453 | }), 454 | }); 455 | }else if(parameter.areas7.indexOf(properties.code) !== -1){ 456 | // 震度7 タイル 457 | return new Style({ 458 | fill: new Fill({ 459 | color: color('7'), 460 | }), 461 | stroke: new Stroke({ 462 | color: color('7Stroke'), 463 | width: 2, 464 | }), 465 | }); 466 | } 467 | 468 | return new Style({ 469 | fill: new Fill({ 470 | color: color('land'), 471 | }), 472 | stroke: new Stroke({ 473 | color: color('areaStroke'), 474 | width: 2, 475 | }), 476 | }); 477 | } 478 | 479 | // 震度観測点、震源のstyle 480 | export function pointStyle(feature: RenderFeature): Style{ 481 | const seismicIntensity = feature.getProperties().type; 482 | 483 | switch(seismicIntensity){ 484 | case 'point1': 485 | return new Style({ 486 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 487 | scale: pointScale, 488 | src: 'static/icon/1.png', 489 | })), 490 | }); 491 | 492 | case 'point2': 493 | return new Style({ 494 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 495 | scale: pointScale, 496 | src: 'static/icon/2.png', 497 | })), 498 | }); 499 | 500 | case 'point3': 501 | return new Style({ 502 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 503 | scale: pointScale, 504 | src: 'static/icon/3.png', 505 | })), 506 | }); 507 | 508 | case 'point4': 509 | return new Style({ 510 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 511 | scale: pointScale, 512 | src: 'static/icon/4.png', 513 | })), 514 | }); 515 | 516 | case 'point5l': 517 | return new Style({ 518 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 519 | scale: pointScale, 520 | src: 'static/icon/5l.png', 521 | })), 522 | }); 523 | 524 | case 'point5u': 525 | return new Style({ 526 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 527 | scale: pointScale, 528 | src: 'static/icon/5u.png', 529 | })), 530 | }); 531 | 532 | case 'point6l': 533 | return new Style({ 534 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 535 | scale: pointScale, 536 | src: 'static/icon/6l.png', 537 | })), 538 | }); 539 | 540 | case 'point6u': 541 | return new Style({ 542 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 543 | scale: pointScale, 544 | src: 'static/icon/6u.png', 545 | })), 546 | }); 547 | 548 | case 'point7': 549 | return new Style({ 550 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 551 | scale: pointScale, 552 | src: 'static/icon/7.png', 553 | })), 554 | }); 555 | 556 | case 'epi': 557 | return new Style({ 558 | image: new Icon( /** @type {olx.style.IconOptions} */{ 559 | scale: 1.5, 560 | src: 'static/icon/epi.png', 561 | }), 562 | }); 563 | 564 | default: 565 | return new Style({ 566 | image: new Icon( /** @type {olx.style.IconOptions} */ ({ 567 | scale: 0.8, 568 | src: 'static/icon/1.png', 569 | })), 570 | }); 571 | } 572 | } 573 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "2bcc29969d8e43649478b20d04313c9e9e6bdc90bfbb0fd622aad64b28fa364e" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.6" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "click": { 20 | "hashes": [ 21 | "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", 22 | "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" 23 | ], 24 | "version": "==7.1.2" 25 | }, 26 | "flask": { 27 | "hashes": [ 28 | "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060", 29 | "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557" 30 | ], 31 | "index": "pypi", 32 | "version": "==1.1.2" 33 | }, 34 | "itsdangerous": { 35 | "hashes": [ 36 | "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", 37 | "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" 38 | ], 39 | "version": "==1.1.0" 40 | }, 41 | "jinja2": { 42 | "hashes": [ 43 | "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", 44 | "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" 45 | ], 46 | "index": "pypi", 47 | "version": "==2.11.3" 48 | }, 49 | "markupsafe": { 50 | "hashes": [ 51 | "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", 52 | "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", 53 | "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", 54 | "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", 55 | "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", 56 | "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", 57 | "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", 58 | "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", 59 | "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", 60 | "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", 61 | "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", 62 | "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", 63 | "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", 64 | "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", 65 | "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", 66 | "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", 67 | "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", 68 | "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", 69 | "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", 70 | "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", 71 | "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", 72 | "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", 73 | "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", 74 | "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", 75 | "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", 76 | "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", 77 | "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", 78 | "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", 79 | "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", 80 | "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", 81 | "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", 82 | "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", 83 | "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", 84 | "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", 85 | "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", 86 | "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", 87 | "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", 88 | "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", 89 | "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", 90 | "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", 91 | "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", 92 | "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", 93 | "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", 94 | "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", 95 | "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", 96 | "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", 97 | "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", 98 | "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", 99 | "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", 100 | "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", 101 | "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", 102 | "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" 103 | ], 104 | "version": "==1.1.1" 105 | }, 106 | "werkzeug": { 107 | "hashes": [ 108 | "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43", 109 | "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c" 110 | ], 111 | "version": "==1.0.1" 112 | } 113 | }, 114 | "develop": { 115 | "astroid": { 116 | "hashes": [ 117 | "sha256:87ae7f2398b8a0ae5638ddecf9987f081b756e0e9fc071aeebdca525671fc4dc", 118 | "sha256:b31c92f545517dcc452f284bc9c044050862fbe6d93d2b3de4a215a6b384bf0d" 119 | ], 120 | "version": "==2.5" 121 | }, 122 | "autopep8": { 123 | "hashes": [ 124 | "sha256:d21d3901cb0da6ebd1e83fc9b0dfbde8b46afc2ede4fe32fbda0c7c6118ca094" 125 | ], 126 | "index": "pypi", 127 | "version": "==1.5.4" 128 | }, 129 | "flake8": { 130 | "hashes": [ 131 | "sha256:15e351d19611c887e482fb960eae4d44845013cc142d42896e9862f775d8cf5c", 132 | "sha256:f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208" 133 | ], 134 | "index": "pypi", 135 | "version": "==3.8.3" 136 | }, 137 | "importlib-metadata": { 138 | "hashes": [ 139 | "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71", 140 | "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4" 141 | ], 142 | "markers": "python_version < '3.8'", 143 | "version": "==3.7.3" 144 | }, 145 | "isort": { 146 | "hashes": [ 147 | "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", 148 | "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" 149 | ], 150 | "version": "==4.3.21" 151 | }, 152 | "lazy-object-proxy": { 153 | "hashes": [ 154 | "sha256:1d33d6f789697f401b75ce08e73b1de567b947740f768376631079290118ad39", 155 | "sha256:2f2de8f8ac0be3e40d17730e0600619d35c78c13a099ea91ef7fb4ad944ce694", 156 | "sha256:3782931963dc89e0e9a0ae4348b44762e868ea280e4f8c233b537852a8996ab9", 157 | "sha256:37d9c34b96cca6787fe014aeb651217944a967a5b165e2cacb6b858d2997ab84", 158 | "sha256:38c3865bd220bd983fcaa9aa11462619e84a71233bafd9c880f7b1cb753ca7fa", 159 | "sha256:429c4d1862f3fc37cd56304d880f2eae5bd0da83bdef889f3bd66458aac49128", 160 | "sha256:522b7c94b524389f4a4094c4bf04c2b02228454ddd17c1a9b2801fac1d754871", 161 | "sha256:57fb5c5504ddd45ed420b5b6461a78f58cbb0c1b0cbd9cd5a43ad30a4a3ee4d0", 162 | "sha256:5944a9b95e97de1980c65f03b79b356f30a43de48682b8bdd90aa5089f0ec1f4", 163 | "sha256:6f4e5e68b7af950ed7fdb594b3f19a0014a3ace0fedb86acb896e140ffb24302", 164 | "sha256:71a1ef23f22fa8437974b2d60fedb947c99a957ad625f83f43fd3de70f77f458", 165 | "sha256:8a44e9901c0555f95ac401377032f6e6af66d8fc1fbfad77a7a8b1a826e0b93c", 166 | "sha256:b6577f15d5516d7d209c1a8cde23062c0f10625f19e8dc9fb59268859778d7d7", 167 | "sha256:c8fe2d6ff0ff583784039d0255ea7da076efd08507f2be6f68583b0da32e3afb", 168 | "sha256:cadfa2c2cf54d35d13dc8d231253b7985b97d629ab9ca6e7d672c35539d38163", 169 | "sha256:cd1bdace1a8762534e9a36c073cd54e97d517a17d69a17985961265be6d22847", 170 | "sha256:ddbdcd10eb999d7ab292677f588b658372aadb9a52790f82484a37127a390108", 171 | "sha256:e7273c64bccfd9310e9601b8f4511d84730239516bada26a0c9846c9697617ef", 172 | "sha256:e7428977763150b4cf83255625a80a23dfdc94d43be7791ce90799d446b4e26f", 173 | "sha256:e960e8be509e8d6d618300a6c189555c24efde63e85acaf0b14b2cd1ac743315", 174 | "sha256:ecb5dd5990cec6e7f5c9c1124a37cb2c710c6d69b0c1a5c4aa4b35eba0ada068", 175 | "sha256:ef3f5e288aa57b73b034ce9c1f1ac753d968f9069cd0742d1d69c698a0167166", 176 | "sha256:fa5b2dee0e231fa4ad117be114251bdfe6afe39213bd629d43deb117b6a6c40a", 177 | "sha256:fa7fb7973c622b9e725bee1db569d2c2ee64d2f9a089201c5e8185d482c7352d" 178 | ], 179 | "version": "==1.5.2" 180 | }, 181 | "mccabe": { 182 | "hashes": [ 183 | "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", 184 | "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" 185 | ], 186 | "version": "==0.6.1" 187 | }, 188 | "mypy": { 189 | "hashes": [ 190 | "sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c", 191 | "sha256:3fdda71c067d3ddfb21da4b80e2686b71e9e5c72cca65fa216d207a358827f86", 192 | "sha256:5dd13ff1f2a97f94540fd37a49e5d255950ebcdf446fb597463a40d0df3fac8b", 193 | "sha256:6731603dfe0ce4352c555c6284c6db0dc935b685e9ce2e4cf220abe1e14386fd", 194 | "sha256:6bb93479caa6619d21d6e7160c552c1193f6952f0668cdda2f851156e85186fc", 195 | "sha256:81c7908b94239c4010e16642c9102bfc958ab14e36048fa77d0be3289dda76ea", 196 | "sha256:9c7a9a7ceb2871ba4bac1cf7217a7dd9ccd44c27c2950edbc6dc08530f32ad4e", 197 | "sha256:a4a2cbcfc4cbf45cd126f531dedda8485671545b43107ded25ce952aac6fb308", 198 | "sha256:b7fbfabdbcc78c4f6fc4712544b9b0d6bf171069c6e0e3cb82440dd10ced3406", 199 | "sha256:c05b9e4fb1d8a41d41dec8786c94f3b95d3c5f528298d769eb8e73d293abc48d", 200 | "sha256:d7df6eddb6054d21ca4d3c6249cae5578cb4602951fd2b6ee2f5510ffb098707", 201 | "sha256:e0b61738ab504e656d1fe4ff0c0601387a5489ca122d55390ade31f9ca0e252d", 202 | "sha256:eff7d4a85e9eea55afa34888dfeaccde99e7520b51f867ac28a48492c0b1130c", 203 | "sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a" 204 | ], 205 | "index": "pypi", 206 | "version": "==0.782" 207 | }, 208 | "mypy-extensions": { 209 | "hashes": [ 210 | "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", 211 | "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" 212 | ], 213 | "version": "==0.4.3" 214 | }, 215 | "pycodestyle": { 216 | "hashes": [ 217 | "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367", 218 | "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e" 219 | ], 220 | "version": "==2.6.0" 221 | }, 222 | "pyflakes": { 223 | "hashes": [ 224 | "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92", 225 | "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8" 226 | ], 227 | "version": "==2.2.0" 228 | }, 229 | "pylint": { 230 | "hashes": [ 231 | "sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc", 232 | "sha256:d0ece7d223fe422088b0e8f13fa0a1e8eb745ebffcb8ed53d3e95394b6101a1c" 233 | ], 234 | "index": "pypi", 235 | "version": "==2.5.3" 236 | }, 237 | "toml": { 238 | "hashes": [ 239 | "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", 240 | "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" 241 | ], 242 | "version": "==0.10.2" 243 | }, 244 | "typed-ast": { 245 | "hashes": [ 246 | "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1", 247 | "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d", 248 | "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6", 249 | "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd", 250 | "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37", 251 | "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151", 252 | "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07", 253 | "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440", 254 | "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70", 255 | "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496", 256 | "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea", 257 | "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400", 258 | "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc", 259 | "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606", 260 | "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc", 261 | "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581", 262 | "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412", 263 | "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a", 264 | "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2", 265 | "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787", 266 | "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f", 267 | "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937", 268 | "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64", 269 | "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487", 270 | "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b", 271 | "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41", 272 | "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a", 273 | "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3", 274 | "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166", 275 | "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10" 276 | ], 277 | "markers": "implementation_name == 'cpython' and python_version < '3.8'", 278 | "version": "==1.4.2" 279 | }, 280 | "typing-extensions": { 281 | "hashes": [ 282 | "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", 283 | "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", 284 | "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" 285 | ], 286 | "markers": "python_version < '3.8'", 287 | "version": "==3.7.4.3" 288 | }, 289 | "wrapt": { 290 | "hashes": [ 291 | "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7" 292 | ], 293 | "version": "==1.12.1" 294 | }, 295 | "zipp": { 296 | "hashes": [ 297 | "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76", 298 | "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098" 299 | ], 300 | "version": "==3.4.1" 301 | } 302 | } 303 | } 304 | -------------------------------------------------------------------------------- /tools/converted.json: -------------------------------------------------------------------------------- 1 | { 2 | "100": [ 3 | "石狩地方北部", 4 | "43.4151931842515", 5 | "141.49525560707" 6 | ], 7 | "101": [ 8 | "石狩地方中部", 9 | "43.010872239411", 10 | "141.291800149006" 11 | ], 12 | "102": [ 13 | "石狩地方南部", 14 | "42.8401853638524", 15 | "141.496898327669" 16 | ], 17 | "105": [ 18 | "渡島地方北部", 19 | "42.2715261571357", 20 | "140.227924212031" 21 | ], 22 | "106": [ 23 | "渡島地方東部", 24 | "41.9171303977866", 25 | "140.730104639953" 26 | ], 27 | "107": [ 28 | "渡島地方西部", 29 | "41.5890677088811", 30 | "140.250720331631" 31 | ], 32 | "110": [ 33 | "檜山地方", 34 | "42.1200892176946", 35 | "140.117224870458" 36 | ], 37 | "115": [ 38 | "後志地方北部", 39 | "43.1570832606841", 40 | "140.766313140274" 41 | ], 42 | "116": [ 43 | "後志地方東部", 44 | "42.8279967803352", 45 | "140.848074079286" 46 | ], 47 | "117": [ 48 | "後志地方西部", 49 | "42.8212795958583", 50 | "140.381809567057" 51 | ], 52 | "119": [ 53 | "北海道奥尻島", 54 | "42.1553384492168", 55 | "139.473175204362" 56 | ], 57 | "120": [ 58 | "空知地方北部", 59 | "43.8088241231416", 60 | "142.003884974433" 61 | ], 62 | "121": [ 63 | "空知地方中部", 64 | "43.510911886567", 65 | "141.982748253998" 66 | ], 67 | "122": [ 68 | "空知地方南部", 69 | "43.1340267466936", 70 | "141.912806597305" 71 | ], 72 | "125": [ 73 | "上川地方北部", 74 | "44.3385114570841", 75 | "142.392451316326" 76 | ], 77 | "126": [ 78 | "上川地方中部", 79 | "43.735583365414", 80 | "142.644551805745" 81 | ], 82 | "127": [ 83 | "上川地方南部", 84 | "43.2002642741056", 85 | "142.504343797753" 86 | ], 87 | "130": [ 88 | "留萌地方中北部", 89 | "44.4989700095592", 90 | "141.878134955653" 91 | ], 92 | "131": [ 93 | "留萌地方南部", 94 | "43.9417545962386", 95 | "141.733774434506" 96 | ], 97 | "135": [ 98 | "宗谷地方北部", 99 | "45.1894445178067", 100 | "141.918210986196" 101 | ], 102 | "136": [ 103 | "宗谷地方南部", 104 | "44.8665568352299", 105 | "142.43855171702" 106 | ], 107 | "139": [ 108 | "北海道利尻礼文", 109 | "45.2387861660525", 110 | "141.166627699514" 111 | ], 112 | "140": [ 113 | "網走地方", 114 | "43.8152965753998", 115 | "144.382103894481" 116 | ], 117 | "141": [ 118 | "北見地方", 119 | "43.8226200374306", 120 | "143.673887997429" 121 | ], 122 | "142": [ 123 | "紋別地方", 124 | "44.1637059557543", 125 | "143.183999955972" 126 | ], 127 | "145": [ 128 | "胆振地方西部", 129 | "42.613359798762", 130 | "140.894124905183" 131 | ], 132 | "146": [ 133 | "胆振地方中東部", 134 | "42.6805610965227", 135 | "141.697396642325" 136 | ], 137 | "150": [ 138 | "日高地方西部", 139 | "42.7170038822428", 140 | "142.406748749235" 141 | ], 142 | "151": [ 143 | "日高地方中部", 144 | "42.4684979347206", 145 | "142.58710610633" 146 | ], 147 | "152": [ 148 | "日高地方東部", 149 | "42.2081311544082", 150 | "142.999868946709" 151 | ], 152 | "155": [ 153 | "十勝地方北部", 154 | "43.3665628834425", 155 | "143.2988585723" 156 | ], 157 | "156": [ 158 | "十勝地方中部", 159 | "42.9092933852102", 160 | "143.296318802107" 161 | ], 162 | "157": [ 163 | "十勝地方南部", 164 | "42.4845011298408", 165 | "143.153859068292" 166 | ], 167 | "160": [ 168 | "釧路地方北部", 169 | "43.5472480898255", 170 | "144.399883448184" 171 | ], 172 | "161": [ 173 | "釧路地方中南部", 174 | "43.180280482733", 175 | "144.390527256347" 176 | ], 177 | "165": [ 178 | "根室地方北部", 179 | "43.7457962290942", 180 | "144.960978939025" 181 | ], 182 | "166": [ 183 | "根室地方中部", 184 | "43.3921494419389", 185 | "145.017145856032" 186 | ], 187 | "167": [ 188 | "根室地方南部", 189 | "43.3154699204573", 190 | "145.585475423304" 191 | ], 192 | "200": [ 193 | "青森県津軽北部", 194 | "40.9012879819584", 195 | "140.602759340444" 196 | ], 197 | "201": [ 198 | "青森県津軽南部", 199 | "40.5837111506307", 200 | "140.355676664483" 201 | ], 202 | "202": [ 203 | "青森県三八上北", 204 | "40.6162098596363", 205 | "141.217603896412" 206 | ], 207 | "203": [ 208 | "青森県下北", 209 | "41.3095280542848", 210 | "141.077901041411" 211 | ], 212 | "210": [ 213 | "岩手県沿岸北部", 214 | "39.8488708107972", 215 | "141.720190761799" 216 | ], 217 | "211": [ 218 | "岩手県沿岸南部", 219 | "39.2071220069916", 220 | "141.702753491058" 221 | ], 222 | "212": [ 223 | "岩手県内陸北部", 224 | "39.931554542287", 225 | "141.183482398172" 226 | ], 227 | "213": [ 228 | "岩手県内陸南部", 229 | "39.2215346022004", 230 | "141.160891785618" 231 | ], 232 | "220": [ 233 | "宮城県北部", 234 | "38.7081798510326", 235 | "141.022771333641" 236 | ], 237 | "221": [ 238 | "宮城県南部", 239 | "38.0409381021126", 240 | "140.661089277841" 241 | ], 242 | "222": [ 243 | "宮城県中部", 244 | "38.3899877375334", 245 | "141.004064365124" 246 | ], 247 | "230": [ 248 | "秋田県沿岸北部", 249 | "40.1200513403522", 250 | "140.096455999147" 251 | ], 252 | "231": [ 253 | "秋田県沿岸南部", 254 | "39.4444677774327", 255 | "140.171307132117" 256 | ], 257 | "232": [ 258 | "秋田県内陸北部", 259 | "40.169818598738", 260 | "140.578371768009" 261 | ], 262 | "233": [ 263 | "秋田県内陸南部", 264 | "39.4107479536497", 265 | "140.555936110668" 266 | ], 267 | "240": [ 268 | "山形県庄内", 269 | "38.7268035929364", 270 | "139.885451803039" 271 | ], 272 | "241": [ 273 | "山形県最上", 274 | "38.7924891508531", 275 | "140.295120305627" 276 | ], 277 | "242": [ 278 | "山形県村山", 279 | "38.3859722184277", 280 | "140.279056046712" 281 | ], 282 | "243": [ 283 | "山形県置賜", 284 | "37.9990598165106", 285 | "139.976229298984" 286 | ], 287 | "250": [ 288 | "福島県中通り", 289 | "37.3914691547508", 290 | "140.412029876442" 291 | ], 292 | "251": [ 293 | "福島県浜通り", 294 | "37.3509163241567", 295 | "140.838009636233" 296 | ], 297 | "252": [ 298 | "福島県会津", 299 | "37.3884896876914", 300 | "139.696186888682" 301 | ], 302 | "300": [ 303 | "茨城県北部", 304 | "36.5650203041214", 305 | "140.4501572932" 306 | ], 307 | "301": [ 308 | "茨城県南部", 309 | "36.0932846746818", 310 | "140.201946458283" 311 | ], 312 | "310": [ 313 | "栃木県北部", 314 | "36.8824768612142", 315 | "139.796845705343" 316 | ], 317 | "311": [ 318 | "栃木県南部", 319 | "36.512030461272", 320 | "139.834443306022" 321 | ], 322 | "320": [ 323 | "群馬県北部", 324 | "36.6945826617991", 325 | "138.928782969845" 326 | ], 327 | "321": [ 328 | "群馬県南部", 329 | "36.3350541464469", 330 | "139.031683822158" 331 | ], 332 | "330": [ 333 | "埼玉県北部", 334 | "36.120612876943", 335 | "139.362415936756" 336 | ], 337 | "331": [ 338 | "埼玉県南部", 339 | "35.9073583025148", 340 | "139.545329395159" 341 | ], 342 | "332": [ 343 | "埼玉県秩父", 344 | "35.9859328237761", 345 | "138.960967734764" 346 | ], 347 | "340": [ 348 | "千葉県北東部", 349 | "35.651395253314", 350 | "140.471172440167" 351 | ], 352 | "341": [ 353 | "千葉県北西部", 354 | "35.6937245250665", 355 | "140.134108404433" 356 | ], 357 | "342": [ 358 | "千葉県南部", 359 | "35.203428130897", 360 | "140.046035650559" 361 | ], 362 | "350": [ 363 | "東京都23区", 364 | "35.6910145729301", 365 | "139.735181991436" 366 | ], 367 | "351": [ 368 | "東京都多摩東部", 369 | "35.676657079624", 370 | "139.404014712941" 371 | ], 372 | "352": [ 373 | "東京都多摩西部", 374 | "35.7841008782466", 375 | "139.133267741272" 376 | ], 377 | "354": [ 378 | "神津島", 379 | "34.2141240116488", 380 | "139.14756016141" 381 | ], 382 | "355": [ 383 | "伊豆大島", 384 | "34.737504801755", 385 | "139.398860680118" 386 | ], 387 | "356": [ 388 | "新島", 389 | "34.3908705243122", 390 | "139.261953719004" 391 | ], 392 | "357": [ 393 | "三宅島", 394 | "34.0281970490155", 395 | "139.543209588378" 396 | ], 397 | "358": [ 398 | "八丈島", 399 | "33.0582036184704", 400 | "139.791238765374" 401 | ], 402 | "359": [ 403 | "小笠原", 404 | "26.4684789419563", 405 | "142.005446132563" 406 | ], 407 | "360": [ 408 | "神奈川県東部", 409 | "35.4158798516042", 410 | "139.541830262692" 411 | ], 412 | "361": [ 413 | "神奈川県西部", 414 | "35.4187572372285", 415 | "139.170065099832" 416 | ], 417 | "370": [ 418 | "新潟県上越", 419 | "37.028577309026", 420 | "138.153987349162" 421 | ], 422 | "371": [ 423 | "新潟県中越", 424 | "37.2523218878926", 425 | "138.885591560404" 426 | ], 427 | "372": [ 428 | "新潟県下越", 429 | "37.9351085765371", 430 | "139.396426040876" 431 | ], 432 | "375": [ 433 | "新潟県佐渡", 434 | "38.0443952706501", 435 | "138.389834987216" 436 | ], 437 | "380": [ 438 | "富山県東部", 439 | "36.6540191718457", 440 | "137.437080599991" 441 | ], 442 | "381": [ 443 | "富山県西部", 444 | "36.6116154042673", 445 | "136.942745221795" 446 | ], 447 | "390": [ 448 | "石川県能登", 449 | "37.2064867460047", 450 | "136.948180718148" 451 | ], 452 | "391": [ 453 | "石川県加賀", 454 | "36.3778009761394", 455 | "136.609662359906" 456 | ], 457 | "400": [ 458 | "福井県嶺北", 459 | "35.9656984036161", 460 | "136.361479635618" 461 | ], 462 | "401": [ 463 | "福井県嶺南", 464 | "35.5232068049401", 465 | "135.839517060097" 466 | ], 467 | "411": [ 468 | "山梨県中・西部", 469 | "35.6343864344763", 470 | "138.493498877733" 471 | ], 472 | "412": [ 473 | "山梨県東部・富士五湖", 474 | "35.5700482506783", 475 | "138.883889021463" 476 | ], 477 | "420": [ 478 | "長野県北部", 479 | "36.6881921251618", 480 | "138.150078155994" 481 | ], 482 | "421": [ 483 | "長野県中部", 484 | "36.1891456600816", 485 | "138.169651115476" 486 | ], 487 | "422": [ 488 | "長野県南部", 489 | "35.654790923255", 490 | "137.82736831621" 491 | ], 492 | "430": [ 493 | "岐阜県飛騨", 494 | "36.1187019703343", 495 | "137.226141814707" 496 | ], 497 | "431": [ 498 | "岐阜県美濃東部", 499 | "35.4816794817731", 500 | "137.316761509708" 501 | ], 502 | "432": [ 503 | "岐阜県美濃中西部", 504 | "35.6069261648036", 505 | "136.719663959301" 506 | ], 507 | "440": [ 508 | "静岡県伊豆", 509 | "34.8745640375043", 510 | "138.938865846631" 511 | ], 512 | "441": [ 513 | "静岡県東部", 514 | "35.2402420829625", 515 | "138.771488626138" 516 | ], 517 | "442": [ 518 | "静岡県中部", 519 | "35.1039139770262", 520 | "138.238197712947" 521 | ], 522 | "443": [ 523 | "静岡県西部", 524 | "34.8836462400842", 525 | "137.853989125771" 526 | ], 527 | "450": [ 528 | "愛知県東部", 529 | "34.9312735856154", 530 | "137.485860953082" 531 | ], 532 | "451": [ 533 | "愛知県西部", 534 | "35.0894580120775", 535 | "137.073328534043" 536 | ], 537 | "460": [ 538 | "三重県北部", 539 | "35.0047600275823", 540 | "136.526626961888" 541 | ], 542 | "461": [ 543 | "三重県中部", 544 | "34.6191734898224", 545 | "136.313318480575" 546 | ], 547 | "462": [ 548 | "三重県南部", 549 | "34.213724255505", 550 | "136.371820296006" 551 | ], 552 | "500": [ 553 | "滋賀県北部", 554 | "35.3900869659917", 555 | "136.165278079797" 556 | ], 557 | "501": [ 558 | "滋賀県南部", 559 | "35.0456639623281", 560 | "136.104847445449" 561 | ], 562 | "510": [ 563 | "京都府北部", 564 | "35.46787882351", 565 | "135.184751464577" 566 | ], 567 | "511": [ 568 | "京都府南部", 569 | "35.0789732223378", 570 | "135.65562115477" 571 | ], 572 | "520": [ 573 | "大阪府北部", 574 | "34.783462719498", 575 | "135.548853115561" 576 | ], 577 | "521": [ 578 | "大阪府南部", 579 | "34.4415819650787", 580 | "135.455666991985" 581 | ], 582 | "530": [ 583 | "兵庫県北部", 584 | "35.4408410901881", 585 | "134.71872293536" 586 | ], 587 | "531": [ 588 | "兵庫県南東部", 589 | "34.9317329074819", 590 | "135.099406804436" 591 | ], 592 | "532": [ 593 | "兵庫県南西部", 594 | "34.9963324958315", 595 | "134.553780088888" 596 | ], 597 | "535": [ 598 | "兵庫県淡路島", 599 | "34.3621637869522", 600 | "134.838411125225" 601 | ], 602 | "540": [ 603 | "奈良県", 604 | "34.3192656265881", 605 | "135.868735482575" 606 | ], 607 | "550": [ 608 | "和歌山県北部", 609 | "34.1028777946241", 610 | "135.3608210494" 611 | ], 612 | "551": [ 613 | "和歌山県南部", 614 | "33.726110390324", 615 | "135.656947155252" 616 | ], 617 | "560": [ 618 | "鳥取県東部", 619 | "35.3918635375182", 620 | "134.24926000843" 621 | ], 622 | "562": [ 623 | "鳥取県中部", 624 | "35.4044079729083", 625 | "133.789229650776" 626 | ], 627 | "563": [ 628 | "鳥取県西部", 629 | "35.2994577316796", 630 | "133.386845026069" 631 | ], 632 | "570": [ 633 | "島根県東部", 634 | "35.2992242948002", 635 | "132.951146669834" 636 | ], 637 | "571": [ 638 | "島根県西部", 639 | "34.7928361651109", 640 | "132.192509559817" 641 | ], 642 | "575": [ 643 | "島根県隠岐", 644 | "36.2013585892796", 645 | "133.208945191763" 646 | ], 647 | "580": [ 648 | "岡山県北部", 649 | "35.0926200808239", 650 | "133.823930457215" 651 | ], 652 | "581": [ 653 | "岡山県南部", 654 | "34.7162121935879", 655 | "133.802434935664" 656 | ], 657 | "590": [ 658 | "広島県北部", 659 | "34.7991919297154", 660 | "132.765038747369" 661 | ], 662 | "591": [ 663 | "広島県南東部", 664 | "34.5591852337011", 665 | "133.169466482037" 666 | ], 667 | "592": [ 668 | "広島県南西部", 669 | "34.3973239449629", 670 | "132.518452780871" 671 | ], 672 | "600": [ 673 | "徳島県北部", 674 | "34.0127123218254", 675 | "134.155924755563" 676 | ], 677 | "601": [ 678 | "徳島県南部", 679 | "33.786975641433", 680 | "134.365503868782" 681 | ], 682 | "610": [ 683 | "香川県東部", 684 | "34.3007139401047", 685 | "134.167233844802" 686 | ], 687 | "611": [ 688 | "香川県西部", 689 | "34.1906564629378", 690 | "133.817468763363" 691 | ], 692 | "620": [ 693 | "愛媛県東予", 694 | "33.9500060023073", 695 | "133.220443392779" 696 | ], 697 | "621": [ 698 | "愛媛県中予", 699 | "33.7395076842639", 700 | "132.869283566924" 701 | ], 702 | "622": [ 703 | "愛媛県南予", 704 | "33.3472717034619", 705 | "132.610302944072" 706 | ], 707 | "630": [ 708 | "高知県東部", 709 | "33.5201666208914", 710 | "134.065073389848" 711 | ], 712 | "631": [ 713 | "高知県中部", 714 | "33.6512155360333", 715 | "133.501258893035" 716 | ], 717 | "632": [ 718 | "高知県西部", 719 | "33.133110128076", 720 | "132.935115295384" 721 | ], 722 | "700": [ 723 | "山口県北部", 724 | "34.3572476995743", 725 | "131.359776226827" 726 | ], 727 | "702": [ 728 | "山口県西部", 729 | "34.1223591161337", 730 | "131.082290946589" 731 | ], 732 | "703": [ 733 | "山口県東部", 734 | "34.1095644130935", 735 | "132.089922630929" 736 | ], 737 | "704": [ 738 | "山口県中部", 739 | "34.1800151405053", 740 | "131.673551454039" 741 | ], 742 | "710": [ 743 | "福岡県福岡", 744 | "33.5952497614343", 745 | "130.403935574232" 746 | ], 747 | "711": [ 748 | "福岡県北九州", 749 | "33.741810156755", 750 | "130.908182834785" 751 | ], 752 | "712": [ 753 | "福岡県筑豊", 754 | "33.6260119930602", 755 | "130.73968769485" 756 | ], 757 | "713": [ 758 | "福岡県筑後", 759 | "33.2675430810854", 760 | "130.636383954678" 761 | ], 762 | "720": [ 763 | "佐賀県北部", 764 | "33.3679017829721", 765 | "129.948976438451" 766 | ], 767 | "721": [ 768 | "佐賀県南部", 769 | "33.2461579827258", 770 | "130.202283894043" 771 | ], 772 | "730": [ 773 | "長崎県北部", 774 | "33.2292689757298", 775 | "129.696488221909" 776 | ], 777 | "731": [ 778 | "長崎県南西部", 779 | "32.8706410511579", 780 | "129.881495729514" 781 | ], 782 | "732": [ 783 | "長崎県島原半島", 784 | "32.745846722548", 785 | "130.257068659466" 786 | ], 787 | "735": [ 788 | "長崎県対馬", 789 | "34.4084515600988", 790 | "129.32597991825" 791 | ], 792 | "736": [ 793 | "長崎県壱岐", 794 | "33.7855297970237", 795 | "129.716691163743" 796 | ], 797 | "737": [ 798 | "長崎県五島", 799 | "32.818834297997", 800 | "128.886870310454" 801 | ], 802 | "740": [ 803 | "熊本県阿蘇", 804 | "32.9619259755635", 805 | "131.108361031715" 806 | ], 807 | "741": [ 808 | "熊本県熊本", 809 | "32.7626764454036", 810 | "130.784193436199" 811 | ], 812 | "742": [ 813 | "熊本県球磨", 814 | "32.2823561048014", 815 | "130.847453124349" 816 | ], 817 | "743": [ 818 | "熊本県天草・芦北", 819 | "32.3538263913408", 820 | "130.287882170458" 821 | ], 822 | "750": [ 823 | "大分県北部", 824 | "33.4988415016572", 825 | "131.359900066464" 826 | ], 827 | "751": [ 828 | "大分県中部", 829 | "33.2228447448591", 830 | "131.583987201979" 831 | ], 832 | "752": [ 833 | "大分県南部", 834 | "32.9206720136167", 835 | "131.670221607535" 836 | ], 837 | "753": [ 838 | "大分県西部", 839 | "33.1772178549274", 840 | "131.133437868809" 841 | ], 842 | "760": [ 843 | "宮崎県北部平野部", 844 | "32.4260541648634", 845 | "131.521245562521" 846 | ], 847 | "761": [ 848 | "宮崎県北部山沿い", 849 | "32.5122652343594", 850 | "131.26564109005" 851 | ], 852 | "762": [ 853 | "宮崎県南部平野部", 854 | "31.7648845865247", 855 | "131.319831819666" 856 | ], 857 | "763": [ 858 | "宮崎県南部山沿い", 859 | "31.924251908024", 860 | "131.029034121253" 861 | ], 862 | "770": [ 863 | "鹿児島県薩摩", 864 | "31.7496641914499", 865 | "130.484942719855" 866 | ], 867 | "771": [ 868 | "鹿児島県大隅", 869 | "31.4208972338992", 870 | "130.924936450357" 871 | ], 872 | "774": [ 873 | "鹿児島県十島村", 874 | "29.6888031620734", 875 | "129.712994312664" 876 | ], 877 | "775": [ 878 | "鹿児島県甑島", 879 | "31.755201316317", 880 | "129.786634664733" 881 | ], 882 | "776": [ 883 | "鹿児島県種子島", 884 | "30.5980929866606", 885 | "130.918494282116" 886 | ], 887 | "777": [ 888 | "鹿児島県屋久島", 889 | "30.346878132117", 890 | "130.501382304569" 891 | ], 892 | "778": [ 893 | "鹿児島県奄美北部", 894 | "28.2881614692973", 895 | "129.439179108493" 896 | ], 897 | "779": [ 898 | "鹿児島県奄美南部", 899 | "27.6311862243228", 900 | "128.829035604575" 901 | ], 902 | "800": [ 903 | "沖縄県本島北部", 904 | "26.6554705574845", 905 | "128.058172038374" 906 | ], 907 | "801": [ 908 | "沖縄県本島中南部", 909 | "26.2609127490052", 910 | "127.732601148849" 911 | ], 912 | "802": [ 913 | "沖縄県久米島", 914 | "26.4106427459504", 915 | "126.83288263237" 916 | ], 917 | "803": [ 918 | "沖縄県大東島", 919 | "25.834855523386", 920 | "131.258912306859" 921 | ], 922 | "804": [ 923 | "沖縄県宮古島", 924 | "24.7741858594093", 925 | "125.242722844898" 926 | ], 927 | "805": [ 928 | "沖縄県石垣島", 929 | "24.4656012809041", 930 | "124.188763379481" 931 | ], 932 | "806": [ 933 | "沖縄県与那国島", 934 | "24.4553666704242", 935 | "122.988996964954" 936 | ], 937 | "807": [ 938 | "沖縄県西表島", 939 | "24.3219449294693", 940 | "123.82817843395" 941 | ] 942 | } -------------------------------------------------------------------------------- /tools/TohokuEarthquake.txt: -------------------------------------------------------------------------------- 1 | http://localhost:8080/?ti=震源・震度情報&epi=38.0,142.9&point7=&point6u=36.251:139.9323,38.1715:140.8918,38.4263:141.2106,37.3433:141.0129,38.6648:141.1595,38.6291:141.189,37.2529:140.3434,38.0982:140.6586,36.5915:140.6453,36.631:139.9866,37.2826:140.9935,37.8764:140.9196,37.1228:140.1914,38.4672:140.8801,38.5398:141.1282,38.574:140.9556,38.4783:141.0977,38.2663:140.9293,38.3175:141.0193,37.4949:140.9995&point6l=38.4002:141.1643,36.8825:139.9837,37.2895:140.2119,38.7348:141.3106,38.1777:140.6432,37.2342:141.0016,38.4466:140.8874,35.8168:140.2015,38.0085:140.621,37.5976:140.5811,37.2842:140.3689,36.3618:140.111,37.3216:140.6576,38.3177:140.6357,36.9479:140.9034,39.2701:141.8561,36.4106:139.3251,37.0198:140.121,37.8202:140.5084,36.3523:140.5955,38.8269:140.9917,38.2622:140.8976,36.1251:140.0903,38.3682:140.6605,39.4757:141.2887,37.8495:140.5165,37.6385:140.9849,37.5848:140.4312,37.3364:140.8132,38.0378:140.8526,37.2868:140.6263,36.9417:140.0828,37.3957:140.1325,36.659:140.1513,37.4361:140.7947,38.6919:141.1877,38.3364:140.8864,38.2428:140.914,37.081:140.4128,39.0512:141.1241,36.2393:140.3526,36.7061:140.7068,37.9763:140.7818,37.1488:140.3502,38.6579:141.2764,35.8992:140.0764,36.4368:140.0225,37.6076:140.461,36.1586:140.5165,38.2731:140.7894,38.4281:141.299,38.3303:140.9758,37.3961:140.3622,37.401:140.3603,38.138:140.927,37.4061:140.9632,38.8808:141.5747,38.7102:141.235,37.0544:140.3056,37.2013:140.3386,38.1049:140.8699,37.2778:140.6349,36.3815:140.4683,38.5142:141.0597,36.6584:140.0939,37.6792:140.7352,36.5482:140.0582,38.3052:141.5044,38.3854:141.0691,36.0227:139.7227,38.5876:141.251,39.065:141.7149,36.2341:140.1894,37.3379:140.8093,37.5474:140.1078,36.4404:140.0134,37.1079:140.7971,37.4375:140.6441,37.7015:140.9661,35.8323:140.1458,37.2107:140.409,39.0831:141.6657,37.1417:140.1554,38.0494:140.7308,36.5427:140.4109,36.1047:140.1886,36.9069:140.7929,37.0299:140.3796&point5u=35.8979:140.4994,38.3046:141.0592,36.1024:139.409,36.2859:139.8047,36.6831:139.9013,35.8098:139.7212,36.5321:140.1876,36.0781:139.7258,36.5497:139.8684,36.56:139.7675,36.1277:139.7024,36.139:139.4556,37.7338:140.6079,36.1391:139.2816,38.1496:140.2678,35.817:139.678,37.0911:140.9035,35.6319:140.173,35.7432:139.7696,35.7067:139.8684,37.8699:140.7889,36.0258:139.7367,39.9203:141.082,37.3689:140.87,36.322:139.0033,39.2928:141.1092,37.5035:140.7645,35.8471:140.6026,35.7073:139.6638,38.5489:140.8499,36.6137:140.565,36.734:139.6885,36.0422:139.3995,38.7573:141.1766,36.4552:139.076,38.5202:140.9382,37.5132:140.3939,36.4393:139.9099,36.4674:140.0934,35.9016:140.4053,35.6896:139.7618,37.1323:140.2156,36.8627:140.122,35.681:140.0983,35.7871:139.6589,39.1454:141.152,35.7089:140.7136,35.5225:139.7525,38.5718:140.8548,35.6125:140.1449,37.8455:140.6014,35.9537:140.3194,36.1314:139.6018,37.5615:139.8216,35.6728:139.8173,35.5291:139.7062,35.5727:140.3333,35.4399:139.6534,35.3077:139.2521,36.1727:139.5486,35.7692:140.3864,35.7356:140.4677,35.9646:139.7446,36.3425:139.4519,36.1021:139.5749,35.6025:138.5442,37.6407:140.9555,37.6422:140.9573,36.7823:140.3605,35.7488:139.7981,37.9043:140.0996,36.3147:139.8001,37.0891:140.5557,35.9514:139.9754,35.8409:140.2439,40.5312:141.3077,35.9112:140.0494,35.8296:139.8773,36.0595:139.6668,40.5991:141.3978,38.9015:141.5684,37.9115:140.7653,35.1111:139.8358,38.7943:141.5051,35.6073:140.1064,39.6266:141.7908,37.2146:140.9945,35.7907:139.8288,38.0554:140.7623,36.2525:139.4623,35.373:139.3839,36.0417:139.8828,37.7613:140.4799,37.2556:140.2471,36.6569:140.1514,37.5115:139.8294,36.2622:139.6493,37.441:140.4925,38.4565:141.3457,36.8067:139.9241,39.1293:141.1377,39.4844:141.147,36.0399:139.4537,35.8593:139.9588,40.7279:141.2579,37.5573:140.1048,39.2758:141.8857,36.6853:139.9665,35.8028:140.5742,35.7263:139.6666,36.1782:139.7554,36.6616:139.1342,36.1905:139.6614,36.2113:139.5342,39.2569:141.0983,37.4948:139.9297,36.1816:139.8911,36.2479:139.4048,40.4041:141.4371,35.8838:139.6262,38.6133:141.3019,36.2178:139.4424,37.7773:140.5961,39.1915:141.1736,36.9617:140.046,36.0658:139.5222,38.6001:140.4054,37.7585:140.4707,39.7841:141.3295,37.1022:140.3489,36.8714:140.4248,35.7664:140.6186,38.3331:140.283,35.7121:139.6091,37.8192:140.563,39.6988:141.1658,40.4525:141.6209,36.9776:139.8095&point5l=36.3263:138.8872,35.7512:139.7093,35.7416:139.5589,39.5461:140.3697,35.727:140.3428,40.1819:141.7641,36.3558:139.2988,35.4047:139.353,35.8368:139.5803,36.3769:139.7363,36.0566:139.3205,40.6127:141.2059,35.9345:139.3931,38.0045:140.0458,35.6706:139.772,36.4052:139.3306,37.5518:139.9259,36.6578:139.0784,35.702:138.7266,35.7177:139.566,36.646:139.0428,37.0655:138.876,35.6282:139.4034,35.3482:139.1394,36.9716:139.9164,35.8745:140.031,35.9873:139.1001,35.6796:139.7764,35.7126:139.78,35.6506:139.5407,35.3985:139.3112,38.6151:140.7585,39.9728:141.2122,40.2719:141.3038,38.2938:141.0042,35.8077:139.7242,35.7546:139.4685,37.2556:139.8721,35.8372:140.6686,35.708:140.5642,35.3611:140.3193,36.6448:139.1577,35.2988:140.0755,37.6573:140.5376,39.5766:141.8197,35.6991:139.7464,36.3015:139.2981,35.8256:139.6798,40.7448:141.158,40.5951:141.4284,38.7659:139.9047,35.7186:139.7902,35.4448:139.3909,36.0209:138.4921,35.5006:138.761,36.181:139.4354,40.8721:141.1416,36.9573:140.4095,36.2428:139.1937,38.7571:140.3125,35.6469:138.6918,38.7888:139.9644,36.2769:139.2485,35.708:139.6995,37.5262:139.7195,35.3:140.3866,35.8574:139.6489,36.0:139.624,35.5714:139.3733,35.8568:139.5491,37.0423:140.5097,35.4285:140.2882,35.5351:140.4403,35.7286:139.4775,36.427:139.8039,35.6092:139.7302,35.9898:139.0742,39.3483:140.0182,35.6459:139.6529,39.6472:141.9464,35.6167:139.7401,35.4973:138.7549,35.6713:139.3952,35.7081:139.7582,39.5997:141.6789,39.9878:141.3264,38.7375:140.1438,35.7435:139.8472,38.7041:140.2304,35.3102:138.9312,36.2912:139.3754,35.3267:139.1566,40.3268:141.4606,37.5622:140.5094,38.8576:139.9545,39.0121:139.9088,38.0551:140.1484,35.7857:139.5264,36.2343:139.5331,39.6953:141.1478,35.335:139.4032,35.7333:140.692,35.0346:139.8873,36.5692:139.8861,35.5606:140.1761,39.6967:140.9759,35.8529:139.4122,35.8578:140.1391,35.7972:139.5937,36.1771:139.1814,35.5604:140.368,35.6379:139.5046,40.3784:141.2587,40.1103:141.8177,35.6999:138.7215,35.4106:138.8611,38.4265:140.3135,35.6108:139.6433,35.4979:140.1153,35.6995:139.503,40.6095:141.3249,35.5719:139.6069,36.3375:139.7016,35.3207:139.0996,40.1904:141.7755,39.6472:141.9655,36.8061:139.4204,35.8563:139.9029,35.5718:138.5575,39.4691:141.2913,35.4424:139.3618,36.2488:138.4768,35.9774:139.5932,36.4474:139.0098,35.9258:139.8151,35.4122:140.354,37.4915:139.8741,35.647:140.1156,36.2516:139.1448,35.7127:139.8842,37.0217:140.3775,35.7107:139.8015,35.8225:139.8392,36.1151:139.3349,39.6336:141.4376,39.9264:141.0953,40.5138:141.4805,36.3948:139.2811,36.1476:139.3884,35.7211:139.8184,35.5303:139.4302,38.4833:140.3804,35.0219:139.962,35.6056:138.4916,35.6658:140.5048,35.9573:139.403,36.4142:139.2105,36.2236:139.3683,38.7737:140.78,35.6413:140.3761,36.7776:139.8506,35.7399:140.8578,35.6976:139.8245,35.6644:139.3276,38.4306:140.3907,35.8283:139.5263,38.8888:139.9289,36.4287:139.7486,35.9945:139.6624,38.5938:140.3727,35.4478:139.6425,35.6548:138.5677,35.9034:139.4826,38.0028:140.1891,35.7361:139.7834,37.6036:139.7554,36.0595:139.6013,37.9223:140.1166,35.7205:139.7364,35.631:139.6919,35.6672:138.554,38.3623:140.3779,36.2333:139.7408,37.4531:139.8843,35.7453:139.4267,35.9415:139.316,35.3307:139.2188,36.4178:139.158,35.6999:139.6364,34.3552:139.2678,40.4666:141.3819,35.81:140.5019,35.7108:139.4628,36.2448:139.5419,35.4309:139.439,40.6974:141.151,36.1004:139.6672,35.7812:139.6058,37.9123:140.1206,35.637:139.4463,36.5017:139.2838,35.6835:139.6166,36.1504:139.3807,35.7748:139.8043,35.589:139.5857,35.576:139.6559,35.4769:140.0489,36.5671:139.745,39.0815:141.7083&point4=39.5169:140.8301,39.3002:140.2868,36.0171:139.0086,41.1818:140.4817,35.5866:139.6548,37.1324:138.6077,41.2779:141.3289,35.8991:139.4746,37.7193:139.8724,36.4812:139.0462,39.318:140.7792,35.1507:140.312,35.5756:139.7387,35.7689:137.9443,37.7638:138.8834,36.3895:139.0634,35.5699:139.0788,36.054:139.3912,36.0709:139.0987,34.1894:139.1336,35.7886:139.2747,42.6381:141.6123,40.8645:141.1287,36.3453:140.3044,37.3054:138.7086,36.0391:138.1142,34.977:138.3831,40.0399:141.4365,37.5408:138.8095,38.2554:140.3396,39.383:140.0499,37.7604:138.8893,35.5515:137.8785,36.0582:139.1946,35.194:136.7387,37.8345:139.226,35.9645:139.2942,35.5935:138.4696,35.2727:139.6579,36.1148:139.1097,36.5516:140.4102,39.6069:140.3213,35.1682:136.9647,35.6224:139.559,35.4544:139.5387,39.3426:140.4342,40.9477:140.3596,37.6663:139.0402,39.9305:141.8889,39.5427:140.2063,38.2562:140.3458,42.575:141.9279,35.3192:139.5462,35.0994:138.9023,35.0789:136.7911,37.8372:139.2681,35.089:138.9534,37.3488:139.3161,41.084:141.2552,40.7992:140.4432,38.8499:139.9047,36.3281:138.4357,35.2539:140.3852,38.0457:139.9876,36.5476:138.9377,39.7001:140.7306,38.5946:139.7068,41.1959:140.9977,37.8677:139.094,36.2642:138.8803,35.1155:140.1022,37.7886:139.1147,37.6002:139.6467,40.5853:140.3971,39.4346:140.7501,37.5359:138.7076,37.9207:139.8697,40.6414:140.5936,35.934:137.6022,34.8158:139.0546,39.3138:140.5667,38.8579:140.2523,37.3941:138.7887,35.6609:138.5158,40.7853:140.4108,35.7997:139.4686,37.2237:138.4046,42.6344:141.6057,36.3044:139.1149,37.3354:139.6107,36.5898:138.8411,36.1494:139.0556,36.3483:138.5969,35.2128:138.6016,35.6279:138.5351,37.5871:138.9221,38.6788:139.8501,35.6303:139.1087,35.1441:139.6218,35.7425:139.3254,40.5072:141.253,35.2324:139.1069,41.0388:140.645,36.4386:138.9671,34.757:138.9876,42.1625:142.7771,36.5103:138.7523,35.1991:136.8216,35.5613:139.7161,39.3975:140.6317,36.307:139.9831,36.3852:138.8819,36.1185:139.885,37.1759:139.5254,37.4937:138.7826,35.5017:138.5422,37.5478:138.8774,36.2542:138.9889,41.2832:141.2113,37.6274:139.464,36.0046:140.3019,38.2992:140.1459,37.5754:138.7721,40.6152:140.5729,35.7694:138.4408,38.2245:140.062,35.6154:139.1548,36.5169:138.5302,40.6787:140.54,36.1518:140.2371,36.6398:139.0659,37.6935:139.1886,35.1703:136.8008,38.0597:139.4104,35.8796:139.5198,38.381:140.276,37.125:138.3456,36.3966:140.5349,40.0366:141.4502,35.0957:138.8633,41.8345:141.1411,35.5232:137.8374,42.1306:142.9353,35.6142:139.4181,40.2114:141.419,40.9029:140.4564,36.066:139.3609,40.7193:140.5936,42.8264:141.6408,39.8698:140.0658,36.7722:139.2248,40.6152:141.208,35.0591:138.9528,35.1206:136.899,38.9087:139.8436,35.5308:138.6099,39.8128:140.5803,37.9908:139.367,38.7679:140.2957,39.7179:140.0996,38.0746:139.4408,42.7837:141.6788,37.1478:138.2361,35.2721:139.5862,37.1872:138.3302,35.9577:139.0302,36.5648:138.6373,40.8087:140.3801,38.4265:140.1474,37.6154:138.8219,37.6988:139.058,40.1074:140.0725,42.1678:142.7673,35.5751:139.3265,35.1566:138.6618,35.1983:136.9661,40.9717:140.656,36.072:139.6968,40.696:140.4575,39.6562:140.5714,35.9815:139.3341,37.9529:139.1095,35.6387:138.7785,38.224:139.48,36.2743:138.405,36.2914:139.3609,37.9146:139.0108,36.243:138.9217,40.219:140.5838,37.6932:139.4818,36.398:138.9999,39.2975:140.5629,40.34:141.1523,38.2604:140.3488,35.1584:139.1371,34.9656:139.102,35.2205:136.6366,35.114:140.0989,38.9218:140.3564,35.6549:139.748,35.5901:138.616,39.1742:140.4791,39.2243:140.5227,38.7272:139.8267,35.0431:139.84,36.7405:139.4954,37.2703:138.8612,35.8848:140.2445,34.9082:139.8993,42.8087:143.6588,39.9363:141.897,35.6247:138.661,39.4496:140.3644,40.4656:141.1735,37.5716:139.0318,40.9673:141.3746,38.7965:140.2221,37.3719:138.559,39.2031:139.9076,36.1371:138.4718,35.222:138.6216,36.1141:139.7458,36.4574:140.4867,35.9875:140.1167,36.2043:139.2348,35.0966:137.0525,37.3259:138.8897,36.0131:138.9711,35.4462:138.4805,40.1985:140.0328,35.1193:138.9192,39.5145:140.5977,40.4084:141.7188,37.6557:139.9374,35.297:139.6012,36.425:138.793,37.6391:138.9577,39.8432:141.7965,35.5288:139.3217,39.8833:140.0705,38.1241:139.4438,38.9711:139.9423,36.3837:139.6145,40.8152:140.4473,35.5516:138.9055,36.5224:139.3099,38.0616:139.7434,42.9226:143.2121,39.1499:140.5722,35.7089:138.4461,35.5534:138.6651,35.1358:138.8992,35.9147:138.2407,34.8464:138.7699,40.9924:140.9155,35.3601:138.9873,38.8836:140.3394,40.6829:141.3696,35.114:138.9254,40.6018:140.499,39.9439:140.1113,35.9735:138.5845,35.8616:139.6456,36.2311:140.5351,36.0308:140.2148,36.6856:138.9254,35.1385:136.7931,37.2441:138.9243,37.6863:139.4772,37.6755:139.4588,38.2301:139.4864,36.0461:138.1097,35.7548:139.3875,36.6172:138.5918,36.5194:139.0083,36.1179:139.1045,35.1271:138.6213,42.9283:143.4483,37.8013:139.1442,43.4369:144.0855,35.1915:140.3488,40.4126:141.2803,35.7057:139.3538,36.0429:139.0238,35.6934:138.6869,35.4824:139.2764,35.714:139.4078,37.6911:138.8552,36.5551:139.8828,40.2032:140.0288,35.6103:138.9407,35.5995:139.6081,39.5445:140.5439,37.2232:139.5381,36.7118:138.2824,40.5841:140.5665,34.9874:139.8651,35.2661:139.084,36.1183:139.193,38.0562:139.7479,36.1027:140.5728,40.3752:141.5064,35.5232:137.8224,42.9581:144.0697,34.9762:138.4037,35.7918:138.4096,40.5767:140.2963,35.9899:140.0106,39.2869:139.9616,35.3799:139.2108,39.7739:140.6667,38.3807:140.2069,39.074:140.5867,39.2906:140.4293,40.6561:140.5028,35.6768:137.9196,35.4311:140.2271,36.0693:139.908,36.2864:138.8163,35.3924:139.5264,35.1074:138.8566,35.5996:138.5173,36.1563:139.9638,35.9644:138.2174,37.3077:139.9,39.0384:140.451,40.1836:141.1559,35.8823:139.1814,38.1828:139.4565,35.3364:139.1232,40.2677:140.5659,35.1703:136.695,39.5963:140.562,37.7445:139.1826,36.8019:140.751,35.9078:139.339,40.8219:140.7684,39.1792:140.6489,40.0633:140.2958,36.004:139.2734,41.2948:141.1972,35.6104:138.94,42.3448:142.3623,38.3856:139.9921,35.0481:139.0926,37.0395:138.8474,36.0086:139.2968,37.9152:139.3059,40.2261:140.3708,35.2254:139.6633,35.8558:139.3279,35.1133:136.8134,35.7895:138.9198,40.1015:140.005,40.7786:141.2181,37.7658:139.0191,38.3898:140.2743,40.7588:140.4284,35.5458:139.3615,36.7697:139.2437,35.2852:140.2454,35.3786:139.9449,36.0026:138.1409,37.9983:138.3219,38.0894:139.5649,39.6991:140.7181,40.6311:140.5502,41.0831:141.2478,39.4616:140.582,35.6038:139.5057,39.595:140.5554,35.7389:138.7146,35.8359:139.3911,37.9163:139.2186,37.84:139.184,40.7786:140.3365,35.3111:139.277,36.2869:140.4245,35.8282:137.9532,36.1846:139.7026,41.7701:140.7383,35.0167:138.4849,35.8377:138.4131,35.4648:138.813,39.2536:139.9223,36.1975:139.2815,35.3608:139.0826,39.1462:140.717,36.7329:140.4901,40.5275:141.5217,40.5863:141.0971,39.3988:140.0463,40.213:141.2955,35.5972:137.9097,40.9257:140.953,39.5438:140.0568,35.758:139.5297,40.1021:141.0523,39.2013:140.5421,38.7292:139.8013,35.7304:137.9341,36.3054:139.8766,38.914:139.8127&point3=42.9994:144.6927,35.9748:137.8255,38.0183:138.3681,35.3775:137.846,34.7391:135.5869,37.039:137.8627,36.0201:138.8977,35.0868:137.1518,35.2374:137.0215,38.6116:139.8345,38.4501:139.4961,37.0143:138.6526,34.6091:135.4775,35.0277:138.9289,37.2874:136.768,37.2767:138.3909,35.0595:136.1818,35.1496:138.622,36.7019:138.0889,34.8867:136.8324,36.9808:138.2252,34.4574:135.3688,36.0592:138.5509,34.6635:135.4956,36.2564:137.9785,35.142:136.8182,35.0632:136.9737,35.3641:137.8628,42.5533:140.8866,37.9507:139.3375,35.2034:136.8655,35.6038:137.609,35.1093:136.2615,40.5913:140.0039,43.1486:144.4976,34.8848:136.9934,38.4583:139.2467,43.5524:141.9175,35.4513:136.6728,37.7133:139.3809,39.198:139.5563,41.1305:140.3002,42.2826:142.7493,35.8132:137.5295,35.0105:136.0589,37.8216:139.3129,34.6935:135.4819,34.6065:135.7568,35.2763:136.2437,34.9772:136.9655,35.1216:136.9773,35.9794:140.1495,36.4214:137.8745,35.5787:138.0338,35.2293:137.0754,37.3043:138.8121,36.3595:138.3303,37.1615:138.9254,34.9119:137.0447,35.1793:136.926,36.7737:138.3247,35.5023:136.2225,40.6113:140.4553,40.7799:140.2087,41.4053:141.1691,35.1168:136.9211,35.772:139.3541,36.3238:138.2703,36.2287:138.7579,42.8826:141.5778,35.0117:136.9639,35.7494:139.5873,35.7922:138.0848,36.2492:137.5174,35.3353:136.6654,40.1918:140.6325,38.7895:140.0185,36.5672:138.0065,40.5822:139.9267,35.7304:139.1454,43.3455:142.3844,44.2199:143.6155,43.1246:143.611,43.2237:141.5171,36.0956:138.4844,35.8401:139.3215,36.7632:138.2548,41.4862:140.247,43.1037:141.5373,43.5071:142.219,41.1496:140.6348,41.4087:141.4486,35.2607:137.4058,34.6801:135.545,34.6494:135.7827,36.0557:136.2227,36.3438:139.2466,38.0745:138.4398,35.8464:137.6261,41.4297:140.8591,36.7327:137.0631,35.2424:138.4861,35.7186:139.7347,35.8375:138.0581,37.0926:139.5334,42.0963:140.5633,36.6347:139.4376,34.7788:136.9087,36.1932:138.4772,35.1739:138.9067,34.7344:136.5199,34.8391:137.8425,34.7116:135.4533,35.2005:136.7833,40.7782:140.1976,42.9057:140.7672,37.2199:138.6384,35.4965:135.7519,37.3129:138.7931,35.984:137.8356,36.1085:139.795,35.8729:137.9751,35.2673:136.87,34.6342:135.5427,42.79:141.601,36.1681:137.879,35.7107:139.6859,34.6793:135.6009,35.1802:136.9066,35.4871:139.6116,36.7489:139.7144,37.266:139.5386,37.4804:138.9926,40.6479:139.9304,35.371:138.4434,35.1745:136.2449,36.0696:138.08,34.7717:138.7753,35.3519:137.3816,35.0612:137.0211,35.4438:137.7474,35.2762:137.8541,35.377:136.264,42.4944:140.3539,34.7689:137.9987,35.0008:136.9085,34.5844:135.774,35.0184:135.8548,35.5474:139.7358,34.7026:135.6242,35.2476:136.9722,36.1408:139.6642,34.6269:135.6009,43.0114:142.8845,35.7041:139.4828,35.4985:136.1239,34.2053:139.1343,35.3011:136.0128,35.7801:140.3067,36.3134:140.5749,35.8029:137.245,35.2083:136.9107,36.5086:137.8507,34.3771:139.2572,35.3974:137.786,43.4557:142.467,35.3324:136.9077,36.934:138.8169,39.7225:140.1002,43.3938:145.1173,34.7278:135.4914,34.7503:139.3554,36.545:140.1742,41.06:140.4083,36.4029:138.0117,43.5578:141.9103,36.3478:139.1368,35.5138:137.8738,35.1295:136.2462,36.4891:137.9093,36.8918:136.7783,34.7279:137.8518,35.2166:137.0354,34.9422:135.9085,43.4305:141.8188,34.8815:135.7326,35.9007:140.4905,36.961:136.8645,35.0216:135.998,42.4211:141.0814,34.6953:135.5528,42.3483:141.0319,35.216:137.5091,36.036:138.547,35.8766:138.1312,36.4618:138.1801,35.3371:136.7781,43.1968:141.7754,35.1615:136.9885,36.1897:139.8188,41.8675:140.1242,43.0509:144.8498,36.3703:138.1288,35.4006:136.7625,35.2972:136.7496,34.9268:135.6958,35.1502:136.9342,35.3617:137.2546,36.6173:137.9747,43.2992:143.7656,35.6743:139.4771,37.0818:138.3343,36.7036:137.3074,36.2467:137.9705,36.6535:136.6451,40.6363:139.9284,34.7774:135.5618,35.977:140.6322,42.2586:140.2636,40.6163:140.4215,35.1041:136.8571,35.2711:137.7111,34.8464:135.6173,35.1223:140.1539,36.6975:138.312,40.8193:140.7501,36.5228:139.6681,43.5077:144.4485,34.7813:135.4697,35.0043:136.0846,34.7408:135.6339,36.2381:137.972,42.2945:143.3169,42.9805:142.3995,36.2564:138.2669,35.6839:139.4414,43.0602:141.3288,35.6151:139.7131,35.4643:136.0399,43.1721:141.3046,35.549:135.9082,34.6469:138.8194,35.4402:137.0163,34.8013:137.3588,43.3332:141.8553,34.6874:139.4412,35.132:137.0394,43.9115:144.6707,35.2004:136.23,34.682:135.5181,43.8181:143.9037,40.3279:140.7428,34.7184:137.5317,34.8755:135.7076,37.4365:138.8389,35.4707:136.6276,34.9879:136.999,43.0306:141.9657,35.295:137.4839,42.2528:142.5643,37.0252:138.2535,41.7162:141.0025,33.1138:139.7924,35.2683:137.2533,37.4539:139.5243,36.6627:138.1927,35.5604:137.452,37.1276:138.7559,36.1611:138.4836,37.6368:138.7741,34.8367:138.1763,36.8584:138.4067,35.5112:139.3847,35.3236:137.8161,34.7502:137.9246,35.7153:137.3711,34.8781:136.569,42.5513:141.356,36.7644:137.3412,35.4467:136.2425,36.8144:139.7153,35.2457:136.866,36.1235:137.9508,35.2192:136.6977,35.0607:136.1244,35.3647:137.4404,37.0063:136.778,36.2649:138.3622,36.3322:138.3461,43.4108:144.7704,34.8592:137.0548,34.6359:135.4946,35.1031:136.0121,35.5653:138.5024,38.2286:139.4745,43.2118:141.7858,43.3033:144.5996,35.2481:136.7802,37.2301:138.3296,35.3882:137.2158,36.6071:137.33,37.5307:138.7093,36.4241:137.8545,35.779:139.6803,35.1424:139.0795,36.0832:138.7774,35.6404:139.6632,34.706:135.5261,43.2436:143.5544,34.535:135.464,35.2851:136.6374,35.1457:136.1324,34.5778:135.5517,36.5066:137.9885,34.9759:137.4236,37.2265:139.0084,37.1279:138.4464,35.2505:136.912,35.0767:136.9332,42.6975:143.1356,34.5966:135.8374,35.9065:139.6481,35.366:136.7379,35.1688:136.2123,34.7888:135.4436,35.4883:137.5002,37.0524:138.2942,35.4115:136.234,41.1464:140.8145,42.4738:140.8764,34.7214:135.5437,36.4888:138.1477,35.9364:137.7832,34.5743:135.5975,35.5358:134.8224,34.8031:137.5561,41.0556:140.3459,34.788:135.68,36.2238:137.8678,34.705:135.5744,36.3801:139.2281,36.7096:137.2024,35.992:139.8026,35.8094:137.5509,35.4426:137.0,36.5891:136.6342,35.3155:136.2839,34.7567:137.4067,34.8143:135.6506,42.8741:141.8204,36.9875:138.5771,35.2214:136.8824,34.5043:135.4105,37.2559:138.977,36.6511:138.3072,35.4261:137.0611,35.432:138.3321,35.5516:137.8957,37.102:137.9867,38.053:139.4055,35.0812:137.1464,43.3346:141.8465,39.995:140.4031,42.9867:144.3778,37.6535:139.8633,35.4797:139.5344,35.1283:136.0978,41.8899:141.0291,34.6701:135.4737,36.99:139.8033,43.7996:143.9008,37.6421:138.7676,35.0701:136.2946,37.1594:138.4282,34.6504:135.5401,35.572:137.5276,36.0835:140.0765,34.9235:136.9907,37.0364:138.8462,35.4897:137.7023,42.8444:141.4473,35.3232:137.63,36.0945:140.3307,42.9925:141.5524,35.3529:137.2148,34.6571:135.4335,37.9664:138.3472,34.9986:137.0433,35.7358:140.83,35.0881:136.6988,34.6205:135.5586,34.7109:137.7261,34.6613:135.4755,34.9704:136.6357,35.1125:136.2078,37.0533:138.6989,36.6803:138.0015,42.7666:141.8221,34.6777:138.183,34.7661:135.628,36.4496:138.0682,36.4407:138.304,35.3918:136.6908,35.658:139.571,36.2835:138.2304,43.139:141.3513,38.5145:139.534,35.7672:139.3109,34.7585:135.5432,34.9028:135.6885,35.6855:139.7401,36.6486:138.1938,35.4495:137.4039,35.3017:137.3874,34.8512:136.9148,34.6851:135.8048,35.1339:136.0957,37.9902:138.396,35.3085:136.5614,37.4704:139.6445,43.1694:143.2408,42.905:143.8317,42.901:140.7581,41.385:141.045,35.7442:139.7424,35.9151:137.9819,35.7841:137.6941,43.1714:141.3155,43.1141:144.123,35.6829:137.6649,35.1687:136.9103,42.9845:144.3824,34.9561:137.0763,37.457:138.6664,35.023:136.6739,34.6831:135.4524,37.1052:138.1602,35.6808:139.3662,34.7211:135.4204,36.4253:137.9274,43.8007:141.9342,35.7269:139.1488,35.9954:139.0709,36.3378:137.8694,43.7938:145.0565,43.0736:142.8395,43.0846:140.82,34.7213:138.8751,35.985:137.9875,34.8661:136.8124,34.9401:136.5801,34.5737:135.7731,35.2743:136.2595,37.4098:139.7013,41.1946:140.4337,34.6827:138.9505,42.7608:142.1346,36.6725:136.8738,35.4887:137.5,35.3023:137.1699,34.6296:137.0939,35.9954:138.801,34.7589:137.3913,35.6335:140.0784,43.233:144.3248,36.2007:137.856,34.4871:135.4014,35.3743:137.6904,43.1213:143.6183,34.839:135.5044,36.067:138.0493,35.1742:136.7395,35.6382:138.3835,36.2946:137.8762,35.332:136.8705,40.79:141.065,41.4876:140.9957,40.3186:140.0386,43.3191:143.3049,37.0788:138.3831,35.0689:135.9808,36.9889:136.9015,35.055:136.8528,35.3591:136.9131,35.1751:136.8201,35.284:138.4624,36.0562:139.2626,37.2303:138.9611,34.6597:135.5186&point2=41.8995:140.6958,34.5463:136.5513,34.638:138.1281,35.6426:137.3238,42.7755:141.4021,36.9462:137.5599,44.0179:144.2799,35.5526:139.5363,35.4234:139.5857,34.8301:135.4172,36.6319:140.3959,42.1231:140.3679,35.9599:136.1824,37.0427:136.9681,34.5428:135.7508,34.5784:135.7367,36.2382:137.1862,43.1948:145.5209,37.4416:138.8431,34.8827:136.0626,34.9113:138.2799,36.7403:138.4129,35.1157:136.5614,35.222:136.2922,34.9718:135.8965,43.6015:141.3882,45.1397:141.3072,34.6089:135.7306,36.5419:136.6431,41.8691:140.127,34.6446:136.5394,35.4811:135.6177,34.7153:134.868,35.4286:136.2982,34.5581:135.6061,34.8484:138.2361,34.7566:134.8409,33.7282:135.3782,35.528:139.0333,35.8562:137.7078,34.6783:137.8167,34.8169:137.3151,35.4535:139.6118,35.3996:139.5734,34.4633:135.7402,36.4084:136.4456,35.6286:134.8135,35.5684:137.0103,37.4443:137.2877,35.5034:138.7419,41.937:143.2403,34.5793:135.6286,34.9652:136.6245,42.0174:143.1532,35.1614:138.6763,35.0674:136.0258,43.909:142.5695,35.4684:138.6069,34.7577:138.0846,34.9541:138.9964,44.0092:143.3558,35.4848:136.9797,35.2042:136.2614,41.7492:140.2512,34.8277:137.3685,35.7965:139.4659,34.7608:135.7857,36.2249:136.2043,34.9529:137.1793,35.4342:137.1308,38.4538:139.2386,43.1825:141.0168,35.6452:136.0555,35.3526:139.5638,36.7694:136.7213,34.0682:134.5737,35.4956:135.7466,36.3492:137.991,36.4686:136.5422,36.9686:136.9112,35.604:137.3547,33.7723:135.3214,35.0769:137.6978,38.6276:139.5889,34.5653:135.5172,35.0685:137.1676,43.9463:141.6322,35.5419:139.5098,44.4018:141.8493,36.2075:138.2143,34.6396:135.5165,36.592:137.2041,35.1898:137.8096,36.503:137.8511,34.5567:135.7949,34.8505:137.7091,36.7198:136.7067,35.1281:135.9178,43.3327:145.6003,41.9352:140.3695,35.5347:136.7275,34.8027:136.4364,43.5872:144.7153,43.8543:142.7686,42.7275:142.2973,42.5627:141.3499,36.8069:138.2069,43.3676:145.7385,35.9743:136.1298,35.4746:136.2346,36.779:137.9084,35.4268:139.5637,34.9137:136.6281,35.3373:136.3041,34.4744:134.8466,35.7421:139.2574,34.7323:135.3342,34.7486:134.9134,36.1702:137.3099,35.4414:139.6444,37.3919:136.9083,43.699:142.5103,41.9051:140.9697,35.0946:136.5383,34.8364:137.9279,35.3794:139.2048,35.0467:138.0815,36.32:137.311,35.5526:139.6352,35.172:136.4943,33.072:139.7983,42.8051:140.5302,34.5111:135.7069,44.0699:144.9973,42.6711:141.0791,35.5077:139.6848,35.5349:136.8443,35.6079:137.6125,36.4491:136.4583,34.8558:136.4516,35.7504:137.087,37.3067:137.15,35.4016:139.6196,34.3041:135.5527,35.373:139.597,40.5183:140.5678,34.8844:135.7998,36.5283:137.2293,34.4146:135.3043,35.0774:136.3004,43.1664:142.5903,34.5037:135.5557,41.328:140.8132,34.5005:135.5743,36.3041:137.1041,34.9379:136.283,36.7446:138.4126,34.6054:135.9573,34.8863:135.6604,36.7541:137.0257,35.6537:136.062,34.7596:136.4456,43.7454:141.7211,34.5372:135.562,36.6692:136.729,42.6181:143.4209,34.7186:136.5057,37.0159:139.3801,35.4618:139.498,35.1467:137.7197,34.2964:135.5037,35.1344:137.3119,34.6874:137.6078,43.1953:140.7835,34.7729:139.0413,34.5734:135.483,34.4891:135.7266,35.543:136.205,35.5819:137.1878,43.4001:141.4346,35.3531:136.0358,42.8077:140.6877,34.8819:136.5842,36.1669:136.2315,37.07:139.6808,36.4561:138.0453,35.1484:132.4066,35.5276:139.5141,34.7091:135.4994,34.8563:137.4232,36.7076:136.9238,34.6348:137.1397,34.5187:135.8432,35.2808:133.6351,35.1322:136.6314,35.0211:135.755,34.3938:135.2912,35.4966:139.5317,35.3616:136.3702,43.7849:143.6072,43.7735:141.3685,36.1561:137.2533,37.1547:138.512,37.3532:137.2445,34.4373:134.899,43.6249:142.6837,35.5356:135.1956,34.8263:137.22,35.6633:137.1618,35.5449:139.571,35.3328:137.1322,43.3309:145.5856,34.7709:138.252,35.0201:136.5073,34.4836:135.4236,35.5108:139.6443,35.5447:134.2846,34.8948:135.2121,43.8756:142.7443,42.6679:140.3049,35.5612:138.4614,34.5281:135.9523,35.3655:136.467,36.5123:136.9005,34.7843:135.4009,36.6959:137.3542,35.5316:135.981,35.5438:137.1199,35.4267:136.9854,44.1204:144.0712,36.8163:137.4192,35.4831:136.6788,43.1161:141.5462,41.6487:139.9976,35.0623:136.6835,42.3414:142.3688,36.8628:136.7975,35.7842:139.5276,35.4398:139.631,33.8938:135.1333,35.4587:139.6357,35.1659:137.6215,35.3641:136.9447,43.6746:143.3088,35.49:133.864,35.3662:139.5484,34.9114:138.7949,38.0294:138.24,34.8345:137.6697,34.7278:137.8219,36.56:136.8872,36.662:137.3193,34.5413:135.6992,36.428:138.0176,34.9307:137.5745,34.4335:135.2378,36.4911:136.4918,42.3118:140.9751,34.4377:135.3584,42.1287:143.3153,34.7984:135.8033,34.8702:136.4546,36.8265:136.7505,34.4865:135.4906,36.3967:136.4432,34.5383:135.5365,35.2827:133.6878,44.0201:144.2729,43.9401:145.1199,35.1663:136.8656,36.1162:138.9251,35.5224:139.5716,35.4901:139.5685,34.5207:135.4424,34.8644:137.1657,35.5447:136.9076,35.2829:136.4725,35.4528:139.599,34.458:135.5642,35.4839:139.4802,35.4794:133.822,35.0342:136.6644,42.4723:141.0338,35.6132:138.947,35.3543:135.9175,34.5735:135.4589,34.5187:135.6477,36.6798:138.3633,42.9311:143.2137,34.8037:138.2843,34.7152:136.9299,36.0835:137.2393,33.5068:133.9023,34.7073:137.9317,34.6009:135.4993,34.7887:136.5352,34.5645:136.016,35.1523:136.5241,36.1491:136.2671,35.4187:139.4895,36.7819:138.9695,34.8346:138.1268,35.5451:133.2352,34.6656:138.0547,35.5396:133.2316,35.4675:138.4425,35.1992:138.562,34.5032:135.5997,36.1338:136.2194,35.4619:135.8572,34.6975:135.2128,36.6787:138.9991,35.5268:136.6086,35.1577:140.3222,36.6959:137.2137,43.7885:143.6154,36.1586:138.7114,41.5321:140.4143,41.4301:140.1104,34.7618:136.1422,35.0152:135.7329,42.7814:142.3597,36.5855:137.14,35.0135:135.5735,36.7923:137.0561,42.6169:143.3583,34.859:137.3075,34.7567:135.5219,42.0436:140.8064,35.0742:136.5837,34.5151:135.7365,34.6815:137.881,35.386:136.3781,34.5169:135.7191,35.8712:137.1744,42.4825:142.0543,34.9028:135.6885,34.4017:135.3543,35.5226:139.6196,34.7546:135.8692,34.9816:137.8975,35.2791:138.4649,36.9228:138.4405,35.38:139.6478,43.9726:143.9069,36.5649:136.9716,35.7032:136.8034,34.8149:135.5692,36.5881:136.9195,35.4423:136.5729,43.757:142.3724,34.8217:135.4286,34.794:137.7899,34.4606:135.3708,38.2584:138.4337,34.928:136.1681,40.3888:139.9827,42.4984:143.2787,34.7549:138.7841,35.5654:135.1529,44.3557:143.3538,44.1184:142.5954,35.4265:139.5241,34.4729:135.9789,35.488:135.5492,35.4958:136.9179,34.8674:138.2576,34.8527:135.8569&point1=42.6461:140.0408,27.095:142.185,34.241:132.5496,36.2114:136.229,34.7133:136.4168,35.169:135.1041,34.4713:135.8207,35.5281:135.0992,36.4411:137.0353,35.603:136.4122,35.4804:133.4598,33.8923:135.1552,35.6317:135.1012,36.9272:136.7792,36.8265:137.4093,35.1551:135.6335,33.9321:135.9692,36.5772:136.9861,34.5045:135.7925,44.4294:141.4229,37.3689:137.0959,34.692:135.7006,34.7095:136.044,33.3364:131.4071,34.4789:135.9281,33.2066:130.3839,34.9189:135.4941,36.6475:136.9622,34.3519:135.6938,34.4908:136.7334,35.4879:134.2381,34.3596:135.2397,36.2193:136.1565,34.8263:136.2159,33.4277:134.0083,34.203:134.6098,34.6189:137.212,36.2053:133.3335,43.3558:140.4649,33.274:130.3739,34.8333:137.2386,34.0575:135.2161,35.9057:136.6667,34.3926:132.5045,34.9394:138.0753,44.5826:142.9618,33.224:130.3526,37.8487:138.3172,34.7562:134.0187,34.0663:134.3586,34.4646:135.6225,34.6292:135.7006,36.5144:136.5656,37.1441:136.7256,35.2435:138.3407,37.0241:137.7987,35.6006:135.9405,34.6437:134.9965,35.4506:135.3175,35.5033:135.0951,38.04:138.2567,35.1386:136.3878,34.3609:135.7918,34.5998:133.9196,36.2708:136.8985,35.286:135.3997,45.3184:141.8935,34.2563:135.3114,34.6906:139.4202,35.367:132.7547,33.2082:130.2885,43.2921:140.6014,34.2491:132.9958,34.8062:137.6511,42.795:140.2249,34.7338:134.039,34.7605:135.9394,34.6688:137.2643,34.8317:135.4711,35.4678:133.8961,34.5399:133.7413,35.5848:136.4574,34.317:135.1421,36.4018:136.8996,42.1297:139.9815,34.2293:135.1643,34.4916:135.6297,34.0699:136.1934,34.486:134.1857,35.476:137.1415,35.3388:139.6264,42.0853:139.4713,34.9726:135.4143,35.5107:133.4961,34.7957:135.9049,34.2389:136.2736,35.6348:136.6155,35.6242:135.0611,35.4531:133.4194,36.2801:136.3277,33.192:130.32,34.3945:136.7036,35.5153:133.6382,35.4863:134.2207,42.7011:140.0616,34.4495:135.7932,33.1811:130.1435,43.368:145.8026,34.5627:135.7167,34.07:134.5607,34.679:137.9887,37.0335:136.9699,34.3906:135.7897,34.6001:135.6955,44.3452:143.3561 2 | --------------------------------------------------------------------------------