บทนำ
การเติมข้อความอัตโนมัติเป็นฟีเจอร์ของไลบรารี Places ใน Maps JavaScript API คุณสามารถใช้ฟีเจอร์เติมข้อความอัตโนมัติเพื่อให้แอปพลิเคชันมีลักษณะการค้นหาแบบพิมพ์ล่วงหน้าของช่องค้นหา Google Maps บริการเติมข้อความอัตโนมัติสามารถจับคู่กับคำเต็มและสตริงย่อย โดยแก้ไขชื่อสถานที่ ที่อยู่ และ Plus Codes แอปพลิเคชันจึงสามารถส่งการค้นหาขณะที่ผู้ใช้พิมพ์เพื่อแสดงการคาดคะเนสถานที่แบบเรียลไทม์ "สถานที่" ตามคำจำกัดความของ Places API อาจเป็นสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือจุดที่น่าสนใจที่โดดเด่น
เริ่มต้นใช้งาน
ก่อนใช้ไลบรารี Places ใน Maps JavaScript API ก่อนอื่นให้ตรวจสอบว่าเปิดใช้ Places API ในคอนโซล Google Cloud แล้วในโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สำหรับ Maps JavaScript API
วิธีดูรายการ API ที่เปิดใช้
- ไปที่คอนโซล Google Cloud
- คลิกปุ่มเลือกโปรเจ็กต์ จากนั้นเลือกโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สำหรับ 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 กำหนด) และข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ป้อน "pizza in new" รายการตัวเลือกอาจประกอบด้วยวลี "pizza in New York, NY" รวมถึงชื่อร้านพิซซ่าต่างๆ SearchBox
มีตัวเลือกในการจำกัดการค้นหาน้อยกว่าAutocomplete
ในกรณีแรก คุณสามารถกําหนดให้ระบบค้นหาLatLngBounds
หนึ่งๆ เป็นหลัก ในกรณีหลัง คุณสามารถจำกัดการค้นหาให้อยู่ในบางประเทศและบางประเภทสถานที่ รวมถึงกำหนดขอบเขตได้ ดูข้อมูลเพิ่มเติมได้ที่ด้านล่าง
รูปที่ 3: SearchBox แสดงข้อความค้นหาและการคาดคะเนสถานที่ - ความแตกต่างหลักอยู่ที่ผลลัพธ์ที่ปรากฏในรายการตัวเลือก
- คุณสามารถสร้างออบเจ็กต์
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
เท่านั้น คุณสามารถใช้รหัสสถานที่ที่แสดงผลกับการเรียกใช้บริการสถานที่ การจัดรหัสพิกัดภูมิศาสตร์ เส้นทาง หรือตารางระยะทาง
- อาร์เรย์ข้อมูล
จำกัดการคาดคะเนการเติมข้อความอัตโนมัติ
โดยค่าเริ่มต้น ฟีเจอร์เติมข้อความอัตโนมัติของสถานที่จะแสดงสถานที่ทุกประเภท โดยเน้นการคาดคะเนที่อยู่ใกล้กับตำแหน่งของผู้ใช้ และดึงข้อมูลช่องที่มีทั้งหมดสำหรับสถานที่ที่ผู้ใช้เลือก ตั้งค่าตัวเลือกการเติมข้อความอัตโนมัติของสถานที่เพื่อแสดงการคาดคะเนที่เกี่ยวข้องมากขึ้นตามกรณีการใช้งานของคุณ
ตั้งค่าตัวเลือกเมื่อสร้าง
ตัวสร้าง 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
การสาธิตการเติมข้อความอัตโนมัติของสถานที่แสดงความแตกต่างของการคาดคะเนระหว่างสถานที่ประเภทต่างๆ
กำลังรับข้อมูลสถานที่
เมื่อผู้ใช้เลือกสถานที่จากการคาดคะเนที่แนบมากับช่องข้อความที่เติมข้อความอัตโนมัติ บริการจะเรียกเหตุการณ์ place_changed
วิธีดูรายละเอียดสถานที่
- สร้างตัวแฮนเดิลเหตุการณ์สําหรับเหตุการณ์
place_changed
และเรียกใช้addListener()
ในออบเจ็กต์Autocomplete
เพื่อเพิ่มตัวแฮนเดิล - เรียก
Autocomplete.getPlace()
ในออบเจ็กต์Autocomplete
เพื่อดึงออบเจ็กต์PlaceResult
ซึ่งคุณจะนำไปใช้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับสถานที่ที่เลือกได้
โดยค่าเริ่มต้น เมื่อผู้ใช้เลือกสถานที่หนึ่งๆ การเติมข้อความอัตโนมัติจะแสดงช่องข้อมูลทั้งหมดที่มีสำหรับสถานที่ที่เลือก และระบบจะเรียกเก็บเงินจากคุณตามนั้น
ใช้ Autocomplete.setFields()
เพื่อระบุฟิลด์ข้อมูลสถานที่ที่จะแสดง อ่านเพิ่มเติมเกี่ยวกับออบเจ็กต์ PlaceResult
รวมถึงรายการช่องข้อมูลสถานที่ที่คุณสามารถขอได้ โปรดใช้ Autocomplete.setFields()
เพื่อระบุเฉพาะข้อมูลสถานที่ที่จะใช้เพื่อหลีกเลี่ยงการจ่ายเงินสำหรับข้อมูลที่ไม่จำเป็นต้องใช้
พร็อพเพอร์ตี้ name
มี description
จากการคาดคะเนการเติมข้อความอัตโนมัติของ Places อ่านข้อมูลเพิ่มเติมเกี่ยวกับ description
ได้ในเอกสารประกอบเกี่ยวกับการเติมข้อความอัตโนมัติของสถานที่
สำหรับแบบฟอร์มที่อยู่ คุณควรรับที่อยู่ในรูปแบบที่มีโครงสร้าง หากต้องการแสดงผลที่อยู่ที่มีโครงสร้างของสถานที่ที่เลือก ให้เรียกใช้ 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
ช่วยให้ผู้ใช้ทำการค้นหาตามภูมิศาสตร์แบบข้อความได้ เช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านรองเท้าใกล้ถนน Robson"
คุณสามารถแนบ SearchBox
กับช่องข้อความ และเมื่อป้อนข้อความ บริการจะแสดงการคาดการณ์ในรูปแบบรายการตัวเลือกแบบเลื่อนลง
SearchBox
แสดงรายการการคาดคะเนเพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่ Places API กำหนด) บวกกับข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ป้อน "pizza in new" รายการตัวเลือกอาจประกอบด้วยวลี "pizza in New York, NY" รวมถึงชื่อร้านพิซซ่าต่างๆ เมื่อผู้ใช้เลือกสถานที่จากรายการ ระบบจะแสดงข้อมูลเกี่ยวกับสถานที่นั้นไปยังออบเจ็กต์ 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); });
ดูการจัดรูปแบบวิดเจ็ตการเติมข้อความอัตโนมัติและวิดเจ็ตช่องค้นหาเพื่อปรับแต่งลักษณะที่ปรากฏของวิดเจ็ต
การดึงข้อมูลการคาดคะเนของบริการการเติมข้อความอัตโนมัติของสถานที่แบบเป็นโปรแกรม
หากต้องการเรียกข้อมูลการคาดการณ์แบบเป็นโปรแกรม ให้ใช้คลาส
AutocompleteService
AutocompleteService
ไม่เพิ่มการควบคุม UI แต่กลับแสดงผลอาร์เรย์ของออบเจ็กต์การคาดการณ์ ซึ่งแต่ละรายการมีข้อความการคาดการณ์ ข้อมูลอ้างอิง และรายละเอียดว่าผลลัพธ์ตรงกับข้อมูลที่ผู้ใช้ป้อนอย่างไร
ซึ่งมีประโยชน์ในกรณีที่คุณต้องการควบคุมอินเทอร์เฟซผู้ใช้ได้มากกว่าที่ Autocomplete
และ SearchBox
อธิบายไว้ข้างต้น
AutocompleteService
แสดงเมธอดต่อไปนี้
getPlacePredictions()
แสดงผลลัพธ์การคาดคะเนสถานที่ หมายเหตุ: "สถานที่" อาจเป็นสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือจุดที่น่าสนใจที่โดดเด่นตามที่ Places API กำหนดgetQueryPredictions()
จะแสดงรายการการคาดการณ์เพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่ Places API กำหนด) และข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ป้อน "pizza in new" รายการตัวเลือกอาจมีวลี "pizza in New York, NY" รวมถึงชื่อร้านพิซซ่าต่างๆ
ทั้ง 2 วิธีข้างต้นจะแสดงผลอาร์เรย์ของออบเจ็กต์การคาดคะเนในรูปแบบต่อไปนี้
description
คือการคาดการณ์ที่ตรงกันdistance_meters
คือระยะทางเป็นเมตรของสถานที่จากAutocompletionRequest.origin
ที่ระบุmatched_substrings
มีชุดสตริงย่อยในคำอธิบายที่ตรงกับองค์ประกอบในอินพุตของผู้ใช้ ซึ่งมีประโยชน์สำหรับการไฮไลต์สตริงย่อยเหล่านั้นในแอปพลิเคชัน ในหลายๆ กรณี คําค้นหาจะปรากฏเป็นสตริงย่อยของช่องคําอธิบายlength
คือความยาวของสตริงย่อยoffset
คือออฟเซ็ตอักขระที่วัดจากจุดเริ่มต้นของสตริงคำอธิบายซึ่งมีสตริงย่อยที่ตรงกันปรากฏอยู่
place_id
คือตัวระบุที่เป็นข้อความซึ่งระบุสถานที่อย่างเจาะจง หากต้องการเรียกข้อมูลเกี่ยวกับสถานที่ ให้ส่งตัวระบุนี้ในช่องplaceId
ของคำขอรายละเอียดสถานที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีอ้างอิงสถานที่ด้วยรหัสสถานที่terms
คืออาร์เรย์ที่มีองค์ประกอบของข้อความค้นหา สำหรับสถานที่ แต่ละองค์ประกอบมักจะประกอบกันเป็นส่วนหนึ่งในที่อยู่offset
คือออฟเซ็ตอักขระที่วัดจากจุดเริ่มต้นของสตริงคำอธิบายซึ่งมีสตริงย่อยที่ตรงกันปรากฏอยู่value
คือคําที่ตรงกัน
ตัวอย่างด้านล่างจะดำเนินการตามคำขอการคาดการณ์คำค้นหาสำหรับวลี "pizza near" และแสดงผลลัพธ์เป็นรายการ
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 รายการจะทำให้เซสชันการเติมข้อความอัตโนมัติเหล่านั้นใช้งานไม่ได้ และระบบจะเรียกเก็บเงินคำขอการเติมข้อความอัตโนมัติทั้งหมดในเซสชันที่ไม่ถูกต้องแยกกันโดยใช้ Autocomplete 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" สําหรับการค้นหาแบบข้อความ เช่น "พิซซ่าในนิวยอร์ก" ข้อความจะแสดงข้อความค้นหาทั้งหมด โดยค่าเริ่มต้น 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 หรือการควบคุม UI ของฟีเจอร์การเติมข้อความอัตโนมัติของสถานที่ (เดิม) ใน Places SDK สำหรับ iOS
- ทําความเข้าใจช่องข้อมูลการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ที่สําคัญตั้งแต่เริ่มต้น
- ช่องการถ่วงน้ำหนักตามสถานที่ตั้งและการจํากัดสถานที่ตั้งเป็นช่องที่ไม่บังคับ แต่อาจส่งผลอย่างมากต่อประสิทธิภาพของฟีเจอร์เติมข้อความอัตโนมัติ
- ใช้การจัดการข้อผิดพลาดเพื่อให้แอปทำงานได้อย่างราบรื่นหาก API แสดงข้อผิดพลาด
- ตรวจสอบว่าแอปของคุณจัดการในกรณีที่ไม่มีการเลือกและเสนอวิธีให้ผู้ใช้ดำเนินการต่อ
แนวทางปฏิบัติแนะนำในการใช้ต้นทุนให้เกิดประโยชน์สูงสุด
การใช้ต้นทุนให้เกิดประโยชน์สูงสุดขั้นพื้นฐาน
หากต้องการเพิ่มประสิทธิภาพต้นทุนในการใช้บริการการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ให้ใช้มาสก์ช่องในวิดเจ็ตรายละเอียดสถานที่ (เดิม) และการเติมข้อความอัตโนมัติของสถานที่ (เดิม) เพื่อแสดงเฉพาะช่องข้อมูลสถานที่ที่คุณต้องการ
การเพิ่มประสิทธิภาพต้นทุนขั้นสูง
ลองใช้ Place Autocomplete (เดิม) แบบเป็นโปรแกรมเพื่อเข้าถึงราคาตามคำขอและขอผลลัพธ์ Geocoding API เกี่ยวกับสถานที่ที่เลือกแทนรายละเอียดสถานที่ (เดิม) ราคาต่อคำขอที่จับคู่กับ Geocoding API จะประหยัดกว่าราคาต่อเซสชัน (ตามเซสชัน) หากเป็นไปตามเงื่อนไขทั้ง 2 ข้อต่อไปนี้
- หากต้องการเพียงละติจูด/ลองจิจูดหรือที่อยู่ของสถานที่ที่ผู้ใช้เลือก Geocoding API จะแสดงข้อมูลนี้ในราคาที่ถูกกว่าการเรียกใช้รายละเอียดสถานที่ (เดิม)
- หากผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติภายในคำขอการคาดคะเนการเติมข้อความอัตโนมัติ (เดิม) ของสถานที่โดยเฉลี่ย 4 คำขอหรือน้อยกว่านั้น ราคาต่อคำขออาจคุ้มค่ากว่าราคาต่อเซสชัน
แอปพลิเคชันของคุณต้องใช้ข้อมูลอื่นนอกเหนือจากที่อยู่และละติจูด/ลองจิจูดของการคาดการณ์ที่เลือกไหม
ใช่ ต้องมีรายละเอียดเพิ่มเติม
ใช้ฟีเจอร์ Place Autocomplete (เดิม) ตามเซสชันกับรายละเอียดสถานที่ (เดิม)
เนื่องจากแอปพลิเคชันของคุณต้องใช้รายละเอียดสถานที่ (เดิม) เช่น ชื่อสถานที่ สถานะธุรกิจ หรือเวลาทำการ การติดตั้งใช้งานการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ควรใช้โทเค็นเซสชัน (แบบเป็นโปรแกรมหรือฝังไว้ในวิดเจ็ต JavaScript, Android หรือ iOS) ต่อเซสชันบวก SKU ข้อมูลสถานที่ที่เกี่ยวข้อง ทั้งนี้ขึ้นอยู่กับช่องข้อมูลสถานที่ที่คุณขอ1
การติดตั้งใช้งานวิดเจ็ต
การจัดการเซสชันจะฝังอยู่ในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมถึงคําขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม) และคําขอรายละเอียดสถานที่ (เดิม) ในการคาดคะเนที่เลือก อย่าลืมระบุพารามิเตอร์ fields
เพื่อให้แน่ใจว่าคุณขอเฉพาะช่องข้อมูลสถานที่ที่ต้องการ
การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอ Place Autocomplete (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดการณ์ที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากคำตอบของฟีเจอร์ Place Autocomplete (เดิม)
- โทเค็นเซสชันที่ใช้ในคำขอ Place Autocomplete (เดิม)
- พารามิเตอร์
fields
ที่ระบุช่องข้อมูลสถานที่ที่ต้องการ
ไม่ ต้องใช้เฉพาะที่อยู่และตำแหน่ง
Geocoding API อาจเป็นตัวเลือกที่ประหยัดกว่ารายละเอียดสถานที่ (เดิม) สําหรับแอปพลิเคชันของคุณ ทั้งนี้ขึ้นอยู่กับประสิทธิภาพของการใช้ Place Autocomplete (เดิม) ประสิทธิภาพของฟีเจอร์เติมข้อความอัตโนมัติของสถานที่ (เดิม) ของแต่ละแอปพลิเคชันจะแตกต่างกันไปตามสิ่งที่ผู้ใช้ป้อน ตำแหน่งที่ใช้แอปพลิเคชัน และการใช้แนวทางปฏิบัติแนะนำในการเพิ่มประสิทธิภาพหรือไม่
หากต้องการตอบคําถามต่อไปนี้ ให้วิเคราะห์จํานวนตัวอักษรที่ผู้ใช้พิมพ์โดยเฉลี่ยก่อนที่จะเลือกการคาดคะเนการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ในแอปพลิเคชัน
ผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติ (เดิม) ของสถานที่ในคำขอ 4 รายการหรือน้อยกว่าโดยเฉลี่ยหรือไม่
ใช่
ใช้ฟีเจอร์การเติมข้อความอัตโนมัติของสถานที่ (เดิม) แบบเป็นโปรแกรมโดยไม่ต้องใช้โทเค็นเซสชัน และเรียกใช้ Geocoding API ในการคาดคะเนสถานที่ที่เลือก
Geocoding API จะแสดงที่อยู่และพิกัดละติจูด/ลองจิจูด การส่งคําขอ Place Autocomplete (เดิม) - ต่อคําขอ 4 รายการบวกการเรียกใช้ Geocoding API เกี่ยวกับการคาดคะเนสถานที่ที่เลือกมีต้นทุนน้อยกว่าต้นทุน Place Autocomplete (เดิม) ต่อเซสชันต่อเซสชัน1
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้คำที่คาดเดาซึ่งต้องการโดยใช้อักขระน้อยลง
ไม่
ใช้ฟีเจอร์ Place Autocomplete (เดิม) ตามเซสชันกับรายละเอียดสถานที่ (เดิม)
เนื่องจากจำนวนคำขอโดยเฉลี่ยที่คุณคาดว่าจะส่งก่อนที่ผู้ใช้จะเลือกการคาดคะเนของฟีเจอร์การเติมข้อความอัตโนมัติของสถานที่ (เดิม) สูงกว่าต้นทุนของการเรียกเก็บเงินต่อเซสชัน การติดตั้งใช้งานฟีเจอร์การเติมข้อความอัตโนมัติของสถานที่ (เดิม) จึงควรใช้โทเค็นเซสชันสำหรับทั้งคำขอฟีเจอร์การเติมข้อความอัตโนมัติของสถานที่ (เดิม) และคำขอรายละเอียดสถานที่ (เดิม) ที่เชื่อมโยงต่อเซสชัน1
การติดตั้งใช้งานวิดเจ็ต
การจัดการเซสชันจะฝังอยู่ในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมถึงคําขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม) และคําขอรายละเอียดสถานที่ (เดิม) ในการคาดคะเนที่เลือก อย่าลืมระบุพารามิเตอร์ fields
เพื่อให้แน่ใจว่าคุณขอเฉพาะช่องข้อมูลพื้นฐานเท่านั้น
การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอ Place Autocomplete (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดการณ์ที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากคำตอบของฟีเจอร์ Place Autocomplete (เดิม)
- โทเค็นเซสชันที่ใช้ในคำขอ Place Autocomplete (เดิม)
- พารามิเตอร์
fields
ที่ระบุฟิลด์ข้อมูลพื้นฐาน เช่น ที่อยู่และเรขาคณิต
พิจารณาเลื่อนเวลาคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม)
คุณสามารถใช้กลยุทธ์ต่างๆ เช่น เลื่อนเวลาคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม) จนกว่าผู้ใช้จะพิมพ์อักขระ 3-4 ตัวแรก เพื่อให้แอปพลิเคชันของคุณส่งคำขอน้อยลง ตัวอย่างเช่น การส่งคําขอ Place Autocomplete (เดิม) สําหรับอักขระแต่ละตัวหลังจากผู้ใช้พิมพ์อักขระที่ 3 หมายความว่าหากผู้ใช้พิมพ์อักขระ 7 ตัวแล้วเลือกการคาดคะเนที่คุณส่งคําขอ Geocoding API 1 รายการ ค่าใช้จ่ายทั้งหมดจะเป็น Place Autocomplete (เดิม) 4 รายการต่อคําขอ + การระบุพิกัดภูมิศาสตร์ 1 รายการ1
หากการเลื่อนเวลาคำขอทำให้คำขอแบบเป็นโปรแกรมโดยเฉลี่ยลดลงต่ำกว่า 4 รายการ คุณสามารถทําตามคําแนะนําสําหรับการติดตั้งใช้งาน Place Autocomplete (เดิม) ที่มีประสิทธิภาพด้วย Geocoding API โปรดทราบว่าผู้ใช้อาจมองว่าคำขอที่ล่าช้าเป็นเวลาในการตอบสนอง ซึ่งผู้ใช้อาจคาดหวังว่าจะเห็นการคาดคะเนทุกครั้งที่กดแป้นพิมพ์ใหม่
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้คำที่คาดเดาซึ่งต้องการโดยใช้อักขระน้อยลง
-
ดูค่าใช้จ่ายได้ที่รายการราคาของ Google Maps Platform
แนวทางปฏิบัติแนะนำด้านประสิทธิภาพ
หลักเกณฑ์ต่อไปนี้อธิบายวิธีเพิ่มประสิทธิภาพการเติมข้อความอัตโนมัติของสถานที่ (เดิม)
- เพิ่มข้อจํากัดของประเทศ การถ่วงน้ำหนักสถานที่ และ (สําหรับการใช้งานแบบเป็นโปรแกรม) ภาษาที่ต้องการให้กับการใช้งานการเติมข้อความอัตโนมัติของสถานที่ (เดิม) คุณไม่จำเป็นต้องระบุค่ากําหนดภาษาสำหรับวิดเจ็ต เนื่องจากวิดเจ็ตจะเลือกค่ากําหนดภาษาจากเบราว์เซอร์หรืออุปกรณ์เคลื่อนที่ของผู้ใช้
- หากการเติมข้อความอัตโนมัติของสถานที่ (เดิม) แสดงพร้อมกับแผนที่ คุณจะกำหนดตำแหน่งตามวิวพอร์ตของแผนที่ได้
- ในกรณีที่ผู้ใช้ไม่ได้เลือกการคาดคะเนที่เติมข้อความอัตโนมัติของสถานที่ (เดิม) รายการใดรายการหนึ่ง โดยทั่วไปแล้วเนื่องจากไม่มีรายการใดที่ตรงกับผลลัพธ์ที่ต้องการ คุณจึงใช้ข้อมูลที่ผู้ใช้ป้อนเดิมซ้ำได้เพื่อพยายามรับผลลัพธ์ที่เกี่ยวข้องมากขึ้น โดยทำดังนี้
- หากคุณต้องการให้ผู้ใช้ป้อนเฉพาะข้อมูลที่อยู่ ให้นําข้อมูลที่ผู้ใช้ป้อนเดิมไปใช้ซ้ำในการเรียกใช้ Geocoding API
- หากคุณต้องการให้ผู้ใช้ป้อนคำค้นหาสำหรับสถานที่ที่เฉพาะเจาะจงตามชื่อหรือที่อยู่ ให้ใช้คำขอค้นหาสถานที่ (เดิม) หากต้องการแสดงผลลัพธ์เฉพาะในบางภูมิภาค ให้ใช้การถ่วงน้ำหนักตามสถานที่
- ผู้ใช้ป้อนที่อยู่ของสถานที่ย่อย เช่น ที่อยู่ของห้องหรืออพาร์ตเมนต์ที่เฉพาะเจาะจงภายในอาคาร เช่น ที่อยู่ในเช็ก "Stroupežnického 3191/17, Praha" จะแสดงการคาดคะเนบางส่วนในการเติมข้อความอัตโนมัติของสถานที่ (เดิม)
- ผู้ใช้ที่ป้อนที่อยู่ที่มีคำนำหน้าส่วนของถนน เช่น "23-30 29th St, Queens" ในนิวยอร์กซิตี้ หรือ "47-380 Kamehameha Hwy, Kaneohe" บนเกาะคาไวในฮาวาย
ขีดจำกัดการใช้งานและนโยบาย
โควต้า
ดูข้อมูลโควต้าและราคาได้ที่ เอกสารประกอบการใช้งานและการเรียกเก็บเงินสำหรับ Places API
นโยบาย
การใช้ Places Library, Maps JavaScript API ต้องเป็นไปตามนโยบายที่อธิบายไว้สำหรับ Places API