【開発アプリ】世界時計


世界の国名や都市名をPepperに言うと地図上の位置とともに日本との時差を教えてくれるアプリです。機能はシンプルですが、海外のスポーツやニュースを見たとき、国際電話をかけるとき、この国ってどこにあったっけ?と思ったときなど意外と便利かもしれません。


こちらはベーシックアプリとなりますので、アルデバランストアでは紹介されておりません。Pepperを最新バージョンにアップデートしていただけるとタブレットにアイコンが表示されていると思います。

 

タイトル画面で国や都市の名前をPepperに言います。
380ほどの都市名をカバーしておりますので、それはもうお好きな都市名をどうぞ!
(たとえば、アメリカ合衆国だけでも40都市が登録してあります)

このアプリも、カロリーと同じくAzureのDocumentDBを使っています。私がグーグル検索とエクセルを駆使して国名・都市名・緯度・経度・標準時刻をまとめたものをDB化し、そこにアクセスしております。


こんな感じ…。

今回はトルコのイスタンブールを検索してみます。
ヨーロッパとアジアをつなぐ都市として独特な文化を持つ場所ですね。一度は行ってみたいですねぇ。

timeDfference_result

Pepper『日本とイスタンブルとの時差は、コチラッ! 日本とイスタンブルとの時差は、-7時間。イスタンブルの現在時刻は、午後12時30分だよ!』

地図上を赤いピンがアニメーションで動き、検索した都市を指し示します。
ただこれだけのシンプルなアプリですが、名前や緯度経度の数値だけじゃなく、どこにあるかも分かりやすいためとても勉強になります。

 


アプリの仕組みはカロリーアプリと似ていますし、DocumentDBについても既に触れたので、今回は各都市の座標をディスプレイに表示させる計算の話をしようと思います。

名前や時間などをテキスト表示するだけではコンテンツ的に寂しいうえに、東西に広い国は都市によって標準時刻が異なります。ということで、ディスプレイに世界地図を出して各都市の座標を表示しようという試み。
しかし、都市の数が多いのでなんとか緯度経度の数値から自動で出力できないかなぁ…と思い、そうなるようにしてみました!

・まず、使用する地図を正距円筒図法にし、緯度経度も10進数表記を採用しました。
南極がとても大きくなってしまいますが、こうすることでディスプレイ上の座標計算がしやすくなります。

・ディスプレイ上で、1度が何pxに当たるのか計算しました。

timeDfference_cul

アプリ内のhtmlファイルをPCのブラウザ上で開き、(緯度, 経度)の位置を調べます。(0, 0)と(0, 180)のキョリは 968 – 116 = 852 pxですので、

180 : 852 = 1 : X
X = 852 / 180 = 4.73

1度あたり4.73pxということが判明しました。正距円筒図法なので、子午線の方向も同じになります。

・緯度経度の数値から、画面上での位置を計算します。

ChoregrapheのBoxで、DocumentDBから取ってきたデータをresultData[]という配列に入れました。

緯度は top:352px を基準に、北緯ならその分マイナス、南緯ならプラスして座標を出します。

同じように、経度も left:116px を基準に足し引きしますが、太平洋を中心とするこの地図では、ディスプレイ左端の位置で分岐させてCSSのleftを決めます。本初子午線は left:116px の位置でしたので、116/4.75=24.5。つまり、西経24.5度で計算式を分岐させます。今回アプリで使用しているデータだと、西端の都市(プライア)が-23.5度で、東端の都市(ルシフェ)が-34.9度ですので、ここで分かれていますね。
-24.5度以下の西経はディスプレイ右端から right で指定したほうが早いのですが、CSSではleftの数値のみをJavaScriptで変更させていきたいので、無理やり1707px(Pepperのディスプレイの横幅)を足しています。

こうして、topとleftに代入した値をJavascriptに受け取らせることで、地図上の都市がほぼ正確に出ます!

テキスト表示させる吹き出しの位置もそれに合わせて分岐しました。
東経150度がちょうどディスプレイの真ん中になるのでそこをy軸、赤道をx軸とする2次元の関数のグラフとしたとき、都市の座標が第1〜4象限のどこになるのかで分けています。
吹き出しのトゲの向きが変わりますので、ぜひアプリで確認してみてくださいね!


ここまで読んでいただいた方はお気付きかもしれませんが、私はプログラミングはまだペーペーなのですが、勉強で一番好きな教科は数学でしたので、こういうことを考えるのがとても楽しいのです。
これ作った時、嬉々として上司に報告したのですが「ふーん」みたいな反応だったので、ちょっとこの場に書いてみました。(座標計算大好きー)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です