TairGIS は、Tair(Enterprise Edition)に組み込まれた地理空間データ構造であり、ポイント、ライン、ポリゴンといった地理的形状を格納・クエリする機能を提供します。高同時実行数を要するシナリオにおいても高いパフォーマンスを発揮し、ジオフェンシングなどのリアルタイム位置情報サービス(LBS)アプリケーションに最適です。本トピックでは、TairGIS を用いたジオフェンスの構築方法について説明します。
仕組み
ジオフェンスとは、地理的エリアを囲む仮想境界のことです。TairGIS では、幾何形状をテキスト文字列として表現するオープン標準である WKT(Well-Known Text)を用いて、これらの境界を定義およびクエリします。
TairGIS がジオフェンシングでサポートする WKT のジオメトリ型は以下の 3 種類です:
| ジオメトリ | WKT フォーマット | 使用タイミング |
|---|---|---|
| ポイント | POINT (経度 緯度) | GPS から取得したデバイスの位置情報 |
| ポリゴン | POLYGON ((x1 y1, x2 y2, ...)) | ジオフェンスの境界または基地局のカバー範囲 |
| 行 | LINESTRING (x1 y1, x2 y2) | ルートまたはパス |
ジオフェンシングの基本ワークフローは以下のとおりです:
WKT ポリゴンを用いて GIS.ADD コマンドでジオフェンスの境界を定義します。
デバイスの現在位置を WKT ポイントまたはポリゴンとして取得します。
GIS.CONTAINS コマンドを実行し、その位置がジオフェンス内にあるかどうかを確認します。
連続して実行したチェック結果を比較することで、進入および退出イベントを検出し、アラートをトリガーします。
ジオフェンスの設定
ステップ 1:ジオフェンス境界の追加
GIS.ADD コマンドを使用して、名前付きキーの下に地理的エリアを格納します。以下の例では、学校の敷地境界をポリゴンとして追加しています:
GIS.ADD test_app school_location 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'ステップ 2:デバイスがジオフェンス内にあるかの確認
デバイスの位置情報を取得する方法に応じて、以下のいずれかの方法をご利用ください。
GPS を使用した位置情報(ポイント)
GPS は高精度な座標を返します。GIS.CONTAINS へは、WKT POINT 形式で渡します:
GIS.CONTAINS test_app 'POINT (40.086631 30.138141)'GIS.CONTAINS は、指定された形状を含むすべての格納済みジオメトリの名前を返します。指定されたポイントがすべての格納済みジオメトリの外側にある場合、応答は空配列となります。
キャリアベースのロケーション (ポリゴン)
通信キャリアのデータを利用する場合、報告される位置情報は、正確なポイントではなく、セクターまたは基地局の全カバー範囲となることがあります。このカバー範囲は、WKT POLYGON として表現します:
GIS.CONTAINS test_app 'POLYGON ((10 22, 30 45, 16 53, 10 22))'このカバー範囲のポリゴンが school_location と一致する場合、応答には school_location が含まれ、デバイスがジオフェンス内またはその近傍に存在することを示します。
ステップ 3:進入および退出イベントの検出
GIS.CONTAINS は現在の状態のスナップショットを返します。固定間隔で繰り返し実行し、連続する結果を比較することで、状態変化を検出できます:
| 前回の結果 | 今回の結果 | イベント | アクション |
|---|---|---|---|
school_location | 空配列 | デバイスがジオフェンスから退出 | 退出アラートをトリガー |
| 空配列 | school_location | デバイスがジオフェンスに進入 | エントリ通知のトリガー |
たとえば、学校の安全確保アプリケーションでは、生徒の位置情報を固定間隔でポーリングします。監視時間帯中に GIS.CONTAINS の応答が school_location から空配列へとトランジションした場合、退出アラートをトリガーします。
また、GIS.WITHIN および GIS.INTERSECTS コマンドを実行して、デバイスがデジタルフェンス内にあるかどうかを確認することもできます。詳細については、「TairGIS コマンド」をご参照ください。
次のステップ
追加のジオメトリ操作については、TairGIS コマンド リファレンスを参照してください。