องค์ประกอบรายละเอียดสถานที่

เลือกแพลตฟอร์ม: Android iOS JavaScript

องค์ประกอบรายละเอียดสถานที่และองค์ประกอบรายละเอียดสถานที่แบบย่อคือองค์ประกอบ HTML ที่แสดงรายละเอียดของสถานที่

  • PlaceDetailsElement รองรับ ข้อมูลสถานที่ที่แสดงภาพได้ทั้งหมด และอาจมีรูปภาพหลายรูป
  • PlaceDetailsCompactElement ได้รับการออกแบบมาให้ใช้พื้นที่น้อยที่สุดและแสดงชุดข้อมูล ที่กระชับเกี่ยวกับสถานที่ ซึ่งรวมถึงชื่อ ที่อยู่ คะแนน ฯลฯ และอาจมีรูปภาพ เพียงรูปเดียวด้วย

องค์ประกอบรายละเอียดสถานที่

คลิกเครื่องหมายบนแผนที่เพื่อดูรายละเอียดสถานที่ในองค์ประกอบรายละเอียดสถานที่

โดย PlaceDetailsElement รองรับองค์ประกอบเนื้อหาที่หลากหลาย ซึ่งรวมถึงเวลาทำการทั้งหมด เว็บไซต์ หมายเลขโทรศัพท์ ข้อมูลสรุปที่ทำงานด้วยระบบ AI พร้อมการเปลี่ยนไปใช้ข้อมูลสรุปจากบรรณาธิการ ไฮไลต์เฉพาะประเภท รีวิว ข้อมูลสรุปของรีวิวที่ทำงานด้วยระบบ 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">
  <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-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-content-config>
        </gmp-place-details>

องค์ประกอบ gmp-place-content-config เองมีองค์ประกอบเนื้อหาย่อยหลายรายการ และแต่ละรายการจะเลือกรายละเอียดสถานที่ที่เกี่ยวข้องเพื่อแสดง ดังนี้ gmp-place-address เลือกที่อยู่ของสถานที่ gmp-place-price เลือกระดับราคาของสถานที่ ฯลฯ องค์ประกอบ gmp-place-summary และ gmp-place-review-summary จะแสดงข้อมูลสรุปที่ทำงานด้วยระบบ AI ของสถานที่และรีวิวของสถานที่นั้นๆ ตามลำดับ ลำดับขององค์ประกอบย่อย ไม่เกี่ยวข้อง เนื่องจากรายละเอียดที่เลือกจะแสดงตามลำดับที่กำหนดไว้ล่วงหน้าเสมอ

คุณกำหนดค่าองค์ประกอบบางอย่างเพิ่มเติมได้โดยใช้แอตทริบิวต์เฉพาะเนื้อหา ดังนี้

  • องค์ประกอบ 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 Kit ของ 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');
async function initMap() {
    // Request needed libraries.
    await Promise.all([
        google.maps.importLibrary('maps'),
        google.maps.importLibrary('marker'),
        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) {
            map.innerMap.panTo(placeDetails.place.location);
            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';
        }
    });
}
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;
}

.ui-panel {
    width: 400px;
    margin-left: 20px;
    margin-top: 10px;
}

gmp-place-details {
    width: 100%;
    margin: 0;
    border: none;
}

HTML

<!doctype html>
<html>
    <head>
        <title>Place Details 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 class="ui-panel">
                <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-content-config>
                </gmp-place-details>
            </div>
        </div>
    </body>
</html>

ลองใช้ตัวอย่าง

องค์ประกอบกะทัดรัดของรายละเอียดสถานที่

คลิกเครื่องหมายบนแผนที่เพื่อดูรายละเอียดสถานที่ในองค์ประกอบขนาดกะทัดรัดของรายละเอียดสถานที่

PlaceDetailsCompactElement แสดงรายละเอียดของสถานที่ที่เลือกโดยใช้พื้นที่น้อยที่สุด ซึ่งอาจมีประโยชน์ในหน้าต่างข้อมูลที่ไฮไลต์สถานที่ในแผนที่ ในประสบการณ์การใช้งานโซเชียลมีเดีย เช่น การแชร์ตำแหน่งในแชท เป็นคำแนะนำสำหรับการเลือกตำแหน่งปัจจุบัน หรือภายในบทความสื่อเพื่ออ้างอิงสถานที่ใน Google Maps PlaceDetailsCompactElement สามารถ แสดงชื่อที่แสดง ที่อยู่ คะแนน ประเภท ราคา ไอคอนการช่วยเหลือพิเศษ สถานะเปิด และรูปภาพเดียว โดยจะแสดงในแนวนอนหรือ แนวตั้งก็ได้ตามที่เลือกไว้ในแอตทริบิวต์ orientation

ในข้อมูลโค้ดต่อไปนี้ gmp-place-details-compact มีการกำหนดค่าด้วย orientation ที่ตั้งค่าเป็น horizontal แอตทริบิวต์เพิ่มเติม truncation-preferred จะตัด เนื้อหาบางอย่างให้อยู่ภายใน 1 บรรทัดแทนที่จะตัดไปไว้ในอีกบรรทัดหนึ่ง องค์ประกอบ gmp-place-details-compact มีองค์ประกอบย่อย gmp-place-details-place-request เพื่อเลือกสถานที่ ซึ่งอาจเป็นออบเจ็กต์สถานที่ รหัสสถานที่ หรือชื่อทรัพยากรของสถานที่

  <gmp-place-details-compact orientation = "horizontal" truncation-preferred >
    <gmp-place-details-place-request place = "ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
    <gmp-place-all-content></gmp-place-all-content>
  </gmp-place-details-compact>

กำหนดค่าเนื้อหา

คุณควบคุมเนื้อหาของสถานที่ที่เฉพาะเจาะจงซึ่งแสดงโดยองค์ประกอบ gmp-place-details-compact ได้โดยใช้องค์ประกอบ gmp-place-content-config ที่ซ้อนกันเพื่อเลือกและกำหนดค่ารายละเอียดสถานที่ ดังที่แสดงในข้อมูลโค้ดนี้

<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-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 Kit ของ Places

โปรดทราบว่าหากเพิ่มองค์ประกอบรายละเอียดสถานที่แบบย่อลงในหน้าต่างข้อมูล คุณต้องใช้การจัดรูปแบบที่กำหนดเองกับองค์ประกอบ gmp-place-details-compact โดยตรง เนื่องจาก หน้าต่างข้อมูลเป็นส่วนหนึ่งของ Shadow DOM ของแผนที่ ดังนั้นสไตล์ CSS ภายนอกจึงไม่มีผล

<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>

ดูตัวอย่างโค้ดที่สมบูรณ์

ตัวอย่างนี้แสดงการเพิ่ม PlaceDetailsCompactElement ลงในแผนที่โดยใช้โปรแกรมด้วย InfoWindow และ 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>

ลองใช้ตัวอย่าง