Confira o código-fonte de exemplo completo
Pesquise lugares para ver os resumos com tecnologia de IA. Algumas pesquisas sugeridas:
- "Hotel" para resumos de bairros.
- "Eletroposto" para resumos de comodidades de EVCS.
- Qualquer restaurante ou empresa para resumos de lugar e avaliação.
TypeScript
// Define DOM elements. const mapElement = document.querySelector('gmp-map') as google.maps.MapElement; const placeAutocomplete = document.querySelector( 'gmp-place-autocomplete' ) as google.maps.places.PlaceAutocompleteElement; const summaryPanel = document.getElementById('summary-panel') as HTMLDivElement; const placeName = document.getElementById('place-name') as HTMLElement; const placeAddress = document.getElementById('place-address') as HTMLElement; const tabContainer = document.getElementById('tab-container') as HTMLDivElement; const summaryContent = document.getElementById( 'summary-content' ) as HTMLDivElement; const aiDisclosure = document.getElementById('ai-disclosure') as HTMLDivElement; const flagContentLink = document.getElementById('flag-content-link') as HTMLAnchorElement; let innerMap; let marker: google.maps.marker.AdvancedMarkerElement; async function initMap(): Promise<void> { // Request needed libraries. const [] = 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. google.maps.event.addListener(innerMap, 'bounds_changed', async () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); }); // Create the marker. marker = new google.maps.marker.AdvancedMarkerElement({ map: innerMap, }); // Handle selection of an autocomplete result. // prettier-ignore // @ts-ignore 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, flagUrl: string ) => { 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) --- //@ts-ignore if (place.generativeSummary?.overview) { createTab( 'Overview', //@ts-ignore place.generativeSummary.overview, //@ts-ignore place.generativeSummary.disclosureText, //@ts-ignore place.generativeSummary.flagContentURI ); } // --- 2. Review Summary --- //@ts-ignore if (place.reviewSummary?.text) { createTab( 'Reviews', //@ts-ignore place.reviewSummary.text, //@ts-ignore place.reviewSummary.disclosureText, //@ts-ignore place.reviewSummary.flagContentURI ); } // --- 3. Neighborhood Summary --- //@ts-ignore if (place.neighborhoodSummary?.overview?.content) { createTab( 'Neighborhood', //@ts-ignore place.neighborhoodSummary.overview.content, //@ts-ignore place.neighborhoodSummary.disclosureText, //@ts-ignore place.neighborhoodSummary.flagContentURI ); } // --- 4. EV Amenity Summary (uses content blocks)) --- //@ts-ignore if (place.evChargeAmenitySummary) { //@ts-ignore 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 = ''; } } initMap();
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 initMap() { // Request needed libraries. const [] = 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. google.maps.event.addListener(innerMap, 'bounds_changed', async () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); }); // Create the marker. marker = new google.maps.marker.AdvancedMarkerElement({ map: innerMap, }); // Handle selection of an autocomplete result. // prettier-ignore // @ts-ignore 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) --- //@ts-ignore if (place.generativeSummary?.overview) { createTab('Overview', //@ts-ignore place.generativeSummary.overview, //@ts-ignore place.generativeSummary.disclosureText, //@ts-ignore place.generativeSummary.flagContentURI); } // --- 2. Review Summary --- //@ts-ignore if (place.reviewSummary?.text) { createTab('Reviews', //@ts-ignore place.reviewSummary.text, //@ts-ignore place.reviewSummary.disclosureText, //@ts-ignore place.reviewSummary.flagContentURI); } // --- 3. Neighborhood Summary --- //@ts-ignore if (place.neighborhoodSummary?.overview?.content) { createTab('Neighborhood', //@ts-ignore place.neighborhoodSummary.overview.content, //@ts-ignore place.neighborhoodSummary.disclosureText, //@ts-ignore place.neighborhoodSummary.flagContentURI); } // --- 4. EV Amenity Summary (uses content blocks)) --- //@ts-ignore if (place.evChargeAmenitySummary) { //@ts-ignore 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 = ''; } } initMap();
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: 15px; font-family: Roboto, sans-serif; font-size: 1rem; } gmp-place-autocomplete { width: 300px; } /* 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; } /* 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: 15px; font-family: Roboto, sans-serif; font-size: 1rem; } gmp-place-autocomplete { width: 300px; } /* 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; }
HTML
<html>
<head>
<title>AI Place Summaries</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<!-- prettier-ignore -->
<script>(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: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly"});</script>
</head>
<body>
<gmp-map center="37.805, -122.425" zoom="14" map-id="DEMO_MAP_ID">
<!-- Search Input Card -->
<div
class="place-autocomplete-card"
slot="control-inline-start-block-start">
<p>Search for a place with AI summaries:</p>
<gmp-place-autocomplete></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>Testar amostra
Os resumos gerados com IA são visões gerais de um lugar ou área que oferecem insights úteis sobre locais específicos, a área ao redor de um lugar e as avaliações associadas a ele. Há três tipos diferentes de resumos gerados com IA:
-
Resumo do lugar: uma breve visão geral de 100 caracteres específica para um determinado ID de lugar, agregando muitos tipos diferentes de dados em um resumo de alto nível de um lugar.
-
Resumo da avaliação: um resumo gerado de um lugar com base apenas nas avaliações dos usuários.
-
Resumo da área: um resumo gerado da área ao redor de um lugar, que fornece contexto adicional, incluindo pontos de interesse próximos. Os resumos de área podem ser de dois tipos:
-
Resumo do bairro: uma visão geral de alto nível dos pontos de interesse próximos para lugares com tipos
premise,street_addresse todos os tipos nas categorias Moradia e Hospedagem. -
Resumo das comodidades de eletropostos: uma visão geral de alto nível dos pontos de interesse próximos para lugares do tipo
electric_vehicle_charging_station.
-
Recuperar resumos com tecnologia de IA
Para recuperar e mostrar resumos com tecnologia de IA, siga estas etapas:
-
const { Place } = await google.maps.importLibrary("places");
Receba uma instância de
Place. O snippet a seguir mostra como criar uma instânciaPlacede um ID de lugar:const place = new Place("ChIJaYaXFTqq3oARNy537Kb_W_c");
Na sua chamada para
place.fetchFields(), especifique os campos para os tipos de resumos que você quer usar. No snippet a seguir, todos os campos de resumo são solicitados:await place.fetchFields({ fields: [ 'generativeSummary', 'neighborhoodSummary', 'reviewSummary', 'evChargeAmenitySummary' // Include other fields as needed. ] });
Acesse as propriedades
generativeSummary,neighborhoodSummary,reviewSummaryeevChargeAmenitySummary, respectivamente, para extrair os dados de resumo. O snippet a seguir mostra como recuperar a visão geral de umgenerativeSummary.const summaryText = place.generativeSummary.overview;
Como nem todos os lugares têm resumos com tecnologia de IA, verifique a presença dos dados necessários antes de mostrar aos usuários. O snippet a seguir usa uma instrução "if" para verificar
um generativeSummary:
if (place.generativeSummary) { overviewText = place.generativeSummary.overview; } else { overviewText = 'No summary is available.'; }
Como alternativa, use um operador nulo para verificar de forma concisa a presença de um resumo:
const overviewText = place.generativeSummary.overview ?? 'No summary is available.';
Mostrar as atribuições necessárias
Todos os resumos gerados por IA exibidos no seu app precisam ter a atribuição adequada, de acordo com as políticas e os padrões do Google. Para mais informações, consulte Políticas e atribuições da API Maps JavaScript.
Resumos de lugares
Os resumos de lugares são visões gerais breves de 100 caracteres específicas para um determinado ID de lugar, que fornecem um panorama geral de um lugar. Os resumos de lugares podem destacar alimentos, serviços ou produtos disponíveis para compra em um local:
-
"Restaurante do Forum Shops que serve porções grandes de pratos tradicionais italianos em um espaço casual."
-
"Salão elegante que oferece cortes de cabelo e coloração, além de escovas."
-
"Loja grande com muitos vendedores oferecendo uma variedade de decoração, móveis e roupas vintage."
Os resumos de lugares estão disponíveis para os tipos mostrados em Tipos aceitos nas categorias Cultura, Entretenimento e lazer, Comida e bebida, Compras, Serviços e Esportes.
Os resumos de lugares estão disponíveis para pontos de interesse nos seguintes idiomas e regiões:
| Idioma | Região |
|---|---|
| Inglês |
Índia Estados Unidos |
Pedir um resumo de um lugar
Para pedir um resumo generativo de um lugar, inclua o campo generativeSummary ao chamar fetchFields():
await place.fetchFields({ fields: [ 'generativeSummary', // Include other fields as needed. ], });
Use a propriedade generativeSummary
para recuperar resumos de lugares. O snippet a seguir recupera o texto de visão geral e
divulgação de um generativeSummary:
if (place.generativeSummary) { console.log("Place Overview:", place.generativeSummary.overview); console.log("Disclosure:", place.generativeSummary.disclosureText); }
Resumos de avaliações
Os resumos de avaliações são gerados com base apenas nas avaliações dos usuários. Ao sintetizar elementos importantes das avaliações dos usuários, como atributos do lugar e sentimento do avaliador, os resumos de avaliações fornecem insights de alto nível e ajudam os usuários a tomar decisões mais embasadas.
Por exemplo, um resumo de avaliações do Ferry Building em São Francisco inclui informações que vão de comida e compras a vistas e atmosfera:
"Os visitantes dizem que esse marco histórico oferece uma seleção diversificada de lojas, restaurantes e uma feira livre, com muitos elogiando as vistas da baía e da cidade. Eles também destacam a atmosfera vibrante, o acesso conveniente de balsa a outros destinos e a oportunidade de aproveitar as empresas locais".
Os resumos de avaliações estão disponíveis para pontos de interesse nos seguintes idiomas e regiões:
| Idioma | Região |
|---|---|
| Inglês | Argentina, Bolívia, Brasil, Chile, Colômbia, Costa Rica, Equador, Guatemala, Índia, Japão, México, Paraguai, Peru, Reino Unido, República Dominicana, Estados Unidos, Uruguai e Venezuela |
| Japonês | Japão |
| Português | Brasil |
| Espanhol | Argentina, Bolívia, Chile, Colômbia, Costa Rica, Equador, Estados Unidos, Guatemala, México, Paraguai, Peru, República Dominicana, Uruguai e Venezuela |
Pedir um resumo da avaliação
Para solicitar um resumo de avaliações, inclua o campo reviewSummary ao chamar fetchFields():
await place.fetchFields({ fields: [ 'reviewSummary', // Include other fields as needed. ], });
Use a propriedade
reviewSummary
para recuperar os resumos de avaliações. Para recuperar os resumos de avaliações, acesse a propriedade reviewSummary.text. O snippet a seguir recupera o texto de um reviewSummary.
if (place.reviewSummary) { console.log("Place Review Summary:", place.reviewSummary.text); }
Resumos de áreas
Os resumos de área são gerados para a área ao redor de um lugar. Os resumos de área fornecem mais contexto sobre um local, incluindo pontos de interesse próximos, para que os usuários tomem decisões mais bem informadas sobre onde ir e o que fazer quando chegarem lá. Por exemplo, ao visitar uma nova cidade, você pode conferir um resumo gerado de um bairro para um hotel e saber mais sobre a área ao redor:
-
"Essa área vibrante de São Francisco, que mistura North Beach e Chinatown, fica a noroeste do Financial District e tem pontos turísticos literários, atrações culturais exclusivas e opções gastronômicas variadas. Os pontos de destaque incluem a icônica livraria City Lights, o fascinante Cable Car Museum e as ruas movimentadas de Chinatown."
Se você estiver pensando em carregar um veículo elétrico, confira um resumo gerado de um eletroposto para saber mais sobre a área ao redor:
-
"Esta área oferece uma variedade de opções gastronômicas a 9 minutos a pé, incluindo Starbucks, Sushi Jin e Safeway."
Além de uma descrição da área, a resposta também contém uma lista de instâncias Place para os lugares mencionados na descrição. Chame fetchFields() nessas instâncias Place para solicitar mais detalhes de cada lugar.
Há dois tipos de resumos de área com tecnologia de IA:
-
Resumo do bairro: uma visão geral de alto nível dos pontos de interesse próximos para lugares com tipos
premise,street_addresse todos os tipos nas categorias Habitação e Hospedagem. -
Resumo das comodidades de eletropostos: uma visão geral de alto nível dos pontos de interesse próximos para lugares do tipo
electric_vehicle_charging_station.
Os resumos de área estão disponíveis para pontos de interesse nos seguintes idiomas e regiões:
| Idioma | Região |
|---|---|
| Inglês | Estados Unidos |
Pedir um resumo do bairro
Você pode pedir resumos de bairros para lugares dos tipos premise, street_address e todos os tipos nas categorias Moradia e Hospedagem. Para solicitar um resumo do bairro, inclua o
campo neighborhoodSummary ao chamar fetchFields():
await place.fetchFields({ fields: [ 'neighborhoodSummary', // Include other fields as needed. ], });
Use a propriedade neighborhoodSummary
para extrair resumos de vizinhança. Para recuperar os resumos de vizinhança, acesse a propriedade neighborhoodSummary.content para receber o texto.
O snippet a seguir recupera o conteúdo de um neighborhoodSummary:
if (place.neighborhoodSummary) { console.log("Place Neighborhood Summary:", place.neighborhoodSummary.overview.content); }
Pedir um resumo das comodidades de um eletroposto
Você pode solicitar resumos de comodidades de estações de recarga de veículos elétricos para lugares do tipo
electric_vehicle_charging_station. O resumo de comodidades do EVCS oferece quatro tipos de resumos: overview, coffee, restaurant e store. Por isso, a estrutura de dados é uma matriz de objetos, cada um contendo um resumo. Para solicitar um resumo das comodidades de um posto de abastecimento de veículos elétricos, inclua o campo
evChargeAmenitySummary ao chamar fetchFields():
await place.fetchFields({ fields: [ 'evChargeAmenitySummary', // Include other fields as needed. ], });
Use a propriedade evChargeAmenitySummary para recuperar resumos de comodidades de estações de recarga de veículos elétricos. Para extrair texto dos
resumos, acesse a propriedade content das propriedades evChargeAmenitySummary.overview,
evChargeAmenitySummary.coffee, evChargeAmenitySummary.restaurant e
evChargeAmenitySummary.store.
O snippet a seguir recupera o conteúdo de um 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); }