Postgis
來自 stdaddr 的 PostGIS 地理編碼?
PostGIS 提供了許多不同的地址標準化方法
一些較新的方法返回
stdaddr
,
standardize_address
(這需要明確的 lex、gaz 和規則)其他人返回
norm_addy
pagc_normalize_address
(提供預設pagc_lex
的pagc_gaz
, 和pagc_rules
)到standardize_address
normalize_address
(這是原來的)但是,
geocode()
只需要norm_addy
,我該如何投射stdaddr
到norm_addy
。我打算將我的記憶體stdaddr
在一張桌子上,我希望有一種快速快速的方法來完成地理編碼。
從這個例子,從
\df+ pagc_normalize_address
我能夠寫出的程式碼中CAST
。CREATE OR REPLACE FUNCTION stdaddr2normaddy(addr stdaddr) RETURNS norm_addy AS $body$ SELECT ( (addr).house_num, --address null, --predirabbrev (addr).name, --streetname (addr).suftype, --streettypeabbrev null, --postdirabbrev (addr).unit, --internal (addr).city, --location (addr).state, --stateabbrev (addr).postcode, --zip true --parsed )::norm_addy; $body$ LANGUAGE sql IMMUTABLE; CREATE CAST (stdaddr AS norm_addy) WITH FUNCTION stdaddr2normaddy(stdaddr) AS IMPLICIT;
現在你可以測試一下…
SELECT x.* FROM pagc_normalize_address( '3311 My Street Dr., Kingwood Texas, 77345' ) AS x; SELECT (g.x).* FROM ( SELECT x::norm_addy FROM standardize_address( 'tiger.pagc_lex', 'tiger.pagc_gaz', 'tiger.pagc_rules', '3311 My Street Dr.', 'Kingwood Texas, 77345' ) AS x ) AS g;