FC2ブログ

App InventorでGPSから時速を計算しよう1日目

本日はApp InventorでGPSから時速を計算するアプリを作りたいと思います。
最近忙しくしばらく更新できていませんでしたが・・・
質問コーナーで「ピースさん」から質問をいただきました。
> 時速を表示させたいのですが、"Locationsensor"では、speed(時速:km/h)を表示できない様で、どうして良いものか困っています。
> 距離/時間=時速という計算方法は分かるのですが、経度や、緯度などの表示単位や、1秒ごとにどうやって移動距離を表示するのかなど、初心者の私には少し難しすぎます。

たしかに難しいですね。なかなか苦戦しましたが、一応できましたので記事にさせて頂きます。ピースさん質問ありがとうございました、改めてお礼申し上げます。

ではさっそく作っていきましょう。一気にご要望のものを作るのは大変なので一日目は、
A地点、B地点の緯度、経度を数値で指定

それらを用いてAB間の距離を求める
ということをやります。これができればあとでA、B地点の緯度経度をGPSから取得したものにすれば距離が求めれますからね。
そもそもGPSの緯度や経度からどうやって距離を計算するのか私はわかりませんでした。
そこでこちらのページを参考にさせて頂きました。
http://www.kiteretsu-so.com/archives/1183
詳しい解説はこちらを読んで頂ければ良いですが、正直私もよくわかりませんでした(笑)
重要なのは最後の方にある求める式です。
x=東西の距離、y=南北の距離、r=地球の半径とすると、
距離=√(x^2+y^2) 、(^2は2乗という意味です、三平方の定理ってやつですね)
x=緯度差のラジアン × r × q
y=経度差 × r
ただし q = cos(Aの緯度のラジアン)です。
これだけです。これをApp Inventorで実装すれば距離が求まります。さっそく作っていきましょう。

CapD20110912.jpeg

かなり変数等が多くなってしまいましたが、こんな感じです。上から順番に見ていきましょう。
まずA地点、B地点の緯度経度を指定します。なおA地点は大阪、B地点は東京としました。
☆☆変数☆☆
ido_a:A地点の緯度、keido_a:A地点の経度
_bに関しても同様です。調べて手動で数値入力です。
また r = 地球の半径 = 6378.137(km)です。これも調べて手動入力です。
x,y,qは先程述べたものに対応しています。
また変数idosaは緯度差のラジアン,keidosaは経度差のラジアンを一時的に入れるために用意しました。

☆☆kyori_keisan(関数、メソッド)☆☆
緯度経度から距離を計算するメソッド(紫の部分)を用意します。
まず緯度差のラジアンと経度差のラジアンを求めましょう。
convert degrees to radianは角度からラジアンに変更というブロックです。便利ですね。
ラジアンを取る(緯度b - 緯度a)という動作ですね。
経度も同様です。これでidosa,keidosaに緯度差のラジアン、経度差のラジアンが入りました。

続いてq,cos(Aの緯度のラジアン)です。
cos degrees というのは後ろにつけたブロックのコサインを取るというブロックです。ただしdegrees(ラジアンじゃなくて角度)に注意です。なのでそのままido_aをくっつければいいだけですね。

続いてx,yを求めます。
x = q * r * keidosa , y = r * keidosa 上に書いたものの式そのままですね。

最後に kyori = (x^2 + y^2)の√を取ります。
sqrtは後ろのブロックの平方根(√)、expt (上),(下)は上の下乗するというブロックです。
expt x,2ならばx^2ということですね。便利です。
後は画像を見ればもうそのままですね(笑)

これでkyoriという変数に経度緯度から求めた距離が入っているはずです。

表面(ブラウザ)の方はこんな感じで作っておきました。ラベル2つとボタン1つです。(LocationSnsorはまだ不要です)
aaa.png

最後にボタン1を押せばラベル2(上から二つ目)にkyoriの変数を表示させます。(上の画像の一番下のブロック)
完成です!!長々と書きましたがこれでできているはずです。
http://keisan.casio.jp/has10/SpecExec.cgi?id=system/2006/1257670779
こちらのページで緯度、経度を入力すると距離を出してくれるようです。
今作ったものとこのページで同じ距離が出るか試してみましょう・・・
私がやった限りだいたい同じ値がでました(笑)若干の誤差があるようです。
とりあえずはこれでいきましょう。


明日はこれを改良してGPSを絡めていきます。お楽しみに。

広告



2日目へ
スポンサーサイト



テーマ : androidアプリ
ジャンル : 携帯電話・PHS

App InventorでGPSから時速を計算しよう2日目

本日はApp InventorでGPSから時速を計算しよう2日目です。
1日目がまだの方はこちらへ

では1日目のものを継承してさっそく改良しています。
CapD20110927.jpeg

1日目でkyori_keisanというメソッドを実行すると変数「kyori」にA地点とB地点の緯度経度から求めた距離が入りましたね。それを利用します。
まずボタン2、3とクロック、ラベルを一つを追加します。ボタン2は開始、ボタン3は終了という表示にしておいて下さい。
まずButton2.Clickというところを見てみましょう。これは開始ボタンです。
・locationSensor1.Latitude:現在の緯度
・locationSensor1.ongitude:現在の経度
なので、ido_a~keido_bにとりあえず現在の位置の緯度、経度を入れておきましょう。そしてクロック1をtrueにして動かします。

次に右側のClock1.Timerという部分を見てください。
これはブラウザの方でClockを追加した時にTimeInterval=60000(ms)=1分に設定しておきました。(電池消費や精度も考えてこのぐらいが適切かと思いました。)
1分ごとにこの中にあるブロックを実行するという意味ですね。
まずkyori_keisanというメソッドを呼び出します。これでkyoriにA地点とB地点の距離が入りますね。
それをsoukyori(総距離)に加えます。これは最後に使用します。
ido_a=ido_b、keido_a=keido_bとするのは前回の位置を保存すると思ってください。
その後にido_b,keido_bに現在の位置を入れておきます。
これでA地点は前回の位置、B地点は今の位置となりますね。ややこしいですが簡単に言うと、
☆☆☆
大阪から東京へ行く場合を考えます。
・まずボタン2を押した時にido_a~keido_bには全部大阪の座標が入ります。もちろん距離0ですね。
・次にクロックの部分ですが、名古屋まで移動した場合ido_aには大阪の緯度が入ります。ido_bには名古屋の緯度が入ります。
・次に浜松まで移動した場合ido_aには名古屋の緯度、ido_bには浜松の緯度が入ります。
・次に横浜まで移動した場合ido_aには浜松の緯度、ido_bには横浜の緯度が入ります。
・・・・・
☆☆☆
ということを繰り返していく訳ですね。もちろん多少の誤差は生じます。クロック1は1分ごとなので1分間は直線移動したことになるので。(積分するイメージ)

そして最後にボタン3は終了という表示に変えておいて、総距離÷時間として時速をラベル3に表示させます。
これで時速が出るはずです。(私は車は所有してないため試すことができず残念ですが・・・)

何度も試行錯誤しながら一応できましたが、難しかったですね。
興味のある方は試してみてください。

次回は要望もあったので目覚ましアプリを作ってみたいと思います。(できるかはわかりません(笑))
お楽しみに~~~

広告



テーマ : androidアプリ
ジャンル : 携帯電話・PHS

最新記事

全記事表示リンク

カテゴリ

最新コメント

最新トラックバック

月別アーカイブ

QRコード

QR

プロフィール

びーさん1582

Author:びーさん1582
FC2ブログへようこそ!

最新記事
カテゴリ
全記事表示リンク

全ての記事を表示する

広告
ブログランキング

FC2Blog Ranking

アクセスランキング
[ジャンルランキング]
携帯電話・PHS
388位
アクセスランキングを見る>>

[サブジャンルランキング]
Android(Google)
92位
アクセスランキングを見る>>
FC2カウンター
ブログランキング
人気ブログランキングへ
関連ページへのリンク
検索フォーム
RSSリンクの表示
リンク
相互リンク募集中です

名前:
メール:
件名:
本文:

ブロとも申請フォーム

この人とブロともになる