1.15 位置データ・エンリッチメント

Oracle Spatialには、データベースにロードできる、現地点からの階層型の地理データを伴った場所名のデータ・セットが含まれています。

SDO_UTIL.GEO_SEARCHファンクションを使用してこの場所名データ・セットを検索できます。データ・セットには、場所名や住所、住所の一部などの一般的に使用されるテキストの位置データおよび緯度と経度の情報が含まれます。

ロケーション・タグはテキスト・データから抽出され、Oracle Textを使用して既知の場所名と照合され、既知の場所名に関連付けられた他の地理的情報を使用して強化されます。

結果は、元のデータを持つ追加の属性として格納できます。

この機能により、少ない量の構造化された地理的データおよび位置データを処理し、情報を分類、比較、フィルタ処理、および他のデータと関連付けできます。たとえば、名前の一部のみを持つデータを市区町村、郡、州および国を含むように強化し、州レベルの情報を持つ可能性がある他のデータ・セットと結合したり、分析できるようにすることができます。これは、使用可能なシステムおよびデータ・ウェアハウスの構造化された情報とBig Dataの結果を比較する場合に特に役立ちます。

位置データ・エンリッチメント・サポートの設定および使用

位置データ・エンリッチメント・サポートを使用するには、必要なデータベース・オブジェクトを作成してOracle Databaseにデータ・セットをロードするスクリプトの編集やそれらのスクリプトの実行などの特定の設定処理を実行するのみです。

  1. $ORACLE_HOME//md/demo/GeoSearchに移動します。ここには、すべての必要なファイルが含まれています。

  2. 基本的なステップの概要を含んだテキスト・ファイルであるREADMEファイルを読みます。

  3. READMEファイルに記載されている処理を実行します。

    この処理には、LICENSES.TXTファイルの参照、分かれたファイルからの1つのzipファイルの作成、load_data.sqlおよびcreate_index.sqlスクリプト・ファイル(このファイルには説明コメントが含まれる)の編集およびそれらのスクリプトの実行などがあります。

create_index.sqlファイルには、SDO_UTIL.GEO_SEARCHファンクションを使用した問合せの例がいくつか含まれています。それらの例とSDO_UTIL.GEO_SEARCHのリファレンスおよび使用方法の情報を使用して、位置データ・エンリッチメント・サポートの独自の使用法を開発できます。

1.15.1 ELOC_ADMIN_AREA_SEARCH表

ELOC_ADMIN_AREA_SEARCH表は、位置データ・エンリッチメントのデータの格納に使用されます。「位置データ・エンリッチメント」に記載されている必要な設定処理を行った場合にのみ作成され、選択したデータベース・スキーマに作成されます。

この表にはSDO_UTIL.GEO_SEARCHプロシージャでアクセスできます。この表には次の列が含まれます。

表1-3 LOC_ADMIN_AREA_SEARCH表

列名 説明
AREA_ID 場所名の一意のID。
FULL_NAME 検索可能な文字列である場所の名前。たとえば、"NASHUA,HILLSBOROUGH,NEW HAMPSHIRE,NH,UNITED STATES,USA"は、米国ニューハンプシャー州ナシュア市の検索可能な名前です。

このエントリは、名前階層の各レベルの使用可能な名前をすべて連結したリストです。つまり、州の場合、略称とフル・ネームの両方を持てるということです。同様に、国の場合、略称とフル・ネームの両方を持つことができます。これによって、検索でこれらの行政区域に異なる検索語が使用された場合でもこのエントリを検出することができます。

AREA_NAME 行政区域の実際の区域名。
KEY 検索APIから返される標準化されたテキスト・キー。これは、検索語を他の語との結合に使用できる正規化された標準キーです。
LANG_CODE このエントリに使用される言語の3文字のISOコード。
PART_ID この表がパーティション化されている場合に使用される数値(詳細はREADMEを参照してください)。
CENTER_LONG 場所名の経度。
CENTER_LAT 場所名の緯度。
POPULATION 指定された検索語に対して複数の一致が見つかった場合に結果の順序付けに使用される数値。同じ検索語に対して複数の一致が見つかった場合に人口の多い区域を人口の少ない区域より先に戻すことを意図しています。

1.15.2 地名階層へのユーザー・データの追加

Oracleによって提供されるデータに独自のデータを追加して拡張できます。たとえば、ユーザーが市内の公園(ニューヨーク市のセントラル・パークなど)のエントリを作成する場合、この表にそのエントリを作成できます。

たとえば、次のようにできます。

insert into ELOC_ADMIN_AREA_SEARCH values (1469286010, 'CENTRAL PARK,NEW YORK CITY,NEW YORK,NYC,RICHMOND,NEW YORK,NY,UNITED STATES,USA', 'CENTRAL PARK', 'CENTRAL PARK|NEW YORK|RICHMOND|NEW YORK|UNITED STATES', 'ENG', 7, 73.9654,40.7829, 0);
commit;

テキスト索引はコミットが発行された後でのみ同期を実行するため、新規データの挿入後のCOMMIT文は重要です。

この例では、area_idには、表にまだ存在しない値が選択され、ランダムなpartition_id値(ここでは、7)が使用されています。ただし、表に使用されるパーティション化方法に基づいて適切な値が選択される必要があります。(詳細は、READMEを参照)。

これで、セントラル・パークを検索すると、一致の結果が返されます。

select * from table(sdo_util.geo_search('central park,new york,NY,UNITED STATES'));
CENTRAL PARK
CENTRAL PARK|NEW YORK|RICHMOND|NEW YORK|UNITED STATES
ENG	73.9654    40.7829	  100