GPSはじめの第一歩 Android編 2009/03/28 山本 慎也.

Slides:



Advertisements
Similar presentations
5-7 音声の再生 (1)テキストスピーチ A. 手順 音声による英文のスピーチ ・ Android 1.6 以降の実機で可能。 ・ Android では英語であれば エミュレータで可能。それ以前は実機のみ。 ・機種によっては音声がインストールされていない場合があるので、 Android.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
8-4 Google マップの利用 1.地図を表示 ( エミュレータでも可能 ) Android API キーを取得しておくこと。 【 AndroidManifest.xml 】 ・・・
API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.
アンドロイドの GUI 作成なんて怖くな い! In 第 5 回勉強会@徳島 / オープンフォース Android 勉強会 at 2010/07/15(sut) 夜子まま.
Apache Camel Data Format Component Apache Camel
GridLayout オブジェクト(省略)
創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 ac
Copyright by Rich & Giro
4月卒研報告              上藤紳也.
5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加
Android:Service 小山 圭.
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
早稲田大学 丸山 不二夫. 1993/ / 年 1994 年 1995 年 6月6月 10 月 3月3月 800K 1200K 400K インターネットの爆発.
JSFによるWebアプリケーション開発 第9回
Ex7. Search for Vacuum Problem
プログラミング基礎I(再) 山元進.
Apache Camel Data Format Component Apache Camel
Ex8. Search for Vacuum Problem(2)
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
8-2 センサ関係 1.センサの種類 種類センサの内容 TYPE_ACCELEROMETER 加速度センサ TYPE_MAGNETIC_FIELD 地磁気センサ TYPE_PROXIMITY 近接センサ TYPE_TEMPATURE 温度センサ TYPE_LIGHT 照明センサ TYPE_GRAVITY.
とても使いやすい Boost の serialization
とても使いやすい Boost の serialization
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Bridge Pattern
アルゴリズムとデータ構造 2011年6月20日
4.Eclipseの基本操作 4-1 Eclipseの起動
PBLソフトウェア班 ~ペイントアプリケーション開発~ 安藤 貴哉 小木曽 太紀
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
日本Androidの会 事務局長 SIPropプロジェクト 代表 グロースエクスパートナーズ 今村 謙之(いまむら のりつな)
第8回 2007年6月15日 応用Java (Java/XML).
第3回 2007年4月27日 応用Java (Java/XML).
アルゴリズムとデータ構造 2013年7月16日
第6回 2007年6月1日 応用Java (Java/XML).
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
PBLソフトウェア班(S1)  加藤和也  高橋しおり  古川智哉.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
Ex7. Search for Vacuum Problem
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
Annotation EJB 3.0 コース 第3回 2006年8月4日.
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
ソフトウェア制作論 平成30年11月28日.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
アルゴリズムとデータ構造 2012年6月21日
5-2 基本的なウィジェット (1)Toggle Button A. 配置
ねらい 数値積分を例題に、擬似コードのアルゴリズムをプログラムにする。
7.アプリケーションの連携 7-1 インテント(intent) 1.アプリケーションの連携とは
7-3 サービスの連携 1.サービスとは 画面を持たずに処理を行う【AndroidManifest.xmlへの追加】 …
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは
5-5 文字列の描画 (1)基本的な文字列描画 A.手順
Presentation transcript:

GPSはじめの第一歩 Android編 2009/03/28 山本 慎也

Ageda クールなGPSアプリの紹介 2点間の距離や方向の計算方法 ソースコードの紹介

クールなGPSアプリの紹介(1) 自分の位置を取得する 友達の位置を取得する 友達との距離と方向を取得する 友達の方向をアニメでお知らせ

クールなGPSアプリの紹介(2) 自分の位置 方向をアニメでお知らせ 友達の位置、距離、方向

クールなGPSアプリの紹介(3) とりあえず、アプリを走らせましょう。

2点間の距離や方向の計算(1) 2点の経緯から距離を計算しよう。 地球を平面として計算(近くの友達探しなら十分) 緯度:1度で約111km 経度:1度で約92km(緯度に依存) X方向にdx、Y方向にdyの差を持つ2点間は... sqrt( dx^2+ dy^2) で求まる。

2点間の距離や方向の計算(2) 2点の経緯から方向を計算しよう。 経緯からの距離の取得は前述 X方向にdx、Y方向にdyの差を持つ2点間の成す角は... atan( dy / dx ) * 180 * Πで求まるらしい。

サンプルコードの紹介(1) 自分の位置情報を取得する。 友達の位置情報を取得する。 友達との距離と方向を計算する。 (シミュレータでのGPS情報取得~ DDMS ~ ) 友達の位置情報を取得する。 (現在はスタブ、リアルタイムに友達の経緯を取得したい) 友達との距離と方向を計算する。 アニメで友達の方向を指し示す。

サンプルコードの紹介(2) GPSアプリの名前 Project name: LocationTestApp Package name: org.sample.locationtest Activity name: LocationTestApp Application name: LocationTestApp

自分の位置情報を取得する(1) AndroidManifiest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.sample.locationtestapp" android:versionCode="1" android:versionName="1.0.0"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".LocationTestApp" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> AndroidManifiest.xml

自分の位置情報を取得する(2) min.xml 典型的なボタンとテキスト 特別なことはしてません。 Check it up! <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/WhereAmI" android:layout_height="wrap_content" android:text="Where am I?" /> android:layout_width="wrap_content" /*省略*/ <Button android:id="@+id/WhereShouldIGo" android:text="Where should I go?" </LinearLayout> min.xml 典型的なボタンとテキスト 特別なことはしてません。 Check it up!

LocationListenerをimplements する場合上記4つのメソッドの実装が必要 自分の位置情報を取得する(3) public class LocationTestApp extends Activity implements LocationListener public void onLocationChanged(Location location) { } public void onProviderDisabled(String provider) { public void onProviderEnabled(String provider) { public void onStatusChanged(String provider, int status, Bundle extras) { LocationTestApp.java LocationListenerをimplements する場合上記4つのメソッドの実装が必要

自分の位置情報を取得する(4) LocationTestApp.java LocationManagerの取得 public class LocationTestApp extends Activity implements LocationListener{ /** Called when the activity is first created. */ private LocationManager LocMgr; private String Provider; Double MylatPoint; Double MylngPoint; Double direction; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocMgr = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); Provider = LocMgr.getBestProvider(criteria, true); LocMgr.requestLocationUpdates(Provider, 0, 0, this); LocationTestApp.java LocationManagerの取得

自分の位置情報を取得する(5) LocationTestApp.java “Where am I”ボタン押下 public void GetMyLocation(LocationManager Mgr){ /** text 表示部分の準備 */ TextView latText = (TextView)findViewById(R.id.MylatText); TextView lngText = (TextView)findViewById(R.id.MylngText); Location location = Mgr.getLastKnownLocation(LocationManager.GPS_PROVIDER); if ( location != null ) { MylatPoint = location.getLatitude(); MylngPoint = location.getLongitude(); latText.setText(MylatPoint.toString()); lngText.setText(MylngPoint.toString()); } LocationTestApp.java “Where am I”ボタン押下

GPSをシミュレートするには(1)

GPSをシミュレートするには(2) ←この会場の緯度経度 入力後 [Send]ボタン

友達の位置情報を取得する LocationTestApp.java “Where is my friend?” ボタン押下 public void GetFriendLocation(LocationManager Mgr){ /** text 表示部分の準備 */ TextView latText = (TextView)findViewById(R.id.FriendlatText); TextView lngText = (TextView)findViewById(R.id.FriendlngText); TextView directionText = (TextView)findViewById(R.id.DirectionText); TextView distanceText = (TextView)findViewById(R.id.DistanceText); //例えば、友達の居場所(緯度/経度)は、通信でリアルタイムに取得する。 //今回は、小職のオフィスの場所(福島駅周辺) Double latPoint = 34.415040; Double lngPoint = 135.292560; /* 距離と方向の計算処理が続く */ LocationTestApp.java “Where is my friend?” ボタン押下

友達との距離と方向を計算する LocationTestApp.java “Where is my friend?” ボタン押下(続き) //友達までの距離を計算しよう。 Double dx; Double dy; Double distance; dx = (MylatPoint - latPoint)* 111 * 1000; //緯度1度の長さ 約111km dy = (MylngPoint - lngPoint)* 92 * 1000; //大阪周辺の 経度1度の長さは約92km distance = Math.sqrt(dx*dx+dy*dy); //友達までの方向を計算しよう。北:0 西:90 南:180 東:270 direction = Math.atan2(dy,-dx) * 180 / Math.PI; //緯度/経度/方向/距離 を出力 latText.setText(latPoint.toString()); lngText.setText(lngPoint.toString()); directionText.setText(direction.toString()); distanceText.setText(distance.toString()+"m"); } LocationTestApp.java “Where is my friend?” ボタン押下(続き)

友達の方向をアニメでお知らせ LocationTestApp.java “Where should I go?” ボタン押下 /** どっちにいけばいい?? */ final Button WhereShouldIGo = ( Button )findViewById(R.id.WhereShouldIGo); WhereShouldIGo.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ DrawArrow(LocMgr); } }); public void DrawArrow(LocationManager Mgr){ Intent myIntent = new Intent(this, OpenGL.class); myIntent.putExtra("DIRECTION", direction); startActivity(myIntent); LocationTestApp.java “Where should I go?” ボタン押下 指の矢印は3Dグラフィックスで表現しています。 ご興味ある方はOpenGLクラスを追ってみて下さい。

ご質問はありますか? ご清聴ありがとうございました。