Skip to content
Geocoding library for Python.
Python Makefile
Branch: master
Clone or download
Latest commit 564b9cc Sep 22, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs Update changelog May 26, 2019
test Fix Geolake: KeyError: 'city' #366 (#373) Sep 22, 2019
.coveragerc Replace nosetest with pytest Apr 14, 2018
.editorconfig Add .editorconfig May 10, 2018
.gitignore Replace nosetest with pytest Apr 14, 2018
.travis.yml Travis: use xenial dist globally; sudo is not used (#372) Sep 21, 2019
AUTHORS Pull up AUTHORS May 26, 2019 Readme.rst: remove the full list of supported geocoding services Dec 1, 2018
LICENSE Update copyright years everywhere else Jul 6, 2018 Update + exclude pyc/DS_Store Mar 13, 2018
Makefile Add isort Nov 4, 2018
README.rst Doc: use pycon instead of python for pygments code (#371) Sep 20, 2019 pytest: retry failed urllib requests, print request statistics Sep 9, 2018
pytest.ini Base Geocoder: log (as INFO) response body for >=400 http status Sep 12, 2018
setup.cfg Add namedetails argument to Nominatim (#368) Aug 4, 2019 Add isort Nov 4, 2018
tox.ini Travis: add stages, speed up build by splitting the `dev` extras Sep 9, 2018



Latest Version Build Status License

geopy is a Python 2 and 3 client for several popular geocoding web services.

geopy makes it easy for Python developers to locate the coordinates of addresses, cities, countries, and landmarks across the globe using third-party geocoders and other data sources.

geopy includes geocoder classes for the OpenStreetMap Nominatim, Google Geocoding API (V3), and many other geocoding services. The full list is available on the Geocoders doc section. Geocoder classes are located in geopy.geocoders.

geopy is tested against CPython (versions 2.7, 3.4, 3.5, 3.6, 3.7), PyPy, and PyPy3. geopy does not and will not support CPython 2.6.

© geopy contributors 2006-2018 (see AUTHORS) under the MIT License.


Install using pip with:

pip install geopy

Or, download a wheel or source archive from PyPI.


To geolocate a query to an address and coordinates:

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim(user_agent="specify_your_app_name_here")
>>> location = geolocator.geocode("175 5th Avenue NYC")
>>> print(location.address)
Flatiron Building, 175, 5th Avenue, Flatiron, New York, NYC, New York, ...
>>> print((location.latitude, location.longitude))
(40.7410861, -73.9896297241625)
>>> print(location.raw)
{'place_id': '9167009604', 'type': 'attraction', ...}

To find the address corresponding to a set of coordinates:

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim(user_agent="specify_your_app_name_here")
>>> location = geolocator.reverse("52.509669, 13.376294")
>>> print(location.address)
Potsdamer Platz, Mitte, Berlin, 10117, Deutschland, European Union
>>> print((location.latitude, location.longitude))
(52.5094982, 13.3765983)
>>> print(location.raw)
{'place_id': '654513', 'osm_type': 'node', ...}

Measuring Distance

Geopy can calculate geodesic distance between two points using the geodesic distance or the great-circle distance, with a default of the geodesic distance available as the function geopy.distance.distance.

Here's an example usage of the geodesic distance:

>>> from geopy.distance import geodesic
>>> newport_ri = (41.49008, -71.312796)
>>> cleveland_oh = (41.499498, -81.695391)
>>> print(geodesic(newport_ri, cleveland_oh).miles)

Using great-circle distance:

>>> from geopy.distance import great_circle
>>> newport_ri = (41.49008, -71.312796)
>>> cleveland_oh = (41.499498, -81.695391)
>>> print(great_circle(newport_ri, cleveland_oh).miles)


More documentation and examples can be found at Read the Docs.

You can’t perform that action at this time.