Das
PlaceDetailsElement
ist ein HTML-Element, mit dem Details zu einem Ort gerendert werden. Es gibt zwei Methoden, um das Element gmp-place-details
zu konfigurieren:
- Mit der Methode
configureFromPlace
wird das Element „Ortsdetails“ basierend auf einer Orts-ID oder einemPlace
-Objekt gerendert. - Mit der Methode
configureFromLocation
wird das Element „Place Details“ anhand von Breiten- und Längenkoordinaten gerendert.
Im Beispiel auf dieser Seite wird das Element „Ortsdetails“ gerendert, wenn der Nutzer auf die Karte klickt. Wenn Sie einer Karte Ortsdetails hinzufügen möchten, fügen Sie der HTML-Seite ein gmp-place-details
-Element hinzu. Legen Sie die Größe und Position mit den Attributen size
und slot
fest. Im folgenden Beispiel ist es in einem gmp-map
-Element verschachtelt, wobei size
auf medium
und slot
auf control-inline-start-block-start
festgelegt ist.
<gmp-map center="-37.813,144.963" zoom="2" map-id="DEMO_MAP_ID"> <gmp-place-details size="medium" slot="control-inline-start-block-start"></gmp-place-details> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map>
Mit einem querySelector
wird jedes Seitenelement für die Interaktion ausgewählt:
const map = document.querySelector('gmp-map'); const placeDetails = document.querySelector('gmp-place-details'); const marker = document.querySelector('gmp-advanced-marker');
Der Ereignishandler im folgenden Snippet rendert das Element „Ortsdetails“ basierend auf dem Ort des Kartenklicks des Nutzers:
// Add an event listener to handle map clicks. map.innerMap.addListener('click', async (event) => { marker.position = null; event.stop(); if (event.placeId) { // The user clicked a point on the map that has a Place ID (for example a // POI). await placeDetails.configureFromPlace({id: event.placeId}); } else { // The user clicked an area of the map with no Place ID. await placeDetails.configureFromLocation(event.latLng); } // Show the marker at the selected place. marker.position = placeDetails.place.location; marker.style.display = 'block'; });
Vollständiges Codebeispiel ansehen
JavaScript
/** * @license * Copyright 2019 Google LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ // Use querySelector to select elements for interaction. const map = document.querySelector('gmp-map'); const placeDetails = document.querySelector('gmp-place-details'); const marker = document.querySelector('gmp-advanced-marker'); async function init() { // Import the needed libraries. await google.maps.importLibrary('places'); await google.maps.importLibrary('marker'); // Calls the geolocation helper function to center the map on the current // device location. findCurrentLocation(); // Hide the map type control. map.innerMap.setOptions({mapTypeControl: false}); // Add an event listener to handle map clicks. map.innerMap.addListener('click', async (event) => { marker.position = null; event.stop(); if (event.placeId) { // Fire when the user clicks a POI. await placeDetails.configureFromPlace({id: event.placeId}); } else { // Fire when the user clicks the map (not on a POI). await placeDetails.configureFromLocation(event.latLng); } // Show the marker at the selected place. marker.position = placeDetails.place.location; marker.style.display = 'block'; }); } // Helper function for geolocation. async function findCurrentLocation() { const {LatLng} = await google.maps.importLibrary('core'); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( (position) => { const pos = new LatLng(position.coords.latitude, position.coords.longitude); map.innerMap.panTo(pos); map.innerMap.setZoom(16); }, () => { console.log('The Geolocation service failed.'); map.innerMap.setZoom(16); }, ); } else { console.log('Your browser doesn\'t support geolocation'); map.innerMap.setZoom(16); } } init();
CSS
html, body { height: 100%; margin: 0; } body { display: flex; flex-direction: column; font-family: Arial, Helvetica, sans-serif; } h1 { font-size: 16px; text-align: center; } gmp-map { box-sizing: border-box; padding: 0 20px 20px; width: 100%; } gmp-place-details { background-color: #fff; border-radius: 8px; margin: 20px; width: 400px; } gmp-advanced-marker { display: 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"> </head> <body> <h1>Click on the map to view place details</h1> <gmp-map center="-37.813,144.963" zoom="2" map-id="DEMO_MAP_ID"> <gmp-place-details size="large" slot="control-inline-start-block-start"></gmp-place-details> <gmp-advanced-marker></gmp-advanced-marker> </gmp-map> <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: "YOUR_API_KEY", v: "alpha" }); </script> </body> </html>