O elemento Place Details e o elemento Place Details Compact são elementos HTML que renderizam detalhes de um lugar:
-
O
PlaceDetailsElementoferece suporte a todos os dados de lugar visualizáveis e pode incluir várias fotos. -
O
PlaceDetailsCompactElementfoi projetado para ocupar o mínimo de espaço e mostrar um conjunto conciso de informações sobre um lugar, incluindo nome, endereço, classificação etc. Ele também pode incluir uma única foto.
Use a ferramenta de personalização para conferir como diferentes conjuntos de propriedades afetam a aparência de um elemento do Place Details e acessar o código em HTML/CSS, Kotlin/XML e Swift.
Elemento Place Details
Clique em um marcador no mapa para ver os detalhes do lugar em um elemento Place Details.
O
PlaceDetailsElement
oferece suporte a uma ampla variedade de elementos de conteúdo, incluindo horário de funcionamento completo,
site, número de telefone,
resumo com tecnologia de IA
com substituto para resumo editorial, destaques específicos do tipo, avaliações,
resumo das avaliações com tecnologia de IA, Plus Code e listas de recursos.
Para mostrar Place Details em um mapa, adicione um elemento gmp-place-details ao elemento gmp-map na página HTML. Inclua um elemento filho,
gmp-place-details-place-request, para selecionar o lugar. Pode ser um objeto Place, um ID de lugar ou o nome do recurso de um lugar:
<gmp-map center="47.759737, -122.250632" zoom="16" map-id="DEMO_MAP_ID">
<div class="widget-container" slot="control-inline-start-block-start">
<gmp-place-details>
<gmp-place-details-place-request place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-all-content></gmp-place-all-content>
</gmp-place-details>
</div>
<gmp-advanced-marker></gmp-advanced-marker>
</gmp-map>Configurar o conteúdo
É possível controlar o conteúdo específico do lugar exibido pelo elemento gmp-place-details usando um elemento gmp-place-content-config aninhado para selecionar e configurar os Place Details, como mostrado neste exemplo:
<gmp-place-details>
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-address></gmp-place-address>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-opening-hours></gmp-place-opening-hours>
<gmp-place-website></gmp-place-website>
<gmp-place-phone-number></gmp-place-phone-number>
<gmp-place-summary></gmp-place-summary>
<gmp-place-type-specific-highlights></gmp-place-type-specific-highlights>
<gmp-place-review-summary></gmp-place-review-summary>
<gmp-place-reviews></gmp-place-reviews>
<gmp-place-feature-list></gmp-place-feature-list>
</gmp-place-content-config>
</gmp-place-details>
O elemento gmp-place-content-config contém vários elementos de conteúdo filho, e cada um seleciona um detalhe de lugar correspondente para exibir: gmp-place-address seleciona o endereço do lugar, gmp-place-price seleciona o nível de preço do lugar etc. Os elementos gmp-place-summary e gmp-place-review-summary fornecem um resumo gerado com IA do lugar e das avaliações dele, respectivamente. A ordem dos elementos filhos é irrelevante, já que os detalhes selecionados são sempre renderizados em uma ordem predefinida fixa.
Alguns desses elementos podem ser configurados usando atributos específicos de conteúdo:
-
O elemento
gmp-place-mediaé usado para mostrar uma única foto e inclui um atributolightbox-preferredque abre a foto em uma lightbox quando clicado. A lightbox fica desativada por padrão. -
O elemento
gmp-place-attributioné usado para mostrar a origem da foto. Os atributoslight-scheme-coloredark-scheme-colorsão usados para definir a cor do texto de atribuição nos modos claro e escuro.
Consulte a
documentação de referência de
PlaceContentConfigElement
para mais informações sobre todos os elementos de conteúdo
compatíveis.
Para simplificar, o elemento
gmp-place-content-config
pode ser substituído por
gmp-place-all-content
para mostrar todos os detalhes disponíveis no elemento Place Details ou por
gmp-place-standard-content
para exibir uma configuração padrão.
Configurar a aparência
O intervalo de largura recomendado para o elemento gmp-place-details
é de 250 px a 400 px. Larguras menores que 250 px podem não ser exibidas corretamente. Defina a
altura de acordo com seu aplicativo. O elemento Place Details foi projetado para
rolar dentro do espaço alocado, conforme necessário.
O elemento gmp-place-details também aceita várias propriedades CSS personalizadas para configurar as cores e fontes do elemento. Consulte
Estilo personalizado do Kit de Interface do Places
para mais detalhes.
Confira o exemplo completo de código.
JavaScript
// Use querySelector to select elements for interaction. const map = document.querySelector('gmp-map'); const placeDetails = document.querySelector('gmp-place-details'); const placeDetailsRequest = document.querySelector( 'gmp-place-details-place-request' ); const marker = document.querySelector('gmp-advanced-marker'); async function init() { // Request needed libraries. await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); // Hide the map type control. map.innerMap.setOptions({ mapTypeControl: false }); // Function to update map and marker based on place details const updateMapAndMarker = () => { if (placeDetails.place?.location) { map.innerMap.panTo(placeDetails.place.location); map.innerMap.setZoom(16); // Set zoom after panning if needed marker.position = placeDetails.place.location; marker.collisionBehavior = 'REQUIRED_AND_HIDES_OPTIONAL'; marker.style.display = 'block'; } }; // Set up map once widget is loaded. placeDetails.addEventListener('gmp-load', () => { updateMapAndMarker(); }); // Add an event listener to handle clicks. map.innerMap.addListener('click', (event) => { marker.position = null; event.stop(); if ('placeId' in event && event.placeId) { // Fire when the user clicks a POI. placeDetailsRequest.place = event.placeId; updateMapAndMarker(); } else { // Fire when the user clicks the map (not on a POI). console.log('No place was selected.'); marker.style.display = 'none'; } }); } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .container { display: flex; height: 100vh; width: 100%; } gmp-map { flex-grow: 1; } .ui-panel { width: 400px; margin-left: 20px; margin-top: 10px; } gmp-place-details { width: 100%; margin: 0; border: none; }
HTML
<!doctype html>
<html>
<head>
<title>Place Details with Google Maps</title>
<meta charset="utf-8" />
<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>
<div class="container">
<!-- map-id is required to use advanced markers. See https://developers.google.com/maps/documentation/javascript/map-ids/mapid-over. -->
<gmp-map zoom="17" map-id="DEMO_MAP_ID">
<gmp-advanced-marker></gmp-advanced-marker>
</gmp-map>
<div class="ui-panel">
<gmp-place-details>
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-address></gmp-place-address>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-opening-hours></gmp-place-opening-hours>
<gmp-place-website></gmp-place-website>
<gmp-place-phone-number></gmp-place-phone-number>
<gmp-place-summary></gmp-place-summary>
<gmp-place-type-specific-highlights></gmp-place-type-specific-highlights>
<gmp-place-review-summary></gmp-place-review-summary>
<gmp-place-reviews></gmp-place-reviews>
<gmp-place-feature-list></gmp-place-feature-list>
</gmp-place-content-config>
</gmp-place-details>
</div>
</div>
</body>
</html>Elemento compacto de Place Details
Clique em um marcador no mapa para ver os detalhes do lugar em um elemento compacto de Place Details.
O
PlaceDetailsCompactElement
renderiza detalhes de um lugar selecionado usando o mínimo de espaço. Isso pode ser
útil em uma janela de informações que destaca um lugar em um mapa, em uma experiência de rede social, como compartilhar um local em um chat, como uma sugestão para
selecionar seu local atual ou em um artigo de mídia para referenciar
o lugar no Google Maps. O PlaceDetailsCompactElement pode mostrar nome de exibição, endereço, classificação, tipo, preço, ícone de acessibilidade, status de abertura e uma única foto. Ele pode ser exibido na horizontal ou
na vertical, conforme selecionado pelo atributo orientation.
No snippet a seguir, gmp-place-details-compact é
configurado com orientation definido como horizontal.
Um atributo extra, truncation-preferred, trunca
determinados conteúdos para que caibam em uma linha, em vez de serem ajustados. O
elemento gmp-place-details-compact contém um elemento filho,
gmp-place-details-place-request, para selecionar o lugar. Pode ser um objeto Place, um ID de lugar ou o nome do recurso de um lugar.
<gmp-place-details-compact orientation="horizontal" truncation-preferred>
<gmp-place-details-place-request place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-all-content></gmp-place-all-content>
</gmp-place-details-compact>Configurar o conteúdo
É possível controlar o conteúdo específico do lugar exibido pelo elemento gmp-place-details-compact usando um elemento gmp-place-content-config aninhado para selecionar e configurar os Place Details, conforme mostrado neste snippet:
<gmp-place-content-config>
<gmp-place-media lightbox-preferred></gmp-place-media>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-open-now-status></gmp-place-open-now-status>
<gmp-place-attribution
light-scheme-color="gray"
dark-scheme-color="white"></gmp-place-attribution>
</gmp-place-content-config>
O elemento gmp-place-content-config contém vários elementos de conteúdo filho, e cada um seleciona um Place Details correspondente para exibição. A ordem dos elementos filhos é irrelevante, já que os detalhes
selecionados são sempre renderizados em uma ordem predefinida fixa. Alguns desses
elementos podem ser configurados usando atributos específicos do conteúdo.
Consulte a
documentação de referência de
PlaceContentConfigElement para mais informações sobre todos os elementos de conteúdo
compatíveis.
Para simplificar, o elemento
gmp-place-content-config
pode ser substituído por
gmp-place-all-content
para mostrar todos os detalhes disponíveis no elemento Place Details Compact ou por
gmp-place-standard-content
para exibir uma configuração padrão.
Configurar a aparência
O intervalo de largura recomendado para o
elemento gmp-place-details-compact na orientação vertical é de
180 px a 300 px. Larguras menores que 160 px podem não ser exibidas corretamente. Não defina
uma altura fixa.
O intervalo de largura recomendado para o
elemento gmp-place-details-compact na orientação horizontal
é de 180 px a 500 px. Larguras menores que 160 px podem não ser exibidas corretamente. Em
larguras menores que 350 px, a imagem em miniatura não será mostrada. Não defina
uma altura fixa.
O elemento gmp-place-details-compact também aceita várias propriedades CSS personalizadas para configurar as cores e fontes do elemento. Consulte
Estilo personalizado do Kit de Interface do Places
para mais detalhes.
Se o elemento Place Details Compact for adicionado a uma janela de informações,
a estilização personalizada precisará ser aplicada diretamente ao
elemento gmp-place-details-compact. Isso ocorre porque a janela de informações faz parte do DOM de sombra do mapa, então os estilos CSS externos não serão aplicados.
<gmp-place-details-compact
orientation="horizontal"
truncation-preferred
style="
width: 400px;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
color-scheme: light;
">
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>Confira um exemplo de código completo
Este exemplo demonstra como adicionar um
PlaceDetailsCompactElement
a um mapa de forma programática usando um
InfoWindow
e um
AdvancedMarkerElement.
JavaScript
// Use querySelector to select elements for interaction. const map = document.querySelector('gmp-map'); const placeDetails = document.querySelector('gmp-place-details-compact'); const placeDetailsRequest = document.querySelector( 'gmp-place-details-place-request' ); const marker = document.querySelector('gmp-advanced-marker'); async function init() { // Request needed libraries. void Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); const { InfoWindow } = await google.maps.importLibrary('maps'); await window.customElements.whenDefined('gmp-map'); // Set the inner map options. map.innerMap.setOptions({ mapTypeControl: false, streetViewControl: false, }); await window.customElements.whenDefined('gmp-advanced-marker'); marker.collisionBehavior = 'REQUIRED_AND_HIDES_OPTIONAL'; const infoWindow = new InfoWindow(); infoWindow.addListener('close', () => { marker.position = null; }); const showInfoWindow = () => { if (infoWindow.isOpen) return; infoWindow.setContent(placeDetails); infoWindow.open({ anchor: marker }); }; placeDetails.addEventListener('gmp-load', () => { // For the initial load case, with no user click, we fall back to the place's location, and ensure the map has a center set and the InfoWindow is show. // (The clicked POI LatLng will be a more natural marker position, when available.) if (!map.center && placeDetails.place?.location) { map.center = marker.position = placeDetails.place.location; showInfoWindow(); } }); // Add an event listener to handle clicks. map.innerMap.addListener('click', (event) => { event.stop(); if ('placeId' in event) { // When the user clicks a POI. marker.position = event.latLng; placeDetailsRequest.place = event.placeId; showInfoWindow(); } else { // When the user clicks the map (not on a POI). marker.position = null; placeDetailsRequest.place = null; console.log('No place was selected.'); } }); } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .container { display: flex; height: 100vh; width: 100%; } gmp-map { flex-grow: 1; }
HTML
<!doctype html>
<html>
<head>
<title>Place Details Compact with Google Maps</title>
<meta charset="utf-8" />
<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>
<div class="container">
<!-- map-id is required to use Advanced Markers. See https://developers.google.com/maps/documentation/javascript/map-ids/mapid-over. -->
<gmp-map zoom="17" map-id="DEMO_MAP_ID">
<gmp-advanced-marker></gmp-advanced-marker>
</gmp-map>
</div>
<!--
The gmp-place-details-compact element is styled inline because it is
conditionally rendered and moved into the info window, which is
part of the map's shadow DOM.
-->
<gmp-place-details-compact
orientation="horizontal"
truncation-preferred
style="
width: 400px;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
color-scheme: light;
">
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-media lightbox-preferred></gmp-place-media>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-open-now-status></gmp-place-open-now-status>
<gmp-place-attribution
light-scheme-color="gray"
dark-scheme-color="white"></gmp-place-attribution>
</gmp-place-content-config>
</gmp-place-details-compact>
</body>
</html>