えー・・・
絶賛風邪ひいております。皆さん季節の変わり目には体調がぶっ壊れますので、うがい手洗いしっかりしてくださいね!!
本投稿は・・・
Power Apps Advent Calendar 10日目です。
今回の記事は・・・
こちらの記事の発展形、BizApp版のTipsです
PowerAppsのLocation関数を使ってノンコーディングでスピードメーターっぽいものを作ってみた
こんなデータがあるとします
場所 | 緯度 | 経度 |
---|---|---|
東京本社 | 35.6092 | 139.7301 |
福岡支社 | 33.5913 | 130.4148 |
緯度と経度があるなら・・・
Power Apps は、スマートフォンの緯度経度が取れるので
現在位置から目的地までの直線距離とか出したくないですか??
こんな感じで・・・
I build up IoT Key Control Apps using by #PowerApps and #CommonDataService !
— りなたむ || RYOTA NAKAMURA (@R_t_A_n_M) December 9, 2019
This app can't be operate unless close to the set distance.😘😘 pic.twitter.com/Iq42jN7fvx
早速作っていく!
2点間の距離の出し方
ヒュベニの公式を使います。
ヒュベニの公式
距離d=\sqrt{(d_y M)^2+(d_x N \cos \mu_y)^2}
緯度差d_y=y_1-y_2
経度差d_x=x_1-x_2
緯度平均値\mu_y=\frac{y_1+y_2}{2}
子午線曲率半径M=\frac{a(1-e^2)}{W^3}
M=\frac{6334834}{\sqrt{(1-0.006674 \times \sin \mu_y \times \sin \mu_y)^3}}
卯酉線曲率半径N=\frac{a}{W}
N=\frac{6377397}{\sqrt{(1-0.006674 \times \sin \mu_y \times \sin \mu_y)}}
W=\sqrt{1-e^2 \sin^2 \mu_y}
e=\sqrt{\frac{a^2-b^2}{a^2}}
参考サイト:日本は山だらけ:二地点の緯度・経度からその距離を計算する
スピードメーターと一緒のやつつかえばいいんじゃん!
と思うでしょ?
私も思ったんですよ。
でも今回ギャラリーでしょ?
データ毎に計算させないといけないんで、変数使えないんすよ。
コンポーネント化しちゃう?
試してみたけど、そもそもギャラリーにコンポーネント入れられないのよね。
計算式を作成する。
まぁこれしかないでしょうね・・・。
というわけで、紹介した記事のこちらの処理
Set(Var_Latitude_now,Location.Latitude)&
Set(Var_Longitude_now,Location.Longitude)
If(Var_Latitude_before <> Var_Latitude_now,
Set(Var_Latitude_Ave,Average(Radians(Var_Latitude_before),Radians(Var_Latitude_now)))&
Set(Var_Latitude_diff,(Var_Latitude_before - Var_Latitude_now))&
Set(Var_Longtitude_diff,(Var_Longtitude_before - Var_Longitude_now))&
Set(Var_Meridian_Radius,(6334834/Sqrt(((1-0.006674*Sin(Var_Latitude_Ave)*Sin(Var_Latitude_Ave))^3))))&
Set(Var_Rabbit_Radius,(6334834/Sqrt(((1-0.006674*Sin(Var_Latitude_Ave)*Sin(Var_Latitude_Ave))))))&
Set(Var_Latitude_before,Var_Latitude_now)&
Set(Var_Longtitude_before,Var_Longitude_now)
,"")
Set(Calc01,(Var_Meridian_Radius*Radians(Abs(Var_Latitude_diff)))^2)&
Set(Calc02,(Var_Rabbit_Radius*Cos(Var_Latitude_Ave)*Radians(Abs(Var_Longtitude_diff)))^2)
Set(Var_Distance,Sqrt(Calc01+Calc02))
を、関数を使わない計算式で表現してみましょう。
Concatenate("現在位置から ",Text(Round(Sqrt(
((
//Meridian_Radius
(
6334834/Sqrt(
(
(
1-0.006674*Sin(
//Var_Latitude_Ave
Average(
Radians(
ThisItem.緯度
),
Radians(
Location.Latitude
)
)*
Sin(
Average(
Radians(
ThisItem.緯度
),
Radians(
Location.Latitude
)
)
)
)^3
)
)
)
)*
Radians(
Abs(
ThisItem.緯度-Location.Latitude
)
)
)^2)+
(
//Rabbit_Radius
((
6334834/Sqrt(
(
(
1-0.006674*Sin(
//Var_Latitude_Ave
Average(
Radians(
ThisItem.緯度
),
Radians(
Location.Latitude
)
)
)*Sin(
//Var_Latitude_Ave
Average(
Radians(
ThisItem.緯度
),
Radians(
Location.Latitude
)
)
)
)
)
)
)*
Cos(
//Var_Latitude_Ave
Average(
Radians(
ThisItem.緯度
),
Radians(
Location.Latitude
)
)
)*
Radians(
Abs(
ThisItem.経度-Location.Longitude
)
)
)^2)
)/1000,2)),"km")
距離が出せたのであれば
特定位置になった時だけ、そのアイテムをクリックできる!
みたいなことも実現可能です!
そのやり方は、ぜひ皆さんの手で試してみてくださいね!!
まとめ
いかがだったでしょうか?
ノーコードというわけにはいきませんが
Power Appsでも、スマートフォンの各種センサーを元に
様々な機能を実装することができます。
難しい数学の公式も、今やネットで探せば簡単に手に入る時代。
あとは、その公式をいかにして関数に落とし込めるか。
という部分になってくると思いますので、ぜひ皆さんも日ごろから関数のリファレンスを見ながら
サンプルアプリをたくさん作っていってくださいね!