Данные о почтовых индексах предоставляются правительствами различных стран мира бесплатно. Однако очень многие организации, уважаемые или нет, хотят брать за это деньги.
Этот проект представляет собой автоматизированное решение для получения и сопоставления данных о почтовых индексах в США и во всем мире.
В 2011 году мы первоначально собрали все данные переписи населения США, которые смогли найти, проанализировали их и экспортировали в три файла .csv. Позже мы написали 3 rake-задачи для автоматизации этого процесса.
В 2017 году мы начали использовать данные GeoNames, доступные по лицензии Creative Commons. Мы благодарны GeoNames за то, что поделились информацией, и призываем вас посетить их сайт и поддержать их работу.
В 2018 году мы провели рефакторинг проекта и превратили его в гем Ruby с исполняемым файлом командной строки для автоматизации этого процесса.
free_zipcode_data
— который автоматизирует процесс загрузки и обработки данных почтового индекса из GeoNames. Учтены не все страны. Пожалуйста, проверьте GeoNames, чтобы увидеть список поддерживаемых zip-файлов для стран.Каждый почтовый индекс соотносится с предполагаемыми координатами или координатами почтового центра, широты и долготы. Там, где это применимо, также коррелируют страна, округ/провинция, штат и сообщество.
Дополнительную информацию см. в файле readme.txt GeoNames.
Сначала вам необходимо установить Ruby и Rubygems. Хотя это и не сложная задача, она выходит за рамки данного README. Поисковая система по вашему выбору поможет узнать, как это сделать. Как только вы это сделаете:
$ gem install free_zipcode_data
Определите двухбуквенные коды стран, которые вы хотите использовать в GeoNames, или не указывайте страну, чтобы получить все почтовые индексы для всех доступных стран...
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 data:populate_db
, он автоматически вызовет rake data:build
, если файлы .csv отсутствуют, который вызовет rake data:download
если файлы .zip отсутствуют.
Исполняемый файл создаст базу данных SQLite3 в указанном каталоге --work-dir
но по умолчанию он не будет создавать файлы .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, перенесенной из GeoNames.
См. CHANGELOG для получения дополнительной истории и ошибок.