Formule di Google Maps per Fogli Google
Pubblicato: 2022-02-26Puoi 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.
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:
- Calcola le distanze tra due città o qualsiasi indirizzo.
- Calcola il tempo di percorrenza (a piedi, in auto o in bicicletta) tra due punti.
- Ottieni le coordinate di latitudine e longitudine di qualsiasi indirizzo su Google Maps.
- Usa la geocodifica inversa per trovare l'indirizzo postale dalle coordinate GPS.
- Stampa indicazioni stradali tra qualsiasi punto della terra.
- 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 ; } ;
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