added a abstract implementation for geocoding