6

I am writing a Python script that passes a latitude and longitude to a module and performs a reverse geocode function to return the address of the location. I have been using Google's PyGeoCoder to do this, but it requires access to the Internet. I am needing something similar to PyGeoCoder but open sourced and completely offline.

2 Answers 2

11

I created a module to do exactly that: https://github.com/richardpenman/reverse_geocode

>>> import reverse_geocode >>> coordinates = (-37.81, 144.96), (31.76, 35.21) >>> reverse_geocode.search(coordinates) [{'city': 'Melbourne', 'code': 'AU', 'country': 'Australia'}, {'city': 'Jerusalem', 'code': 'IL', 'country': 'Israel'}] 

Internally it uses locations from the geonames database and a k-d tree to find the nearest neighbour.

Sign up to request clarification or add additional context in comments.

5 Comments

How do you search for only one coordinate? I tried coordinates = (-37.81, 144.96) and then reverse_geocode.search(coordinates), but I get an error saying: TypeError: 'int' object is not iterable.
Can you also add the US state, e.g. Texas, Florida, in the result?
The "search" method expects a list. Can use "get "method" for a single data point.
An improved version of this library is available at github.com/thampiman/reverse-geocoder
@Motin, this library is abandoned since at least 4 years. The original still gets updates.
7

Have you considered using OpenStreetMap? You can download the whole database (the "planet") or one of the extracts if you just need a specific area. Afterwards you can filter out all addresses and use the resulting data for your geocoding. There are several search engines for OSM available, the most popular one is Nominatim. It is used on the main website and can do both geocoding and reverse-geocoding. So it might be a good starting point for your task.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.