Calcular la distancia entre dos direcciones en Zoho Creator con Deluge

API de matriz de distancias de Google: calcula la distancia y almacena el valor en Zoho Creator.

Si se tienen en cuenta dos direcciones registradas en Zoho Creator (un punto de recogida y otro de entrega, un técnico y un lugar de trabajo, o un almacén y un cliente), la API Google Distance Matrix devuelve la distancia en coche entre ellas. Esta función la invoca desde Deluge y guarda el resultado en el registro en kilómetros o millas, listo para la facturación por kilometraje, el cálculo de costes de ruta o las reglas de zonas de entrega.

Reescrito a partir del original de 2016. La versión de la biblioteca original usaba getUrl() y analizaba la respuesta convirtiéndola a XML y ejecutando una expresión XPath. getUrl() es una función obsoleta, y el método XPath devuelve silenciosamente una cadena vacía cuando Google informa de ZERO_RESULTS o NOT_FOUND . El script que se muestra a continuación usa invokeurl , lee el JSON directamente y comprueba el estado de cada elemento antes de escribir nada. Además, elimina el parámetro sensor=false , que Google eliminó hace años.

Antes de empezar

  • Un proyecto de Google Cloud con la API de Distance Matrix habilitada y facturación asociada. La guía de configuración de Google explica el proceso de creación de claves.
  • Un formulario (llamado Distance_Calc aquí) con campos de dirección para ambos extremos: Street / City / State / PostalCode y la Street1 / City1 / State1 / PostalCode1 correspondiente.
  • Dos campos de salida: textDistance (una sola línea) y Distance (decimal).
  • Restringe la clave API a la API de Distance Matrix en la consola de Google. Una clave pegada en una función de Deluge es tan segura como la aplicación en la que se encuentra.

Función de diluvio

 void API.CalcDistance(int id)
{
d = Distance_Calc[ID == input.id];

// Construir las cadenas de consulta de origen y destino
strAddress1 = "orígenes=" + d.Calle + "," + d.Ciudad + "," + d.Estado + "," + d.CódigoPostal;
strAddress2 = "&destinos=" + d.Street1 + "," + d.City1 + "," + d.State1 + "," + d.PostalCode1;

apiKey = "TU_CLAVE_API_DE_GOOGLE_MAPS";
strFullData = "https://maps.googleapis.com/maps/api/distancematrix/json?" + strAddress1 + strAddress2 + "&key=" + apiKey;

respuesta = invokeurl
[
URL: strFullData
tipo: GET
];

// Lee el primer elemento de la primera fila
filas = respuesta.getJSON("filas");
si(filas != null && filas.size() > 0)
{
elementos = filas.get(0).getJSON("elementos");
si(elementos != null && elementos.size() > 0)
{
elemento = elementos.get(0);
if(element.getJSON("status") == "OK")
{
distText = element.getJSON("distancia").getJSON("texto"); // p. ej. "12,4 km"
distVal = element.getJSON("distancia").getJSON("valor"); // metros, entero

d.distanciaTexto = distTexto;
d.Distancia = distVal.toDecimal() / 1000; // km. Use / 1609.34 para millas.
}
demás
{
info "Estado del elemento de la matriz de distancias: " + element.getJSON("status");
}
}
}
demás
{
info "Error de matriz de distancias: " + response.toString();
}
}

Notas

  • Dos campos de estado, no uno. El estado de respuesta de nivel superior puede ser OK mientras que un elemento individual es ZERO_RESULTS . Verifique el estado del elemento, como se indicó anteriormente, o almacenará ceros para pares no enrutables.
  • Los metros son el valor fiable. distance.value siempre son metros, independientemente de la configuración regional; distance.text es una cadena formateada que cambia con el parámetro units . Convierte desde el valor numérico.
  • Las coordenadas también funcionan. Reemplace las cadenas de direcciones por origins=lat,lng y destinations=lat,lng si ya utiliza geocodificación.
  • Se aplica a un flujo de trabajo, no a cada edición. Distance Matrix se factura por elemento. Active la función al crear un elemento o al hacer clic en un botón, en lugar de con cada cambio de campo.

Este script forma parte de la biblioteca gratuita Creator Scripts Deluge.

Los 39 scripts de Deluge, el curso completo de Zoho Creator y todos los recursos descargables ahora son gratuitos. Obtén acceso gratuito →