องค์ประกอบรายละเอียดสถานที่และองค์ประกอบรายละเอียดสถานที่แบบย่อคือองค์ประกอบ HTML ที่แสดงรายละเอียดของสถานที่
-
PlaceDetailsElementรองรับ ข้อมูลสถานที่ที่แสดงภาพได้ทั้งหมด และอาจมีรูปภาพหลายรูป -
PlaceDetailsCompactElementได้รับการออกแบบมาให้ใช้พื้นที่น้อยที่สุดและแสดงชุดข้อมูลที่กระชับ เกี่ยวกับสถานที่ ซึ่งรวมถึงชื่อ ที่อยู่ คะแนน ฯลฯ และอาจมีรูปภาพ 1 รูปด้วย
องค์ประกอบรายละเอียดสถานที่
คลิกเครื่องหมายบนแผนที่เพื่อดูรายละเอียดสถานที่ในองค์ประกอบรายละเอียดสถานที่
PlaceDetailsElement
รองรับองค์ประกอบเนื้อหาที่หลากหลาย ซึ่งรวมถึงเวลาทําการทั้งหมด เว็บไซต์ หมายเลขโทรศัพท์
สรุปที่ทำงานด้วยระบบ AI
พร้อมการเปลี่ยนไปใช้สรุปเชิงบรรณาธิการ ไฮไลต์เฉพาะประเภท รีวิว รวมถึงโค้ดและรายการฟีเจอร์
หากต้องการแสดงรายละเอียดสถานที่บนแผนที่ ให้เพิ่มองค์ประกอบ
gmp-place-details ลงในองค์ประกอบ gmp-map ในหน้า HTML
รวมองค์ประกอบย่อย gmp-place-details-place-request เพื่อเลือกสถานที่ ซึ่งอาจเป็นออบเจ็กต์สถานที่
รหัสสถานที่
หรือชื่อทรัพยากรของสถานที่
<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>กำหนดค่าเนื้อหา
คุณควบคุมเนื้อหาของสถานที่ที่เฉพาะเจาะจงซึ่งแสดงโดยองค์ประกอบ
gmp-place-details ได้โดยใช้องค์ประกอบ gmp-place-content-config ที่ซ้อนกันเพื่อเลือกและกำหนดค่ารายละเอียดสถานที่
ดังที่แสดงในตัวอย่างนี้
<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-review-summary></gmp-place-review-summary>
<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>
องค์ประกอบ gmp-place-content-config เองมีองค์ประกอบเนื้อหาย่อยหลายรายการ และแต่ละรายการจะเลือกรายละเอียดสถานที่ที่เกี่ยวข้องเพื่อแสดง ดังนี้
PlaceAddressElement เลือกที่อยู่ของสถานที่
PlacePriceElement
เลือกระดับราคาของสถานที่ ฯลฯ ลำดับขององค์ประกอบย่อยไม่เกี่ยวข้อง เนื่องจากระบบจะแสดงรายละเอียดที่เลือกตามลำดับที่กำหนดไว้ล่วงหน้าเสมอ
คุณกำหนดค่าองค์ประกอบบางอย่างเพิ่มเติมได้โดยใช้แอตทริบิวต์เฉพาะเนื้อหา ดังนี้
-
องค์ประกอบ
gmp-place-mediaใช้เพื่อแสดงรูปภาพเดียว และมีแอตทริบิวต์lightbox-preferredที่เปิดรูปภาพในไลท์บ็อกซ์เมื่อคลิก ระบบจะปิดใช้ไลท์บ็อกซ์โดยค่าเริ่มต้น -
องค์ประกอบ
gmp-place-attributionใช้เพื่อแสดงแหล่งที่มาของรูปภาพ แอตทริบิวต์light-scheme-colorและdark-scheme-colorใช้เพื่อตั้งค่าสีของข้อความระบุแหล่งที่มา ในโหมดสว่างและโหมดมืด
PlaceContentConfigElement
เพื่อความสะดวก องค์ประกอบ
gmp-place-content-config สามารถ
แทนที่ด้วย
gmp-place-all-content
เพื่อแสดงรายละเอียดทั้งหมดที่มีในองค์ประกอบรายละเอียดสถานที่ หรือด้วย
gmp-place-standard-content เพื่อแสดงการกำหนดค่ามาตรฐาน
กำหนดค่าลักษณะที่ปรากฏ
ช่วงความกว้างที่แนะนำสำหรับองค์ประกอบ gmp-place-details คือ 250-400 พิกเซล
ความกว้างที่น้อยกว่า 250 พิกเซลอาจแสดงผลไม่ถูกต้อง กำหนดความสูงให้เหมาะกับแอปพลิเคชัน
องค์ประกอบรายละเอียดสถานที่ออกแบบมาให้เลื่อนภายในพื้นที่ที่จัดสรรไว้ได้ตามต้องการ
นอกจากนี้ องค์ประกอบ gmp-place-details ยังรองรับพร็อพเพอร์ตี้ CSS ที่กำหนดเองต่างๆ
เพื่อกำหนดค่าสีและแบบอักษรขององค์ประกอบ ดูรายละเอียดเพิ่มเติมได้ที่
การจัดรูปแบบที่กำหนดเองของชุดเครื่องมือ
UI ของ Places
ดูตัวอย่างโค้ดที่สมบูรณ์
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>องค์ประกอบขนาดกะทัดรัดของรายละเอียดสถานที่
คลิกเครื่องหมายบนแผนที่เพื่อดูรายละเอียดสถานที่ในองค์ประกอบขนาดกะทัดรัดของรายละเอียดสถานที่
PlaceDetailsCompactElement
แสดงรายละเอียดของสถานที่ที่เลือกโดยใช้พื้นที่น้อยที่สุด ซึ่งอาจมีประโยชน์ในหน้าต่างข้อมูล
ที่ไฮไลต์สถานที่ในแผนที่ ในประสบการณ์การใช้งานโซเชียลมีเดีย เช่น การแชร์ตำแหน่งในการแชท
เป็นคำแนะนำในการเลือกตำแหน่งปัจจุบัน หรือภายในบทความสื่อเพื่ออ้างอิง
สถานที่ใน Google Maps PlaceDetailsCompactElement สามารถแสดงชื่อ
ที่อยู่ คะแนน ประเภท ราคา ไอคอนการช่วยเหลือพิเศษ สถานะเปิด และรูปภาพเดียว โดยจะแสดงในแนวนอนหรือแนวตั้งก็ได้ตามที่เลือกไว้ในแอตทริบิวต์ orientation
ในข้อมูลโค้ดต่อไปนี้ gmp-place-details-compact จะซ้อนอยู่ภายในองค์ประกอบ
gmp-map โดยตั้งค่า orientation เป็น horizontal แอตทริบิวต์เพิ่มเติม truncation-preferred จะตัดเนื้อหาบางอย่างให้อยู่ภายใน
1 บรรทัดแทนที่จะตัดไปไว้ในอีกบรรทัดหนึ่ง องค์ประกอบ gmp-place-details-compact มีองค์ประกอบย่อย gmp-place-details-place-request สำหรับเลือกสถานที่ ซึ่งอาจเป็นออบเจ็กต์สถานที่ รหัสสถานที่ หรือชื่อทรัพยากรของสถานที่
<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>กำหนดค่าเนื้อหา
คุณควบคุมเนื้อหาของสถานที่ที่เฉพาะเจาะจงซึ่งแสดงโดยองค์ประกอบ
gmp-place-details-compact ได้โดยใช้องค์ประกอบ
gmp-place-content-config ที่ซ้อนกันเพื่อเลือกและกำหนดค่ารายละเอียดสถานที่
องค์ประกอบ gmp-place-content-config เองมีองค์ประกอบเนื้อหาย่อยหลายรายการ และแต่ละรายการจะเลือกรายละเอียดสถานที่ที่สอดคล้องกันเพื่อแสดง
ลำดับขององค์ประกอบย่อยไม่เกี่ยวข้อง เนื่องจากรายละเอียดที่เลือกจะแสดงตามลำดับที่กำหนดไว้ล่วงหน้าเสมอ คุณกำหนดค่าองค์ประกอบบางอย่างเพิ่มเติมได้โดยใช้แอตทริบิวต์เฉพาะเนื้อหา
PlaceContentConfigElement
เพื่อความสะดวก องค์ประกอบ
gmp-place-content-config สามารถ
แทนที่ด้วย
gmp-place-all-content
เพื่อแสดงรายละเอียดทั้งหมดที่มีในองค์ประกอบรายละเอียดสถานที่แบบย่อ หรือด้วย
gmp-place-standard-content เพื่อแสดงการกำหนดค่ามาตรฐาน
กำหนดค่าลักษณะที่ปรากฏ
ช่วงความกว้างที่แนะนำสำหรับองค์ประกอบ gmp-place-details-compact ใน
การวางแนวตั้งคือ 180-300 พิกเซล ความกว้าง
น้อยกว่า 160 พิกเซลอาจแสดงผลไม่ถูกต้อง อย่ากำหนดความสูงคงที่
ช่วงความกว้างที่แนะนําสําหรับองค์ประกอบ gmp-place-details-compact ใน
การวางแนวนอนคือ 180-500 พิกเซล ความกว้าง
น้อยกว่า 160 พิกเซลอาจแสดงผลไม่ถูกต้อง หากความกว้างน้อยกว่า 350 พิกเซล ระบบจะไม่แสดงรูปภาพขนาดย่อ
อย่ากำหนดความสูงคงที่
นอกจากนี้ องค์ประกอบ gmp-place-details-compact ยังรองรับพร็อพเพอร์ตี้ CSS ที่กำหนดเอง
หลากหลายรายการเพื่อกำหนดค่าสีและแบบอักษรขององค์ประกอบ ดูรายละเอียดเพิ่มเติมได้ที่
การจัดรูปแบบที่กำหนดเองของชุดเครื่องมือ
UI ของ Places
ดูตัวอย่างโค้ดที่สมบูรณ์
ตัวอย่างนี้แสดงการเพิ่ม
PlaceDetailsCompactElement ลงในแผนที่โดยใช้โปรแกรมโดยใช้
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 initMap() { // Request needed libraries. 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 = google.maps.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', (event) => { // 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) { map.center = marker.position = placeDetails.place.location; showInfoWindow(); } }); // Add an event listener to handle clicks. map.innerMap.addListener('click', async (event) => { event.stop(); if (event.placeId) { // 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.'); } }); } initMap();
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" defer></script>
<!-- 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: "weekly"});
</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>