L'elemento Place Details e l'elemento Place Details Compact sono elementi HTML che visualizzano i dettagli di un luogo:
-
PlaceDetailsElement
supporta tutti i dati dei luoghi visualizzabili e può includere più foto. -
Il
PlaceDetailsCompactElement
è progettato per occupare uno spazio minimo e mostrare un insieme conciso di informazioni su un luogo, tra cui nome, indirizzo, valutazione e così via. Può includere anche una singola foto.
Elemento Place Details
Fai clic su un indicatore sulla mappa per visualizzare i dettagli del luogo in un elemento Dettagli del luogo.
PlaceDetailsElement
supporta un'ampia gamma di elementi di contenuti, tra cui orari di apertura completi, sito web, numero di telefono, riepilogo editoriale, punti salienti specifici per tipo, recensioni, plus code ed elenchi di funzionalità.
Per visualizzare i dettagli del luogo su una mappa, aggiungi un elemento gmp-place-details
all'elemento gmp-map
nella pagina HTML. Includi un elemento secondario,
gmp-place-details-place-request
, per selezionare il luogo. Può trattarsi di un
oggetto Place,
di un
ID luogo
o del nome della risorsa di un luogo nel formato "places/{place_id}":
<gmp-map center="47.759737, -122.250632" zoom="16" map-id="DEMO_MAP_ID"> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map>
<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>
Configurare i contenuti
Puoi controllare il contenuto del luogo specifico visualizzato dall'elemento
gmp-place-details
utilizzando un elemento
gmp-place-content-config
nidificato per selezionare e configurare i dettagli del luogo, come mostrato in questo esempio:
<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-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-reviews></gmp-place-reviews> <gmp-place-feature-list></gmp-place-feature-list> <gmp-place-media lightbox-preferred ></gmp-place-media> <gmp-place-attribution light-scheme-color="gray" dark-scheme-color="white"></gmp-place-attribution> </gmp-place-content-config> </gmp-place-details> </div> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map>
L'elemento gmp-place-content-config
stesso contiene una serie di elementi di contenuti secondari e ognuno seleziona un dettaglio del luogo corrispondente da visualizzare:
PlaceAddressElement
seleziona l'indirizzo del luogo,
PlacePriceElement
seleziona il livello di prezzo del luogo e così via. L'ordine degli elementi secondari è irrilevante, in quanto i dettagli selezionati vengono sempre visualizzati in un ordine predefinito fisso.
Alcuni di questi elementi possono essere configurati ulteriormente utilizzando attributi specifici per i contenuti:
-
L'elemento
gmp-place-media
viene utilizzato per visualizzare una singola foto e include un attributolightbox-preferred
che apre la foto in una lightbox quando viene selezionata. Lightbox è disattivato per impostazione predefinita. -
L'elemento
gmp-place-attribution
viene utilizzato per visualizzare l'origine della foto. Gli attributilight-scheme-color
edark-scheme-color
vengono utilizzati per impostare il colore del testo di attribuzione in modalità Chiaro e Buio.
PlaceContentConfigElement
.
Per semplicità, l'elemento
gmp-place-content-config
può
essere sostituito con
gmp-place-all-content
per mostrare tutti i dettagli disponibili nell'elemento Dettagli luogo oppure con
gmp-place-standard-content
per visualizzare una configurazione standard.
Configurare l'aspetto
L'intervallo di larghezza consigliato per l'elemento gmp-place-details
è 250-400 px.
Le larghezze inferiori a 250 px potrebbero non essere visualizzate correttamente. Imposta l'altezza in base alla tua applicazione.
L'elemento Places Details è progettato per scorrere all'interno dello spazio assegnato in base alle esigenze.
L'elemento gmp-place-details
supporta anche una serie di proprietà CSS personalizzate
per configurare i colori e i caratteri dell'elemento. Per ulteriori dettagli, consulta
Places UI
Kit Custom Styling.
Visualizza l'esempio di codice completo
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'); let center = { lat: 47.759737, lng: -122.250632 }; async function initMap() { // Request needed libraries. await google.maps.importLibrary("maps"); await google.maps.importLibrary("marker"); await 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 && placeDetails.place.location) { let adjustedCenter = offsetLatLngRight(placeDetails.place.location, -0.005); map.innerMap.panTo(adjustedCenter); map.innerMap.setZoom(16); // Set zoom after panning if needed marker.position = placeDetails.place.location; marker.collisionBehavior = google.maps.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL; marker.style.display = 'block'; } }; // Set up map once widget is loaded. placeDetails.addEventListener('gmp-load', (event) => { updateMapAndMarker(); }); // Add an event listener to handle clicks. map.innerMap.addListener('click', async (event) => { marker.position = null; event.stop(); if (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'; } }); } // Helper function to offset marker placement for better visual appearance. function offsetLatLngRight(latLng, longitudeOffset) { const newLng = latLng.lng() + longitudeOffset; return new google.maps.LatLng(latLng.lat(), newLng); } initMap();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { display: flex; /* Use flexbox for layout */ justify-content: center; /* Center the content horizontally */ align-items: flex-start; /* Align items to the top */ width: 100% } h1 { font-size: 16px; text-align: center; } gmp-map { height: 500px; } gmp-place-details { border-radius: 0px; margin: 20px; width: 400px; height: 500px; margin-top: 0px; } gmp-advanced-marker { display: none; } .widget-container { min-width: 400px; overflow-y: none; overflow-x: none; }
HTML
<!DOCTYPE html> <html> <head> <title>Click on the map to view place details</title> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> <script type="module" src="./index.js"></script> </head> <body> <gmp-map center="47.759737, -122.250632" zoom="16" map-id="DEMO_MAP_ID"> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map> <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> <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> </body> </html>
Elemento compatto Place Details
Fai clic su un indicatore sulla mappa per visualizzare i dettagli del luogo in un elemento compatto dei dettagli del luogo.
Il
PlaceDetailsCompactElement
mostra i dettagli di un luogo selezionato utilizzando uno spazio minimo. Questo può essere utile in una finestra informativa
che mette in evidenza un luogo su una mappa, in un'esperienza sui social media come la condivisione di una posizione in una chat,
come suggerimento per selezionare la tua posizione attuale o all'interno di un articolo multimediale per fare riferimento
al luogo su Google Maps.Il PlaceDetailsCompactElement
può mostrare nome,
indirizzo, valutazione, tipo, prezzo, icona di accessibilità, stato di apertura e una singola foto. Può essere
visualizzato orizzontalmente o verticalmente, come selezionato dall'attributo orientation
.
Nello snippet seguente, gmp-place-details-compact
è nidificato all'interno di un elemento
gmp-map
, con orientation
impostato su horizontal
. Un
attributo aggiuntivo, truncation-preferred
, tronca determinati contenuti per adattarli a
una riga anziché andare a capo. L'elemento gmp-place-details-compact
contiene un elemento secondario,
gmp-place-details-place-request
, per selezionare il luogo. Può trattarsi di un
oggetto Place,
di un
ID luogo
o del nome della risorsa di un luogo nel formato "places/{place_id}":
<gmp-map center="47.75972, -122.25094" zoom="19" map-id="DEMO_MAP_ID"> <gmp-place-details-compact orientation = "horizontal" truncation-preferred slot="control-block-start-inline-center" > <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> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map>
Configurare i contenuti
Puoi controllare i contenuti di un luogo specifico visualizzati dall'elemento
gmp-place-details-compact
utilizzando un elemento
gmp-place-content-config
nidificato per selezionare e configurare i dettagli
del luogo. L'elemento gmp-place-content-config
stesso contiene una serie di
elementi di contenuti secondari e ognuno seleziona un dettaglio del luogo corrispondente da visualizzare.
L'ordine degli elementi secondari è irrilevante, in quanto i dettagli selezionati vengono sempre visualizzati in un
ordine predefinito fisso. Alcuni di questi elementi possono essere configurati ulteriormente utilizzando
attributi specifici per i contenuti.
PlaceContentConfigElement
.
Per semplicità, l'elemento
gmp-place-content-config
può
essere sostituito da
gmp-place-all-content
per mostrare tutti i dettagli disponibili nell'elemento Dettagli luogo compatti oppure da
gmp-place-standard-content
per visualizzare una configurazione standard.
Configurare l'aspetto
L'intervallo di larghezza consigliato per l'elemento gmp-place-details-compact
in
orientamento verticale è 180-300 px. Le larghezze
inferiori a 160 px potrebbero non essere visualizzate correttamente. Non impostare un'altezza fissa.
L'intervallo di larghezza consigliato per l'elemento gmp-place-details-compact
in
orientamento orizzontale è 180-500 px. Le larghezze
inferiori a 160 px potrebbero non essere visualizzate correttamente. A larghezze inferiori a 350 px, l'immagine in miniatura
non verrà mostrata. Non impostare un'altezza fissa.
L'elemento gmp-place-details-compact
supporta anche una serie di proprietà CSS personalizzate
per configurare i colori e i caratteri dell'elemento. Per ulteriori dettagli, consulta
Places UI
Kit Custom Styling.
Visualizza un esempio di codice completo
Questo esempio mostra come aggiungere un
PlaceDetailsCompactElement
a una mappa in modo programmatico utilizzando un
AdvancedMarkerElement
.
JavaScript
// Use querySelector to select elements for interaction. const mapContainer = document.getElementById("map-container"); const placeDetails = document.querySelector("gmp-place-details-compact"); const placeDetailsRequest = document.querySelector("gmp-place-details-place-request"); let gMap; let marker; async function initMap() { const { PlaceDetailsCompactElement, PlaceDetailsPlaceRequestElement } = await google.maps.importLibrary("places"); const { Map } = await google.maps.importLibrary("maps"); const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); gMap = new Map(mapContainer, { mapId: 'DEMO_MAP_ID' }); marker = new AdvancedMarkerElement({ map: gMap }); // Hide the map type control. gMap.setOptions({ mapTypeControl: false }); // Set up map, marker, and infowindow once widget is loaded. placeDetails.style.visibility = 'visible'; placeDetails.addEventListener('gmp-load', (event) => { console.log("placeDetails initialized!"); updateMapAndMarker(); }); // Add an event listener to handle clicks. gMap.addListener("click", async (event) => { event.stop(); // Fire when the user clicks on a POI. if (event.placeId) { console.log("clicked on POI"); console.log(event.placeId); placeDetailsRequest.place = event.placeId; updateMapAndMarker(); } else { // Fire when the user clicks the map (not on a POI). console.log('No place was selected.'); } ; }); // Function to update map, marker, and infowindow based on place details const updateMapAndMarker = () => { console.log("function called"); if (placeDetails.place && placeDetails.place.location) { marker.gMap = null; let adjustedCenter = offsetLatLngRight(placeDetails.place.location, 0.002); gMap.panTo(adjustedCenter); gMap.setZoom(16); // Set zoom after panning if needed marker.content = placeDetails; marker.position = placeDetails.place.location; } else { console.log("else"); } }; } // Helper function to offset marker placement for better visual appearance. function offsetLatLngRight(latLng, latitudeOffset) { const newLat = latLng.lat() + latitudeOffset; return new google.maps.LatLng(newLat, latLng.lng()); } initMap();
CSS
html, body { display: flex; width: 100%; height: 400px; margin: 0; } h1 { font-size: 16px; text-align: center; } #map-container { box-sizing: border-box; width: 100%; } gmp-place-details-compact { /* Sets the color for text and icons on the surface */ /* Adapts automatically to the user's system light/dark mode preference */ --gmp-mat-color-on-surface: light-dark(black, white); /* Sets the background color of the surface */ /* Adapts automatically to the user's system light/dark mode preference */ --gmp-mat-color-surface: light-dark(white, black); /* Defines the primary font stack used within the component */ --gmp-mat-font-family: Google Sans Text, sans-serif; /* Defines the style for medium body text (e.g., address, descriptions) */ --gmp-mat-font-body-medium: normal 400 0.875em/1.25em var(--gmp-mat-font-family, 'Google Sans Text'); width: 360px; border: none; padding: 0; margin: 0; position: relative; transform: translate(0, calc(-20px)); } /* This creates the pointer attached to the bottom of the element. */ gmp-place-details-compact::after { content: ""; position: absolute; top: 100%; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-left: 16px solid transparent; border-right: 16px solid transparent; border-top: 20px solid var(--gmp-mat-color-surface, light-dark(white, black)); }
HTML
<!DOCTYPE html> <html> <head> <title>Click on the map to view place details</title> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> <script type="module" src="./index.js"></script> </head> <body> <div id = "map-container"></div> <gmp-place-details-compact orientation="horizontal"> <gmp-place-details-place-request place = ChIJn97JQNpC1moRIcJsVMEQLI8></gmp-place-details-place-request> <gmp-place-all-content></gmp-place-all-content> </gmp-place-details-compact> <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> </body> </html>