見出し画像

GPSの緯度経度情報から気象庁の一次細分区域を導き出した話

ここの所、雨雲レーダーを簡単に見る事の出来るWebアプリ「このあとてんき」を力を入れて開発している所です。


そもそもは現在の天気を表示させたいという話から始まる

このアプリの機能の一つとして、「現在の天気がどんなものか」、「これから先どうなるか」という事を表示したいと思います。

赤枠の中の情報を取得したい

画面は現在の天気、このあとの日射量、平年の日射量を画面上部に表示して、下の表にはこのあとの予報データを時系列に数値で表示します。
日射量の予報データというのは、農業などでは日射量のデータが欲しいという話をよく聞きますので実装してみました。

これからの天気がどうなるかという天気予報に関しては、れっきとした気象予報士のお仕事になりまして、素人が予想して周知させる事は法律違反になってしまいます。

なので、予報部分は気象情報を扱っているサービスを利用する事になります。
基本的に日本で展開されている気象情報は有料サービスのものが多く、無料の場合は個人的に利用は出来るものの、アプリのように配布・商用利用禁止など制限が結構あります。

そんな中、気象庁のシステムが刷新され、基本的に情報をJSON形式でやりとりされるように変わりました。
今回はその情報を利用して気象情報を取ってみる事にしました。

緯度経度を元に情報を取得…できない!

雨雲レーダーのデータは気象庁のナウキャストから取得しましたが、「現在の天気」は気象庁からのJSONデータを取得します。

「気象庁 現在の天気 json」などのキーワードで検索をかけて、上記の記事を参考にしました。2021年に気象庁のサイトがリニューアルされて、JSONデータとして取得できるようになったそうです。

このあとてんきは現在の緯度経度を取得するのに3つの方法を使っています。

・GPS情報から緯度経度情報を取得
・郵便番号を入力して大体の位置を取得
・地図から直接入力

なかなか簡単に出来る、と自分では思っていて、出来ればこの緯度経度情報を元に気象庁のJSONデータを取得すれば、余計な設定はせず使いやすいじゃないですか。

が、緯度経度情報から一次細分区域を導き出せる情報はありません!

そもそも、天気情報というのは気象庁の定める「一次細分区域」という区域に分けて予報しています。一次細分区域というのは静岡県だったら「西部、中部、東部、伊豆」ですね。


気象庁のデータは一次細分区域が数値として定義されて位置、それをキー項目としてJSON配信されています。
例えば静岡県の情報は220000.jsonを取得します。

https://www.jma.go.jp/bosai/forecast/data/forecast/220000.json

ここから浜松市(静岡県西部)の情報を辿っていくわけですが、そこには位置情報や都市名などは存在してません。別のAPIから取得するしか手がありません。

一番楽な解決方法は自分の設定した情報とは別に「静岡県西部」の天気情報を取得する、という設定項目をアプリに新たに入れ込む事になりますが、せっかく位置情報を設定したのに、それが使えないのは使い勝手が悪い。
と言う訳で何とか頑張って設定できるようにしてみました。

緯度経度情報から一次細分区域を導き出す方法1

最初に思いつく方法として以下を考えました。
各自治体のgeoJSONデータを用いて、予め設定された緯度経度が含まれるかどうかの判断をする。
これは確実に一次細分区域を決められそうです。

この方法の欠点としては、geoJSONデータが結構大き目のデータになるため、サーバ側のリソースが負担になるかな、という事です。
また、一次細分区域とgeoJSONを紐付けしたデータを自社で管理する必要が出てきます。

一次細分区域が変更になるパターンは滅多にないですが、県の所属が変わった(長野県から岐阜県に変わった旧山口村)というパターンは過去にあったので、これからも無いとは言い切れません。

やはり自社でデータを管理した場合に気象庁のデータと齟齬があったら困るので、出来るだけ気象庁データを正として使いたい。

緯度経度情報から一次細分区域を導き出す方法2

次に思いついたのは、緯度経度の逆ジオコーディングデータから、気象庁のエリアコードを検索する方法です。

https://www.jma.go.jp/bosai/common/const/area.json

気象庁には予報データの他にも気象台の情報、自治体の情報、~地方の情報がまとまったarea.jsonというデータがあります。
もちろん一次細分区域もここに含まれています。

緯度経度から現住所を逆ジオコーディングし、県名、市名などを抜き出した結果でarea.jsonを総当たりすれば一次細分区域が導き出せそうです。

こちらの方法は基本的に軽いテキストデータの検索だけとなります。
(ただ、area.jsonのデータが結構癖が強いのですが)

こちらの方法にも欠点はあって、例外的な一次細分区域には対応できません。具体的には愛知県豊田市のように、愛知県西部と東部の両方が同じ市に
存在する場合となります。

気象庁のサイトから抜粋。豊田市西部と東部で一次細分区域が違う

これは市町村合併で実際の自治体と気象庁の一次細分区域があるいみ食い違ってしまった結果だと思われます。

ともあれ、今回は例外には目をつむり、2の方法を採択しました。


以上の調べてみた事を元に、もう少し先まで見通せる「このあとてんき」の改善を続けていきたいと思います。
位置情報から一次細分区域を知りたい需要があれば、API開放なども考えてみたいですね。


と言う訳で、天気アプリ開発の情報をまとめるべくnoteのマガジンを作りました!

私が共同代表を務めているGREEN OFFSHOREでは農業向けのIoTサービスを展開しています。
そちらにも様々な情報を展開しているので、ぜひ上記リンクをクリックしてみて下さい。


この記事が参加している募集

つくってみた

この記事が気に入ったらサポートをしてみませんか?