Formule di Google Maps per Fogli Google

Pubblicato: 2022-02-26

Puoi portare la potenza di Google Maps sui tuoi Fogli Google utilizzando semplici formule senza codifica. Non è necessario registrarsi all'API di Google Maps e tutti i risultati di Google Maps sono memorizzati nella cache nel foglio, quindi è improbabile che tu raggiunga i limiti di quota.

Per fare un rapido esempio, se hai l'indirizzo di partenza nella colonna A e l'indirizzo di destinazione nella colonna B, una formula come =GOOGLEMAPS_DISTANCE(A1, B1, "driving") calcolerà rapidamente la distanza tra i due punti.

Oppure modifica leggermente la formula =GOOGLEMAPS_TIME(A1, B1, "walking") per sapere quanto tempo impiegherà una persona a camminare da un punto all'altro.

Se vuoi provare le formule di Google Maps senza entrare nei dettagli tecnici, ti basta fare una copia di questo Foglio Google e il gioco è fatto.

Google Maps in Google Sheets

Utilizzo di Google Maps all'interno di Fogli Google

Questo tutorial spiega come puoi facilmente scrivere funzioni personalizzate di Google Maps all'interno di Fogli Google che ti aiuteranno a:

  1. Calcola le distanze tra due città o qualsiasi indirizzo.
  2. Calcola il tempo di percorrenza (a piedi, in auto o in bicicletta) tra due punti.
  3. Ottieni le coordinate di latitudine e longitudine di qualsiasi indirizzo su Google Maps.
  4. Usa la geocodifica inversa per trovare l'indirizzo postale dalle coordinate GPS.
  5. Stampa indicazioni stradali tra qualsiasi punto della terra.
  6. Ottieni l'indirizzo dal codice postale stesso.

1. Calcola le distanze in Fogli Google

Specificare l'origine, la destinazione, la modalità di viaggio (a piedi o in auto) e la funzione restituirà la distanza tra i due punti in miglia.

=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. Geocodifica inversa in Fogli Google

Specifica la latitudine e la longitudine e ottieni l'indirizzo completo del punto attraverso la geocodifica inversa delle coordinate.

=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. Ottieni le coordinate GPS di un indirizzo

Ottieni la latitudine e la longitudine di qualsiasi indirizzo su 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. Stampa le indicazioni stradali tra gli indirizzi

Specificare l'indirizzo di origine, l'indirizzo di destinazione, la modalità di viaggio e la funzione utilizzerà l'API di Google Maps per stampare indicazioni stradali passo passo.

=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. Misura il tempo di viaggio con Google Maps

Specificare l'indirizzo di origine, l'indirizzo di destinazione, la modalità di viaggio e la funzione misurerà il tempo di viaggio approssimativo tra gli indirizzi specificati, a condizione che esista un percorso.

=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 ; } ;

Funzioni di Google Maps in Fogli

Suggerimento: migliora le prestazioni memorizzando nella cache i risultati

Tutte le funzioni di Fogli Google di cui sopra utilizzano internamente l'API di Google Maps per calcolare percorsi, distanze e tempo di viaggio. Google offre una quota limitata per le operazioni di Maps e se il tuo foglio esegue troppe query in un breve periodo, è probabile che visualizzi errori come ""Servizio invocato troppe volte per un giorno" o qualcosa di simile.

Per aggirare questo problema, ti consigliamo di utilizzare la cache integrata di Apps Script per memorizzare i risultati e, se i risultati di una funzione esistono già nel caso, farai una richiesta in meno a Google Maps Le funzioni di Maps all'interno di questo Foglio Google utilizza anche la memorizzazione nella cache ed ecco come puoi 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 ; } ;

Vedi anche: Incorpora Google Maps in e-mail e documenti