ブラウザの位置情報③ ― 真面目に使って何か作ってみたんだけど・・・ [IT系とか]
前回、「真面目に使えば・・・」で、作るものが決まったので、今回はこれを実現する方法を考えます。
アクセス地点の位置情報を取得して、近くだったら、地図表示をルート案内に切り替えるのでしたね。
ルート地図の表示については、出発地と目的地の緯度経度を google map に渡すだけでOKなので、
あとは、ルート案内を表示するか、それとも通常の地図表示にするか?を判定すれば良いことになります。
例えば、会社所在地から1㎞以内にいる場合は、地図表示をルート案内に切り替えるようにしましょうか。
ページを開いた人の位置から、所在地までの距離を算出します。
距離を算出するには、、、
直角三角形を使いまくります。
まず、中学校で習った三平方の定理です。
出発地と目的地の緯度・経度の差分が、それぞれA、Bの値になります。
でも緯度経度は角度なので、距離に変換する必要があります。
まず、緯度の1度が何kmなのかを計算するには、地球の円周を計算して360で割ります。
経度の1度が何kmなのかを計算するのは、ちょっと複雑です。
高校で習った三角関数を使います。
大抵のプログラム言語にはコサイン関数というものがあって、角度をラジアン単位に変換して渡すとコサインの値を返してくれるので、これを利用します。
所在地から1㎞以内にいるかどうかを調べるのに、地球の直径や半径から距離を算出するっていう、なんだか壮大な話になってきました・・・
私は、主にWEBサービスや社内システムを作っているので、普段は数学の知識はほぼ不要なのですが、偶にこういうのが出てきます。
高校くらいの数学って、「こんなの、社会に出てから使わないじゃん!」とかブツブツ言いながら勉強した覚えがありますが、役に立つこともあるのです!
でも、すっかり忘れているので、そんな時にはこっそりスマホでググって調べます。
ところで、ここまで書いておいて、こんな事言うのもなんですけど
わざわざ計算しなくても、ルート地図表示に切り替える範囲を大体決めて、緯度経度を固定で持っておけばいいじゃない!?
プログラマーって、何か小難しいロジックの機能とかを無性に自分で作ってみたくなったりするけれど、なるべく簡単シンプルな方法で作らないとね。
無駄に時間がかかってしまいます。
システムって、同じ要件を満たすものでも、設計する人、作る人によって、開発にかかる手間、即ち開発コストが変わってくるのですよ。
さらに、開発コストの話をするなら、
そもそもこの機能、普通の地点表示のgoogle mapでも、大して使い勝手は変わらないんじゃ??
普通の地点表示の地図↓
えっと、ちょっとカッコ良いかなって思って。
サントリーホールみたいに、最寄り駅がいくつもある場所だったら、多少便利かな。。。
アクセス地点の位置情報を取得して、近くだったら、地図表示をルート案内に切り替えるのでしたね。
ルート地図の表示については、出発地と目的地の緯度経度を google map に渡すだけでOKなので、
ルート地図:
https://www.google.com/maps/dir/?api=1&origin=35.672638,139.736434&destination=35.667172,139.740841
出発地:赤坂駅(緯度35.672638、経度139.736434)
目的地:サントリーホール(緯度35.667172、経度139.740841)
https://www.google.com/maps/dir/?api=1&origin=35.672638,139.736434&destination=35.667172,139.740841
出発地:赤坂駅(緯度35.672638、経度139.736434)
目的地:サントリーホール(緯度35.667172、経度139.740841)
あとは、ルート案内を表示するか、それとも通常の地図表示にするか?を判定すれば良いことになります。
例えば、会社所在地から1㎞以内にいる場合は、地図表示をルート案内に切り替えるようにしましょうか。
ページを開いた人の位置から、所在地までの距離を算出します。
距離を算出するには、、、
直角三角形を使いまくります。
まず、中学校で習った三平方の定理です。
出発地と目的地の緯度・経度の差分が、それぞれA、Bの値になります。
でも緯度経度は角度なので、距離に変換する必要があります。
まず、緯度の1度が何kmなのかを計算するには、地球の円周を計算して360で割ります。
地球の円周 = 地球の直径 * 3.14
緯度1度の距離 = 地球の円周 ÷ 360
緯度1度の距離 = 地球の円周 ÷ 360
経度の1度が何kmなのかを計算するのは、ちょっと複雑です。
高校で習った三角関数を使います。
大抵のプログラム言語にはコサイン関数というものがあって、角度をラジアン単位に変換して渡すとコサインの値を返してくれるので、これを利用します。
所在地から1㎞以内にいるかどうかを調べるのに、地球の直径や半径から距離を算出するっていう、なんだか壮大な話になってきました・・・
私は、主にWEBサービスや社内システムを作っているので、普段は数学の知識はほぼ不要なのですが、偶にこういうのが出てきます。
高校くらいの数学って、「こんなの、社会に出てから使わないじゃん!」とかブツブツ言いながら勉強した覚えがありますが、役に立つこともあるのです!
でも、すっかり忘れているので、そんな時にはこっそりスマホでググって調べます。
ところで、ここまで書いておいて、こんな事言うのもなんですけど
わざわざ計算しなくても、ルート地図表示に切り替える範囲を大体決めて、緯度経度を固定で持っておけばいいじゃない!?
■ サントリーホール周辺の駅
北:赤坂駅(緯度35.672554 経度139.736340)
南・西:六本木駅(緯度35.663187 経度139.731313)
東:虎の門駅(緯度35.670556 経度139.750148)
⇒ アクセス地点の緯度経度が以下の範囲内だったら、ルート地図を表示する。
緯度:35.663187~35.672554
経度:139.731313~139.750148
北:赤坂駅(緯度35.672554 経度139.736340)
南・西:六本木駅(緯度35.663187 経度139.731313)
東:虎の門駅(緯度35.670556 経度139.750148)
⇒ アクセス地点の緯度経度が以下の範囲内だったら、ルート地図を表示する。
緯度:35.663187~35.672554
経度:139.731313~139.750148
プログラマーって、何か小難しいロジックの機能とかを無性に自分で作ってみたくなったりするけれど、なるべく簡単シンプルな方法で作らないとね。
無駄に時間がかかってしまいます。
システムって、同じ要件を満たすものでも、設計する人、作る人によって、開発にかかる手間、即ち開発コストが変わってくるのですよ。
さらに、開発コストの話をするなら、
そもそもこの機能、普通の地点表示のgoogle mapでも、大して使い勝手は変わらないんじゃ??
普通の地点表示の地図↓
えっと、ちょっとカッコ良いかなって思って。
サントリーホールみたいに、最寄り駅がいくつもある場所だったら、多少便利かな。。。