Executando verificação de segurança...
2

Eu estava usando a API do google para calcular distância, mas ficou R$1500,00 no final do mês.
Encontrei essa fórmula que faz o cálculo, mas você precisa de latitude e longitude, vai acabar precisando passar o endereço como parametro para gerar os pontos de lat e long em outra api lib.

export function calculateLatAndLong(latitude1: number, longitude1: number, latitude2: number, longitude2: number, unit: 'kilometers' | 'miles' = 'kilometers'): { value: number, unit: string } {
  const radius = 6371; // Earth's radius in kilometers
  const dLat = (latitude2 - latitude1) * Math.PI / 180;
  const dLon = (longitude2 - longitude1) * Math.PI / 180;
  const a = Math.pow(Math.sin(dLat / 2), 2) + Math.cos(latitude1 * Math.PI / 180) * Math.cos(latitude2 * Math.PI / 180) * Math.pow(Math.sin(dLon / 2), 2);
  const c = 2 * Math.atan(Math.sqrt(a) / Math.sqrt(1 - a));
  const distanceInKm = radius * c;
  const kmToMiles = 0.621371;
  const value = unit === 'kilometers' ? parseFloat((distanceInKm * kmToMiles).toFixed(2)) : parseFloat(distanceInKm.toFixed(2));
  return { value, unit };
}

Acho que você também poderia utilizar ageolib
Outras Alternativas

Carregando publicação patrocinada...
1

Boa, na verdade estou usando o próprio gmaps sem API, webscraping raiz mesmo kkk...

def get_address_info(origin, destination):
    path_url = f"{url_base}/maps/dir/{origin}/{destination}".replace(" ", "+")
    # print(path_url)
    response = requests.get(path_url)
    html = response.text
    match = re.findall(r'window\.APP_INITIALIZATION_STATE=(.+?);', html)
    if match:
        data_str = match[0].strip().replace(")]}'", "")
        data = json.loads(data_str)
        other_data = json.loads(data[3][4])
        distance_total = other_data[0][1][1][0][2][1]
        time_total = other_data[0][1][1][0][3][1]
        return distance_total, time_total
    else:
        return None, None
2