8 位置追跡サーバー

Oracle Spatial and Graphの位置追跡サーバーを使用すると、対象の地域を定義し、オブジェクトのその地域への移動またはその地域からの移動を追跡して、特定の移動があると通知を受信できます。

位置追跡PL/SQLサブプログラムのリファレンス情報については、「SDO_TRKRパッケージ(位置追跡)」を参照してください。

トピック:

8.1 位置追跡サーバーについて

生活の中で位置の重要性が増し、位置検出デバイスがいたる所に存在するようになるにつれ、アプリケーションで利用者の位置データを継続的にモニターする需要が高まっています。位置データのモニターの結果、システムでアラートが生成されることがあります。

たとえば、運送会社で、指定されたルートを通って目的地に移動する10,000台のトラックのネットワークをモニターするとします。指定した範囲のルート内のトラックの移動を追跡し、想定したルートから外れたトラックを検出した場合に通知を生成します。プロアクティブなロケーションベース・サービス(LBS)とは一般に、指定した対象地域内または地域外の利用者の位置を追跡して、ロケーションベースの広告や友人が近くにいることを知らせるなどの様々な用途に利用するアプリケーションのことです。

Oracle Spatial and Graphの位置追跡サーバーでは、次のものが提供されます。

  • PL/SQLインタフェースを介してデータベース内で位置追跡ネットワークを設定するための単純なフレームワーク

  • 追跡ネットワーク内のオブジェクトの位置を継続的にモニターするためのAPI

  • Oracle Advanced Queuingを使用した、着信の位置の更新や追跡リクエストおよび発信の関連通知のためのキューイング・メカニズム

  • データベース内の何千もの関連オブジェクトのための効率的で継続的な位置モニター

8.2 位置追跡地域

位置追跡サーバーは、移動する一連のオブジェクトを既知の対象地域群に対して追跡し、必要に応じて通知を生成します。このフレームワークでは、対象地域群は位置追跡地域と呼ばれます。

データベースで、これらは2つの列(roi_id INTEGER、roi_geom SDO_GEOMETRY)の表で管理されます。ROI_IDはこの表の主キーで、ROI_GEOMは追跡地域のジオメトリです。

追跡地域セットを作成すると、いくつかの追加構造が作成されます。追跡地域セットはいくつでも作成できます。各セットは一般に追跡対象地域を数千持てます。地域が追跡の対象でなくなった場合、追跡地域表から削除します。

追跡する位置オブジェクトのセットを入力する必要もあります。位置オブジェクトにはオブジェクトのIDおよびこのオブジェクトのターゲット追跡地域を示すROI_IDを指定する必要があります。つまり、各位置オブジェクトは1つ以上の追跡地域について追跡できるということです。これらのオブジェクトは、TRACKER_MSG(トラッカ・メッセージ)オブジェクトを追跡キューに挿入して作成します。

トラッカ・メッセージ・オブジェクトにはobject_idroi_idおよび2つのフラグを指定します。

  • isTrackInsideフラグでは、オブジェクトが地域内にあることを追跡するか、地域外にあることを追跡するかを指定します。isTrackInsideYに設定した場合、オブジェクトの位置がターゲットROI内にあることが追跡されます。オブジェクトがROI外に移動すると、通知メッセージが生成されます。isTrackInsideNに設定した場合、オブジェクトの位置がターゲットROI外にあることが追跡されます。オブジェクトがROI内に移動すると、通知メッセージが生成されます。

  • isActiveフラグでは、この位置オブジェクトがアクティブかどうかを指定します。Yに設定した場合、位置オブジェクトが追跡されます。Nに設定した場合、そのオブジェクトの追跡が停止されます。これによって、実際の位置オブジェクトは残したまま、アプリケーション・コンテキストに基づいてオブジェクトの追跡をオンにしたりオフにしたりできます。

位置オブジェクトを作成して追跡オプションを構成したら、追跡オブジェクトの新しい位置の挿入を開始できます。つまり、オブジェクトが移動するにつれて、位置が変わります。新しい位置が取得されるたびに、位置メッセージ・キューに挿入され、追跡サーバーで処理されます。isTrackInsideフラグとROI_IDに応じて、これらの位置メッセージが処理され、必要に応じて通知が生成されます。ユーザー・アプリケーションで通知キューをモニターし、新しい通知が生成されたら通知を処理できます。

ユーザーが追跡サーバーを実行するには、次の追加権限が必要です。

grant aq_administrator_role, create job, manage scheduler to <USER>;
grant execute on dbms_aq to  <USER>;
grant execute on dbms_aqadm to  <USER>;
grant execute on dbms_lock to  <USER>;
grant execute on dbms_aqin to  <USER>;
grant execute on dbms_aqjms to  <USER>;

8.3 位置追跡サーバー用のデータ型

位置追跡に関連付けられているPL/SQLサブプログラムは、位置追跡サーバーに固有のデータ型のパラメータをとる場合があります。

これらのサブプログラムについては、「SDO_TRKRパッケージ(位置追跡)」を参照してください。固有のデータ型の定義は次のとおりです。

  • LOCATION_MSG

    (object_id INTEGER,
     time      TIMESTAMP,
     x         NUMBER,
     y         NUMBER)
  • LOCATION_MSG_ARR

    VARRAY(1000) of location_msg
  • LOCATION_MSG_PKD

    object(arr location_msg_arr)
  • NOTIFICATION_MSG

    (object_id INTEGER,
     roi_id    INTEGER,
     time      TIMESTAMP)
  • PROC_MSG

    (object_id     INTEGER,
     time          TIMESTAMP,
     x             NUMBER,
     y             NUMBER,
     roi_id        INTEGER,
     isTrackInside CHAR(1))
  • PROC_MSG_ARR

    VARRAY(1000) of proc_msg
  • PROC_MSG_PKD

    object(arr proc_msg_arr)
  • TRACKER_MSG

    (object_id     INTEGER,
     roi_id        INTEGER,
     isTrackInside CHAR(1),
     isActivate    CHAR(1))

8.4 位置追跡サーバー用のデータ構造とワークフロー

位置追跡サーバーを使用する場合、サーバーの初期化時にユーザーが追跡地域名(TR_NAME)を指定する必要があります。この名前に基づいて、一部の追加データ構造が作成されます。

  • 表<TR_NAME>_TRACKING_REGIONS (roi_id INTEGER、roi_geom MDSYS.SDO_GEOMETRY)には、TR_NAMEに対してサーバーで定義される追跡地域ポリゴンが含まれます。サーバーの初期化後、ユーザーがこの表に直接追跡ポリゴンを挿入します。

  • 表<TR_REGION>_TRACKER (object_id INTEGER、'roi_id INTEGER、isTrackInside CHAR(1))には、追跡オブジェクト(追跡対象のオブジェクト)が含まれます。この表は追跡サーバーによって管理され、ユーザーがこの表を直接更新することはありません。

  • 表<TR_REGION>_NOTIFICATION_TABLEおよび<TR_REGION>_TRAJECTORYは、サーバーによって使用される2つの補助表で、ユーザーが直接更新することはありません。

これらの表以外に、サーバーで、位置オブジェクトと通知を管理するための詳細問合せ(AQ)オブジェクトのセットも作成されます。これらすべてに<TR_REGION>という接頭辞が付けられます。

オブジェクトを追跡するための通常のワークフローは次のとおりです。

  1. SDO_TRKR.CREATE_TRACKING_REGIONSプロシージャを使用して追跡地域セットが作成されます。

  2. SDO_TRKR.START_TRACKING_REGIONSプロシージャによって地域がアクティブになります。

  3. SDO_TRKR.SEND_TRACKING_MSGプロシージャを使用して位置オブジェクトが作成されます。この呼出しで追跡オブジェクトを作成し、オブジェクトがターゲット地域内にあることを追跡するか、ターゲット地域外にあることを追跡するかを指定します。

  4. 移動するオブジェクトの実際の追跡は、SDO_TRKR.SEND_LOCATION_MSGSプロシージャを使用して行われます。このプロシージャは、追跡対象のオブジェクトの移動する位置情報およびこれを処理する位置追跡サーバーの情報を位置追跡キューに挿入します。

  5. ユーザーが追跡サーバーから生成されたアラートを検出するために<TR_REGION>_NOTIFICATION_Qキューをモニターします。