Google Maps Platform ช่วยให้ลูกค้าพัฒนาประสบการณ์ที่ไม่เหมือนใครได้ด้วยการปรับแต่งการออกแบบภาพของเครื่องหมายบนแผนที่โดยใช้ เครื่องหมายขั้นสูง ในเอกสารนี้ เราจะสำรวจวิธีที่ลูกค้าสามารถก้าวไปอีกขั้นและสร้างเครื่องหมายที่เปลี่ยนแปลงแบบไดนามิกตามข้อมูลแบบเรียลไทม์

เครื่องหมายแผนที่เป็นเครื่องมือที่มีประโยชน์ในการมอบประสบการณ์การใช้งานแผนที่ที่สมบูรณ์แก่ผู้ใช้ แอตทริบิวต์ของเครื่องหมาย เช่น ขนาด สี และรูปร่าง สามารถสื่อถึงข้อมูลเพิ่มเติมเกี่ยวกับสถานที่ที่ทำเครื่องหมายแต่ละแห่ง ในบางกรณี ข้อมูลเพิ่มเติมนี้อาจเปลี่ยนแปลงแบบไดนามิก และนักพัฒนาแอปอาจต้องการให้การแสดงภาพแผนที่อัปเดตอยู่เสมอเพื่อให้ผู้ใช้รู้สึกว่าข้อมูลเป็นปัจจุบัน
ในเอกสารนี้ เราจะใช้ตัวอย่างเพื่อประกอบการอธิบาย โดยสมมติว่าเครือร้านค้าปลีกต้องการใช้แผนที่เพื่อแสดงเวลาที่ต้องรอคิวในร้านให้ผู้ใช้ทราบ อย่างไรก็ตาม สถาปัตยกรรมเดียวกันนี้สามารถใช้ได้กับกรณีการใช้งานอื่นๆ อีกมากมาย ตัวอย่างเพิ่มเติมมีดังนี้
- ความพร้อมให้บริการของห้องพักในโรงแรม: ในแผนที่ที่แสดงผลการค้นหาโรงแรม ความพร้อมให้บริการของห้องพักเป็นสัญญาณสำคัญที่กระตุ้นให้ ผู้ใช้จองโรงแรมได้เมื่อห้องพักเหลือน้อยลง
- ความพร้อมให้บริการของที่จอดรถ: ในแผนที่ลานจอดรถ ให้ผู้ใช้ มั่นใจในการเลือกจุดหมายปลายทางที่มีที่จอดรถให้เมื่อเดินทางไปถึง
- ร้านอาหารที่เปิด ใกล้ปิด และปิดแล้ว: ในแผนที่ที่แสดงผลการค้นหาร้านอาหาร ผู้ใช้ควรทราบว่าร้านอาหารอาจ ปิดเมื่อเดินทางไปถึง
โซลูชันเครื่องหมายขั้นสูงแบบไดนามิก
คุณสามารถสร้างแผนที่โดยใช้เครื่องหมายขั้นสูงเพื่อแสดงข้อมูลแบบไดนามิก ดังที่กล่าวไว้ก่อนหน้านี้ กรณีการใช้งานคือร้านค้าปลีกแบบเชนที่ใช้ประโยชน์จากระบบจัดการคิวชำระเงินเพื่อประมาณการและแสดงเวลาที่ต้องรอคิวให้ผู้ใช้ทราบ นี่คือสถาปัตยกรรมของแอปพลิเคชัน
ขั้นตอนที่ 1 - กำหนดแอตทริบิวต์เพื่อกำหนดประสบการณ์การใช้งานภาพ
ขั้นตอนแรกคือการกำหนดพร็อพเพอร์ตี้ของสถานที่อย่างน้อย 1 รายการที่จะแสดงให้ผู้ใช้เห็น ในกรณีนี้ เราต้องการแสดงพร็อพเพอร์ตี้เพียงรายการเดียว นั่นคือเวลาที่ต้องรอคิวในปัจจุบันที่ร้านค้าแต่ละแห่ง ซึ่งวัดเป็นนาที
ขั้นตอนถัดไปคือการเลือกแอตทริบิวต์ของเครื่องหมายที่สอดคล้องกันอย่างน้อย 1 รายการเพื่อใส่คำอธิบายประกอบเวลาที่ต้องรอคิวในเครื่องหมายแผนที่ รายการแอตทริบิวต์ของตัวทำเครื่องหมายพร้อมใช้งานทันทีในข้อกำหนด PinElement นอกจากนี้ คุณยังใช้ HTML ที่กำหนดเองเพื่อตัวเลือกการปรับแต่งที่สมบูรณ์ยิ่งขึ้นได้ด้วย
สำหรับตัวอย่างนี้ เราจะใช้แอตทริบิวต์ของตัวทำเครื่องหมาย 2 รายการเพื่อแสดงข้อมูลเวลาที่ต้องรอคิว
- สีของเครื่องหมาย: สีน้ำเงินสำหรับเวลาที่ต้องรอคิวน้อยกว่า 5 นาที และสีเหลืองสำหรับเวลาที่ต้องรอคิวนานกว่า 5 นาที
- เนื้อหาของเครื่องหมาย (ต้องใช้เครื่องหมาย HTML ที่กำหนดเอง): เราจะใส่ เวลาที่ต้องรอคิวในปัจจุบันเป็นนาทีไว้ในเครื่องหมายเอง
ขั้นตอนที่ 2 - กำหนดค่าการเชื่อมต่อกับแหล่งข้อมูลแบบเรียลไทม์
คุณเชื่อมต่อกับแหล่งข้อมูลได้หลายวิธี และโซลูชันที่เหมาะสมจะขึ้นอยู่กับกรณีการใช้งานและโครงสร้างพื้นฐานทางเทคนิคของคุณ ในตัวอย่างนี้ เราใช้วิธีการดึงข้อมูล ซึ่งเราจะขอข้อมูลเวลาที่ต้องรอคิวที่อัปเดตแล้วโดยใช้คำขอ HTTP (REST) เป็นประจำ ในส่วนต่อไปนี้ คุณจะเห็นสถาปัตยกรรมทางเลือกที่ใช้วิธีการพุชข้อมูล
สถาปัตยกรรมของเราใช้ประโยชน์จาก Cloud Functions for Firebase เพื่อให้แอปพลิเคชันเข้าถึงข้อมูลเวลาที่ต้องรอคิวจากเซิร์ฟเวอร์ของเราได้ Cloud Functions ช่วยให้เรากำหนดฟังก์ชันแบ็กเอนด์เพื่อเข้าถึงและคำนวณข้อมูลนี้ได้ นอกจากนี้ เรายังรวม ไลบรารี Firebase ไว้ในเว็บแอปพลิเคชัน ซึ่งช่วยให้เราเข้าถึง Cloud Functionได้โดยใช้คำขอ HTTP
ขั้นตอนถัดไปคือการตรวจสอบว่าเราเก็บข้อมูลให้เป็นปัจจุบันสำหรับผู้ใช้ เราจึงตั้งค่าตัวจับเวลาโดยใช้ฟังก์ชัน setInterval ของ JavaScript ที่มีระยะหมดเวลา 30 วินาที ระบบจะทริกเกอร์ตัวจับเวลาทุกครั้ง และเราจะขอข้อมูลเวลาที่ต้องรอคิวที่อัปเดตแล้วตามที่อธิบายไว้ข้างต้น เมื่อได้รับข้อมูลใหม่แล้ว เราต้องรีเฟรชลักษณะที่ปรากฏของเครื่องหมายแผนที่ ขั้นตอนถัดไปจะอธิบายรายละเอียดวิธีทำการเปลี่ยนแปลงดังกล่าว
ขั้นตอนที่ 3 - แสดงเครื่องหมายแผนที่
ตอนนี้เราสามารถใช้เครื่องหมายขั้นสูงเพื่อแสดงเครื่องหมายที่จัดรูปแบบไว้บนแผนที่ได้แล้ว เครื่องหมายขั้นสูงสามารถแสดงบนแผนที่ที่สร้างโดย Maps JavaScript API ของแพลตฟอร์ม Google Maps เมื่อใช้เครื่องหมายขั้นสูง โปรดตรวจสอบว่าได้ใส่พารามิเตอร์รหัสแผนที่ในคำขอแผนที่ JS แล้ว
ในข้อมูลโค้ดที่แสดงด้านล่าง เราจะสร้างเครื่องหมายและกำหนดเนื้อหาของเครื่องหมายโดยการสร้างองค์ประกอบ div ของ HTML
// Create the content div for the marker
storeWaitLabels[store_index] = document.createElement("div");
// Create the marker
markers.push(new google.maps.marker.AdvancedMarkerElement({
map,
position: { lat: latlngs[store_index][0], lng: latlngs[store_index][1] },
content: storeWaitLabels[store_index]
}));
ขั้นตอนสุดท้ายคือการอัปเดตข้อความเครื่องหมายและการจัดรูปแบบ CSS สำหรับร้านค้าแต่ละแห่ง โค้ดด้านล่างจะอ่านข้อมูลเวลาที่ต้องรอคิวที่อัปเดตแล้วและกำหนดการจัดรูปแบบให้กับหมุดของร้านค้าแต่ละแห่งตามเวลาที่ต้องรอคิว
// Update the visual appearcance of a map marker
storeWaitLabels[store_index].textContent = waitTimes[store_index] + " min";
if (waitTimes[store_index] > 5)
storeWaitLabels[store_index].className = "wait-over-5";
else storeWaitLabels[store_index].className = "wait-under-5";
ตอนนี้แผนที่จะใช้ API เวลาที่ต้องรอคิวที่มีอยู่เพื่อแสดงเวลาที่ต้องรอคิวล่าสุดให้ผู้ใช้ทราบ

วิธีอื่นในการเชื่อมต่อกับแหล่งข้อมูลแบบเรียลไทม์
คุณเชื่อมต่อกับแหล่งข้อมูลแบบเรียลไทม์ได้หลายวิธี ด้านล่างนี้ เราจะดูตัวเลือกทางเลือก 2 รายการ ได้แก่ Firebase Cloud Messaging และ WebSocket ไม่ว่าคุณจะเลือกใช้วิธีใด โปรดพิจารณาปัจจัยด้านล่างเพื่อให้เครื่องมือแผนที่ยังคงทำงานได้อย่างมีประสิทธิภาพ
- ความถี่ในการอัปเดต
- ปริมาณข้อมูล
- จำนวนเครื่องหมายในมุมมองแผนที่
- ความสามารถของฮาร์ดแวร์และเบราว์เซอร์
Firebase Cloud Messaging
Firebase Cloud Messaging เป็น วิธีการพุชข้อมูล เมื่อใช้วิธีนี้ คุณจะต้องส่งการอัปเดตไปยังแอปพลิเคชันแผนที่ทุกครั้งที่ข้อมูลเวลาที่ต้องรอคิวได้รับการอัปเดตในแบ็กเอนด์ ข้อความอัปเดตจะทริกเกอร์ฟังก์ชันเรียกกลับที่มีจุดประสงค์เพื่ออัปเดตลักษณะที่ปรากฏและเนื้อหาของเครื่องหมาย
สิ่งหนึ่งที่ควรพิจารณาก่อนเลือกสถาปัตยกรรมนี้คือต้องมีการเชื่อมต่อเซิร์ฟเวอร์แบบถาวรสำหรับเบราว์เซอร์แต่ละรายการที่เรียกใช้แอปพลิเคชันแผนที่ ด้วยเหตุนี้ การเรียกใช้จึงอาจมีค่าใช้จ่ายสูงกว่า และอาจมีความเสถียรน้อยกว่าในกรณีที่เกิดปัญหาการเชื่อมต่อ
WebSockets
WebSockets เป็นอีกวิธีการพุชข้อมูลเพื่อเก็บข้อมูลให้เป็นปัจจุบัน เช่นเดียวกับสถานการณ์ก่อนหน้านี้ คุณสามารถใช้ WebSocket เพื่อสร้างการเชื่อมต่อแบบถาวรระหว่างแบ็กเอนด์กับแอปพลิเคชันแผนที่ ประโยชน์ด้านการทำงานของวิธีการนี้คล้ายกับ Firebase Cloud Messaging แต่คุณอาจต้องดำเนินการเพิ่มเติมเพื่อกำหนดค่าโครงสร้างพื้นฐานที่จำเป็น
บทสรุป
นักพัฒนาแอปสามารถรวมแหล่งข้อมูลแบบเรียลไทม์กับเครื่องหมายขั้นสูงเพื่อสร้างการแสดงภาพที่ใช้งานง่ายใน Google Maps คุณเชื่อมต่อแหล่งข้อมูลเหล่านี้ได้หลายวิธี ทั้งนี้ขึ้นอยู่กับข้อกำหนดของแผนที่ ฮาร์ดแวร์และเบราว์เซอร์ของผู้ใช้ รวมถึงปริมาณข้อมูล จากนั้นคุณสามารถใช้ข้อมูลที่ผสานรวมเพื่อควบคุมลักษณะที่ปรากฏของเครื่องหมายขั้นสูงแบบเรียลไทม์ ซึ่งจะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานแบบไดนามิก
ขั้นตอนถัดไป
อ่านเพิ่มเติม
- เครื่องหมายขั้นสูง - ศูนย์นักพัฒนาซอฟต์แวร์ของ Google
- สร้างเครื่องหมายด้วย HTML ที่กำหนดเอง
- Cloud Functions for Firebase
- Firebase Cloud Messaging
ผู้ร่วมให้ข้อมูล
ผู้เขียนหลัก
Jim Leflar | Google Maps Platform วิศวกรโซลูชัน
John Branigan | วิศวกรลูกค้าอาวุโสของ Google Cloud Platform
Steve Barrett | วิศวกรโซลูชันของแพลตฟอร์ม Google Maps