Reputation: 347
Using Python, is there a function, library, or other way to check to see if a certain lat/lon coordinate pair fall within a defined geographical boundary such as a US state?
Example:
Does 32.781065, -96.797117 fall within Texas?
Upvotes: 6
Views: 7942
Reputation: 735
Just to build on mathisonian's answer.
import reverse_geocoder
#create a list of US states (and the District of Columbia)
state_names = ["Alaska", "Alabama", "Arkansas", "Arizona", "California", "Colorado", "Connecticut", "District of Columbia","Delaware", "Florida","Georgia", "Hawaii", "Iowa", "Idaho", "Illinois", "Indiana", "Kansas", "Kentucky", "Louisiana", "Massachusetts", "Maryland", "Maine", "Michigan", "Minnesota", "Missouri", "Mississippi", "Montana", "North Carolina", "North Dakota", "Nebraska", "New Hampshire", "New Jersey", "New Mexico", "Nevada", "New York", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina","South Dakota", "Tennessee", "Texas", "Utah", "Virginia", "Vermont", "Washington", "Wisconsin", "West Virginia", "Wyoming"]
#get the metadata for the latitude and longitude coordinates
results = reverse_geocoder.search((32.781065, -96.797117))
#check if the location is a US state (the 'admin1' variable is where US states are listed)
if results[0]['admin1'] in state_names:
print(results[0]['admin1'])
That should print "Texas".
Upvotes: 0
Reputation: 3653
You can use the geocoder library which you can install using pip install geocoder
.
import geocoder
results = geocoder.google('32.781065, -96.797117', reverse = True)
print(results.current_result.state_long)
Upvotes: 2
Reputation: 1420
You could use the reverse geocode library, and then check that the "admin1" area is a specific US state.
It converts lat/lon coordinates into dictionaries like:
{
'name': 'Mountain View',
'cc': 'US',
'lat': '37.38605',
'lon': '-122.08385',
'admin1': 'California',
'admin2': 'Santa Clara County'
}
Upvotes: 5
Reputation: 61508
I would use the requests library to send a request to the Google geocoding API.
Upvotes: 1