地理编码#
geopandas
通过以下方式支持地理编码(即将地名转换为地球上的位置 geopy ,一个可选的依赖项 geopandas
。以下示例显示如何获取纽约市的行政区位置,并将这些位置与包含在中的详细行政区边界文件一起绘制 geopandas
。
In [1]: boros = geopandas.read_file(geopandas.datasets.get_path("nybb"))
In [2]: boros.BoroName
Out[2]:
0 Staten Island
1 Queens
2 Brooklyn
3 Manhattan
4 Bronx
Name: BoroName, dtype: object
In [3]: boro_locations = geopandas.tools.geocode(boros.BoroName)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Input In [3], in <cell line: 1>()
----> 1 boro_locations = geopandas.tools.geocode(boros.BoroName)
File /usr/local/lib/python3.10/dist-packages/geopandas-0.10.2+79.g3abc6a7-py3.10.egg/geopandas/tools/geocoding.py:65, in geocode(strings, provider, **kwargs)
63 if provider is None:
64 provider = "photon"
---> 65 throttle_time = _get_throttle_time(provider)
67 return _query(strings, True, provider, throttle_time, **kwargs)
File /usr/local/lib/python3.10/dist-packages/geopandas-0.10.2+79.g3abc6a7-py3.10.egg/geopandas/tools/geocoding.py:16, in _get_throttle_time(provider)
11 def _get_throttle_time(provider):
12 """
13 Amount of time to wait between requests to a geocoding API, for providers
14 that specify rate limits in their terms of service.
15 """
---> 16 import geopy.geocoders
18 # https://operations.osmfoundation.org/policies/nominatim/
19 if provider == geopy.geocoders.Nominatim:
ModuleNotFoundError: No module named 'geopy'
In [4]: boro_locations
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [4], in <cell line: 1>()
----> 1 boro_locations
NameError: name 'boro_locations' is not defined
In [5]: import matplotlib.pyplot as plt
In [6]: fig, ax = plt.subplots()
In [7]: boros.to_crs("EPSG:4326").plot(ax=ax, color="white", edgecolor="black");
In [8]: boro_locations.plot(ax=ax, color="red");

默认情况下, geocode()
函数使用 Photon geocoding API 。但是,可以使用指定的 provider
关键字。
的参数 provider
可以是引用地理编码服务的字符串,例如 'google'
, 'bing'
, 'yahoo'
,以及 'openmapquest'
,或一个 Geocoder
从… geopy
。看见 geopy.geocoders.SERVICE_TO_GEOCODER
查看完整的名单。对于许多提供程序,诸如API密钥之类的参数需要作为 **kwargs
在 geocode()
打电话。
例如,要使用OpenStreetMap Nominatim地理编码器,您需要指定一个用户代理:
geopandas.tools.geocode(boros.BoroName, provider='nominatim', user_agent="my-application")
注意
请查阅所选提供商的服务条款。上面的示例使用 'photon'
(默认),预计公平使用-广泛使用将受到限制。 (Photon's Terms of Use )。