A simple approach is to just geocode all the locations to a lat/lon and do a proximity search using WGS84. If someone has a location entry in their profile that fails geocoding, put up a warning the next time they login telling them that their location was not resolved and they should update it.
Don't worry about queries like "SF" or "Bay area"... if it's not good enough for the geocoder to resolve the location, just return an error message.
Don't worry about queries like "SF" or "Bay area"... if it's not good enough for the geocoder to resolve the location, just return an error message.
http://code.google.com/apis/maps/documentation/geocoding/