BigQueryに保存された緯度経度データから、それらの平均の緯度経度を求めたい
SQLで求めるが、緯度経度は角度であるため、単純なAVG
をつかってはダメ
そのため、以下の式で求められる角度をSQLで算出する必要がある
BigQueryには数学関数が用意されている
そのためSUM
, COS
, SIN
はもちろん、アークタンジェント ATAN2
もあるため、それを利用すればよさそう
ただし、 ATAN2
の引数はラディアンであるため、緯度経度をラディアン変換する必要があるが、BigQueryにπ
が用意されていない
これをどうするか
ユーザ定義の関数を使う
BigQueryではSQL 式または JavaScript コードを使用してユーザー定義関数(UDF)を作成することができる
これを利用して、角度からラディアンに変換する関数を定義すればよさそう
CREATE TEMP FUNCTION RADIANS(x BIGDECIMAL) AS ( ACOS(-1) * x / 180 ); SELECT RADIANS(37); -- returns 0.6457718232379019
これでBigQueryに保存された緯度経度の平均を求めることができそう