Postgis

來自 stdaddr 的 PostGIS 地理編碼?

  • January 24, 2017

PostGIS 提供了許多不同的地址標準化方法

一些較新的方法返回stdaddr

  • standardize_address(這需要明確的 lex、gaz 和規則)

其他人返回norm_addy

  • pagc_normalize_address(提供預設pagc_lexpagc_gaz, 和pagc_rules)到standardize_address
  • normalize_address(這是原來的)

但是,geocode()只需要norm_addy,我該如何投射stdaddrnorm_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;

引用自:https://dba.stackexchange.com/questions/162043