Find app users within a certain range

I’m rebuilding an app where a user can find other users within a certain distance (say, 30 miles). The user object has the city, state and/or zip. Any recommendation on how to achieve this efficiently - as in, find all users within the range? I know Google’s Maps api can be used, but would like to know other ideas.