abstract the geocode functionality into lib