この章では、ロケーション・ベースのアプリケーションの開発者を対象として、概念と使用方法について説明します。項ごとに様々なトピックを記載しています。
ロケーション・ベースのアプリケーションの開発者には、次の特殊サービスが必要です。
モバイル・ポジショニング
: モバイル・ユーザーのロケーションを特定します。
ジオコーディング
: 地理上の座標を住所に関連付けます。
マッピング
: 地点、地点のセット、ルートまたは運転経路用のグラフィカル・マップを提供します。
ルーティング
: 運転方向を提供します。
ビジネス・ディレクトリ
(イエロー・ページ):ビジネスをリージョン別のカテゴリ順または名前順に列挙します。
トラフィック
: 事故、工事および交通量に影響するその他の事象の情報を提供します。
複数の会社が、この種の特殊なコンテンツおよびアプリケーションを提供しています。たとえば、ビジネス・ディレクトリ用のカテゴリが用意されているWebサイトや、運転方向を提供しているサイトがあります。OracleAS Wirelessフレームワークに基づいてアプリケーションを作成する開発者にとっては、特殊なコンテンツとサービスを使用できることによる利点があります。アクセス先として必要なすべてのサービスへのカスタム・インタフェースを、アプリケーションごとに作成するのは非効率的です。
OracleAS Wirelessのロケーション・アプリケーション・コンポーネントは、ジオコーディングの実行、運転方向の提供およびビジネス・ディレクトリの検索に使用するAPI(Application Programming Interface)のセットです。既存の重要なプロバイダをAPIにマップするサービス・プロキシが組み込まれており、将来は追加のプロバイダにも対応する予定です。
OracleAS Wirelessアプリケーションの開発者は、アプリケーションを変更することなく、汎用インタフェースを使用して様々なサービス・プロバイダにアクセスできます。また、インフラストラクチャを使用し、品質、可用性またはコストなどの基準に基づいてサービスの優先順位を設定できます。サービス・プロバイダにとっても、すべてのOracleAS Wirelessアプリケーション開発者がコンテンツと特殊機能をそのまま使用できることによる利点があります。
この項では、ロケーション・アプリケーション・コンポーネントAPIの概要、Javadocで生成された詳細なドキュメントとオンライン例の検索方法、各コンポーネントを使用する上で前提となる概念と使用方法について説明します。項ごとに様々なトピックを記載しています。
注意: 詳細、例およびその他のリソースについては、http://www.oracle.com/technology/products/iaswe/lbs/index.htmlを参照してください。 |
OracleAS Wirelessのロケーション・アプリケーション・コンポーネントの使用を開始する手順は、次のとおりです。
サンプル・プログラムを使用したりアプリケーションを作成する前に、この項の概念および使用方法の説明を読みます。
sample
ディレクトリに移動します。このディレクトリにサンプル・ファイルが格納されています。このディレクトリにあるReadme.txt
ファイルを読み、提供されるファイルを調べて、ニーズを満たしているファイルを使用してください。
Javadocドキュメントを表示し、パッケージとクラスの詳細な参照情報を調べます。Javadocドキュメントを表示するには、Webブラウザで次のファイルを開きます。
iAS-Wireless-Home/wireless/doc/index.html
iAS-Wireless-Homeは、OracleAS Wirelessのホーム・ディレクトリです。
Enterprise Manager内でOracleAS Wirelessシステム・マネージャ(システム・マネージャと呼ばれます)のインタフェースを使用すると、構成操作の実行、およびロケーション・アプリケーション・コンポーネントに関連する情報の検索ができます。
Wirelessサーバーの「システム」タブのページで、「サイト管理」をクリックします。
「コンポーネント構成」をクリックして展開します。
図15-1に、「コンポーネント構成」セクションを展開した状態のシステム・マネージャのページを示します。
図15-1のように、「コンポーネント構成」セクションの「関連ロケーション」セクションには、次のリンクが含まれています。
「ロケーション管理」は、モバイル・ポジショニング構成、モバイル・ポジショニング・プロバイダの情報と構成、およびモバイルIDを提供します。
「ロケーション・サービス」は、ジオコーディング、ルーティング、マッピング、トラフィックおよびビジネス・ディレクトリ・サービスに関連する構成オプションを提供します。
「ロケーション・イベント・サーバー」は、ロケーション・イベント・サーバー(15.4項を参照)に関連するオプションを提供します。
「ロケーション・マーク・アドレス書式」では、ロケーション・マーク・アドレスのフィールドを指定します。
ロケーション・サービスは、図15-2に示すアーキテクチャに基づいています。
図15-2では、次の事項を表しています。
アラート・エンジンおよびロケーション・ベースのアプリケーションは、(太線で囲まれた)アーキテクチャの外側にありますが、アーキテクチャと通信します。
このアーキテクチャでは、Java、XMLおよびJSPタグを使用するリクエストの処理が可能です。
処理は、特定のアクティビティや各種のサービス(ビジネス・ディレクトリ、ジオコーディング、ルーティング、マップのサポート、リージョンのサポート、ポジショニング、ロケーションの問合せ、ロケーション・キャッシュおよびプライバシ管理)を処理するコンポーネントによって行われます。
プロバイダ接続フレームワークは、データやサービスのローカル・ソースおよび外部ソースと通信し、使用可能な様々なプロバイダのコンポーネント(ビジネス・ディレクトリ、ルーティング、マッピング、モバイル・ポジショニングなど)を備えています。
ロケーション・サービスは、ジオコーディング、マッピング、ルーティング、ビジネス・ディレクトリ(イエロー・ページ)およびトラフィックという主要カテゴリで提供されます。
他の項では、ロケーション・サービスの外部プロバイダを指定して構成する方法と、各種サービスの詳細について説明します。
前述のサービスは、すべてSpatialManager
Javaクラスで管理されます。SpatialManager
Javaクラスの定義は、次のとおりです。
package oracle.panama.spatial; import ...; public class SpatialManager { public static synchronized Geocoder getGeocoder() {...} public static synchronized Router getRouter() {...} public static synchronized YPFinder getYPFinder() {...} public static synchronized Mapper getMapper() {...} public static synchronized TrafficReporter getTrafficReporter() {...} }
通常、ロケーション・サービスのコアとなる実際の計算は、外部プロバイダ側で実行されます。外部プロバイダには、インターネットや他の通信手段を介してアクセスする場合と、ローカルの場合があります。OracleAS Wirelessのロケーション・アプリケーション・コンポーネントのAPIでは、統合されたフレームワークで通信と結果の適用が実行されるため、通常、ユーザーは特定のサービスがどのプロバイダから提供されているかを意識しません。また、このAPIにより、実装に伴うアプリケーション開発者の労力と特定のプロバイダへの依存性が最小限に抑えられます。
ほとんどのサービスについて、初期プロバイダ・セットへのアクセスが組み込まれています。プロバイダによって、詳細な構成情報を組み込んでいる場合と、そうでない場合があります。(構成情報のないプロバイダの場合、通常はそのユーザー名とパスワードの使用権を購入した後で、必要な情報を受け取ります。)
Enterprise Managerインタフェースを介してOracleAS Wirelessシステム・マネージャを使用することで、追加のプロバイダへのアクセスを提供できます。新規プロバイダを追加した場合や、そのプロバイダが使用するインタフェースが既存のプロバイダとは異なる場合は、新規プロバイダのフォーマットとワイヤレスのロケーション・アプリケーション・コンポーネントのAPIの間の変換を行うためのJavaクラスを作成する必要があります。(このプログラムをProviderImpl
属性として指定します。)また、プログラムの実装用クラス・ファイルをクラス・パスに追加する必要があります。
1つのサービスに複数のプロバイダを使用すると、そのサービスの信頼性が向上します。APIが失敗するのは、すべてのプロバイダが障害を起こした場合、またはWebアクセスが一時的に使用できなくなった場合のみです。プロバイダは作業環境リストで指定するため、次のいずれかの状況が発生した場合など、優先プロバイダがリクエストされたサービスを実行できない場合は、APIが自動的にフェイルオーバーします。
プロバイダに一時的にWebを介してアクセスできなくなった場合。
リクエストしたとおりのサービスがプロバイダでサポートされていない場合。
リクエストが正しく指定されていない場合(存在しない住所など)。
ロケーション・サービスは、プロバイダ・リストを使用して、プロバイダ間のフェイルオーバーをサポートします。プロバイダが試行される順序は、優先順位順にすると理想的です。優先順位には、単純なプロバイダのランキングを使用する方法と、リージョン、時間、パフォーマンス、信頼性およびコストを反映させる方法があります。どの基準を使用した場合も、プロバイダは、その優先順位を決定するプロバイダ選択フレームワークによって評価されます。
プロバイダ選択フレームワークを、この項の説明に従って構成する必要があります。サービス・リクエストをフレームワークが満たさない場合は、プロバイダ選択フレームワークの実装が適切に構成されていないか、すべてのプロバイダが障害を起こしています。問題や障害に関する情報は、コンソールのログまたはログ・ファイルから確認できます。詳細は、15.1.5.2項を参照してください。
使用するプロバイダ選択フレームワークを選択する必要があります。フレームワークを選択するには、OracleAS Wirelessシステム・マネージャを使用して次の手順で操作します。
Wirelessサーバーの「システム」タブのページで、「サイト管理」をクリックします。
「コンポーネント構成」をクリックして展開します。
「構成」サブセクションで「ロケーション・サービス」をクリックします。図15-3のように「ロケーション・サービス」ページが表示されます。
「基本構成」の下の「プロバイダ・セレクタ・クラス名」にプロバイダ選択フレームワークの実装を入力します。選択したプロバイダ選択フレームワークの実装により、プロバイダ選択に使用できる規則の複雑度が決定されます。次の実装を使用できます。
oracle.panama.spatial.core.ruleengine.SimpleRuleEngineImpl
この単純な実装は、いずれかで成功するまですべてのプロバイダを試行します。プロバイダの試行順序は、プロバイダ構成リストで指定されます。
ただし、この実装は、プロバイダがカバーしていないリージョンに関する問合せを発行する場合があるため、他の実装よりも時間がかかる可能性があります。また、プロバイダによっては、リクエストされたリージョンをカバーしていない場合、失敗するかわりに最善の努力を試みるため、この実装は不適当な選択になる可能性があります。たとえば、ヨーロッパのみをカバーするプロバイダが、サンフランシスコからボストンにルーティングするリクエストを受信するとします。このプロバイダは最善の努力を試み、ボストンとサンフランシスコのそれぞれに最も近いヨーロッパの場所を代用します。
oracle.panama.spatial.core.ruleengine.RuleEngineImpl
この実装では、特定の国で十分な有効範囲を提供しているかどうかに基づいて、プロバイダを選択できます。この基準を満たしているすべてのプロバイダが、プロバイダ構成リストに指定されている順序で試行されます。
この実装を使用すると、ある国で有効範囲を提供していないプロバイダや、基準を満たすサービスを提供していないプロバイダ(たとえば、コストが高すぎたりサービス品質が不十分な場合など)を試行して、時間を無駄にすることがありません。ただし、この選択フレームワークでは、必要な構成内容が多くなります。たとえば、国と国エイリアスのリストを、プロバイダごとに指定する必要があります(ただし、このような構成例も用意されています)。
oracle.panama.spatial.core.ruleengine.ExtendedRuleEngineImpl
この実装は、プロバイダのプロパティの変更にあわせて自動的に調整されます。この実装は、各プロバイダのパフォーマンスおよび信頼性を動的に測定します。これらの統計に基づいて、プロバイダ・リストが動的にランキングしなおされます。
この実装は、現在、最速かつ最も信頼性の高いプロバイダを自動的に優先します。また、負荷が大きくなって速度が低下し、他のプロバイダと同程度になるまでは、ほぼ常に最速かつ最も信頼性の高いサービスが使用されるという点で、ロード・バランシングにも使用できます。特定の時点から、他のプロバイダは以前よりも多くのリクエストを受けることになります。
プロバイダ情報を構成するには、「ロケーション・サービス」ページの「ロケーション・サービス構成」の下で(15.1.5.1項の図15-3を参照)、構成対象のサービスのタイプを選択します。
「ジオコーディング構成」
「ルーティング構成」
「マッパー・プロバイダ構成」
「トラフィック構成」
「YPプロバイダ構成」
プロバイダ情報(15.1.5.1.2項「プロバイダの構成」を参照)は、どのタイプのサービス(ジオコーディング、マッピング、ルーティング、トラフィックおよびYP)の場合もほぼ同じです。
ジオコーディングとその他のサービスの場合、国名と国エイリアス(15.1.5.1.3項「国エイリアスの構成」を参照)と住所書式(15.1.5.1.4項「住所書式(国際)の構成」を参照)の構成情報の指定が必要になる場合があります。
管理者が、(OracleAS Wirelessシステム・マネージャを使用して)Webサービス・プロキシを含むようにプロバイダ・リストを構成している場合は、すべてのロケーション・サービス・リクエストが自動的(かつ透過的)にWebサービスを使用します。Webサービスの使用方法の詳細は、15.2.3項「Webサービスの使用」を参照してください。
次のパラメータを使用して、プロバイダの順序付きリストを構成します。
プロバイダ名
: IDとして機能するプロバイダ名
プロバイダ実装クラス名
: このプロバイダのプロキシを実装するクラス(変換およびプロバイダとの通信用)
URL
: プロバイダへのアクセスに使用する静的URL接頭辞
ユーザー名
: プロバイダによって決定されるユーザー名
パスワード
: ユーザー名と組み合せて使用されるパスワード
パラメータ
: プロバイダのプロキシのカスタマイズと構成に必要なパラメータ
ISOロケール
: 国IDがセミコロンで区切られたリスト(国エイリアス・リストで指定、15.1.5.1.3項を参照)
勤務先URL
: プロバイダのコーポレートURL(広告として使用)
サービス・バージョン
: このプロキシで使用するプロバイダのサービス・バージョン
勤務先ロゴURL
: プロバイダのコーポレート・ロゴのURL(広告として使用)
国エイリアスの構成は国名に関連しており、特定の国を表す1つの標準識別子のシノニムです。この標準識別子には、ISO名(アメリカはUS、ドイツはDEなど)を使用する必要がありますが、他の識別子を指定できます。
エイリアスは、oracle.panama.spatial.core.ruleengine.RuleEngineImpl
プロバイダ選択フレームワークの実装と組み合せて使用されます。各プロバイダを、IDで指定した国のセット用に構成します。たとえば、アメリカの住所をジオコーディングするなどのサービス・リクエストが送信されると、標準IDであるUSを検索するために国エイリアス表が参照されます。その後は、有効範囲となっている国のリストのうち、USのプロバイダのみが試行されます。
一部の国IDの既存のエイリアスとして構成されていない国名を使用する場合は、かわりにID「不明」を使用します。この場合は、有効範囲となっている国のリストのうち、「不明」のプロバイダが試行されます。
単純なプロバイダ選択フレームワークの実装(oracle.panama.spatial.core.ruleengine.SimpleRuleEngineImpl
)を使用する場合、国エイリアスはプロバイダ選択には不要です。
住所書式の構成を使用して、国際住所書式を指定します。APIのoracle.panama.spatial.intladdress
パッケージでは、このリストを使用して住所に含まれる構成要素(US、フランス、ドイツ、中国など)と入出力での表示方法が決定されます。
国際住所フレームワークを構成するには、OracleAS Wirelessシステム・マネージャを介してアクセス可能なリポジトリ内の住所書式リストを使用します。この構成では、住所のすべての構成要素、構成要素のエイリアス、都市、州および番地などの標準的な概念へのマッピングを指定します。次のことを決定するために、テキスト表現の書式も構成します。
住所を複数行に分割する場合の通常の方法
各構成要素の順序
オプションの構成要素と必須の構成要素
このアプローチでは、ユーザーが国固有の書式で住所を表示し、入力するには、その書式を指定する必要があります。指定しないと、システムではユーザーに対して国の前に州と郡のどちらを指定するように求めればよいかがわかりません。
このアプローチの利点は、次のとおりです。
ユーザーには、郵送に必要な住所書式と一致するフォームが表示されます。
各構成要素が単に1〜3行目のどこかに含まれているのではなく、個別に認識され、意味のある方法で識別されている場合、システムでは住所の分析が容易になります。
住所の入力と出力の両方について、ローカルの住所書式に自動的に適応する場合、アプリケーションでの検索はより高度になります。
アメリカ以外のカスタマの場合、アメリカでの書式とは異なり、ローカルの住所書式で表される方が理解しやすくなります。
アプリケーションを様々な国にあわせてリライトする必要はありません。すべてはフレームワークにより自動的に処理されます。
複数の国際住所書式が用意されています。2つの例を次に示します。
アメリカの場合
{name} {house number/house} {street}[ Apt {apt}] {city} {state} {postal code}[-{postal code ext}] {country}
ドイツの場合
{Name/name} {Strasse/street/first line} {Hausnummer/house}[ Wohnung {Wohnung/apt}] {PLZ/postal code} {Stadt/city} [{Bundesland/state}] {Land/country}
構文上の注意:
{ }(中カッコ)は住所の構成要素を囲みます。
/(スラッシュ)は、構成要素内の代替エイリアスを区切ります。
[ ](大カッコ)はオプションの要素を囲みます。
大カッコ以外のカッコの外側にある構成要素は、引用符を使用して住所から区切ります(123 Main Street Apt 4に含まれているAptなど)。
国際住所書式に関連するプログラミング情報と例は、15.2.2.1.1項「国際住所」を参照してください。
プロバイダ選択フレームワークの実装では、OracleAS Wirelessのログ・ファイル(sys_panama.log
など)に、プロバイダの選択とその成否が記録されます。たとえば、次のイベントを調べることができます。
ジオコーディング、マッピングなど(他のタイプのサービス)のマルチプレクサが初期化されていること。
プロバイダ選択フレームワークの実装が初期化されていること。
ジオコーディング、マッピングなど(他のタイプのサービス)のプロキシが初期化されていること。
特定のプロバイダが試行されたこと。
特定のプロバイダが失敗したこと。
特定のプロバイダが成功したこと。
すべてのプロバイダが失敗したこと。
プロバイダ選択フレームワークの実装では、プロバイダのパフォーマンスの統計が記録されます。プロバイダへのリクエストごとに、プロバイダの成功または失敗に関係なく、次の情報が記録されます。
プロバイダ名
プロバイダ・プロキシのJavaクラス
所要時間(ミリ秒単位)
成功(trueまたはfalse)
リクエストの発行時刻(タイムスタンプ)
パフォーマンス情報は、表PTG_LBS_LOG
に書き込まれます。Wirelessシステム・マネージャを使用してこの情報を確認する手順は、次のとおりです。
Wirelessサーバーの「システム」タブのページで、「サイト・パフォーマンス」をクリックします。
「コンポーネント・パフォーマンス」セクションで、「関連ロケーション」をクリックします。
ジオコーディングAPIは、特定の住所の地理的位置を提供します。Wirelessのユーザーの場合、住所はロケーションを指定する最も一般的な方法です。ただし、付近のレストランの位置を検索したり、運転方向を提供する場合、住所のテキスト表現は、最初にジオコーディングする、つまり地理的座標に変換しなければ役に立たないことがあります。
ジオコーディングする住所には、標準的な郵便に似たテキスト表現があります。戻される結果は、住所に対応する経度と緯度です。たとえば、ジオコーディングへの入力に次の情報が含まれているとします。
firmName: "oracle"
firstLine: "1 Oracle Drive"
secondLine: ""
lastLine: "Nashua NH 03062"
matchMode: "tight"
この例では、結果はPoint( x = -71.455, y = 42.7117)となります。
ユーザーは曖昧な住所を指定する可能性があるため、GeocodeResult
には単一のオブジェクトではなくLocationオブジェクトの配列が含まれています。
この項では、ロケーション・アプリケーション・コンポーネント用のジオコーディングAPIについて説明します。
次の2つクラスPoint
およびLocation
はこのAPI全体で使用され、ジオコーディング固有ではありません。ただし、ここで説明するのは、この2つのクラスが入力と出力の両面でジオコーディング・サービスの中心となるコンポーネントを表しているためです。
Point
クラスでは、経度と緯度の座標点が定義されます。地図上の地点を表すために、ラベルと半径を表す追加の値を使用できます。ラベルと半径は、地図に表示される他の機能には使用されません。
Location
クラスでは、住所、経度および緯度を使用してロケーションが定義されます。ロケーション・オブジェクトがfirstLine
、secondLine
およびlastLine
を使用して構成されている場合、一部の外部プロバイダでは都市や州が正しく識別されない可能性があります。これは、lastLine
には国固有の比較的柔軟な書式で都市、州および郵便番号を使用できるためです。
特定の部分文字列を、都市を表す構成要素として識別できない場合、都市は「不明」になります。この場合、API自体で複雑な分析を試行するかわりに、このタスクをエキスパート、つまり外部のジオコード・プロバイダに委ねます。
電話など、ある種のモバイル・デバイスは物理的な制約から、長い英数字文字列を入力したり表示するのは困難です。ロケーション・マークにより、簡潔でわかりやすい名前で識別される1つの空間情報が格納されます。たとえば、「My home」がロケーション・マーク名で、内部的な空間情報が「123 Main Street, Somewhere City, CA, 12345; Lon = -122.42, Lat = 37.58」となる場合があります。
ロケーション・マークを使用すると、ユーザーはモバイル・デバイスに文字列を入力する手間を省くことができます。各自のロケーション・マークをデスクトップ上で管理し、その名前をモバイル・デバイスから参照してロケーションにアクセスできます。通常、今日のロケーション認識アプリケーションでは、地点(住所や交差点など)のみが使用されています。この場合は、ジオコーディングにより空間情報を提供できます。ただし、ロケーション・マークは、1つのポイントを中心とする円状の地域(つまり、ポイントと半径を指定する場合)、またはリージョン・モデル・ツール(15.5項を参照)で定義されたリージョンの場合もあります。
また、ロケーション・マークを使用すると、ユーザーはwhat-ifシナリオを試行して、アプリケーションをデフォルト・ロケーションや現在のロケーションとは異なるロケーションにあるかのように動作させることができます。たとえば、エンタテインメント・サービス・アプリケーションのユーザーが実際にはボストンにいて、数日後にサンフランシスコに旅行するとします。このユーザーがデフォルトとしてSan Franciscoにロケーション・マークを設定すると、San Franciscoリージョンに関連する情報とともに表示されます。
各ユーザーはパーソナライズされたロケーション・マークを使用できます。これらはWirelessリポジトリに格納されます。
デフォルト・ロケーション・マークは、ユーザーごとに設定できます。あるユーザーにモバイル・ポジショニング情報がない場合は、そのユーザーのデフォルト・ロケーション・マーク(定義済の場合)が使用されます。たとえば、ユーザーSmithのデフォルト・ロケーション・マークがユーザーのオフィスで、Smithの現在のポジショニング情報がない場合、現在のロケーションはSmithのオフィスとみなされます。
ロケーション・マークはLocationMark
クラスを使用して作成します。また、ユーザーがロケーション・マークを作成するには、カスタマイズ・ポータルにログインし、「ロケーション・マーク」タブをクリックして「作成」をクリックする方法もあります。
ロケーション・マークを使用してモバイル・ポジショニングを使用可能にする方法の詳細は、15.3.1項「手動ポジショニング」を参照してください。
Wirelessのリポジトリ・スキーマには、新しい表LANDMARKが追加されています。この表には、関連付けられているユーザーなど、各ロケーション・マークの詳細情報が含まれています。たとえば、複数のユーザーが、1つのロケーション・マークOfficeをそれぞれ異なるロケーションで使用している場合があります。
マッピングAPIは、次のいずれかのマップ・イメージを作成する機能を提供します。
単一の点(住所やロケーション・マークなど)
複数の点(複数の住所やロケーション・マークなど)
ルート全体
単一の運転経路
マッピングAPIを使用すると、地図のサイズ(解像度)とイメージ・フォーマットを指定できます。
マッピング機能は、純マッピング・アプリケーションとして、またはルーティング・アプリケーションの一部としてユーザーに表示できます。ルーティング・アプリケーションでは、ルートと運転経路のマッピングがルーティング・プロバイダにより実行されます。ルーティング・サービスの詳細は、15.1.10項「ルーティング・サービス」を参照してください。
ルーティングAPIは、始点、終点およびオプションの経由地リストに基づいて、ルーティング(運転方向)情報を提供します。すべての点は、緯度と経度のペアまたは住所として指定されます。
ルーティング結果は、経路セットで構成されます。経路は、「左折してI-93に」または「右手に向かってルート3に合流」などの運転指示に対応します。ルーティング結果には、走行合計時間の見積と距離も含まれています。オプションで、地図とルートの座標もリクエストできます。
ルーティングには、作業環境や要件などのルーティング・オプションを反映できます。これらのオプションはルーティング設定と呼ばれるセットにまとめられています。ルーティング・オプションには、基本オプションと2次オプションの2種類があります。
基本オプションには、次の項目が含まれます。
マップ(イメージ)をリクエストするかどうか。
ジオメトリ(ルートの座標)をリクエストするかどうか。
2次オプションには、次の項目が含まれます。
最短距離や最短走行時間などの最適化方法
有料道路の回避、フェリーの回避、高速道路の回避などのルート・プロパティ
マップ・サイズ
2次オプションは必須か任意かを指定できます。
2次オプションが必須であってもプロバイダがサポートしていない場合、APIは自動的に次のプロバイダにフェイルオーバーします。
2次オプションが任意であってプロバイダがサポートしていない場合、APIは別のプロバイダがそのオプションをサポートしているかどうかをチェックしません。
アプリケーション開発者が必須か任意かを指定せずに2次オプションをリクエストすると、次のデフォルト値が適用されます。
最適化メソッド: 優先
フェリーの回避: 優先
高速道路の回避: 優先
有料道路の回避: 優先
概観マップのサイズ: 必須
経路マップのサイズ: 必須
概略マップのスケールとズーム・レベル: 優先
経路マップのスケールとズーム・レベル: 優先
アプリケーションでは、戻されたルートの次のコンポーネントを問合せできます。
経路リスト
全距離
走行合計時間の見積り
概観マップ
概観マップには、出発地と目的地が表示され、ルートがハイライトされます。
ルーティング結果の一部として経路(運転方向)セットが戻されます。各経路は運転指示に対応し、次の情報が含まれます。
テキストによる説明
この経路またはこの経路までの移動距離(これまでに何マイル移動したか)
詳細な経路マップ
ジオメトリ(座標点、緯度および経度のリスト)
ルートまたは経路全体のマップを、Java ImageオブジェクトまたはURLを表す文字列としてリクエストできます。
ルーティング・プロバイダが複数の言語をサポートしている場合、このAPIは、ルーターへのリクエストで指定されたJava locale
オブジェクトに基づいて言語を選択します。言語設定によって、経路説明および距離の測定単位が異なる場合があります。
この項では、ロケーション・アプリケーション・コンポーネント用のルーティングAPIについて説明します。
Router
インタフェースは、アプリケーション・プログラマがルーティング・サービスにアクセスする方法を定義します。このインタフェースを実装するクラスのオブジェクトは、SpatialManager
によって戻されます。
RoutingSettings
クラスは、ルーティングに渡されるオプションのセットを定義します。ルーティング・オプションには、基本オプションと2次オプションの2種類があります。
基本オプションには、マップまたはジオメトリをリクエストするかどうかが含まれます。基本オプションは、RoutingSettings
オブジェクトのコンストラクタで指定できます。
2次オプションは、setSecondaryOption
を使用して設定できます。最初のパラメータはRoutingOption
オブジェクトで、RoutingOption
クラスで定義する静的定数です。このパラメータは、値が設定されているオプションを識別します。2番目のパラメータは、値を表す文字列
です。
2次オプションが必須かどうかは、setSecondaryOptionRequired
で定義します。最初のパラメータはRoutingOption
で、2番目のパラメータによってオプション要件が必須かどうかが指定されます。このファンクションをコールしない場合は、デフォルト値が使用されます。
ビジネス・ディレクトリ(イエロー・ページまたはYP)サービスは、特定の領域内で指定された名前またはカテゴリと一致するビジネスのリストを提供します。
既存のプロバイダは、YPサービスを異なるインタフェースで提供しています。特に、YPカテゴリと階層構造もすべて異なっています。カテゴリは、一覧表形式で編成されている場合と、カテゴリおよびサブカテゴリからなる階層形式で編成されている場合があります。階層ツリーは、分岐が多く深い場合や分岐が少なく浅い場合、またはバランスが取れている場合や取れていない場合があります。
異なるプロバイダのサービスを統一するために、Oracleビジネス・ディレクトリ・サービスでは、OracleAS Wireless開発者がXMLファイルに定義しているカスタム階層が使用されます。この階層内の各リーフには、1つ以上のプロバイダのカテゴリへの参照が設定されています。リーフでないノードにも、この参照を設定できます。このカスタム階層では、最初に優先カテゴリが定義されます。その後、OracleAS Wirelessを使用している電話会社は、これらのカテゴリと外部プロバイダがサポートしている類似のセマンティクスを持ったカテゴリとの一致を試みます。
外部プロバイダへの参照を持ちカスタマイズされた階層は、順序付けられた階層構造が格納されたXMLファイルで表されます。カテゴリ階層での表示順序には、様々なカテゴリの知名度を考慮できます。たとえば、画面サイズが限られているデバイスの場合、アプリケーションでは最も一般的なカテゴリの中で選択肢を制限できます。
複数のプロバイダがWeb上でYPサービスを提供していますが、各プロバイダのアプローチには大きな違いがあり、汎用インタフェースは提供されていません。また、それぞれのアプローチはプロバイダのメソドロジで確定されてはおらず、変更されることを予想できます。
各種アプローチの統一パターンは、ビジネスが件名別とロケーション別に分類されることです。ロケーション・コンポーネントは、郵便番号または都市と州の組合せを使用してロケーションを決定できるという点で十分に認識されています。
これに対して、ビジネス・カテゴリの実装方法は統一されていません。カテゴリの一覧表を提供し、ユーザーに単純な部分文字列の一致により選択させているプロバイダや、サブカテゴリを3または4レベルの階層に編成しているプロバイダがあり、後者の場合、分岐は20〜50、または100以上になることもあります。ユーザーは、階層のルート(デフォルト)から横断を開始できます。または、階層内の適切な開始ポイントと一致するキーワードを入力することもできます。このキーワードによる一致では、単純な部分文字列の検索よりも詳細で、より適切な選択結果が得られます。
ビジネス・カテゴリとカテゴリ階層のサポートは、XML構成ファイルを介して提供されます。(ビジネス・ディレクトリ・プロバイダ情報の表示と変更には、OracleAS Wirelessシステム・マネージャを使用する必要がありますが、ビジネス・ディレクトリ・カテゴリ情報の表示と変更にはXMLファイルを使用してください。)
例15-1のカテゴリ階層定義ファイルは、ビジネス・ディレクトリ・カテゴリのカスタム階層を表しています。各カテゴリには、必要な数のサブカテゴリを含めることができます。ネスト・レベルの制限はありません。1つのカテゴリを複数のビジネス・ディレクトリ・コンテンツ・プロバイダにリンクできます。このファイルで得られる柔軟性により、15.1.11.1項で説明したように、各種のビジネス・ディレクトリ・サービス・プロバイダの様々なアプローチに対処できます。
例15-1 ビジネス・ディレクトリのカテゴリ階層定義ファイル
<?xml version="1.0" standalone="yes"?> <Categories> ... <Category CategoryName = "Berry crops"> <Provider Name = "..." Parameter = "..."/> <Category CategoryName = "Cranberry farm"> <Provider Name = "..." Parameter = "..."/> </Category> </Category> ... <Category CategoryName = "Ornamental nursery products"> <Provider Name = "..." Parameter = "..."/> <Category CategoryName = "Florists' greens and flowers"> <Provider Name = "..." Parameter = "..."/> </Category> <Category CategoryName = "Bulbs and seeds"> <Provider Name = "..." Parameter = "..."/> </Category> </Category> <Category CategoryName = "Crops grown under cover"> <Provider Name = "..." Parameter = "..."/> <Category CategoryName = "Mushrooms grown under cover"> <Provider Name = "..." Parameter = "..."/> </Category> </Category> ... </Categories>
アプリケーション開発者は、YPFinder
インタフェース内のファンクションを使用してカテゴリ階層を横断できます。結果となるカテゴリには、次のリストをリクエストできます。
ビジネスのリスト
直接のサブカテゴリのリスト
部分文字列を含む直接または間接的なサブカテゴリのリスト
YPFinder
インタフェースは、アプリケーション・プログラマがYPサービスにアクセスする方法を定義します。このインタフェースを実装するクラスのオブジェクトは、SpatialManager
によって戻されます。
このクラスのオブジェクトにより、ユーザーは次のビジネスを問合せできます。
特定の州内のビジネス
特定の都市内のビジネス
特定の郵便番号に該当するビジネス
特定の半径に含まれるビジネス
特定の半径内で最も近接しているn件のビジネス
これらのリージョン・タイプごとに、次の条件でビジネスを検索できます。
指定したビジネス名またはキーワードと一致
指定したカテゴリと一致
指定したビジネス名またはキーワードおよび指定したカテゴリの両方と一致
ビジネス名またはカテゴリに含まれるキーワードと一致
トラフィックAPIは、主要都市の道路網の交通量に影響のある条件の情報を提供します。通常、このようなエリアはさらに中心市街、西地区、東地区などの小さいエリアに分割されています。リアルタイムのトラフィック・レポートでは、条件が短期間(5分ごとなど)で更新されるため、営業車両の管理や個人の移動にとって重要な情報を提供します。
トラフィック・レポートの主要なコンポーネントは事象です。事象は、交通量に影響すると思われるイベントです。事象の例には、事故、建設作業および交通渋滞(通常または予想外)などがあります。事象ごとに、事象のタイプ、発生場所(ルート番号、ロケーションまたはリージョンなど)、ルート沿いの方向(北部方面など)、予想される遅延および交通渋滞の長さなどの情報が含まれます。
現行のリリースでは、事象ベースのトラフィック情報について次の問合せがサポートされています。
都市レベルの問合せ: 都市全体のトラフィックに関連する事象を戻します。
ルート・レベルの問合せ: 都市内の指定したルートでのトラフィックに関連する事象を戻します。
緯度と経度(ポイント)または住所と半径レベルの問合せ: リクエストした半径内でのトラフィックに関連する事象を戻します。
トラフィック問合せの例では、次のようなトラフィック・レポートが戻されます。
都市(Bostonなど)
都市のルート(BostonのI-93 Southなど)
(ルート、都市)のコレクションとして戻される予定ルート(Nashua、NHからBoston、MAなど)
ロケーション(緯度、経度)とロケーションからの半径で構成される移動範囲
特定の住所の近接度(One Oracle Drive、Nashua、NH 03062など)
トラフィックAPIは、リクエストを処理してレスポンスを戻します。リクエストとレスポンスには、JavaフォーマットまたはXMLフォーマットを使用できます。XMLフォーマットによるXMLリクエストとレスポンスの例は、15.1.12.2項を参照してください。トラフィックJava APIの説明は、15.1.12.3項を参照してください。
注意: 現行のリリースのサンプル構成ファイルには、トラフィック・サービス・プロバイダは含まれていません。 |
トラフィック・レポート情報は、都市レベルでキャッシュされます。初めてフェッチされた都市のトラフィック・レポートは、トラフィック・レポート・キャッシュに書き込まれます。キャッシュされたレポートは、最大キャッシュ経過期間(15分など)の後は無効とみなされます。この期間はシステム・マネージャを使用して設定できます。
都市に関してキャッシュされたトラフィック・レポートを更新するには、ネットワーク上でトラフィック・サービス・プロバイダにラウンドトリップする操作が必要です。キャッシュされたレポートは、次の両方の条件と一致する場合にのみ更新されます。
特定の都市、またはその都市に全体または一部が含まれている空間ジオメトリ(ルートまたはポイントと半径)の問合せが行われた(つまり、問合せ対象のジオメトリと都市のジオメトリに空間的な相互作用がある)場合。
都市に関してキャッシュされたレポートが、最大キャッシュ経過期間を超えている場合。
例15-2に、ボストンのトラフィック情報に関する都市レベルのリクエストをXMLフォーマットで示します。
例15-2 ボストンのトラフィックのリクエスト
<?xml version="1.0" encoding="UTF-8"?> <traffic_request> <query_list> <query_info query_type="city_level_query" city_name="boston" state_name="MA" country_name="US" /> </query_list> </traffic_request>
例15-3に、ボストンのトラフィック情報に関するXMLフォーマットのレスポンスを示します。
例15-3 ボストンのトラフィックのレスポンス
<?xml version="1.0" encoding="UTF-8"?> <traffic_response> <report_list> <traffic_report> <provider name="Trafficstation" covered_city_name="Boston" state_name="MA" country_name="US"/> <report_time month="6" day="19" year="2001" hour="5" minute="28" meridian = "PM"/> <unit distance_unit="MILES" time_unit="MINUTE"/> <incident_list> <incident id = "1"> <incident_type>ACCIDENT</incident_type> <description>CAR ACCIDENT</description> <route type = "Interstate" name = "I-93" direction = "SOUTH"/> <geo_location longitude = "-71.0607" latitude = "42.3659" radius = "5.0"/> <location_range> <at_location>EXIT 26</from_location> </location_range> <time_range> <from_time month = "6" day = "19" year = "2001" hour = "5" minute = "28" meridian = "PM"/> <to_time month = "6" day = "19" year = "2001" hour = "5" minute = "28" meridian = "PM"/> </time_range> <severity>HEAVY</severity> <speed>15.0</speed> <impact>EXPECT DELAY</impact> <advice>TAKE LEFT LANE</advice> </incident> <incident id = "2"> <incident_type>CONSTRUCTION</incident_type> <description>REGULAR MAINTENANCE</description> <route type = "Interstate" name = "I-95" direction = "NORTH"/> <geo_location longitude = "-71.3555" latitude = "42.3601" radius = "30.0"/> <location_range> <at_location>EXIT 36</at_location> </location_range> <time_range> <at_time month = "6" day = "19" year = "2001" hour = "5" minute = "28" meridian = "PM"/> </time_range> <severity>MINOR</severity> <speed>35.0</speed> <impact>EXPECT DELAY</impact> <advice>USE I-495</advice> </incident> </incident_list> </traffic_report> </report_list> </traffic_response>
この項では、ロケーション・アプリケーション・コンポーネント用のトラフィックJava APIについて説明します。
CityInfo
クラスは、1つの都市の名前、州名および国名を提供します。このクラスの一般的な用途は、都市名、州名(オプション)および国名を使用してCityInfo
インスタンスを作成し、それを都市レベル、ルート・レベルまたは都市のポイントおよび半径レベルでトラフィック・レポートに対する問合せに渡すことです。
City
インタフェースは、指定されたサービス・プロバイダからの1つの都市に関する情報を提供します。この情報には、都市名、州名、国名およびルート情報が含まれます。City
インスタンスは、TrafficReport
インタフェースから取得できます。
RouteInfo
クラスは、ルートの名前とタイプを提供します。このクラスの一般的な用途は、RouteInfo
インスタンスを作成し、それをルート・レベルのトラフィック・レポートの問合せに渡すことです。
TrafficRoute
インタフェースは、指定されたサービス・プロバイダからの1つのルートに関する情報を提供します。この情報には、ルート名、ルートのタイプ、ルートを表すジオメトリおよび都市名が含まれます。TrafficRoute
インスタンスは、TrafficIncident
インタフェースから取得できます。
TrafficReport
インタフェースは、レポート時刻、事象数、プロバイダ情報、都市および事象など、事象ベースのトラフィック・レポートに関する情報を提供します。レポートを作成して、アプリケーションのユーザーまたは管理者に表示できます。
TrafficIncident
インタフェースは、重大度、タイプ、説明、発生したルートと方向、ロケーション、時間帯、影響およびアドバイスなど、トラフィック関連の事象に関する情報を提供します。
TrafficReporter
インタフェースは、様々な問合せに基づいてトラフィック・レポートを戻すファンクションを提供します。次の種類の問合せがサポートされます。
都市に関する情報(都市名、州名[オプション]、国名)を指定すると、そのレポートが戻されます。
ルート(方向付きまたは方向なし)とそのルートを含む都市に関する情報を指定すると、そのレポートが戻されます。
ポイントの緯度と経度の座標と半径を指定すると、エリアのレポートが戻されます。
ロケーションの住所と半径を指定すると、エリアのレポートが戻されます。
SpatialManager.createLocation()
を使用してLocation
のインスタンスを取得する場合は、都市名と国名を指定する必要があります。これらの各情報はLastLine
属性を使用して組み合せないでください。Point
ジオメトリの値をnullに設定すると、自動ジオコーディングを回避できます。
Wirelessのインストール中にリージョン・モデリング・データと都市有効範囲データがリポジトリにロードされた後、トラフィック・プロバイダとそのプロバイダでサポートされている都市を追加できます。
新規のトラフィック・サービス・プロバイダに対するサポートを追加する手順は、次のとおりです。
システム・マネージャを使用して、トラフィック・プロバイダ情報とトラフィック・レポートのキャッシュ時間を設定します。
この新規プロバイダでサポートされている都市ごとに、リージョン・モデル・ツール(15.5項を参照)を使用して、有効なGEOMETRY列の値など、その都市のCITY表にエントリがあるかどうかを調べます。ジオメトリなど、都市のエントリがない場合は追加します。
この都市のIDを取得してメモします。
SQL*Plusを使用してWirelessリポジトリに接続します。
このトラフィック・サービス・プロバイダでサポートされている都市ごとに、CITY_COVERAGE表のCOVERED_BY_TRAFFIC列の値を'Y'に設定し、都市のID値を使用して更新を実行します。次に例を示します。
UPDATE city_coverage SET covered_by_traffic = 'Y' WHERE id = 12345; COMMIT;
この都市のCITY_COVERAGE表にエントリが存在しない場合は、1行を追加してCOVERED_BY_TRAFFIC列の値を'Y'に設定し、この表内のID値がCITY表内の都市のID値と同じであることを確認します。次に例を示します。
INSERT INTO city_coverage (id, name, state_name, country_name, covered_by_traffic) VALUES (10750, 'BOSTON', 'MA', 'US', 'Y'); COMMIT;
既存のトラフィック・サービス・プロバイダの新規の都市に対するサポートを追加する手順は、次のとおりです。
この新規プロバイダでサポートされている都市ごとに、リージョン・モデル・ツール(15.5項を参照)を使用して、有効なGEOMETRY列の値など、その都市のCITY表にエントリがあるかどうかを調べます。ジオメトリなど、都市のエントリがない場合は追加します。
この都市のIDを取得してメモします。
SQL*Plusを使用してWirelessリポジトリに接続します。
この都市のCITY_COVERAGE表にエントリがある場合は、CITY_COVERAGE表のCOVERED_BY_TRAFFIC列の値を'Y'に設定し、都市のID値を使用して更新を実行します。次に例を示します。
UPDATE city_coverage SET covered_by_traffic = 'Y' WHERE id = 12345; COMMIT;
この都市のCITY_COVERAGE表にエントリが存在しない場合は、1行を追加してCOVERED_BY_TRAFFIC列の値を'Y'に設定し、この表内のID値がCITY表内の都市のID値と同じであることを確認します。次に例を示します。
INSERT INTO city_coverage (id, name, state_name, country_name, covered_by_traffic) VALUES (10750, 'BOSTON', 'MA', 'US', 'Y'); COMMIT;
Oracle Application Server Wirelessには、ロケーション・ベースの例が用意されています。これらのサンプルは、ロケーション・ベースのサービスの理解や、アプリケーション開発の基礎に使用できます。次に使用例を示します。
フィールド・サービス技術者が、顧客のオフィスでサービス・リクエストに対応しています。プロジェクトの終了時に、機器の他の部分が故障していることに気付きます。機器に近づき、携帯端末を取り出して新規サービス・リクエストの作成ボタンをクリックします。技術者の位置はサービス・ステーションで自動的に記録され、メニューが表示されます。技術者はこのメニューで、新しいリクエストの説明を入力して地図を添付し、現場への道順を入力します。入力した情報はすべてサービス・ステーションに送信され、新しいリクエストに対応する別の技術者に自動的に通知が送信されます。
開発オプション
Oracle LBSアプリケーションの開発者には、どのように解決するかを決定する際にいくつかの選択肢があります。
サーバー上で動作するアプリケーションを作成している場合は、サーバー側のJava APIか、Java Server Pages(JSP)タグを事前定義済のJSPタグ・ライブラリから使用する必要があります。
リモートで動作するアプリケーションを作成している場合は、Wireless Developer Kit(WDK)が適しています。これらのオプションの詳細は、第8章「OracleAS Wireless Developer Kit」を参照してください。
各例の説明
サンプル・ディレクトリの例では、前述のアプリケーション開発の方法が説明されています。それぞれのアプローチには、Geocoder、Mapper、Routerの機能を示す3つの例があります。
Javaという名前の1つ目のフォルダには、サーバー側のJava APIの例が3つ格納されています。1つ目のGeocoderExample.jspでは、LBS Geocoderの機能が説明されています。2つ目のMapperExample.jspでは、Mapperの機能が説明されています。3つ目のRouterExample.jspでは、Routerの機能が説明されています。
JSPという名前の2つ目のフォルダには、JSPタグ・ライブラリを使用する3つの例が格納されています。1つ目のGeocoderExample.jspでは、LBS Geocoderの機能が説明されています。2つ目のMapperExample.jspでは、Mapperの機能が説明されています。3つ目のRouterExample.jspでは、Routerの機能が説明されています。
WDKという名前の3つ目のフォルダには、Wireless Developer Kitを使用する3つの例が格納されています。1つ目のGeocoderExampleWDK.javaでは、LBS Geocoderの機能が説明されています。2つ目のMapperExampleWDK.javaでは、Mapperの機能が説明されています。3つ目のRouterExampleWDK.javaでは、Routerの機能が説明されています。
LBSプラットフォームには、Geocoder、Mapper、Routerの他に、イエロー・ページ・ビジネス・ファインダなどのいくつかの機能が用意されています。YP機能のデモにはやや複雑な設定が必要になるため、Oracle Technology Networkから設定方法を別途ダウンロードできます。
アプリケーションの開発
LBSの例では、LBSプラットフォームの基本的な機能を最小限のコードで説明しています。各例はそれぞれ独立しており、LBSプラットフォームの1つの機能のみを説明します。一般的なLBSアプリケーションを作成する場合は、同一アプリケーションでこれらのコンポーネントを組み合せて使用します。たとえば、ユーザーの位置を特定して地図上に表示し、付近のレストランを3軒検索して1番近いレストランまでの道順をユーザーに知らせるアプリケーションを作成するとします。このようなアプリケーションでは、LBSの多くの機能を使用します。この場合は、Positionerがユーザーの位置を検索し、Mapperがユーザーの位置を地図上に表示します。また、YPFinderが付近のレストランを3軒検索し、Routerがユーザーに道順を示します。
設定要件
サーバー・サイドJavaとJSPタグの例を実行するには、ORACLE_HOME/j2ee/OC4J_Wireless/applications/wireless/location-web/ディレクトリからファイルをコピーする必要があります。さらに、サーバー管理者が有効なGeocoder、Mapper、Routerを構成する必要があります。構成するプロバイダの詳細および現在使用可能なプロバイダの一覧は、このマニュアルまたはOTNを参照してください。eLocationを構成するには、OTNを参照してください。
WDKの例はリモート・クライアントまたはJDeveloperで実行できます。WDKの例を正常にコンパイルまたは実行するには、次のJARファイルが必要です。
ORACLE_HOME/wireless/lib/wdk.jar
ORACLE_HOME/j2ee/home/lib/http_client.jar
ORACLE_HOME/lib/xmlparserv2.jar
ORACLE_HOME/soap/soap.jar
さらに、プロバイダは、WDKがリクエストとして指定するインスタンス上で正しく構成する必要があります。プロバイダの構成情報は、このマニュアルおよびOTNを参照してください。
次のいずれかのアプローチを使用して、ロケーション・ベースのアプリケーションを開発できます。
OracleAS Wireless XMLタグまたはHTMLタグ、あるいはその両方とOracleが提供するカスタム・タグを含むJava Server Pages(JSP)ファイルの作成(15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照)
JSPファイルでのJava APIの使用(15.2.2項「ロケーションJava APIの使用」を参照)
Webサービスの使用(15.2.3項「Webサービスの使用」を参照)
Java Application Programming Interface(API)を使用するよりは、JSPファイルでタグを使用する方が容易で便利ですが、APIを使用することで柔軟性が得られ、アプリケーション・ロジックを制御できます。
アダプタを作成する必要がない場合は、ロケーション・ベースの機能をユーザーに提供するJava Server Pages(JSP)ファイルを作成します。
この項では、オラクル社が提供するタグの使用の詳細を説明します。それぞれの項に例が含まれています。
表15-1に、ロケーション・サービス用のJSPタグを各タグを使用できるアプリケーションのタイプ別に示し、それぞれのタグで指定する情報を簡単に説明します。
表15-1 ロケーション・サービス用のJSPタグ
カテゴリ | タグ |
---|---|
全般 |
|
ジオコーディング |
|
マッピング |
|
ルーティング |
|
ビジネス・ディレクトリ(YP) |
iterateCategoriesMatchingKeyword |
ソート |
|
ロケーション・マーク |
|
モバイル・ポジショニング |
|
コミュニティ |
|
一方がiterateで始まり、もう一方がlistで始まる、類似した名前を持つタグのペアが多数あります(たとえば、iterateManeuversとlistManeuversがあります)。
iterateで始まる名前を持つタグは、コレクションを作成し、そのコレクション内の各項目を個別に表すため、ユーザーは特定の処理を実行できます。たとえば、Webページで各項目の後に横罫線を表示したり、各項目の前に静的テキストを表示できます。
listで始まる名前を持つタグは、戻り項目のフォーマットされていないリストを表します。これらのタグは、スクリプトやアルゴリズムで処理する目的で、単一のデータ・リストを渡す場合に役立ちますが、通常、Webページに直接表示するデータには使用されません。
ロケーション・サービス用のJSPタグは接頭辞とともに使用し、接頭辞はJSPファイルで指定する必要があります。次の例では、loc
接頭辞を定義しています。この接頭辞は、特定のタグの他の例に使用されています。
<%@ taglib uri="LocationTags" prefix="loc" %>
次の例に、address
タグとともに使用されているloc
接頭辞を示します。
<loc:address name="hq" type="oracle.panama.model.Location" businessName="Oracle Headquarters" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/>
15.2.1.1項では、ロケーション・サービス用の包括的なJSPの例について説明します。以降の各項(タグ名のアルファベット順)には、各タグに使用可能なすべてのパラメータの参照情報、つまりパラメータ名、説明および必須かどうかを記載しています。パラメータが必須の場合は、タグに含める必要があります。パラメータが必須でない場合は、省略するとサービス・プロバイダにより解析が実行されます。それぞれのタグの項にも、短い例が含まれています。
この項では、ロケーション・サービスに関連する操作を実行するためのJSPコードの例を示します。これらの例では、住所は該当するタグ(<map>
または<route>
)のpoints
属性に指定されています。
例15-4では、2つのロケーションの大きい地図と小さい地図が表示されます。
例15-4 JSPタグを使用したマッピング
<%@ taglib uri="LocationTags" prefix="loc" %> <%! public String transformString(String orig) { String result = ""; for (int i=0;i<orig.length();i++) { if (orig.charAt(i) == '&') result = result + "&"; else if (orig.charAt(i) == '<') result = result + "<"; else if (orig.charAt(i) == '>') result = result + ">"; else result = result + orig.charAt(i); } return result; } %> <SimpleResult> <loc:address name="NEDC" type="oracle.panama.model.Location" businessName="NEDC" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:map name="NEDCSmall" type="oracle.panama.spatial.jsptags.beans.Map" xres="400" yres="300" points="NEDC"> </loc:map> <loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:map name="HQSmall" type="oracle.panama.spatial.jsptags.beans.Map" xres="400" yres="300" points="HQ"> </loc:map> <loc:map name="BothSmall" type="oracle.panama.spatial.jsptags.beans.Map" xres="400" yres="300" points="NEDC HQ"/> <loc:map name="NEDCLarge" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600" points="NEDC"/> <loc:map name="HQLarge" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600" points="HQ"/> <loc:map name="BothLarge" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600" points="NEDC HQ"/> <SimpleImage target="<%= transformString(NEDCLarge.toString()) %>" src="<%= transformString(NEDCSmall.toString()) %>"/> <SimpleImage target="<%= transformString(HQLarge.toString()) %>" src="<%= transformString(HQSmall.toString()) %>"/> <SimpleImage target="<%= transformString(BothLarge.toString()) %>" src="<%= transformString(BothSmall.toString()) %>"/> </SimpleResult>
例15-5では、2つのロケーション間のルートと運転方向(経路)が表示されます。
例15-5 JSPタグを使用したルーティング
<%@ taglib uri="LocationTags" prefix="loc" %> <%! public String transformString(String orig) { String result = ""; for (int i=0;i<orig.length();i++) { if (orig.charAt(i) == '&') result = result + "&"; else if (orig.charAt(i) == '<') result = result + "<"; else if (orig.charAt(i) == '>') result = result + ">"; else result = result + orig.charAt(i); } return result; } %> <SimpleResult> <loc:address name="NEDC" type="oracle.panama.model.Location" businessName="NEDC" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600" points="NEDC HQ"> </loc:route> <SimpleImage src="<%= transformString(myRoute.getMap()) %>"/> <SimpleText> <loc:iterateManeuvers name="aManeuver" type="oracle.panama.spatial.jsptags.beans.Maneuver" routeID="myRoute"> <SimpleTextItem> <%= aManeuver.getNarrative() %> </SimpleTextItem> </loc:iterateManeuvers> </SimpleText> </SimpleResult>
例15-6では、ロケーションから指定した範囲内にある名前別のビジネス・ディレクトリ(YP)情報、特に、オラクル本社に最も近い10軒のスターバックスを含む地図が表示されます。
例15-6 JSPタグを使用した名前別のビジネス・ディレクトリ(YP)
<%@ taglib uri="LocationTags" prefix="loc" %> <%! public String transformString(String orig) { String result = ""; for (int i=0;i<orig.length();i++) { if (orig.charAt(i) == '&') result = result + "&"; else if (orig.charAt(i) == '<') result = result + "<"; else if (orig.charAt(i) == '>') result = result + ">"; else result = result + orig.charAt(i); } return result; } %> <SimpleResult> <loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:businesses name="starbucks" type="java.util.Collection" businessName="Starbucks" centerID="HQ" nearestN="10"/> <loc:map name="starbucksMap" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600" points="starbucks"> </loc:map> <SimpleImage src="<%= transformString(starbucksMap.toString()) %>"/> <SimpleText> <loc:iterateBusinesses name="singleStarbucks" type="oracle.panama.model.Point" collection="starbucks"> <SimpleTextItem> <%= singleStarbucks %> </SimpleTextItem> </loc:iterateBusinesses> </SimpleText> </SimpleResult>
例15-7では、指定したエリア内のカテゴリ別ビジネス・ディレクトリ(YP)情報、特に、カリフォルニア州サンフランシスコにあるすべての自動車ディーラ(新車)を含む地図が表示されます。
例15-7 JSPタグを使用したカテゴリ別のビジネス・ディレクトリ(YP)
<%@ taglib uri="LocationTags" prefix="loc" %> <%! public String transformString(String orig) { String result = ""; for (int i=0;i<orig.length();i++) { if (orig.charAt(i) == '&') result = result + "&"; else if (orig.charAt(i) == '<') result = result + "<"; else if (orig.charAt(i) == '>') result = result + ">"; else result = result + orig.charAt(i); } return result; } %> <SimpleResult> <loc:category name="automotive" type="oracle.panama.spatial.yp.YPCategory" categoryName="Automotive"> </loc:category> <loc:category name="automotiveDealers" type="oracle.panama.spatial.yp.YPCategory" categoryName="Dealers" parentCategory="automotive"> </loc:category> <loc:category name="newAutomotiveDealers" type="oracle.panama.spatial.yp.YPCategory" categoryName="New" parentCategory="automotiveDealers"> </loc:category> <loc:businesses name="dealers" type="java.util.Collection" categoryID="newAutomotiveDealers" country="US" state="CA" city="San Francisco"/> <loc:map name="dealerMap" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600" points="dealers"> </loc:map> <SimpleImage src="<%= transformString(dealerMap.toString()) %>"/> <SimpleText> <loc:iterateBusinesses name="dealer" type="oracle.panama.model.Point" collection="dealers"> <SimpleTextItem> <%= transformString(dealer.toString()) %> </SimpleTextItem> </loc:iterateBusinesses> </SimpleText> </SimpleResult>
addMembers
タグでは、モバイル・コミュニティに1人以上のメンバーを追加します。モバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-2に、addMembers
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-2 addMembersタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityID |
メンバーを追加するコミュニティに関連付けられた変数の名前。例: |
○ |
communityMembers |
コミュニティに追加されるOracle Application Server Wirelessユーザーがスペースで区切られたリスト。 |
○ |
次の例では、ユーザーMike
のリクエストによって、ユーザーSong
を変数comm_private
に関連付けられたモバイル・コミュニティに追加しています。また、このコミュニティのメンバーのjava.util.Enumeration
オブジェクトを作成しています。
<loc:addMembers name="add_members" type="Boolean" userName="Mike" communityID="comm_private" communityMembers="Song" /> <loc:listAllMembers name="list_all_mem1" type="java.util.Enumeration" communityID="comm_private" /> <%= list_all_mem1.toString() %>
address
タグでは、ジオコーディングするか、マップに配置するか、ルートの始点住所または終点住所として使用するか、ビジネス・ディレクトリ問合せの中心として使用する住所を指定します。
表15-3に、addressタグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-3 addressタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
firstLine |
番地。 |
× |
city |
都市名。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
× |
postalCode |
郵便番号。 |
× |
country |
国名。 |
× |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、2つの住所(ある人のオフィスと自宅)間にルートmyRoute
を作成して、ルートのマップとそれに続く横罫線を表示し、(iterateManeuvers
タグとgetMap
およびgetNarrative
ファンクション・コールを使用して)各運転経路とそれに続く横罫線を表しています。また、各運転経路の説明はリンクであり、ユーザーがクリックするとその経路マップを表示できます。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <img src="<%= myRoute.getMap() %>"> <HR> <loc:iterateManeuvers name="aManeuver" type="oracle.panama.spatial.jsptags.beans.Maneuver" routeID="myRoute"> <a href="<%= aManeuver.getMap() %>"> <%= aManeuver.getNarrative() %> </a> <HR> </loc:iterateManeuvers>
businesses
タグでは、1つ以上の属性を共有するビジネスの(oracle.panama.spatial.yp.YPBusiness
オブジェクトの)コレクションを作成します。
表15-4に、businessesタグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-4 businessesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
categoryID |
ビジネス・サービス・カテゴリの変数名。例: |
× |
keyword |
|
× |
city |
都市名。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
× |
postalCode |
郵便番号。 |
× |
country |
国名。 |
× |
centerID |
検索を開始する中心ポイントとして使用するポイントの変数名(住所の場合など)。 |
× |
radius |
検索対象となる円の半径の長さ(m単位)。 |
× |
nearestN |
問合せ要件を満たす最も近接している結果の最大数(たとえば、ホテルまたはユーザーの現在の位置に最も近接している3軒の銀行の検索など)。 |
× |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次のbusinesses
タグの例では、アメリカのカリフォルニア州内のビジネスBorders
をすべて指定します。businesses
タグをmap
タグで囲むと、各Borders書店を含むラベル付きのマップが作成されます。
<loc:map name="map1" type="oracle.panama.spatial.jsptags.beans.Map" xres="1000" yres="500"> <loc:businesses name="bord" type="java.util.Collection" businessName="Borders" country="US" state="CA"/> </loc:map>
category
タグでは、ビジネス・カテゴリ(oracle.panama.spatial.yp.YPCategory
オブジェクト)を作成します。
表15-5に、category
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-5 categoryタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
parentCategory |
親カテゴリの指定を含むオブジェクトの名前(親オブジェクトは、あらかじめ |
× |
categoryName |
カテゴリ名。例: |
○ |
次の例では2つのcategory
タグを使用しています。最初のcategory
タグでは、カテゴリAutomotive
を指定するオブジェクトcat_auto
を作成します。2番目のcategory
タグでは、カテゴリDealers
を親カテゴリcat_auto
(Automotive)の子として指定するオブジェクトcat_dealers
を作成します。
<loc:category name="cat_auto" type="oracle.panama.spatial.yp.YPCategory" categoryName="Automotive" /> <loc:category name="cat_dealers" type="oracle.panama.spatial.yp.YPCategory" parentCategory="cat_auto" categoryName="Dealers" />
createPrivateCommunity
タグでは、プライベート・モバイル・コミュニティを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-6に、createPrivateCommunity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-6 createPrivateCommunityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
コミュニティの所有者になるOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityName |
コミュニティの説明的な名前。例: |
○ |
communityMembers |
コミュニティに追加されるOracle Application Server Wirelessユーザーがスペースで区切られたリスト(追加されていない場合)。 |
× |
returnNullIfExists |
|
× |
次の例では、ユーザーMike
が所有するプライベート・コミュニティを作成し、2人のユーザー(Mike
およびJing
)を追加しています。コミュニティがすでに存在する場合、コミュニティは作成されません。また、コミュニティに関する情報を表示しています。
<loc:createPrivateCommunity name="comm_private" type="oracle.panama.model.Community" userName="Mike" communityName="My Private Community" communityMembers="Mike Jing" returnNullIfExists="FALSE" /> <%= comm_private.toString() %>
createSharedCommunity
タグでは、共有モバイル・コミュニティを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-7に、createSharedCommunity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-7 createSharedCommunityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
コミュニティの所有者になるOracleAS Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityName |
コミュニティの説明的な名前。例: |
○ |
communityMembers |
コミュニティに追加されるOracle Application Server Wirelessユーザーがスペースで区切られたリスト(追加されていない場合)。 |
× |
returnNullIfExists |
|
× |
次の例では、ユーザーMike
が所有する共有コミュニティを作成し、2人のユーザー(Mike
およびJing
)を追加しています。コミュニティがすでに存在する場合、コミュニティは作成されません。また、コミュニティに関する情報を表示しています。
<loc:createSharedCommunity name="comm_shared" type="oracle.panama.model.Community" userName="Mike" communityName="My Shared Community" communityMembers="Mike Jing" returnNullIfExists="FALSE" /> <%= comm_private.toString() %>
createSystemCommunity
タグでは、システム・モバイル・コミュニティを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-8に、createSystemCommunity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-8 createSystemCommunityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
コミュニティの所有者になるOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityName |
コミュニティの説明的な名前。例: |
○ |
communityMembers |
コミュニティに追加されるOracle Application Server Wirelessユーザーがスペースで区切られたリスト(追加されていない場合)。 |
× |
returnNullIfExists |
|
× |
次の例では、ユーザーMike
が所有するシステム・コミュニティを作成し、2人のユーザー(Mike
およびJing
)を追加しています。コミュニティがすでに存在する場合、コミュニティは作成されません。また、コミュニティに関する情報を表示しています。
<loc:createSystemCommunity name="comm_system" type="oracle.panama.model.Community" userName="Mike" communityName="My System Community" communityMembers="Mike Jing" returnNullIfExists="FALSE" /> <%= comm_private.toString() %>
defaultLocationbMark
タグでは、指定したユーザーのデフォルト・ロケーション・マークを表すオブジェクトを作成します。このタグを使用すると、ユーザーのデフォルト・ロケーション・マークを検索できます。
表15-9に、defaultLocationbMark
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-9 defaultLocationMarkタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
デフォルト・ロケーション・マークの検索対象であるOracle Application Server Wirelessのユーザーの名前。デフォルトは現行のユーザーです。 |
× |
次の例では、ユーザーMikeのデフォルト・ロケーション・マークを表すオブジェクトを作成し、そのオブジェクトに関する情報を表示しています。
<loc:defaultLocationMark name="user_mark" type="oracle.panama.model.LocationMark" userName="Mike" /> <%= user_mark.toString() %>
deleteCommunity
タグでは、プライベート、共有またはシステム・モバイル・コミュニティを削除します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-10に、deleteCommunity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-10 deleteCommunityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityName |
コミュニティの説明的な名前(変数名ではない)。例: |
○ |
次の例では、ユーザーMike
のリクエストによって、コミュニティMy Private Community
を削除し、操作の結果(TRUE
またはFALSE
)を表示しています。
<loc:deleteCommunity name="delete_comm1" type="Boolean" userName="Mike" communityName="My Private Community" /> <%= delete_comm1.toString() %>
drivingDistance
タグは、プロバイダによって決定される、ルートまたは運転経路の走行距離を表します。
表15-11に、drivingDistance
タグのパラメータを示します。route
およびmaneuver
はオプションですが、これらのパラメータのどちらか1つを指定する必要があります。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-11 drivingDistanceタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
route |
ルートの名前。例: |
× |
maneuver |
経路の名前。 |
× |
次の例では、2つの住所(ある人のオフィスと自宅)間にルートmyRoute
を作成し、そのルートの走行距離を表示しています。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <loc:drivingDistance name="drive_dist" type="String" route="myRoute" /> <%= drive_dist.toString() %>
drivingTime
タグでは、ルートの走行時間の見積りを含むオブジェクトを作成します。
表15-12に、drivingTime
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-12 drivingTimeタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
route |
ルートの名前。例: |
○ |
次の例では、2つの住所(ある人のオフィスと自宅)間にルートmyRoute
を作成し、そのルートの走行時間を表示しています。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <loc:drivingTime name="drive_time" type="String" route="myRoute" /> <%= drive_time.toString() %>
geocode
タグでは、ジオコーディングするか、マップに配置するか、ルートの始点住所または終点住所として使用するか、ビジネス・ディレクトリ問合せの中心として使用する住所を指定します。
表15-13に、geocode
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-13 geocodeタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
houseNumber |
住所の番地番号。 |
× |
streetName |
番地。 |
○ |
secondLine |
番地の2行目。 |
× |
intersection |
|
× |
city |
都市名。 |
○ |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
postalCode |
郵便番号(主要な部分)。例: |
○ |
postalCodeExt |
4桁の追加番号など、郵便番号の拡張部分。 |
× |
country |
国名または国コード。 |
○ |
makeCorrections |
ジオコーディング・プロバイダで住所のつづりの間違いを訂正する場合は |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるサービス・プロバイダの名前。 |
× |
次のgeocode
タグの例では、ジオコーディングする(店舗Mike's Hardwareの)住所を指定しています。
<loc:geocode name = "hardware1" type = "oracle.panama.model.Location" businessName = "Mike's Hardware" houseNumber = "22" streetName = "Monument Sq" city = "Concord" state = "MA" postalCode = "01742" country = "US" makeCorrections = "TRUE" />
geometry
タグでは、タイプoracle.panama.model.Point
のポイントのjava.util.List
オブジェクトを作成します。
表15-14に、geometry
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)points
、route
またはmaneuver
のパラメータを指定する必要があります。
表15-14 geometryタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
points |
ジオメトリを構成するポイントの変数の名前。 |
× |
route |
ジオメトリを構成するルートの変数の名前。このパラメータを指定する場合、ルート・オブジェクトを作成した |
× |
maneuver |
ジオメトリを構成する経路の変数の名前。 |
× |
次の例では、あるユーザーのオフィスの住所と自宅の住所の間にルートを作成し、geometry
タグを使用してルート沿いのポイントのフォーマットされていないリストを作成しています。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600" requestGeom="true"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <loc:geometry name="my_geom" type="java.util.List" route="myRoute" /> <%= my_geom.toString() %>
getCommunity
タグでは、プライベート、共有またはシステム・モバイル・コミュニティの指定された名前に関連付けられたオブジェクトを戻します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-15に、getCommunity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-15 getCommunityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityName |
コミュニティの説明的な名前(変数名ではない)。例: |
○ |
次の例では、ユーザーMike
のリクエストによって、コミュニティMy Private Community
を戻し、そのコミュニティに関する情報を表示しています。
<loc:getCommunity name="get_comm" type="oracle.panama.model.Community" userName="Mike" communityName="My Private Community" /> <%= get_comm.toString() %>
iterateBusinesses
タグは、businesses
タグで戻されるコレクション内の個々のビジネスを表します。
表15-16に、iterateBusinesses
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-16 iterateBusinessesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
戻されるコレクションの名前。例: |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社に最も近接している10軒のスターバックスを示すマップを作成し、ロケーションごとにそれぞれの情報とそれに続く横罫線を表示しています。情報の各行はリンクであり、ユーザーがクリックしてそのロケーションと周辺地域の詳細なマップを表示できます。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:map name="starbucksMap" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600"> <loc:businesses name="starbucks" type="java.util.Collection" businessName="Starbucks" centerID="HQ" nearestN="10"/> </loc:map> <img src="<%= starbucksMap %>"> <HR> <loc:iterateBusinesses name="singleStarbucks" type="oracle.panama.spatial.yp.YPBusiness" collection="starbucks"> <loc:map name="singleStarbucksMap" type="oracle.panama.spatial.jsptags.beans.Map" xres="800" yres="600" points="singleStarbucks"/> <a href="<%= singleStarbucksMap %>"> <%= singleStarbucks %> </a> <HR> </loc:iterateBusinesses>
iterateBusinessesInCity
タグは、指定した都市内の個々のビジネスを表します。
表15-17に、iterateBusinessesInCity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-17 iterateBusinessesInCityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
city |
都市名。 |
○ |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
country |
国名。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、California州San FranciscoにあるすべてのBorders書店を個別に表しています。ロケーションごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:iterateBusinessesInCity name="a_business_city" type="oracle.panama.spatial.yp.YPBusiness" city="San Francisco" state="CA" country="US" businessName="Borders"> <%= a_business_city.toString() %> <HR> </loc:iterateBusinessesInCity>
iterateBusinessesInCorridor
タグは、コリドー内の個々のビジネスを表します。コリドーとは、ルートの作成時に交差点や出口などを表すポイントのコレクションです。
表15-18に、iterateBusinessesInCorridor
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-18 iterateBusinessesInCorridorタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
corridorID |
コリドーに関連付けられた変数の名前。 |
○ |
radiusInMeters |
コリドー内の各ポイントを中心としたm単位の半径。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、オフィスと他の場所の間にルートを作成し、そのルートに関連付けられたコリドー内のすべてのポイントから3000m以内のスターバックスを個別に表しています。この例では、ロケーションごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600" requestGeom="true"> <loc:address name="office" type="oracle.panama.model.Location" businessName="Some office" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:address name="ucsb" type="oracle.panama.model.Location" businessName="UCSB" firstLine="6750 El Colegio Rd" city="Goleta" state="CA" postalCode="93117" country="US"/> </loc:route> <loc:geometry name="myRouteGeom" type="java.util.List" route="myRoute"/> <loc:iterateBusinessesInCorridor name="a_business_corridor" type="oracle.panama.spatial.yp.YPBusiness" businessName="Starbucks" corridorID="myRouteGeom" radiusInMeters="3000"> <%= a_business_corridor.toString() %> <HR> </loc:iterateBusinessesInCorridor>
iterateBusinessesInPostalCode
タグは、指定した郵便番号に該当する個々のビジネスを表します。
表15-19に、iterateBusinessesInPostalCode
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-19 iterateBusinessesInPostalCodeタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
postalCode |
郵便番号。 |
○ |
country |
国名。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、アメリカ合衆国内の郵便番号93117に該当するすべてのスターバックスを個別に表しています。ロケーションごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:iterateBusinessesInPostalCode name="a_business_pcode" type="oracle.panama.spatial.yp.YPBusiness" postalCode="93117" country="US" businessName="Starbucks"> <%= a_business_pcode.toString() %> <HR> </loc:iterateBusinessesInPostalCode>
iterateBusinessesInRadius
タグは、ポイントを中心に指定した半径(m単位)を持つ円形の地域内にある個々のビジネスを表します。
表15-20に、iterateBusinessesInRadius
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-20 iterateBusinessesInRadiusタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
centerID |
問合せの中心ポイントに関連付けられた変数の名前。 |
○ |
radiusInMeters |
|
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社の住所に関連付けられたポイントから5000m(5Km)以内のすべてのスターバックスを個別に表しています。ロケーションごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:iterateBusinessesInRadius name="a_business_radius" type="oracle.panama.spatial.yp.YPCategory" businessName="Starbucks" centerID="HQ" radiusInMeters="5000"> <%= a_business_radius.toString() %> <HR> </loc:iterateBusinessesInRadius>
iterateBusinessesInState
タグは、指定した州内の個々のビジネスを表します。
表15-21に、iterateBusinessesInState
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-21 iterateBusinessesInStateタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
country |
国名。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、California州にあるすべてのスターバックスを個別に表しています。ロケーションごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:iterateBusinessesInState name="a_business_state" type="oracle.panama.spatial.yp.YPBusiness" state="CA" country="US" businessName="Starbucks"> <%= a_business_state.toString() %> <HR> </loc:iterateBusinessesInState>
iterateBusinessesNearestTo
タグは、ポイントを中心に指定した半径(m単位)を持つ円形の地域内にある個々のビジネスを表します。
表15-22に、iterateBusinessesNearestTo
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-22 iterateBusinessesNearestToタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
centerID |
問合せの中心ポイントに関連付けられた変数の名前。 |
○ |
n |
|
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社の住所に関連付けられたポイントに最も近接している10軒のスターバックスを個別に表しています。ロケーションごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:iterateBusinessesNearestTo name="a_business_nearest" type="oracle.panama.spatial.yp.YPBusiness" businessName="Starbucks" centerID="HQ" n="10"> <%= a_business_nearest.toString() %> <HR> </loc:iterateBusinessesNearestTo>
iterateByDistance
タグは、コレクション内の個々のポイントを、指定したポイントからの距離順にソートして表します。距離は、地球の曲率に従った直線で測定されます。
表15-23に、iterateByDistance
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-23 iterateByDistanceタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
距離順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
centerID |
距離を計算する中心ポイントとして使用するポイントの変数名(住所の場合など)。 |
○ |
次の例では、Oracle本社に最も近接している10軒のスターバックスのコレクションを作成しています。iterateByDistance
タグを使用して、個々のロケーションを本社からの距離順にソートして表し、各ロケーションに関する情報とそれに続く横罫線を表示しています。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:businesses name="starbucks" type="java.util.Collection" businessName="Starbucks" centerID="HQ" nearestN="10"/> <loc:iterateByDistance name="iter_dist" type="oracle.panama.model.Point" collection="starbucks" centerID="HQ"> <%= iter_dist.toString() %> <HR> </loc:iterateByDistance>
iterateByDrivingDistance
タグは、コレクション内の個々のポイントを、ルーティング・プロバイダが決定した指定のポイントからの走行距離順にソートして表します。
注意: 走行距離順のソートは、ルーティング・プロバイダによって実行されます。したがって、このタグは走行距離順のソートをサポートするプロバイダのみと併用できます。 |
表15-24に、iterateByDrivingDistance
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-24 iterateByDrivingDistanceタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
走行距離順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
centerID |
走行距離を計算する中心ポイントとして使用するポイントの変数名(住所の場合など)。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社に最も近接している10軒のスターバックスのコレクションを作成し、iterateByDrivingDistance
タグを使用して、ロケーションを本社からの走行距離順にソートし、各ロケーションに関する情報とそれに続く横罫線を表示しています。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:businesses name="starbucks" type="java.util.Collection" businessName="Starbucks" centerID="HQ" nearestN="10"/> <loc:iterateByDrivingDistance name="iter_drive" type="oracle.panama.model.Point" collection="starbucks" centerID="HQ"> <%= iter_drive.toString() %> <HR> </loc:iterateByDrivingDistance>
iterateByName
タグは、コレクション内の個々のポイントをビジネス名順にソートして表します。
表15-25に、iterateByName
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-25 iterateByNameタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
名前順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
次の例では、以前に作成したコレクションbookstores
内の個々のビジネスを、名前順にソートして表しています。ビジネスごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:iterateByName name="iter_name" type="oracle.panama.model.Point" collection="bookstores"> <%= iter_name.toString() %> <HR> </loc:iterateByName>
iterateByName
タグは、コレクション内の個々のポイントを、リージョン名順にソートして表します。リージョンは最初に国でソートされ、続いて州、都市、郵便番号でソートされます。
表15-26に、iterateByRegionName
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-26 iterateByRegionNameタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
名前順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
次の例では、以前に作成したコレクションstarbucks
内の個々のビジネスを、リージョン名順に(国、州、都市、郵便番号の順に)ソートして表しています。ビジネスごとに、そのロケーションに関する情報とそれに続く横罫線が表示されます。
<loc:iterateByRegionName name="iter_reg_name" type="oracle.panama.model.Point" collection="starbucks"> <%= iter_reg_name.toString() %> <HR> </loc:iterateByRegionName>
iterateCategoriesMatchingKeyword
タグでは、指定したキーワード値と一致するカテゴリのコレクションを作成し、各カテゴリを個別に表示します。
表15-27に、iterateCategoriesMatchingKeyword
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-27 iterateCategoriesMatchingKeywordタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
parentCategory |
親カテゴリの指定を含むオブジェクトの名前(親オブジェクトは、あらかじめ |
× |
keyword |
親カテゴリ名、または |
○ |
次の例では、キーワードrestaurant
と一致する個々のカテゴリを表しています。カテゴリごとに、完全修飾された名前とそれに続く横罫線が表示されます。
<loc:iterateCategoriesMatchingKeyword name="a_category" type="oracle.panama.spatial.yp.YPCategory" keyword="restaurant"> <%= a_category.getFullyQualifiedName() %> <HR> </loc:iterateCategoriesMatchingKeyword>
iterateChildCategories
タグでは、個別に表示される直下のサブカテゴリのコレクションを指定します。
表15-28に、iterateChildCategories
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-28 iterateChildCategoriesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
parentCategory |
親カテゴリの指定を含むオブジェクトの名前(親オブジェクトは、あらかじめ |
× |
次の例では、変数restaurant
に関連付けられた親カテゴリの、すべての子カテゴリを個別に表しています。子カテゴリごとに、完全修飾された名前とそれに続く横罫線が表示されます。
<loc:iterateChildCategories name="a_child_category" type="oracle.panama.spatial.yp.YPCategory" parentCategory="restaurant"> <%= a_child_category.getFullyQualifiedName() %> <HR> </loc:iterateChildCategories>
iterateGeocodes
タグでは、個別に表示されるジオコーディングされた住所のコレクションを戻します。
表15-29に、iterateGeocodes
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-29 iterateGeocodesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
houseNumber |
住所の番地番号。 |
× |
streetName |
番地。 |
○ |
secondLine |
番地の2行目。 |
× |
intersection |
|
× |
city |
都市名。 |
○ |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
postalCode |
郵便番号(主要な部分)。例: |
○ |
postalCodeExt |
4桁の追加番号など、郵便番号の拡張部分。 |
× |
country |
国名または国コード。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるサービス・プロバイダの名前。 |
× |
次のiterateGeocodes
タグの例は、New Hampshire州Nashuaで郵便番号03060のDaniel Webster Highwayにジオコーディングされた各住所を表します。ジオコーディングされた住所ごとに、横罫線および1行のテキストが表示され、改行後にプロバイダからの住所情報が表示されます。
<loc:iterateGeocodes name = "a_business" type = "oracle.panama.model.Location" streetName = "Daniel Webster Hwy" city = "Nashua" state = "NH" postalCode = "03060" country = "US"> <HR> Another business in our community: <br> <%= a_business.toString() %> </loc:iterateGeocodes>
iterateLocationMarks
タグは、Oracle Application Server Wirelessユーザーの個々のロケーション・マークを表します。
表15-30に、iterateLocationMarks
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-30 iterateLocationMarksタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
ロケーション・マークの表示対象であるOracle Application Server Wirelessのユーザーの名前。デフォルトは現行のユーザーです。 |
× |
次の例では、変数iter_marks
に関連付けられたオブジェクトとして、ユーザーMike
の各ロケーション・マークを表し、オブジェクトごとに、そのオブジェクトの情報とそれに続く横罫線を表示しています。
<loc:iterateLocationMarks name="iter_marks" type="oracle.panama.model.LocationMark" userName="Mike" > <%= iter_marks.toString() %> <HR> </loc:iterateLocationMarks>
iterateManeuvers
タグでは、運転経路のコレクションを作成し、経路を個別に表示します。
表15-31に、iterateManeuvers
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-31 iterateManeuversタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
routeID |
運転経路を表すルートの名前。 |
○ |
次の例では、2つの住所(ある人のオフィスと自宅)間にルートmyRoute
を作成して、ルートのマップとそれに続く横罫線を表示し、(iterateManeuvers
タグとgetMap
およびgetNarrative
ファンクション・コールを使用して)各運転経路とそれに続く横罫線を表しています。また、各運転経路の説明はリンクであり、ユーザーがクリックするとその経路マップを表示できます。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <img src="<%= myRoute.getMap() %>"> <HR> <loc:iterateManeuvers name="aManeuver" type="oracle.panama.spatial.jsptags.beans.Maneuver" routeID="myRoute"> <a href="<%= aManeuver.getMap() %>"> <%= aManeuver.getNarrative() %> </a> <HR> </loc:iterateManeuvers>
iterateReverseGeocodes
タグは、個別に表示される逆ジオコーディングされた住所(指定したポイントにプロバイダによって関連付けられた住所)のコレクションを戻します。
表15-32に、iterateReverseGeocodes
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-32 iterateReverseGeocodesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
firstLine |
番地。 |
× |
city |
都市名。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
× |
postalCode |
郵便番号。 |
× |
country |
国名。 |
× |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次のiterateReverseGeocodes
タグの例は、指定したポイントにプロバイダによって関連付けられ、ジオコーディングされた各住所を表します。ジオコーディングされた住所ごとに、プロバイダからの住所情報とそれに続く横罫線が表示されます。
<loc:iterateReverseGeocodes name = "iter_rev" type = "oracle.panama.model.Location" lon = "-71.4424" lat = "42.712" label = "You Are Here" > <%= iter_rev.toString() %> <HR> </loc:iterateReverseGeocodes>
listAllMembers
タグでは、指定したモバイル・コミュニティのすべてのメンバーのフォーマットされていないリストを作成します。
表15-33に、listAllMembers
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-33 listAllMembersタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
communityID |
メンバーをリストするコミュニティに関連付けられた変数の名前。 |
○ |
次の例では、変数comm_private
に関連付けられたコミュニティのすべてのメンバーのフォーマットされていないリストを作成し、作成されるjava.util.Enumeration
オブジェクトを表示しています。
<loc:listAllMembers name="list_all_mem" type="java.util.Enumeration" communityID="comm_private" /> <%= list_all_mem.toString() %>
listBusinessesInCity
タグでは、指定した都市内のビジネスのフォーマットされていないリストを作成します。
表15-34に、listBusinessesInCity
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-34 listBusinessesInCityタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
city |
都市名。 |
○ |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
country |
国名。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、California州San FranciscoにあるすべてのBorders書店のフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listBusinessesInCity name="all_businesses_city" type="java.util.List" city="San Francisco" state="CA" country="US" businessName="Borders"> </loc:listBusinessesInCity> <%= all_businesses_city.toString() %>
listBusinessesInCorridor
タグでは、コリドー内のビジネスのフォーマットされていないリストを作成します。コリドーとは、ルートの作成時に交差点や出口などを表すポイントのコレクションです。
表15-35に、listBusinessesInCorridor
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-35 listBusinessesInCorridorタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
corridorID |
コリドーに関連付けられた変数の名前。 |
○ |
radiusInMeters |
コリドー内の各ポイントを中心としたm単位の半径。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、オフィスと他の場所の間にルートを作成して、そのルートに関連付けられたコリドー内のすべてのポイントから3000m以内のスターバックスのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600" requestGeom="true"> <loc:address name="office" type="oracle.panama.model.Location" businessName="Some office" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:address name="ucsb" type="oracle.panama.model.Location" businessName="UCSB" firstLine="6750 El Colegio Rd" city="Goleta" state="CA" postalCode="93117" country="US"/> </loc:route> <loc:geometry name="myRouteGeom" type="java.util.List" route="myRoute"/> <loc:listBusinessesInCorridor name="all_businesses_corridor" type="java.util.List" businessName="Starbucks" corridorID="myRouteGeom" radiusInMeters="3000"> </loc:listBusinessesInCorridor> <%= all_businesses_corridor.toString() %>
listBusinessesInPostalCode
タグでは、指定した郵便番号に該当するビジネスのフォーマットされていないリストを作成します。
表15-36に、listBusinessesInPostalCode
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-36 listBusinessesInPostalCodeタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
postalCode |
郵便番号。 |
○ |
country |
国名。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、アメリカ合衆国内の郵便番号93117に該当するすべてのスターバックスのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listBusinessesInPostalCode name="all_businesses_pcode" type="java.util.List" postalCode="93117" country="US" businessName="Starbucks"> </loc:listBusinessesInPostalCode> <%= all_businesses_pcode.toString() %>
listBusinessesInRadius
タグでは、ポイントを中心に指定した半径(m単位)を持つ円形の地域内にあるビジネスのフォーマットされていないリストを作成します。
表15-37に、listBusinessesInRadius
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-37 listBusinessesInRadiusタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
centerID |
問合せの中心ポイントに関連付けられた変数の名前。 |
○ |
radiusInMeters |
|
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社の住所に関連付けられたポイントから5000m(5Km)以内のすべてのスターバックスのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:listBusinessesInRadius name="all_businesses_radius" type="java.util.List" businessName="Starbucks" centerID="HQ" radiusInMeters="5000"> </loc:listBusinessesInRadius> <%= all_businesses_radius.toString() %>
listBusinessesInState
タグでは、指定した州内のビジネスのフォーマットされていないリストを作成します。
表15-38に、listBusinessesInState
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-38 listBusinessesInStateタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
country |
国名。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、California州にあるすべてのスターバックスのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listBusinessesInState name="all_businesses_state" type="java.util.List" state="CA" country="US" businessName="Borders"> </loc:listBusinessesInState> <%= all_businesses_state.toString() %>
listBusinessesNearestTo
タグでは、ポイントを中心に指定した半径(m単位)を持つ円形の地域内にあるビジネスのフォーマットされていないリストを作成します。
表15-39に、listBusinessesNearestTo
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-39 listBusinessesNearestToタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
ビジネスの説明的な名前。例: |
× |
categoryID |
カテゴリに関連付けられた変数の名前(カテゴリが問合せに含まれる場合)。 |
× |
keyword |
キーワード(キーワードが問合せに含まれる場合)。 |
× |
centerID |
問合せの中心ポイントに関連付けられた変数の名前。 |
○ |
n |
|
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社の住所に関連付けられたポイントに最も近接している10軒のスターバックスのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:listBusinessesNearestTo name="all_businesses_nearest" type="java.util.List" businessName="Starbucks" centerID="HQ" n="10"> </loc:listBusinessesNearestTo> <%= all_businesses_nearest.toString() %>
listByDistance
タグでは、コレクション内のポイントを指定したポイントからの距離順にソートしたフォーマットされていないリストを作成します。距離は、地球の曲率に従った直線で測定されます。
表15-40に、listByDistance
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-40 listByDistanceタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
距離順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
centerID |
距離を計算する中心ポイントとして使用するポイントの変数名(住所の場合など)。 |
○ |
次の例では、Oracle本社に最も近接している10軒のスターバックスのコレクションを作成し、listByDistance
タグを使用して、ロケーションを本社からの距離順にソートしたフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:businesses name="starbucks" type="java.util.Collection" businessName="Starbucks" centerID="HQ" nearestN="10"/> <loc:listByDistance name="list_dist" type="java.util.List" collection="starbucks" centerID="HQ"> </loc:listByDistance> <%= list_dist.toString() %>
listByDrivingDistance
タグでは、コレクション内のポイントを、ルーティング・プロバイダが決定した指定のポイントからの走行距離順にソートした、フォーマットされていないリストを作成します。
注意: 走行距離順のソートは、ルーティング・プロバイダによって実行されます。したがって、このタグは走行距離順のソートをサポートするプロバイダのみと併用できます。 |
表15-41に、listByDrivingDistance
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-41 listByDrivingDistanceタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
走行距離順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
centerID |
走行距離を計算する中心ポイントとして使用するポイントの変数名(住所の場合など)。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、Oracle本社に最も近接している10軒のスターバックスのコレクションを作成し、listByDrivingDistance
タグを使用して、ロケーションを本社からの走行距離順にソートしたフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:address name="HQ" type="oracle.panama.model.Location" businessName="HQ" firstLine="500 Oracle Parkway" city="Redwood City" state="CA" postalCode="94065" country="US"/> <loc:businesses name="starbucks" type="java.util.Collection" businessName="Starbucks" centerID="HQ" nearestN="10"/> <loc:listByDrivingDistance name="list_drive" type="java.util.List" collection="starbucks" centerID="HQ"> </loc:listByDrivingDistance> <%= list_drive.toString() %>
listByName
タグでは、コレクション内のポイントをビジネス名順にソートしたフォーマットされていないリストを作成します。
表15-42に、listByName
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-42 listByNameタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
名前順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
次の例では、(以前に作成した)コレクションbookstores
内のビジネスを名前順にソートしたフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listByName name="list_name" type="java.util.List" collection="bookstores"> </loc:listByName> <%= list_name.toString() %>
listByRegionName
タグでは、コレクション内のポイントをリージョン名順にソートしたフォーマットされていないリストを作成します。リージョンは最初に国でソートされ、続いて州、都市、郵便番号でソートされます。
表15-43に、listByRegionName
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-43 listByRegionNameタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
collection |
名前順にソートされるポイントのコレクションに関連付けられた変数の名前。 |
○ |
次の例では、(以前に作成した)コレクションstarbucks
内のビジネスをリージョン名順に(国、州、都市、郵便番号の順に)ソートしたフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listByRegionName name="list_reg_name" type="java.util.List" collection="starbucks"> </loc:listByRegionName> <%= list_reg_name.toString() %>
listCategoriesMatchingKeyword
タグでは、指定したキーワードと一致するビジネス・ディレクトリ・カテゴリのフォーマットされていないリストを作成します。
表15-44に、listCategoriesMatchingKeyword
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-44 listCategoriesMatchingKeywordタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
parentCategory |
親カテゴリの指定を含むオブジェクトの名前(親オブジェクトは、あらかじめ |
× |
keyword |
親カテゴリ名、または |
○ |
次の例では、キーワードrestaurant
に一致するカテゴリのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listCategoriesMatchingKeyword name="all_categories_key" type="java.util.List" keyword="restaurant"> </loc:listCategoriesMatchingKeyword> <%= all_categories_key.toString() %>
listChildCategories
タグでは、直下のサブカテゴリのフォーマットされていないリストを作成します。
表15-45に、listChildCategories
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-45 listChildCategoriesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
parentCategory |
親カテゴリの指定を含むオブジェクトの名前(親オブジェクトは、あらかじめ |
× |
次の例では、変数restaurant
に関連付けられた親カテゴリのすべての子カテゴリのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listChildCategories name="all_categories_child" type="java.util.List" parentCategory="restaurant"> </loc:listChildCategories> <%= all_categories_child.toString() %>
listCreatedCommunities
タグでは、指定したOracle Application Serverのモバイル使用が所有しているすべてのモバイル・コミュニティ(プライベート、共有およびシステム)のフォーマットされていないリストを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-46に、listCreatedCommunities
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-46 listCreatedCommunitiesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
○ |
次の例では、ユーザーMike
のリクエストによって、すべてのモバイル・コミュニティのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listCreatedCommunities name="list_cr_comm" type="java.util.List" userName="Mike" /> <%= list_cr_comm.toString() %>
listCreatedPrivateCommunities
タグでは、指定したOracle Application Serverのモバイル使用が所有しているすべてのモバイル・プライベート・コミュニティのフォーマットされていないリストを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-47に、listCreatedPrivateCommunities
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-47 listCreatedPrivateCommunitiesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
○ |
次の例では、ユーザーMike
のリクエストによって、すべてのモバイル・プライベート・コミュニティのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listCreatedPrivateCommunities name="list_cr_priv_comm" type="java.util.List" userName="Mike" /> <%= list_cr_priv_comm.toString() %>
listCreatedSharedCommunities
タグでは、指定したOracle Application Serverのモバイル使用が所有しているすべてのモバイル共有コミュニティのフォーマットされていないリストを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-48に、listCreatedSharedCommunities
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-48 listCreatedSharedCommunitiesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
○ |
次の例では、ユーザーMike
のリクエストによって、すべてのモバイル共有コミュニティのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listCreatedSharedCommunities name="list_cr_shar_comm" type="java.util.List" userName="Mike" /> <%= list_cr_shar_comm.toString() %>
listCreatedSystemCommunities
タグでは、指定したOracle Application Serverのモバイル使用が所有しているすべてのモバイル・システム・コミュニティのフォーマットされていないリストを作成します。コミュニティのタイプを含むモバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-49に、listCreatedSystemCommunities
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-49 listCreatedSystemCommunitiesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
○ |
次の例では、ユーザーMike
のリクエストによって、すべてのモバイル・システム・コミュニティのフォーマットされていないリストを作成し、そのリストを表示しています。
<loc:listCreatedSystemCommunities name="list_cr_sys_comm" type="java.util.List" userName="Mike" /> <%= list_cr_sys_comm.toString() %>
listGeocodes
タグでは、ジオコーディングされた住所のフォーマットされていないリストを作成します。
表15-50に、listGeocodes
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-50 listGeocodesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
houseNumber |
住所の番地番号。 |
× |
streetName |
番地。 |
○ |
secondLine |
番地の2行目。 |
× |
intersection |
|
× |
city |
都市名。 |
○ |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
○ |
postalCode |
郵便番号(主要な部分)。例: |
○ |
postalCodeExt |
4桁の追加番号など、郵便番号の拡張部分。 |
× |
country |
国名または国コード。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるサービス・プロバイダの名前。 |
× |
次のlistGeocodes
タグの例は、New Hampshire州Nashuaで郵便番号03060のDaniel Webster Highwayにジオコーディングされたすべての住所を表します。
<loc:listGeocodes name = "all_businesses" type = "java.util.List" streetName = "Daniel Webster Hwy" city = "Nashua" state = "NH" postalCode = "03060" country = "US" />
listLocationMarks
タグでは、OracleAS Wirelessユーザーのロケーション・マークのフォーマットされていないリストを作成します。
表15-51に、listLocationMarks
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-51 listLocationMarksタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
ロケーション・マークのリスト対象であるOracle Application Server Wirelessのユーザーの名前。デフォルトは現行のユーザーです。 |
× |
次の例では、変数list_marks
に関連付けられたオブジェクトとして、ユーザーMike
のロケーション・マークのフォーマットされていないリストを作成し、そのオブジェクトの情報を表示しています。
<loc:listLocationMarks name="list_marks" type="java.util.List" userName="Mike" /> <%= list_marks.toString() %>
listManeuvers
タグでは、運転経路のフォーマットされていないリストを作成します。
表15-52に、listManeuvers
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-52 listManeuversタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
firstLine |
番地。 |
× |
city |
都市名。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
× |
postalCode |
郵便番号。 |
× |
country |
国名。 |
× |
次の例では、2つの住所(ある人のオフィスと自宅)間にルートmyRouteを作成して、ルートのマップとそれに続く横罫線を表示し、そのルートのすべての運転経路のフォーマットされていないリストを表しています。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <loc:listManeuvers name="all_maneuvers" type="java.util.List" routeID="myRoute" /> <%= all_maneuvers.toString() %>
listReverseGeocodes
タグでは、逆ジオコーディングされた住所(指定したポイントにプロバイダによって関連付けられた住所)のフォーマットされていないリストを作成します。
表15-53に、listReverseGeocodes
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-53 listReverseGeocodesタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
businessName |
指定した住所にあるビジネスまたは他のエンティティの説明的な名前。例: |
× |
firstLine |
番地。 |
× |
city |
都市名。 |
× |
state |
2文字の州コード(US)または郡コード(カナダ)。 |
× |
postalCode |
郵便番号。 |
× |
country |
国名。 |
× |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次のlistReverseGeocodes
タグの例は、指定したポイントにプロバイダによって関連付けられた住所を表します。
<loc:listReverseGeocodes name = "list_rev" type = "java.util.List" lon = "-71.4424" lat = "42.712" label = "You Are Here" /> <%= list_rev.toString() %>
map
タグでは、指定の解像度で次のいずれかを示すマップを指定します。
1つ以上のポイント
1つのルート
1つの運転経路
表15-54に、map
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-54 mapタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
points |
作成するマップに含めるポイントのコレクションの名前。 |
× |
route |
作成するマップに含めるルートの名前。 |
× |
maneuver |
作成するマップに含める経路の名前。 |
× |
xres |
画面表示単位によるマップの幅。 |
○ |
yres |
画面表示単位によるマップの高さ。 |
○ |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次のmap
タグの例では、幅400ピクセル、高さ300ピクセルのマップNEDCSmall
を作成しています。マップの中心ポイントはmap
タグ内のaddress
タグで定義した住所です。
<loc:map name="NEDCSmall" type="oracle.panama.spatial.jsptags.beans.Map" xres="400" yres="300"> <loc:address name="NEDC" type="oracle.panama.model.Location" businessName="NEDC" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> </loc:map>
mobilePos
タグでは、モバイル・ユーザーに関するポジショニング情報を備えたオブジェクトを作成します。
表15-55に、mobilePos
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-55 mobilePosタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
ポジショニング情報のリクエスト対象であるOracle Application Server Wirelessのユーザーの名前。デフォルトは現行のユーザーです。 |
× |
requestingUser |
ポジショニング情報のリクエスト対象であるOracle Application Server Wirelessのユーザーの名前。デフォルトは現行のユーザーです。リクエスト側ユーザーが、 |
× |
failoverToDefaultLocationMark |
|
× |
次の例では、ユーザーMike
に関するポジショニング情報を備えたオブジェクトを作成しています。デフォルトでは、現在位置が取得できない場合、そのユーザーのデフォルト・ロケーション・マークが使用されます。また、この例は、ポジショニング情報も表示しています。
<loc:mobilePos name="position" type="oracle.panama.model.Point" userName="Mike" /> <%= position.toString() %>
point
タグでは、WGS 84座標系(Oracle Spatial SRID値8307)を使用して、ポイントの経度と緯度の値を指定します。
表15-56に、point
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-56 pointタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
lon |
ポイントの経度の値(WGS 84座標系)。例: |
○ |
lat |
ポイントの緯度の値(WGS 84座標系)。例: |
○ |
次のpoint
タグの例では、西経75.3度、北緯45.71度にポイントを指定します。
<loc:point lon = "-73.5" lat = "45.71" />
removeAllMembers
タグでは、モバイル・コミュニティからすべてのメンバーを削除します。(このタグは、コミュニティを削除しません。コミュニティを削除するには、deleteCommunityタグを使用します。)モバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-57に、removeAllMembers
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-57 removeAllMembersタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityID |
すべてのメンバーを削除するコミュニティに関連付けられた変数の名前。例: |
○ |
次の例では、ユーザーMike
のリクエストによって、変数comm_private
に関連付けられたモバイル・コミュニティからすべてのメンバーを削除しています。また、このコミュニティのメンバーのjava.util.Enumeration
オブジェクトを作成しています。
<loc:removeAllMembers name="remove_all_members" type="Boolean" userName="Mike" communityID="comm_private" /> <loc:listAllMembers name="list_all_mem3" type="java.util.Enumeration" communityID="comm_private" /> <%= list_all_mem3.toString() %>
removeMembers
タグでは、モバイル・コミュニティから1人以上のメンバーを削除します。モバイル・コミュニティの説明は、15.3.2.6項「モバイル・コミュニティ」を参照してください。
表15-58に、removeMembers
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-58 removeMembersタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityID |
メンバーを削除するコミュニティに関連付けられた変数の名前。例: |
○ |
communityMembers |
コミュニティから削除されるOracle Application Server Wirelessユーザーがスペースで区切られたリスト。 |
× |
次の例では、ユーザーMike
のリクエストによって、変数comm_private
に関連付けられたモバイル・コミュニティからユーザーOscar
およびMaria
を削除しています。また、このコミュニティのメンバーのjava.util.Enumeration
オブジェクトを作成しています。
<loc:removeMembers name="remove_members" type="Boolean" userName="Mike" communityID="comm_private" communityMembers="Oscar Maria" /> <loc:listAllMembers name="list_all_mem2" type="java.util.Enumeration" communityID="comm_private" /> <%= list_all_mem2.toString() %>
route
タグでは、指定のマップ解像度を持つルートを指定します。ルートには、経路、概観マップおよび経路マップが含まれます。
表15-59に、route
タグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-59 routeタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
xres |
表示されるルートの幅を示す画面表示単位の値。 |
○ |
yres |
表示されるルートの高さを示す画面表示単位の値。 |
○ |
requestGeom |
|
× |
requestMap |
|
× |
provider |
優先順位がある場合は、リクエストに対して最初に選択されるプロバイダの名前。 |
× |
次の例では、2つの住所(ある人のオフィスと自宅)間にルートmyRoute
を作成して、ルートのマップとそれに続く横罫線を表示し、(iterateManeuvers
タグとgetMap
およびgetNarrative
ファンクション・コールを使用して)各運転経路とそれに続く横罫線を表しています。また、各運転経路の説明はリンクであり、ユーザーがクリックするとその経路マップを表示できます。
<loc:route name="myRoute" type="oracle.panama.spatial.jsptags.beans.Route" xres="800" yres="600"> <loc:address name="office" type="oracle.panama.model.Location" businessName="My office" firstLine="1 Oracle Dr" city="Nashua" state="NH" postalCode="03062" country="US"/> <loc:address name="home" type="oracle.panama.model.Location" businessName="My home" firstLine="2 Royal Crest Dr" city="Nashua" state="NH" postalCode="03060" country="US"/> </loc:route> <img src="<%= myRoute.getMap() %>"> <HR> <loc:iterateManeuvers name="aManeuver" type="oracle.panama.spatial.jsptags.beans.Maneuver" routeID="myRoute"> <a href="<%= aManeuver.getMap() %>"> <%= aManeuver.getNarrative() %> </a> <HR> </loc:iterateManeuvers>
setCommunityName
タグでは、ジオコーディングするか、マップに配置するか、ルートの始点住所または終点住所として使用するか、ビジネス・ディレクトリ問合せの中心として使用する住所を指定します。
表15-60に、setCommunityNameタグのパラメータを示します。(この表の内容の説明は、15.2.1項「Java Server Pages(JSP)ファイルの作成」を参照。)
表15-60 setCommunityNameタグのパラメータ
パラメータ名 | 説明 | 必須 |
---|---|---|
name |
戻されるオブジェクトの名前。例: |
○ |
type |
オブジェクトのタイプ。 |
○ |
userName |
操作をリクエストするOracle Application Server Wirelessユーザーの名前。デフォルトは現行のユーザーです。 |
× |
communityID |
すべてのメンバーを削除するコミュニティに関連付けられた変数の名前。例: |
○ |
newName |
コミュニティに割り当てられる説明的な新しい名前。 |
○ |
次の例では、ユーザーMike
のリクエストによって、変数comm_shared
に関連付けられた既存のコミュニティのコミュニティ名を設定しています。コミュニティ名はRenamed Shared Community
の値に設定されます。また、この例では、操作の結果も表示しています(TRUE
またはFALSE
)。
<loc:setCommunityName name="set_comm_name" type="Boolean" userName="Mike" communityID="comm_shared" newName="Renamed Shared Community" /> <%= set_comm_name.toString() %>
アプリケーションの動作に、JSPタグのみで実現するよりも厳密な制御が必要な場合には、ロケーションJava APIを使用して、JSPファイルやサーブレットなどでアプリケーションを作成できます。
この項では、ロケーションJava APIの使用について説明します。JSPの概念やOracleAS Wireless XMLアプリケーションの作成方法については、このマニュアルの他の章を参照してください。
ジオコーディング・アプリケーションでは、ユーザーに住所を要求し、アプリケーションがその住所をジオコーディングします。このようなアプリケーションの場合は、例15-8のように住所のSimpleForm
オブジェクトの構成から開始できます。
例15-8 SimpleFormオブジェクトの構成
<SimpleResult> <SimpleForm target="EnterAddress2.jsp"> <SimpleFormItem name="businessName" title="Business Name" value="Oracle"/> <SimpleFormItem name="houseNum" title="House Number" value="500"/> <SimpleFormItem name="street" title="Street" value="Oracle Parkway"/> <SimpleFormItem name="city" title="City" value="Redwood City"/> <SimpleFormItem name="state" title="State" value="CA"/> <SimpleFormItem name="postalCode" title="Postal Code" value="94065"/> <SimpleFormItem name="country" title="Country" value="US"/> </SimpleForm> </SimpleResult>
次にアプリケーションが起動すると(ユーザーによる各フィールドへの値の入力後)、例15-9のようにデータにアクセスできます。
例15-9 住所データへのアクセス
String businessName = request.getParameter("businessName"), houseNumber = request.getParameter("houseNum"), streetName = request.getParameter("street"), city = request.getParameter("city"), state = request.getParameter("state"), postalCode = request.getParameter("postalCode"), country = request.getParameter("country");
ジオコーディングの実行には、例15-10のようにコールを使用できます。(例15-10には示されていませんが、別の形式のSpatialManager.createlocation
では、緯度と経度の座標を持つポイントを指定します。この場合、Location
オブジェクトは作成されますが、ジオコーディングは実行されません。)
例15-10 住所のジオコーディング
Location address = SpatialManager.createLocation( businessName, houseNumber, new String[] { streetName }, null, city, state, postalCode, null, country);
結果の緯度と経度の値には、例15-11のようにアクセスできます。
例15-11 ジオコーディングされた住所の値へのアクセス
address.getLongitude() address.getLatitude() address.getAddressLine1() address.getCity() address.getState()
getLongitude
およびgetLatitude
メソッドがPoint
インタフェースから継承されることに注意してください。
ローカルの住所書式にあわせてさらに調整するために、oracle.panama.spatial.intladdress
パッケージに用意されている国際住所書式オプションを使用できます。(国際住所書式の詳細は、15.1.5.1.4項「住所書式(国際)の構成」を参照。)ユーザーが住所を入力する際に必要な手順が1つ増えます。住所を入力するフォームを表示するには、まず国(住所書式)を選択する必要があります。このフォームは選択する国に依存するため、2つの異なるステップを1つにまとめることはできません。
例15-12では、ユーザーが住所書式(US、German、Frenchなど)を選択できるように、ドロップダウンのSimpleFormSelect
要素を作成します。
例15-12 住所書式の選択
<SimpleResult> <SimpleMenu> <% java.util.Iterator it = oracle.panama.spatial.intladdress.IntlAddressManager.getAddressFormats(); while(it.hasNext()) { String name = (String)it.next(); %> <SimpleMenuItem target="enterIntlAddress.jsp?name=<%= name %>"> <%= name %> </SimpleMenuItem> <% } %> </SimpleMenu> </SimpleResult>
次のステップは、指定された住所書式に関連するすべてのアドレス・コンポーネントをリクエストするフォームを提供することです。例15-13のように、コンポーネントは指定された国に基づいて動的に決定されます。
例15-13 指定された国用のアドレス・コンポーネントのリクエスト
<SimpleResult> <SimpleForm target="readIntlAddress.jsp?name=<%= request.getParameter("name") %>"> <% java.util.Iterator addressComponentNames = oracle.panama.spatial.intladdress.IntlAddressManager.getAddressFormat( request.getParameter("name")).getComponentNames(); int num = 1; while(addressComponentNames.hasNext()) { String name = (String)addressComponentNames.next(); %> <SimpleFormItem name="component<%= num++ %>" title="<%= name %>"/> <% } %> </SimpleForm> </SimpleResult>
例15-14は、その結果です。表示されるコンポーネントと行数は、国に依存します。
例15-14 国固有の書式による住所の表示
<SimpleResult> <SimpleText> <% String name = request.getParameter("name"); boolean finished = false; java.util.Vector components = new java.util.Vector(); for(int i = 1; !finished; i++) { String component = request.getParameter("component" + i); if(component != null) components.add(component); else finished = true; } String componentArray[] = new String[components.size()]; for(int i = 0; i < componentArray.length; i++) componentArray[i] = (String)components.get(i); oracle.panama.spatial.intladdress.IntlAddress loc = oracle.panama.spatial.intladdress.IntlAddressManager.createAddress( name, componentArray); java.util.Iterator lines = loc.getAddressLines(false, true); while(lines.hasNext()) { %> <SimpleTextItem> <%= (String)lines.next() %> </SimpleTextItem> <% } %> </SimpleText> </SimpleResult>
アダプタではロケーション・マークを処理できます。例15-15では、ロケーション・マークを配列に取得しています。(この例では、ロケーション・マークに関連のないコードは省略されています。)
ユーザーにより入力された始点住所と終点住所間のルーティング情報を提供するアダプタを作成できます。アダプタでは、次の操作を行う必要があります。
ルーティング設定とオプションを設定します。
ルートを計算します。
計算したルートをユーザーに表示します(経路と経路マップのリストおよび概観マップなど)。
例15-16では、RoutingSettings
オブジェクトを構成し、結果の概観マップと経路マップの解像度(高さと幅)を指定して、ルーティング設定とオプションを設定しています。
例15-16 ルーティング設定とオプションの設定
RoutingSettings rS = new RoutingSettings(true, false); rS.setSecondaryOption(RoutingOption.overviewMapHeight, "600"); rS.setSecondaryOption(RoutingOption.overviewMapWidth, "800"); rS.setSecondaryOption(RoutingOption.maneuverMapHeight, "600"); rS.setSecondaryOption(RoutingOption.maneuverMapWidth, "800");
例15-17では、ルートを計算してRoutingResult
オブジェクトを戻しています。
例15-17 ルートの計算
RoutingResult rR = SpatialManager.getRouter().computeRoute( startLoc, endLoc, null, // via points rS, // routing options Locale.US);
例15-18では、計算したルートをユーザーに表示し、経路と経路マップのリストおよび概観マップを表示します。(この例では、ルーティングAPI固有のコードが太字で示されています。)
例15-18 ユーザーに対するルートの表示
<%! public static String translate(String orig) { return oracle.panama.spatial.XMLEncoder.encodeToSimplifiedXML(orig); } %> <% oracle.panama.spatial.router.RoutingResult rR = ... %> <SimpleResult> <SimpleImage src="<%= translate(rR.getOverviewMapURL()[0].toString()) %>"/> <SimpleText> <% oracle.panama.spatial.router.Maneuver mans[] = rR.getManeuvers(); for(int i = 0; i < mans.length; i++) { %> <SimpleTextItem> <%= mans[i].getNarrative() %> </SimpleTextItem> <% } %> </SimpleText> </SimpleResult>
典型的なマッピング・アプリケーションの場合、ユーザーは住所を入力して地図を表示します。例15-19では、マップする住所のマップ・イメージURLを取得しています。(Location
型の変数loc
には、以前からジオコーディングされている住所が含まれます。)
例15-19 マップ・イメージURLの取得
String url = SpatialManager.getMapper().getMapURL( loc, oracle.panama.imagex.ImageFormats.GIF, 800, // width 600, // height false); // allow turning
例15-19では、一部のモバイル・デバイスの画面にマップが収まるように、APIでイメージの幅と高さを変更できるかどうかを、最後のパラメータで指定しています。この例では、このオプションは使用禁止になっています。
例15-19のように最初のパラメータとして単一のPointオブジェクトを渡すかわりに、Point
オブジェクトの配列、またはLocation
型(住所)かYPBusiness
型のオブジェクトを渡すことができ、これによりPoint
インタフェースが拡張されます。
典型的ビジネス・ディレクトリ(YP)アプリケーションの場合、ユーザーは国、州および都市を指定してリージョンを入力し、ワインのテイスティングやワイナリに関連するなど、なんらかのカテゴリのビジネスを取得します。ユーザーには国、州および都市の入力を要求し、アプリケーションは正しいカテゴリとすべての関連ビジネスを判別する必要があります。
通常、カテゴリを判別する最初のステップは、SimpleForm
オブジェクトを介してユーザーにカテゴリのキーワード(wineなど)を要求することです。
次のステップは、例15-20のように、キーワードと一致するすべてのカテゴリを判別することです。
例15-20 キーワードと一致するカテゴリの検索
YPFinder ypF = SpatialManager.getYPFinder(); YPCategory cats[] = ypF.getCategoryAtRoot().getCategoriesMatchingName(keyword);
例15-21に、選択対象のカテゴリを表示する簡単なユーザー・インタフェースを示します。ドロップダウン・メニューが表示され、ユーザーはそこから検索対象と最も一致しているカテゴリを選択します。
例15-21 カテゴリ選択用のユーザー・インタフェース
<SimpleResult> <SimpleMenu> <% oracle.panama.spatial.yp.YPFinder ypF = oracle.panama.spatial.SpatialManager.getYPFinder(); oracle.panama.spatial.yp.YPCategory cats[] = ypF.getCategoryAtRoot().getCategoriesMatchingName("auto"); for(int i = 0; i < cats.length; i++) { %> <SimpleMenuItem target="listCategories.jsp?cat=<%= cats[i].getFullyQualifiedName() %>"> <%= cats[i].getFullyQualifiedName() %> </SimpleMenuItem> <% } %> </SimpleMenu> </SimpleResult>
アプリケーションにより選択したカテゴリの完全修飾された名前が確認された場合は、例15-22のように適切なカテゴリを取得できます。
例15-22 カテゴリの検索
YPCategory cat = YPCategory.fromFullyQualifiedName(categoryNameString); YPBusiness b[] = SpatialManager.getYPFinder().getBusinessesInCity( cat, country, state, city, Locale.US);
例15-22の場合、ドロップダウン・メニューは一般オブジェクトではなくString
オブジェクトから選択させるため、カテゴリ・オブジェクトからString
オブジェクト、String
オブジェクトから元のカテゴリ・オブジェクトへと変換する必要があります。
トラフィック・サービスAPIに基づくアプリケーションを作成する手順は、次のとおりです。
問合せ用の入力オブジェクト(CityInfo
、RouteInfo
、Point
およびLocation
など)を準備します。
TrafficReporter
を取得して問合せを送ります。
TrafficReport
を取得して情報を処理します。
このセクションのこれ以降では、典型的な操作の例を示します。例15-23では、都市レベルの問合せを実行しています。
例15-23 都市レベルの問合せ
TrafficReporter reporter = SpatialManager.getTrafficReporter(); CityInfo c = new CityInfo("BOSTON", "MA", "US"); TrafficReport report = null; try{ report = reporter.getReportViaCity(c); }catch(LBSException e){ System.out.println(e.getLocalizedMessage()); }
例15-24では、方向を指定せずにルート・レベルの問合せを実行しており、双方向での事象が戻されます。
例15-24 ルート・レベルの問合せ(双方向での事象)
RouteInfo r = new RouteInfo("US 3", null); try{ report = reporter.getReportViaRoute(r,c); }catch(LBSException e){ System.out.println(e.getLocalizedMessage()); }
例15-25では、方向(北)を指定してルート・レベルの問合せを実行しています。
例15-25 方向を指定したルート・レベルの問合せ
try{ report = reporter.getReportViaRoute(r,TrafficReporter.North,c); }catch(LBSException e){ System.out.println(e.getLocalizedMessage()); }
例15-26では、指定した緯度と経度のポイントから半径10マイル以内のエリアについて、ルート・レベルの問合せを実行しています。
例15-26 緯度と経度のポイントと半径を指定したルート・レベルの問合せ
p = SpatialManager.createPoint(-71.0607, 42.3659); try{ report = reporter.getReportViaLocation(p, 10, TrafficReporter.MILES, c); }catch(LBSException e){ System.out.println(e.getLocalizedMessage()); }
例15-27では、指定した住所から半径10マイル以内のエリアについて、ルート・レベルの問合せを実行しています。
例15-27 住所を指定したルート・レベルの問合せ
Location loc = SpatialManager.createLocation(null, null, "839 Kearny Street", null, "San Francisco", "CA", null, null, "US"); try{ report = reporter.getReportViaAddress(loc, 10, TrafficReporter.MILES); }catch(LBSException e){ System.out.println(e.getLocalizedMessage()); }
例15-28では、トラフィック・レポートを処理して有効な情報を取得しています。
例15-28 トラフィック・レポートの処理
Calendar rTime = report.getReportTime(); TrafficIncident[] incidents = report.getIncidents(); if(incidents != null){ for(int i=0; i<incidents.length; i++){ TrafficIncident inc = incidents[i]; String desc = inc.getDescription(); String severity = inc.getSeverity(); String type = inc.getType(); TrafficRoute route = inc.getIncidentRoute(); String[] locations = inc.getLocationRange(); //text description if(locations.length == 2){ //a location range String exit1 = locations[0]; String exit2 = locations[1]; } else if(locations.length == 1){ String exit1 = locations[0]; //one location } Point geoLocation = inc.getIncidentLocation(); //lon/lat or lon/lat+radius Calendar[] tr = inc.getTimeRange(); } }
例15-29では、トラフィック・サポートが提供されている都市のリストを戻します。
例15-29 都市リストの戻り
TrafficCityManager manager = reporter.getCityManager(); CityInfo[] cities = null; try{ cities = manager.getActiveCities(); }catch(LBSException e){ System.out.println(e.getLocalizedMessage()); }
例15-30では、指定した都市(カリフォルニア州サンフランシスコ)でトラフィック・サポートが提供されているルートのリストを戻します。
Oracle Application Serverのロケーション・サービスは、Geocoder
、Mapper
、Router
またはYPFinder
のインタフェースの機能を使用するワイヤレス・アプリケーションによって、Webサービスをサポートします。OracleAS Wireless内で実行するアプリケーションの場合、アプリケーション開発者が特別なコーディングを追加する必要はありません。むしろ、Webサービスは、ジオコーディング、マッピング、ルーティング、ビジネス・ディレクトリ(YP)およびモバイル・ポジショニングをサポートするサービス・プロキシとして統合されています。
外部アプリケーションを開発する場合は、使用する言語がJavaであるかどうかに関係なく、Wirelessに付属する次の種類のファイルを使用してロケーション・ベースのWebサービスにアクセスできます。
WSDLファイル(15.2.3.1項「WSDLファイル」を参照)
XMLファイル(15.2.3.2項「XMLファイル」を参照)
XSDファイル(15.2.3.3項「XSDファイル」を参照)
次のWSDLファイルでは、ジオコーディング、マッピング、ルーティングおよびビジネス・ディレクトリ(イエロー・ページ)サービスのWebサービス・インタフェースを記述します。
LbsSoapServiceGeocoder.wsdl
LbsSoapServiceMapper.wsdl
LbsSoapServiceRouter.wsdl
LbsSoapServiceYPFinder.wsdl
次のXMLファイルには、スキーマ・ファイルに対するXML文書の例が含まれています。
lbsAddress.xml
lbsAddressArray.xml
lbsAddressArray2.xml
lbsBusiness.xml
lbsBusinessArray.xml
lbsCategory.xml
lbsMap.xml
lbsMapURL.xml
lbsMapURLArray2.xml
lbsPhone.xml
lbsPhoneArray.xml
lbsPoint.xml
lbsPointArray.xml
lbsRoute.xml
lbsRouteSettings.xml
次のXSDファイルでは、Webサービス・コールにXMLパラメータおよび戻り値を記述します。
lbsAddress.xsd
lbsAddressArray.xsd
lbsAddressArray2.xsd
lbsBusiness.xsd
lbsBusinessArray.xsd
lbsCategory.xsd
lbsMap.xsd
lbsMapURL.xsd
lbsMapURLArray2.xsd
lbsPhone.xsd
lbsPhoneArray.xsd
lbsPoint.xsd
lbsPointArray.xsd
lbsRoute.xsd
lbsRouteSettings.xsd
モバイル・ポジショニングを、ロケーション・ベースのアプリケーションの個々のユーザーまたはユーザー・グループに使用可能にすることができます。ユーザーのモバイル・ポジショニングとは、そのユーザーのロケーションを特定することです。ユーザーのモバイル・ポジショニングが有効になっている場合、ユーザーの現在のロケーションが自動ポジショニングから動的に取得されるかデフォルト・ロケーション・マークから取得されるかに関係なく、OracleAS Wirelessではそのロケーションを使用してロケーション・ベースのサービスまたはフォルダの可視性を決定します。サービスまたはフォルダをシステム・リージョンまたは定義済のカスタム・リージョンに関連付けると、ロケーション依存(15.5.3項を参照)として定義できます。ロケーション依存サービスまたはフォルダがユーザーのポータルに表示されるのは、そのユーザーの(自動ポジショニングまたはデフォルト・ロケーション・マークからの)現在のロケーションが、関連付けられているリージョン内にある場合のみです。たとえば、ユーザーの現在のロケーションがボストンにある場合は、ボストンのトラフィック情報サービスが表示され、それ以外の場合、そのユーザーにはサービスは表示されません。
モバイル・ポジショニングには、手動と自動の2種類があります。
手動ポジショニングが発生するのは、ユーザーに特定のロケーションを割り当てる場合です。ロケーションとして、ユーザーに入力を要求した住所がジオコーディングされた結果、明示的に指定したロケーション・マークまたはユーザーのデフォルト・ロケーションを割り当てることができます。たとえば、ユーザーの自宅のロケーションをモバイル・ポジショニング用に指定すると、アプリケーションではその自宅エリアに関連する情報とオプションを(ユーザーが実際にいる現在の物理的な位置に関係なく)提供できます。
自動ポジショニング(またはロケーション取得)が発生するのは、モバイル・デバイスのロケーションのポジショニング情報に基づいて、ユーザーのロケーションが自動的に判別される場合です。たとえば、配送トラックのドライバやサービス技術者のロケーションは、それぞれのモバイル・デバイスのロケーションに基づいて定期的に判別され、アプリケーションではユーザーに情報や指示を提供するときに、そのロケーション・データを考慮できます。
自動ポジショニングの場合は、位置の更新頻度とユーザーのプライバシに関連して複数のオプションが用意されています。
この項では、手動ポジショニングと自動ポジショニングの詳細と、各種ポジショニングを使用可能にする方法について説明します。
手動ポジショニングでは、特定のロケーションをアプリケーションのユーザーに関連付けます。ロケーションを明示的に指定する方法(ユーザーが住所またはロケーション・マークを入力するなど)と、そのユーザーのデフォルト・ロケーション・マークを設定する方法があります。ロケーション・マークは、通常は緯度と経度の座標に関連付けられている位置で、名前が付いています。たとえば、アプリケーション・ユーザーがロケーション・マークMyHome
およびMyOffice
(それぞれユーザーの自宅とオフィスのロケーション)を作成し、それぞれにジオコーディングされた住所を関連付けることができます。このユーザーがMyHome
をデフォルト・ロケーション・マークとして指定すると、アプリケーションではユーザーの自宅住所がユーザーのロケーションとみなされます。
ユーザーがジオコーディングされていないデフォルト・ロケーション・マークを設定すると、ジオコーディング操作が実行されてから、ロケーション・マークがデフォルトとして設定されます。ジオコーディング操作に失敗した場合は、そのロケーション・マークをデフォルトとして設定しないことをお薦めします。これは、デフォルト・ロケーション・マークについては、多くの機能(ロケーション依存のサービスの可視性など)がジオコーディングされた情報に依存しているためです。
ロケーション・マークの詳細は、15.1.7項「ロケーション・マーク」を参照してください。
手動ポジショニングをユーザーに使用可能にするには、まず使用するロケーション・マークを設定します。API(LocationMark
クラス)またはPersonalization PortalのWebインタフェースを使用して、1つ以上のロケーション・マークを作成し(存在しない場合)、ロケーション・マークの1つをそのユーザーのデフォルトとして指定します。
注意: 自動ポジショニング(15.3.2項を参照)がオフになっている場合、またはポジショニング・サーバーが一時的に使用不可能になっている場合は、手動ポジショニングが使用され、ユーザーのデフォルト・ロケーション・マークが使用されます。(自動ポジショニングのオンとオフは、OracleAS Wirelessシステム・マネージャを使用して切り替えることができます。) |
Personalization Portalのインタフェースを使用して手動ポジショニングを使用可能にする手順は、次のとおりです。
Personalization PortalのWebインタフェースにログインします。
「ロケーション・マーク」タブをクリックします。
デフォルト・ロケーションにするロケーション・マークが存在しない場合は作成します。(「作成」をクリックし、表示されるページで情報を指定します。)
デフォルト・ロケーションにするロケーション・マークを選択します。
「デフォルトを設定」をクリックします。
自動ポジショニングを使用すると、ユーザーのモバイル・デバイスのロケーション・ベースの位置に基づいて、そのユーザーのロケーションを判別できます。ポジショニングのサービス品質(QoS)値を設定して、ロケーションの更新頻度、つまり潜在的な精度を決定できます。
OracleAS Wireless APIにより、アプリケーションでは現行のセッションを介して、モバイル・ユーザーの現行のロケーションにアクセスできます(oracle.panama.rt.Session
インタフェースのgetCurrentLocation()
を参照)。システムで自動ポジショニングがオンになっている場合は、モバイル・ポジショニング・システムからユーザーの現在の物理的位置が戻されます。自動ポジショニングがオフになっている場合、またはポジショニング・サーバーが一時的に使用不可能になっている場合は、そのユーザーのデフォルト・ロケーション・マークが戻されます。
プライバシとプライバシ関連情報のセキュリティは、ロケーション取得システムでは重要な問題です。OracleAS Wirelessのロケーション・サービスにはプライバシ管理コンポーネントが用意されており、ユーザーは自分のプライバシ設定の表示や編集、ポジショニング操作の有効化や無効化をできる他、1人以上の他ユーザー(モバイル・コミュニティ)に一定の時間枠内でのポジショニング情報の取得を許可できます。また、アプリケーション開発者はこれらの機能に公開APIを介してアクセスできます。
自動ポジショニングは、図15-4に示すモバイル・ポジショニング・フレームワークにより制御されます。
図15-4では、次の事項を表しています。
アプリケーション開発者は、モバイル・ポジショニングAPIとプライバシAPIを併用してサービスを提供できます。
アプリケーションのモバイル・ポジショニングAPIは、ロケーション・キャッシュ(15.3.2.2項を参照)およびロケーション取得レイヤーと通信し、ユーザーのロケーションを確認します。キャッシュが使用されるかどうかは、15.3.2.3項で説明するポジショニングのサービス品質(QoS)値の影響を受けます。
ロケーション取得レイヤーは、実際の現在位置をロケーション・キャッシュとモバイル・ポジショニングAPIに渡します。
プライバシ管理の論理は、モバイル・ポジショニング・フレームワークのうちプライバシに関連する側面を制御します。以降の各項を参照してください。
モバイル・デバイスは、全地球測位システム(GPS)を介して提供されるそのモバイル・デバイスの現在のロケーションを、OracleAS Wirelessサーバーに送信できます。送信された現在のロケーションには、モバイル・ポジショニングAPIとプライバシAPIを使用して問い合せできます。
モバイル・デバイス上で動作し、デバイスの現在のロケーションをOracleAS Wirelessサーバーに送信するクライアント・アプリケーション・プログラムを作成する必要があります。データは、OracleAS Wirelessサーバー上で動作するJSPに対して、またはWebサービスを介して送信できます。
データはXMLフォーマットで、次のスキーマに準拠している必要があります。
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified"> <xsd:element name="MP_GPS"> <xsd:complexType> <xsd:sequence> <xsd:element ref="USERNAME"/> <xsd:element ref="PASSWORD"/> <xsd:element ref="MSID"/> <xsd:element ref="TIME" minOccurs="0"/> <xsd:element ref="GMT" minOccurs="0"/> <xsd:element ref="POS"/> <xsd:element ref="ALTITUDE" minOccurs="0"/> <xsd:element ref="ALT_UNCERTAINTY" minOccurs="0"/> <xsd:element ref="VELOCITY" minOccurs="0"/> <xsd:element ref="BEARING" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ALTITUDE" type="xsd:string"/> <xsd:element name="ALT_UNCERTAINTY" type="xsd:string"/> <xsd:element name="BEARING" type="xsd:string"/> <xsd:element name="GMT" type="xsd:string"/> <xsd:element name="LAT" type="xsd:string"/> <xsd:element name="LONG" type="xsd:string"/> <xsd:element name="MSID" type="xsd:string"/> <xsd:element name="PASSWORD" type="xsd:string"/> <xsd:element name="POS"> <xsd:complexType> <xsd:sequence> <xsd:element ref="LAT"/> <xsd:element ref="LONG"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="TIME" type="xsd:string"/> <xsd:element name="USERNAME" type="xsd:string"/> <xsd:element name="VELOCITY" type="xsd:string"/> </xsd:schema>
<USERNAME>
要素および<PASSWORD>
要素は、リクエストを許可するためにOracleAS Wirelessサーバーで使用されます。
<MSID>
要素は、モバイル・デバイスまたはユーザーのモバイル・ステーションIDです。
オプションの<TIME>
要素は、このロケーションがGPSで生成された時刻を示します。この値が不明な場合は、OracleAS Wirelessサーバーがデータを受信した時間が使用されます。
オプションの<VELOCITY>
要素では、モバイル・デバイスの速度(m/秒)が指定されます。
オプションの<BEARING>
要素では、北からの時計回りで方位角(緯度)が指定されます。
オプションの<ALTITUDE>
要素では、モバイル・デバイスの海抜高度(m)が指定されます。
ロケーション・キャッシュはメモリー内の領域であり、ここにはモバイル・ユーザーのID、最後に取得されたロケーション情報および情報の収集時刻が一時的に格納されます。ロケーション・キャッシュ内でモバイル・ポジショニング・リクエストが検索され、ロケーションをリクエストされたユーザーのエントリがキャッシュ内にある場合は、キャッシュ・エントリの時刻と現在のリクエスト時刻の差が、ポジショニング・リクエストのポジショニングのサービス品質レベルと比較されます。(ポジショニングのサービス品質については、15.3.2.3項を参照。)
ポジショニング・リクエストがキャッシュ内の情報により満たされる場合、位置の検出、つまりネットワークのラウンドトリップ操作は不要です。
ポジショニングのサービス品質(QoS)値により、次のことが制御されます。
ロケーションを判別するためにデバイスの現在の位置とロケーション・キャッシュのどちらをチェックするか。
ロケーション・キャッシュを調べる場合にアプリケーションで使用する、最後にキャッシュされたロケーション値の最大経過時間(つまり、値がロケーション・キャッシュに書き込まれてからの秒数)。
ポジショニングのサービス品質を指定するには、次の2つの方法があります。
アプリケーションで使用するロケーション・キャッシュ内の位置の最大経過秒数として指定します。ロケーション・キャッシュ内の最新の位置が指定した時刻よりも古い場合は、デバイスの実際の現在位置が取得されてキャッシュに書き込まれ、アプリケーションで使用されます。値0を指定すると、ポジショニング・フレームワークでは常に実際のポジショニング結果が示され、ロケーション・キャッシュは検索されません。
次の文字列値の1つとして指定します。それぞれの値は、ポジショニングの品質レベルを表します。
Exact: ポジショニング・フレームワークでは、常に実際のポジショニング結果が示され、ロケーション・キャッシュは検索されません。0秒を指定した場合と同等です。
High: 高水準の精度を表します。
Medium: 中程度の精度を表します。
Low: Medium値より低水準の精度を表します。
High、MediumおよびLow値の場合、ポジショニング・フレームワークでは経験則により経過期間の値(秒数)が判断されます。
ポジショニングのサービス品質レベルにはシステム・デフォルトがあり、ユーザーが設定できます。ポジショニングのサービス品質レベルがポジショニング・リクエストで指定されていない場合は、システム・デフォルトが使用されます。レベルは、モバイル・ポジショニングAPI(15.3.2.8項「モバイル・ポジショニングAPI」を参照)またはシステム・マネージャを使用して設定できます。
ポジショニングのサービス品質レベルを選択するときのトレードオフは、精度とアプリケーションのパフォーマンスです。値として0秒またはExactを指定すると実際の現在位置が取得されることが保証されますが、実際の位置を取得するには、モバイルのポジショニング・リクエストごとにネットワーク上でサービス・プロバイダへのラウンドトリップが必要です。この種のラウンドトリップ操作により、特に多数のユーザーに関するポジショニング・リクエストや同一ユーザーに関する多数のポジショニング・リクエストがある場合には、アプリケーションが低速になる可能性があります。アプリケーションで常に実際の位置を知る必要がある場合にのみ、値として0秒またはExactを使用してください。値Lowを使用すると、戻されるロケーションの精度は(ユーザーが移動しない場合を除き)最も低くなりますが、ロケーションがキャッシュから取得される確率が高くなり、ネットワークのラウンドトリップ操作が不要になります。ユーザーの移動距離が小さい場合や、ゆっくり移動している場合、または現在の実際のロケーションを知ることが重要ではない場合は、値Lowを使用するのが最も適切となることがあります。
自動モバイル・ロケーションは、Positioner.requestPosition
ファンクションのコールによって問い合せられます(Positioner
はoracle.panama.mp
パッケージ内のクラスです)。Positioner
オブジェクトは、1つ以上のモバイル・ポジショニング・プロバイダに基づいています。他のロケーション・サービス・プロバイダと同様に、モバイル・ポジショニングを構成するには、名前、バージョン、URL、ユーザー名およびパスワードなどの情報を指定します。
ただし、他のロケーション・サービスとは異なり、モバイル・ポジショニング・サービスの場合は、ポジショニングを処理できるプロバイダが特定の1つのみである可能性があります。他のロケーション・ベースのサービスの場合、このようなことはまずありません。たとえば、カリフォルニアのマップをリクエストすると、複数のマッピング・プロバイダがそのマップを提供できます。ただし、特定の電話番号(+4412345678など)のモバイル位置をリクエストした場合は、その位置を提供できるプロバイダが1つのみである可能性が高くなります。一般に、モバイルID(通常は電話番号)では、ワイヤレスの電話会社が識別されるため、1つ以上のモバイル・ポジショニング・プロバイダも判別されます。したがって、アプリケーション開発者は、特定のモバイル・ポジショニング・プロバイダに基づいて位置を取得できるようにする必要があります。
アプリケーションの様々なニーズを満たすために、MPManager
クラスには複数のgetPositioner
シグネチャが用意されています。
getPositioner()
getPositioner(MPProvider provider)
getPositioner(MPProvider[] providers)
インターネット・ポータルに様々な電話会社からのサブスクライバがいて、各サブスクライバは使用するプロバイダを実行時にモバイルIDに基づいて動的に決定する必要がある場合があります。このニーズは、モバイル・ポジショニング・プロバイダのセレクタ・フック(oracle.panama.mp.MPProviderSelector
インタフェースを介して実装)によりサポートされます。
プロバイダ・セレクタ・フックはモバイルIDを取り、ポジショニング・リクエストを処理できるMPProvider
オブジェクトの配列を戻します。デフォルトのプロバイダ・セレクタ・フックはoracle.panama.mp.core.ProviderSelectorImpl
により提供され、システム内のすべてのプロバイダを戻します。これは、ポジショニング・フレームワークではデフォルトでプロバイダが選択されないことを意味します。セレクタ・フックは、Positionerによりpositioner.requestPosition
のコール時に使用され、getPositioner()
のシグネチャに適用できます。Positionerのコール時にすでにプロバイダが指定されている場合は、セレクタ・フックは使用されません。
OracleAS Wireless APIにより、アプリケーションでは、現行のセッション(Session.getCurrentLocation()
)を介してモバイル・ユーザーの現行のロケーションにアクセスできます。デフォルトでは、ユーザーのモバイルID(ユーザーのプロファイルに格納)を使用して、モバイル・ポジショニングAPIがコールされ、現在位置が取得されます。ただし、高度なユーザーがポジショニングに異なる値を使用する必要がある場合は、oracle.panama.rt.hook.MobileIDHook
インタフェースを実装して、独自のモバイルIDフックを記述できます。モバイルIDフックは、現行ユーザーの情報を取り、ポジショニング用にそのユーザーのモバイルIDを戻します。自動ポジショニングに失敗すると、システムは現在のロケーションとしてユーザーのデフォルト・ロケーション・マークにフェイルオーバーします。
プロバイダ・セレクタ・フックまたはモバイルIDフックを実装する必要はないことに注意してください。デフォルト設定がニーズを満たしている場合は、単にモバイル・ポジショニング・プロバイダを構成し、MPManager.getPositioner().requestPosition()
をコールできます。
次にまとめを示します。
Positioner
は、システム内で構成されているすべてのモバイル・ポジショニング・プロバイダに基づいてシステム・デフォルトを使用するか、1つ以上の特定のプロバイダのみに基づいてカスタマイズできます。
システム・デフォルトを使用すると、プロバイダ・セレクタ・フックはシステム・デフォルトPositionerを選択する場合にのみ使用されます。セレクタ・フックはモバイルIDを取り、処理できるプロバイダ(1つ以上)を決定します。バッチ問合せの場合は、バッチ内の最初のモバイルIDにより、選択されるプロバイダが決定されます。
Positionerが複数のプロバイダに基づいており、プロバイダがリクエストを処理できない場合は、フェイルオーバーが提供されます。
プログラムでは、PositionResult
を使用する前に、そのエラー・コードが0(ゼロ)以外であるかどうかをチェックする必要があります。
例15-31では、システム・デフォルト・プロバイダとデフォルトのポジショニング・サービスの品質を使用して、ユーザーの位置を取得しています。
例15-31 システム・デフォルト・プロバイダとデフォルトのQoSを使用した位置の取得
Positioner positioner = MPManager.getPositioner(); PositionResult res = positioner.requestPosition("46708123456790"); Date timeStamp = res.getTimeStamp(); double lon = res.getPositionAreas()[0].getCenterPointLongitude(); double lat = res.getPositionAreas()[0].getCenterPointLatitude();
例15-32に、ユーザーの位置を指定してポジショニングのサービス品質レベルを指定する2つの例を示します。最初の例では品質を文字列でHIGHと指定し、2番目の例では品質を秒数で指定しています。(ポジショニングのサービス品質を指定する方法は、15.3.2.3項を参照してください。)
例15-32 位置の指定によるQoSの取得
PositionResult res = positioner.requestPosition("46708123456790", ServiceQoS.HIGH_QUAL); PositionResult res = positioner.requestPosition("46708123456790", new ServiceQos(120));
例15-33では、特定のプロバイダの配列に基づいてユーザーの位置を取得しています。
デフォルトでは、ユーザーのロケーション情報にアクセスできるのは、そのユーザーのみです。ユーザーには、他のユーザーのロケーション情報にアクセスする権利は付与されていません。自分のロケーション情報へのアクセスを他のユーザーに許可する必要がある場合は、そのユーザーにポジショニング権を付与する必要があります。ポジショニング権を付与するユーザーは、後で付与した権利を取り消すことができます。
また、ポジショニング権は、特定の期間または定期的な間隔で付与することもできます。多くの場合、ユーザーは、自分のロケーション情報に対するアクセス権を他のユーザーに付与する期間を制限する必要があります。たとえば、この権利を同僚にウィークデイの午前9:00から午後5:00までは付与し、夜間や週末には付与しない必要があるとします。ユーザーは、この種の時間制限を次のように指定できます。
付与する権利の開始日と終了日
1日の開始時刻と終了時刻
除外: 開始日から終了日までのうち、土曜と日曜など、ポジショニング権から除外する日
モバイル・コミュニティとは、ポジショニング権の付与または拒否の対象にできる1人以上のユーザーのコレクションです。モバイル・ユーザーを1つ以上のコミュニティに割り当てて、ユーザーがコミュニティにポジショニング権を付与したり拒否できます。ユーザーはPersonalization Portalを介してコミュニティ情報を表示および管理でき、アプリケーション開発者はこれらの機能に公開APIを介してアクセスできます。
モバイル・コミュニティの概念は、多くのアプリケーション・シナリオで役に立ちます。たとえば、プロジェクト・チームはプロジェクト・コミュニティを作成できます。チームのメンバーは、自分のロケーション情報へのアクセス権を他のメンバーに個別に付与するかわりに、プロジェクト・コミュニティに付与できます。たとえば、フィールド・サービス管理者は、モバイル・ポジショニングとロケーション・ベースのアラートを使用して、サービス担当が付近にいる時期を知り、その担当に連絡してステータスを更新したり、ローカルな問題に対応させることができます。
可視性の概念は、コミュニティとそのメンバーに適用されます。可視性とは、システム・ユーザーがコミュニティまたはメンバーの存在を表示して、なんらかの関連情報を取得できることを指します。可視性は、そのユーザーに管理権限があるかどうか、該当するコミュニティのメンバーであるかどうかなど、リクエスト側ユーザーとコミュニティまたはメンバーとの関係により異なります。可視性は、プライバシAPIのコールを使用して実装されます。詳細は、15.3.2.9項「プライバシAPI」を参照してください。
ユーザーがコミュニティまたはそのメンバーに関する情報を表示するために行うリクエストの場合は、次の可視性条件が可能です。
リクエスト側ユーザーは、コミュニティとそのメンバーを参照できます。
リクエスト側ユーザーは、コミュニティを参照できますが、そのメンバーを参照できません。たとえば、コミュニティは、その有無をすべてのシステム・ユーザーが参照できるように設定されていても、コミュニティ・メンバーに関する情報を使用できるのは管理者のみです。
リクエスト側ユーザーはコミュニティを参照できないため、そのメンバーも参照できません。
可視性に対する様々なユーザー要件に対応するために、各種のコミュニティがサポートされています。コミュニティの作成時には、次のコミュニティ・タイプを指定できます。
プライベート: プライベート・コミュニティを参照できるのはコミュニティの作成者のみで、完全に制御できるのは作成者のみです。コミュニティのメンバーなど、他のユーザーがプライベート・コミュニティの表示や操作を行うことはできません。
共有: 共有コミュニティは、すべてのコミュニティ・メンバーが参照できますが、システムの他のユーザーは参照できません。コミュニティ・メンバーは、他のすべてのコミュニティ・メンバーを参照できます。コミュニティ・メンバーは自分自身をコミュニティから削除できます。
メンバーの可視性を伴うパブリック: メンバーの可視性を伴うパブリック・コミュニティは、システムのすべてのユーザーが参照できます。システムのすべてのユーザーは、自分自身をコミュニティに追加したり、コミュニティから削除できます。
パブリック・メンバーが可視性を制御: メンバーが可視性を制御するパブリック・コミュニティは、システムのすべてのユーザーが参照できます。ただし、各メンバーは自分を他のユーザーに参照させるかどうかを制御できます。
システム: システム・コミュニティはシステムのすべてのユーザーが参照できますが、メンバーを参照できるのは管理者権限を持つユーザーのみです。管理者権限を持っていないユーザーは、自分自身をシステム・コミュニティから削除できません。
コミュニティの作成と初期メンバーの追加
コミュニティの削除
ユーザーが参照できるすべてのコミュニティのリストの表示
ユーザーが参照できるすべてのコミュニティ・メンバーの表示
コミュニティへのユーザーの追加(コミュニティ作成者の場合)
コミュニティからのユーザーの削除(コミュニティ作成者、または自分自身を共有コミュニティから削除する場合は、すべてのコミュニティ・メンバー)
初期のデフォルトのプライバシ設定では、システムにはユーザーをポジショニングする権利がなく、ユーザーの位置をロケーション・キャッシュに一時的に格納して、そのユーザーのロケーション情報をキャッシュ・ログに書き込みます。ただし、管理者はOracleAS Wirelessシステム・マネージャで次のプライバシ・ディレクティブのいずれかを使用して、プライバシのシステム・デフォルト・レベルを変更できます。また、ユーザーは、Personalization Portalを介して各自のプライバシ・レベルを制御できます。ここでは、プライバシ・ディレクティブは、適用されるプライバシを降順でリストしています。
Disable Positioning and Caching: ユーザーのポジショニングは許可されません。システムにはユーザーをポジショニングする権利がなく、ユーザーのロケーションにはアクセスできません。この設定は、最も厳しいプライバシを提供します。
Enable Positioning、Disable Caching: ユーザーのロケーション情報はキャッシュされません。システムにはユーザーをポジショニングする権利がありますが、そのユーザーのロケーション情報をロケーション・キャッシュに格納できません。この場合、ユーザーのロケーションは、常にポジショニング・サービス・プロバイダに直接アクセスすることで取得されます。
たとえば、このディレクティブを使用すると、モバイル・ユーザーの移動を追跡できず、ユーザーのオフィスまたはサービス・プロバイダが提供するロケーションとして、任意の時点における位置がレポートされる可能性があります。
No Log: ユーザーのロケーション情報はロケーション・キャッシュに格納されますが、キャッシュ・ログには書き込まれません。このユーザーのキャッシュ項目は、キャッシュから元に戻されてもログに書き込まれず、単に破棄されます。
たとえば、No Logディレクティブを使用すると、モバイル・ユーザーの現在位置は使用可能になりますが、以前の位置はロケーション・キャッシュから破棄されていると使用できない可能性があります。
Enable Positioning and Caching: システムには、ユーザーのロケーション情報を取得してキャッシュする権利があります。
モバイル・デバイスのポジショニングは、Positioner
クラス内の対応するrequestPosition
ファンクションをコールすることで実行されます。このAPIにより、アプリケーション開発者はポジショニングのサービス品質(QoS)レベルを指定できます(これらのレベルについては、15.3.2.3項を参照。)
アプリケーションの開発者は、ロケーション・サービスのプライバシAPIを介してプライバシ機能を管理できます。この項では、プライバシAPIの例を使用して説明します。
LocationPrivacyManager
クラスは、ポジショニング権の付与、取消し、有効化と無効化、システムのプライバシ・オプションの設定と取得など、ロケーションのプライバシに関連する操作をすべて処理し、ユーザーに他のユーザーをポジショニングする権利があるかどうかをチェックします。また、このクラスは、LocationPrivacyAuth
オブジェクトを取り出す手段を提供します。このオブジェクトには、プライバシ認可項目に関する情報が格納されます。
ユーザーは、grantAuthorization
を使用して他のユーザーまたはモバイル・コミュニティに認可を付与できます。disableAuthorization
を使用すると、認可を一時的に無効化できます。enableAuthorization
を使用すると、無効化した認可をリカバリできます。付与した権利は、revokeAuthorization
を使用して永続的に取り消すことができます。checkAuthorization
を使用すると、特定の時刻にユーザーが他のユーザーをポジショニングする権利を持っているかどうかをチェックできます。
すべてのプライバシ認可操作はアプリケーション固有であり、その操作が実行されるアプリケーションにのみ影響します。
CommunityManagerクラスは、コミュニティの作成と削除、コミュニティ情報の取出しなど、コミュニティ関連の操作を処理します。単一のコミュニティに固有のコミュニティ操作は、Community
インタフェースで定義します。
LocationPrivacyAuth
インタフェースは、認可期間、認可が発生するサービス、権利を付与するユーザー、権利を受け取るユーザーなど、ロケーション認可項目に固有の情報を取り出すメソッドを提供します。
Community
インタフェースは、コミュニティ・オブジェクトに関する情報の取出し、コミュニティのメンバーの追加と削除およびコミュニティ属性の設定を行うメソッドを提供します。
AuthPeriod
クラスは、ユーザーが他のユーザーにポジショニング権を付与するときに使用される時間の範囲をメンテナンスします。認可期間は、開始日、終了日、開始時刻、終了時刻および除外で構成されます。また、このクラスは、クラスが表す時間の範囲に特定の時刻が含まれるかどうかをチェックするためのメソッドを提供します。
LocationPrivacyException
クラスは、PanamaException
のサブクラスです。このクラスは、ロケーションのプライバシ固有の例外を表します。
この項では、ロケーション・サービスのプライバシAPIの例を示します。それぞれの例は、iAS-wireless-home¥sample¥sampleadapter¥mp¥privacy
ディレクトリにあるサンプル・アダプタSampleCommunityManager.javaおよびSampleFriendFinder.javaから抜粋したものです。この2つのサンプル・アダプタは、プライバシAPIの主機能の例です。
例15-34では、指定したタイプのうち、ユーザーが参照できるすべてのコミュニティをリストしています。
例15-34 指定したタイプのうちユーザーが参照できるコミュニティのリスト
CommunityManager commMan = CommunityManager.getInstance(); ... try{ ResultSetEnumeration comms = commMan.getVisibleCommunities(user,type); while (comms.hasNextElement()){ sfo = XML.makeElement(sfs,"SimpleFormOption"); oracle.panama.model.Community comm = (oracle.panama.model.Community)(comms.next()); sfo.setAttribute("value",String.valueOf(comm.getId())); txt = XML.makeText(sfo,comm.getCreator().getName()+":"+ comm.getName() ); sfo.appendChild(txt); sfs.appendChild(sfo); } }catch(Exception e){ throw new AdapterException(e); }
例15-35では、ユーザー入力に基づいてユーザーまたはコミュニティにポジショニング権を付与しています。
例15-35 ユーザーまたはコミュニティへのポジショニング権の付与
CommunityManager commMan = CommunityManager.getInstance(); LocationPrivacyManager priMan = LocationPrivacyManager.getInstance(); ... SimpleDateFormat ddf = new SimpleDateFormat("MM/dd/yyyy"); SimpleDateFormat tdf = new SimpleDateFormat("HH:mm"); Calendar startD,endD,startT,endT=null; try{ startD = Calendar.getInstance(); startD.setTime(ddf.parse(sdate)); endD = Calendar.getInstance(); endD.setTime(ddf.parse(edate)); startT = Calendar.getInstance(); startT.setTime(tdf.parse(stime)); endT = Calendar.getInstance(); endT.setTime(tdf.parse(etime)); }catch(ParseException e){ showError(result,sr,"Illegal Date Format","&grantmenu=y"); return; } StringTokenizer st = new StringTokenizer(excl,","); String exclDate = null; byte exclusions=0; while (st.hasMoreTokens()) { exclDate=st.nextToken(); if ("Mon".equals(exclDate)) exclusions =(byte)(exclusions|AuthPeriod.MONDAY); else if ("Tue".equals(exclDate)) exclusions =(byte)(exclusions | AuthPeriod.TUESDAY); else if ("Wed".equals(exclDate)) exclusions =(byte)(exclusions | AuthPeriod.WEDNESDAY); else if ("Thu".equals(exclDate)) exclusions =(byte)(exclusions | AuthPeriod.THURSDAY); else if ("Fri".equals(exclDate)) exclusions =(byte)(exclusions | AuthPeriod.FRIDAY); else if ("Sat".equals(exclDate)) exclusions =(byte)(exclusions | AuthPeriod.SATURDAY); else if ("Sun".equals(exclDate)) exclusions =(byte)(exclusions | AuthPeriod.SUNDAY); else { showError(result,sr,"Illegal Exclusions.", "&grantmenu=y"); return; } } AuthPeriod period = new AuthPeriod(startD,endD, startT,endT, exclusions); oracle.panama.model.Community commObj = null; User posUserObj = null; try{ if (community!=null && !community.equals("")){ commObj = commMan.getCommunity(Long.parseLong(community)); priMan.grantAuthorization(service,owner,commObj,period); } else{ posUserObj = services.lookupUser(positionUser); priMan.grantAuthorization(service,owner,posUserObj,period); } }catch(PanamaException e){ throw new AdapterException(e); }
ロケーション・イベント・サーバーは、ロケーション・ベースの条件が発生すると、イベントを生成します。イベントの結果として、ロケーション・ベースのアラートが、モバイル・ユーザーの現行のロケーションに基づいて配信されます。
ワイヤレス・アラート・エンジンを使用すると、ユーザーはロケーション・ベースのアラート・サービスをサブスクライブし、ロケーション・ベースの条件を指定できます。ロケーション・ベースの条件が満たされると、アラート・エンジンはロケーション・イベントを受信します。アラートを配信するための他のすべての条件も満たされた場合、アラート・エンジンはサブスクライバにアラートを送信します。次に、ロケーション・ベースのアラートをモバイル・ユーザーに提供できる典型的な使用例を示します。
空港に到着した旅行者が、乗ろうとするリムジン・バスが空港から1マイル以内にある場合にアラートを受信します。
プロジェクト・チームの一員が、チームの他のメンバー全員が本社にいる場合にアラートを受信します。
フィールド・サービス・コーディネータが、新規のサービス・リクエストを受け、それを処理できるエンジニアがサービス・センターから2マイル以内にいる場合にアラートを受信します。
気象情報の利用者が、予報が雪で、姉が家にいない場合にアラートを受信します(彼の姉は旅行が多く、不在時の植物の世話を彼が頼まれているため)。
潜在的には、より複雑な使用例が考えられます。たとえば、ロケーション関連の条件とロケーションには直接関連しない条件の組合せです。
ロケーション・ベースのアラートとは、ロケーション・ベースの条件のあるアラート・サービスです。
ロケーション・ベースの条件とは、条件有効期限と条件評価モードのような、ロケーション・ベースのアラート基準と関連情報のセットです。この条件が満たされるのは、条件にあるすべての基準が満たされた場合のみです。
ロケーション・ベースのアラート基準とは、ロケーション・ベースの条件の構成要素です。各基準には、ターゲット、リージョンおよびタイプの3つの要素があります。ターゲットは、ユーザー、コミュニティまたはモバイル・デバイスです。リージョンは、システム定義ロケーションまたはユーザー定義ロケーションです。タイプは、リージョンに関するターゲットの位置を示すIN
またはOUT
にする必要があります。ロケーション・ベースのアラート基準の例は、次のとおりです。
チームのすべてのメンバーがシカゴにいる。
スミス氏はニューヨーク州以外の場所にいる。
ロケーション・イベント・サーバーとは、ポジショニング・サービス・プロバイダからのロケーション関連情報の取出し、ロケーション・ベースの条件の評価、条件が満たされた場合のイベントの生成を行うスタンドアロン・プロセスです。ロケーション・イベント・サーバーは、スケジューリングを行うためにモバイル・ポジショニング・コンポーネントおよびリージョン・モデル・コンポーネントと連携します。つまり、条件評価結果が定期的に更新され、条件が満たされた場合は、条件を生成したクライアントにロケーション・イベントが送信されます。
ロケーション・イベント・クライアントとは、ロケーション・ベースの条件を指定し、ロケーション関連情報をレポートするワイヤレス・アプリケーションまたはシステム・コンポーネントです。各ロケーション・イベント・クライアントには、サーバーとクライアントの間の双方向通信を処理するロケーション・イベント・エージェントがあります。ロケーション・イベント・エージェントは、クライアント・インスタンスで作成されたロケーション・ベースの条件を取得し、その条件をサーバー側に登録します。エージェントは、サーバーからロケーション・イベントを受信し、ロケーション・イベント・ハンドラを起動してそのイベントを処理します。また、指定したロケーション条件の評価結果に対するリクエストであるプル問合せをサポートします。
ロケーション・イベントは、条件を生成したクライアントや、1つ以上の他のクライアント、またはその任意の組合せに送信できます。条件がアクティブ化されたとき、アプリケーションではロケーション・イベントを受信する受信者を決定できます。
複数のロケーション・イベント・サーバーおよびロケーション・イベント・クライアントを構成して使用できます。
ロケーション・イベント・クライアントを実装するために、次のJavaクラスが用意されています。
ロケーション・ベースの条件(LBCondition
クラス。15.4.3項「ロケーション・ベースの条件オブジェクト(LBCondition)」を参照。)
ロケーション・イベント・エージェント(LBEventAgent
クラス。15.4.4項「ロケーション・イベント・エージェント・オブジェクト(LBEventAgent)」を参照。)
ロケーション・イベント・ハンドラ(LBEventHandler
クラス。15.4.5項「ロケーション・イベント・ハンドラ・オブジェクト(LBEventHandler)」を参照。)
例15-36では、ロケーション・イベント・エージェントを作成し、ロケーション・ベースの条件をアクティブ化しています。その結果、通学している学校に関連付けられた地域の外に子供が出ると、その両親にアラートが送信されます。別のロケーション・イベント・エージェント(anotherAgent
)では、条件が満たされると生成されるイベントをサーバーから受信します。
例15-36 ロケーション・イベント・エージェント
try{ LBEventAgent alertAgent = factory.createLBEventAgent("alertAgent",true); LBEventHandler handler = new ALBEventHandlerImpl(); alertAgent.registerLBEventHandler(handler); User parent = factory.createUser(USERNAMEPARENT); User child = factory.createUser(USERNAMECHILD); LocationPrivacyDomain privacyDomain = new LocationPrivacyDomain(); LBCondition condition = factory.createLBCondition(LBCondition.MODE_ONCE, null, parent, privacyDomain); condition.addCriteria(String.valueOf(child.getId()), LBCondition.TARGETTYPE_USER,LBCondition.TYPE_OUT,SCHOOL_REGION_ID); alertAgent.activateCondition(condition,null,null,"anotherAgent",false); }catch(LBEventException e){ ...... }
ロケーション・ベースの条件(LBCondition
)オブジェクトは、ロケーション・ベースの条件を表します。典型的なアラート条件は複数の基準で構成され、それぞれターゲット、基準のタイプ(IN
またはOUT
)およびリージョン(システム・リージョン、カスタム・リージョン、またはユーザー定義リージョン)を定義します。指定した基準間の関係はAND
であり、すべての基準が満たされた場合のみ条件が満たされます。
LBCondition
オブジェクトは、条件有効期限および条件評価モードも指定します。条件有効期限は、条件が無効になる時期を示します。条件評価モードは、次のいずれかにする必要があります。
1回のみ評価。最初に条件が満たされると、その条件は再度評価されず、条件ステータスは非アクティブになります。
有効期限まで評価。条件が満たされると、ロケーション・イベントはロケーション・イベント・クライアントに送信されます。条件は、すでに満たされているかどうか、または満たされる回数に関係なく、有効期限までアクティブのままです。条件が満たされ、次には満たされず、再び満たされた場合は、新規のイベントがユーザーに送信されます。(たとえば、条件が「ユーザーSmithはBostonにいる」で、SmithがBostonに入り、Bostonを出て、再びBostonに入った場合、イベントはSmithがBostonに入るたびに送信されます。)
ロケーション・イベント・エージェント(LBEventAgent
)・オブジェクトは、ロケーション・イベント・クライアントにかわってロケーション・イベント・サーバーと通信します。ロケーション・イベント・エージェント・オブジェクトは、次の操作を実行します。
ロケーション・ベースの条件をアクティブ化します。
ロケーション・ベースの特定の条件が満たされているかどうかに関する問合せをサポートします。
ロケーション・イベント・クライアントでロケーション・イベント・ハンドラを登録してスレッドを開始し、ロケーション・イベントをリスニングできるようにします。ロケーション・イベントを受信すると、ロケーション・イベント・ハンドラが起動してイベントを処理します。
サーバーからのロケーション・ベースの条件を解除します。
各ロケーション・イベント・エージェントには名前およびメッセージ・チャネルがあります。ロケーション・イベント・クライアントで各ロケーション・イベント・エージェントを作成するとき、他のエージェントがその新規のエージェントと同じ名前を共有できるかどうかを指定できます。同じ名前のロケーション・イベント・エージェントは同じメッセージ・チャネルを共有します。つまり、そのメッセージ・チャネルに送信されたロケーション・イベントは、同じ名前のロケーション・イベント・エージェント間に分散されます。
ロケーション・ベースの条件がアクティブ化されると、条件の情報がロケーション・イベント・サーバーに送信され、サーバーは条件の評価を開始します。evaluationMode
パラメータがactivateCondition
メソッドに渡された場合、そのパラメータの値はLBCondition
オブジェクトで定義された評価モードより優先されます。RecipientAgent
パラメータがactivateCondition
メソッドに渡された場合、そのパラメータによって受信者エージェントの名前が指定されます。つまり、条件は1つのエージェントで作成でき、その条件が満たされる場合、イベントは別のエージェントに送信できます。
ロケーション・イベント・エージェントのisSatisfied
メソッドは、特定の条件が満たされているかどうかをチェックします。条件がアクティブでない場合は、isSatisfied
メソッドによって条件評価が開始され、これには少し時間(条件の複雑さに応じて、数秒から数分)がかかる場合があります。checkStatusNoWait
メソッドも、特定の条件が満たされているかどうかをチェックしますが、条件がアクティブでない場合、条件評価はアクティブ化されません。
ロケーション・イベント・ハンドラ(LBEventHandler
)・オブジェクトは、公開インタフェースです。アプリケーション開発者は、ハンドラのインタフェースを実装し、ロケーション・イベント・エージェントに登録します。実装はスレッド・セーフにする必要があります。ロケーション・イベント・ハンドラは、ロケーション・イベントの処理を行います。
ロケーション・イベント・エージェントがロケーション・イベントを受信すると、そのエージェントに登録されているロケーション・イベント・ハンドラのhandleLocationEvent
メソッドが起動されます。handleLocationEvent
メソッドは、ロケーション・ベースの条件を一意に識別する条件ID、条件が満たされているかどうか、エラーがあるかどうかを指定するイベント型、およびイベントが生成された時刻を受け取ります。
Wirelessシステム・マネージャを使用してロケーション・イベント・サーバーを構成する手順は、次のとおりです。
Wirelessサーバーの「システム」タブのページで、「サイト管理」をクリックします。
「コンポーネント構成」をクリックして展開します。
「関連ロケーション」の下で、「ロケーション・イベント・サーバー」をクリックします。
ロケーション・イベント・サーバーでは、次の構成オプションを使用できます。選択したオプションは、ロケーション・イベント・クライアントのアプリケーションの動作とパフォーマンスに影響を与えます。
待機なしプル・リクエストのデフォルト有効期間(秒)
ロケーション・イベント・エージェントでは、checkStatusNoWait
メソッドを使用して、ロケーション・イベント・サーバーから待機なしで結果をプルできます。待機なしプル・リクエストの有効期間によって、プルされた結果の有効期間、および現在有効とみなされるかどうかが判断されます。有効期間内に生成された結果は、有効とみなされます。プルされた結果が有効でない場合、待機なしプル・リクエストは、サーバーによる新規の結果の生成を待機しません。たとえば、有効期間が600秒(10分)で、ユーザーの位置の最新レポートが11分前であった場合、そのポジショニング・レポートは有効とはみなされず、checkStatusNoWait
メソッドは待機せずに戻ります。
有効期間が長いほど、ポジショニング・レポートが有効とみなされる可能性は高くなります。ただし、アプリケーションで最新のポジショニング情報が必要とされる場合は、短い有効期間が必要になります。
プル・リクエストのデフォルト有効期間(秒)
ロケーション・イベント・エージェントでは、isSatisfied
メソッドを使用して、ロケーション・イベント・サーバーから結果をプルできます。プル・リクエストの有効期間によって、プルされた結果が有効かどうかが判断されます。有効期間内に生成された結果は、有効とみなされます。プルされた結果が有効でない場合、プル・リクエストは、サーバーが新規の結果を生成するまで待機します。たとえば、有効期間が600秒(10分)で、ユーザーの位置の最新レポートが11分前であった場合、そのポジショニング・レポートは有効とはみなされず、isSatisfied
メソッドは、ユーザーの位置のレポートが次に受信されるまで待機します。
有効期間が長いほど、ポジショニング・レポートが有効とみなされる可能性は高くなり、isSatisfied
メソッドがポジショニング情報を受け入れて戻る可能性も高くなるため、アプリケーションを続行できます。ただし、アプリケーションで最新のポジショニング情報が必要とされる場合は、isSatisfied
メソッドが新規情報を待機する間、アプリケーションを遅延させても、短い有効期間が必要になります。
ロケーション・イベント・リスナーのデフォルト数
ロケーション・イベント・エージェントには、ロケーション・ベースのイベントをリスニングする複数のリスナーを設定できます。この設定では、1つのロケーション・イベント・エージェントが使用するリスナーの数を指定します。
この値は、システムのワークロードに基づいて指定する必要があります。多数のロケーション・ベースの条件が作成および処理される場合は、1より大きい値(5や10など)が適切と考えられます。ただし、少数のロケーション・ベースの条件が作成および処理される場合は、1つのロケーション・イベント・リスナーで十分です。アプリケーションでは、このデフォルトを上書きできます。
各ロケーション・イベント・サーバーには、次の値を指定できます。
ポジショニング・スケジューラの数
各ロケーション・イベント・サーバーには、ロケーション・ベースの条件を処理する1つ以上のポジショニング・スケジューラを設定できます。この設定では、各ロケーション・イベント・サーバーのポジショニング・スケジューラの数を指定します。
この値は、システムのワークロードに基づいて指定する必要があります。多数のロケーション・ベースの条件が作成および処理される場合は、1より大きい値(5や10など)が適切と考えられます。ただし、少数のロケーション・ベースの条件が作成および処理される場合は、1つのポジショニング・スケジューラで十分です。システム管理者はロケーション・イベント・サーバーのパフォーマンスを監視し、それに従ってこの値を調整できます。
リージョン・モデル・ツールを使用すると、ワイヤレス・ポータル・サービスの管理者はリージョンを管理し、サービスまたはフォルダをロケーション依存にすることができます。作成時に、サービスまたはフォルダにシステム・リージョンまたは以前に作成したカスタム・リージョンを関連付けて、ロケーション依存として指定できます。ロケーション依存サービスまたはフォルダがユーザーのポータルに表示されるのは、そのユーザーの(自動モバイル・ポジショニングまたはデフォルト・ロケーション・マークからの)現在のロケーションが、指定したリージョン内にある場合のみです。
リージョンとは、単なる地理的エンティティ、つまりロケーションです。リージョンは(町村名のように)小さくても(国のように)大きくてもかまいません。リージョンは、対象となる住所とロケーション(空港や博物館など)の場合と同様にポイントで表すか、州や国の場合と同様にポリゴンで表すことができます。
次のように、特定のリージョンを様々なアプリケーションおよびサービスに対して定義できます。
選択した都会エリアのシティ・ガイド。このエリア内のユーザーは、関連するサービスと情報(レストラン・リストや広告など)のみを受信します。
特定のランキングを持つ大学、または特定の領域の専門大学。入学希望者と両親は、これらのロケーションに関する情報を受信できます。
1つの都市または複数の州にまたがるエリア内の美術館。美術愛好家は美術館めぐりのプランを立てることができます。
会社が多数の専門サービスを提供しており、ユーザーがリージョンに連結された個々のサービスにサブスクライブして支払えるようにする必要があるとします。たとえば、あるユーザーはアメリカ全体のシティ・ガイドにサブスクライブし、別のユーザーは南東部の州のシティ・ガイドにのみサブスクライブできます。
このシティ・ガイドの例を実装する手順は、次のとおりです。
静的でロケーション依存でないフォルダCity_guideを作成します。
City_guideフォルダの下に、ボストン、サンフランシスコおよびカリフォルニアのシティ・ガイド・サービスを作成します。
ある都市の住所にデフォルト・ロケーション・マークを設定します。この住所がボストンにある場合、ユーザーにはボストンのシティ・ガイドが表示され、サンフランシスコにある場合はサンフランシスコとカリフォルニアのガイドが表示されます。
別の使用例として、複数のサービスが1つのリージョンに関連している可能性があります。その場合は、ロケーション依存のフォルダを作成し、(各サービスをリージョンのロケーション依存として指定するかわりに)そのフォルダに関連サービスを置きます。たとえば、ATMロケータ、Flight Gate Information、Airport Parking InformationおよびTaxi Finderの各サービスをリージョンAirportに関連付けており、Printer Finder、Conference Room SchedulerおよびCafeteria Menuの各サービスをリージョンOfficeに関連付けているとします。この場合は、2つのロケーション依存フォルダAirportおよびOfficeを作成し、それぞれAirportおよびOfficeリージョンに関連付けることができます。
リージョンはフォルダに格納されます。フォルダは階層形式で編成できます(つまり、フォルダにフォルダを入れることができます)。2つのトップレベル・フォルダSystem-Defined RegionsおよびCustom Regionsがあります。
ロケーション依存にするアプリケーションを指定する場合は、そのサービスを適用するリージョンまたはそのサービスが関連するリージョンを指定する必要があります。リージョンを指定するには、それがシステム定義リージョンまたはカスタム・リージョンとして存在している必要があります。カスタム・リージョンの場合は、それがリージョン・モデル・ツールを使用して作成されている必要があります。
アプリケーションをロケーション依存にし、リージョン・モデル・ツールを使用する手順は、次のとおりです。
Wirelessサーバーの「サービス」タブのページで、「アプリケーション」タブをクリックします(選択されていない場合)。
ロケーション依存の(またはロケーション依存にする)アプリケーションを選択し、「編集」をクリックします。
「追加情報」をクリックします。
「ロケーションに依存」を有効化 (選択)します。
リージョン・モデル・ツールを起動するには、「リージョン名」ボックスの横にあるフラッシュライト・アイコンをクリックします。
図15-5のように、リージョン・モデル・ツールが表示されます。
Webブラウザ・ウィンドウには、最初にリージョン階層のトップレベルとシステム・リージョンおよびカスタム・リージョンの2つのエントリが表示されます。リージョンを検索して、表示するリージョン、またはコレクションに追加してカスタム・リージョンの作成に使用するリージョンを選択できます。
システム・リージョンまたはカスタム・リージョンの表示の中でリージョンを検索するには、名前に含まれる文字列を入力して名前で検索する方法と、番号を入力してID(リージョンID)で検索する方法があります。また、選択対象としてすべてのリージョン、または現行の(現在選択している)リージョンに含まれるリージョンのみを指定し、「実行」をクリックします。
操作の実行対象となるリージョンを選択するには、アイコンと名前の左にあるボックスをクリックします。(項目を選択解除するには、ボックスをクリックします。)「すべて選択」をクリックすると、現在表示されているすべてのリージョンを選択でき、「選択解除」をクリックすると、現在表示されているすべてのリージョンを選択解除できます。
選択した1つ以上のリージョンに対して操作を実行するには、表15-61に示すコマンド・テキストのリンクまたはボタンをクリックします。
表15-61 リージョン・モデル・ツールの操作
操作内容 | クリックするリンクまたはボタン |
---|---|
選択したリージョンを表示の下部にあるリージョンのコレクションに追加する |
「コレクションに追加」。 |
選択したリージョンを示すマップを表示する |
「表示」。 |
表示の下部にあるリージョンのコレクションからカスタム・リージョンを作成する |
「コレクションから作成」。一連のページが表示され、リージョン階層内での位置とカスタム・リージョン名を指定できます。 |
入力した番地からカスタム・リージョンを作成する |
「アドレスから作成」。一連のページが表示され、住所、リージョン階層内での位置とカスタム・リージョン名を指定できます。 |
リージョンの編成に使用するフォルダを作成する |
「フォルダの作成」。一連のページが表示され、リージョン階層内でフォルダを下に作成する位置とフォルダ名を指定できます。 |
リージョンまたは現行のコレクションの表示内で、前または次のエントリ・セットにジャンプする |
「戻る」または「次へ」。 |
リージョン階層内で上へ1レベル以上ジャンプする |
ページ上部にある現行の階層の行で必要なレベルの名前。たとえば、この行(リンクである最後の項目を除くすべての項目)は、「リージョン」→「システム定義リージョン」→「NORTH AMERICA」→「USA」→「カリフォルニア」のように表示されます。 |
画面に関するヘルプを取得する |
「ヘルプ」。 |
リージョン・モデル・ツールは、アメリカに関する広範囲なデータ・セットおよび多数の国のデータとともにインストールされます。ただし、リージョン・データが格納されている表に行を追加すると、他の国、州、都市などのデータを追加できます。たとえば、STATE表にインドの州ごとに1行を追加できます。操作の意味を理解して慎重に行えば、これらの表内で特定のデータを変更することもできます。たとえば、特定の都市または州のDESCRIPTION列を編集できます。
リージョン・データは、表15-62に示すOracleAS Wirelessリポジトリ内のテーブルに格納されます。
表15-62 リージョン・データの表
表名 | 格納される情報 |
---|---|
CONTINENT |
大陸 |
COUNTRY |
国 |
STATE |
州 |
COUNTY |
郡 |
CITY |
都市 |
POSTALCODE |
郵便番号 |
USERDEFINED |
カスタム・リージョン |
これらの表の中から任意の表の定義を表示するには、SQL文のDESCRIBEを使用します。例15-37に、DESCRIBE文の出力内容(関連するすべての表の情報)を示します。
例15-37 リージョン・データ表の定義
SQL> DESCRIBE continent; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(100) REFCNT NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY SQL> DESCRIBE country; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(300) REFCNT NUMBER CONT_ID NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY SQL> DESCRIBE state; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(400) REFCNT NUMBER ABBR VARCHAR2(32) CONT_ID NUMBER COUNTRY_ID NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY SQL> DESCRIBE county; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(400) REFCNT NUMBER CONT_ID NUMBER COUNTRY_ID NUMBER STATE_ID NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY SQL> DESCRIBE city; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(400) REFCNT NUMBER CONT_ID NUMBER COUNTRY_ID NUMBER STATE_ID NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY MIN_LON NUMBER MIN_LAT NUMBER MAX_LON NUMBER MAX_LAT NUMBER SQL> DESCRIBE postalcode; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(400) REFCNT NUMBER CONT_ID NUMBER COUNTRY_ID NUMBER STATE_ID NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY SQL> DESCRIBE userdefined; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(200) REFCNT NUMBER TYPE NUMBER PARENT_FOLDER_ID NUMBER DESCRIPTION VARCHAR2(2000) GEOMETRY MDSYS.SDO_GEOMETRY
SQL文INSERTを使用すると、リージョン表に新規の行を追加できます。リージョン・データの挿入時には、次の考慮事項が適用されます。
新規の行を挿入するたびに、例15-38のようにidseq.nextval
を使用してID列の値を生成する必要があります。idseq順序はインストール中に自動的に作成されます。したがって、作成しないでください。
行の挿入時には、REFCNT列を0(ゼロ)に設定する必要があります。REFCNT列には、リージョンに関連付けられているサービス数の参照カウントが含まれています。この値は、サービスがリージョンに関連付けられると自動的に増やされ、リージョンとの関連付けが解除されるか、サービスが削除されると減らされます。REFCNTが0(ゼロ)以外の値になっているリージョンは削除できません。
デフォルトのリージョン階層を使用しない国について、郵便番号、都市または郡のデータを挿入する場合は、POSTALCODE、CITYまたはCOUNTY表でSTATE_IDとして0(ゼロ)を指定します。
GEOMETRY列の値には、MDSYS.SDO_GEOMETRY型の有効なOracle Spatialジオメトリを指定する必要があります。SDO_GTYPEには4桁の値を指定し、SRID(座標系)の値には8307(WGS-84経度/緯度書式の場合)を指定してください。SRID値が現在は8307でない場合は、リージョン・データ表に挿入する前に、ジオメトリをその書式に変換する必要があります。空間データ型、座標系および座標系の変換の詳細は、『Oracle Spatialユーザーズ・ガイドおよびリファレンス』を参照してください。
例15-38に、CITY表にマサチューセッツ州コンコードの1行を挿入するINSERT文を示します。この例は、コンコードを表すジオメトリが別の表MY_CITIESに存在する場合を想定しています。
例15-38 都市の挿入
DECLARE city_geom MDSYS.SDO_GEOMETRY; BEGIN -- Populate geometry variable with city geometry from another table. SELECT m.geometry into city_geom FROM my_cities m WHERE m.name = 'Concord'; -- Insert into the CITY table. INSERT INTO CITY VALUES ( idseq.nextval, 'Concord', 0, 5004, -- continent ID for North America 5006, -- country ID for USA 5028, -- state ID for Massachusetts 'The historic town of Concord', city_geom, -71.35, -- minimum longitude 42.46, -- minimum latitude -71.34, -- maximum longitude 42.47); -- maximum latitude END; /
CITY表内で、経度と緯度の最小値と最大値は必須であり、トラフィック・サポート・サービスで使用されます。経度と緯度の最小値では境界となる四角形の左下隅が識別され、経度と緯度の最大値では右上隅が識別されます。
OracleAS Wirelessは、ジオコーディング、運転方向、ビジネス・ディレクトリ(イエロー・ページ)サービスおよびマッピングなど、多数のロケーション関連サービスへのアクセスをサポートしています。多くの場合、サービスを直接実行せず、外部プロバイダに依存しています。この項では、プロバイダが実装できる機能およびOracleAS Wirelessと通信するためのインタフェースのオプションについて説明します。
外部プロバイダは、各自が提供するロケーション・ベースのサービスのタイプごとにカスタム・サービス・プロキシを作成することによって、OracleAS Wirelessと自社の製品を統合できます。サービス・プロキシは、共通のインタフェースを実装するJavaクラスで、各サービス(ジオコーディング、マッピング、ルーティング、トラフィック、イエロー・ページ)に1つのインタフェースがあります。サービス・プロキシは、プロバイダのサーバーではなく、OracleAS Wirelessと同じシステム上で実行されます。
サービス・プロキシは、プロバイダのサーバーと、Oracleロケーション・サービスが指定したインタフェースの間で変換する必要があります。また、必要な内部インフラストラクチャを提供するために、オラクル社が提供するクラスを拡張する必要があります。
サービスのタイプ(ジオコーディング、マッピングなど)に応じて、次のリストから適切なインタフェースを実装する必要があります。
oracle.panama.spatial.geocoder.Geocoder oracle.panama.spatial.mapper.Mapper oracle.panama.spatial.router.Router oracle.panama.spatial.traffic.TrafficReporter oracle.panama.spatial.yp.YPFinderSimple
インタフェース内には、15.6.2項で説明するように、必ず実装する必要があるファンクション、実装可能なファンクションおよび実装する必要のないファンクションがあります。
サービスのタイプ(ジオコーディング、マッピングなど)に応じて、次のリストから適切なインタフェースを拡張する必要があります。
oracle.panama.spatial.core.geocoder.GeocoderImplXMLImpersonator oracle.panama.spatial.core.mapper.MapperImplXMLImpersonator oracle.panama.spatial.core.router.RouterImplXMLImpersonator oracle.panama.spatial.core.traffic.TrafficReporterImplXMLImpersonator oracle.panama.spatial.core.yp.YPFinderSimpleImplXMLImpersonator
たとえば、oracle.panama.spatial.geocoder.Geocoder
を実装する場合は、次のインタフェースも拡張する必要があります。
oracle.panama.spatial.core.geocoder.GeocoderImplXMLImpersonator
サービス・プロキシは、OracleAS Wirelessサーバー上に配置されますが、このサーバーがファイアウォールの内側にある場合があります。これに対して、コンテンツ・プロバイダは通常、ファイアウォールの外側にあります。この場合、プロキシでOracleAS Wirelessファイアウォール・プロキシ設定を使用する必要があります(ロケーション・サービス・プロキシ設定とは異なります)。次の例は、ファイアウォール・プロキシの設定方法の抜粋です(重要な行は太字で表示されています)。
URL u = … try { URLConnection c = u.openConnection(); ProxyFirewall.setProxyAuthorization(c); c.connect(); BufferedReader bReader = new BufferedReader( new InputStreamReader( c.getInputStream())); ... } catch(...) { ... } ...
サービス・プロキシに使用可能なファンクションには、次の3つのカテゴリがあります。
実装必須: 各プロキシの主要な部分として実装が必要なファンクション。
実装可能: オプションで実装可能なファンクション(たとえば、自社の製品を競合品と差別化する機能を提供する場合)。
実装禁止: フレームワークによって実装済で、プロキシでは実装する必要のないファンクション。
使用可能な各ファンクションについては、各インタフェースのJavadocドキュメントを参照してください。
この項では、各タイプのサービス(ジオコーディング、マッピングなど)の各カテゴリに該当するファンクションを、クラス名を太字にして示します。ただし、サービスのタイプによっては、実装可能カテゴリに該当するファンクションがありません。
ジオコーディング・サービス・プロキシでは、次のファンクションの実装が必須です。
public Location[] geocodeAddress(Location inp, String matchMode);
ジオコーディング・サービス・プロキシでは、次のファンクションの実装が可能です。
public Location[][] geocodeAddresses(Location[] inp, String matchMode); public Location[] reverseGeocodePoint(Point pt);
ジオコーディング・サービス・プロキシでは、次のファンクションは実装禁止です。
public String xmlGeocode(Document xmlRequest);
マッピング・サービス・プロキシでは、次のファンクションの実装が必須です。
public String getMapURL(Point[] locations, ImageFormats fileType, double minLon, double maxLon, double minLat, double maxLat, int width, int height, boolean allowTurning);
マッピング・サービス・プロキシでは、次のファンクションは実装禁止です。
public String getMapURL(Point[] locations, ImageFormats fileType, int width, int height, boolean allowTurning); public String getMapURL(Point location, ImageFormats fileType, int width, int height, boolean allowTurning); public String getMapURL(RoutingResult route, boolean allowTurning); public String getMapURL(Maneuver man, boolean allowTurning); public String getMapURL(Point location, ImageFormats fileType, double minLon, double maxLon, double minLat, double maxLat, int width, int height, boolean allowTurning); public String[][] getMapURLs(Point[] locations, ImageFormats fileType, int width, int height, int subdivisionLevel, boolean allowTurning); public String[][] getMapURLs(Point[] locations, ImageFormats fileType, double minLon, double maxLon, double minLat, double maxLat, int width, int height, int subdivisionLevel, boolean allowTurning); public String[][] getMapURLs(Point location, ImageFormats fileType, int width, int height, int subdivisionLevel, boolean allowTurning); public String[][] getMapURLs(Point location, ImageFormats fileType, double minLon, double maxLon, double minLat, double maxLat, int width, int height, int subdivisionLevel, boolean allowTurning); public String[][] getMapURLs(RoutingResult route, int subdivisionLevel, boolean allowTurning); public String[][] getMapURLs(Maneuver man, int subdivisionLevel, boolean allowTurning); public String xmlMap(Document xmlRequest);
ルーティング・サービス・プロキシでは、次のファンクションの実装が必須です。
public RoutingResult computeRoute(Point source, Point destination, Point[] viaPoints, RoutingSettings opt, Locale locale);
ルーティング・サービス・プロキシでは、次のファンクションの実装が可能です。
public RoutingResult computeRoute(Location source, Location destination, Location[] viaPoints, RoutingSettings opt, Locale locale); public Ranking rankByDrivingDistance(Point source, Point[] locations);
ルーティング・サービス・プロキシでは、次のファンクションは実装禁止です。
public String xmlRoute(Document xmlRequest);
トラフィック・サービス・プロキシでは、次のファンクションの実装が必須です。
public TrafficReport getReportViaCity(CityInfo city) throws LBSException; public TrafficReport getReportViaLocation(Point location, double radius, int unit, CityInfo city) throws LBSException; public TrafficReport getReportViaRoute(RouteInfo route, CityInfo city) throws LBSException; public TrafficReport getReportViaRoute(RouteInfo route, String direction, CityInfo city) throws LBSException;
トラフィック・サービス・プロキシでは、次のファンクションは実装禁止です。
public TrafficCityManager getCityManager(); public TrafficReport getReportViaLocation(Point location, double radius, int unit) throws LBSException; public TrafficReport getReportViaAddress(Location address, double radius, int unit) throws LBSException; public String xmlTraffic(Document xmlRequest) throws LBSException;
ビジネス・ディレクトリ(YP)サービス・プロキシでは、次のファンクションの実装が必須です。
public YPBusiness[] getBusinessesInCity(String businessName, String country, String state, String city, Locale locale); public YPBusiness[] getBusinessesInState(String businessName, String country, String state, Locale locale);
ビジネス・ディレクトリ(YP)サービス・プロキシでは、次のファンクションの実装が可能です。
public Boolean anyBusinessesInCity(YPCategory category, String country, String state, String city); public Boolean anyBusinessesInState(YPCategory category, String country, String state); public Boolean anyBusinessesInPCode(YPCategory category, String country, String postalCode); public Boolean anyBusinessesInRadius(YPCategory category, Point location, double metersRadius); public YPBusiness[] getBusinessesInRadius(String businessName, Point location, double metersRadius, Locale locale); public YPBusiness[] getBusinessesInPCode(String businessName, String country, String postalCode, Locale locale); public YPBusiness[] getBusinessesInCity(YPCategory category, String country, String state, String city, Locale locale); public YPBusiness[] getBusinessesInState(YPCategory category, String country, String state, Locale locale); public YPBusiness[] getBusinessesInRadius(YPCategory category, Point location, double metersRadius, Locale locale); public YPBusiness[] getBusinessesInPCode(YPCategory category, String country, String postalCode, Locale locale); public YPBusiness[] getNearestNBusinesses(String businessName, Point location, int n, Locale locale); public YPBusiness[] getNearestNBusinesses(YPCategory category, Point location, int n, Locale locale);
ビジネス・ディレクトリ(YP)サービス・プロキシでは、次のファンクションは実装禁止です。
public Boolean anyBusinessesInSameCity(YPCategory category, Location loc); public Boolean anyBusinessesInSameState(YPCategory category, Location loc); public Boolean anyBusinessesInSamePCode(YPCategory category, Location loc); public YPBusiness[] getBusinessesInSameCity(String businessName, Location loc, Locale locale); public YPBusiness[] getBusinessesInSameState(String businessName, Location loc, Locale locale); public YPBusiness[] getBusinessesInSamePCode(String businessName, Location loc, Locale locale); public YPBusiness[] getBusinessesInSameCity(YPCategory category, Location loc, Locale locale); public YPBusiness[] getBusinessesInSameState(YPCategory category, Location loc, Locale locale); public YPBusiness[] getBusinessesInSamePCode(YPCategory category, Location loc, Locale locale); public YPBusiness[] getBusinessesInSameCity(String businessName, YPCategory category, Location loc, Locale locale); public YPBusiness[] getBusinessesInSameState(String businessName, YPCategory category, Location loc, Locale locale); public YPBusiness[] getBusinessesInSamePCode(String businessName, YPCategory category, Location loc, Locale locale); public YPBusiness[] getBusinessesInCity(String businessName, YPCategory category, String country, String state, String city, Locale locale); public YPBusiness[] getBusinessesInState(String businessName, YPCategory category, String country, String state, Locale locale); public YPBusiness[] getBusinessesInRadius(String businessName, YPCategory category, Point location, double metersRadius, Locale locale); public YPBusiness[] getBusinessesInPCode(String businessName, YPCategory category, String country, String postalCode, Locale locale); public YPBusiness[] getNearestNBusinesses(String businessName, YPCategory category, Point location, int n, Locale locale); public String xmlYP(Document xmlRequest);
この項では、外部モバイル・ポジショニング・プロバイダをOracleAS Wirelessに統合するための、サービス・プロキシの実装方法について説明します。モバイル・ポジショニング・プロバイダを統合する前に、次の事項を必ず理解してください。
モバイル・ポジショニングには、次のステップが含まれています。
ロケーションのプライバシ設定を調べ、ポジショニング・リクエストを許可するかどうかを判断します。
プロバイダ・セレクタ・フックを使用して、ユーザーのモバイル・ステーションIDを取得します(15.3.2.4項を参照)。システム・デフォルトでは、ユーザー・プロファイルのモバイル・ステーションIDのフィールドが使用されます。
ロケーション・キャッシュを調べます。ロケーション・キャッシュが使用可能で、キャッシュからリクエストが満たせる場合は、キャッシュで見つけたロケーションを戻し、ステップ4をスキップします。
キャッシュからロケーションが満たされない場合は、1つ以上のモバイル・ポジショニング・プロキシを起動して、ユーザーの現在のロケーションを取得します。
前述のリストのステップ4(1つ以上のモバイル・ポジショニング・プロバイダを起動)には、次の固有の操作が含まれます。
システム構成ファイルのモバイル・ポジショニング・プロバイダに関する情報を調べます。この情報には、プロバイダ名、プロキシの実装クラス名、バージョン番号、モバイル・ポジショニング・サーバーのURL、モバイル・ポジショニング・ユーザーの名前とパスワードおよびすべての追加パラメータが含まれます。
プロキシのクラスをインスタンス化します。
そのクラスのrequestPosition()
method
を起動して、モバイル・ステーションのロケーションを取得します。
モバイル・ポジショニング・プロバイダを統合するには、oracle.panama.mp.Positioner
インタフェースを実装する必要があります。
クラスのコンストラクタは、次の書式にする必要があります。
public MyMPImpl
(String providerName,
String providerImpl,
String version,
String url,
String username,
String password,
String parameters);
モバイル・ポジショニング・フレームワークは、この情報をシステム構成から読み取り、プロキシ実装を構成するために使用します。クラスはその情報をクラス変数に格納し、後で使用します。
コンストラクタの他に、クラスは次のメソッドを実装する必要があります。
public PositionResult requestPosition ( String msid); public PositionResult requestPosition ( String msid, PositionQoS qos); public PositionResult[] requestPosition ( String[] msids); public PositionResult[] requestPosition ( String[] msids, PositionQoS qos);
第1のメソッドは、モバイル・ステーションIDをパラメータとして取得します。
第2のメソッドは、モバイル・ステーションIDおよび位置の品質(PositionQoS
)のパラメータを取得します。PositionQoS
パラメータは、モバイル・ステーションのロケーションをキャッシュから供給できる最大許容経過時間を指定します。たとえば、アプリケーションによっては5分も経過したユーザーのロケーションを受け入れる可能性もあります。プロキシの実装では、ロケーションがすでに存在しているかどうかを判断するロジックがモバイル・ポジショニング・フレームワークに実装されているため、Oracle Application Server Wirelessのロケーション・キャッシュを調べる必要はありません。つまり、システム・キャッシュ内にロケーションが存在し、リクエストを満たしている場合、プロキシは起動しません。プロキシでPositionQoS
パラメータを考慮する必要があるのは、実際のモバイル・ポジショニング・プロバイダに同じキャッシュ概念があり、このパラメータを使用できる場合のみです。
第3と第4のメソッドは、それぞれ第1と第2のメソッドに似ていますが、複数のモバイル・ステーションのロケーションをリクエストするために使用されます。実際のモバイル・ポジショニング・プロバイダがバルク・リクエストを処理できる場合、プロキシはこの機能を使用して、1回のコール(たとえば、FORループの使用)で複数のロケーションをリクエストできます。プロバイダが複数のリクエストを処理できない場合、プロキシはプロバイダをロケーションごとに1回、つまり複数回コールする必要があります。
各メソッドは、PositionResult
オブジェクト、またはそのオブジェクトの配列を戻します。PositionResult
オブジェクトは、モバイル・ステーションの現在のロケーションを表します。PositionResult
オブジェクトの詳細は、Javadocドキュメントのoracle.panama.mp.PositionResult
クラスおよびoracle.panama.mp.PositionArea
クラスを参照してください。
PositionResult
オブジェクトの使用には、次のガイドラインが適用されます。
モバイル・ポジショニング・プロバイダが、オブジェクトに1つ以上の値を戻さない場合は、それらの値をnullに設定します。
PositionResult
オブジェクトにはPositionArea
オブジェクトの配列が含まれます。モバイル・ポジショニング・プロバイダが1つのPositionArea
オブジェクトのみを戻す場合、その1つのオブジェクトも配列に含める必要があります。
oracle.panama.mp.Positioner
インタフェースの実装では、例外およびエラーも処理する必要があります(詳細は、15.7.2項を参照)。
この項では、次のいずれかの場合に発生する、実行時のモバイル・ポジショニングのエラーおよび例外の処理に関するガイドラインを示します。
プロバイダのレスポンスにエラー・コードおよびエラー・メッセージが含まれる場合。
解析中に例外がスローされた場合。
複数のモバイル・ステーションをポジショニングするリクエスト(15.7.1項で説明した第3および第4のrequestPosition
メソッドを使用)で、戻された結果の数とサブスクライバIDの数が一致しない場合。
単一または複数のサブスクライバIDに対するリクエストからのエラーまたは例外については、プロバイダからのエラー・コードおよびエラー・メッセージを調べます。
そのエラーが重大なエラーである場合は、即時にnullを戻してフェイルオーバーします。重大なエラーに含まれるのは、認証エラー、XML解析中のエラー、およびプロキシ実装で発生したのではなく、リクエストの再送信で解決不可能なその他のエラーです。
エラーが不明サブスクライバIDを示す場合は、エラーID UNKNOWNSUBSCRIBER
およびエラー・メッセージUNKNOWNSUBSCRIBER_STR
によって、PositionResult
オブジェクトを構成して戻します。エラー・メッセージは、PositionResult
オブジェクトでgetErrorMessage()
メソッドを使用して、後で取り出せます。
その他のエラー・コードについては、プロバイダからのエラーIDおよびエラー・メッセージによって、PositionResult
オブジェクトを構成して戻します。