Formules Google Maps pour Google Sheets
Publié: 2022-02-26Vous pouvez apporter la puissance de Google Maps à vos feuilles de calcul Google en utilisant des formules simples sans codage. Vous n'avez pas besoin de vous inscrire à l'API Google Maps et tous les résultats de Google Maps sont mis en cache dans la feuille, il est donc peu probable que vous atteigniez les limites de quota.
Pour vous donner un exemple rapide, si vous avez l'adresse de départ dans la colonne A et l'adresse de destination dans la colonne B, une formule comme =GOOGLEMAPS_DISTANCE(A1, B1, "driving")
calculera rapidement la distance entre les deux points.
Ou modifiez légèrement la formule =GOOGLEMAPS_TIME(A1, B1, "walking")
pour savoir combien de temps il faudra à une personne pour marcher d'un point à un autre.
Si vous souhaitez essayer les formules de Google Maps sans entrer dans les détails techniques, faites simplement une copie de cette fiche Google et le tour est joué.
Utilisation de Google Maps dans Google Sheets
Ce didacticiel explique comment vous pouvez facilement écrire des fonctions Google Maps personnalisées dans Google Sheets qui vous aideront à :
- Calculez les distances entre deux villes ou n'importe quelle adresse.
- Calculez le temps de trajet (à pied, en voiture ou à vélo) entre deux points.
- Obtenez les coordonnées de latitude et de longitude de n'importe quelle adresse sur Google Maps.
- Utilisez le géocodage inversé pour trouver l'adresse postale à partir des coordonnées GPS.
- Imprimez des itinéraires routiers entre n'importe quel point sur terre.
- Obtenez l'adresse à partir du code postal lui-même.
1. Calculer les distances dans Google Sheets
Spécifiez l'origine, la destination, le mode de déplacement (à pied ou en voiture) et la fonction renverra la distance entre les deux points en miles.
=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. Géocodage inversé dans Google Sheets
Spécifiez la latitude et la longitude et obtenez l'adresse complète du point grâce au géocodage inverse des coordonnées.
=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. Obtenir les coordonnées GPS d'une adresse
Obtenez la latitude et la longitude de n'importe quelle adresse sur 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. Imprimez les itinéraires routiers entre les adresses
Spécifiez l'adresse d'origine, l'adresse de destination, le mode de déplacement et la fonction utilisera l'API Google Maps pour imprimer des itinéraires étape par étape.
=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. Mesurez le temps de trajet avec Google Maps
Spécifiez l'adresse d'origine, l'adresse de destination, le mode de déplacement et la fonction mesurera votre temps de trajet approximatif entre les adresses spécifiées, à condition qu'un itinéraire existe.
=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 ; } ;
Conseil : améliorez les performances en mettant en cache les résultats
Toutes les fonctions Google Sheets ci-dessus utilisent en interne l'API Google Maps pour calculer les itinéraires, les distances et le temps de trajet. Google propose un quota limité pour les opérations Maps et si votre feuille effectue trop de requêtes sur une courte durée, vous risquez de voir des erreurs telles que "" Service invoqué trop de fois pendant une journée "ou quelque chose de similaire.
Pour contourner ce problème, il est recommandé d'utiliser le cache intégré d'Apps Script pour stocker les résultats et, si les résultats d'une fonction existent déjà dans le cas, vous ferez une demande de moins à Google Maps Les fonctions de Maps à l'intérieur de ce Google Sheet utilise également la mise en cache et voici comment vous pouvez l'implémenter.
// 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 ; } ;
Voir aussi : Intégrer Google Maps dans les e-mails et les documents