从美国城市名称获取纬度和经度的Python模块

30
我正在寻找一个能够接受城市名称作为输入并返回该城市的纬度和经度的Python模块。
3个回答

44

看一下 geopy。在"入门指南"文档中它展示了:

>>> from geopy import geocoders  
>>> gn = geocoders.GeoNames()

>>> print gn.geocode("Cleveland, OH 44106")
(u'Cleveland, OH, US', (41.4994954, -81.6954088))

>>> gn.geocode("Cleveland, OH", exactly_one=False)[0]
(u'Cleveland, OH, US', (41.4994954, -81.6954088))

21
我需要在http://www.geonames.org/login上创建一个账户,启用免费的Web服务,并发出`gn = geocoders.GeoNames(username='account_username')`。请注意,翻译后的内容应保持原意,同时尽可能通俗易懂。 - Mr_and_Mrs_D
我已经找了很长时间,但是无法弄清楚“启用免费网络服务”的步骤。您知道这在网站上的哪个位置吗? - sapo_cosmico
2
编辑:找到了。它有点反直觉,它是在登录和密码框下面的一个链接(看起来好像需要登录,但实际上它是在外部进行的)。 - sapo_cosmico
@sapo_cosmico 我也在尝试找到它,它可能在这里?http://www.geonames.org/export/ - Olli
@sapo_cosmico 是的,如果您在网站右上角点击了您的用户名,则它位于登录框下方。 - Youth overturn
对我来说,启用按钮位于https://www.geonames.org/manageaccount。 - kevinlinxc

38

一个例子:

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent='myapplication')
location = geolocator.geocode("Chicago Illinois")
print(location.address)

可用信息:

>>> location.raw
{u'display_name': u'Chicago, Cook County, Illinois, United States of America', u
'importance': 1.0026476104889, u'place_id': u'97957568', u'lon': u'-87.6243706',
 u'lat': u'41.8756208', u'osm_type': u'relation', u'licence': u'Data \xa9 OpenSt
reetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', u'osm_i
d': u'122604', u'boundingbox': [u'41.6439170837402', u'42.0230255126953', u'-87.
9401016235352', u'-87.5239791870117'], u'type': u'city', u'class': u'place', u'i
con': u'http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.p
ng'}

给我报错:使用默认的“geopy/1.17.0”user_agent与Nominatim强烈不建议一起使用,因为它违反了Nominatim的ToS https://operations.osmfoundation.org/policies/nominatim/,可能会导致403和429 HTTP错误。请使用Nominatim(user_agent="my-application")指定自定义user_agent或覆盖默认的user_agentgeopy.geocoders.options.default_user_agent = "my-application" - Sarang Manjrekar
3
2022年仍然很好用,不需要API密钥。 - squarespiral

2

您也可以使用 Bing Maps API 的 geocoder 。该 API 为我获取所有地址的纬度和经度数据(不像 Nominatim ),并且它有一个相当不错的免费版本可供非商业用途(每年最多免费请求 125000 次)。要获取免费 API,请前往 此处 并单击“获取免费基本密钥”。获取 API 后,您可以在以下代码中使用它:

import geocoder # pip install geocoder
g = geocoder.bing('Tokyo', key='<API KEY>')
results = g.json
print(results['lat'], results['lng'])

输出:

>>> 35.68696212768555 139.7494659423828

results 包含的信息不仅仅是经度和纬度,请查看。


必应地图!非常好的答案。+1 - ktm5124

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接