Какой лучший способ поиска округа США, в котором проживает город США? - PullRequest
10 голосов
/ 06 июля 2011

Я ищу лучший / самый простой способ программно получить название округа США, в котором находится данный город США. Не кажется, что для такой (казалось бы простой) задачи доступен простой API?

Ответы [ 6 ]

9 голосов
/ 06 июля 2011

Вы можете загрузить свободно доступную базу данных о округе / городе / почтовом индексе, такую ​​как эта: http://www.unitedstateszipcodes.org/zip-code-database/ (не нужно регистрироваться или платить)

Импортируйте целиком илиего подраздел, в локальное, постоянное хранилище данных (например, базу данных) и запрашивать его всякий раз, когда вам нужно найти округ города

Примечание: Информация о округе исчезла из первоначальнофайл .csv с момента публикации этого ответа.Эта ссылка больше не содержит информацию округа: http://federalgovernmentzipcodes.us/free-zipcode-database.csv

4 голосов
/ 18 июня 2018

1) Города охватывают округа

2) Почтовые индексы охватывают как города, так и округа, даже не в одной строке

Любое решение, использующее zip в качестве посредника, повредит ваши данные (и нет, "zip + 4" обычно не исправит это).Вы обнаружите, что карта данных «город-почтовый индекс-графство» (# 2) имеет большее количество совпадений «город-округ», чем более точная модель (# 1) - все это плохие совпадения.

То, что вы ищете, это бесплатные данные переписи.Необходимый набор данных Федеральных стандартов обработки информации (FIPS) называется «Коды ANSI 2010 года для мест»: https://www.census.gov/geographies/reference-files/time-series/geo/name-lookup-tables.2010.html

Места переписи - это «города» для нашего вопроса.Эти файлы отображают «места» в одном или нескольких графствах.

2 голосов
/ 06 июля 2011

Использовать геопространственные функции для этой задачи будет нелегко из-за странного многоугольника округов и точечных местоположений городов.

Ваш лучший выбор - обратиться к базе данных городов и их соответствующих округов, хотя я не знаю, где вы могли бы их найти. Может быть, Техас издает один?
CommonDataHub не содержит эту информацию.

1 голос
/ 17 февраля 2018

Здесь приведен фрагмент кода, позволяющий программно получить название округа США для одного города / штата США с помощью API Карт Google.Этот код медленный / неэффективный и не имеет никакой обработки ошибок.Тем не менее, для меня было надежно сопоставить округа со списком ~ 1000 городов.

#Set up googlemaps API
import googlemaps
google_maps = googlemaps.Client(key='API_KEY_GOES_HERE')

#String of city/state
address_string = 'Atlanta, GA'

#Geocode
location = google_maps.geocode(address_string)

#Loop through the first dictionary within `location` and find the address component that contains the 'administrative_area_level_2' designator, which is the county level
target_string = 'administrative_area_level_2'
for item in location[0]['address_components']:     
    if target_string in item['types']: #Match target_string
        county_name = item['long_name'] #Or 'short_name'
        break #Break out once county is located
    else:
        #Some locations might not contain the expected information
        pass

Это дает:

>>> county_name
Fulton County

Предостережения:

  1. код сломается, если google_maps.geocode () не передан действительный адрес
  2. определенные адреса не будут возвращать данные, соответствующие 'administrator_area_level_2'
  3. , это не решает проблему городов США, которые охватываютнесколько округов.Вместо этого я думаю, что API просто возвращает округ, связанный с одной широтой / долготой, связанной с address_string
1 голос
/ 06 июля 2011

См. Эту ссылку для всех городов в штате Техас из переписи 2000 года

http://www.tsl.state.tx.us/ref/abouttx/popcity32000.html

0 голосов
/ 06 июля 2011

Самый быстрый и не уклончивый способ - использовать запрос JSON / XML из бесплатного API геолокации (его легко найти в Google).Таким образом, вам не нужно создавать / размещать собственную базу данных.

...