PostGIS 3.5 Tiger 地理編碼器速查表

此版本新增 1 此版本增強 2  
地址標準化工具
stdaddr    一個複合型別,包含地址的各個元素。這是 standardize_address 函數的回傳型別。
規則表    規則表包含一組規則,將地址輸入的序列符號對應到標準化的輸出序列。一個規則被定義為一組輸入符號,後接 -1 (終止符),再接一組輸出符號,後接 -1,再接表示規則種類的數字,最後是規則的排序。
詞彙表    詞彙表用於分類字母數字輸入,並將該輸入與 (a) 輸入符號 (參見) 和 (b) 標準化表示相關聯。
地名表    地名表用於標準化地名,並將該輸入與 (a) 輸入符號 (參見) 和 (b) 標準化表示相關聯。
debug_standardize_address (lextab, gaztab, rultab, micro, macro=NULL)    回傳一個 JSON 格式的文字,列出解析符號和標準化結果。
parse_address (address)    接收單行地址並將其分解為各個部分。
standardize_address    利用詞彙表、地名表和規則表,回傳輸入地址的 stdaddr 格式。
  1. lextab, gaztab, rultab, address
  2. lextab, gaztab, rultab, micro, macro

Tiger 地理編碼器
Drop_Indexes_Generate_Script (param_schema=tiger_data)    產生一個腳本,用於刪除 tiger 模式和使用者指定的模式中所有非主鍵和非唯一索引。如果未指定模式,則預設為 tiger_data 模式。
Drop_Nation_Tables_Generate_Script (param_schema=tiger_data)    產生一個腳本,用於刪除指定模式中所有以 county_all、state_all 或州代碼後接 county 或 state 開頭的表格。
Drop_State_Tables_Generate_Script (param_state, param_schema=tiger_data)    產生一個腳本,用於刪除指定模式中所有以州縮寫為字首的表格。如果未指定模式,則預設為 tiger_data 模式。
Geocode    接收一個字串格式的地址 (或其他標準化的地址),並輸出可能的位置集合,包括 NAD 83 經緯度的點幾何、每個位置的標準化地址和評分。評分越低,匹配的可能性越高。結果首先依評分由低至高排序。可以選擇傳入最大結果數,預設為 10,以及 restrict_region (預設為 NULL)。
  1. address, max_results=10, restrict_region=NULL,
  2. in_addy, max_results=10, restrict_region=NULL,
Geocode_Intersection ( roadway1, roadway2, in_state, in_city, in_zip, max_results=10, )    接收兩條交叉的街道以及州、城市、郵遞區號,並在第一個交叉街道上輸出可能的交叉位置集合,還包括 NAD 83 經緯度的點位置 (geomout)、每個位置的標準化地址 (addy) 和評分。評分越低,匹配的可能性越高。結果首先依評分由低至高排序。可以選擇傳入最大結果數,預設為 10。使用 Tiger 資料 (edges, faces, addr)、PostgreSQL 模糊字串匹配 (soundex, levenshtein)。
Get_Geocode_Setting ( setting_name)    回傳儲存在 tiger.geocode_settings 表格中的特定設定的值。
Get_Tract ( loc_geom, output_field=name)    從幾何所在地的地塊表格中回傳人口普查地塊或欄位。預設為回傳地塊的簡短名稱。
Install_Missing_Indexes ()    尋找所有在地理編碼器聯接和篩選條件中使用但缺少索引的表格,並為這些欄位加上索引。
Loader_Generate_Census_Script (param_states, os)    為指定的平台和州產生一個 shell 腳本,用於下載 Tiger 人口普查州地塊、區組和 tabblocks 資料表格,暫存並載入到 tiger_data 模式中。每個州的腳本會以個別記錄回傳。
Loader_Generate_Script (param_states, os)    為指定的平台和州產生一個 shell 腳本,用於下載 Tiger 資料,暫存並載入到 tiger_data 模式中。每個州的腳本會以個別記錄回傳。最新版本支援 Tiger 2010 的結構變更,並載入人口普查地塊、區組和區塊表格。
Loader_Generate_Nation_Script (os)    為指定的平台產生一個 shell 腳本,用於載入縣和州查詢表格。
Missing_Indexes_Generate_Script ()    尋找所有在地理編碼器聯接中使用但缺少索引的表格,並輸出用於為這些表格定義索引的 SQL DDL。
Normalize_Address (in_address)    接收一個文字格式的街道地址,回傳一個複合的 norm_addy 型別,其中包含標準化的道路字尾、字首和類型,以及街道、街道名稱等分解為個別欄位。此函數僅需使用 tiger_geocoder 隨附的查詢資料即可運作 (無需 Tiger 人口普查資料)。
Pagc_Normalize_Address (in_address)    接收一個文字格式的街道地址,回傳一個複合的 norm_addy 型別,其中包含標準化的道路字尾、字首和類型,以及街道、街道名稱等分解為個別欄位。此函數僅需使用 tiger_geocoder 隨附的查詢資料即可運作 (無需 Tiger 人口普查資料)。需要 address_standardizer 擴充功能。
Pprint_Addy (in_addy)    接收一個 norm_addy 複合型別物件,回傳其美觀列印的表示法。通常與 normalize_address 搭配使用。
Reverse_Geocode (pt, include_strnum_range=false, )    接收一個已知空間參考系統的幾何點,回傳一個記錄,其中包含理論上可能的地址陣列和交叉街道陣列。如果 include_strnum_range = true,則在交叉街道中包含街道範圍。
Topology_Load_Tiger (topo_name, region_type, region_id)    將定義的 Tiger 資料區域載入到 PostGIS 拓撲中,並將 Tiger 資料轉換為拓撲的空間參考,並捕捉到拓撲的精確度容差。
Set_Geocode_Setting ( setting_name, setting_value)    設定影響地理編碼器函數行為的設定。

地址標準化工具範例
Tiger 地理編碼器範例
Drop_Indexes_Generate_Script
SELECT drop_indexes_generate_script() As actionsql;
actionsql
---------------------------------------------------------
DROP INDEX tiger.idx_tiger_countysub_lookup_lower_name;
DROP INDEX tiger.idx_tiger_edges_countyfp;
DROP INDEX tiger.idx_tiger_faces_countyfp;
DROP INDEX tiger.tiger_place_the_geom_gist;
DROP INDEX tiger.tiger_edges_the_geom_gist;
DROP INDEX tiger.tiger_state_the_geom_gist;
DROP INDEX tiger.idx_tiger_addr_least_address;
DROP INDEX tiger.idx_tiger_addr_tlid;
DROP INDEX tiger.idx_tiger_addr_zip;
DROP INDEX tiger.idx_tiger_county_countyfp;
DROP INDEX tiger.idx_tiger_county_lookup_lower_name;
DROP INDEX tiger.idx_tiger_county_lookup_snd_name;
DROP INDEX tiger.idx_tiger_county_lower_name;
DROP INDEX tiger.idx_tiger_county_snd_name;
DROP INDEX tiger.idx_tiger_county_the_geom_gist;
DROP INDEX tiger.idx_tiger_countysub_lookup_snd_name;
DROP INDEX tiger.idx_tiger_cousub_countyfp;
DROP INDEX tiger.idx_tiger_cousub_cousubfp;
DROP INDEX tiger.idx_tiger_cousub_lower_name;
DROP INDEX tiger.idx_tiger_cousub_snd_name;
DROP INDEX tiger.idx_tiger_cousub_the_geom_gist;
DROP INDEX tiger_data.idx_tiger_data_ma_addr_least_address;
DROP INDEX tiger_data.idx_tiger_data_ma_addr_tlid;
DROP INDEX tiger_data.idx_tiger_data_ma_addr_zip;
DROP INDEX tiger_data.idx_tiger_data_ma_county_countyfp;
DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_lower_name;
DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_snd_name;
DROP INDEX tiger_data.idx_tiger_data_ma_county_lower_name;
DROP INDEX tiger_data.idx_tiger_data_ma_county_snd_name;
:
:
Drop_Nation_Tables_Generate_Script
SELECT drop_nation_tables_generate_script();
DROP TABLE tiger_data.county_all;
DROP TABLE tiger_data.county_all_lookup;
DROP TABLE tiger_data.state_all;
DROP TABLE tiger_data.ma_county;
DROP TABLE tiger_data.ma_state;
Drop_State_Tables_Generate_Script
SELECT drop_state_tables_generate_script('PA');
DROP TABLE tiger_data.pa_addr;
DROP TABLE tiger_data.pa_county;
DROP TABLE tiger_data.pa_county_lookup;
DROP TABLE tiger_data.pa_cousub;
DROP TABLE tiger_data.pa_edges;
DROP TABLE tiger_data.pa_faces;
DROP TABLE tiger_data.pa_featnames;
DROP TABLE tiger_data.pa_place;
DROP TABLE tiger_data.pa_state;
DROP TABLE tiger_data.pa_zip_lookup_base;
DROP TABLE tiger_data.pa_zip_state;
DROP TABLE tiger_data.pa_zip_state_loc;
        
Geocode
SELECT g.rating, ST_X(g.geomout) As lon, ST_Y(g.geomout) As lat,
    (addy).address As stno, (addy).streetname As street,
    (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip
    FROM geocode('75 State Street, Boston MA 02109', 1) As g;
 rating |        lon        |      lat       | stno | street | styp |  city  | st |  zip
--------+-------------------+----------------+------+--------+------+--------+----+-------
      0 | -71.0557505845646 | 42.35897920691 |   75 | State  | St   | Boston | MA | 02109
Geocode_Intersection
SELECT pprint_addy(addy), st_astext(geomout),rating
            FROM geocode_intersection( 'Haverford St','Germania St', 'MA', 'Boston', '02130',1);
           pprint_addy            |         st_astext          | rating
----------------------------------+----------------------------+--------
98 Haverford St, Boston, MA 02130 | POINT(-71.101375 42.31376) |      0
Get_Geocode_Setting
SELECT get_geocode_setting('debug_geocode_address) As result;
result
---------
false
        
Get_Tract
SELECT get_tract(ST_Point(-71.101375, 42.31376) ) As tract_name;
tract_name
---------
1203.01
        
Install_Missing_Indexes
SELECT install_missing_indexes();
         install_missing_indexes
-------------------------
 t
        
Loader_Generate_Census_Script
SELECT loader_generate_census_script(ARRAY['MA'], 'windows');
-- result --
set STATEDIR="\gisdata\www2.census.gov\geo\pvs\tiger2010st\25_Massachusetts"
set TMPDIR=\gisdata\temp\
set UNZIPTOOL="C:\Program Files\7-Zip\7z.exe"
set WGETTOOL="C:\wget\wget.exe"
set PGBIN=C:\projects\pg\pg91win\bin\
set PGPORT=5432
set PGHOST=localhost
set PGUSER=postgres
set PGPASSWORD=yourpasswordhere
set PGDATABASE=tiger_postgis20
set PSQL="%PGBIN%psql"
set SHP2PGSQL="%PGBIN%shp2pgsql"
cd \gisdata

%WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html
del %TMPDIR%\*.* /Q
%PSQL% -c "DROP SCHEMA tiger_staging CASCADE;"
%PSQL% -c "CREATE SCHEMA tiger_staging;"
cd %STATEDIR%
for /r %%z in (*.zip) do %UNZIPTOOL% e %%z  -o%TMPDIR%
cd %TMPDIR%
%PSQL% -c "CREATE TABLE tiger_data.MA_tract(CONSTRAINT pk_MA_tract PRIMARY KEY (tract_id) ) INHERITS(tiger.tract); "
%SHP2PGSQL% -c -s 4269 -g the_geom   -W "latin1" tl_2010_25_tract10.dbf tiger_staging.ma_tract10 | %PSQL%
%PSQL% -c "ALTER TABLE tiger_staging.MA_tract10 RENAME geoid10 TO tract_id;  SELECT loader_load_staged_data(lower('MA_tract10'), lower('MA_tract')); "
%PSQL% -c "CREATE INDEX tiger_data_MA_tract_the_geom_gist ON tiger_data.MA_tract USING gist(the_geom);"
%PSQL% -c "VACUUM ANALYZE tiger_data.MA_tract;"
%PSQL% -c "ALTER TABLE tiger_data.MA_tract ADD CONSTRAINT chk_statefp CHECK (statefp = '25');"
: 
Loader_Generate_Script
psql -U postgres -h localhost -d gistest -A -t \
 -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'gistest')" > /gisdata/data_load.sh;
Loader_Generate_Nation_Script
SELECT loader_generate_nation_script('windows'); 
Missing_Indexes_Generate_Script
SELECT missing_indexes_generate_script();
-- output: This was run on a database that was created before many corrections were made to the loading script ---
CREATE INDEX idx_tiger_county_countyfp ON tiger.county USING btree(countyfp);
CREATE INDEX idx_tiger_cousub_countyfp ON tiger.cousub USING btree(countyfp);
CREATE INDEX idx_tiger_edges_tfidr ON tiger.edges USING btree(tfidr);
CREATE INDEX idx_tiger_edges_tfidl ON tiger.edges USING btree(tfidl);
CREATE INDEX idx_tiger_zip_lookup_all_zip ON tiger.zip_lookup_all USING btree(zip);
CREATE INDEX idx_tiger_data_ma_county_countyfp ON tiger_data.ma_county USING btree(countyfp);
CREATE INDEX idx_tiger_data_ma_cousub_countyfp ON tiger_data.ma_cousub USING btree(countyfp);
CREATE INDEX idx_tiger_data_ma_edges_countyfp ON tiger_data.ma_edges USING btree(countyfp);
CREATE INDEX idx_tiger_data_ma_faces_countyfp ON tiger_data.ma_faces USING btree(countyfp);
        
Normalize_Address
SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev
 FROM (SELECT address, normalize_address(address) As na
        FROM addresses_to_geocode) As g;

                        orig                         |  streetname   | streettypeabbrev
-----------------------------------------------------+---------------+------------------
 28 Capen Street, Medford, MA                        | Capen         | St
 124 Mount Auburn St, Cambridge, Massachusetts 02138 | Mount Auburn  | St
 950 Main Street, Worcester, MA 01610                | Main          | St
 529 Main Street, Boston MA, 02129                   | Main          | St
 77 Massachusetts Avenue, Cambridge, MA 02139        | Massachusetts | Ave
 25 Wizard of Oz, Walaford, KS 99912323              | Wizard of Oz  |
        
Pagc_Normalize_Address
SELECT addy.*
FROM pagc_normalize_address('9000 E ROO ST STE 999, Springfield, CO') AS addy;


 address | predirabbrev | streetname | streettypeabbrev | postdirabbrev | internal  |  location   | stateabbrev | zip | parsed
---------+--------------+------------+------------------+---------------+-----------+-------------+-------------+-----+--------
    9000 | E            | ROO        | ST               |               | SUITE 999 | SPRINGFIELD | CO          |     | t
Pprint_Addy
SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;
            pretty_address
---------------------------------------
 202 E Fremont St, Las Vegas, NV 89101
        
Reverse_Geocode
SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3,
            array_to_string(r.street, ',') As cross_streets
        FROM reverse_geocode(ST_GeomFromText('POINT(-71.093902 42.359446)',4269),true) As r;

 result
 ------
      st1                                  | st2 | st3 |               cross_streets
-------------------------------------------+-----+-----+----------------------------------------------
 67 Massachusetts Ave, Cambridge, MA 02139 |     |     | 67 - 127 Massachusetts Ave,32 - 88 Vassar St
Topology_Load_Tiger
SELECT topology.CreateTopology('topo_boston', 2249, 0.25);
createtopology
--------------
   15
-- 60,902 ms ~ 1 minute on windows 7 desktop running 9.1 (with 5 states tiger data loaded)
SELECT tiger.topology_load_tiger('topo_boston', 'place', '2507000');
-- topology_loader_tiger --
29722 edges holding in temporary. 11108 faces added. 1875 edges of faces added.  20576 nodes added.
19962 nodes contained in a face.  0 edge start end corrected.  31597 edges added.

-- 41 ms --
SELECT topology.TopologySummary('topo_boston');
 -- topologysummary--
Topology topo_boston (15), SRID 2249, precision 0.25
20576 nodes, 31597 edges, 11109 faces, 0 topogeoms in 0 layers

-- 28,797 ms to validate yeh returned no errors --
SELECT * FROM
    topology.ValidateTopology('topo_boston');

       error       |   id1    |    id2
-------------------+----------+-----------
      
Set_Geocode_Setting
SELECT set_geocode_setting('debug_geocode_address', 'true') As result;
result
---------
true