找一个城市,州

时间:2017-05-26 19:19:08

标签: python geocoding geopy

我有一个城市+州信息,我正在努力寻找这个县。 我试了几件事。我得到的最接近的是使用geopy。这是一个例子:

from geopy.geocoders import Nominatim
geolocator = Nominatim()
loc = geolocator.geocode('Chicago Illinois')
print(loc.address)
# u'Chicago, Cook County, Illinois, United States of America'
loc = geolocator.geocode('San Francisco California')
print(loc.address) 
# u'SF, California, United States of America'

问题在于,目前还不清楚该县是否是输出的一部分,以及它是如何使用代码提取它的(字符串格式似乎有所改变)。

获取城市+州的县信息的最佳方式是什么?

5 个答案:

答案 0 :(得分:1)

它也可以在列表中使用Google API" address_components" [国家 - >州 - >县 - > ...]:

request(
    'http://maps.googleapis.com/maps/api/geocode/json', 'GET', {
        'address': 'Chicago Illinois'
        'language': 'en',
        'sensor': 'true'
    }
)

如果从第一个列表中获取了太多变化,你必须定义正确的长/ lat:

request(
    'http://maps.googleapis.com/maps/api/geocode/json', 'GET', {
        'latlng': "${Latitude},${Longitude}",
        'language': 'en',
        'sensor': 'true'
    }
)

另一个示例,Yahoo API:

request('https://query.yahooapis.com/v1/public/yql', 'GET', {
    'q': "select * from geo.places.parent where child_woeid in (select woeid from geo.places where text='Chicago, Illinois')",
    'market': 'en-gb',
    'format': 'json',
    'env': 'store%3A%2F%2Fdatatables.org%2Falltableswithkeys',
    'callback': ''
})

假设,任何GEO API都可以直接使用相同的方式。

答案 1 :(得分:1)

这是一个弱点,因为geopy并不能保证县的回应。如果您对其他API持开放态度,则U.S. Small Business Administration会有一个U.S. City & County Web Data API,其中包含“特定城市的所有数据”端点,其中包含城市和县的城市,例如{{3} }}。

API具有xmljson响应格式。 您的示例所需的唯一更改是使用州缩写:

import requests
import json

locations = ['Chicago, IL', 'San Francisco, CA']

city_data_url = 'http://api.sba.gov/geodata/primary_links_for_city_of/%s/%s.json'

for l in locations:
    split_name = l.split(', ')
    response = requests.get(city_data_url % tuple(split_name))

    resp_json = json.loads(response.text)
    print resp_json[0]['full_county_name']

输出:

Cook County
San Francisco County

答案 2 :(得分:1)

这是一个geocoder solution,可以帮助您获取县数据。如果您还没有安装它,可以pip install geocoder

import geocoder

results = geocoder.google("Chicago, IL")

print(results.current_result.county)

enter image description here

答案 3 :(得分:1)

请使用以下代码提取国家名称的最后一个单词。

from geopy.geocoders import Nominatim

geolocator = Nominatim(timeout=3)

location = geolocator.geocode('Chicago Illinois',language='en')

loc_dict = location.raw

print(loc_dict['display_name'])

print (loc_dict['display_name'].rsplit(',' , 1)[1])


location = geolocator.geocode('San Francisco California')

loc_dict = location.raw

print(loc_dict['display_name'])

print (loc_dict['display_name'].rsplit(',' , 1)[1])

答案 4 :(得分:0)

还有geocoder project使得通过城市或城市和州进行地理编码查找变得非常容易。它支持多个提供商,请查看this table

使用" Google Maps Geocoding"提供商:

In [1]: import geocoder

In [2]: GOOGLE_GEOCODE_API_KEY = "your_api_key"

In [3]: result = geocoder.google("Chicago, IL", key=GOOGLE_GEOCODE_API_KEY)

In [4]: result.country_long
Out[4]: 'United States'

In [5]: result.country
Out[5]: 'US'

此处的Google Maps Geocoding API密钥是可选的,但允许更好的API使用rate limits。当然,还有高级API选项。