Oracleでは、次の表を使用してジオコーディングを行います。
GC_PARSER_PROFILES
GC_PARSER_PROFILEAFS
GC_COUNTRY_PROFILE
GC_AREA_<接尾辞>
GC_POSTAL_CODE_<接尾辞>
GC_ROAD_SEGMENT_<接尾辞>
GC_ROAD_<接尾辞>
GC_POI_<接尾辞>
GC_INTERSECTION_<接尾辞>
GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表には、サポートされるすべての国の住所形式の定義が格納されています。これらの表は、内部の住所パーサーが住所フィールドに住所を解析する際に使用されます。この2つの表のデータは、データ・プロバイダまたはOracleから提供されます。(これらの表がデータ・プロバイダから提供されていない場合は、「プロファイル表のインストール」に示すようにインストールしてから移入を行う必要があります。)他の表には、データ・ベンダーから提供されるジオコーディング・データが格納されます。
ジオコーディング・データが含まれる表を所有する各ユーザー(SDO_GCDRサブプログラムをコールする際にusername
パラメータで指定可能なユーザー)は、GC_PARSER_PROFILES表、GC_PARSER_PROFILEAFS表およびGC_COUNTRY_PROFILE表をそれぞれ1つずつ所有している必要があります。このユーザーは、他の表(GC_xxx_<接尾辞>)については、複数のセットを所有できます。表名の末尾の接尾辞が同じ表のセットには、それぞれ1つの国のジオコーディング・データが格納されます。たとえば、次の表のセットを使用すると、米国のジオコーディング・データを格納できます。
GC_AREA_US
GC_POSTAL_CODE_US
GC_ROAD_SEGMENT_US
GC_ROAD_US
GC_POI_US
GC_INTERSECTION_US
1つの国のジオコーディング・データを、複数の表セットに格納することはできません。表の接尾辞は、データ・ベンダーによって定義され、GC_COUNTRY_PROFILE表のGC_TABLE_SUFFIX列に規定されています(「GC_COUNTRY_PROFILE表」を参照)。
これ以降の項では、ベンダーが提供する、ジオコーディング・データが格納される表について、表名のアルファベット順に説明します。
「ジオコーディングを行うための表の索引」では、ジオコーディングにこれらの表を使用するために作成する必要のある索引について説明します。
GC_ADDRESS_POINT_<接尾辞>表(たとえば、GC_ADDRESS_POINT_US)には、表名接尾辞に関連付けられている国(または国のグループ)の住所の地理(経度、緯度)座標が格納されます。この表はジオコーディングにとって必須ではありません(ただし、点ベースのジオコーディングでは必須)が、この表を使用すると、ジオコーダはより正確な位置結果を生成します。スキーマで示されている場合は、自動的に使用されます。この表には、表に格納される住所ごとに行が1つ含まれ、表11-7に示す列があります。
表11-7 GC_ADDRESS_POINT_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
ADDRESS_POINT_ID |
NUMBER(10) |
住所地点のID番号。(必須) |
ROAD_ID |
NUMBER |
住所地点に位置する道路のID番号。(必須) |
ROAD_SEGMENT_ID |
NUMBER(10) |
住所地点に位置する道路の道路セグメントのID番号。(必須) |
SIDE |
VARCHAR2(1) |
住所地点に位置する道路の側。可能な値は |
LANG_CODE |
VARCHAR2(3) |
住所地点に関連付けられている言語の、3文字のISO各国語コード。(必須)地点 |
HOUSE_NUMBER |
VARCHAR2(600 CHAR) |
住所地点の住居番号(数字以外の文字を含むことも可能)。(必須) |
PERCENT |
NUMBER |
道路セグメントの長さに対する住所点の位置の割合値。これは、セグメントの開始点から住所点までの距離を道路セグメントの長さで除算して求められます。(必須) |
ADDR_LONG |
NUMBER(10) |
住所地点の経度値。(必須) |
ADDR_LAT |
NUMBER(10) |
住所地点の緯度値。(必須) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
住所地点が属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
GC_ADDRESS_POINT_<接尾辞>表を使用する場合は、次の形式の文を使用して表に索引を作成する必要があります。
CREATE INDEX idx_<suffix>_addrpt_addr ON gc_address_point_<suffix> (road_segment_id, road_id, house_number, side);
GC_AREA_<接尾辞>表(たとえば、CG_AREA_US)には、その表名の接尾辞に関連付けられた国の管理領域情報が格納されます。この表には、管理領域ごとに行が1つ含まれ、表11-8に示す列があります。
表11-8 GC_AREA_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
AREA_ID |
NUMBER(10) |
領域ID番号。(必須) |
AREA_NAME |
VARCHAR2(64) |
領域名。(必須) |
LANG_CODE |
VARCHAR2(3) |
領域に関連付けられている言語の、3文字のISO各国語コード。(必須) |
ADMIN_LEVEL |
NUMBER(1) |
領域の管理階層レベル。(必須) |
LEVEL1_AREA_ID |
NUMBER(10) |
領域が属するレベル1領域のID。管理階層のレベル1領域は国です。(必須) |
LEVEL2_AREA_ID |
NUMBER(10) |
領域が属するレベル2領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(省略可能) |
LEVEL3_AREA_ID |
NUMBER(10) |
領域が属するレベル3領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(省略可能) |
LEVEL4_AREA_ID |
NUMBER(10) |
領域が属するレベル4領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(省略可能) |
LEVEL5_AREA_ID |
NUMBER(10) |
領域が属するレベル5領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(省略可能) |
LEVEL6_AREA_ID |
NUMBER(10) |
領域が属するレベル6領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(省略可能) |
LEVEL7_AREA_ID |
NUMBER(10) |
領域が属するレベル7領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(省略可能) |
CENTER_LONG |
NUMBER |
領域の中心の経度値。中心は、中心の経度および緯度の値に最も近い道路セグメントに設定されます。この2つの属性は、適切に設定することをお薦めします。これらの値が設定されていない場合、領域をジオコードして得られる経度および緯度の座標は、(0,0)になります。(省略可能) |
CENTER_LAT |
NUMBER |
領域の中心の緯度値。(CENTER_LONG列の説明を参照)。(省略可能) |
ROAD_SEGMENT_ID |
NUMBER(10) |
領域の中心が設定される道路セグメントのID。ジオコーダをOracle Spatial and Graphルーティング・エンジン(「ルーティング・エンジン」を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、0 (ゼロ)以外の任意の値に設定できますが、NULLにはできません)。(必須) |
POSTAL_CODE |
VARCHAR2(16) |
領域の中心の郵便番号。この属性は、正しく設定することをお薦めします。この値がNULLの場合、領域をジオコードした結果の郵便番号属性はNULLになります。(省略可能) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
領域が属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
REAL_NAME |
VARCHAR2(64) |
現地の言語で綴られた、領域の実際の名前。この列は、領域名が英語以外の場合に有効です。たとえば、 |
IS_ALIAS |
VARCHAR2(1) |
この領域が、正式な管理領域として認められている領域の別名である場合は |
NUM_STREETS |
NUMBER |
この領域内の通りの番号。(省略可能) |
GC_COUNTRY_PROFILE表には、ジオコーダで使用する国プロファイルの情報が格納されます。この情報には、行政区域の階層定義、言語、およびデータ表とそれらの索引によって使用される表名の接尾辞が含まれます。この表には、サポートされている国ごとに行が1つ含まれ、表11-9に示す列があります。
表11-9 GC_COUNTRY_PROFILE表
列名 | データ型 | 説明 |
---|---|---|
COUNTRY_NAME |
VARCHAR2(60) |
国名。(必須) |
COUNTRY_CODE_3 |
VARCHAR2(3) |
3文字のISO国コード。(必須) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
2文字のISO国コード。(必須) |
LANG_CODE_1 |
VARCHAR2(3) |
3文字のISO各国語コード。一部の国では、言語が複数あることがあります(その場合は、LANG_CODE_2やその他のLANG_CODE_nなどの列にも値が入ります)。(必須) |
LANG_CODE_2 |
VARCHAR2(3) |
3文字のISO各国語コード。(省略可能) |
LANG_CODE_3 |
VARCHAR2(3) |
3文字のISO各国語コード。(省略可能) |
LANG_CODE_4 |
VARCHAR2(3) |
3文字のISO各国語コード。(省略可能) |
NUMBER_ADMIN_LEVELS |
NUMBER(1) |
管理階層レベルの数。1つの国には、1から7(最大から最小)の最大7つの管理レベルを設定できます。最高レベルの領域(国)は、レベル1です。米国の場合の管理階層は、レベル1が国、レベル2が州、レベル3が郡、レベル4が市です。(必須) |
SETTLEMENT_LEVEL |
NUMBER(1) |
Settlementの管理階層レベル。これは、住所処理で使用する最下位の領域レベルです。米国の場合は市レベルで、ヨーロッパの場合は、通常、市の小区域(レベル5)です。(必須) |
MUNICIPALITY_LEVEL |
NUMBER(1) |
Municipalityの管理階層レベル。これは、住所処理で使用する下から2番目の領域レベルです。米国の場合は郡(レベル3)で、ヨーロッパの場合は、通常、市(レベル4)です。(省略可能) |
REGION_LEVEL |
NUMBER(1) |
Regionの行政レベルで、Municipalityレベルより1つ上のレベルです。米国の場合、これは州または住所処理で使用する下から3番目の領域レベル(レベル2)で、ヨーロッパの場合、これは認められている国の小区域(レベル2またはレベル3)です。(省略可能) |
SETTLEMENT_IS_OPTIONAL |
VARCHAR2(1) |
住所データでSettlement情報がオプションの場合は |
MUNICIPALITY_IS_OPTIONAL |
VARCHAR2(1) |
住所データでMunicipality情報がオプションの場合は |
REGION_IS_OPTIONAL |
VARCHAR2(1) |
住所データでRegion情報がオプションの場合は |
POSTCODE_IN_SETTLEMENT |
VARCHAR(1) |
各郵便番号が1つのSettlement領域内のみに含まれることが必要な場合は |
SETTLEMENT_AS_CITY |
VARCHAR(1) |
市の名前によってMunicipalityとSettlementの両方が識別できる場合は |
CACHED_ADMIN_AREA_LEVEL |
NUMBER |
(将来使用するために予約済) |
GC_TABLE_SUFFIX |
VARCHAR2(5) |
GC_*データ表の国を識別する表名の接尾辞。たとえば、GC_TABLE_SUFFIXの値が |
CENTER_LONG |
NUMBER |
領域の中心の経度値。(省略可能) |
CENTER_LAT |
NUMBER |
領域の中心の緯度値。(省略可能) |
SEPARATE_PREFIX |
VARCHAR2(1) |
通りの名前の接頭辞が通りの名前とは別の語になる場合は |
SEPARATE_SUFFIX |
VARCHAR2(1) |
通りの名前の接尾辞が通りの名前とは別の語になる場合は |
SEPARATE_STYPE |
VARCHAR2(1) |
通りの種類が通りの名前とは別の語になる場合は |
AREA_ID |
NUMBER |
現在、Oracleでは使用していません。(省略可能) |
VERSION |
VARCHAR2(10) |
データのバージョン。最初のバージョンは、 |
GC_INTERSECTION_<接尾辞>表(たとえば、GC_INTERSECTION_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の道路の交差点の情報が格納されます。交差点とは、複数の道路が出会うまたは交差する場所のことです。この表に含まれる列を、表11-10に示します。
表11-10 GC_INTERSECTION_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
ROAD_ID_1 |
NUMBER |
交差点に位置する1つ目の道路のID番号。(必須) |
ROAD_SEGMENT_ID_1 |
NUMBER |
交差点に位置する1つ目の道路の道路セグメントのID番号。(必須) |
ROAD_ID_2 |
NUMBER |
交差点に位置する2つ目の道路のID番号。(必須) |
ROAD_SEGMENT_ID_2 |
NUMBER |
交差点に位置する2つ目の道路の道路セグメントのID番号。(必須) |
INTS_LONG |
NUMBER |
交差点の経度値。(必須) |
INTS_LAT |
NUMBER |
交差点の緯度値。(必須) |
HOUSE_NUMBER |
NUMBER |
交差点の住居番号の先頭の数字の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)(必須) |
HOUSE_NUMBER_2 |
VARCHAR2(10) |
交差点の住居番号の2番目の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)(必須) |
SIDE |
VARCHAR2(1) |
交差点にある家屋が位置する通りの側。可能な値は |
COUNTRY_CODE_2 |
VARCHAR2(2) |
交差点にある家屋が属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
GC_PARSER_PROFILES表には、通常、住所で検出されたキーワードに関する情報が格納されます。ジオコーダではキーワードを使用して、住居番号、道路名、市の名前、州の名前、郵便番号などの住所フィールドを識別します。キーワードには、通りの種類(road、street、drive、avenueなど)または通りの接頭辞または接尾辞(north、south、east、westなど)を指定できます。この表に含まれる列を、表11-11に示します。
表11-11 GC_PARSER_PROFILES表
列名 | データ型 | 説明 |
---|---|---|
COUNTRY_CODE |
VARCHAR2(2) |
キーワードの国の2文字のISO国コード。(必須) |
KEYWORDS |
SDO_KEYWORDARRAY |
特定の住所フィールドのキーワードの単一配列。配列には、同じ意味で使用できる単語や単語の集まりおよび短縮形を含めることができます(たとえば、United States of America、USAおよび United Statesはすべて米国を指します)。この配列の最初の単語は、キーワードの公式なフル・ネーム(ある場合)である必要があります。米国では、住所を解析する際に400を超えるキーワードが使用されます。次に、米国データ・セットからのキーワード配列およびキーワードのいくつかの例を示しますが、各行に格納されるのは単一のSDO_KEYWORDARRAYオブジェクトのみです。 SDO_KEYWORDARRAY( 'UNITED STATES OF AMERICA','US', 'USA', 'UNITED STATES', 'U.S.A.', 'U.S.') SDO_KEYWORDARRAY('AVENUE','AV', 'AVE', 'AVEN', 'AVENU', 'AVN', 'AVNUE', 'AV.','AVE.') SDO_KEYWORDARRAY('40TH', 'FORTIETH') SDO_KEYWORDARRAY('NEW YORK','NY') SDO_KEYWORDARRAY('LIBRARY') |
OUTPUT_KEYWORD |
VARCHAR2(2000) |
住所フィールドを表すためにジオコーダ・データで使用されるキーワード。これは、キーワード配列で使用されるキーワードのいずれかと同じである必要があります。出力キーワードはジオコーディング・データ表に格納されている住所とユーザーの入力を一致させるために使用されます。たとえば、出力キーワード
|
SECTION_LABEL |
VARCHAR2(30) |
KEYWORDS列およびOUTPUT_KEYWORD列に表示されるキーワードのタイプを識別するために使用されるラベル。複数の異なるセクション・ラベルがありますが、各行の単一のセクション・ラベルのみがキーワードのタイプを識別するのに使用されます。 COUNTRY_NAME: 国名を表すために使用されるキーワードを識別します。 LOCALITY_KEYWORD_DICTIONARY: 位置(市区町村、都道府県、州など)にある単語を標準化された形式の単語に置き換えるために使用されるキーワードを識別します。たとえば、SaintがStに置き換えられると、市の名前Saint ThomasおよびSt. ThomasはSt Thomasに標準化され、データベースに格納されます。 PLACE_NAME_KEYWORD: レストランやホテルなどの対象点(POI)の名前のキーワードを識別します。 REGION_LIST: NY、New York、NH、New Hampshireなど、地域の既知の名前であるキーワードを識別します。識別された地域は、住所処理で使用する下から3番目の領域レベルまたは3番目に小さい領域に属する行政区域である必要があります。米国の場合、これは州レベルです(最下位の領域レベルまたは最小の領域は市レベルです)。 SECOND_UNIT_KEYWORD: Floor、#、Suite、Apartmentなど、2番目の単位の説明で使用するキーワードを識別します。 STREET_KEYWORD_DICTIONARY: (40THやFortiethなど)通りの名前の通りの種類以外のキーワードを標準化された形式に置き換えるために使用するキーワードを識別します。 STREET_PREFIX_KEYWORD: South、North、West、Eastなど、通りの名前の接頭辞のキーワードを識別します。 STREET_TYPE_KEYWORD: Road、Street、Driveなど、通りの種類のキーワードを識別します。 IN_LINE_STREET_TYPE_KEYWORD: ドイツの通りの名前Steinstrasseのstrasseなど、通りの名前にアタッチされている通りの種類のキーワードを識別します。 |
POSITION |
VARCHAR2(1) |
通り名に対して相対的な、キーワードの位置。これは、キーワードを実際の通りの名前の前に配置する( |
SEPARATENESS |
VARCHAR2(1) |
キーワードが通りの名前と別になるかどうかを示します。キーワードは分離できる場合と( |
GC_PARSER_PROFILEAFS表には、住所形式のXML定義が格納されます。XML文字列では、特定の国の各住所形式を記述します。Oracle Geocoder 10g以前では、J2EEジオコーダはこの表のかわりにcountry_name.pprファイルを使用します。country_name.pprファイルの内容はADDRESS_FORMAT_STRING属性の内容と同じです。この表に含まれる列を、表11-12に示します。
表11-12 GC_PARSER_PROFILEAFS表
列名 | データ型 | 説明 |
---|---|---|
COUNTRY_CODE |
VARCHAR2(2) |
国の2文字のISO国コード。(必須) |
ADDRESS_FORMAT_STRING |
CLOB |
COUNTRY_CODE列で指定した国の住所形式を記述するXML文字列。(例11-4では、米国の住所形式のXML定義を示し、「ADDRESS_FORMAT_STRINGの説明」では、米国の住所形式の定義で使用される要素について説明します。) |
例11-4に、米国の住所形式のADDRESS_FORMAT_STRING定義を示します。
例11-4 米国の住所形式のXML定義
<address_format unit_separator="," replace_hyphen="true"> <address_line> <place_name /> </address_line> <address_line> <street_address> <house_number> <format form="0*" effective="0-1" output="$" /> <format form="0*1*" effective="0-1" output="$"> <exception form="0*TH" /> <exception form="0*ST" /> <exception form="0*2ND" /> <exception form="0*3RD" /> </format> <format form="0*10*" effective="0-1" output="$" /> <format form="0*-0*" effective="0-1" output="$" /> <format form="0*.0*" effective="0-1" output="$" /> <format form="0* 0*/0*" effective="0-1" output="$" /> </house_number> <street_name> <prefix /> <base_name /> <suffix /> <street_type /> <special_format> <format form="1* HWY 0*" effective="7-8" addon_effective="0-1" addon_output="$ HWY"/> <format form="1* HIGHWAY 0*" effective="11-12" addon_effective="0-1" addon_output="$ HWY"/> <format form="1* HWY-0*" effective="7-8" addon_effective="0-1" addon_output="$ HWY"/> <format form="1* HIGHWAY-0*" effective="11-12" addon_effective="0-1" addon_output="$ HWY"/> <format form="HWY 0*" effective="4-5" addon_output="HWY" /> <format form="HIGHWAY 0*" effective="8-9" addon_output="HWY" /> <format form="ROUTE 0*" effective="6-7" addon_output="RT" /> <format form="I 0*" effective="2-3" addon_output="I" /> <format form="11 0*" effective="3-4" addon_effective="0-1" /> <format form="I0*" effective="1-2" addon_output="I" /> <format form="I-0*" effective="2-3" addon_output="I" /> <format form="11-0*" effective="3-4" addon_effective="0-1" /> <format form="ROUTE-0*" effective="6-7" addon_output="RT" /> <format form="US0*" effective="2-3" addon_output="US" /> <format form="HWY-0*" effective="2-3" addon_output="US" /> <format form="HIGHWAY-0*" effective="8-9" addon_output="HWY" /> </special_format> </street_name> <second_unit> <special_format> <format form="# 0*" effective="2-3" output="APT $" /> <format form="#0*" effective="1-2" output="APT $" /> </special_format> </second_unit> </street_address> </address_line> <address_line> <po_box> <format form="PO BOX 0*" effective="7-8" /> <format form="P.O. BOX 0*" effective="9-10" /> <format form="PO 0*" effective="3-4" /> <format form="P.O. 0*" effective="5-6" /> <format form="POBOX 0*" effective="6-7" /> </po_box> </address_line> <address_line> <city optional="no" /> <region optional="no" order="1" /> <postal_code> <format form="00000" effective="0-4" /> <format form="00000-0000" effective="0-4" addon_effective="6-9" /> <format form="00000 0000" effective="0-4" addon_effective="6-9" /> </postal_code> </address_line> </address_format>
GC_PARSER_PROFILEAFS表のADDRESS_FORMAT_STRING列には、有効な住所における住所フィールドの形式とそれらの位置指定が記述されます。通常、住所は複数の住所行で記述されるため、住所形式文字列は住所行で編成されます。
住所パーサーは、GC_PARSER_PROFILES表に定義されている各住所フィールドのキーワード定義と組み合せて、XML住所形式で定義された形式の説明を使用し、入力された住所を解析して個々の住所フィールドを識別します。
<address_format>要素
<address_format>
要素には、unit_separator
属性とreplace_hyphen
属性が含まれます。unit_separator
属性は、格納されたデータのフィールドを区切るために使用されます。デフォルトでは、これはカンマ(unit_separator=","
)です。replace_hyphen
属性は、ユーザーの入力のすべてのハイフンを空白に置き換えるかどうかを指定します。デフォルトでは、trueに設定されます(replace_hyphen="true"
) (つまり、データ表のすべての名前にはハイフンのかわりに空白が含まれている必要があります)。
replace_hyphen="true"
の場合、ハイフンを含むデータ表の行政区域の名前は、replace_hyphen="true"
の場合のジオコーディング時に照合されません(ただし、ハイフンを含むこれらの区域名は、GC_AREA表のREAL_NAME列に配置され、ジオコード結果の行政区域の名前として戻すことができます)。ただし、ハイフンを含むGC_ROAD表のNAME列の道路名は、ジオコーディング時に照合されますが、照合のパフォーマンスの低下が予想されます。
<address_line>要素
XML住所形式文字列の各<address_line>
要素は、住所行の形式を説明します。各<address_line>
要素には、通りの住所、市、州(地域または都道府県)、郵便番号など、個々の住所フィールドを説明する1つ以上の子要素を指定できます。これらの住所フィールドの要素は、住所フィールドが有効な住所に表示される順序で表示されます。住所フィールドが必須の場合、住所フィールド要素のoptional
属性は、"no"
に設定されます。デフォルトでは、住所フィールドの要素はオプションです。
<format>要素
住居番号、特別な通りの名前、郵便箱および郵便番号の要素の形式の説明は、単一または複数の<format>
要素で指定されます。各<format>
要素は、特定の住所フィールドの有効なレイアウトおよび値の範囲を指定します。次の例では、特別な通りの名前を定義するために使用される形式について説明します。
<format form="1* HWY 0*" effective="7-8" output="$" addon_effective="0-1" addon_output="$ HIGHWAY" />
form
属性は、正規表現に類似した文字列を使用して形式を説明します(1
は任意のアルファベット文字を表し、0
は任意の数字を表し、2
は任意のアルファベット文字または任意の数字を表します。1*
はすべてアルファベット文字で構成される文字列を指定し、0*
はすべて数字で構成される文字列を指定し、2*
は数字とアルファベット文字の任意の組合せで構成される文字列を指定します)。他のすべてのシンボルはそれ自身を表します。
form
属性によって指定されたパターンに一致するすべての文字列は、その(親)住所フィールドの有効な文字列とみなされます。こうした有効な文字列は、属性effective
およびaddon_effective
によって指定されたセグメントに分割できます。effective属性は、住所文字列のより重要なプライマリの部分を指定し、addon_effective属性は、住所文字列のセカンダリの部分を指定します。
effective
属性は、form
属性の終了記述子の開始位置および終了位置を使用して、完全なパターンのサブストリングを指定します。前述の例のeffective="7-8"
では、(位置0から数えて)位置7で開始し位置8で終了するサブストリング(form
属性の最後で、0*
によって定義されたサブストリング)を取得します。
addon_effective
属性は、form
属性の開始記述子の開始位置および終了位置を使用して、完全なパターンのサブストリングを指定します。前述の例のaddon_effective="0-1"
では、(位置0から数えて)位置0で開始し位置1で終了するサブストリング(form
属性の最初で、1*
によって定義されたサブストリング)を取得します。
output
属性およびaddon_output
属性は、それぞれeffective
属性およびaddon_effective
属性によって指定されたセグメントの住所文字列の出力形式を指定します。これらの出力形式は、住所の照合時に使用されます。シンボル$
は一致する文字列を表し、その他のシンボルはそれ自身を表します。前述の例は、次のとおりです。
output="$"
の$
は、effective
属性で一致したサブストリングを表します。
addon_output="$ HIGHWAY"
の$ HIGHWAY
は、addon_effective
属性で一致したサブストリングを表し、空白の後に単語HIGHWAYが続きます。
前述の例の<format>
要素を使用すると、form="1* HWY 0*"
の場合、入力文字列'STATE HWY 580'は、effective=580
、output=580
、addon_effective=STATE
およびaddon_output=STATE HIGHWAY
となります。
<format>
要素には、<exception>
要素を含めることもできます。<exception>
要素は、有効な形式であるが、住所フィールドから除外する必要がある文字列を指定します。たとえば、有効な数値0*1*
(任意の数字の次に任意のアルファベット文字が続く)を含む<house_number>
要素で、<exception form="0*TH" />
を指定した場合、数字を含む(または含まない)、THで終わる住居番号はすべて除外する必要があることを意味します。
GC_POI_<接尾辞>表(たとえば、GC_POI_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の対象点(POI)情報が格納されます。POIには、空港、記念碑、公園などの機能が含まれます。この表には、対象点ごとに1つ以上の行が含まれます。たとえば、1つのPOIに関連付けられているSettlementが複数ある場合は、そのPOIに対して複数行を格納できます。GC_POI_<接尾辞>表に含まれる列を、表11-13に示します。
表11-13 GC_POI_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
POI_ID |
NUMBER |
POIのID番号。(必須) |
POI_NAME |
VARCHAR2(64) |
POIの名前。(必須) |
LANG_CODE |
VARCHAR2(3) |
POI名に使用する言語の、3文字のISO各国語コード。(必須) |
FEATURE_CODE |
NUMBER |
POIのフィーチャ・コード(データ・ベンダーがカテゴリ別にPOIを分類している場合)。(省略可能) |
HOUSE_NUMBER |
VARCHAR2(10) |
POIの住居番号(数字以外の文字を含むことも可能)。(必須) |
STREET_NAME |
VARCHAR2(80) |
POIの道路の名前。(必須) |
SETTLEMENT_ID |
NUMBER(10) |
POIが属するSettlementのID番号。(POIがSettlementに関連付けられている場合は必須) |
MUNICIPALITY_ID |
NUMBER(10) |
POIが属するMunicipalityのID番号。(POIがMunicipalityに関連付けられている場合は必須) |
REGION_ID |
NUMBER(10) |
POIが属するRegionのID番号。(POIがRegionに関連付けられている場合は必須) |
SETTLEMENT_NAME |
VARCHAR2(64) |
POIが属するSettlementの名前。(POIがSettlementに関連付けられている場合は必須) |
MUNICIPALITY_NAME |
VARCHAR2(64) |
POIが属するMunicipalityの名前。(POIがMunicipalityに関連付けられている場合は必須) |
REGION_NAME |
VARCHAR2(64) |
POIが属するRegionの名前。(POIがRegionに関連付けられている場合は必須) |
POSTAL_CODE |
VARCHAR2(16) |
POIの郵便番号。(必須) |
VANITY_CITY |
VARCHAR2(35) |
一般的にPOIに関連付けられている市の名前(その市が、POIが含まれる実際の市とは異なる場合)。たとえば、London Heathrow空港は、実際にはグレーター・ロンドンの一部のHayesという町にありますが、この空港は、一般的にLondonのみに関連付けられる傾向があります。このような場合、VANITY_CITYの値は |
ROAD_SEGMENT_ID |
NUMBER |
POIが位置する道路セグメントのID。(必須) |
SIDE |
VARCHAR2(1) |
POIが位置する通りの側。可能な値は |
PERCENT |
NUMBER |
道路に対するPOIの位置の割合値。これは、通りセグメントの開始点からPOIまでの距離を通りセグメントの長さで除算して求められます。(必須) |
TELEPHONE_NUMBER |
VARCHAR2(20) |
POIの電話番号。(省略可能) |
LOC_LONG |
NUMBER |
POIの経度値。(必須) |
LOC_LAT |
NUMBER |
POIの緯度値。(必須) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
POIが属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
郵便番号が住所形式で使用される場合、GC_POSTAL_CODE_<接尾辞>表(たとえば、GC_POSTAL_CODE_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の郵便番号情報が格納されます。この表には、郵便番号ごとに1つ以上の行が含まれます(1つの郵便番号に関連付けられているSettlementが複数ある場合は、その郵便番号に対して複数行を格納できます)。GC_POSTAL_CODE_<接尾辞>表に含まれる列を、表11-14に示します。
表11-14 GC_POSTAL_CODE_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
POSTAL_CODE |
VARCHAR2(16) |
郵便番号の領域の郵便番号。(必須) |
SETTLEMENT_NAME |
VARCHAR2(64) |
郵便番号が属するSettlementの名前。(郵便番号がSettlementに関連付けられている場合は必須) |
MUNICIPALITY_NAME |
VARCHAR2(64) |
郵便番号が属するMunicipalityの名前。(郵便番号がMunicipalityに関連付けられている場合は必須) |
REGION_NAME |
VARCHAR2(64) |
郵便番号が属するRegionの名前。(郵便番号がRegionに関連付けられている場合は必須) |
LANG_CODE |
VARCHAR2(3) |
領域に関連付けられている言語の、3文字のISO各国語コード。(必須) |
SETTLEMENT_ID |
NUMBER(10) |
郵便番号が属するSettlementのID番号。(郵便番号がSettlementに関連付けられている場合は必須) |
MUNICIPALITY_ID |
NUMBER(10) |
郵便番号が属するMunicipalityのID番号。(郵便番号がMunicipalityに関連付けられている場合は必須) |
REGION_ID |
NUMBER(10) |
郵便番号が属するRegionのID番号。(郵便番号がRegionに関連付けられている場合は必須) |
CENTER_LONG |
NUMBER |
郵便番号の領域の中心の経度値。中心(経度、緯度)値は、中心に最も近い道路セグメントの開始点または終了点(どちらか近い方の点)に設定されます。CENTER_LONG値およびCENTER_LAT値は、正しく設定することをお薦めします。これらの値が設定されていない場合、領域をジオコードして得られる経度と緯度の値は、(0,0)になります。(省略可能) |
CENTER_LAT |
NUMBER |
領域の中心の緯度値。(CENTER_LONG列の説明を参照)。(省略可能) |
ROAD_SEGMENT_ID |
NUMBER(10) |
領域の中心が設定される道路セグメントのID。ジオコーダをOracle Spatial and Graphルーティング・エンジン(「ルーティング・エンジン」を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、0 (ゼロ)以外の任意の値に設定できますが、NULLにはできません)。(必須) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
領域が属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
NUM_STREETS |
NUMBER |
この郵便番号の領域内の通りの番号。(省略可能) |
GC_ROAD_<接尾辞>表(たとえば、GC_ROAD_US)には、その表名の接尾辞に関連付けられた国の道路情報が格納されます。道路は、同じSettlement領域内の同じ名前の道路セグメントの集合であり、道路セグメントは「GC_ROAD_SEGMENT_<接尾辞>表」で定義されています。GC_ROAD_<接尾辞>表には、道路ごとに1つ以上の行が含まれます。(たとえば、1つの道路に関連付けられているSettlementが複数ある場合は、その道路に対して複数行を格納できます。)GC_ROAD_<接尾辞>表に含まれる列を、表11-15に示します。
表11-15 GC_ROAD_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
ROAD_ID |
NUMBER |
道路のID番号。(必須) |
SETTLEMENT_ID |
NUMBER(10) |
道路が属するSettlementのID番号。(道路がSettlementに関連付けられている場合は必須) |
MUNICIPALITY_ID |
NUMBER(10) |
道路が属するMunicipalityのID番号。(道路がMunicipalityに関連付けられている場合は必須) |
PARENT_AREA_ID |
NUMBER(10) |
道路が属するMunicipalityの親領域のID番号。(道路が親領域に関連付けられている場合は必須) |
LANG_CODE |
VARCHAR2(3) |
道路名に使用する言語の、3文字のISO各国語コード。(必須) |
NAME |
VARCHAR2(64) |
道路の名前。種類、接頭辞、接尾辞がある場合は、それらも含みます。たとえば、NAMEとして |
BASE_NAME |
VARCHAR2(64) |
道路の名前。種類、接頭辞、接尾辞がある場合は、それらを除外した名前です。たとえば、NAMEが |
PREFIX |
VARCHAR2(32) |
道路名の接頭辞。たとえば、NAMEが |
SUFFIX |
VARCHAR2(32) |
道路名の接尾辞。たとえば、NAMEが |
STYPE_BEFORE |
VARCHAR2(32) |
ベース名の前に記述される通りの種類。たとえば、NAMEが |
STYPE_AFTER |
VARCHAR2(32) |
ベース名の後ろに記述される通りの種類。たとえば、NAMEが |
STYPE_ATTACHED |
VARCHAR2(1) |
通りの種類が通りの名前と同じ語に含まれる場合は |
START_HN |
NUMBER(5) |
道路上の最も小さい住居番号。指定した住居番号がこの値よりも小さい場合に戻されます。 |
CENTER_HN |
NUMBER(5) |
中心住居番号の先頭の数字の部分。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)入力された住所で住居番号が指定されていない場合に戻されます。(必須) |
END_HN |
NUMBER(5) |
道路上の最も大きい住居番号。指定した住居番号がこの値よりも大きい場合に戻されます。 |
START_HN_SIDE |
VARCHAR2(1) |
最も小さい住居番号の道路の一方の側(左側は |
CENTER_HN_SIDE |
VARCHAR2(1) |
中心住居番号の道路の一方の側(左側は |
END_HN_SIDE |
VARCHAR2(1) |
最も大きい住居番号の道路の一方の側(左側は |
START_LONG |
NUMBER |
最も小さい住居番号の経度値。 |
START_LAT |
NUMBER |
最も小さい住居番号の緯度値。 |
CENTER_LONG |
NUMBER |
中心住居番号の経度値。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)(必須) |
CENTER_LAT |
NUMBER |
中心住居番号の緯度値。(CENTER_LONG列の説明も参照。)(必須) |
END_LONG |
NUMBER |
最も大きい住居番号の経度値。 |
END_LAT |
NUMBER |
最も大きい住居番号の緯度値。 |
START_ROAD_SEG_ID |
NUMBER(5) |
道路の開始点の道路セグメントのID番号。 |
CENTER_ROAD_SEG_ID |
NUMBER(5) |
道路の中心点の道路セグメントのID番号。(必須) |
END_ROAD_SEG_ID |
NUMBER(5) |
道路の終了点の道路セグメントのID番号。 |
POSTAL_CODE |
VARCHAR2(16) |
道路の郵便番号。(必須) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
道路が属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
CENTER_HN2 |
VARCHAR2(10) |
中心住居番号の2番目の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)(必須) |
GC_ROAD_SEGMENT_<接尾辞>表(たとえば、GC_ROAD_SEGMENT_US)には、その表名の接尾辞に関連付けられた国の道路セグメント情報が格納されます。道路セグメントとは、道路に沿った2つの連続する交差点の間にある道路の部分で、交差点とは、複数の道路が出会うまたは交差する場所のことです。また、道路セグメントは、道路の開始点(または終了点)と道路に沿った最も近い交差点の間にある道路の部分でもあり、道路に沿った交差点がない場合は、道路の全長になります。GC_ROAD_SEGMENT_<接尾辞>表には、道路セグメントごとに行が1つ含まれ、表11-16に示す列があります。
表11-16 GC_ROAD_SEGMENT_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
ROAD_SEGMENT_ID |
NUMBER |
道路セグメントのID番号。(必須) |
ROAD_ID |
NUMBER |
この道路セグメントが含まれる道路のID番号。(必須) |
L_ADDR_FORMAT |
VARCHAR2(1) |
左側の住所形式。道路セグメントの左側に住居番号が1つ以上ある場合は、 |
R_ADDR_FORMAT |
VARCHAR2(1) |
右側の住所形式。道路セグメントの右側に住居番号が1つ以上ある場合は、 |
L_ADDR_SCHEME |
VARCHAR2(1) |
道路セグメントの左側の住居番号の付与方法。 |
R_ADDR_SCHEME |
VARCHAR2(1) |
道路セグメントの右側の住居番号の付与方法。 |
START_HN |
NUMBER(5) |
この道路セグメント上の最も小さい住居番号。(必須) |
END_HN |
NUMBER(5) |
この道路セグメント上の最も大きい住居番号。(必須) |
L_START_HN |
NUMBER(5) |
左側の開始住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須) |
L_END_HN |
NUMBER(5) |
左側の終了住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須) |
R_START_HN |
NUMBER(5) |
右側の開始住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須) |
R_END_HN |
NUMBER(5) |
右側の終了住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須) |
POSTAL_CODE |
VARCHAR2(16) |
道路セグメントの郵便番号。道路セグメントの左側と右側で郵便番号が異なる場合は、POSTAL_CODE列を除くすべての列の値と一致する道路セグメントの行を2つ作成します。(必須) |
GEOMETRY |
SDO_GEOMETRY |
道路セグメントを表す空間ジオメトリ・オブジェクト。(必須) |
COUNTRY_CODE_2 |
VARCHAR2(2) |
道路セグメントが属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
L_START_HN2 |
VARCHAR2(10) |
左側の開始住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(左側の開始住居番号に2番目の部分がある場合は必須) |
L_END_HN2 |
VARCHAR2(10) |
左側の終了住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(左側の終了住居番号に2番目の部分がある場合は必須) |
R_START_HN2 |
VARCHAR2(10) |
右側の開始住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(右側の開始住居番号に2番目の部分がある場合は必須) |
R_END_HN2 |
VARCHAR2(10) |
右側の終了住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(右側の終了住居番号に2番目の部分がある場合は必須) |
住居番号は、道路セグメントに沿った建物の位置を識別しやすくする住所の記述的な部分です。住居番号は、2つの要素(先頭の数字部分とそれ以外の2番目の部分)に分けられます。先頭の数字部分は、住居番号の文字列全体の最初から始まり、数字以外の最初の文字の直前で終了する(数字以外の文字がある場合)、住居番号の数字の部分です。住居番号に数字以外の文字が含まれる場合は、文字列の数字以外の最初の文字から最後の文字までが、住居番号の2番目の部分になります。たとえば、住居番号が123
の場合は、先頭の数字部分は123
で、2番目の部分はNULLですが、住居番号が123A23
の場合は、先頭の数字部分は123
で、2番目の部分はA23
です。
開始住居番号とは、道路セグメントの開始点の住居番号のことで、道路セグメントの開始点とは、道路セグメント・ジオメトリの最初の形状点です。終了住居番号とは、道路セグメントの終了点の住居番号のことで、道路セグメントの終了点とは、道路セグメント・ジオメトリの最後の形状点です。左側と右側の開始住居番号は、左側と右側の終了住居番号より大きくてもかまいません。データ表の住居番号属性は、道路セグメントに沿った建物の位置を確認する際に、これらの規則に準拠します。
ベンダーから提供される表を使用してジオコーディングを行うには、多くの表で索引を作成する必要があり、これらの索引の名前は特定の要件に従う必要があります。
例11-5に、必要な索引を作成するCREATE INDEX文の形式を示します。各文では、<suffix>で示されているすべての接尾辞を適切な文字列と置き換える(たとえば、米国の場合はUS
と置き換える)必要があることを除いて、例11-5に示すように、索引名、表名、列名、および列名の順序(複数の列に索引が付けられている場合)を使用する必要があります。この例の最初の索引は空間索引であることに注意してください。オプションで、他の有効なキーワードや句をCREATE INDEX文に含めることもできます。
例11-5 ジオコーディングを行うための表に必要な索引
CREATE INDEX idx_<suffix>_road_geom ON gc_road_segment_<suffix> (geometry) INDEXTYPE IS mdsys.spatial_index; CREATE INDEX idx_<suffix>_road_seg_rid ON gc_road_segment_<suffix> (road_id, start_hn, end_hn); CREATE INDEX idx_<suffix>_road_id ON gc_road_<suffix> (road_id); CREATE INDEX idx_<suffix>_road_setbn ON gc_road_<suffix> (settlement_id, base_name); CREATE INDEX idx_<suffix>_road_munbn ON gc_road_<suffix> (municipality_id, base_name); CREATE INDEX idx_<suffix>_road_parbn ON gc_road_<suffix> (parent_area_id, country_code_2, base_name); CREATE INDEX idx_<suffix>_road_setbnsd ON gc_road_<suffix> (settlement_id, soundex(base_name)); CREATE INDEX idx_<suffix>_road_munbnsd ON gc_road_<suffix> (municipality_id, soundex(base_name)); CREATE INDEX idx_<suffix>_road_parbnsd ON gc_road_<suffix> (parent_area_id, country_code_2, soundex(base_name)); CREATE INDEX idx_<suffix>_inters ON gc_intersection_<suffix> (country_code_2, road_id_1, road_id_2); CREATE INDEX idx_<suffix>_area_name_id ON gc_area_<suffix> (country_code_2, area_name, admin_level); CREATE INDEX idx_<suffix>_area_id_name ON gc_area_<suffix> (area_id, area_name, country_code_2); CREATE INDEX idx_<suffix>_poi_name ON gc_poi_<suffix> (country_code_2, name); CREATE INDEX idx_<suffix>_poi_setnm ON gc_poi_<suffix> (country_code_2, settlement_id, name); CREATE INDEX idx_<suffix>_poi_ munnm ON gc_poi_<suffix> (country_code_2, municipality_id, name); CREATE INDEX idx_<suffix>_poi_ regnm ON gc_poi_<suffix> (country_code_2, region_id, name); CREATE INDEX idx_<suffix>_ postcode ON gc_postal_code_<suffix> (country_code_2, postal_code); CREATE INDEX idx_<suffix>_addrpt_addr ON gc_address_point_<suffix> (road_segment_id, road_id, house_number, side);