I am working on an application where one of the requirements is that I be able to perform realtime reverse geocoding operations based on GPS data. In particular, I must be able to determine the state/province to which a latitude, longitude pair maps and detect when we have moved from one state/province to another.
I have a couple ideas so far but wondered if anyone had any ideas on either of the following:
As a starter, here are the two main ideas I have:
I am working in python for the interested or those that might have a nice library they would like to suggest.
To be clear... I do not have web access available to me, so using an existing reverse geocoding service is not an option at runtime
Reverse Geocoding and Geolocation Service by Noggle is a free API that allows developers to embed the functionality to locate the largest city or nearest one to the latitude to longitude location. Another free reverse geocoding API is Opencage Geocoder by Opencage.
You can use the OpenCage Geocoding API inside Microsoft Excel to convert a list of coordinates to placenames (reverse geocoding) or placenames/addresses to coordinates (forward geocoding).
It's free as long as you credit them and you need fewer than 15000 lookups per day. You can pay if you need more.
While most geocoding services come with a hefty price tag or credit fee, QGIS offers several geocoding plugins for free. And the best part about QGIS is that it's completely open-source licensed under the GNU General Public License. In QGIS 3, geocoding is all in open source using the OSM Place Search plugin.
I created an offline reverse geocoding module for countries: https://bitbucket.org/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'}]
I will see if I can add data for states.
I suggest using a variant of your first idea: Use a spatial index. A spatial index is a data structure built from rectangles, mapping lat/long to the payload. In this case you will probably map rectangles to state-province pairs. An R-tree may be a good option. Here's an R-tree python package. You could detect roaming by comparing the results of consecutive searches.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With