Afficher l'exemple de code source complet
Recherchez des lieux pour afficher les résumés optimisés par l'IA. Voici quelques suggestions de recherche :
- "Hôtel" pour les résumés de quartier.
- "EV charging station" (borne de recharge VE) pour les résumés des services de bornes de recharge VE.
- Tout restaurant ou établissement pour les résumés de lieux et d'avis.
TypeScript
// Define DOM elements. const mapElement = document.querySelector('gmp-map')!; const placeAutocomplete = document.querySelector('gmp-place-autocomplete')!; const summaryPanel = document.getElementById('summary-panel')!; const placeName = document.getElementById('place-name')!; const placeAddress = document.getElementById('place-address')!; const tabContainer = document.getElementById('tab-container')!; const summaryContent = document.getElementById('summary-content')!; const aiDisclosure = document.getElementById('ai-disclosure')!; const flagContentLink = document.getElementById( 'flag-content-link' ) as HTMLAnchorElement; let innerMap: google.maps.Map; let marker: google.maps.marker.AdvancedMarkerElement; async function init(): Promise<void> { // Request needed libraries. const [{ AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, streetViewControl: false, fullscreenControl: false, }); // Bind autocomplete bounds to map bounds. innerMap.addListener('bounds_changed', () => { placeAutocomplete.locationRestriction = innerMap.getBounds()!; }); // Create the marker. marker = new AdvancedMarkerElement({ map: innerMap, }); // Handle selection of an autocomplete result. placeAutocomplete.addEventListener( 'gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); // Fetch all summary fields. await place.fetchFields({ fields: [ 'displayName', 'formattedAddress', 'location', 'generativeSummary', 'neighborhoodSummary', 'reviewSummary', 'evChargeAmenitySummary', ], }); // Update the map viewport and position the marker. if (place.viewport) { innerMap.fitBounds(place.viewport); } else { innerMap.setCenter(place.location!); innerMap.setZoom(17); } marker.position = place.location; // Update the panel UI. updateSummaryPanel(place); } ); } function updateSummaryPanel(place: google.maps.places.Place) { // Reset UI summaryPanel.classList.remove('hidden'); tabContainer.innerHTML = ''; // innerHTML is OK here since we're clearing known child elements. summaryContent.textContent = ''; aiDisclosure.textContent = ''; placeName.textContent = place.displayName || ''; placeAddress.textContent = place.formattedAddress || ''; let firstTabActivated = false; /** * Safe Helper: Accepts either a text string or a DOM Node (like a div or DocumentFragment). */ const createTab = ( label: string, content: string | Node, disclosure: string | null, flagUrl: string | null ) => { const btn = document.createElement('button'); btn.className = 'tab-button'; btn.textContent = label; btn.onclick = () => { // Do nothing if the tab is already active. if (btn.classList.contains('active')) { return; } // Manage the active class state. document.querySelectorAll('.tab-button').forEach((b) => { b.classList.remove('active'); }); btn.classList.add('active'); if (typeof content === 'string') { summaryContent.textContent = content; } else { summaryContent.replaceChildren(content.cloneNode(true)); } // Set the disclosure text. aiDisclosure.textContent = disclosure || 'AI-generated content.'; // Add the content flag URI. if (flagUrl) { flagContentLink.href = flagUrl; flagContentLink.textContent = 'Report an issue'; } }; tabContainer.appendChild(btn); // Auto-select the first available summary. if (!firstTabActivated) { btn.click(); firstTabActivated = true; } }; // --- 1. Generative Summary (Place) --- if (place.generativeSummary?.overview) { createTab( 'Overview', place.generativeSummary.overview, place.generativeSummary.disclosureText, place.generativeSummary.flagContentURI ); } // --- 2. Review Summary --- if (place.reviewSummary?.text) { createTab( 'Reviews', place.reviewSummary.text, place.reviewSummary.disclosureText, place.reviewSummary.flagContentURI ); } // --- 3. Neighborhood Summary --- if (place.neighborhoodSummary?.overview?.content) { createTab( 'Neighborhood', place.neighborhoodSummary.overview.content, place.neighborhoodSummary.disclosureText, place.neighborhoodSummary.flagContentURI ); } // --- 4. EV Amenity Summary (uses content blocks)) --- if (place.evChargeAmenitySummary) { const evSummary = place.evChargeAmenitySummary; const evContainer = document.createDocumentFragment(); // Helper to build a safe DOM section for EV categories. const createSection = (title: string, text: string) => { const wrapper = document.createElement('div'); wrapper.style.marginBottom = '15px'; // Or use a CSS class const titleEl = document.createElement('strong'); titleEl.textContent = title; const textEl = document.createElement('div'); textEl.textContent = text; wrapper.appendChild(titleEl); wrapper.appendChild(textEl); return wrapper; }; // Check and append each potential section if (evSummary.overview?.content) { evContainer.appendChild( createSection('Overview', evSummary.overview.content) ); } if (evSummary.coffee?.content) { evContainer.appendChild( createSection('Coffee', evSummary.coffee.content) ); } if (evSummary.restaurant?.content) { evContainer.appendChild( createSection('Food', evSummary.restaurant.content) ); } if (evSummary.store?.content) { evContainer.appendChild( createSection('Shopping', evSummary.store.content) ); } // Only add the tab if the container has children if (evContainer.hasChildNodes()) { createTab( 'EV Amenities', evContainer, // Passing a Node instead of string evSummary.disclosureText, evSummary.flagContentURI ); } } // Safely handle the empty state. if (!firstTabActivated) { const msg = document.createElement('em'); msg.textContent = 'No AI summaries are available for this specific location.'; summaryContent.replaceChildren(msg); aiDisclosure.textContent = ''; } } void init();
JavaScript
// Define DOM elements. const mapElement = document.querySelector('gmp-map'); const placeAutocomplete = document.querySelector('gmp-place-autocomplete'); const summaryPanel = document.getElementById('summary-panel'); const placeName = document.getElementById('place-name'); const placeAddress = document.getElementById('place-address'); const tabContainer = document.getElementById('tab-container'); const summaryContent = document.getElementById('summary-content'); const aiDisclosure = document.getElementById('ai-disclosure'); const flagContentLink = document.getElementById('flag-content-link'); let innerMap; let marker; async function init() { // Request needed libraries. const [{ AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, streetViewControl: false, fullscreenControl: false, }); // Bind autocomplete bounds to map bounds. innerMap.addListener('bounds_changed', () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); }); // Create the marker. marker = new AdvancedMarkerElement({ map: innerMap, }); // Handle selection of an autocomplete result. placeAutocomplete.addEventListener( 'gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); // Fetch all summary fields. await place.fetchFields({ fields: [ 'displayName', 'formattedAddress', 'location', 'generativeSummary', 'neighborhoodSummary', 'reviewSummary', 'evChargeAmenitySummary', ], }); // Update the map viewport and position the marker. if (place.viewport) { innerMap.fitBounds(place.viewport); } else { innerMap.setCenter(place.location); innerMap.setZoom(17); } marker.position = place.location; // Update the panel UI. updateSummaryPanel(place); } ); } function updateSummaryPanel(place) { // Reset UI summaryPanel.classList.remove('hidden'); tabContainer.innerHTML = ''; // innerHTML is OK here since we're clearing known child elements. summaryContent.textContent = ''; aiDisclosure.textContent = ''; placeName.textContent = place.displayName || ''; placeAddress.textContent = place.formattedAddress || ''; let firstTabActivated = false; /** * Safe Helper: Accepts either a text string or a DOM Node (like a div or DocumentFragment). */ const createTab = (label, content, disclosure, flagUrl) => { const btn = document.createElement('button'); btn.className = 'tab-button'; btn.textContent = label; btn.onclick = () => { // Do nothing if the tab is already active. if (btn.classList.contains('active')) { return; } // Manage the active class state. document.querySelectorAll('.tab-button').forEach((b) => { b.classList.remove('active'); }); btn.classList.add('active'); if (typeof content === 'string') { summaryContent.textContent = content; } else { summaryContent.replaceChildren(content.cloneNode(true)); } // Set the disclosure text. aiDisclosure.textContent = disclosure || 'AI-generated content.'; // Add the content flag URI. if (flagUrl) { flagContentLink.href = flagUrl; flagContentLink.textContent = 'Report an issue'; } }; tabContainer.appendChild(btn); // Auto-select the first available summary. if (!firstTabActivated) { btn.click(); firstTabActivated = true; } }; // --- 1. Generative Summary (Place) --- if (place.generativeSummary?.overview) { createTab( 'Overview', place.generativeSummary.overview, place.generativeSummary.disclosureText, place.generativeSummary.flagContentURI ); } // --- 2. Review Summary --- if (place.reviewSummary?.text) { createTab( 'Reviews', place.reviewSummary.text, place.reviewSummary.disclosureText, place.reviewSummary.flagContentURI ); } // --- 3. Neighborhood Summary --- if (place.neighborhoodSummary?.overview?.content) { createTab( 'Neighborhood', place.neighborhoodSummary.overview.content, place.neighborhoodSummary.disclosureText, place.neighborhoodSummary.flagContentURI ); } // --- 4. EV Amenity Summary (uses content blocks)) --- if (place.evChargeAmenitySummary) { const evSummary = place.evChargeAmenitySummary; const evContainer = document.createDocumentFragment(); // Helper to build a safe DOM section for EV categories. const createSection = (title, text) => { const wrapper = document.createElement('div'); wrapper.style.marginBottom = '15px'; // Or use a CSS class const titleEl = document.createElement('strong'); titleEl.textContent = title; const textEl = document.createElement('div'); textEl.textContent = text; wrapper.appendChild(titleEl); wrapper.appendChild(textEl); return wrapper; }; // Check and append each potential section if (evSummary.overview?.content) { evContainer.appendChild( createSection('Overview', evSummary.overview.content) ); } if (evSummary.coffee?.content) { evContainer.appendChild( createSection('Coffee', evSummary.coffee.content) ); } if (evSummary.restaurant?.content) { evContainer.appendChild( createSection('Food', evSummary.restaurant.content) ); } if (evSummary.store?.content) { evContainer.appendChild( createSection('Shopping', evSummary.store.content) ); } // Only add the tab if the container has children if (evContainer.hasChildNodes()) { createTab( 'EV Amenities', evContainer, // Passing a Node instead of string evSummary.disclosureText, evSummary.flagContentURI ); } } // Safely handle the empty state. if (!firstTabActivated) { const msg = document.createElement('em'); msg.textContent = 'No AI summaries are available for this specific location.'; summaryContent.replaceChildren(msg); aiDisclosure.textContent = ''; } } void init();
CSS
/* Reuse existing map height */ gmp-map { height: 100%; } html, body { height: 100%; margin: 0; padding: 0; } /* Existing Autocomplete Card Style */ .place-autocomplete-card { background-color: #fff; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; margin: 10px; padding: 2px; font-family: Roboto, sans-serif; font-size: 1rem; } gmp-place-autocomplete { width: 330px; } /* New: Summary Panel Styles */ .summary-card { background-color: #fff; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; margin: 10px; padding: 0; /* Padding handled by children */ font-family: Roboto, sans-serif; width: 350px; max-height: 80vh; /* Prevent overflow on small screens */ overflow-y: auto; display: flex; flex-direction: column; } .hidden { display: none; } #place-header { padding: 15px; background-color: #f8f9fa; border-bottom: 1px solid #ddd; } #place-header h2 { margin: 0 0 5px 0; font-size: 1.2rem; } #place-address { margin: 0; color: #555; font-size: 0.9rem; } /* Tab Navigation */ .tab-container { display: flex; border-bottom: 1px solid #ddd; background-color: #fff; } .tab-button { flex: 1; background: none; border: none; padding: 10px; cursor: pointer; font-weight: 500; color: #555; border-bottom: 3px solid transparent; } .tab-button:hover { background-color: #f1f1f1; } .tab-button.active { font-weight: bold; border-bottom: 3px solid #000000; } .tab-button.active:hover { background-color: #ffffff; cursor: default; } /* Content Area */ .content-area { padding: 15px; line-height: 1.5; font-size: 0.95rem; color: #333; } .disclosure-footer { font-size: 0.75rem; color: #666; padding: 10px 15px; border-top: 1px solid #eee; font-style: italic; } .flag-content-link { font-size: 0.75rem; color: #666; padding: 10px 15px; border-top: 1px solid #eee; }
HTML
<html>
<head>
<title>AI Place Summaries</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map center="37.80, -122.425" zoom="14" map-id="DEMO_MAP_ID">
<!-- Search Input Card -->
<div
class="place-autocomplete-card"
slot="control-inline-start-block-start">
<gmp-place-autocomplete
placeholder="Find places with AI summaries"></gmp-place-autocomplete>
</div>
<!-- Summary text panel (initially hidden) -->
<div
id="summary-panel"
class="summary-card hidden"
slot="control-inline-end-block-start">
<div id="place-header">
<h2 id="place-name"></h2>
<p id="place-address"></p>
</div>
<!-- Tabs for toggling summary types -->
<div class="tab-container" id="tab-container"></div>
<!-- Content display area -->
<div id="summary-content" class="content-area"></div>
<!-- Legal/AI Disclosure -->
<div id="ai-disclosure" class="disclosure-footer"></div>
<!-- Flag content link -->
<a id="flag-content-link" class="flag-content-link"></a>
</div>
</gmp-map>
</body>
</html>Les résumés optimisés par l'IA sont des aperçus d'un lieu ou d'une zone qui fournissent des informations utiles sur des lieux spécifiques, la zone autour d'un lieu et les avis associés à un lieu. Il existe trois types de résumés générés par l'IA :
-
Résumé du lieu : bref aperçu de 100 caractères spécifique à un ID de lieu donné, regroupant de nombreux types de données différents dans un instantané général d'un lieu.
-
Résumé des avis : résumé généré d'un lieu, basé uniquement sur les avis des utilisateurs.
-
Résumé de la zone : résumé généré pour la zone entourant un lieu, fournissant un contexte supplémentaire, y compris les points d'intérêt à proximité. Les résumés de zone peuvent être de deux types :
-
Résumé du quartier : aperçu général des points d'intérêt à proximité pour les lieux de types
premise,street_addresset tous les types des catégories Logement et Hébergement. -
Résumé des services des bornes de recharge de véhicules électriques : aperçu général des points d'intérêt à proximité pour les lieux de type
electric_vehicle_charging_station.
-
Récupérer des résumés optimisés par l'IA
Pour récupérer et afficher des résumés générés par l'IA, procédez comme suit :
Chargez la bibliothèque
Places.const { Place } = await google.maps.importLibrary("places");
Obtenez une instance
Place. L'extrait de code suivant montre comment créer une instancePlaceà partir d'un ID de lieu :const place = new Place("ChIJaYaXFTqq3oARNy537Kb_W_c");
Dans votre appel à
place.fetchFields(), spécifiez les champs correspondant aux types de résumés que vous souhaitez utiliser. Dans l'extrait suivant, tous les champs de résumé sont demandés :await place.fetchFields({ fields: [ 'generativeSummary', 'neighborhoodSummary', 'reviewSummary', 'evChargeAmenitySummary' // Include other fields as needed. ] });
Récupérez les données récapitulatives en accédant respectivement aux propriétés
generativeSummary,neighborhoodSummary,reviewSummaryetevChargeAmenitySummary. L'extrait de code suivant montre comment récupérer la vue d'ensemble à partir d'ungenerativeSummary.const summaryText = place.generativeSummary.overview;
Comme tous les lieux ne disposent pas de résumés optimisés par l'IA, veillez à vérifier la présence des données nécessaires avant de les afficher aux utilisateurs. L'extrait de code suivant utilise une instruction "if" pour rechercher un generativeSummary :
if (place.generativeSummary) { overviewText = place.generativeSummary.overview; } else { overviewText = 'No summary is available.'; }
Vous pouvez également utiliser un opérateur de coalescence des nuls pour vérifier de manière concise la présence d'un résumé :
const overviewText = place.generativeSummary.overview ?? 'No summary is available.';
Afficher les attributions requises
Tous les résumés optimisés par l'IA affichés dans votre application doivent être accompagnés de l'attribution appropriée, conformément aux règles et normes de Google. Pour en savoir plus, consultez Règles et attributions pour l'API Maps JavaScript.
Résumés des lieux
Les résumés de lieux sont de brefs aperçus de 100 caractères spécifiques à un ID de lieu donné, qui fournissent un aperçu général d'un lieu. Les résumés de lieux peuvent mettre en avant des plats, des services ou des produits populaires disponibles à l'achat dans un lieu :
-
"Restaurant Forum Shops servant de généreuses portions de cuisine italienne traditionnelle dans un cadre décontracté."
-
"Salon élégant proposant des coupes, des colorations et des brushings."
-
"Grand magasin avec de nombreux vendeurs proposant une variété de décorations, de meubles et de vêtements vintage."
Les résumés de lieux sont disponibles pour les types de lieux indiqués dans Types acceptés pour les catégories Culture, Divertissement et loisirs, Restaurants et bars, Shopping, Services et Sports.
Les résumés de lieux sont disponibles pour les points d'intérêt dans les langues et régions suivantes :
| Langue | Région |
|---|---|
| Anglais |
Inde États-Unis |
Demander un résumé d'un lieu
Pour demander un résumé génératif d'un lieu, incluez le champ generativeSummary lorsque vous appelez fetchFields() :
await place.fetchFields({ fields: [ 'generativeSummary', // Include other fields as needed. ], });
Utilisez la propriété generativeSummary pour récupérer les résumés de lieux. L'extrait de code suivant récupère la présentation et le texte de divulgation d'un generativeSummary :
if (place.generativeSummary) { console.log("Place Overview:", place.generativeSummary.overview); console.log("Disclosure:", place.generativeSummary.disclosureText); }
Résumés des avis
Les résumés des avis sont des résumés générés uniquement à partir des avis des utilisateurs. En synthétisant les éléments clés des avis des utilisateurs, tels que les attributs du lieu et l'opinion des personnes qui ont laissé un avis, les résumés des avis fournissent des insights généraux et aident les utilisateurs à prendre des décisions éclairées.
Par exemple, le résumé des avis sur le Ferry Building de San Francisco inclut des informations sur la nourriture, les boutiques, la vue et l'ambiance :
"Les visiteurs affirment que ce monument historique propose une sélection variée de boutiques, de restaurants et un marché de producteurs, et beaucoup d'entre eux apprécient la vue sur la baie et la ville. Ils soulignent également l'atmosphère animée, l'accès pratique en ferry à d'autres destinations et la possibilité de profiter des commerces locaux."
Les résumés des avis sont disponibles pour les points d'intérêt dans les langues et régions suivantes :
| Langue | Région |
|---|---|
| Anglais | Argentine, Bolivie, Brésil, Chili, Colombie, Costa Rica, Équateur, États-Unis, Guatemala, Inde, Japon, Mexique, Paraguay, Pérou, République dominicaine, Royaume-Uni, Uruguay, Venezuela |
| Japonais | Japon |
| Portugais | Brésil |
| Espagnol | Argentine, Bolivie, Chili, Colombie, Costa Rica, Équateur, États-Unis, Guatemala, Mexique, Paraguay, Pérou, République dominicaine, Uruguay, Venezuela |
Demander un résumé des avis
Pour demander un résumé des avis, incluez le champ reviewSummary lorsque vous appelez fetchFields() :
await place.fetchFields({ fields: [ 'reviewSummary', // Include other fields as needed. ], });
Utilisez la propriété reviewSummary pour récupérer les résumés des avis. Pour récupérer les résumés des avis, accédez à la propriété reviewSummary.text. L'extrait suivant récupère le texte d'un reviewSummary.
if (place.reviewSummary) { console.log("Place Review Summary:", place.reviewSummary.text); }
Résumés des zones
Les résumés de zone sont générés pour la zone entourant un lieu. Les résumés de zone fournissent un contexte supplémentaire pour un lieu, y compris les points d'intérêt à proximité, afin que les utilisateurs puissent prendre une décision plus éclairée sur l'endroit où aller et ce qu'ils peuvent y faire. Par exemple, lorsque vous visitez une nouvelle ville, vous pouvez afficher un résumé généré du quartier d'un hôtel pour en savoir plus sur les environs :
-
"Ce quartier dynamique de San Francisco, qui mêle North Beach et Chinatown, se trouve au nord-ouest du Financial District. Il propose des sites littéraires, des attractions culturelles uniques et une grande variété de restaurants. Parmi les lieux incontournables, citons l'emblématique librairie City Lights, le fascinant Cable Car Museum et les rues animées de Chinatown."
Si vous envisagez de recharger un véhicule électrique, vous pouvez consulter un résumé généré pour une borne de recharge de véhicules électriques afin d'en savoir plus sur les environs :
-
"Ce quartier propose plusieurs options de restauration à moins de 9 minutes à pied, dont Starbucks, Sushi Jin et Safeway."
En plus d'une description de la zone, la réponse contient également une liste d'instances Place pour les lieux référencés dans la description. Appelez fetchFields() sur ces instances Place pour demander plus de détails sur chaque lieu.
Il existe deux types de résumés de zone optimisés par l'IA :
-
Résumé du quartier : aperçu général des points d'intérêt à proximité pour les lieux de types
premise,street_addresset tous les types des catégories Logement et Hébergement. -
Résumé des services des bornes de recharge de véhicules électriques : présentation générale des points d'intérêt à proximité pour les lieux de type
electric_vehicle_charging_station.
Les résumés de zones sont disponibles pour les points d'intérêt dans les langues et régions suivantes :
| Langue | Région |
|---|---|
| Anglais | États-Unis |
Demander un résumé d'un quartier
Vous pouvez demander des résumés de quartier pour les lieux de types premise, street_address et tous les types des catégories Logement et Hébergement. Pour demander un résumé du quartier, incluez le champ neighborhoodSummary lorsque vous appelez fetchFields() :
await place.fetchFields({ fields: [ 'neighborhoodSummary', // Include other fields as needed. ], });
Utilisez la propriété neighborhoodSummary pour récupérer les résumés de quartier. Pour récupérer les résumés des quartiers, accédez à la propriété neighborhoodSummary.content pour obtenir le texte.
L'extrait de code suivant récupère le contenu d'un neighborhoodSummary :
if (place.neighborhoodSummary) { console.log("Place Neighborhood Summary:", place.neighborhoodSummary.overview.content); }
Demander un résumé des services de bornes de recharge de véhicules électriques
Vous pouvez demander des résumés des services de bornes de recharge de véhicules électriques pour les lieux de type electric_vehicle_charging_station. Le résumé des services EVCS propose quatre types de résumés : overview, coffee, restaurant et store. C'est pourquoi la structure de données est un tableau d'objets, chacun contenant un résumé. Pour demander un résumé des services de bornes de recharge de véhicules électriques, incluez le champ evChargeAmenitySummary lorsque vous appelez fetchFields() :
await place.fetchFields({ fields: [ 'evChargeAmenitySummary', // Include other fields as needed. ], });
Utilisez la propriété evChargeAmenitySummary pour récupérer les résumés des services des bornes de recharge de véhicules électriques. Pour récupérer le texte des résumés, accédez à la propriété content des propriétés evChargeAmenitySummary.overview, evChargeAmenitySummary.coffee, evChargeAmenitySummary.restaurant et evChargeAmenitySummary.store.
L'extrait de code suivant récupère le contenu d'un evChargeAmenitySummary :
// overview, coffee, restaurant, store. if (place.evChargeAmenitySummary) { console.log("Place EVCS Amenity Summary:", place.evChargeAmenitySummary.overview.content); console.log("Coffee:", place.evChargeAmenitySummary.coffee.content); console.log("Restaurants:", place.evChargeAmenitySummary.restaurant.content); console.log("Stores:", place.evChargeAmenitySummary.store.content); }