L'elemento Place Details e l'elemento Place Details Compact sono elementi HTML che visualizzano i dettagli di un luogo:
- 
        PlaceDetailsElementsupporta 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.
      Il
      
        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ò essere un
      oggetto Place,
       un
      ID luogo
      o il nome della risorsa di un luogo:
    
<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 ulteriormente configurati utilizzando attributi specifici per i contenuti:
- 
        L'elemento
        gmp-place-mediaviene utilizzato per visualizzare una singola foto e include un attributolightbox-preferredche apre la foto in una lightbox quando viene selezionata. Lightbox è disattivato per impostazione predefinita.
- 
        L'elemento
        gmp-place-attributionviene utilizzato per visualizzare l'origine della foto. Gli attributilight-scheme-coloredark-scheme-colorvengono 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 maggiori 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.
    
      Nel seguente snippet, 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ò essere un
      oggetto Place,
       un
      ID luogo
      o il nome della risorsa di un luogo.
    
<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 ulteriormente configurati 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 maggiori 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>