スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android  2つのGPS間の距離・角度の計算

2つのGPS間の距離・角度の計算	
Location.distanceBetweenメソッドを利用することで、GPS間の距離、角度を求めることが可能となります。
また、今後GoogleMapsの利用を考慮し、GPSの情報をGeoPointで利用します。
※イメージ
image002 (1)


■com.google.android.mapsライブラリの利用
GeoPointなどを利用するには、「com.google.android.maps」ライブラリを利用します。
プロジェクトのターゲットAPIを「GoogleAPIs」に変更します。
image004 (1)


■2点間の計算サンプル
今回は現在地から青森(固定値)までの距離と角度を計算します
1: package test.sample.gps;
2:
3: import com.google.android.maps.GeoPoint;
4:
5: import android.app.Activity;
6: import android.content.Context;
7: import android.location.Location;
8: import android.location.LocationListener;
9: import android.location.LocationManager;
10: import android.os.Bundle;
11: import android.widget.TextView;
12:
13: public class GPSTest extends Activity implements LocationListener {
14: private LocationManager locManager;
15:
16: @Override
17: public void onCreate(Bundle savedInstanceState) {
18: super.onCreate(savedInstanceState);
19: setContentView(R.layout.main);
20:
21: // ロケーションマネージャのインスタンス取得
22: locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
23: // 1:GPSプロバイダ 2:受信時間(ミリ秒) 3:距離(m) 4:LocationListenerインスタンス(自身)
24: locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000, 1, this);
25:
26: }
27:
28: @Override
29: public void onLocationChanged(Location location) { ①
30:
31: // 青森の緯度経度
32: double aomori_lati = 40.622292; ②
33: double aomori_long = 140.83374;
34:
35: // Locationの値を10万倍 = GeoPoint
36: // 現在地をGeoPoint変換
37: GeoPoint startPoint = new GeoPoint( ③
38: (int) (location.getLatitude() * 1E6), // 1x10の6乗
39: (int) (location.getLongitude() * 1E6));
40:
41: // 目的地をGeoPoint変換 ④
42: GeoPoint endPoint = new GeoPoint((int) (aomori_lati * 1E6),
43: (int) (aomori_long * 1E6));
44:
45: float[] result = GPS2点間計算(startPoint, endPoint);
46:
47: StringBuilder text = new StringBuilder();
48: text.append("現在地");
49: text.append("\n緯度:" + (startPoint.getLatitudeE6() / 1E6));
50: text.append("\n経度:" + (startPoint.getLongitudeE6() / 1E6));
51: text.append("\n目的地(青森)");
52: text.append("\n緯度:" + (endPoint.getLatitudeE6() / 1E6));
53: text.append("\n経度:" + (endPoint.getLongitudeE6() / 1E6));
54: text.append("\n\n距離(m)" + result[0]);
55: text.append("\n角度" + result[1]);
56:
57: ((TextView) findViewById(R.id.textout)).setText(text.toString());
58: }
59:
60: public float[] GPS2点間計算(GeoPoint startPoint, GeoPoint endPoint) {
61: double startLati = startPoint.getLatitudeE6() / 1E6;
62: double startLong = startPoint.getLongitudeE6() / 1E6;
63: double endLati = endPoint.getLatitudeE6() / 1E6;
64: double endLong = endPoint.getLongitudeE6() / 1E6;
65: float[] result = new float[3];
66: Location.distanceBetween(startLati, startLong, endLati, endLong, result) ⑤
67: return result;
68: }
69:
70: public void onProviderEnabled(String provider) {
71: }
72:
73: public void onProviderDisabled(String provider) {
74: }
75:
76: public void onStatusChanged(String provider, int status, Bundle extras) {
77: }
78:
79: }
80:

①GPS取得時にCallされるonLocationChangeメソッド
②青森県の緯度経度です。今回は固定値を直接記述します。
③LocationからGeoPointへ変換します。GeoPointは値を10万倍で扱います。
④double値をGeoPointへ変換します。
⑤Location.distanceBetweenにスタート地点の緯度経度、目的地の緯度経度を指定します。
第五引数には結果を格納するfloat配列を指定します。
float[0]には距離。Float[1]には角度が格納されます。
■角度について
角度は、北を「0度」として時計回りの角度が回答されます。
角度「10度」は、現在地から北を0度に右10度のため、目的地は大体「北東」となります。
スポンサーサイト

テーマ : android
ジャンル : コンピュータ

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。