我有一个城市+州信息,我正在努力寻找这个县。 我试了几件事。我得到的最接近的是使用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'
问题在于,目前还不清楚该县是否是输出的一部分,以及它是如何使用代码提取它的(字符串格式似乎有所改变)。
获取城市+州的县信息的最佳方式是什么?
答案 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具有xml
或json
响应格式。
您的示例所需的唯一更改是使用州缩写:
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)
答案 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选项。