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 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)
In [4]: boro_locations
Out[4]:
geometry address
0 POINT (-74.149604800 40.583455700) Staten Island, New York, New York, United States
1 POINT (-73.797633700 40.749824300) Queens, New York, New York, United States
2 POINT (-73.949582300 40.650103800) Brooklyn, New York, New York, United States
3 POINT (-73.959893900 40.789623900) Manhattan, New York, New York, United States
4 POINT (-73.878593700 40.846650800) The Bronx, New York, New York, United States
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");
By default, the geocode() function uses the
Photon geocoding API.
But a different geocoding service can be specified with the
provider keyword.
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.
For example, to use the OpenStreetMap Nominatim geocoder, you need to specify a user agent:
geopandas.tools.geocode(boros.BoroName, provider='nominatim', user_agent="my-application")
Attention
Please consult the Terms of Service for the chosen provider. The example
above uses 'photon' (the default), which expects fair usage
- extensive usage will be throttled.
(Photon’s Terms of Use).