I have a point shapefile with "Lat" and "Lon" attributes with more than 1000 features.

I want to add street address data in the shapefile by Reverse Geocoding but the Geocoding plugin has no such option. Can someone suggest any other tool to create address data?

I have CSV-files as well.


Here's a solution that doesn't require any coding. This solution will work if:

  • Your points are all fairly close together, say all in the same county, or within a few counties.
  • Your points are in the US or another country that has property ownership data available for download.

Find and download the property ownership (parcel) polygon data for the county or counties that your points are in.

Property boundaries should be available for download for most of the US. These parcel boundaries are most likely to be found on the county tax auditor's website. (Some states may also have them collected in one data clearinghouse.) An internet search for some combination of the following should work: the name of your county, "auditor," "parcel" and "shapefile."

Note: parcel files are quite large and can be slow to load. You may want to turn off rendering before importing the parcels into QGIS.

Do a spatial join between the tax parcels and the points.

  • If every point falls within a polygon, use the "Join Attributes by Location" tool. Detailed instructions

  • If some of the points are outside the parcel polygons, do a nearest neighbor join using the NNJoins plugin. Detailed instructions


Not a QGIS solution but what may work for you is the Python Geocoder library. For reverse geocoding you have the option to choose from multiple providers though some of them may have limits on number of queries or may require an API key.

Since you have more than 1000 features to look up, OpenStreetMap provider should do the trick without any restrictions.

Following is an example of how to go about it (assuming points is a list of features you want to reverse geocode with their latitude and longitude stored as points[index].lat and points[index].long) while storing the address in points[index].address -

import geocoder

for index in range(0,len(points)):
  g = geocoder.osm( [ points[index].lat, points[index].long ], method='reverse')
  points[index].address = g.address

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.