地理编码#

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");
../../_images/boro_centers_over_bounds.png

默认情况下,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的使用条款)。