12 住所データのジオコーディング
ジオコーディングとは、住所を空間位置(経度と緯度の座標)に関連付ける処理のことです。
ノート:
Spatial and Graphのジオコーディングは、専用デプロイメントのOracle Autonomous Databaseではサポートされていません。- ジオコーディングの概念
このトピックでは、Spatial and Graphのジオコーディング機能を使用する前に理解しておく必要がある概念について説明します。 - ジオコーディングのデータ型
このトピックでは、ジオコーディングのファンクションおよびプロシージャ固有のデータ型について説明します。 - ジオコーディング機能の使用
Oracle Spatial and Graphのジオコーディング機能を使用するには、ジオコーディングのベンダーから提供されるデータを使用する必要があり、また、そのデータは、Oracle Spatial and Graphのジオコーディング機能でサポートされる形式である必要があります。 - 場所名からのジオコーディング
場所の名前(対象点)はわかっていても、その位置の詳細情報がわからない場合は、入力パラメータのplacename
およびcountry
からSDO_GEO_ADDRオブジェクトを作成するPL/SQLファンクションを作成できます。 - ジオコーディングのデータ構造
Oracleでは、ジオコーディングに次の表が使用されます。 - プロファイル表のインストール
通常、Oracle Geocoderプロファイル表は、データ・プロバイダから提供されます。 - ジオコーディング・サービス(XML API)の使用
SQL APIの他に、Oracle Spatial and Graphではジオコーディング・サービスのXML APIも提供され、これを使用して住所をジオコードできます。
親トピック: 空間Webサービス
12.1 ジオコーディングの概念
このトピックでは、Spatial and Graphのジオコーディング機能を使用する前に理解しておく必要がある概念について説明します。
12.1.1 住所の表現
ジオコードする住所は、形式化された住所または形式化されていない住所のいずれかとして表現できます。
形式化された住所は、住所の様々な部分に対する一連の属性で記述されます。住所には、表12-1に示す属性の一部またはすべてを含めることができます。
表12-1 正式な住所表現の属性
住所の属性 | 説明 |
---|---|
Name |
場所の名前(オプション)。 |
Intersecting street |
交差する通りの名前(オプション)。 |
Street |
通りの住所(家やビルの番号を含む)、通りの名前、通りの種類(Street、Road、Blvdなど)および他の情報。 今回のリリースでは、通り名の最初の4文字がジオコーディング・データ内の通り名と一致しないと、一致する可能性がある通り名として認識されません。 |
Settlement |
住所が属する最低レベルの行政区域。ほとんどの場合、これは市です。ヨーロッパの一部の国では、Settlementが大都市の一部の区域である可能性があります。この場合、その大都市はMunicipalityになります。 |
Municipality |
Settlementより1つ上の行政区域。Municipalityは米国の住所には使用されません。ヨーロッパの国では、市にSettlementが含まれ、その市がMunicipalityになります。 |
Region |
Municipality(存在する場合)より1つ上の行政区域、Municipalityが存在しない場合はSettlementより1つ上の行政区域。米国ではRegionは州ですが、他の一部の国ではRegionは県です。 |
Postal code |
郵便番号(行政区域情報が提供されている場合はオプション)。米国では、郵便番号は5桁です。 |
Postal add-on code |
郵便番号に付随する文字列。米国では通常、Postal add-on codeは「5-4」形式で指定される9桁の郵便番号の末尾4桁の番号を示します。 |
Country |
国名またはISOの国コード。 |
形式化された住所は、SDO_GEO_ADDRデータ型を使用して指定されます(「SDO_GEO_ADDR型」を参照)。
形式化されていない住所は、該当する国の住所形式に情報が含まれる行で記述されます。住所の行には、ジオコーディングに必要な情報を含める必要があります。また、ジオコーディングに必要ない情報(処理されていない住所内の一般的な情報)が含まれる場合もあります。形式化されていない住所は、文字列の配列として格納されます。たとえば、住所が「22 Monument Square」や「Concord, MA 01742」などの文字列で構成される場合があります。
形式化されていない住所は、SDO_KEYWORDARRAYデータ型を使用して指定されます(「SDO_KEYWORDARRAY型」を参照)。
親トピック: ジオコーディングの概念
12.1.2 一致モード
ジオコーディング操作の一致モードは、入力された住所の属性が、ジオコーディングに使用されているデータとどの程度一致する必要があるかを決定します。入力された住所では、同じものが異なる方法で表現されていてもかまいません(Streetと短縮形のStなど)。また、小さい間違いが含まれてもかまいません(通りの住所と市の名前が正しく、その市にその通りの住所が1つしか存在しない場合に、郵便番号を間違えるなど)。
入力された住所とジオコーディングに使用されるデータが完全に一致しないと、ジオコーディングが実行されないように要求できます。または、一部の属性に対して、入力された住所にある程度の不一致または誤りが含まれている場合でもジオコーディングが実行されるように、要件を緩和することもできます。表12-2に、一致モードとその意味を示します。この表の値は、SDO_GEO_ADDRデータ型(「SDO_GEO_ADDR型」を参照)のMatchMode
属性およびジオコーディング・ファンクションまたはプロシージャのmatch_mode
パラメータに使用します。
表12-2 ジオコーディング操作の一致モード
一致モード | 説明 |
---|---|
EXACT |
入力された住所のすべての属性が、ジオコーディングに使用されるデータと一致する必要があります。ただし、家やビルの番号、通りのベース名、通りの種類、通りの接頭辞および通りの接尾辞のいずれもジオコーディング・データと一致しない場合、郵便番号、市や町の名前(Settlement)、州の名前の順で最初に一致した位置が戻されます。たとえば、通りの名前が正しくない場合でも有効な郵便番号が指定されている場合は、その郵便番号の位置が戻されます。 |
RELAX_STREET_TYPE |
通りの種類が、ジオコーディングに使用されるデータと異なっていてもかまいません。たとえば、ジオコーディングに使用されるデータにMain Stが含まれている場合、Main Streetも一致します。同様に、該当する区域にMain BlvdおよびMainという名前の他の通りが存在しない場合は、Main Blvdも一致します。 |
RELAX_POI_NAME |
対象点の名前が、ジオコーディングに使用されるデータと一致する必要がありません。たとえば、Jones State Park がジオコーディングに使用されるデータに含まれる場合、そのデータに類似した名前または他に一致する名前がなければ、Jones State Pk およびJones Park も一致します。 |
RELAX_HOUSE_NUMBER |
家やビルの番号および通りの種類が、ジオコーディングに使用されるデータと異なっていてもかまいません。たとえば、123 Main St がジオコーディングに使用されるデータに含まれている場合、データに類似した名前または他に一致する名前がなければ、123 Main Lane および124 Main St も一致します。 |
RELAX_BASE_NAME |
通りのベース名、家やビルの番号および通りの種類が、ジオコーディングに使用されるデータと異なっていてもかまいません。たとえば、Pleasant Valley という通りのベース名が、ジオコーディングに使用されるデータに含まれている場合、データに類似した名前または他に一致する名前がなければ、Pleasant Vale も一致します。 |
RELAX_POSTAL_CODE |
郵便番号(提供されている場合)、通りのベース名、家やビルの番号および通りの種類が、ジオコーディングで使用されるデータと異なっていてもかまいません。 |
RELAX_BUILTUP_AREA |
住所が、同じ郡内であれば、指定された市の外側であってもかまいません。このモードには、RELAX_POSTAL_CODEの説明も当てはまります。 |
RELAX_ALL |
RELAX_BUILTUP_AREAと同じです。 |
DEFAULT |
RELAX_POSTAL_CODEと同じです。 |
親トピック: ジオコーディングの概念
12.1.3 一致コード
一致コードは、入力された住所のどの属性がジオコーディングに使用されるデータと一致したかを示す番号です。一致コードは、出力されるSDO_GEO_ADDRオブジェクトのMatchCode
属性に格納されます(「SDO_GEO_ADDR型」を参照)。
表12-3に、一致コードのすべての値を示します。
表12-3 ジオコーディング操作の一致コード
一致コード | 説明 |
---|---|
1 |
完全に一致しています。市の名前、郵便番号、通りのベース名、通りの種類(該当する場合は、接尾辞または接頭辞(あるいはその両方)も含む)および家またはビルの番号が、ジオコーディングに使用されるデータと一致しています。 |
2 |
市の名前、郵便番号、通りのベース名、および家またはビルの番号がジオコーディングに使用されるデータと一致していますが、通りの種類、接尾辞または接頭辞が一致していません。 |
3 |
市の名前、郵便番号および通りのベース名がジオコーディングに使用されるデータと一致していますが、家またはビルの番号が一致していません。 |
4 |
市の名前および郵便番号がジオコーディングに使用されるデータと一致していますが、通りの住所が一致していません。 |
10 |
市の名前がジオコーディングに使用されるデータと一致していますが、郵便番号が一致していません。 |
11 |
郵便番号がジオコーディングに使用されているデータと一致していますが、市の名前が一致していません。 |
12 |
地域はジオコーダ・スキーマのデータと一致しますが、都市名および郵便番号は一致しません。 |
親トピック: ジオコーディングの概念
12.1.4 出力されたジオコード済住所のエラー・メッセージ
ノート:
ErrorMessage
属性(この項を参照)のかわりに、MatchVector
属性(「出力されたジオコード済住所の一致ベクトル」を参照)を使用することをお薦めします。
出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのErrorMessage
属性(「SDO_GEO_ADDR型」を参照)に、ジオコーディングに使用されるデータと一致した住所の属性を示す文字列が含まれます。ジオコーディング操作の開始前、その文字列は値???????????281C??
に設定されており、属性が一致すると、それを反映してその値が変更されます。
表12-4に、文字列内の文字位置、および各位置に対応する住所属性を示します。また、属性が一致した場合にその位置に設定される文字値も示します。
表12-4 ジオコードされた住所のエラー・メッセージの解釈
位置 | 属性 | 一致した場合の値 |
---|---|---|
1-2 |
(今後使用予定) |
?? |
3 |
住所地点 |
X |
4 |
POI名 |
O |
5 |
家またはビルの番号 |
# |
6 |
通りの接頭辞 |
E |
7 |
通りのベース名 |
N |
8 |
通りの接尾辞 |
U |
9 |
通りの種類 |
T |
10 |
補足情報 |
S |
11 |
市街地または市 |
B |
12-13 |
(予約) |
(これらの位置にある値はすべて無視されます。) |
14 |
Region |
1 |
15 |
Country |
C |
16 |
Postal code |
P |
17 |
Postal add-on code |
A |
親トピック: ジオコーディングの概念
12.1.5 出力されたジオコード済住所の一致ベクトル
出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのMatchVector
属性(「SDO_GEO_ADDR型」を参照)に、各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列が含まれます。この属性では、ErrorMessage
属性(「出力されたジオコード済住所のエラー・メッセージ」を参照)に比べて、各住所の属性の一致ステータスに関して、より正確で詳細な情報が提供されます。ジオコーディング操作の開始前、その文字列は値?????????????????
に設定されています。この文字列の各文字は、住所属性の一致ステータスを示しています。
表12-5に、文字列内の文字位置、および各位置に対応する住所属性を示します。次の表では、それぞれの文字位置の値が示す内容について説明します。
表12-5 ジオコードされた住所の一致ベクトルの解釈
位置 | 属性 |
---|---|
1-2 |
(今後使用予定) |
3 |
住所地点 |
4 |
POI名 |
5 |
家またはビルの番号 |
6 |
通りの接頭辞 |
7 |
通りのベース名 |
8 |
通りの接尾辞 |
9 |
通りの種類 |
10 |
補足情報 |
11 |
市街地または市 |
14 |
Region |
15 |
Country |
16 |
Postal code |
17 |
Postal add-on code |
表12-5の各文字位置には、次の可能な数値のいずれかを含めることができます。
-
0: 入力属性がNULL以外で、NULL以外の値に一致します。
-
1: 入力属性がNULLで、NULL値に一致します。
-
2: 入力属性がNULL以外で、異なるNULL以外の値に置き換えられます。
-
3: 入力属性がNULL以外で、NULL値に置き換えられます。
-
4: 入力属性がNULLで、NULL以外の値に置き換えられます。
親トピック: ジオコーディングの概念
12.2 ジオコーディングのデータ型
このトピックでは、ジオコーディングのファンクションおよびプロシージャ固有のデータ型について説明します。
12.2.1 SDO_GEO_ADDR型
SDO_GEO_ADDRオブジェクト型は、住所を記述するために使用されます。ジオコードされた住所がSDO_GCDRファンクションまたはSDO_GCDRプロシージャで出力された場合、SDO_GEO_ADDR型のオブジェクトとして格納されます。
表12-6に、SDO_GEO_ADDR型の属性を示します。属性が関連しない場合があることに注意してください。ジオコードされた住所の出力に使用される属性は、入力された住所の地理的な内容(特に国)によって異なります。
表12-6 SDO_GEO_ADDR型の属性
属性 | データ型 | 説明 |
---|---|---|
Id |
NUMBER |
(未使用。) |
AddressLines |
SDO_KEYWORDARRAY |
住所の行。(SDO_KEYWORDARRAY型の詳細は、「SDO_KEYWORDARRAY型」を参照してください。) |
PlaceName |
VARCHAR2(200) |
対象点(POI)の名前。(たとえば、CALIFORNIA PACIFIC MEDICAL CTR) |
StreetName |
VARCHAR2(200) |
通りの種類を含む通りの名前。例: MAIN ST |
IntersectStreet |
VARCHAR2(200) |
交差する通り。 |
SecUnit |
VARCHAR2(200) |
アパートやビルの番号などの補足情報。 |
Settlement |
VARCHAR2(200) |
住所が属する最低レベルの行政区域。(表12-1を参照) |
Municipality |
VARCHAR2(200) |
Settlementより1つ上の行政区域。(表12-1を参照してください。) |
Region |
VARCHAR2(200) |
Municipality(存在する場合)より1つ上の行政区域。Municipalityが存在しない場合はSettlementより1つ上の行政区域 (表12-1を参照してください。) |
Country |
VARCHAR2(100) |
国名またはISOの国コード。 |
PostalCode |
VARCHAR2(20) |
郵便番号(行政区域情報が提供されている場合はオプション)。米国では、郵便番号は5桁です。 |
PostalAddOnCode |
VARCHAR2(20) |
郵便番号に付随する文字列。米国では通常、Postal add-on codeは「5-4」形式で指定される9桁の郵便番号の末尾4桁の番号を示します。 |
FullPostalCode |
VARCHAR2(20) |
郵便番号と郵便付加番号を含む完全な郵便番号。 |
POBox |
VARCHAR2(100) |
私書箱番号。 |
HouseNumber |
VARCHAR2(100) |
家またはビルの番号。(たとえば、123 MAIN STの123) |
BaseName |
VARCHAR2(200) |
通りのベース名。(たとえば、123 MAIN STのMAIN) |
StreetType |
VARCHAR2(20) |
通りの種類。(たとえば、123 MAIN STのST) |
StreetTypeBefore |
VARCHAR2(1) |
(未使用。) |
StreetTypeAttached |
VARCHAR2(1) |
(未使用。) |
StreetPrefix |
VARCHAR2(20) |
通りの接頭辞。(たとえば、123 S MAIN STのS) |
StreetSuffix |
VARCHAR2(20) |
通りの接尾辞。(たとえば、123 MAIN ST NEのNE) |
Side |
VARCHAR2(1) |
道路セグメントをその方向に従って(つまり、道路セグメントの開始ノードから終了ノードに向かって)移動すると想定した場合に、家が建っている通りの側(左側は |
Percent |
NUMBER |
0から1の数値(パーセント値を求めるには100を掛けます)で、道路セグメントの方向に従って通りを移動した距離を示します。 |
EdgeID |
NUMBER |
道路区画の端のID。 |
ErrorMessage |
VARCHAR2(20) |
エラー・メッセージ(「出力されたジオコード済住所のエラー・メッセージ」を参照)。ノート: |
MatchCode |
NUMBER |
一致コード(「一致コード」を参照)。 |
MatchMode |
VARCHAR2(30) |
一致モード(「一致モード」を参照)。 |
Longitude |
NUMBER |
経度値。 |
Latitude |
NUMBER |
緯度値。 |
MatchVector |
VARCHAR2(20) |
各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列(「出力されたジオコード済住所の一致ベクトル」を参照)。 |
SDO_GEO_ADDRオブジェクト全体を戻すか、またはドット表記法を使用して属性を指定できます。例12-1に、San Francisco市庁舎の住所をジオコードする文を示します。最初の文はSDO_GEO_ADDRオブジェクト全体を戻し、残りの文はいくつかの特定の属性を戻します。
例12-1 ジオコーディング、および住所オブジェクトと特定の属性の取得
SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME') FROM DUAL; SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO -------------------------------------------------------------------------------- SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'CARLTON B GOODLETT PL', NULL, NULL, ' SAN FRANCISCO', NULL, 'CA', 'US', '94102', NULL, '94102', NULL, '1', 'CARLTON B GOODLETT', 'PL', 'F', 'F', NULL, NULL, 'L', .01, 23614360, '????#ENUT?B281CP?', 1, 'RELAX_BASE_NAME', -122.41815, 37.7784183, '????0101010??000?') SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME').StreetType FROM DUAL; SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO -------------------------------------------------------------------------------- PL SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME').Side RROM DUAL; S - L SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME').Percent FROM DUAL; SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO -------------------------------------------------------------------------------- .01 SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME').EdgeID FROM DUAL; SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO -------------------------------------------------------------------------------- 23614360 SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME').MatchCode FROM DUAL; SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO -------------------------------------------------------------------------------- 1 SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA 94102'), 'US', 'RELAX_BASE_NAME').MatchVector FROM DUAL; SDO_GCDR.GEOCODE('SC -------------------- ????0101010??000?
親トピック: ジオコーディングのデータ型
12.2.2 SDO_ADDR_ARRAY型
SDO_ADDR_ARRAY型は、住所のジオコード結果を格納するために使用されるSDO_GEO_ADDRオブジェクト(「SDO_GEO_ADDR型」を参照)のVARRAYです。ジオコーディング操作の結果、複数の住所アドレスが一致すると、複数の住所オブジェクトが戻される可能性があります。
SDO_ADDR_ARRAY型は、次のとおり定義されます。
CREATE TYPE sdo_addr_array AS VARRAY(1000) OF sdo_geo_addr;
親トピック: ジオコーディングのデータ型
12.2.3 SDO_KEYWORDARRAY型
SDO_KEYWORDARRAY型は、形式化されていない住所の住所行を格納するために使用されるVARCHAR2文字列のVARRAYです。(形式化された住所と形式化されていない住所については、「住所の表現」を参照してください。)
SDO_KEYWORDARRAY型は、次のとおり定義されます。
CREATE TYPE sdo_keywordarray AS VARRAY(10000) OF VARCHAR2(9000);
親トピック: ジオコーディングのデータ型
12.3 ジオコーディング機能の使用
Oracle Spatial and Graphのジオコーディング機能を使用するには、ジオコーディングのベンダーから提供されるデータを使用する必要があり、また、そのデータは、Oracle Spatial and Graphのジオコーディング機能でサポートされる形式である必要があります。
ジオコーディング・データを使用して住所をジオコードするには、SDO_GCDR PL/SQLパッケージ・サブプログラム(「SDO_GCDRパッケージ(ジオコーディング)」を参照)を使用します。
- SDO_GCDR.ELOC_GEOCODEファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントで作業している場合にのみ適用されます。入力パラメータに応じて、ファンクションは次のいずれかのアクションを実行します:
- 形式化された(別々のフィールドの住所部分)住所をジオコードします
- 形式化されていない(単一の文字列フィールド内の完全な住所)住所をジオコードします
- 指定された位置を逆にジオコードします
このファンクションは、出力住所をJSON形式で戻します。
- SDO_GCDR.ELOC_GEOCODE_AS_GEOMファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントで作業している場合にのみ適用されます。このファンクションは、入力パラメータに応じて、形式化された(別々のフィールドの住所部分)または形式化されていない(単一の文字列フィールドの完全な住所)住所をジオコードし、出力住所をSDO_GEOMETRYオブジェクトとして戻します。
- SDO_GCDR.GEOCODEファンクションは、形式化されていない住所をジオコードして、SDO_GEO_ADDRオブジェクトを戻します。
- SDO_GCDR.GEOCODE_ADDRファンクションは、SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、最初に一致した住所をSDO_GEO_ADDRオブジェクトとして戻します。
- SDO_GCDR.GEOCODE_ADDR_ALLファンクションは、SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、一致した住所をSDO_ADDR_ARRAYオブジェクトとして戻します。
- SDO_GCDR.GEOCODE_AS_GEOMETRYファンクションは、形式化されていない住所をジオコードして、SDO_GEOMETRYオブジェクトを戻します。
- SDO_GCDR.GEOCODE_ALLファンクションは、形式化されていない住所に関連付けられているすべての住所をジオコードし、結果をSDO_ADDR_ARRAYオブジェクト(住所オブジェクトの配列)として戻します。
- SDO_GCDR.REVERSE_GEOCODEファンクションは、空間ジオメトリ・オブジェクトと国で指定された場所を逆にジオコードし、結果をSDO_GEO_ADDRオブジェクトとして戻します。
親トピック: 住所データのジオコーディング
12.4 場所名からのジオコーディング
場所の名前(対象点)はわかっていても、その位置の詳細情報がわからない場合は、入力パラメータのplacename
およびcountry
からSDO_GEO_ADDRオブジェクトを作成するPL/SQLファンクションを作成できます。
これを例12-2に示します。この例では、create_addr_from_placename
という名前のファンクションを作成します。この例のSELECT文は、create_addr_from_placename
ファンクションで作成した住所を、SDO_GCDR.GEOCODE_ADDRファンクションを使用してジオコードしています。
例12-2 場所名と国からのジオコーディング
create or replace function create_addr_from_placename( placename varchar2, country varchar2) return sdo_geo_addr deterministic as addr sdo_geo_addr ; begin addr := sdo_geo_addr() ; addr.country := country ; addr.placename := placename ; addr.matchmode := 'default' ; return addr ; end; / SELECT sdo_gcdr.geocode_addr('SCOTT', create_addr_from_placename('CALIFORNIA PACIFIC MEDICAL CTR', 'US')) FROM DUAL;
例12-3 場所名、国および他のフィールドからのジオコーディング
いくつかの位置情報(行政区域、郵便番号など)がわかっている場合、それらの情報を指定すると、より優れたパフォーマンスが得られます。例12-3には、追加のパラメータに対応するcreate_addr_from_placename
ファンクションの別バージョンを示しています。このバージョンのファンクションをコールするには、placenameおよびcountryパラメータに実際の値を指定し、他の入力パラメータについては実際の値またはNULLを指定します。
create or replace function create_addr_from_placename( placename varchar2, city varchar2, state varchar2, postalcode varchar2, country varchar2) return sdo_geo_addr deterministic as addr sdo_geo_addr ; begin addr := sdo_geo_addr() ; addr.settlement := city ; addr.region := state ; addr.postalcode := postalcode ; addr.country := country ; addr.placename := placename ; addr.matchmode := 'default' ; return addr ; end; / SELECT sdo_gcdr.geocode_addr('SCOTT', create_addr_from_placename('CALIFORNIA PACIFIC MEDICAL CTR', 'san francisco', 'ca', null, 'US')) FROM DUAL;
親トピック: 住所データのジオコーディング
12.5 ジオコーディングのデータ構造
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_AREA_<接尾辞>表
- GC_COUNTRY_PROFILE表
- GC_INTERSECTION_<接尾辞>表
- GC_PARSER_PROFILES表
- GC_PARSER_PROFILEAFS表
- GC_POI_<接尾辞>表
- GC_POSTAL_CODE_<接尾辞>表
- GC_ROAD_<接尾辞>表
- GC_ROAD_SEGMENT_<接尾辞>表
- ジオコーディングを行うための表の索引
親トピック: 住所データのジオコーディング
12.5.1 GC_ADDRESS_POINT_<接尾辞>表と索引
GC_ADDRESS_POINT_<接尾辞>表(たとえば、GC_ADDRESS_POINT_US)には、表名接尾辞に関連付けられている国(または国のグループ)の住所の地理(経度、緯度)座標が格納されます。この表はジオコーディングにとって必須ではありません(ただし、点ベースのジオコーディングでは必須)が、この表を使用すると、ジオコーダはより正確な位置結果を生成します。スキーマで示されている場合は、自動的に使用されます。この表には、表に格納される住所ごとに行が1つ含まれ、表12-7に示す列があります。
表12-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);
親トピック: ジオコーディングのデータ構造
12.5.2 GC_AREA_<接尾辞>表
GC_AREA_<接尾辞>表(たとえば、CG_AREA_US)には、その表名の接尾辞に関連付けられた国の管理領域情報が格納されます。この表には、管理領域ごとに行が1つ含まれ、表12-8に示す列があります。
表12-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 |
この領域内の通りの番号。(オプション) |
親トピック: ジオコーディングのデータ構造
12.5.3 GC_COUNTRY_PROFILE表
GC_COUNTRY_PROFILE表には、ジオコーダで使用する国プロファイルの情報が格納されます。この情報には、行政区域の階層定義、言語、およびデータ表とそれらの索引によって使用される表名の接尾辞が含まれます。この表には、サポートされている国ごとに行が1つ含まれ、表12-9に示す列があります。
表12-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) |
データのバージョン。最初のバージョンは、 |
親トピック: ジオコーディングのデータ構造
12.5.4 GC_INTERSECTION_<接尾辞>表
GC_INTERSECTION_<接尾辞>表(たとえば、GC_INTERSECTION_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の道路の交差点の情報が格納されます。交差点とは、複数の道路が出会うまたは交差する場所のことです。この表に含まれる列を、表12-10に示します。
表12-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_<接尾辞>表」の表12-16の後に示す住居番号の説明を参照してください。)(必須) |
HOUSE_NUMBER_2 |
VARCHAR2(10) |
交差点の住居番号の2番目の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表12-16の後に示す住居番号の説明を参照してください。)(必須) |
SIDE |
VARCHAR2(1) |
交差点にある家屋が位置する通りの側。可能な値は |
COUNTRY_CODE_2 |
VARCHAR2(2) |
交差点にある家屋が属する国の2文字のISO国コード。(必須) |
PARTITION_ID |
NUMBER |
ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須) |
親トピック: ジオコーディングのデータ構造
12.5.5 GC_PARSER_PROFILES表
GC_PARSER_PROFILES表には、通常、住所で検出されたキーワードに関する情報が格納されます。ジオコーダではキーワードを使用して、住居番号、道路名、市の名前、州の名前、郵便番号などの住所フィールドを識別します。キーワードには、通りの種類(road、street、drive、avenueなど)または通りの接頭辞または接尾辞(north、south、east、westなど)を指定できます。この表に含まれる列を、表12-11に示します。
表12-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) |
キーワードが通りの名前と別になるかどうかを示します。キーワードは分離できる場合と( |
親トピック: ジオコーディングのデータ構造
12.5.6 GC_PARSER_PROFILEAFS表
GC_PARSER_PROFILEAFS表には、住所形式のXML定義が格納されます。XML文字列では、特定の国の各住所形式を記述します。Oracle Geocoder 10g以前では、J2EEジオコーダはこの表のかわりにcountry_name.pprファイルを使用します。country_name.pprファイルの内容はADDRESS_FORMAT_STRING属性の内容と同じです。この表に含まれる列を、表12-12に示します。
表12-12 GC_PARSER_PROFILEAFS表
列名 | データ型 | 説明 |
---|---|---|
COUNTRY_CODE |
VARCHAR2(2) |
国の2文字のISO国コード。(必須) |
ADDRESS_FORMAT_STRING |
CLOB |
COUNTRY_CODE列で指定した国の住所形式を記述するXML文字列。(例12-4では、米国の住所形式のXML定義を示し、「ADDRESS_FORMAT_STRINGの説明」では、米国の住所形式の定義で使用される要素について説明します。)。 |
例12-4に、米国の住所形式のADDRESS_FORMAT_STRING定義を示します。
例12-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>
12.5.6.1 ADDRESS_FORMAT_STRINGの説明
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_PARSER_PROFILEAFS表
12.5.7 GC_POI_<接尾辞>表
GC_POI_<接尾辞>表(たとえば、GC_POI_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の対象点(POI)情報が格納されます。POIには、空港、記念碑、公園などの機能が含まれます。この表には、対象点ごとに1つ以上の行が含まれます。たとえば、1つのPOIに関連付けられているSettlementが複数ある場合は、そのPOIに対して複数行を格納できます。GC_POI_<接尾辞>表に含まれる列を、表12-13に示します。
表12-13 GC_POI_<接尾辞>表
列名 | データ型 | 説明 |
---|---|---|
POI_ID |
NUMBER |
POIのID番号。(必須) |
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に設定します。(必須) |
親トピック: ジオコーディングのデータ構造
12.5.8 GC_POSTAL_CODE_<接尾辞>表
郵便番号が住所形式で使用される場合、GC_POSTAL_CODE_<接尾辞>表(たとえば、GC_POSTAL_CODE_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の郵便番号情報が格納されます。この表には、郵便番号ごとに1つ以上の行が含まれます(1つの郵便番号に関連付けられているSettlementが複数ある場合は、その郵便番号に対して複数行を格納できます)。GC_POSTAL_CODE_<接尾辞>表に含まれる列を、表12-14に示します。
表12-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 |
この郵便番号の領域内の通りの番号。(オプション) |
親トピック: ジオコーディングのデータ構造
12.5.9 GC_ROAD_<接尾辞>表
GC_ROAD_<接尾辞>表(たとえば、GC_ROAD_US)には、その表名の接尾辞に関連付けられた国の道路情報が格納されます。道路は、同じSettlement領域内の同じ名前の道路セグメントの集合であり、道路セグメントは「GC_ROAD_SEGMENT_<接尾辞>表」で定義されています。GC_ROAD_<接尾辞>表には、道路ごとに1つ以上の行が含まれます。(たとえば、1つの道路に関連付けられているSettlementが複数ある場合は、その道路に対して複数行を格納できます。)GC_ROAD_<接尾辞>表に含まれる列を、表12-15に示します。
表12-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_<接尾辞>表」の表12-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_<接尾辞>表」の表12-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_<接尾辞>表」の表12-16の後に示す住居番号の説明を参照してください。)(必須) |
親トピック: ジオコーディングのデータ構造
12.5.10 GC_ROAD_SEGMENT_<接尾辞>表
GC_ROAD_SEGMENT_<接尾辞>表(たとえば、GC_ROAD_SEGMENT_US)には、その表名の接尾辞に関連付けられた国の道路セグメント情報が格納されます。道路セグメントとは、道路に沿った2つの連続する交差点の間にある道路の部分で、交差点とは、複数の道路が出会うまたは交差する場所のことです。また、道路セグメントは、道路の開始点(または終了点)と道路に沿った最も近い交差点の間にある道路の部分でもあり、道路に沿った交差点がない場合は、道路の全長になります。GC_ROAD_SEGMENT_<接尾辞>表には、道路セグメントごとに行が1つ含まれ、表12-16に示す列があります。
表12-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
です。
開始住居番号とは、道路セグメントの開始点の住居番号のことで、道路セグメントの開始点とは、道路セグメント・ジオメトリの最初の形状点です。終了住居番号とは、道路セグメントの終了点の住居番号のことで、道路セグメントの終了点とは、道路セグメント・ジオメトリの最後の形状点です。左側と右側の開始住居番号は、左側と右側の終了住居番号より大きくてもかまいません。データ表の住居番号属性は、道路セグメントに沿った建物の位置を確認する際に、これらの規則に準拠します。
親トピック: ジオコーディングのデータ構造
12.5.11 ジオコーディングを行うための表の索引
ベンダーから提供される表を使用してジオコーディングを行うには、多くの表で索引を作成する必要があり、これらの索引の名前は特定の要件に従う必要があります。
例12-5に、必要な索引を作成するCREATE INDEX文の形式を示します。各文では、<suffix>で示されているすべての接尾辞を適切な文字列と置き換える(たとえば、米国の場合はUS
と置き換える)必要があることを除いて、例12-5に示すように、索引名、表名、列名、および列名の順序(複数の列に索引が付けられている場合)を使用する必要があります。この例の最初の索引は空間索引であることに注意してください。オプションで、他の有効なキーワードや句をCREATE INDEX文に含めることもできます。
例12-5 ジオコーディングを行うための表に必要な索引
CREATE INDEX idx_<suffix>_road_geom ON gc_road_segment_<suffix> (geometry) INDEXTYPE IS mdsys.spatial_index_v2; 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);
親トピック: ジオコーディングのデータ構造
12.6 プロファイル表のインストール
通常、Oracle Geocoderプロファイル表は、データ・プロバイダから提供されます。
データ・プロバイダのプロファイル表が利用可能であれば、ジオコーディングにはそれを使用してください。ジオコーダ・スキーマを独自に作成するユーザーに対しては、OracleのサンプルのGC_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表が用意されています(ただし、このようなOracle提供のプロファイル表をインストールする必要があるのは、プロファイル表のデータ表が提供されていない場合のみです)。
Oracle提供の表には、一部の国のパーサー・プロファイルのみ含まれています。対象となる国(または国のグループ)のプロファイルが含まれていない場合は、手動で追加する必要があります(簡単な手法として、対象となる国と住所形式が似ている国のパーサー・プロファイルをコピーし、それらのプロファイルを必要に応じて編集することもできます)。必要なパーサー・プロファイルがOracle提供の表に含まれている場合は、それをそのまま使用するか、必要に応じて更新します。サンプルの国プロファイルが提供されていない場合は、独自に追加する必要があります。
Oracle提供のプロファイル表をインストールして問い合せるには、次のステップを実行します。
親トピック: 住所データのジオコーディング
12.7 ジオコーディング・サービス(XML API)の使用
SQL APIの他に、Oracle Spatial and Graphではジオコーディング・サービスのXML APIも提供され、これを使用して住所をジオコードすることができます。
Javaジオコーダ・アプリケーション・エンジンでは、Oracle Databaseに格納されたジオコーダ・データを問い合せることによって、住所の国際標準化、ジオコーディング、およびPOIの一致が行われます。未解析の住所のサポートにより、顧客アプリケーションに柔軟性と利便性が追加されます。
このジオコーディング・サービスは、WebLogic Server環境にデプロイできるJava 2 Enterprise Edition (J2EE) Webアプリケーションとして実装されます。
図12-1に、ジオコーディング・サービスを使用する基本的なアクション・フローを示します(クライアントは、リモートのジオコーディング・サービス・インスタンスを探してジオコーディング・リクエストを送信し、ジオコーディング・サービス・インスタンスから戻されたレスポンスを処理します)。
次に、図12-1について説明します。
-
クライアントは、ジオコードする1つ以上の入力住所を含むXMLジオコーディング・リクエストを、HTTPプロトコルを使用してジオコーディング・サービスに送信します。
-
ジオコーディング・サービスは、入力リクエストを解析して、入力住所をデータベース内で検索します。
-
ジオコーディング・サービスは、ジオコードされた結果をXML形式で、HTTPプロトコルを使用してクライアントに送信します。
データベースにジオコーダ・スキーマをロードした後、それを使用する前にJ2EEジオコーダを構成する必要があります(「J2EEジオコーダのデプロイおよび構成」を参照)
12.7.1 J2EEジオコーダのデプロイおよび構成
J2EEジオコーダはジオコーディング・リクエストを処理し、レスポンスを生成します。このジオコーディング・サービスを有効にするには、Oracle WebLogic Serverを使用してgeocoder.ear.zip
ファイルをデプロイする必要があります。ジオコーディング・サービスをデプロイおよび構成するには、次のステップを実行します。
12.7.1.1 geocodercfg.xmlファイルの構成
geocodercfg.xml
ファイルの<database>
要素を編集して、ジオコーディング・データがロードされるデータベースとスキーマを指定する必要があります。geocodercfg.xml
ファイルは、ジオコーダのようこそページにある管理者リンクを介してアクセスされ、ジオコーダ・アプリケーションの$geocoder.ear/web.war/WEB-INF/config
ディレクトリに格納されています
geocodercfg.xml
ファイルの各<geocoder>
要素は、ジオコーダ・スキーマが存在するデータベースのジオコーダを定義します。<database>
要素は、ジオコーダのデータベース接続を定義します。Oracle Database 12.2では、データベース接続は、事前定義されたコンテナ・データ・ソースのJNDI名(container_ds
)を指定して定義します。データ・ソースの定義の詳細は、WebLogic Serverのドキュメント、WebLogic JDBCの構成と管理のJDBCデータ・ソースの作成に関する項を参照してください。
例12-6に、<database>
要素の定義を示します。この定義では、あらかじめ定義したコンテナ・データ・ソースのJNDI名を使用しています。
例12-6 <database>要素定義
<database container_ds="jdbc/gc_usa" load_db_parser_profiles="true" />
<database>
要素の属性は次のとおりです。
-
container_ds
は、事前定義のデータ・ソースのJNDI名を指定します。 -
load_db_parser_profiles
は、指定されたデータベース接続から住所パーサー・プロファイルをロードするかどうかを指定します。ジオコーダ・データにパーサー・プロファイル表を指定する場合、このパラメータをtrue
に設定することをお薦めします。値がtrue
の場合、住所パーサー・プロファイルはジオコーダ・スキーマからロードされ、それ以外の場合は、パーサー・プロファイルは../applications/geocoder/web/WEB-INF/parser_profiles/
<country-name>
.ppr
(たとえば、usa.ppr
)にあるアプリケーションからロードされます。
親トピック: J2EEジオコーダのデプロイおよび構成
12.7.2 ジオコーディング・リクエストのXMLスキーマ定義および例
ジオコーディング・リクエスト(HTTP GETまたはPOSTメソッド)の場合、そのリクエストには、xml_request
というパラメータがあり、その値は、リクエストのXML文書が含まれる文字列であると想定されます。入力XML文書には、ジオコードを行うために必要な入力住所が記述されます。1つのXMLリクエストには、1つ以上の入力住所を含めることができます。いくつかの国際化された住所形式は、入力住所の記述に使用できます。(また、入力XML APIでは、経度/緯度で通りの住所を指定する、逆ジオコードもサポートされています。)
ジオコーディング・リクエストのXMLスキーマ定義(XSD)は、次のとおりです。
<?xml version="1.0" encoding="UTF-8"?> <!-- Schema for an XML geocoding request that takes one or more input_locations and supports reverse geocoding using the input_location's attributes --> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:complexType name="address_lineType"> <xsd:attribute name="value" type="xsd:string" use="required"/> </xsd:complexType> <xsd:complexType name="address_listType"> <xsd:sequence> <xsd:element name="input_location" type="input_locationType" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="gdf_formType"> <xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="street" type="xsd:string"/> <xsd:attribute name="intersecting_street" type="xsd:string"/> <xsd:attribute name="builtup_area" type="xsd:string"/> <xsd:attribute name="order8_area" type="xsd:string"/> <xsd:attribute name="order2_area" type="xsd:string"/> <xsd:attribute name="order1_area" type="xsd:string"/> <xsd:attribute name="country" type="xsd:string"/> <xsd:attribute name="postal_code" type="xsd:string"/> <xsd:attribute name="postal_addon_code" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="gen_formType"> <xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="street" type="xsd:string"/> <xsd:attribute name="intersecting_street" type="xsd:string"/> <xsd:attribute name="sub_area" type="xsd:string"/> <xsd:attribute name="city" type="xsd:string"/> <xsd:attribute name="region" type="xsd:string"/> <xsd:attribute name="country" type="xsd:string"/> <xsd:attribute name="postal_code" type="xsd:string"/> <xsd:attribute name="postal_addon_code" type="xsd:string"/> </xsd:complexType> <xsd:element name="geocode_request"> <xsd:complexType> <xsd:sequence> <xsd:element name="address_list" type="address_listType"/> </xsd:sequence> <xsd:attribute name="vendor" type="xsd:string"/> </xsd:complexType> </xsd:element> <xsd:complexType name="input_addressType"> <xsd:choice> <xsd:element name="us_form1" type="us_form1Type"/> <xsd:element name="us_form2" type="us_form2Type"/> <xsd:element name="gdf_form" type="gdf_formType"/> <xsd:element name="gen_form" type="gen_formType"/> <xsd:element name="unformatted" type="unformattedType"/> </xsd:choice> <xsd:attribute name="match_mode" default="relax_postal_code"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="exact"/> <xsd:enumeration value="relax_street_type"/> <xsd:enumeration value="relax_poi_name"/> <xsd:enumeration value="relax_house_number"/> <xsd:enumeration value="relax_base_name"/> <xsd:enumeration value="relax_postal_code"/> <xsd:enumeration value="relax_builtup_area"/> <xsd:enumeration value="relax_all"/> <xsd:enumeration value="DEFAULT"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> <xsd:complexType name="input_locationType"> <xsd:sequence> <xsd:element name="input_address" type="input_addressType" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> <xsd:attribute name="country" type="xsd:string"/> <xsd:attribute name="longitude" type="xsd:string"/> <xsd:attribute name="latitude" type="xsd:string"/> <xsd:attribute name="x" type="xsd:string"/> <xsd:attribute name="y" type="xsd:string"/> <xsd:attribute name="srid" type="xsd:string"/> <xsd:attribute name="multimatch_number" type="xsd:string" default="1000"/> </xsd:complexType> <xsd:complexType name="unformattedType"> <xsd:sequence> <xsd:element name="address_line" type="address_lineType" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="us_form1Type"> <xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="street" type="xsd:string"/> <xsd:attribute name="intersecting_street" type="xsd:string"/> <xsd:attribute name="lastline" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="us_form2Type"> <xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="street" type="xsd:string"/> <xsd:attribute name="intersecting_street" type="xsd:string"/> <xsd:attribute name="city" type="xsd:string"/> <xsd:attribute name="state" type="xsd:string"/> <xsd:attribute name="zip_code" type="xsd:string"/> </xsd:complexType> </xsd:schema>
例12-7に、異なる住所形式および形式化されていない住所を使用した、3つの住所(2つの異なる実際の物理的な住所を示す)をジオコードするリクエストを示します。
例12-7 ジオコーディング・リクエスト(XML API)
<?xml version="1.0" encoding="UTF-8"?> <geocode_request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../geocode_request.xsd"> <address_list> <input_location id="1"> <input_address> <us_form2 name="Oracle" street="500 Oracle Parkway" city="Redwood City" state="CA" zip_code="94021"/> </input_address> </input_location> <input_location id="2"> <input_address> <gdf_form street="1 Oracle Drive" builtup_area="Nashua" order1_area="NH" postal_code="03062" country="US"/> </input_address> </input_location> <input_location id="3"> <input_address> <gen_form street="1 Oracle Drive" city="Nashua" region="NH" postal_code="03062" country="US"/> </input_address> </input_location> <input_location id="4"> <input_address> <unformatted country="UNITED STATES"> <address_line value="Oracle NEDC"/> <address_line value="1 Oracle drive "/> <address_line value="Nashua "/> <address_line value="NH"/> </unformatted> </input_address> </input_location> </address_list> </geocode_request>
親トピック: ジオコーディング・サービス(XML API)の使用
12.7.3 ジオコーディング・レスポンスのXMLスキーマ定義および例
ジオコーディング・レスポンスには、経度/緯度の点、一致コード、複数の一致の可能性と一致なしの表示、エラー・メッセージなど、1つ以上の標準化された住所が含まれます。
ジオコーディング・レスポンスのXMLスキーマ定義(XSD)は、次のとおりです。
<?xml version="1.0" encoding="UTF-8"?> <!-- Schema for an XML geocoding response --> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:complexType name="geocodeType"> <xsd:sequence> <xsd:element name="match" type="matchType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required"/> <xsd:attribute name="match_count" type="xsd:string"/> </xsd:complexType> <xsd:element name="geocode_response"> <xsd:complexType> <xsd:sequence> <xsd:element name="geocode" type="geocodeType" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="matchType"> <xsd:sequence> <xsd:element name="output_address" type="output_addressType"/> </xsd:sequence> <xsd:attribute name="sequence" type="xsd:string" use="required"/> <xsd:attribute name="longitude" type="xsd:string" use="required"/> <xsd:attribute name="latitude" type="xsd:string" use="required"/> <xsd:attribute name="match_code" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="0"/> <xsd:enumeration value="1"/> <xsd:enumeration value="2"/> <xsd:enumeration value="3"/> <xsd:enumeration value="4"/> <xsd:enumeration value="10"/> <xsd:enumeration value="11"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="error_message" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="output_addressType"> <xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="house_number" type="xsd:string"/> <xsd:attribute name="street" type="xsd:string"/> <xsd:attribute name="builtup_area" type="xsd:string"/> <xsd:attribute name="order1_area" type="xsd:string"/> <xsd:attribute name="order8_area" type="xsd:string"/> <xsd:attribute name="country" type="xsd:string"/> <xsd:attribute name="postal_code" type="xsd:string"/> <xsd:attribute name="postal_addon_code" type="xsd:string"/> <xsd:attribute name="side" type="xsd:string"/> <xsd:attribute name="percent" type="xsd:string"/> <xsd:attribute name="edge_id" type="xsd:string"/> </xsd:complexType> </xsd:schema>
例12-8に、「ジオコーディング・リクエストのXMLスキーマ定義および例」の例12-7のリクエストに対するレスポンスを示します。
例12-8 ジオコーディング・レスポンス(XML API)
<?xml version="1.0" encoding="UTF-8"?> <geocode_response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../geocode_response.xsd"> <geocode id="1" match_count="1"> <match sequence="0" longitude="-122.26193971893862" latitude="37.53195483966782" match_code="10" error_message="????#ENUT?B281C??"> <output_address name="" house_number="500" street="ORACLE PKY" builtup_area="REDWOOD CITY" order1_area="CA" order8_area="" country="US" postal_code="94065" postal_addon_code="" side="L" percent="0.33166666666666667" edge_id="28503563"/> </match> </geocode> <geocode id="2" match_count="1"> <match sequence="0" longitude="-71.45937299307225" latitude="42.70784494226865" match_code="1" error_message="????#ENUT?B281CP?"> <output_address name="" house_number="1" street="ORACLE DR" builtup_area="NASHUA" order1_area="NH" order8_area="" country="US" postal_code="03062" postal_addon_code="" side="L" percent="0.01" edge_id="22325991"/> </match> </geocode> <geocode id="3" match_count="1"> <match sequence="0" longitude="-71.45937299307225" latitude="42.70784494226865" match_code="1" error_message="????#ENUT?B281CP?"> <output_address name="" house_number="1" street="ORACLE DR" builtup_area="NASHUA" order1_area="NH" order8_area="" country="US" postal_code="03062" postal_addon_code="" side="L" percent="0.01" edge_id="22325991"/> </match> </geocode> <geocode id="4" match_count="1"> <match sequence="0" longitude="-71.45937299307225" latitude="42.70784494226865" match_code="1" error_message="????#ENUT?B281CP?"> <output_address name="" house_number="1" street="ORACLE DR" builtup_area="NASHUA" order1_area="NH" order8_area="" country="US" postal_code="03062" postal_addon_code="" side="L" percent="0.01" edge_id="22325991"/> </match> </geocode> </geocode_response>
親トピック: ジオコーディング・サービス(XML API)の使用