♪ 考える葦 携帯電話のGPS機能 Part6 観天望気 presents 尾瀬で幕営しま専科 
 Home »風景写真 »茨城の風景 »D100の世界 »蕎麦三昧 »温泉三昧 »考える葦 »パンドラの箱 » »HP内検索エンジン 

■ 携帯電話のGPS機能 Part6 (ちょっとだけ本気モード)

 そろそろちょっとだけ本気で携帯電話のGPS機能について、検討中です。

 自作するiアプリって、こんな感じで書いています。

 2つのJAVAで構成しています。 完成するのはいつになるかなぁ。 5月までに出来れば良いなぁ。



 // SH903i_GPSクラスはプログラムの本体となるクラスです。
 // [SH903i_GPS.java] Start

 import com.nttdocomo.ui.*; //パッケージのインポート

 // GPS情報の測位
 public class SH903i_GPS extends IApplication {

 // iアプリの開始
 public void start() {
 GPSCanvas c=new GPSCanvas();
 Display.setCurrent(c);
 c.exe();
 }
 }

 // GPSCanvasクラスはキャンパスとなるクラスです。
 // [GPSCanpas.java] Start

 // GPS (Global Positioning System) などに代表される、位置情報を取得するデバイスの制御を行うクラスを定義
 import com.nttdocomo.device.location.*;

 // アプリケーションならびにユーザインターフェースの作成に使用するクラスを定義
 import com.nttdocomo.ui.*;
 import javax.microedition.io.*;
 import java.io.*;

 // 測位を実行するか?待ちうけ画面(キャンバス)
 public class GPSCanvas extends Canvas {
 int keyEvent=-999;//キーイベント
 String text =""; //テキスト

 //実行
 void exe() {
 //グラフィックス
 Graphics g=getGraphics();

 //ソフトラベル
 setSoftLabel(SOFT_KEY_1,"測位開始");
 setSoftLabel(SOFT_KEY_2,"ログ閲覧");

 while (true) {
 //画面の描画
 g.lock();
 g.setColor(g.getColorOfName(g.WHITE));
 g.fillRect(0,0,getWidth(),getHeight());
 g.setColor(g.getColorOfName(g.BLACK));
 g.drawString("決定キーで入力[60バイト以内]:",0,12);
 g.drawString(text,0,24);
 g.unlock(true);

 //キーイベント
 if (keyEvent==Display.KEY_SELECT) {
 //文字入力
 imeOn(text,TextBox.DISPLAY_ANY,TextBox.KANA);
 } else if (keyEvent==Display.KEY_SOFT1) {
 ///GPS起動&測位開始&結果表示
 writeGPS();
 } else if (keyEvent==Display.KEY_SOFT2) {
 ///過去のログデータの表示
 readGPS();
 }
 keyEvent=-999;

 //スリープ
 try {
 Thread.sleep(100);
 } catch (Exception e) {
 }
 }
 }

 // GPS起動&測位開始&結果表示

 void writeGPS() {
 try {
 //測位の為の初期設定を行います。 自律測位を行うことを指定



 いよいよここからが本格的なプログラムの作成です。
 public static final int MODE_STANDALONE
 測位モードを表す定数値で、自律測位を行うことを表します(=2)。

 LocationProvider.getLocation() を呼び出した際に、 基地局からのアシストデータ無しに測位を行います。
 そのため、圏外でも測位できるというメリットが有りますが、 測位精度や測位にかかる時間は、他のモードに
 比べて劣ります。

 import com.nttdocomo.device.location.Compass; // 電子コンパス機能を提供します。
 import com.nttdocomo.device.location.Degree; // 緯度・経度などの角度を表します。
 // 角度は、DEGREE 単位(浮動小数点数表現、 固定小数点数表現)と DMS 単位を取得可能
 import com.nttdocomo.device.location.GPSLocationProvider; // GPS を用いる測位機能を表すクラスです。
 import com.nttdocomo.device.location.Location; // 測位結果を表します。
 //このオブジェクトには、緯度・経度・高度・測地系・水平方向の精度といった位置情報、 ならびに測位時刻が格納されています。
 import com.nttdocomo.device.location.LocationProvider; // 現在地を測位する機能にアクセスする手段を提供します。



 クラス LocationProvider

 これを唱えると、現在地を測位する機能にアクセスする手段を提供します。

 測位する機能にアクセスするには、getLocationProvider() を呼び出し、 測位機能を表すインスタンスを取得する必要があります。
 取得した測位機能インスタンスは、 このクラスのいずれかのサブクラスのインスタンスです。

 インスタンス取得後、 そのインスタンスに対して setMeasurementMode(int) を用いて測位モードを設定することができます。
 実際に設定することが可能な測位モードについては、 getAvailableMeasurementMode() により調べることができます。

 インスタンスに設定されている測位モードは、 getMeasurementMode() によって取得することができます。
 ここで指定した測位モードが測位精度や反応速度に与える影響は機種依存です。
 
 取得したインスタンスの getLocation() メソッドを呼び出すと、 指定した測位モードで現在地の測位を行います。
 その際、iアプリはサスペンドしません。 測位により得られた位置情報は、 測位結果オブジェクトとして返されます。

 出来るだけ楽をしたい私なのですが、、、このクラスは如何なものなのでしょうか?
 導入されたバージョン: DoJa-3.0 (505iGPS)、DoJa-4.0LE、DoJa-5.0 (903i)

 Doja-3.0から採用されたクラスって、、、ちょっと古いですねぇ。 (今や、1年前だって大昔と感じる携帯電話の世界なのです。)


 クラス GPSLocationProvider

 GPS を用いる測位機能を表すクラスです。 GPSをLocationProviderの前に付けるって、、、ちょっと期待しますねぇ。

 なら、このクラスは楽好きな私に優しい存在なのではないか! との、期待が膨らみます。
 で、マニュアルによりますと、

 このクラスのインスタンスを得るには LocationProvider.getLocationProvider(int) を、 引数に LocationProvider.METHOD_GPS を
 指定して呼び出して下さい。

 インスタンス取得後の振る舞いの概要については、 スーパークラスの記述を参照して下さい。

 導入されたバージョン: DoJa-5.0 (903i)

 楽するなら、「GPSLocationProvider」ってことのようです。 だって、私の買った携帯はSH903iですから!!!

■ まとめ

 判り難い呪文も何度か読んでいると、次第に理解できてくるようになります。

 残り4ヶ月で正常に動作出来るようにすることができるかなぁ。

 PS. いろいろ勉強をしてきましたが、携帯電話でのGPS機能を拡張するよりはガーミンのGPSを買った方が高機能を容易に
 手に入れることに気づきました。 遊びの世界でプログラムを組むのは面白いですが、デバッグをしながら完成させるのは大変です。

 自分の位置が判るのはとても安心できます。 その為に、6万円ほどの投資をすれば良いだけです。 携帯GPS購入

尾瀬で幕営しま専科
Copyright © 2002-2007 観天望気 All Rights Reserved.
inserted by FC2 system