หน้านี้อธิบายไลบรารีฝั่งไคลเอ็นต์ที่พร้อมใช้งานกับ Maps JavaScript API หากต้องการใช้บริการเว็บ Places API ในเซิร์ฟเวอร์ โปรดดูไคลเอ็นต์ Node.js สำหรับบริการของ Google Maps หน้าที่ลิงก์ นั้นยังแนะนำ Java Client, Python Client และ Go Client สำหรับบริการของ Google Maps ด้วย
บทนำ
การเติมข้อความอัตโนมัติเป็นฟีเจอร์ของ Places Library ใน Maps JavaScript API คุณสามารถใช้การเติมข้อความอัตโนมัติเพื่อให้แอปพลิเคชันมีลักษณะการค้นหาแบบพิมพ์ล่วงหน้าของช่องค้นหา Google Maps บริการเติมข้อความอัตโนมัติจะจับคู่คำเต็มและสตริงย่อย แก้ไขชื่อสถานที่ ที่อยู่ และ Plus Codes ดังนั้นแอปพลิเคชันจึงสามารถส่งการค้นหาขณะที่ผู้ใช้พิมพ์เพื่อ แสดงการคาดคะเนสถานที่แบบเรียลไทม์ ตามที่กำหนดโดย Places API "สถานที่" อาจเป็นสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือจุดที่น่าสนใจที่โดดเด่น
เริ่มต้นใช้งาน
ก่อนใช้ไลบรารี Places ใน Maps JavaScript API ให้ตรวจสอบก่อน ว่าได้เปิดใช้ Places API ในคอนโซล Google Cloud แล้วในโปรเจ็กต์เดียวกัน กับที่ตั้งค่าไว้สำหรับ Maps JavaScript API
วิธีดูรายการ API ที่เปิดใช้
- ไปที่ Google Cloud Console
- คลิกปุ่มเลือกโปรเจ็กต์ จากนั้นเลือกโปรเจ็กต์เดียวกันกับที่คุณตั้งค่า สำหรับ Maps JavaScript API แล้วคลิกเปิด
- จากรายการ API ในแดชบอร์ด ให้มองหา Places API
- หากเห็น API ในรายการ แสดงว่าคุณพร้อมใช้งานแล้ว อย่างไรก็ตาม โปรเจ็กต์นี้อยู่ในสถานะเดิม ดูข้อมูลเพิ่มเติมเกี่ยวกับระยะเดิมและวิธีย้ายข้อมูลจากบริการเดิมไปยังบริการใหม่กว่าได้ที่ผลิตภัณฑ์และฟีเจอร์เดิม แต่มีข้อยกเว้นสำหรับวิดเจ็ต Autocomplete และ SearchBox ซึ่งยังไม่พร้อมใช้งานเป็นผลิตภัณฑ์ GA ใน Places API (ใหม่)
โหลดไลบรารี
บริการ Places เป็นไลบรารีแบบสแตนด์อโลนที่แยกจากโค้ดหลักของ Maps JavaScript API หากต้องการใช้ฟีเจอร์ที่มีอยู่ใน
ไลบรารีนี้ คุณต้องโหลดไลบรารีโดยใช้พารามิเตอร์ libraries
ใน URL การเริ่มต้นของ Maps API ก่อน
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>
ดูข้อมูลเพิ่มเติมได้ที่ ภาพรวมของไลบรารี
สรุปชั้นเรียน
API มีวิดเจ็ตการเติมข้อความอัตโนมัติ 2 ประเภท ซึ่งคุณเพิ่มได้โดยใช้คลาส Autocomplete
และ SearchBox
ตามลำดับ
นอกจากนี้ คุณยังใช้คลาส AutocompleteService
เพื่อดึงผลลัพธ์การเติมข้อความอัตโนมัติแบบเป็นโปรแกรมได้ (ดูข้อมูลอ้างอิงของ Maps JavaScript API: คลาส AutocompleteService)
ด้านล่างนี้คือสรุปของคลาสที่พร้อมใช้งาน
-
Autocomplete
จะเพิ่มช่องป้อนข้อความลงในหน้าเว็บ และตรวจสอบช่องนั้นเพื่อดูการป้อนอักขระ ขณะที่ผู้ใช้ป้อนข้อความ การเติมข้อความอัตโนมัติจะแสดงการคาดคะเนสถานที่ในรูปแบบ รายการแบบเลื่อนลง เมื่อผู้ใช้เลือกสถานที่จากรายการ ระบบจะส่งข้อมูล เกี่ยวกับสถานที่นั้นกลับไปยังออบเจ็กต์การเติมข้อความอัตโนมัติ และแอปพลิเคชันของคุณสามารถเรียกข้อมูล ดังกล่าวได้ ดูรายละเอียดด้านล่างรูปที่ 1: ช่องข้อความเติมข้อความอัตโนมัติและรายการที่เลือก รูปที่ 2: แบบฟอร์มที่อยู่เสร็จสมบูรณ์ -
SearchBox
จะเพิ่มช่องป้อนข้อความลงในหน้าเว็บของคุณในลักษณะเดียวกับAutocomplete
ความแตกต่างมีดังนี้- ความแตกต่างหลักอยู่ที่
ผลลัพธ์ที่ปรากฏในรายการตัวเลือก
SearchBox
จะแสดงรายการการคาดคะเนเพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่กำหนดโดย Places API) และข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ ป้อน "พิซซ่าใน" รายการที่เลือกอาจมีวลี "พิซซ่าในนิวยอร์ก รัฐนิวยอร์ก" รวมถึงชื่อร้านพิซซ่าต่างๆ SearchBox
มีตัวเลือกน้อยกว่าAutocomplete
ในการจำกัดการค้นหา ในกรณีแรก คุณ สามารถเอนเอียงการค้นหาไปทางLatLngBounds
ที่กำหนดได้ ใน กรณีหลัง คุณสามารถจำกัดการค้นหาให้เฉพาะประเทศและประเภทสถานที่ ที่ต้องการ รวมถึงตั้งค่าขอบเขตได้ ดูข้อมูลเพิ่มเติมได้ด้านล่าง
รูปที่ 3: ช่องค้นหาแสดงข้อความค้นหาและการคาดคะเนสถานที่ - ความแตกต่างหลักอยู่ที่
ผลลัพธ์ที่ปรากฏในรายการตัวเลือก
- คุณสร้างออบเจ็กต์
AutocompleteService
เพื่อดึงข้อมูล การคาดการณ์โดยใช้โปรแกรมได้ เรียกใช้getPlacePredictions()
เพื่อ ดึงข้อมูลสถานที่ที่ตรงกัน หรือเรียกใช้getQueryPredictions()
เพื่อ ดึงข้อมูลสถานที่ที่ตรงกันพร้อมข้อความค้นหาที่แนะนำ หมายเหตุ:AutocompleteService
ไม่ได้เพิ่มการควบคุม UI ใดๆ แต่เมธอดข้างต้นจะแสดงผลอาร์เรย์ของออบเจ็กต์การคาดการณ์แทน ออบเจ็กต์การคาดคะเนแต่ละรายการมีข้อความของการคาดคะเน รวมถึงข้อมูลอ้างอิงและรายละเอียดเกี่ยวกับวิธีที่ผลลัพธ์ตรงกับอินพุตของผู้ใช้ โปรดดูรายละเอียดด้านล่าง
เพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติ
วิดเจ็ต Autocomplete
จะสร้างช่องป้อนข้อความในหน้าเว็บ แสดงการคาดคะเนสถานที่ในรายการที่เลือก UI
และแสดงรายละเอียดสถานที่ในการตอบกลับคำขอ getPlace()
แต่ละรายการใน
รายการตัวเลือกจะสอดคล้องกับสถานที่เดียว (ตามที่กำหนดโดย Places API)
ตัวสร้าง Autocomplete
รับอาร์กิวเมนต์ 2 รายการ ได้แก่
- องค์ประกอบ
input
ของ HTML ที่มีประเภทtext
นี่คือช่องป้อนข้อมูลที่บริการเติมข้อความอัตโนมัติ จะตรวจสอบและแนบผลลัพธ์ - อาร์กิวเมนต์
AutocompleteOptions
ซึ่งไม่บังคับ และอาจมีพร็อพเพอร์ตี้ต่อไปนี้- อาร์เรย์ของข้อมูล
fields
ที่จะรวมไว้ในPlace Details
คำตอบสำหรับPlaceResult
ที่ผู้ใช้เลือก หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้หรือส่ง['ALL']
ระบบจะแสดงช่องที่ใช้ได้ทั้งหมดและเรียกเก็บเงิน (ไม่แนะนำให้ใช้ในการติดตั้งใช้งานจริง) ดูรายการฟิลด์ได้ที่PlaceResult
- อาร์เรย์ของ
types
ที่ ระบุประเภทที่ชัดเจนหรือคอลเล็กชันประเภท ตามที่ระบุไว้ในประเภทที่รองรับ หากไม่ได้ระบุประเภท ระบบจะแสดงผลประเภททั้งหมด bounds
คือออบเจ็กต์google.maps.LatLngBounds
ที่ระบุ พื้นที่ที่จะค้นหาสถานที่ ผลการค้นหาจะเอนเอียงไปทางสถานที่ที่อยู่ภายในขอบเขตเหล่านี้ แต่ไม่ได้จำกัดอยู่เพียงเท่านั้นstrictBounds
คือboolean
ที่ระบุว่า API ต้องแสดงเฉพาะสถานที่ที่อยู่ภายในภูมิภาคที่กำหนด โดยbounds
ที่ระบุหรือไม่ API จะไม่แสดงผลลัพธ์นอกภูมิภาคนี้แม้ว่าจะตรงกับข้อมูลที่ผู้ใช้ป้อนก็ตามcomponentRestrictions
ใช้เพื่อจำกัดผลการค้นหาให้แสดงเฉพาะกลุ่มที่เจาะจงได้ คุณใช้componentRestrictions
เพื่อกรองตามประเทศได้สูงสุด 5 ประเทศ ต้องส่งประเทศเป็นรหัสประเทศแบบ 2 อักขระที่เข้ากันได้กับ ISO 3166-1 Alpha-2 ต้องส่งหลายประเทศเป็นรายการรหัสประเทศหมายเหตุ: หากได้รับผลลัพธ์ที่ไม่คาดคิดจากรหัสประเทศ ให้ตรวจสอบ ว่าคุณใช้รหัสที่มีประเทศ เขตแดนภายใต้การปกครอง และพื้นที่พิเศษ ที่น่าสนใจทางภูมิศาสตร์ที่คุณต้องการ คุณดูข้อมูลรหัสได้ที่ Wikipedia: รายการรหัสประเทศ ISO 3166 หรือแพลตฟอร์มการเรียกดูออนไลน์ของ ISO
placeIdOnly
ใช้เพื่อสั่งให้วิดเจ็ตAutocomplete
ดึงเฉพาะรหัสสถานที่ได้ เมื่อเรียกใช้getPlace()
ในออบเจ็กต์Autocomplete
PlaceResult
ที่พร้อมใช้งานจะมีเพียงพร็อพเพอร์ตี้place id
types
และname
เท่านั้น คุณใช้รหัสสถานที่ที่ส่งคืน กับการเรียกใช้บริการ Places, Geocoding, Directions หรือ Distance Matrix ได้
- อาร์เรย์ของข้อมูล
จำกัดการคาดคะเนการเติมข้อความอัตโนมัติ
โดยค่าเริ่มต้น การเติมข้อความอัตโนมัติของสถานที่จะแสดงสถานที่ทุกประเภท โดยจะให้ความสำคัญกับการคาดคะเนที่อยู่ใกล้กับ ตำแหน่งของผู้ใช้ และดึงช่องข้อมูลทั้งหมดที่พร้อมใช้งานสำหรับสถานที่ที่ผู้ใช้เลือก ตั้งค่าตัวเลือกการเติมข้อความอัตโนมัติของสถานที่เพื่อแสดงการคาดคะเนที่เกี่ยวข้องมากขึ้นตามกรณีการใช้งานของคุณ
ตั้งค่าตัวเลือกเมื่อสร้าง
ตัวสร้าง Autocomplete
จะยอมรับพารามิเตอร์ AutocompleteOptions
เพื่อตั้งค่าข้อจำกัดเมื่อสร้างวิดเจ็ต ตัวอย่างต่อไปนี้จะตั้งค่าตัวเลือก
bounds
, componentRestrictions
และ types
เพื่อ
ขอสถานที่ประเภท establishment
โดยให้ความสำคัญกับสถานที่ภายในพื้นที่ทางภูมิศาสตร์ที่ระบุ
และจำกัดการคาดคะเนเฉพาะสถานที่ภายในสหรัฐอเมริกา การตั้งค่าตัวเลือก
fields
จะระบุข้อมูลที่จะแสดงเกี่ยวกับสถานที่ที่ผู้ใช้เลือก
เรียกใช้ setOptions()
เพื่อเปลี่ยนค่าของตัวเลือกสำหรับวิดเจ็ตที่มีอยู่
TypeScript
const center = { lat: 50.064192, lng: -130.605469 }; // Create a bounding box with sides ~10km away from the center point const defaultBounds = { north: center.lat + 0.1, south: center.lat - 0.1, east: center.lng + 0.1, west: center.lng - 0.1, }; const input = document.getElementById("pac-input") as HTMLInputElement; const options = { bounds: defaultBounds, componentRestrictions: { country: "us" }, fields: ["address_components", "geometry", "icon", "name"], strictBounds: false, }; const autocomplete = new google.maps.places.Autocomplete(input, options);
JavaScript
const center = { lat: 50.064192, lng: -130.605469 }; // Create a bounding box with sides ~10km away from the center point const defaultBounds = { north: center.lat + 0.1, south: center.lat - 0.1, east: center.lng + 0.1, west: center.lng - 0.1, }; const input = document.getElementById("pac-input"); const options = { bounds: defaultBounds, componentRestrictions: { country: "us" }, fields: ["address_components", "geometry", "icon", "name"], strictBounds: false, }; const autocomplete = new google.maps.places.Autocomplete(input, options);
ระบุช่องข้อมูล
ระบุช่องข้อมูลเพื่อหลีกเลี่ยงการเรียกเก็บเงินสำหรับ SKU ข้อมูล Places ที่คุณไม่ต้องการ ใส่พร็อพเพอร์ตี้ fields
ใน
AutocompleteOptions
ที่ส่งไปยังตัวสร้างวิดเจ็ต ดังที่แสดงในตัวอย่างก่อนหน้า
หรือเรียกใช้ setFields()
ในออบเจ็กต์ Autocomplete
ที่มีอยู่
autocomplete.setFields(["place_id", "geometry", "name"]);
กำหนดขอบเขตอคติและพื้นที่ค้นหาสำหรับ การเติมข้อความอัตโนมัติ
คุณสามารถปรับผลการเติมข้อความอัตโนมัติให้แสดงตำแหน่งหรือพื้นที่โดยประมาณได้ด้วยวิธีต่อไปนี้
- กำหนดขอบเขตในการสร้างออบเจ็กต์
Autocomplete
- เปลี่ยนขอบเขตใน
Autocomplete
ที่มีอยู่ - ตั้งค่าขอบเขตเป็นวิวพอร์ตของแผนที่
- จำกัดการค้นหาให้อยู่ในขอบเขต
- จำกัดการค้นหาเฉพาะประเทศที่ต้องการ
ตัวอย่างก่อนหน้าแสดงการตั้งค่าขอบเขตเมื่อสร้าง ตัวอย่างต่อไปนี้แสดงเทคนิคการเอนเอียงอื่นๆ
เปลี่ยนขอบเขตของการเติมข้อความอัตโนมัติที่มีอยู่
โทร setBounds()
เพื่อเปลี่ยนพื้นที่ค้นหาในAutocomplete
ที่มีอยู่เป็นขอบเขตสี่เหลี่ยมผืนผ้า
TypeScript
const southwest = { lat: 5.6108, lng: 136.589326 }; const northeast = { lat: 61.179287, lng: 2.64325 }; const newBounds = new google.maps.LatLngBounds(southwest, northeast); autocomplete.setBounds(newBounds);
JavaScript
const southwest = { lat: 5.6108, lng: 136.589326 }; const northeast = { lat: 61.179287, lng: 2.64325 }; const newBounds = new google.maps.LatLngBounds(southwest, northeast); autocomplete.setBounds(newBounds);
ตั้งค่าขอบเขตเป็นวิวพอร์ตของแผนที่
ใช้ bindTo()
เพื่อให้ผลการค้นหาอิงตามวิวพอร์ตของแผนที่
แม้ว่าวิวพอร์ตจะเปลี่ยนไปก็ตาม
TypeScript
autocomplete.bindTo("bounds", map);
JavaScript
autocomplete.bindTo("bounds", map);
ใช้ unbind()
เพื่อยกเลิกการเชื่อมโยงการคาดคะเนการเติมข้อความอัตโนมัติจากขอบเขตการแสดงผลของแผนที่
TypeScript
autocomplete.unbind("bounds"); autocomplete.setBounds({ east: 180, west: -180, north: 90, south: -90 });
JavaScript
autocomplete.unbind("bounds"); autocomplete.setBounds({ east: 180, west: -180, north: 90, south: -90 });
จำกัดการค้นหาให้อยู่ในขอบเขตปัจจุบัน
ตั้งค่าstrictBounds
เพื่อจำกัดผลลัพธ์ให้อยู่ในขอบเขตปัจจุบัน ไม่ว่าจะอิงตามวิวพอร์ตของแผนที่หรือขอบเขตสี่เหลี่ยมผืนผ้า
autocomplete.setOptions({ strictBounds: true });
จำกัดการคาดคะเนไว้เฉพาะในประเทศใดประเทศหนึ่ง
ใช้ตัวเลือก componentRestrictions
หรือเรียกใช้ setComponentRestrictions()
เพื่อจำกัด
การค้นหาแบบเติมข้อความอัตโนมัติให้แสดงเฉพาะประเทศที่กำหนดได้สูงสุด 5 ประเทศ
TypeScript
autocomplete.setComponentRestrictions({ country: ["us", "pr", "vi", "gu", "mp"], });
JavaScript
autocomplete.setComponentRestrictions({ country: ["us", "pr", "vi", "gu", "mp"], });
จำกัดประเภทสถานที่
ใช้ตัวเลือก types
หรือเรียกใช้ setTypes()
เพื่อจำกัด
การคาดคะเนให้เป็นสถานที่บางประเภท ข้อจำกัดนี้ระบุประเภทหรือคอลเล็กชันประเภท
ตามที่ระบุไว้ในประเภทสถานที่
หากไม่ได้ระบุข้อจำกัด ระบบจะแสดงผลทุกประเภท
สำหรับค่าของตัวเลือก types
หรือค่าที่ส่งไปยัง setTypes()
คุณ
สามารถระบุค่าใดค่าหนึ่งต่อไปนี้
อาร์เรย์ที่มีค่าได้สูงสุด 5 ค่าจากตารางที่ 1 หรือตารางที่ 2 จาก ประเภทสถานที่ เช่น
types: ['hospital', 'pharmacy', 'bakery', 'country']
หรือ
autocomplete.setTypes(['hospital', 'pharmacy', 'bakery', 'country']);
- ตัวกรองใดก็ได้ในตารางที่ 3 จากประเภทสถานที่ คุณระบุค่าจากตารางที่ 3 ได้เพียงค่าเดียว
ระบบจะปฏิเสธคำขอในกรณีต่อไปนี้
- คุณระบุประเภทมากกว่า 5 ประเภท
- คุณระบุประเภทที่ไม่รู้จัก
- คุณจะผสมประเภทใดก็ได้จากตารางที่ 1 หรือตารางที่ 2 กับตัวกรองใดก็ได้ จากตารางที่ 3
การสาธิตการเติมข้อความอัตโนมัติของ Places จะแสดงความแตกต่างในการคาดคะเนระหว่างสถานที่ประเภทต่างๆ
การรับข้อมูลสถานที่
เมื่อผู้ใช้เลือกสถานที่จากการคาดคะเนที่แนบมากับช่องข้อความเติมข้อความอัตโนมัติ
บริการจะทริกเกอร์เหตุการณ์ place_changed
วิธีดูรายละเอียดสถานที่
มีดังนี้
- สร้างตัวแฮนเดิลเหตุการณ์สำหรับเหตุการณ์
place_changed
และเรียกใช้addListener()
ในออบเจ็กต์Autocomplete
เพื่อเพิ่มตัวแฮนเดิล - เรียกใช้
Autocomplete.getPlace()
ในออบเจ็กต์Autocomplete
เพื่อดึงออบเจ็กต์PlaceResult
ซึ่งคุณจะใช้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับสถานที่ที่เลือกได้
โดยค่าเริ่มต้น เมื่อผู้ใช้เลือกสถานที่ ระบบจะเติมข้อความอัตโนมัติโดยแสดงช่องข้อมูลทั้งหมดที่ใช้ได้สำหรับสถานที่ที่เลือก และคุณจะได้รับการเรียกเก็บเงินตามนั้น
ใช้ Autocomplete.setFields()
เพื่อระบุช่องข้อมูลสถานที่ที่จะแสดง อ่านเพิ่มเติมเกี่ยวกับออบเจ็กต์
PlaceResult
รวมถึงรายการฟิลด์ข้อมูลสถานที่ที่คุณขอได้ หากต้องการหลีกเลี่ยงการชำระเงินสำหรับข้อมูลที่คุณไม่ต้องการ โปรดใช้ Autocomplete.setFields()
เพื่อระบุ
เฉพาะข้อมูลสถานที่ที่คุณจะใช้
name
พร็อพเพอร์ตี้มี description
จากการคาดคะเนการเติมข้อความอัตโนมัติของ Places คุณอ่านข้อมูลเพิ่มเติมเกี่ยวกับ
description
ได้ใน
เอกสารประกอบการเติมข้อความอัตโนมัติของ Places
สำหรับแบบฟอร์มที่อยู่ การรับที่อยู่ในรูปแบบที่มีโครงสร้างจะมีประโยชน์ หากต้องการ
แสดงที่อยู่ที่มีโครงสร้างของสถานที่ที่เลือก ให้เรียกใช้
Autocomplete.setFields()
และระบุฟิลด์ address_components
ตัวอย่างต่อไปนี้ใช้การเติมข้อความอัตโนมัติเพื่อกรอกช่องในแบบฟอร์มที่อยู่
TypeScript
function fillInAddress() { // Get the place details from the autocomplete object. const place = autocomplete.getPlace(); let address1 = ""; let postcode = ""; // Get each component of the address from the place details, // and then fill-in the corresponding field on the form. // place.address_components are google.maps.GeocoderAddressComponent objects // which are documented at http://goo.gle/3l5i5Mr for (const component of place.address_components as google.maps.GeocoderAddressComponent[]) { // @ts-ignore remove once typings fixed const componentType = component.types[0]; switch (componentType) { case "street_number": { address1 = `${component.long_name} ${address1}`; break; } case "route": { address1 += component.short_name; break; } case "postal_code": { postcode = `${component.long_name}${postcode}`; break; } case "postal_code_suffix": { postcode = `${postcode}-${component.long_name}`; break; } case "locality": (document.querySelector("#locality") as HTMLInputElement).value = component.long_name; break; case "administrative_area_level_1": { (document.querySelector("#state") as HTMLInputElement).value = component.short_name; break; } case "country": (document.querySelector("#country") as HTMLInputElement).value = component.long_name; break; } } address1Field.value = address1; postalField.value = postcode; // After filling the form with address components from the Autocomplete // prediction, set cursor focus on the second address line to encourage // entry of subpremise information such as apartment, unit, or floor number. address2Field.focus(); }
JavaScript
function fillInAddress() { // Get the place details from the autocomplete object. const place = autocomplete.getPlace(); let address1 = ""; let postcode = ""; // Get each component of the address from the place details, // and then fill-in the corresponding field on the form. // place.address_components are google.maps.GeocoderAddressComponent objects // which are documented at http://goo.gle/3l5i5Mr for (const component of place.address_components) { // @ts-ignore remove once typings fixed const componentType = component.types[0]; switch (componentType) { case "street_number": { address1 = `${component.long_name} ${address1}`; break; } case "route": { address1 += component.short_name; break; } case "postal_code": { postcode = `${component.long_name}${postcode}`; break; } case "postal_code_suffix": { postcode = `${postcode}-${component.long_name}`; break; } case "locality": document.querySelector("#locality").value = component.long_name; break; case "administrative_area_level_1": { document.querySelector("#state").value = component.short_name; break; } case "country": document.querySelector("#country").value = component.long_name; break; } } address1Field.value = address1; postalField.value = postcode; // After filling the form with address components from the Autocomplete // prediction, set cursor focus on the second address line to encourage // entry of subpremise information such as apartment, unit, or floor number. address2Field.focus(); } window.initAutocomplete = initAutocomplete;
ปรับแต่งข้อความตัวยึดตำแหน่ง
โดยค่าเริ่มต้น ช่องข้อความที่สร้างขึ้นโดยบริการเติมข้อความอัตโนมัติจะมีข้อความตัวยึดตำแหน่งมาตรฐาน
หากต้องการแก้ไขข้อความ ให้ตั้งค่าแอตทริบิวต์
placeholder
ในองค์ประกอบ input
ดังนี้
<input id="searchTextField" type="text" size="50" placeholder="Anything you want!">
หมายเหตุ: ระบบจะแปลข้อความตัวยึดตำแหน่งเริ่มต้นโดยอัตโนมัติ หากคุณ ระบุค่าตัวยึดตำแหน่งของคุณเอง คุณต้องจัดการการแปลค่าดังกล่าว ในแอปพลิเคชัน ดูข้อมูลเกี่ยวกับวิธีที่ Google Maps JavaScript API เลือกภาษาที่จะใช้ได้ในเอกสารประกอบเกี่ยวกับ การแปล
ดูการจัดรูปแบบวิดเจ็ตการเติมข้อความอัตโนมัติและ SearchBox เพื่อปรับแต่งลักษณะที่ปรากฏของวิดเจ็ต
เพิ่มวิดเจ็ต SearchBox
SearchBox
ช่วยให้ผู้ใช้ค้นหาตามภูมิศาสตร์โดยใช้ข้อความได้ เช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านขายรองเท้าใกล้ถนนร็อบสัน"
คุณสามารถแนบ SearchBox
ไปยังช่องข้อความ และเมื่อป้อนข้อความ
บริการจะแสดงการคาดคะเนในรูปแบบรายการแบบเลื่อนลง
SearchBox
จะแสดงรายการการคาดคะเนเพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่กำหนดโดย Places API) และข้อความค้นหาที่แนะนำ
เช่น หากผู้ใช้ป้อน "พิซซ่าในนิ" รายการที่เลือกอาจ
รวมวลี "พิซซ่าในนิวยอร์ก นิวยอร์ก" รวมถึงชื่อร้านพิซซ่าต่างๆ
เมื่อผู้ใช้เลือกสถานที่จากรายการ
ระบบจะส่งข้อมูลเกี่ยวกับสถานที่นั้นไปยังออบเจ็กต์ SearchBox และแอปพลิเคชันของคุณจะเรียกข้อมูลได้
ตัวสร้าง SearchBox
รับอาร์กิวเมนต์ 2 รายการ ได้แก่
- องค์ประกอบ
input
ของ HTML ที่มีประเภทtext
นี่คือ ช่องป้อนข้อมูลที่บริการSearchBox
จะตรวจสอบและ แนบผลลัพธ์ไว้ - อาร์กิวเมนต์
options
ซึ่งอาจมีพร็อพเพอร์ตี้bounds
ดังนี้bounds
คือออบเจ็กต์google.maps.LatLngBounds
ที่ระบุพื้นที่ที่จะค้นหาสถานที่ ผลการค้นหา จะเอนเอียงไปทางสถานที่ที่อยู่ภายใน ขอบเขตเหล่านี้ แต่ไม่ได้จำกัดอยู่เพียงเท่านั้น
โค้ดต่อไปนี้ใช้พารามิเตอร์ขอบเขตเพื่อปรับผลลัพธ์ ให้เป็นสถานที่ภายในพื้นที่ทางภูมิศาสตร์ที่เฉพาะเจาะจง ซึ่งระบุโดยใช้ พิกัดละติจูด/ลองจิจูด
var defaultBounds = new google.maps.LatLngBounds( new google.maps.LatLng(-33.8902, 151.1759), new google.maps.LatLng(-33.8474, 151.2631)); var input = document.getElementById('searchTextField'); var searchBox = new google.maps.places.SearchBox(input, { bounds: defaultBounds });
เปลี่ยนพื้นที่ค้นหาสำหรับ SearchBox
หากต้องการเปลี่ยนพื้นที่ค้นหาสำหรับ SearchBox
ที่มีอยู่ ให้เรียกใช้
setBounds()
ในออบเจ็กต์ SearchBox
และส่งออบเจ็กต์ LatLngBounds
ที่เกี่ยวข้อง
การรับข้อมูลสถานที่
เมื่อผู้ใช้เลือกรายการจากการคาดคะเนที่แนบมากับช่องค้นหา
บริการจะทริกเกอร์เหตุการณ์ places_changed
คุณสามารถ
เรียกใช้ getPlaces()
ในออบเจ็กต์ SearchBox
เพื่อ
ดึงข้อมูลอาร์เรย์ที่มีการคาดการณ์หลายรายการ ซึ่งแต่ละรายการเป็นออบเจ็กต์ PlaceResult
ดูข้อมูลเพิ่มเติมเกี่ยวกับออบเจ็กต์ PlaceResult
ได้ที่เอกสารประกอบเกี่ยวกับ
ผลลัพธ์รายละเอียดสถานที่
TypeScript
// Listen for the event fired when the user selects a prediction and retrieve // more details for that place. searchBox.addListener("places_changed", () => { const places = searchBox.getPlaces(); if (places.length == 0) { return; } // Clear out the old markers. markers.forEach((marker) => { marker.setMap(null); }); markers = []; // For each place, get the icon, name and location. const bounds = new google.maps.LatLngBounds(); places.forEach((place) => { if (!place.geometry || !place.geometry.location) { console.log("Returned place contains no geometry"); return; } const icon = { url: place.icon as string, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; // Create a marker for each place. markers.push( new google.maps.Marker({ map, icon, title: place.name, position: place.geometry.location, }) ); if (place.geometry.viewport) { // Only geocodes have viewport. bounds.union(place.geometry.viewport); } else { bounds.extend(place.geometry.location); } }); map.fitBounds(bounds); });
JavaScript
// Listen for the event fired when the user selects a prediction and retrieve // more details for that place. searchBox.addListener("places_changed", () => { const places = searchBox.getPlaces(); if (places.length == 0) { return; } // Clear out the old markers. markers.forEach((marker) => { marker.setMap(null); }); markers = []; // For each place, get the icon, name and location. const bounds = new google.maps.LatLngBounds(); places.forEach((place) => { if (!place.geometry || !place.geometry.location) { console.log("Returned place contains no geometry"); return; } const icon = { url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; // Create a marker for each place. markers.push( new google.maps.Marker({ map, icon, title: place.name, position: place.geometry.location, }), ); if (place.geometry.viewport) { // Only geocodes have viewport. bounds.union(place.geometry.viewport); } else { bounds.extend(place.geometry.location); } }); map.fitBounds(bounds); });
ดูการจัดรูปแบบวิดเจ็ตการเติมข้อความอัตโนมัติและ SearchBox เพื่อปรับแต่งลักษณะที่ปรากฏของวิดเจ็ต
การดึงข้อมูลการคาดคะเนของบริการเติมข้อความอัตโนมัติของสถานที่ด้วยโปรแกรม
หากต้องการดึงข้อมูลการคาดการณ์แบบเป็นโปรแกรม ให้ใช้คลาส
AutocompleteService
AutocompleteService
ไม่ได้เพิ่มการควบคุม UI ใดๆ แต่จะแสดงอาร์เรย์ของออบเจ็กต์การคาดคะเน
ซึ่งแต่ละออบเจ็กต์มีข้อความของการคาดคะเน ข้อมูลอ้างอิง
และรายละเอียดเกี่ยวกับวิธีที่ผลลัพธ์ตรงกับอินพุตของผู้ใช้
ซึ่งจะมีประโยชน์หากคุณต้องการควบคุมอินเทอร์เฟซผู้ใช้มากกว่าที่Autocomplete
และSearchBox
ที่อธิบายไว้ข้างต้นมีให้
AutocompleteService
แสดงเมธอดต่อไปนี้
getPlacePredictions()
แสดงผลการคาดคะเนสถานที่ หมายเหตุ: "สถานที่" อาจเป็นสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือจุดที่น่าสนใจที่โดดเด่น ตามที่กำหนดโดย Places APIgetQueryPredictions()
จะแสดงรายการคำที่คาดการณ์เพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่กำหนดโดย Places API) รวมถึงคำค้นหาที่แนะนำ เช่น หากผู้ใช้ ป้อน "พิซซ่าใน" รายการที่เลือกอาจมีวลี "พิซซ่าในนิวยอร์ก รัฐนิวยอร์ก" รวมถึงชื่อร้านพิซซ่าต่างๆ
ทั้ง 2 วิธีข้างต้นจะแสดงผลอาร์เรย์ของ ออบเจ็กต์การคาดคะเนในรูปแบบต่อไปนี้
description
คือการคาดการณ์ที่ตรงกันdistance_meters
คือระยะทางเป็นเมตรของสถานที่จากAutocompletionRequest.origin
ที่ระบุmatched_substrings
มีชุดสตริงย่อยใน คำอธิบายที่ตรงกับองค์ประกอบในอินพุตของผู้ใช้ ซึ่งมีประโยชน์ในการ ไฮไลต์สตริงย่อยเหล่านั้นในแอปพลิเคชัน ในหลายๆ กรณี คำค้นหาจะปรากฏเป็นสตริงย่อยของช่องคำอธิบายlength
คือความยาวของสตริงย่อยoffset
คือออฟเซ็ตอักขระที่วัดจาก จุดเริ่มต้นของสตริงคำอธิบาย ซึ่งสตริงย่อยที่ตรงกัน ปรากฏขึ้น
place_id
คือตัวระบุข้อความที่ระบุสถานที่ที่ไม่ซ้ำกัน หากต้องการดึงข้อมูลเกี่ยวกับสถานที่ ให้ส่งตัวระบุนี้ใน ฟิลด์placeId
ของ คำขอรายละเอียดสถานที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธี อ้างอิงสถานที่ ด้วยรหัสสถานที่terms
คืออาร์เรย์ที่มีองค์ประกอบของคำค้นหา สำหรับ สถานที่ องค์ประกอบแต่ละรายการมักจะประกอบกันเป็นส่วนหนึ่งของที่อยู่offset
คือออฟเซ็ตอักขระที่วัดจาก จุดเริ่มต้นของสตริงคำอธิบาย ซึ่งสตริงย่อยที่ตรงกัน ปรากฏขึ้นvalue
คือคำที่ตรงกัน
ตัวอย่างด้านล่างจะดำเนินการคำขอการคาดการณ์การค้นหาสำหรับวลี "พิซซ่าใกล้" และแสดงผลลัพธ์ในรายการ
TypeScript
// This example retrieves autocomplete predictions programmatically from the // autocomplete service, and displays them as an HTML list. // This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initService(): void { const displaySuggestions = function ( predictions: google.maps.places.QueryAutocompletePrediction[] | null, status: google.maps.places.PlacesServiceStatus ) { if (status != google.maps.places.PlacesServiceStatus.OK || !predictions) { alert(status); return; } predictions.forEach((prediction) => { const li = document.createElement("li"); li.appendChild(document.createTextNode(prediction.description)); (document.getElementById("results") as HTMLUListElement).appendChild(li); }); }; const service = new google.maps.places.AutocompleteService(); service.getQueryPredictions({ input: "pizza near Syd" }, displaySuggestions); } declare global { interface Window { initService: () => void; } } window.initService = initService;
JavaScript
// This example retrieves autocomplete predictions programmatically from the // autocomplete service, and displays them as an HTML list. // This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initService() { const displaySuggestions = function (predictions, status) { if (status != google.maps.places.PlacesServiceStatus.OK || !predictions) { alert(status); return; } predictions.forEach((prediction) => { const li = document.createElement("li"); li.appendChild(document.createTextNode(prediction.description)); document.getElementById("results").appendChild(li); }); }; const service = new google.maps.places.AutocompleteService(); service.getQueryPredictions({ input: "pizza near Syd" }, displaySuggestions); } window.initService = initService;
CSS
HTML
<html> <head> <title>Retrieving Autocomplete Predictions</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <p>Query suggestions for 'pizza near Syd':</p> <ul id="results"></ul> <!-- Replace Powered By Google image src with self hosted image. https://developers.google.com/maps/documentation/places/web-service/policies#other_attribution_requirements --> <img class="powered-by-google" src="https://storage.googleapis.com/geo-devrel-public-buckets/powered_by_google_on_white.png" alt="Powered by Google" /> <!-- The `defer` attribute causes the script to execute after the full HTML document has been parsed. For non-blocking uses, avoiding race conditions, and consistent behavior across browsers, consider loading using Promises. See https://developers.google.com/maps/documentation/javascript/load-maps-js-api for more information. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initService&libraries=places&v=weekly" defer ></script> </body> </html>
ลองใช้ตัวอย่าง
โทเค็นของเซสชัน
AutocompleteService.getPlacePredictions()
สามารถใช้โทเค็นเซสชัน(หากมีการติดตั้งใช้งาน) เพื่อจัดกลุ่มคำขอเติมข้อความอัตโนมัติสำหรับการเรียกเก็บเงิน
โทเค็นเซสชันจะจัดกลุ่มระยะการค้นหาและการเลือกของการค้นหาที่เติมข้อความอัตโนมัติของผู้ใช้
เป็นเซสชันที่ไม่ต่อเนื่องเพื่อวัตถุประสงค์ในการเรียกเก็บเงิน เซสชันจะ
เริ่มต้นเมื่อผู้ใช้เริ่มพิมพ์คำค้นหา และสิ้นสุดเมื่อผู้ใช้เลือกสถานที่
แต่ละเซสชันสามารถมีการค้นหาหลายครั้ง ตามด้วยการเลือกสถานที่ 1 แห่ง
เมื่อเซสชันสิ้นสุดลง โทเค็นจะใช้ไม่ได้อีกต่อไป แอปของคุณต้อง
สร้างโทเค็นใหม่สำหรับแต่ละเซสชัน เราขอแนะนำให้ใช้โทเค็นเซสชันสำหรับ
เซสชันการเติมข้อความอัตโนมัติทั้งหมด หากไม่ได้ระบุพารามิเตอร์ sessionToken
หรือหากคุณใช้โทเค็นเซสชันซ้ำ ระบบจะเรียกเก็บเงินสำหรับเซสชันราวกับว่าไม่มีการระบุโทเค็นเซสชัน (ระบบจะเรียกเก็บเงินสำหรับคำขอแต่ละรายการแยกกัน)
คุณสามารถใช้โทเค็นเซสชันเดียวกันเพื่อส่งคำขอรายละเอียดสถานที่
รายการเดียวไปยังสถานที่ที่ได้จากการเรียกใช้ AutocompleteService.getPlacePredictions()
ในกรณีนี้ ระบบจะรวมคำขอการเติมข้อความอัตโนมัติกับคำขอรายละเอียดสถานที่
และจะเรียกเก็บเงินสำหรับการเรียกใช้เป็นคำขอรายละเอียดสถานที่ปกติ ไม่มีค่าใช้จ่ายสำหรับ
คำขอเติมข้อความอัตโนมัติ
อย่าลืมส่งโทเค็นเซสชันที่ไม่ซ้ำกันสำหรับเซสชันใหม่แต่ละเซสชัน การใช้โทเค็นเดียวกันสำหรับเซสชันการเติมข้อความอัตโนมัติมากกว่า 1 เซสชันจะทำให้เซสชันการเติมข้อความอัตโนมัติเหล่านั้นไม่ถูกต้อง และระบบจะเรียกเก็บเงินคำขอการเติมข้อความอัตโนมัติทั้งหมดในเซสชันที่ไม่ถูกต้องแยกกันโดยใช้ SKU การเติมข้อความอัตโนมัติต่อคำขอ อ่านเพิ่มเติมเกี่ยวกับโทเค็นเซสชัน
ตัวอย่างต่อไปนี้แสดงการสร้างโทเค็นเซสชัน จากนั้นส่งโทเค็นใน
AutocompleteService
(displaySuggestions()
ฟังก์ชันถูกละไว้เพื่อความกระชับ)
// Create a new session token. var sessionToken = new google.maps.places.AutocompleteSessionToken(); // Pass the token to the autocomplete service. var autocompleteService = new google.maps.places.AutocompleteService(); autocompleteService.getPlacePredictions({ input: 'pizza near Syd', sessionToken: sessionToken }, displaySuggestions);
อย่าลืมส่งโทเค็นเซสชันที่ไม่ซ้ำกันสำหรับเซสชันใหม่แต่ละเซสชัน การใช้โทเค็นเดียวกันสำหรับเซสชันมากกว่า 1 เซสชันจะส่งผลให้ระบบเรียกเก็บเงินสำหรับคำขอแต่ละรายการแยกกัน
อ่านเพิ่มเติมเกี่ยวกับโทเค็นเซสชัน
การจัดรูปแบบวิดเจ็ตการเติมข้อความอัตโนมัติและ SearchBox
โดยค่าเริ่มต้น องค์ประกอบ UI ที่ Autocomplete
และ
SearchBox
จัดเตรียมไว้จะมีสไตล์ที่เหมาะกับการรวมไว้ใน Google Maps คุณอาจต้อง
ปรับรูปแบบให้เหมาะกับเว็บไซต์ของคุณเอง คลาส CSS ต่อไปนี้พร้อมใช้งาน
คลาสทั้งหมดที่แสดงด้านล่างใช้ได้กับทั้งวิดเจ็ต Autocomplete
และ SearchBox

คลาส CSS | คำอธิบาย |
---|---|
pac-container |
องค์ประกอบภาพที่มีรายการการคาดคะเนที่บริการเติมข้อความอัตโนมัติของสถานที่ส่งคืน รายการนี้จะปรากฏเป็นรายการแบบเลื่อนลงใต้
วิดเจ็ต Autocomplete หรือ SearchBox |
pac-icon |
ไอคอนที่แสดงทางด้านซ้ายของแต่ละรายการในรายการ การคาดคะเน |
pac-item |
รายการในการคาดการณ์ที่วิดเจ็ต Autocomplete หรือ SearchBox แสดง |
pac-item:hover |
รายการเมื่อผู้ใช้วางเคอร์เซอร์เมาส์เหนือรายการนั้น |
pac-item-selected |
รายการเมื่อผู้ใช้เลือกโดยใช้แป้นพิมพ์ หมายเหตุ: รายการที่เลือกจะเป็นสมาชิกของชั้นเรียนนี้และชั้นเรียน pac-item
|
pac-item-query |
ช่วงภายใน pac-item ซึ่งเป็นส่วนหลักของ
การคาดคะเน สำหรับสถานที่ทางภูมิศาสตร์ ฟิลด์นี้จะมีชื่อสถานที่ เช่น
"ซิดนีย์" หรือชื่อและหมายเลขถนน เช่น "10 King Street" สำหรับ
การค้นหาแบบข้อความ เช่น "พิซซ่าในนิวยอร์ก" จะมีข้อความทั้งหมด
ของคำค้นหา โดยค่าเริ่มต้น pac-item-query จะเป็นสีดำ หากมีข้อความเพิ่มเติมใน pac-item ข้อความนั้นจะอยู่นอก pac-item-query และรับช่วงการจัดรูปแบบจาก pac-item โดยจะมีสีเทาโดยค่าเริ่มต้น โดยปกติแล้ว ข้อความเพิ่มเติม
จะเป็นที่อยู่ |
pac-matched |
ส่วนของการคาดคะเนที่ส่งกลับซึ่งตรงกับข้อมูลที่ผู้ใช้ป้อน โดย
ค่าเริ่มต้น ระบบจะไฮไลต์ข้อความที่ตรงกันนี้เป็นตัวหนา โปรดทราบว่าข้อความที่ตรงกันอาจอยู่ที่ใดก็ได้ภายใน pac-item ไม่จำเป็นต้องเป็นส่วนหนึ่งของ pac-item-query และอาจเป็นส่วนหนึ่งของ pac-item-query รวมถึงเป็นส่วนหนึ่งของข้อความที่เหลือใน pac-item |
การเพิ่มประสิทธิภาพ Place Autocomplete (เดิม)
ส่วนนี้อธิบายแนวทางปฏิบัติแนะนำที่จะช่วยให้คุณใช้บริการ การเติมข้อความอัตโนมัติของสถานที่ (เดิม) ได้อย่างเต็มที่
หลักเกณฑ์ทั่วไปมีดังนี้
- วิธีที่เร็วที่สุดในการพัฒนาอินเทอร์เฟซผู้ใช้ที่ใช้งานได้คือการใช้ Maps JavaScript API วิดเจ็ตการเติมข้อความอัตโนมัติของสถานที่ (เดิม) Places SDK สำหรับ Android วิดเจ็ตการเติมข้อความอัตโนมัติของสถานที่ (เดิม) หรือ Places SDK สำหรับ iOS การควบคุม UI การเติมข้อความอัตโนมัติของสถานที่ (เดิม)
- ทำความเข้าใจฟิลด์ข้อมูลที่จำเป็นของ Place Autocomplete (เดิม) ตั้งแต่เริ่มต้น
- ฟิลด์การเอนเอียงตามสถานที่ตั้งและข้อจำกัดด้านสถานที่ตั้งเป็นฟิลด์ที่ไม่บังคับ แต่ก็อาจ ส่งผลต่อประสิทธิภาพการเติมข้อความอัตโนมัติอย่างมาก
- ใช้การจัดการข้อผิดพลาดเพื่อให้แน่ใจว่าแอปของคุณจะลดประสิทธิภาพอย่างเหมาะสม หาก API แสดงข้อผิดพลาด
- ตรวจสอบว่าแอปของคุณจัดการเมื่อไม่มีการเลือกและเสนอวิธีให้ผู้ใช้ ดำเนินการต่อ
แนวทางปฏิบัติแนะนำในการใช้ต้นทุนให้เกิดประโยชน์สูงสุด
การเพิ่มประสิทธิภาพต้นทุนขั้นพื้นฐาน
หากต้องการเพิ่มประสิทธิภาพค่าใช้จ่ายในการใช้บริการการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ให้ใช้มาสก์ฟิลด์ในวิดเจ็ตรายละเอียดสถานที่ (เดิม) และการเติมข้อความอัตโนมัติของสถานที่ (เดิม) เพื่อแสดงเฉพาะ ฟิลด์ข้อมูลสถานที่ที่คุณต้องการ
การเพิ่มประสิทธิภาพต้นทุนขั้นสูง
พิจารณาการติดตั้งใช้งาน Place Autocomplete (เดิม) แบบเป็นโปรแกรมเพื่อเข้าถึงราคาต่อคำขอและขอผลลัพธ์ Geocoding API เกี่ยวกับสถานที่ที่เลือกแทนรายละเอียดสถานที่ (เดิม) การกำหนดราคาต่อคำขอที่ใช้ร่วมกับ Geocoding API จะคุ้มค่ากว่าการกำหนดราคาต่อเซสชัน (อิงตามเซสชัน) หากเป็นไปตามเงื่อนไขต่อไปนี้ทั้ง 2 ข้อ
- หากคุณต้องการเพียงละติจูด/ลองจิจูดหรือที่อยู่ของสถานที่ที่ผู้ใช้เลือก Geocoding API จะให้ข้อมูลนี้โดยใช้การเรียก Place Details (เดิม) น้อยกว่า
- หากผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติภายในคำขอการคาดคะเนการเติมข้อความอัตโนมัติของสถานที่ (เดิม) โดยเฉลี่ย 4 รายการหรือน้อยกว่า การกำหนดราคาต่อคำขออาจคุ้มค่ากว่าการกำหนดราคาต่อเซสชัน
แอปพลิเคชันของคุณต้องใช้ข้อมูลอื่นนอกเหนือจากที่อยู่และละติจูด/ลองจิจูดของการคาดคะเนที่เลือกไหม
ใช่ ต้องระบุรายละเอียดเพิ่มเติม
ใช้ Place Autocomplete ตามเซสชัน (เดิม) กับรายละเอียดสถานที่ (เดิม)
เนื่องจากแอปพลิเคชันของคุณต้องใช้รายละเอียดสถานที่ (เดิม) เช่น ชื่อสถานที่ สถานะธุรกิจ หรือเวลาทำการ การติดตั้งใช้งานการป้อนข้อความอัตโนมัติของสถานที่ (เดิม) ควรใช้โทเค็นเซสชัน (แบบเป็นโปรแกรมหรือสร้างไว้ในวิดเจ็ต JavaScript, Android หรือ iOS) ต่อเซสชัน รวมถึง SKU ข้อมูล Places ที่เกี่ยวข้อง ทั้งนี้ขึ้นอยู่กับฟิลด์ข้อมูลสถานที่ที่คุณขอ1
การติดตั้งใช้งานวิดเจ็ต
ระบบจะสร้างการจัดการเซสชันลงในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมทั้งคำขอ Place Autocomplete (เดิม) และคำขอรายละเอียดสถานที่ (เดิม) ในการคาดคะเนที่เลือก อย่าลืมระบุพารามิเตอร์ fields
เพื่อให้มั่นใจว่าคุณขอเฉพาะฟิลด์ข้อมูลสถานที่ที่ต้องการเท่านั้น
การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอ Place Autocomplete (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดคะเนที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากการตอบกลับของ Place Autocomplete (เดิม)
- โทเค็นเซสชันที่ใช้ในคำขอ Place Autocomplete (เดิม)
- พารามิเตอร์
fields
ที่ระบุ ฟิลด์ข้อมูลสถานที่ที่คุณต้องการ
ไม่ ต้องใช้แค่ที่อยู่และสถานที่
Geocoding API อาจเป็นตัวเลือกที่คุ้มค่ากว่ารายละเอียดสถานที่ (เดิม) สำหรับแอปพลิเคชันของคุณ ทั้งนี้ขึ้นอยู่กับประสิทธิภาพของการใช้งาน Place Autocomplete (เดิม) ประสิทธิภาพของ Place Autocomplete (เดิม) ของแต่ละแอปพลิเคชันจะแตกต่างกันไปตามสิ่งที่ผู้ใช้ป้อน ตำแหน่งที่ใช้แอปพลิเคชัน และมีการใช้แนวทางปฏิบัติแนะนำในการเพิ่มประสิทธิภาพหรือไม่
หากต้องการตอบคำถามต่อไปนี้ ให้วิเคราะห์จำนวนอักขระโดยเฉลี่ยที่ผู้ใช้พิมพ์ก่อนเลือกการคาดคะเนการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ในแอปพลิเคชัน
โดยเฉลี่ยแล้ว ผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ในคำขอไม่เกิน 4 รายการใช่ไหม
ใช่
ใช้ Place Autocomplete (เดิม) แบบเป็นโปรแกรมโดยไม่มีโทเค็นเซสชัน และเรียกใช้ Geocoding API ในการคาดคะเนสถานที่ที่เลือก
Geocoding API จะแสดงที่อยู่และพิกัดละติจูด/ลองจิจูด การส่งคำขอ Place Autocomplete (เดิม) - ต่อคำขอ 4 รายการรวมกับการเรียกใช้ Geocoding API เกี่ยวกับการคาดคะเนสถานที่ที่เลือกมีค่าใช้จ่ายน้อยกว่า Place Autocomplete (เดิม) ต่อเซสชัน1
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้รับคำที่คาดการณ์ซึ่งกำลังมองหาในจำนวนอักขระที่น้อยลง
ไม่
ใช้ Place Autocomplete ตามเซสชัน (เดิม) กับรายละเอียดสถานที่ (เดิม)
เนื่องจากจำนวนคำขอเฉลี่ยที่คุณคาดว่าจะทำก่อนที่ผู้ใช้จะเลือกการคาดคะเนการเติมข้อความอัตโนมัติของสถานที่ (เดิม) เกินกว่าต้นทุนของราคาต่อเซสชัน การติดตั้งใช้งานการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ควรใช้โทเค็นเซสชันสำหรับทั้งคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม) และคำขอรายละเอียดสถานที่ (เดิม) ที่เกี่ยวข้องต่อเซสชัน1
การติดตั้งใช้งานวิดเจ็ต
ระบบจะสร้างการจัดการเซสชันลงในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมทั้งคำขอ Place Autocomplete (เดิม) และคำขอรายละเอียดสถานที่ (เดิม) ในการคาดคะเนที่เลือก อย่าลืมระบุพารามิเตอร์ fields
เพื่อให้แน่ใจว่าคุณขอเฉพาะฟิลด์ข้อมูลพื้นฐาน
การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอ Place Autocomplete (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดคะเนที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากการตอบกลับของ Place Autocomplete (เดิม)
- โทเค็นเซสชันที่ใช้ในคำขอ Place Autocomplete (เดิม)
- พารามิเตอร์
fields
ที่ระบุฟิลด์ข้อมูลพื้นฐาน เช่น ที่อยู่และเรขาคณิต
พิจารณาการหน่วงเวลาคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม)
คุณสามารถใช้กลยุทธ์ต่างๆ เช่น การหน่วงเวลาคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม) จนกว่าผู้ใช้จะพิมพ์อักขระ 3-4 ตัวแรก เพื่อให้แอปพลิเคชันของคุณส่งคำขอน้อยลง เช่น การส่งคำขอ Place Autocomplete (เดิม) สำหรับอักขระแต่ละตัวหลังจากที่ผู้ใช้พิมพ์อักขระตัวที่ 3 หมายความว่าหากผู้ใช้พิมพ์อักขระ 7 ตัว แล้วเลือกการคาดคะเนที่คุณส่งคำขอ Geocoding API 1 รายการ ค่าใช้จ่ายทั้งหมดจะเป็นค่าใช้จ่ายสำหรับ Place Autocomplete (เดิม) 4 รายการต่อคำขอ + Geocoding1
หากการหน่วงเวลาคำขอช่วยให้คำขอแบบเป็นโปรแกรมโดยเฉลี่ยต่ำกว่า 4 ได้ คุณสามารถทำตามคำแนะนำในการติดตั้งใช้งาน Place Autocomplete (เดิม) ที่มีประสิทธิภาพด้วย Geocoding API โปรดทราบว่าการหน่วงเวลาคำขออาจทำให้ผู้ใช้ที่คาดหวังว่าจะเห็นการคาดคะเนทุกครั้งที่กดแป้นพิมพ์มองว่าเป็นการตอบสนองที่ช้า
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้รับคำทำนายที่ต้องการโดยใช้จำนวนอักขระน้อยลง
-
ดูค่าใช้จ่ายได้ที่รายการราคาของ Google Maps Platform
แนวทางปฏิบัติแนะนำด้านประสิทธิภาพ
หลักเกณฑ์ต่อไปนี้อธิบายวิธีเพิ่มประสิทธิภาพการเติมข้อความอัตโนมัติของสถานที่ (เดิม)
- เพิ่มข้อจำกัดด้านประเทศ การกำหนดค่าตำแหน่ง และ (สำหรับการติดตั้งใช้งานแบบเป็นโปรแกรม) ค่ากำหนดภาษาลงในการติดตั้งใช้งานการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ไม่จำเป็นต้องตั้งค่าภาษาสำหรับวิดเจ็ต เนื่องจากวิดเจ็ตจะเลือกค่ากำหนดภาษาจากเบราว์เซอร์หรืออุปกรณ์เคลื่อนที่ของผู้ใช้
- หากการเติมข้อความอัตโนมัติของสถานที่ (เดิม) มาพร้อมกับแผนที่ คุณสามารถกำหนดตำแหน่งตามวิวพอร์ตของแผนที่ได้
- ในกรณีที่ผู้ใช้ไม่เลือกการคาดคะเนจาก Place Autocomplete (เดิม) โดยทั่วไป
เนื่องจากการคาดคะเนเหล่านั้นไม่ใช่ที่อยู่ผลลัพธ์ที่ต้องการ คุณสามารถนำอินพุตเดิมของผู้ใช้มาใช้ซ้ำเพื่อพยายามรับผลลัพธ์ที่เกี่ยวข้องมากขึ้นได้โดยทำดังนี้
- หากคาดว่าผู้ใช้จะป้อนเฉพาะข้อมูลที่อยู่ ให้ใช้ข้อมูลที่ผู้ใช้ป้อนเดิมซ้ำ ในการเรียก Geocoding API
- หากคาดว่าผู้ใช้จะป้อนคำค้นหาสถานที่ที่เฉพาะเจาะจงตามชื่อหรือที่อยู่ ให้ใช้คำขอค้นหาสถานที่ (เดิม) หากคาดหวังผลลัพธ์ในภูมิภาคที่เฉพาะเจาะจงเท่านั้น ให้ใช้ การเอนเอียงตำแหน่ง
- ผู้ใช้ที่ป้อนที่อยู่ของสถานที่ย่อย เช่น ที่อยู่ของยูนิตหรืออพาร์ตเมนต์ที่เฉพาะเจาะจง ภายในอาคาร เช่น ที่อยู่ "Stroupežnického 3191/17, Praha" ในเช็ก จะให้การคาดคะเนบางส่วนใน Place Autocomplete (เดิม)
- ผู้ใช้ที่ป้อนที่อยู่ที่มีคำนำหน้าส่วนถนน เช่น "23-30 29th St, Queens" ใน นิวยอร์กซิตี้ หรือ "47-380 Kamehameha Hwy, Kaneohe" บนเกาะ Kauai ในฮาวาย
ขีดจำกัดการใช้งาน
โควต้า
ดูข้อมูลโควต้าและราคาได้ที่ เอกสารประกอบเกี่ยวกับการใช้งานและการเรียกเก็บเงินสำหรับ Places API