地理编码#
GeoPandas 支持地理编码(即将地名转换为地球上的位置),通过 geopy,这是 GeoPandas 的一个可选依赖项。以下示例显示如何获取纽约市区的位置信息,并将这些位置与包含在 GeoPandas 中的详细区边界文件一起绘制。
In [1]: import geodatasets
In [2]: boros = geopandas.read_file(geodatasets.get_path("nybb"))
In [3]: boros.BoroName
Out[3]:
0 Staten Island
1 Queens
2 Brooklyn
3 Manhattan
4 Bronx
Name: BoroName, dtype: object
In [4]: boro_locations = geopandas.tools.geocode(boros.BoroName)
In [5]: boro_locations
Out[5]:
geometry address
0 POINT (-74.1496048 40.5834557) Staten Island, New York, New York, United States
1 POINT (-73.8283132 40.7135078) Queens, New York, New York, United States
2 POINT (-73.9497211 40.6526006) Brooklyn, New York, New York, United States
3 POINT (-73.9598939 40.7896239) Manhattan, New York, New York, United States
4 POINT (-73.8785937 40.8466508) The Bronx, New York, New York, United States
In [6]: import matplotlib.pyplot as plt
In [7]: fig, ax = plt.subplots()
In [8]: boros.to_crs("EPSG:4326").plot(ax=ax, color="white", edgecolor="black");
In [9]: boro_locations.plot(ax=ax, color="red");

默认情况下,geocode()
函数使用
Photon 地理编码 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的使用条款)。