找一个城市的郡

2024-05-11 09:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个城市+州的信息,我正在寻找县。 我试了一些东西。我最近用的是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'

问题是,还不清楚该县是否是输出的一部分,以及如何使用代码提取(字符串格式似乎发生了变化)。

对于城市+州来说,获取县信息的最佳方式是什么?


Tags: of信息addresslocunitedgeocodeprintstates
3条回答

它也可以在列表“address_components”【Country->;State->;Country->;…】中使用Google API:

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

如果第一个列表中的变量太多,则必须定义适当的long/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。

这里有一个geocoder solution可以帮助您获取郡数据。如果尚未安装,则可以pip install geocoder

import geocoder

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

print(results.current_result.county)

enter image description here

这是一个弱点,因为geopy不能保证county做出响应。如果您对其他api开放,U.S. Small Business Administration有一个带有“特定城市的所有数据”端点的U.S. City & County Web Data API,其中有城市的县,而城市和县(如City and County of San Francisco)都是模糊的。

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

相关问题 更多 >