郵遞區號資料免費來自世界各國政府。然而,許多組織,無論是否有信譽,都想為此收費。
該計畫是用於檢索和整理美國和全球郵遞區號資料的自動化解決方案。
2011 年,我們最初提取了所有能找到的美國人口普查數據,對其進行解析並將其匯出為 3 個 .csv 檔案。後來,我們編寫了 3 個 rake 任務來自動化此流程。
2017 年,我們開始使用 GeoNames 數據,該數據已獲得 Creative Commons 許可。我們感謝 GeoNames 的分享,並敦促您訪問他們的網站並支持他們的工作。
2018 年,我們重構了該項目,並將其製作成帶有命令列可執行檔的 Ruby gem,用於自動執行此程序。
free_zipcode_data
- 它會自動執行從 GeoNames 下載和處理郵遞區號資料的程序。並非所有國家都被計算在內。請檢查 GeoNames 以查看受支援的國家/地區 zip 檔案的清單。每個郵遞區號與估計的或郵遞質心、緯度和經度座標相關。在適用的情況下,國家、縣/省、州和社區也具有相關性。
有關詳細信息,請參閱 GeoNames readme.txt 文件。
首先,您需要安裝 Ruby 和 Rubygems。儘管這不是一項艱鉅的任務,但它超出了本自述文件的範圍。您選擇的搜尋引擎將幫助您了解如何執行此操作。一旦你這樣做了:
$ gem install free_zipcode_data
確定您想要在 GeoNames 中使用的國家/地區的 2 個字母的國家/地區代碼,或不指定國家/地區以取得所有可用國家/地區的所有郵遞區號...
Options:
-w, --work-dir= < s > REQUIRED: Specify your work/build directory, where the SQLite and .csv files will be built
-f, --country= < s > Specify the country code for processing, or all countries if not specified
-g, --generate-files Generate CSV files: [counties.csv, states.csv, countries.csv, zipcodes.csv]
-o, --country-tablename= < s > Specify the name for the ` countries ` table (default: countries)
-s, --state-tablename= < s > Specify the name for the ` states ` table (default: states)
-u, --county-tablename= < s > Specify the name for the ` counties ` table (default: counties)
-z, --zipcode-tablename= < s > Specify the name for the ` zipcodes ` table (default: zipcodes)
-c, --clobber Overwrite existing files
-d, --dry-run Do not actually move or copy files
-v, --verbose Be verbose with output
-h, --help Show this message
下載並處理所有美國郵遞區號:
$ free_zipcode_data --work-dir /tmp/work_dir --country US --generate-files
下載並處理所有可用國家/地區的郵遞區號:
$ free_zipcode_data --work-dir /tmp/work_dir --generate-files
rake 任務從下到上級聯。因此,如果您執行rake data:populate_db
,如果 .csv 檔案遺失,它將自動呼叫rake data:build
,如果 .zip 檔案遺失,它將自動呼叫rake data:download
。
可執行檔將在指定目錄--work-dir
中產生 SQLite3 資料庫,但預設不會產生.csv
檔。如果您也需要這些,請指定--generate-files
。
預設情況下,表將命名如下。若要覆蓋表格名稱,請參閱上面的命令列選項。
create table countries (
id integer not null primary key ,
alpha2 varchar ( 2 ) not null ,
alpha3 varchar ( 3 ),
iso varchar ( 3 ),
name varchar ( 255 ) not null
)
create table states (
id integer not null primary key ,
country_id integer not null ,
abbr varchar ( 2 ) not null ,
name varchar ( 255 )
)
create table counties (
id integer not null primary key ,
state_id integer ,
abbr varchar ( 255 ),
name varchar ( 255 ),
county_seat varchar ( 255 )
)
create table zipcodes (
id integer not null primary key ,
code varchar ( 10 ) not null ,
state_id integer ,
city varchar ( 255 ),
area_code varchar ( 3 ),
lat float,
lon float,
accuracy varchar ( 8 )
)
每個郵遞區號記錄都會填入lat
和lon
(地理編碼)。
郵遞區號資料根據 Creative Commons Attribution 3.0 Unported License(從 GeoNames 繼承)授權。
如需更多歷史記錄和勘誤表,請參閱變更日誌。