ただ、走るだけ。いつまでも

ただただ走ってます。いつかはサブ3.5。

練習が終わったら妻にLINEをするツールをiftttで作ってみよう。その2

みなさんおつかれさまです。

 

このシリーズも思いがけず2回目になってしまいました。

 

yoneba-1717.hatenablog.com

 

前回、LINEでGoogleMapの場所を送っておけば、きっとどれくらいに帰ってくるか分かるからいいだろうと思っていたんです。

でも、厳しめの評価をいただきました。

「緯度と経度で出されても分かる訳ない」

「地図で出されても帰ってくるまでどれだけかかるかわかんない。いつも言ってんじゃない」

う〜む。地図を読めない女と話を聞かない男だな。

新装版 話を聞かない男、地図が読めない女

新装版 話を聞かない男、地図が読めない女

 

 

じゃ、どうしようか。

いったん、ゴール地点から家までの直線距離を表示してみます。直線距離なので、これを1km15分くらいで計算して歩いて帰るまでのだいたいの時間を出してみようか。

1 作り方

ゴール地点から家までの直線距離と所要時間はiftttに対応しているGoogleSpreadSheetで計算することにします。ですので、データの流れはこんな感じになります。

 

Garmin(Vivoactive3)-Webhook-ifttt-GoogleSpreadSheet-ifttt-LINE

f:id:yoneba_1717:20180922192720p:plain

ということで、前回作ったものを改造していきます。

2 緯度経度からの直線距離の出し方を調べる

今回、Webhookから得られるのはGarmin Vivoactive3が観測した緯度と経度。これと自宅の緯度経度から距離を計測します。

緯度(南北方向)は、だいたい1度あたり110.94297kmになります。

経度は、その地点の緯度によって、大きく変わってきますので、その地点での1度当たりのだいたいの距離が分かると直線距離も出るはずです。

では、公式です。ドン。

(経度1度当たりの距離(km))=
 2×π×(cos((その地点の緯度)×π/180) × (地球半径(km))) / 360
   地球半径は6378.137km
   まあ、東北、北海道、沖縄を除く日本は緯度だいたい35度くらいで計算しておけば
   そう誤差は出ません。πをかけて180で割ってるのは、degreeからradianへの変換です

で、だいたい91kmになります。

エクセルやGoogleSpreadSheetで計算してみると、さいたま市では、1度90.21725678kmくらいになります。*1

この辺の詳しいお話はこちらのリンクで。

blog.netandfield.com

 

というわけで、南北方向と東西方向の距離が出ましたので、直線距離を出しましょう。

これも公式があります。長方形の対角線を出す公式です。*2

(対角線の長さ)=√((長辺の長さ)^2+(短辺の長さ)^2)

これで、直線距離が出ます。

ここまでは予備知識です。これをGoogleSpreadSheetで計算します。

3 iftttのセット(WebhookからGoogleSpreadSheet)

まず、1つ目。WebhookからGoogleSpreadsheetです。

トリガーのWebhookは前回と同様にarrivalを設定します。

 

アクションのthatは、GoogleSpreadSheetを選択します。

事前にGoogleのアカウントからSpreadSheetを利用できるようにしておいてください。

spreadsheetとiftttを接続するための認証画面が表示されますので、認証します。

f:id:yoneba_1717:20180922205736p:plain

ChooseActionでは、Add row to spreadsheetを選びます。文字通り表に行を追加するアクションです。

f:id:yoneba_1717:20180924094916p:plain

 この画面では、以下のように設定します。

まず、Spreadsheet nameは、自分の好きな名前を入れてください。今回は、IFTTT_Myarrivalinfoとしています。

表が存在しなければ、自動で作ってくれます。

次にDrive folder pathは、フォルダーを指定できます。何も指定しなければIFTTTというフォルダがセットされます。

f:id:yoneba_1717:20180924121959p:plain

そして、Formatted rowに実際に表に書く内容を記述します。

文法は、セルの境界は、"|||"(縦棒3本)です。この間に表の中身を書きます。計算式も関数も記述できます。上で出した1度あたりの距離と自宅の緯度経度*3を計算式に入れて計算しています。*4

最後のセルはoffset()関数で左隣のセルを指定して、それにキロ15分をかけてだいたいの所要時間を算出しています。(round()関数で小数点以下四捨五入)

{{Value1}} |||{{Value2}} ||| {{Value3}}|||
=round(sqrt(power(({{Value1}}-35.858123)*110.94297,2)
+power(({{Value2}}-139.657807)*90.21725678,2)),3)|||
=round(offset(indirect(address(row(),column())), 0, -1)*15,0)

 35.858123と139.657807をグーグルマップで取得した自宅の緯度経度に変えてセットします。日本の北と南の方は、90.21725678を計算値で置き換えてください。(表示用に改行が入っていますので、削除して貼り付けてください)

ということで、GoogleSpreadSheetにこんな感じで格納されます。

f:id:yoneba_1717:20180924135515p:plain

 

4 iftttのセット(GoogleSpreadSheetからLINE)

次は、GoogleSpreadSheetからLINEに通知を飛ばします。

トリガーはGoogleSpreadSheetで、アクションはLINEです。

先ほど、SpreadSheetに行を追加するようにしたので、今度のトリガーは行が追加されると動くようにします。 

f:id:yoneba_1717:20180924112222p:plain

同じフォルダとファイル名を設定します。

f:id:yoneba_1717:20180922205902p:plain

 あとはLINEの文書を入れて、セルの列名を入れます。これで、出来上がり。最後にFinishします。

f:id:yoneba_1717:20180924122548p:plain

テスト送信してみました。

お〜距離と時間が出た。これで少しは便利になるかな。

f:id:yoneba_1717:20180924135330j:image

 

にほんブログ村 その他スポーツブログ マラソンへ
にほんブログ村

*1:地球は楕円回転体ですが、ここでは無視します

*2:これも厳密には台形の非平面なので違いますが、無視します

*3:この例では、浦和駅35.858123, 139.657807にセットしています

*4:セルに名前を付けて、各固定値を名前付セルに格納して計算するとエレガントですが、面倒なので、数値をベタ打ちです^^;