Geocoding¶
geopandas supports geocoding (i.e., converting place names to
location on Earth) through geopy, an optional dependency of geopandas.
The following example shows how to use the Google geocoding API to get the
locations of boroughs in New York City, and plots those locations along
with the detailed borough boundary file included within 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, provider="google")
In [4]: boro_locations
Out[4]:
geometry address
0 GEOMETRYCOLLECTION EMPTY NaN
1 GEOMETRYCOLLECTION EMPTY NaN
2 GEOMETRYCOLLECTION EMPTY NaN
3 GEOMETRYCOLLECTION EMPTY NaN
4 GEOMETRYCOLLECTION EMPTY NaN
In [5]: import matplotlib.pyplot as plt
In [6]: fig, ax = plt.subplots()
In [7]: boros.to_crs({"init": "epsg:4326"}).plot(ax=ax, color="white", edgecolor="black");
In [8]: boro_locations.plot(ax=ax, color="red");
The argument to provider can either be a string referencing geocoding
services, such as 'google', 'bing', 'yahoo', and
'openmapquest', or an instance of a Geocoder from geopy. See
geopy.geocoders.SERVICE_TO_GEOCODER for the full list.
For many providers, parameters such as API keys need to be passed as
**kwargs in the geocode call.
Please consult the Terms of Service for the chosen provider.