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;