Formule Google Maps pentru Foi de calcul Google

Publicat: 2022-02-26

Puteți aduce puterea Google Maps în Foile de calcul Google folosind formule simple, fără codificare. Nu trebuie să vă înscrieți pentru API-ul Google Maps și toate rezultatele de la Google Maps sunt stocate în cache în foaie, așa că este puțin probabil să atingeți limitele de cotă.

Pentru a vă oferi un exemplu rapid, dacă aveți adresa de pornire în coloana A și adresa de destinație în coloana B, o formulă de genul =GOOGLEMAPS_DISTANCE(A1, B1, "driving") va calcula rapid distanța dintre cele două puncte.

Sau modificați ușor formula =GOOGLEMAPS_TIME(A1, B1, "walking") pentru a ști cât timp îi va dura unei persoane să meargă dintr-un punct în altul.

Dacă doriți să încercați formulele Google Maps fără a intra în detalii tehnice, faceți o copie a acestei foi Google și gata.

Google Maps in Google Sheets

Utilizarea Hărților Google în Foi de calcul Google

Acest tutorial explică cum puteți scrie cu ușurință funcții personalizate Google Maps în Foi de calcul Google, care vă vor ajuta:

  1. Calculați distanțele dintre două orașe sau orice adresă.
  2. Calculați timpul de călătorie (mers pe jos, cu mașina sau cu bicicleta) între două puncte.
  3. Obțineți coordonatele de latitudine și longitudine ale oricărei adrese de pe Google Maps.
  4. Utilizați geocodarea inversă pentru a găsi adresa poștală din coordonatele GPS.
  5. Imprimați indicații de conducere între orice punct de pe pământ.
  6. Obțineți adresa din codul poștal în sine.

1. Calculați distanțe în Foi de calcul Google

Specificați originea, destinația, modul de călătorie (mers pe jos sau condus) și funcția va returna distanța dintre cele două puncte în mile.

=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. Geocodare inversă în Foi de calcul Google

Specificați latitudinea și longitudinea și obțineți adresa completă a punctului prin geocodarea inversă a coordonatelor.

=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. Obțineți coordonatele GPS ale unei adrese

Obțineți latitudinea și longitudinea oricărei adrese de pe 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. Tipăriți indicațiile rutiere între adrese

Specificați adresa de origine, adresa de destinație, modul de călătorie și funcția va folosi API-ul Google Maps pentru a imprima indicații de conducere pas cu pas.

=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. Măsurați timpul călătoriei cu Google Maps

Specificați adresa de origine, adresa de destinație, modul de călătorie și funcția va măsura timpul aproximativ de călătorie între adresele specificate, cu condiția să existe o rută.

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

Funcții Google Maps în Foi de calcul

Sfat: îmbunătățiți performanța prin memorarea în cache a rezultatelor

Toate funcțiile Google Sheets de mai sus folosesc intern API-ul Google Maps pentru a calcula rute, distanțe și timpul de călătorie. Google oferă o cotă limitată pentru operațiunile Hărți și dacă foaia dvs. realizează prea multe interogări într-o perioadă scurtă de timp, este posibil să vedeți erori precum „„Serviciul invocat de prea multe ori pentru o zi” sau ceva similar.

Pentru a ocoli această problemă, se recomandă să utilizați memoria cache încorporată a Apps Script pentru a stoca rezultatele și, dacă rezultatele unei funcții există deja în caz, veți face o solicitare mai puțin către Google Maps. Funcțiile Hărți din cadrul acestui Google Sheet folosește și memorarea în cache și iată cum o puteți implementa.

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

Consultați și: Încorporați Google Maps în e-mailuri și documente