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.14960 40.58346) Staten Island, City of New York, New York, Uni...
1 POINT (-73.82831 40.71351) Queens, City of New York, New York, United States
2 POINT (-73.94972 40.65260) Brooklyn, City of New York, New York, United S...
3 POINT (-73.95989 40.78962) Manhattan, City of New York, New York, United ...
4 POINT (-73.87859 40.84665) The Bronx, City of New York, New York, United ...
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).