Skip to main content

Wrapper module for the OpenCage Geocoder API

Project description

OpenCage Geocoding Module for Python

A Python module to access the OpenCage Geocoding API.

Build Status / Code Quality / etc

PyPI version Downloads Versions GitHub contributors Build Status Mastodon Follow

Tutorials

You can find a comprehensive tutorial for using this module on the OpenCage site.

There are two brief video tutorials on YouTube, one covering forward geocoding, one covering reverse geocoding.

The module installs an opencage CLI tool for geocoding files. Check opencage --help or the CLI tutorial.

Usage

Supports Python 3.8 or newer. Starting opencage version 3.0 depends on asyncio package.

Install the module:

pip install opencage

Load the module:

from opencage.geocoder import OpenCageGeocode

Create an instance of the geocoder module, passing a valid OpenCage Data Geocoder API key as a parameter to the geocoder modules's constructor:

key = 'your-api-key-here'
geocoder = OpenCageGeocode(key)

Pass a string containing the query or address to be geocoded to the modules' geocode method:

query = '82 Clerkenwell Road, London'
results = geocoder.geocode(query)

You can add additional parameters:

results = geocoder.geocode('London', no_annotations=1, language='es')

For example you can use the proximity parameter to provide the geocoder with a hint:

results = geocoder.geocode('London', proximity='42.828576, -81.406643')
print(results[0]['formatted'])
# u'London, ON N6A 3M8, Canada'

Reverse geocoding

Turn a lat/long into an address with the reverse_geocode method:

result = geocoder.reverse_geocode(51.51024, -0.10303)

Sessions

You can reuse your HTTP connection for multiple requests by using a with block. This can help performance when making a lot of requests:

queries = ['82 Clerkenwell Road, London', ...]
with OpenCageGeocode(key) as geocoder:
    # Queries reuse the same HTTP connection
    results = [geocoder.geocode(query) for query in queries]

Asyncronous requests

You can run requests in parallel with the geocode_async and reverse_geocode_async method which have the same parameters and response as their synronous counterparts. You will need at least Python 3.8 and the asyncio and aiohttp packages installed.

async with OpenCageGeocode(key) as geocoder:
    results = await geocoder.geocode_async(address)

For a more complete example and links to futher tutorials on asyncronous IO see batch.py in the examples directory.

Non-SSL API use

If you have trouble accesing the OpenCage API with https, e.g. issues with OpenSSL libraries in your enviroment, then you can set the 'http' protocol instead. Please understand that the connection to the OpenCage API will no longer be encrypted.

geocoder = OpenCageGeocode('your-api-key', 'http')

Exceptions

If anything goes wrong, then an exception will be raised:

  • InvalidInputError for non-unicode query strings
  • NotAuthorizedError if API key is missing, invalid syntax or disabled
  • ForbiddenError API key is blocked or suspended
  • RateLimitExceededError if you go past your rate limit
  • UnknownError if there's some problem with the API (bad results, 500 status code, etc)

Command-line batch geocoding

Use opencage forward or opencage reverse

opencage forward --help

options:
  -h, --help            show this help message and exit
  --api-key API_KEY     Your OpenCage API key
  --input FILENAME      Input file name
  --output FILENAME     Output file name
  --headers             If the first row should be treated as a header row
  --input-columns       Comma-separated list of integers (default '1')
  --add-columns         Comma-separated list of output columns (default 'lat,lng,_type,_category,country_code,country,state,county,_normalized_city,postcode,road,house_number,confidence,formatted')
  --workers             Number of parallel geocoding requests (default 1)
  --timeout             Timeout in seconds (default 10)
  --retries             Number of retries (default 5)
  --api-domain          API domain (default api.opencagedata.com)
  --optional-api-params
                        Extra parameters for each request (e.g. language=fr,no_dedupe=1)
  --unordered           Allow the output lines to be in different order (can be faster)
  --limit               Stop after this number of lines in the input
  --dry-run             Read the input file but no geocoding
  --no-progress         Display no progress bar
  --quiet               No progress bar and no messages
  --overwrite           Delete the output file first if it exists
  --verbose             Display debug information for each request

Copyright & License

This software is copyright OpenCage GmbH. Please see LICENSE.txt

Who is OpenCage GmbH?

We run a worldwide geocoding API and geosearch service based on open data. Learn more about us.

We also run Geomob, a series of regular meetups for location based service creators, where we do our best to highlight geoinnovation. If you like geo stuff, you will probably enjoy the Geomob podcast.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opencage-3.0.3.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

opencage-3.0.3-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file opencage-3.0.3.tar.gz.

File metadata

  • Download URL: opencage-3.0.3.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.0

File hashes

Hashes for opencage-3.0.3.tar.gz
Algorithm Hash digest
SHA256 46b52e48c268aa5103304890dfeb4115d8a8606c8f2459fd0ea26297f27e3fea
MD5 358e4a978e6cdae5782aad025408686a
BLAKE2b-256 1728543a42164349694fff81001ca96a2485d4ca587539e2de31f42a1c37dbbe

See more details on using hashes here.

File details

Details for the file opencage-3.0.3-py3-none-any.whl.

File metadata

  • Download URL: opencage-3.0.3-py3-none-any.whl
  • Upload date:
  • Size: 22.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.0

File hashes

Hashes for opencage-3.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c2344b8ada19f86508be2c428b4a0396f7dd4e5fc8d72e6a5b607ddc281ef469
MD5 a31586fa71f61c0b086df5ad8cf1c98d
BLAKE2b-256 fe80cc0ff15bbc646c1262895845b2a74b35326c218e4796d27108bdd90eb144

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page