皆さんは、Tableau上でデータを取り扱う際に、座標系や投影系が異なる事でうまく表示ができなかった経験などないであろうか。
Tableauは標準状態で、OpenStreetMapをベースマップに採用していることから、球面メルカトルの場合(EPSG:3857)世界測地系の場合(EPSG:4326)であるといえる。
そして、基数は10進数による表記を前提としており、これはGoogleMapであっても、BingMapであっても変わらない。
もちろん、座標系と、投影系は、地図情報的には異なるものであるが、今回の話とは趣旨が異なるので、詳細情報が気になる方は、
拙著
を購読していただきたい。
今回は、表題にある通りで、度分秒で表記されたデータを、10進数に変換してWEBマップに表示する方法を、よくある失敗例を交えて提示する。
まず、気象庁の配布するデータを表示URLより入手して確認していただきたい。http://www.jma.go.jp/jma/kishou/know/amedas/kaisetsu.html
これは各観測局のデータを、度°分'秒"形式で表記した(今回の場合は、度と分のカラムに小数点以下で秒を表記した)データになる。
これを表示するとどうなるであろうか。
例えば、分のカラムにある小数点を除去し、度と分を結合して一つのセルにし、緯度と経度に地理的な役割を与えて表示してみよう。
緯度 = [緯度(度)] + FLOAT("0." + REPLACE(STR([緯度(分)]),".",""))
経度 = [経度(度)] + FLOAT("0." + REPLACE(STR([経度(分)]),".",""))
(具体的には、観測所名:宗谷岬の場合 緯度(度):45、緯度(分):31.2000、変更後緯度:45.312000 とするような演算を行う。)
するとどうなるであるか、下記図のように、地図からはみ出していたり、一部分に寄ったりしていないであろうか。
これは、座標系や投影系とは別の次元で、基底を行うための基数が異なっているためである。
もちろん、地図や空間情報を扱うソフトウェアであれば、こういった変換用の関数や機能を用意しているものも多い。
度分秒とは何かを理解し、定義を逆算すれば、Tableauでも自作関数で対応可能である。
角度の単位「度」とは
円周を360等分した弧の中心に対する角度。
SI単位での呼び方:(π/180) rad
度の定義:円周を360等分した弧の中心に対する角度
角度の単位「分」とは
1分は1度の60分1の角度で、1分は円弧の21600分の1となる。
SI単位での呼び方:(π/10800) rad
分の定義:(1/60)度
記号: ′(プライム)
角度の単位「秒」とは
1秒は1度の3600分1の角度で1分は円弧の1296000分の1となる。
SI単位での呼び方:(π/648000) rad
秒の定義:(1/60)分
記号: ″(ダブルプライム)
よって、数式的には
(秒"/3600) + (分'/60) + 度
となる。
つまり、今回のケースであれば、
1.分のカラムから、小数点以下を[秒"]として定義する。
2.分のカラムから、整数部分を取り出し[分']として定義する。
3.上記数式に従い、変換を行う。
緯度を例にすると
分' = INT(LEFT(STR([緯度(分)]),2))
秒" = FLOAT("0." + SPLIT(STR([緯度(分)]),".",2))
変換後緯度 = ([緯度(秒")]/3600) + ([緯度(分')]/60) + [緯度(度)]
上記の変更を行うことで、10進数での表記となる。
同様に経度も変換を行ったものを、Tableau Publicに公開した。
https://public.tableau.com/profile/shoichi.otomo#!/vizhome/amedas_master/amedas_master
Otomo さん
どうもありがとうございます。
時間計算と似たようなことになりますよね。
2点、
1. Publicの VIZですが、差し支えなければ、Workbookをダウンロード可能にしてもらえたら、みなさん分かりやすいと思います。
2. 数値の計算の途中で文字列を間に使うところ、以下のように数字だけで扱っても良いかと思います。
緯度combined
[緯度(度)]+int([緯度(分)])/60+(([緯度(分)]*100)%100)/3600
Shin