ヘッダーをスキップ
Oracle® Spatial開発者ガイド
11gリリース2 (11.2)
B72087-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

11 住所データのジオコーディング

ジオコーディングとは、住所を空間位置(経度と緯度の座標)に関連付ける処理のことです。この章の内容は次のとおりです。

11.1 ジオコーディングの概念

この項では、Spatialのジオコーディング機能を使用する前に理解しておく必要がある概念について説明します。

11.1.1 住所の表現

ジオコードする住所は、形式化された住所または形式化されていない住所のいずれかとして表現できます。

形式化された住所は、住所の様々な部分に対する一連の属性で記述されます。住所には、表11-1に示す属性の一部またはすべてを含めることができます。

表11-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データ型を使用して指定されます(11.2.1項を参照)。

形式化されていない住所は、該当する国の住所形式に情報が含まれる行で記述されます。住所の行には、ジオコーディングに必要な情報を含める必要があります。また、ジオコーディングに必要ない情報(処理されていない住所内の一般的な情報)が含まれる場合もあります。形式化されていない住所は、文字列の配列として格納されます。たとえば、住所が「22 Monument Square」や「Concord, MA 01742」などの文字列で構成される場合があります。

形式化されていない住所は、SDO_KEYWORDARRAYデータ型を使用して指定されます(11.2.3項を参照)。

11.1.2 一致モード

ジオコーディング操作の一致モードは、入力された住所の属性が、ジオコーディングに使用されているデータとどの程度一致する必要があるかを決定します。入力された住所では、同じものが異なる方法で表現されていてもかまいません(Streetと短縮形のStなど)。また、小さい間違いが含まれてもかまいません(通りの住所と市の名前が正しく、その市にその通りの住所が1つしか存在しない場合に、郵便番号を間違えるなど)。

入力された住所とジオコーディングに使用されるデータが完全に一致しないと、ジオコーディングが実行されないように要求できます。または、一部の属性に対して、入力された住所にある程度の不一致または誤りが含まれている場合でもジオコーディングが実行されるように、要件を緩和することもできます。表11-2に、一致モードとその意味を示します。SDO_GEO_ADDRデータ型(11.2.1項を参照)のMatchMode属性、およびジオコーディングのファンクションまたはプロシージャのmatch_modeパラメータには、この表の値を使用します。

表11-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と同じです。


11.1.3 一致コード

一致コードは、入力された住所のどの属性がジオコーディングに使用されるデータと一致したかを示す番号です。一致コードは、出力されるSDO_GEO_ADDRオブジェクトのMatchCode属性に格納されます(11.2.1項を参照)。

表11-3に、一致コードのすべての値を示します。

表11-3 ジオコーディング操作の一致コード

一致コード 説明

1

完全に一致しています。市の名前、郵便番号、通りのベース名、通りの種類(該当する場合は、接尾辞または接頭辞(あるいはその両方)も含む)および家またはビルの番号が、ジオコーディングに使用されるデータと一致しています。

2

市の名前、郵便番号、通りのベース名、および家またはビルの番号がジオコーディングに使用されるデータと一致していますが、通りの種類、接尾辞または接頭辞が一致していません。

3

市の名前、郵便番号および通りのベース名がジオコーディングに使用されるデータと一致していますが、家またはビルの番号が一致していません。

4

市の名前および郵便番号がジオコーディングに使用されるデータと一致していますが、通りの住所が一致していません。

10

市の名前がジオコーディングに使用されるデータと一致していますが、郵便番号が一致していません。

11

郵便番号がジオコーディングに使用されているデータと一致していますが、市の名前が一致していません。


11.1.4 出力されたジオコード済住所のエラー・メッセージ


注意:

ErrorMessage属性(この項を参照)のかわりに、MatchVector属性(11.1.5項を参照)を使用することをお薦めします。

出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのErrorMessage属性(11.2.1項を参照)に、ジオコーディングに使用されるデータと一致した住所の属性を示す文字列が含まれます。ジオコーディング操作の開始前、その文字列は値???????????281C??に設定されており、属性が一致すると、それを反映してその値が変更されます。

表11-4に、文字列内の文字位置、および各位置に対応する住所属性を示します。また、属性が一致した場合にその位置に設定される文字値も示します。

表11-4 ジオコードされた住所のエラー・メッセージの解釈

位置 属性 一致した場合の値

1-2

(将来使用するために予約済)

??

3

住所地点

X

4

POI名

O

5

家またはビルの番号

#


6

通りの接頭辞

E

7

通りのベース名

N

8

通りの接尾辞

U

9

通りの種類

T

10

補足情報

S

11

市街地または市

B

12-13

(予約されています)

(これらの位置にある値はすべて無視されます。)

14

地域

1

15

C

16

郵便番号

P

17

郵便付加番号

A


11.1.5 出力されたジオコード済住所の一致ベクトル

出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのMatchVector属性(11.2.1項を参照)に、各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列が含まれます。この属性では、ErrorMessage属性(11.1.4項を参照)に比べて、各住所の属性の一致ステータスに関して、より正確で詳細な情報が提供されます。ジオコーディング操作の開始前、その文字列は値?????????????????に設定されています。この文字列の各文字は、住所属性の一致ステータスを示しています。

表11-5に、文字列内の文字位置、および各位置に対応する住所属性を示します。次の表では、それぞれの文字位置の値が示す内容について説明します。

表11-5 ジオコードされた住所の一致ベクトルの解釈

位置 属性

1-2

(将来使用するために予約済)

3

住所地点

4

POI名

5

家またはビルの番号

6

通りの接頭辞

7

通りのベース名

8

通りの接尾辞

9

通りの種類

10

補足情報

11

市街地または市

14

地域

15

16

郵便番号

17

郵便付加番号


表11-5の各文字位置には、次の可能な数値のいずれかを含めることができます。

  • 0: 入力属性がNULL以外で、NULL以外の値に一致します。

  • 1: 入力属性がNULLで、NULL値に一致します。

  • 2: 入力属性がNULL以外で、異なるNULL以外の値に置き換えられます。

  • 3: 入力属性がNULL以外で、NULL値に置き換えられます。

  • 4: 入力属性がNULLで、NULL以外の値に置き換えられます。

11.2 ジオコーディングのデータ型

この項では、ジオコーディングのファンクションおよびプロシージャ固有のデータ型について説明します。

11.2.1 SDO_GEO_ADDR型

SDO_GEO_ADDRオブジェクト型は、住所を記述するために使用されます。ジオコードされた住所がSDO_GCDRファンクションまたはSDO_GCDRプロシージャで出力された場合、SDO_GEO_ADDR型のオブジェクトとして格納されます。

表11-6に、SDO_GEO_ADDR型の属性を示します。属性が関連しない場合があることに注意してください。ジオコードされた住所の出力に使用される属性は、入力された住所の地理的な内容(特に国)によって異なります。

表11-6 SDO_GEO_ADDR型の属性

属性 データ型 説明

Id

NUMBER

(未使用。)

AddressLines

SDO_KEYWORDARRAY

住所の行。(SDO_KEYWORDARRAY型の詳細は、11.2.3項を参照。)

PlaceName

VARCHAR2(200)

対象点(POI)の名前。(たとえば、CALIFORNIA PACIFIC MEDICAL CTR)

StreetName

VARCHAR2(200)

通りの種類を含む通りの名前。(たとえば、MAIN ST)

IntersectStreet

VARCHAR2(200)

交差する通り。

SecUnit

VARCHAR2(200)

アパートやビルの番号などの補足情報。

Settlement

VARCHAR2(200)

住所が属する最低レベルの行政区域。(表11-1を参照。)

Municipality

VARCHAR2(200)

Settlementより1つ上の行政区域。(表11-1を参照。)

地域

VARCHAR2(200)

Municipality(存在する場合)より1つ上の行政区域。Municipalityが存在しない場合はSettlementより1つ上の行政区域 (表11-1を参照。)

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 ST123)

BaseName

VARCHAR2(200)

通りのベース名。(たとえば、123 MAIN STMAIN)

StreetType

VARCHAR2(20)

通りの種類。(たとえば、123 MAIN STのST)

StreetTypeBefore

VARCHAR2(1)

(未使用。)

StreetTypeAttached

VARCHAR2(1)

(未使用。)

StreetPrefix

VARCHAR2(20)

通りの接頭辞。(たとえば、123 S MAIN STS)

StreetSuffix

VARCHAR2(20)

通りの接尾辞。(たとえば、123 MAIN ST NENE)

Side

VARCHAR2(1)

道路セグメントをその方向に従って(つまり、道路セグメントの開始ノードから終了ノードに向かって)移動すると想定した場合に、家が建っている通りの側(左側はL、右側はR)。住居番号は、増加していくことも、減少していくこともあります。

Percent

NUMBER

0から1の数値(パーセント値を求めるには100を掛けます)で、道路セグメントの方向に従って通りを移動した距離を示します。

EdgeID

NUMBER

道路区画の端のID。

ErrorMessage

VARCHAR2(20)

エラー・メッセージ(11.1.4項を参照)。注意: ErrorMessage属性のかわりに、MatchVector属性を使用することをお薦めします。

MatchCode

NUMBER

一致コード(11.1.3項を参照)。

MatchMode

VARCHAR2(30)

一致モード(11.1.2項を参照)。

Longitude

NUMBER

経度値。

Latitude

NUMBER

緯度値。

MatchVector

VARCHAR2(20)

各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列(11.1.5項を参照)。


SDO_GEO_ADDRオブジェクト全体を戻すか、またはドット表記法を使用して属性を指定できます。例11-1に、San Francisco市庁舎の住所をジオコードする文を示します。最初の文はSDO_GEO_ADDRオブジェクト全体を戻し、残りの文はいくつかの特定の属性を戻します。

例11-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?

11.2.2 SDO_ADDR_ARRAY型

SDO_ADDR_ARRAY型は、住所のジオコード結果を格納するために使用されるSDO_GEO_ADDRオブジェクト(11.2.1項を参照)のVARRAYです。ジオコーディング操作の結果、複数の住所アドレスが一致すると、複数の住所オブジェクトが戻される可能性があります。

SDO_ADDR_ARRAY型は、次のとおり定義されます。

CREATE TYPE sdo_addr_array AS VARRAY(1000) OF sdo_geo_addr;

11.2.3 SDO_KEYWORDARRAY型

SDO_KEYWORDARRAY型は、形式化されていない住所の住所行を格納するために使用されるVARCHAR2文字列のVARRAYです。(形式化された住所と形式化されていない住所については、11.1.1項を参照してください。)

SDO_KEYWORDARRAY型は、次のとおり定義されます。

CREATE TYPE sdo_keywordarray AS VARRAY(10000) OF VARCHAR2(9000);

11.3 ジオコーディング機能の使用

Oracle Spatial and Graphのジオコーディング機能を使用するには、ジオコーディングのベンダーから提供されるデータを使用する必要があり、また、そのデータは、Oracle Spatial and Graphのジオコーディング機能でサポートされる形式である必要があります。ジオコーディングの詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/database/options/spatialandgraph/learnmore/sol-n-tech-idx-alt1-213053.html#geocoding

ジオコーディング・データを使用して住所をジオコードするには、SDO_GCDR PL/SQLパッケージ・サブプログラム(第23章を参照)を使用します。

  • 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オブジェクトとして戻します。

11.4 場所名からのジオコーディング

場所の名前(対象点)はわかっていても、その位置の詳細情報がわからない場合は、例11-2に示すように、入力パラメータのplacenamecountryからSDO_GEO_ADDRオブジェクトを作成するPL/SQLファンクションを作成できます。この例では、create_addr_from_placenameというファンクションが作成されます。この例のSELECT文は、create_addr_from_placenameファンクションで作成した住所を、SDO_GCDR.GEOCODE_ADDRファンクションを使用してジオコードしています。

例11-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;

いくつかの位置情報(行政区域、郵便番号など)がわかっている場合、それらの情報を指定すると、より優れたパフォーマンスが得られます。例11-3には、追加のパラメータに対応するcreate_addr_from_placenameファンクションの別バージョンを示しています。このバージョンのファンクションをコールするには、placenameおよびcountryパラメータに実際の値を指定し、他の入力パラメータについては実際の値またはNULLを指定します。

例11-3 場所名、国および他のフィールドからのジオコーディング

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;

11.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から提供されます。(これらの表がデータ・プロバイダから提供されていない場合は、11.6項に示すようにインストールしてから移入を行う必要があります。)他の表には、データ・ベンダーから提供されるジオコーディング・データが格納されます。

ジオコーディング・データが含まれる表を所有する各ユーザー(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列に規定されています(11.5.3項を参照)。

これ以降の項では、ベンダーが提供する、ジオコーディング・データが格納される表について、表名のアルファベット順に説明します。

11.5.11項では、ジオコーディングにこれらの表を使用するために作成する必要のある索引について説明します。

11.5.1 GC_ADDRESS_POINT_<接尾辞>表と索引

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)

住所地点に位置する道路の側。可能な値はL(左側)またはR(右側)です。(必須)

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);

11.5.2 GC_AREA_<接尾辞>表

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ルーティング・エンジン(第13章を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、0 (ゼロ)以外の任意の値に設定できますが、NULLにはできません)。(必須)

POSTAL_CODE

VARCHAR2(16)

領域の中心の郵便番号。この属性は、正しく設定することをお薦めします。この値がNULLの場合、領域をジオコードした結果の郵便番号属性はNULLになります。(オプション)

COUNTRY_CODE_2

VARCHAR2(2)

領域が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

REAL_NAME

VARCHAR2(64)

現地の言語で綴られた、領域の実際の名前。この列は、領域名が英語以外の場合に有効です。たとえば、MUNICHのドイツ語名はMÜNCHENです。MUNCHENと綴ることもできますが、REAL_NAMEの値は、MÜNCHENにする必要があります。ドイツ用の領域表では、MÜNCHENという名前とMUNCHENという名前の領域は同じ領域を指し、実際の名前は両方ともMÜNCHENです。領域名に英語以外の文字が含まれない場合は、AREA_NAMEと同じ名前をREAL_NAMEに設定してください。(必須)

IS_ALIAS

VARCHAR2(1)

この領域が、正式な管理領域として認められている領域の別名である場合はT、そうでない場合はFです。たとえば、Manhattanは正式に認められた管理領域ではありませんが、New York市の一部として一般に通用しています。このような場合、ManhattanNew York Cityの別名です。(必須)

NUM_STREETS

NUMBER

この領域内の通りの番号。(オプション)


11.5.3 GC_COUNTRY_PROFILE表

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情報がオプションの場合はT、オプションでない(必要な)場合はFです。(必須)

MUNICIPALITY_IS_OPTIONAL

VARCHAR2(1)

住所データでMunicipality情報がオプションの場合はT、オプションでない(必要な)場合はFです。(必須)

REGION_IS_OPTIONAL

VARCHAR2(1)

住所データでRegion情報がオプションの場合はT、オプションでない(必要な)場合はFです。(必須)

POSTCODE_IN_SETTLEMENT

VARCHAR(1)

各郵便番号が1つのSettlement領域内のみに含まれることが必要な場合はT、複数のSettlement領域にまたがる場合はFです。(必須)

SETTLEMENT_AS_CITY

VARCHAR(1)

市の名前によってMunicipalityとSettlementの両方が識別できる場合はT、Settlementのみが識別できる場合はFです。たとえば、イギリスではLondonを、Municipality領域の名前とSettlement領域の名前(LondonというMunicipality領域に含まれる)の両方に使用できます。ヨーロッパの一部の国(イギリス、ベルギーなど)の大都市では、このようなことがよくあります。(必須)

CACHED_ADMIN_AREA_LEVEL

NUMBER

(将来使用するために予約済。)

GC_TABLE_SUFFIX

VARCHAR2(5)

GC_*データ表の国を識別する表名の接尾辞。たとえば、GC_TABLE_SUFFIXの値がUSの場合、その国のジオコーディング・データを持つ表の名前の末尾は_US(たとえば、CG_AREA_US)になります。(必須)

CENTER_LONG

NUMBER

領域の中心の経度値。(オプション)

CENTER_LAT

NUMBER

領域の中心の緯度値。(オプション)

SEPARATE_PREFIX

VARCHAR2(1)

通りの名前の接頭辞が通りの名前とは別の語になる場合はT、通りの名前と同じ語に含まれる場合はFです。たとえば、米国での通りの住所が123 N Main Stの場合、接頭辞はNで、通りの名前Mainと別になっています。(オプション、現在Oracleでは非使用)

SEPARATE_SUFFIX

VARCHAR2(1)

通りの名前の接尾辞が通りの名前とは別の語になる場合はT、通りの名前と同じ語に含まれる場合はFです。たとえば、米国での通りの住所が123 Main St NWの場合、接尾辞はNWで、通りの名前Mainおよび通りの種類Stとは別になっています。(オプション、現在Oracleでは非使用)

SEPARATE_STYPE

VARCHAR2(1)

通りの種類が通りの名前とは別の語になる場合はT、通りの名前と同じ語に含まれる場合はFです。たとえば、ドイツでの通りの住所が123 Beethovenstrassの場合、種類はstrassで、通りの名前Beethovenと同じ語の中に含まれています。(オプション、現在Oracleでは非使用)

AREA_ID

NUMBER

現在、Oracleでは使用していません。(オプション)

VERSION

VARCHAR2(10)

データのバージョン。最初のバージョンは、1.0です。(必須)


11.5.4 GC_INTERSECTION_<接尾辞>表

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

交差点の住居番号の先頭の数字の部分。(11.5.10項表11-16の後に示す住居番号の説明を参照)。(必須)

HOUSE_NUMBER_2

VARCHAR2(10)

交差点の住居番号の2番目の部分。(11.5.10項表11-16の後に示す住居番号の説明を参照)。(必須)

SIDE

VARCHAR2(1)

交差点にある家屋が位置する通りの側。可能な値はL(左側)またはR(右側)です。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

交差点にある家屋が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)


11.5.5 GC_PARSER_PROFILES表

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 AmericaUSAおよび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)

住所フィールドを表すためにジオコーダ・データで使用されるキーワード。これは、キーワード配列で使用されるキーワードのいずれかと同じである必要があります。出力キーワードはジオコーディング・データ表に格納されている住所とユーザーの入力を一致させるために使用されます。たとえば、出力キーワードAVがGC_ROAD_US表の通りの種類Avenueに対して使用される場合、ユーザーがキーワード(AVENUEAVAVEAVENAVENUAVNAVNUEAV.、AVE.)のいずれかを含む住所を入力すると必ず、キーワードはデータベースで住所を検索しやすいように解釈され、出力キーワードAVと一致します。次に、出力キーワードのいくつかの例を示しますが、各行に格納されるのは単一の出力キーワードのみです。

US

AV

40TH

NY

LIBRARY

SECTION_LABEL

VARCHAR2(30)

KEYWORDS列およびOUTPUT_KEYWORD列に表示されるキーワードのタイプを識別するために使用されるラベル。複数の異なるセクション・ラベルがありますが、各行の単一のセクション・ラベルのみがキーワードのタイプを識別するのに使用されます。

COUNTRY_NAME: 国名を表すために使用されるキーワードを識別します。

LOCALITY_KEYWORD_DICTIONARY: 位置(市区町村、都道府県、州など)にある単語を標準化された形式の単語に置き換えるために使用されるキーワードを識別します。たとえば、SaintStに置き換えられると、市の名前Saint ThomasおよびSt. ThomasSt Thomasに標準化され、データベースに格納されます。

PLACE_NAME_KEYWORD: レストランやホテルなどの対象点(POI)の名前のキーワードを識別します。

REGION_LIST: NYNew YorkNHNew Hampshireなど、地域の既知の名前であるキーワードを識別します。識別された地域は、住所処理で使用する下から3番目の領域レベルまたは3番目に小さい領域に属する行政区域である必要があります。米国の場合、これは州レベルです(最下位の領域レベルまたは最小の領域は市レベルです)。

SECOND_UNIT_KEYWORD: Floor#SuiteApartmentなど、2番目の単位の説明で使用するキーワードを識別します。

STREET_KEYWORD_DICTIONARY: (40THFortiethなど)通りの名前の通りの種類以外のキーワードを標準化された形式に置き換えるために使用するキーワードを識別します。

STREET_PREFIX_KEYWORD: SouthNorthWestEastなど、通りの名前の接頭辞のキーワードを識別します。

STREET_TYPE_KEYWORD: RoadStreetDriveなど、通りの種類のキーワードを識別します。

IN_LINE_STREET_TYPE_KEYWORD: ドイツの通りの名前Steinstrassestrasseなど、通りの名前にアタッチされている通りの種類のキーワードを識別します。

POSITION

VARCHAR2(1)

通り名に対して相対的な、キーワードの位置。これは、キーワードを実際の通りの名前の前に配置する(P)か、後に配置する(F)か、またはその両方(B)かを示します。したがって、有効なエントリはPFおよびBのみです。米国では、ほとんどの通りの種類のキーワードは通りの名前の後に続きます(たとえば、通りの種類がBlvdの場合はHollywood Blvd)。ただし、フランスでは、通りの種類のキーワードは通りの名前の前に配置されます(たとえば、通りの種類がAvenueの場合はAvenue De Paris)。

SEPARATENESS

VARCHAR2(1)

キーワードが通りの名前と別になるかどうかを示します。キーワードは分離できる場合と(S)分離できない(N)場合があります。したがって、有効なエントリはSおよびNのみです。米国では、すべての通りの種類のキーワードは通りの名前とは別の語になります(たとえば、通りの種類がBlvdの場合はHollywood Blvd)。ただし、ドイツでは、通りの種類のキーワードは通りの名前と別になりません(たとえば、通りの種類がstrasseの場合はAugustenstrasse)。


11.5.6 GC_PARSER_PROFILEAFS表

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定義を示し、11.5.6.1項では、米国の住所形式の定義で使用される要素について説明します。)


例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>

11.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=580output=580addon_effective=STATEおよびaddon_output=STATE HIGHWAYとなります。

<format>要素には、<exception>要素を含めることもできます。<exception>要素は、有効な形式であるが、住所フィールドから除外する必要がある文字列を指定します。たとえば、有効な数値0*1*(任意の数字の次に任意のアルファベット文字が続く)を含む<house_number>要素で、<exception form="0*TH" />を指定した場合、数字を含む(または含まない)、THで終わる住居番号はすべて除外する必要があることを意味します。

11.5.7 GC_POI_<接尾辞>表

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の値はLondonです。(オプション)

ROAD_SEGMENT_ID

NUMBER

POIが位置する道路セグメントのID。(必須)

SIDE

VARCHAR2(1)

POIが位置する通りの側。可能な値はL(左側)またはR(右側)です。(必須)

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に設定します。(必須)


11.5.8 GC_POSTAL_CODE_<接尾辞>表

郵便番号が住所形式で使用される場合、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ルーティング・エンジン(第13章を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、0 (ゼロ)以外の任意の値に設定できますが、NULLにはできません)。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

領域が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

NUM_STREETS

NUMBER

この郵便番号の領域内の通りの番号。(オプション)


11.5.9 GC_ROAD_<接尾辞>表

GC_ROAD_<接尾辞>表(たとえば、GC_ROAD_US)には、その表名の接尾辞に関連付けられた国の道路情報が格納されます。道路は、同じSettlement領域内の同じ名前の道路セグメントの集合であり、道路セグメントは11.5.10項で定義されています。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としてN Main Stを指定できます。(必須)

BASE_NAME

VARCHAR2(64)

道路の名前。種類、接頭辞、接尾辞がある場合は、それらを除外した名前です。たとえば、NAMEがN Main Stの場合、BASE_NAMEはMainです。(必須)

PREFIX

VARCHAR2(32)

道路名の接頭辞。たとえば、NAMEがN Main Stの場合、PREFIXはNです。(道路名に接頭辞がある場合は必須)

SUFFIX

VARCHAR2(32)

道路名の接尾辞。たとえば、NAMEがMain St NWの場合、SUFFIXはNWです。(道路名に接尾辞がある場合は必須)

STYPE_BEFORE

VARCHAR2(32)

ベース名の前に記述される通りの種類。たとえば、NAMEがAvenue Victor Hugoの場合、STYPE_BEFOREはAvenue、BASE_NAMEはVictor Hugoです。(ベース名の前に道路の種類がある場合は必須)

STYPE_AFTER

VARCHAR2(32)

ベース名の後ろに記述される通りの種類。たとえば、NAMEがMain Stの場合、STYPE_AFTERはSt、BASE_NAMEはMainです。(ベース名の後ろに道路の種類がある場合は必須)

STYPE_ATTACHED

VARCHAR2(1)

通りの種類が通りの名前と同じ語に含まれる場合はT、通りの名前とは別の語になる場合はFです。たとえば、ドイツでの通りの住所が123 Beethovenstrassの場合、通りの種類はstrassで、通りの名前Beethovenと同じ語の中に含まれています。(必須)

START_HN

NUMBER(5)

道路上の最も小さい住居番号。指定した住居番号がこの値よりも小さい場合に戻されます。

CENTER_HN

NUMBER(5)

中心住居番号の先頭の数字の部分。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(11.5.10項表11-16の後に示す住居番号の説明を参照)。入力された住所で住居番号が指定されていない場合に戻されます。(必須)

END_HN

NUMBER(5)

道路上の最も大きい住居番号。指定した住居番号がこの値よりも大きい場合に戻されます。

START_HN_SIDE

VARCHAR2(1)

最も小さい住居番号の道路の一方の側(左側はL、右側はR)。

CENTER_HN_SIDE

VARCHAR2(1)

中心住居番号の道路の一方の側(左側はL、右側はR)。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(11.5.10項表11-16の後に示す住居番号の説明を参照)。(道路上に家がある場合は必須)

END_HN_SIDE

VARCHAR2(1)

最も大きい住居番号の道路の一方の側(左側はL、右側はR)。

START_LONG

NUMBER

最も小さい住居番号の経度値。

START_LAT

NUMBER

最も小さい住居番号の緯度値。

CENTER_LONG

NUMBER

中心住居番号の経度値。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(11.5.10項表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番目の部分。(11.5.10項表11-16の後に示す住居番号の説明を参照)。(必須)


11.5.10 GC_ROAD_SEGMENT_<接尾辞>表

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つ以上ある場合は、Nを指定します。ない場合は、NULLのままにしておきます。(必須)

R_ADDR_FORMAT

VARCHAR2(1)

右側の住所形式。道路セグメントの右側に住居番号が1つ以上ある場合は、Nを指定します。ない場合は、NULLのままにしておきます。(必須)

L_ADDR_SCHEME

VARCHAR2(1)

道路セグメントの左側の住居番号の付与方法。O (すべて奇数)、E (すべて偶数)またはM (奇数と偶数の混在)を指定します。(必須)

R_ADDR_SCHEME

VARCHAR2(1)

道路セグメントの右側の住居番号の付与方法。O (すべて奇数)、E (すべて偶数)またはM (奇数と偶数の混在)を指定します。(必須)

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.11 ジオコーディングを行うための表の索引

ベンダーから提供される表を使用してジオコーディングを行うには、多くの表で索引を作成する必要があり、これらの索引の名前は特定の要件に従う必要があります。

例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);

11.6 プロファイル表のインストール

通常、Oracle Geocoderプロファイル表は、データ・プロバイダから提供されます。データ・プロバイダのプロファイル表が利用可能であれば、ジオコーディングにはそれを使用してください。ジオコーダ・スキーマを独自に作成するユーザーに対しては、OracleのサンプルのGC_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表が用意されています(ただし、このようなOracle提供のプロファイル表をインストールする必要があるのは、プロファイル表のデータ表が提供されていない場合のみです)。

Oracle提供の表には、一部の国のパーサー・プロファイルのみ含まれています。対象となる国(または国のグループ)のプロファイルが含まれていない場合は、手動で追加する必要があります(簡単な手法として、対象となる国と住所形式が似ている国のパーサー・プロファイルをコピーし、それらのプロファイルを必要に応じて編集することもできます)。必要なパーサー・プロファイルがOracle提供の表に含まれている場合は、それをそのまま使用するか、必要に応じて更新します。サンプルの国プロファイルが提供されていない場合は、独自に追加する必要があります。

Oracle提供のプロファイル表をインストールして問い合せるには、次の手順を実行します。

  1. ジオコーダ・ユーザーとしてデータベースにログオンします。ジオコーダ・ユーザーは、ジオコーダ・スキーマがロードされるスキーマの所有者です。

  2. SDO_GCDR.CREATE_PROFILE_TABLESプロシージャを実行して、GC_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を作成します。

    SQL> EXECUTE SDO_GCDR.CREATE_PROFILE_TABLES;
    
  3. $ORACLE_HOME/md/admin/ディレクトリにあるsdogcprs.sqlスクリプトを使用して、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表にデータを挿入します。次に例を示します。

    SQL> @$ORACLE_HOME/md/admin/sdogcprs.sql
    
  4. プロファイル表を問い合せて、対象となる国のパーサー・プロファイルがあるかどうかを確認します。これを行うには、その国のコードが次の文の出力に含まれているかどうかを確認します。

    SQL> SELECT DISTINCT(country_code) FROM gc_parser_profiles ORDER BY country_code;
    SQL> SELECT DISTINCT(country_code) FROM gc_parser_profileafs ORDER BY country_code;
    

11.7 ジオコーディング・サービス(XML API)の使用

SQL APIの他に、Oracle Spatialではジオコーディング・サービスのXML APIも提供され、これを使用して住所をジオコードすることができます。Javaジオコーダ・アプリケーション・エンジンでは、Oracle Databaseに格納されたジオコーダ・データを問い合せることによって、住所の国際標準化、ジオコーディング、およびPOIの一致が行われます。未解析の住所のサポートにより、顧客アプリケーションに柔軟性と利便性が追加されます。

このジオコーディング・サービスは、Java 2 Enterprise Edition (J2EE)のWebアプリケーションとして実装され、WebLogic Server、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE (OC4J)環境にデプロイできます。

  • ジオコーディング・サービスがスタンドアロンのOC4Jにデプロイされる場合、ユーザー名はoc4jadminになり、パスワードは、OC4Jインスタンスをインストールした際に指定した管理者パスワードになります。

  • ジオコーディング・サービスをOracle Application Server全体にデプロイする場合、ジオコーディング・サービスが実行されるOC4Jインスタンスにセキュリティ・ユーザーを作成し、そのセキュリティ・ユーザーをジオコーディング・サービスの組込みセキュリティ・ロールGC_ADMIN_ROLEにマップしておく必要があります。これらのタスクをEnterprise Managerを使用して完了すると、そのセキュリティ・ユーザーの名前とパスワードを使用して、ジオコーディング・サービス管理者としてログインできるようになります。

図11-1に、ジオコーディング・サービスを使用する基本的なアクション・フローを示します(クライアントは、リモートのジオコーディング・サービス・インスタンスを探してジオコーディング・リクエストを送信し、ジオコーディング・サービス・インスタンスから戻されたレスポンスを処理します)。

図11-1 Spatialジオコーディング・サービスを使用した基本的なアクション・フロー

図11-1の説明が続きます。
図11-1「Spatialジオコーディング・サービスを使用した基本的なアクション・フロー」の説明

次に、図11-1について説明します。

  1. クライアントは、ジオコードする1つ以上の入力住所を含むXMLジオコーディング・リクエストを、HTTPプロトコルを使用してジオコーディング・サービスに送信します。

  2. ジオコーディング・サービスは、入力リクエストを解析して、入力住所をデータベース内で検索します。

  3. ジオコーディング・サービスは、ジオコードされた結果をXML形式で、HTTPプロトコルを使用してクライアントに送信します。

データベースにジオコーダ・スキーマをロードした後、それを使用する前にJ2EEジオコーダを構成する必要があります(11.7.1項を参照)。

11.7.1 J2EEジオコーダのデプロイおよび構成

J2EEジオコーダはジオコーディング・リクエストを処理し、レスポンスを生成します。このジオコーディング・サービスを有効にするには、Oracle WebLogic Server、Oracle Application Server (OracleAS)またはOracle Application Server Containers for J2EE (OC4J)のスタンドアロンのインストールを使用して、($ORACLE_HOME/md/jlibにある)geocoder.earファイルをデプロイする必要があります。ジオコーディング・サービスをデプロイおよび構成するには、次の手順を実行します。

  1. Oracle WebLogic Server、Oracle Application ServerまたはOC4Jを使用して、ジオコーダをデプロイします。

    • Oracle WebLogic Serverを使用する場合: $ORACLE_HOME/md/jlibディレクトリにあるgeocoder.earファイルを展開します。geocoder.earファイルの名前を変更し、その内容を../geocoder.earというディレクトリに展開します。現在$geocoder.ear/ directoryの下にあるweb.warファイルの名前を変更し、その内容を../web.warというサブディレクトリに展開します。したがって、ディレクトリ構造は$geocoder.ear/web.war/となります。

      geocoder.earファイルとweb.warファイルを展開した後、$ORACLE_HOME/LIB/ディレクトリにあるxmlparserv2.jarファイルを$geocoder.ear/web.war/WEB-INF/lib/ディレクトリにコピーします。

      geocoder.earファイルをデプロイするには、WLSコンソール(たとえば、http://<hostname>:7001/console)にログオンし、「デプロイメント」からgeocoder.earファイルをインストールして、デプロイメントの名前geocoderを受け入れ、指定した位置からデプロイメントにアクセスできるようにするためのオプションを選択します。

    • Oracle Application ServerまたはOC4Jを使用する場合: OracleASまたはスタンドアロンのOC4J Application Server Control (たとえば、http://<hostname>:8888/em)を使用して、$ORACLE_HOME/md/jlib directoryにあるgeocoder.earファイルをデプロイします。geocoder.earファイルを既存のOC4Jインスタンスにデプロイすることも、ジオコーダ用に新しいOC4Jインスタンスを作成することもできます。どちらの場合も、デプロイメント時に「アプリケーション名」にgeocoderと入力します。

  2. http://<hostname>:<port>/geocoderのURLを使用して、WebブラウザでOracle Geocoderのようこそページを起動します。ようこそページで、「管理」リンクを選択し、管理者(weblogicまたはoc4jadmin)のユーザー名およびパスワードを入力します。


    注意:

    WebLogic Serverを使用し、デフォルトのWebLogic管理者のユーザー名を使用していない場合は、$geocoder.ear/web.war/WEB-INF/ディレクトリにあるweblogic.xmlファイルを編集する必要があります。<principal-name>weblogic</principal-name>をWebLogic Server管理者のユーザー名に置換します(<principal-name>my_weblogic_admin</principal-name>など)。

  3. ジオコーダ構成ファイル(geocodercfg.xml)を変更します。少なくとも1つの<geocoder>要素のコメントを解除し、その<geocoder>要素の<database>要素属性を、データベースの構成が反映されるように変更します。このファイルの詳細は、11.7.1.1項を参照してください。

  4. ファイルに対する変更を保存し、ジオコーダを再起動します。

    ようこそページが表示されない場合は、新しくデプロイされたジオコーディング・サービスが正常に起動されたことを確認してください。ジオコーディング・サービスは、Oracle Databaseリリース11.2以上のgeocoder.earファイルでWebLogic Server 10.3.1.0以上を実行しているか、Oracle 11g以上のgeocoder.earファイルでOracle ASまたはOC4J 10.1.3以上を実行していることを前提としています。

  5. http://<hostname>:<port>/geocoderのURLのようこそページに移動し、国際的な住所の解析、ジオコーディング・デモおよびXMLジオコーディング・リクエスト・ページを実行することによって、データベース接続を確認します。(これらのデモには、米国のジオコーダ・データが必要です。)

    例は、ジオコーディング・サービスの様々な機能を実例を使用して説明するために使用できます。例を使用することは、XML API (11.7.2項を参照)の学習に適しています。

11.7.1.1 geocodercfg.xmlファイルの構成

Spatialに付属するデフォルトのgeocodercfg.xmlファイルの<database>要素を編集して、ジオコーディング・データがロードされるデータベースとスキーマを指定する必要があります。

このファイルの各<geocoder>要素は、ジオコーダ・スキーマが存在するデータベースのジオコーダを定義します。<database>要素は、ジオコーダのデータベース接続を定義します。Oracle 11g以上では、データベース接続を定義する方法が2つあります(JDBCデータベース接続パラメータを提供する方法と、事前定義のコンテナ・データ・ソースのJNDI名(container_ds)を提供する方法です)。

例11-6に、<database>要素を定義する2つの異なる方法を示します。1つ目の定義ではJDBC接続を指定し、2つ目の定義では事前定義のコンテナ・データ・ソースのJNDI名を使用しています。

例11-6 <database>要素定義

<database name="gcdatabase"
          host="gisserver.us.oracle.com"
          port="1521"
          sid="orcl"
          mode="thin"
          user="geocoder_us"
          password="geocoder_us"
          load_db_parser_profiles="true" />
 
<database container_ds="jdbc/gc_europe"
          load_db_parser_profiles="true" />

<database>要素の属性は次のとおりです。

  • nameは、データベース接続の記述名です(データベースへの接続には使用されません)。

  • hostportおよびsidにより、データベースを識別します。

  • modeにより、接続のために使用するJDBCドライバの種類を識別します。

  • userおよびpasswordは、ジオコーディング・データが格納されているスキーマに対する、データベース・ユーザーのユーザー名とパスワードです。

  • load_db_parser_profilesは、指定されたデータベース接続から住所パーサー・プロファイルをロードするかどうかを指定します。trueの場合、住所パーサー・プロファイルはジオコーダ・スキーマからロードされ、それ以外の場合は、パーサー・プロファイルは../applications/geocoder/web/WEB-INF/parser_profiles/<country-name>.ppr (たとえば、usa.ppr)にあるアプリケーションからロードされます。Oracle 11gより前は、パーサー・プロファイルはアプリケーションからのみロードされていました。このパラメータはtrueに設定する必要があります。

  • container_dsは、事前定義のデータ・ソースのJNDI名を指定します。

11.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>

例11-7に、異なる住所形式および形式化されていない住所を使用した、3つの住所(2つの異なる実際の物理的な住所を示す)をジオコードするリクエストを示します。

例11-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>

11.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>

例11-8に、11.7.2項例11-7のリクエストに対するレスポンスを示します。

例11-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>