場所の名前(対象点)はわかっていても、その位置の詳細情報がわからない場合は、例11-2に示すように、入力パラメータのplacenameとcountryから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 場所名、国および他のフィールドからのジオコーディング
いくつかの位置情報(行政区域、郵便番号など)がわかっている場合、それらの情報を指定すると、より優れたパフォーマンスが得られます。例11-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;