はじめに
今日、 GPSやCell IDなどのジオロケーションサービスは、私たちの生活に不可欠な要素となっています。 彼らの助けを借りて、たとえば、私たちがどこにいるのかを見つけたり、Foursquareなどのソーシャルネットワークで自分の位置を共有したりすることができます。
多くのJ2ME携帯電話は、 Location API ( JSR-179 )をサポートしています 。 これを使用すると、このプラットフォームに役立つ、そして最も重要な興味深いアプリケーションを簡単に作成できます。
この記事では、J2ME用のLocation APIの可能性を検討し、小さくても非常に興味深いアプリケーションを作成することを提案します。 しかし、まず最初に。
ジオロケーションサービスは何に使用されますか?
ジオロケーションサービスを使用すると、次の3つの質問にすばやく回答できます。
- 私はどこ
- 私の周りは何ですか?
- そして、どうやってここに着いたの?
たとえば、あなたは非常に気分が悪く(パパパ)、一人の通行人があなたの隣にいないので、言葉を言うことはできません。 GPSがあなたの助けになり、あなたの位置の座標を救急車に送ります。 残念ながら、この原則は911に電話をかける場合にのみ米国で機能します。
要点をつかむ
アプリケーションを使用するには、次の要件を満たす電話が必要です。
- J2MEプラットフォーム
- 電話のJSR-179 ( ロケーションAPI )
- CDC ( 接続デバイス構成 )またはCLDC 1.1 ( 接続制限デバイス構成プロファイル)の存在
このような電話は、たとえば、 Nokia E71、E66、N95、N96、6210 Navigatorなどです。
デバイスを見つける
デバイスを見つけるために、 Location APIは利用可能なリアルタイムのポジショニングメソッドを使用します。 精度は、使用する方法によって異なります。
通常、必要な情報、つまり幅、経度、高さを提供する組み込みのGPSデバイスが使用されます。
幅は0〜90度(北または南)で表されます。
経度は0〜180度(西または東)で表されます。
高度はそれぞれ、 海抜0メートルで表されます。
アプリケーションはいくつかの位置決め方法を使用できます。
- セルID :この方法を使用する場合、最も近いセルタワー、いわゆるBTS ( ベーストランシーバーステーション )からの値が位置座標として取得されます。 この方法の精度は、セルタワーの半径に依存します。 GSMネットワークの場合、この距離は2〜20キロメートルです。
- 衛星の使用:軌道上の24個の衛星の1つから受信したデータを使用するGPSまたは全地球測位システム。 GPSは、ある衛星から別の衛星への送信信号の時間差に等しい位置を特定します。 GPSは最も正確な測位デバイスです。 エラーは約4〜40メートルです(晴天時)。
理論から実践へ
JSR-179は、携帯電話の内部に配線されたjavax.microedition.locationパッケージにすぎません。 開発者にJ2MEの位置情報サービスを開発する機会を提供し、すべての必要な情報を提供します(座標から始まり、マークのリポジトリで終わる)。
ハードウェアプラットフォームは、現在利用可能なリアルタイムポジショニング方法を決定します。 次のように、使用する方法を心配する必要はまったくありません。 J2MEが解決します。 したがって、利用可能な最も正確な方法( GPS 、 Cell ID )が使用されます。
Location APIが次の方法で利用できることを確認できます。
... public boolean isLocationSupported() { boolean isItTrue = true; try { Class.forName("javax.microedition.location.Location"); } catch (Exception e) { isItTrue = false; } return isItTrue; } ...
それでは、さらに進んでいきましょう
位置情報アプリケーションを作成するには、次のクラスを操作する必要があります。
- 基準 。精度、衛星またはタワーからの応答時間、速度に関する情報が含まれます。
- Criteriaクラスのデータと連携して場所を特定するLocationProvider 。
- ロケーション 。 座標、速度(使用可能な場合)、テキスト形式のアドレス(使用可能な場合)、および計算が行われた時間を含むオブジェクト。
- 座標自体(はい、はい、わかります)は、2つのクラス( CoordinatesまたはQualifiedCoordinates )のいずれかから取得できます。 唯一の違いは、 QualifiedCoordinatesがメートル単位で表示される測定の精度に関する追加データを提供することです。
理論を理解して統合するために、小さなMIDlet (いわゆるJ2MEアプリケーション)を書くことをお勧めします。
// import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.location.*; // , MIDlet public class FirstGeo extends MIDlet implements CommandListener { // Display dsp; Form frm; StringItem data; Command cmdExit; // MIDleta public FirstGeo() { dsp = Display.getDisplay(this); frm = new Form("First Geo-located application"); data = new StringItem("Location: ","Unavailable"); cmdExit = new Command("Exit",Command.EXIT,1); } // // public void startApp() throws MIDletStateChangeException { dsp.setCurrent(frm); frm.append(cmdExit); frm.setCommandListener(this); frm.append(data); // , - if (isLocationSupported()) { Criteria cr = new Criteria(); cr.setHorizontalAccuracy(500); LocationProvider lp = LocationProvider.getInstance(cr); Location l = lp.getLocation(10); QualifiedCoordinates qc = l.getQualifiedCoordinates(); data.setText("Latitude: " + qc.getLatitude() + "\n" + "Longitude: " + qc.getLongitude() + "\n" + "Altitude: " + qc.getAltitude() + "\n"); } else { destroyApp(true); } } // public void pauseApp() throws MIDletStateChangeException { // } // public void destroyApp(boolean uncond) throws MIDletStateChangeException { if (uncond == true) { notifyDestroyed(); } } public void commandAction(Command c, Displayable d) { if (c == cmdExit && d == dsp) { destroyApp(true); } } // , public boolean isLocationSupported() { boolean isItTrue = true; try { Class.forName("javax.microedition.location.Location"); } catch (Exception e) { isItTrue = false; } return isItTrue; } }
そのため、数分で、現在の場所の幅、経度、高さを決定するアプリケーションを作成しました。
このトピックの目的は、ジオロケーションサービスの構築のトピックを紹介することでした。 Location API全体をチェックアウトする場合は、 をご覧ください 。
PS 残念ながら、私はソースをコンパイルしてスクリーンショットを表示するのに働くPCとはほど遠いです 。