The following example demonstrates how to show a popover containing place
information when a place is clicked.
let map3DElement = null; async function init() { const { Map3DElement } = await google.maps.importLibrary("maps3d"); { } map3DElement = new Map3DElement({ center: { lat: 51.532, lng: -0.124, altitude: 30 }, range: 1400, tilt: 64, heading: -5, mode: 'HYBRID' }); document.body.append(map3DElement); map3DElement.addEventListener('gmp-click', async (event) => { event.preventDefault(); if (event.placeId) { const place = await event.fetchPlace(); await place.fetchFields({ fields: ['*'] }); // Display place details. document.getElementById("placeName").innerHTML = "<b>Name :</b><br> " + place.displayName; document.getElementById("placeId").innerHTML = "<b>Id :</b><br> " + place.id; document.getElementById("placeType").innerHTML = "<b>Types :<b/>"; for (const type of place.types) { document.getElementById("placeType").innerHTML += "<br> " + type; } document.getElementById("details").style.display = "block"; } }); } init();
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ html, body { height: 100%; margin: 0; padding: 0; font-family: "Centra No2", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 0.9em; } .textContainer { background-color: #4d90fe; margin: 10px; overflow: hidden; position: absolute; left: 50%; top: 10px; border: 1px solid white; border-radius: 10px; padding: 5px; z-index: 1000; color: white; } .detailsContainer { background-color: #00000078; margin: 10px; overflow: hidden; position: absolute; top: 100px; left : 10px; padding: 10px; z-index: 1000; display:none; color: white; border-radius: 15px; }
<html> <head> <title>Map</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- 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: "beta",});</script> <div id="details" class="detailsContainer"> <div id="placeName"></div> <div id="placeId"></div> <div id="placeType"></div> </div> <div class="textContainer"> <div class="text">Click on a place to get details.</div> </div> </body> </html>
Try Sample
Clone Sample
Git and Node.js are required to run this sample locally. Follow these instructions to install Node.js and NPM. The following commands clone, install dependencies and start the sample application.
git clone https://github.com/googlemaps-samples/js-api-samples.git
cd samples/3d-places
npm i
npm start