邮政编码数据免费来自世界各国政府。然而,许多组织,无论是否有信誉,都想为此收费。
该项目是一个用于检索和整理美国和全球邮政编码数据的自动化解决方案。
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 继承)获得许可。
有关更多历史记录和勘误表,请参阅变更日志。