我正在尝试在Python中使用Twitter API,对于流API,我需要传递如何查找城市或国家或任何位置的经度和纬度对。
有没有办法在Python中找到这个 Pair ,或者是否有一个文件具有城市/国家/等的经度和纬度?
我需要一对经度和纬度,即两个经度和两个纬度。一个位于该位置的东北部,另一个位于该位置的西南部(假设该城市可以用矩形表示)。
答案 0 :(得分:1)
使用有用的BeautifulSoup。
代码:
import re
import urllib2
# Import Custom libraries
from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
def render_google_uri(idict):
'''
Render the appropriate Google Map Api request uri
'''
base_url = "http://maps.googleapis.com/maps/api/geocode/xml?"
options = [(key,re.sub("\s+", "+", value)) for (key, value) in idict.items()]
options = map(lambda x: "=".join(x), options)
options = "&".join(options)
url = base_url + options
return url
def get_street_position(*args):
'''
Longitude and Latitude from Street Address
'''
def is_result(itag):
if itag.name == "result":
if itag.type.text == "locality":
return True
return False
ret_list = []
for address in args:
google_api_dict = \
{
"address" : address,
"sensor" : "false",
}
request_uri = render_google_uri(google_api_dict)
request = urllib2.Request(request_uri, None, {})
try:
response = urllib2.urlopen(request)
the_page = response.read()
except Exception:
the_page = ""
if the_page:
pool = BeautifulStoneSoup(the_page)
result = pool.find(is_result)
if result:
bounds = result.find("bounds")
if bounds:
cur_dict = \
{
"Address" : address,
"Google Address" : result.formatted_address.text,
"Bounds" : \
{
"SW" :
{
"Longitude" : bounds.southwest.lng.text,
"Latitude" : bounds.southwest.lat.text
},
"NE" :
{
"Longitude" : bounds.northeast.lng.text,
"Latitude" : bounds.northeast.lat.text
}
}
}
ret_list += [cur_dict]
return ret_list
if __name__ == "__main__":
print get_street_position("Sydney", "Marrakech")
答案 1 :(得分:0)
快速谷歌透露: http://www.kindle-maps.com/blog/csv-location-of-all-the-cities-in-the-world.html
将此CSV读入内存应该是微不足道的。
或者,由于您已经在线,因此可以使用Google地图或其他API来提取信息。