Fórmulas de Google Maps para Hojas de cálculo de Google
Publicado: 2022-02-26Puede llevar el poder de Google Maps a sus Hojas de cálculo de Google usando fórmulas simples sin codificación. No necesita registrarse en la API de Google Maps y todos los resultados de Google Maps se almacenan en caché en la hoja, por lo que es poco probable que alcance los límites de cuota.
Para darte un ejemplo rápido, si tienes la dirección de partida en la columna A y la dirección de destino en la columna B, una fórmula como =GOOGLEMAPS_DISTANCE(A1, B1, "driving")
calculará rápidamente la distancia entre los dos puntos.
O modifica ligeramente la fórmula =GOOGLEMAPS_TIME(A1, B1, "walking")
para saber cuánto tardará una persona en caminar de un punto a otro.
Si desea probar las fórmulas de Google Maps sin entrar en los detalles técnicos, simplemente haga una copia de esta hoja de cálculo de Google y estará listo.
Uso de Google Maps dentro de Hojas de cálculo de Google
Este tutorial explica cómo puede escribir fácilmente funciones personalizadas de Google Maps dentro de Hojas de cálculo de Google que lo ayudarán a:
- Calcula distancias entre dos ciudades o cualquier dirección.
- Calcula el tiempo de viaje (caminando, conduciendo o en bicicleta) entre dos puntos.
- Obtenga las coordenadas de latitud y longitud de cualquier dirección en Google Maps.
- Utilice la geocodificación inversa para encontrar la dirección postal a partir de las coordenadas GPS.
- Imprime direcciones de conducción entre cualquier punto de la tierra.
- Obtén la dirección del propio código postal.
1. Calcula distancias en Google Sheets
Especifique el origen, el destino, el modo de viaje (a pie o en coche) y la función le devolverá la distancia entre los dos puntos en millas.
=GOOGLEMAPS_DISTANCE("NY 10005", "Hoboken NJ", "walking")
/** * Calculate the distance between two * locations on Google Maps. * * =GOOGLEMAPS_DISTANCE("NY 10005", "Hoboken NJ", "walking") * * @param {String} origin The address of starting point * @param {String} destination The address of destination * @param {String} mode The mode of travel (driving, walking, bicycling or transit) * @return {String} The distance in miles * @customFunction */ const GOOGLEMAPS_DISTANCE = ( origin , destination , mode ) => { const { routes : [ data ] = [ ] } = Maps . newDirectionFinder ( ) . setOrigin ( origin ) . setDestination ( destination ) . setMode ( mode ) . getDirections ( ) ; if ( ! data ) { throw new Error ( 'No route found!' ) ; } const { legs : [ { distance : { text : distance } } = { } ] = [ ] } = data ; return distance ; } ;
2. Geocodificación inversa en Google Sheets
Especifique la latitud y la longitud y obtenga la dirección completa del punto a través de la geocodificación inversa de coordenadas.
=GOOGLEMAPS_DISTANCE("NY 10005", "Hoboken NJ", "walking")
/** * Use Reverse Geocoding to get the address of * a point location (latitude, longitude) on Google Maps. * * =GOOGLEMAPS_REVERSEGEOCODE(latitude, longitude) * * @param {String} latitude The latitude to lookup. * @param {String} longitude The longitude to lookup. * @return {String} The postal address of the point. * @customFunction */ const GOOGLEMAPS_REVERSEGEOCODE = ( latitude , longitude ) => { const { results : [ data = { } ] = [ ] } = Maps . newGeocoder ( ) . reverseGeocode ( latitude , longitude ) ; return data . formatted_address ; } ;
3. Obtener las coordenadas GPS de una dirección
Obtenga la latitud y longitud de cualquier dirección en Google Maps.
=GOOGLEMAPS_LATLONG("10 Hanover Square, NY")
/** * Get the latitude and longitude of any * address on Google Maps. * * =GOOGLEMAPS_LATLONG("10 Hanover Square, NY") * * @param {String} address The address to lookup. * @return {String} The latitude and longitude of the address. * @customFunction */ const GOOGLEMAPS_LATLONG = ( address ) => { const { results : [ data = null ] = [ ] } = Maps . newGeocoder ( ) . geocode ( address ) ; if ( data === null ) { throw new Error ( 'Address not found!' ) ; } const { geometry : { location : { lat , lng } } = { } } = data ; return ` ${ lat } , ${ lng } ` ; } ;
4. Imprime las instrucciones de manejo entre direcciones
Especifique la dirección de origen, la dirección de destino, el modo de viaje y la función utilizará la API de Google Maps para imprimir instrucciones de manejo paso a paso.
=GOOGLEMAPS_DIRECTIONS("NY 10005", "Hoboken NJ", "walking")
/** * Find the driving direction between two * locations on Google Maps. * * =GOOGLEMAPS_DIRECTIONS("NY 10005", "Hoboken NJ", "walking") * * @param {String} origin The address of starting point * @param {String} destination The address of destination * @param {String} mode The mode of travel (driving, walking, bicycling or transit) * @return {String} The driving direction * @customFunction */ const GOOGLEMAPS_DIRECTIONS = ( origin , destination , mode = 'driving' ) => { const { routes = [ ] } = Maps . newDirectionFinder ( ) . setOrigin ( origin ) . setDestination ( destination ) . setMode ( mode ) . getDirections ( ) ; if ( ! routes . length ) { throw new Error ( 'No route found!' ) ; } return routes . map ( ( { legs } ) => { return legs . map ( ( { steps } ) => { return steps . map ( ( step ) => { return step . html_instructions . replace ( / <[^>]+> / g , '' ) ; } ) ; } ) ; } ) . join ( ', ' ) ; } ;
5. Mide el tiempo de viaje con Google Maps
Especifique la dirección de origen, la dirección de destino, el modo de viaje y la función medirá su tiempo de viaje aproximado entre las direcciones especificadas, siempre que exista una ruta.
=GOOGLEMAPS_DURATION("NY 10005", "Hoboken NJ", "walking")
/** * Calculate the travel time between two locations * on Google Maps. * * =GOOGLEMAPS_DURATION("NY 10005", "Hoboken NJ", "walking") * * @param {String} origin The address of starting point * @param {String} destination The address of destination * @param {String} mode The mode of travel (driving, walking, bicycling or transit) * @return {String} The time in minutes * @customFunction */ const GOOGLEMAPS_DURATION = ( origin , destination , mode = 'driving' ) => { const { routes : [ data ] = [ ] } = Maps . newDirectionFinder ( ) . setOrigin ( origin ) . setDestination ( destination ) . setMode ( mode ) . getDirections ( ) ; if ( ! data ) { throw new Error ( 'No route found!' ) ; } const { legs : [ { duration : { text : time } } = { } ] = [ ] } = data ; return time ; } ;
Sugerencia: mejore el rendimiento almacenando en caché los resultados
Todas las funciones de Hojas de cálculo de Google anteriores utilizan internamente la API de Google Maps para calcular rutas, distancias y tiempo de viaje. Google ofrece una cuota limitada para las operaciones de Maps y si su hoja realiza demasiadas consultas en un período breve, es probable que vea errores como ""Servicio invocado demasiadas veces durante un día" o algo similar.
Para solucionar este problema, se recomienda que utilice el caché integrado de Apps Script para almacenar los resultados y, si los resultados de una función ya existen en el caso, realizará una solicitud menos a Google Maps Las funciones de Maps dentro de este Google Sheet también usa el almacenamiento en caché y así es como puede implementarlo.
// The cache key for "New York" and "new york " should be same const md5 = ( key = '' ) => { const code = key . toLowerCase ( ) . replace ( / \s / g , '' ) ; return Utilities . computeDigest ( Utilities . DigestAlgorithm . MD5 , key ) . map ( ( char ) => ( char + 256 ) . toString ( 16 ) . slice ( - 2 ) ) . join ( '' ) ; } ; const getCache = ( key ) => { return CacheService . getDocumentCache ( ) . get ( md5 ( key ) ) ; } ; // Store the results for 6 hours const setCache = ( key , value ) => { const expirationInSeconds = 6 * 60 * 60 ; CacheService . getDocumentCache ( ) . put ( md5 ( key ) , value , expirationInSeconds ) ; } ; /** * Calculate the travel time between two locations * on Google Maps. * * =GOOGLEMAPS_DURATION("NY 10005", "Hoboken NJ", "walking") * * @param {String} origin The address of starting point * @param {String} destination The address of destination * @param {String} mode The mode of travel (driving, walking, bicycling or transit) * @return {String} The time in minutes * @customFunction */ const GOOGLEMAPS_DURATION = ( origin , destination , mode = 'driving' ) => { const key = [ 'duration' , origin , destination , mode ] . join ( ',' ) ; // Is result in the internal cache? const value = getCache ( key ) ; // If yes, serve the cached result if ( value !== null ) return value ; const { routes : [ data ] = [ ] } = Maps . newDirectionFinder ( ) . setOrigin ( origin ) . setDestination ( destination ) . setMode ( mode ) . getDirections ( ) ; if ( ! data ) { throw new Error ( 'No route found!' ) ; } const { legs : [ { duration : { text : time } } = { } ] = [ ] } = data ; // Store the result in internal cache for future setCache ( key , time ) ; return time ; } ;
Ver también: Incrustar Google Maps en correos electrónicos y documentos