บทนำ
การเติมข้อความอัตโนมัติเป็นฟีเจอร์ของไลบรารี Places ใน Maps JavaScript API คุณสามารถใช้การเติมข้อความอัตโนมัติเพื่อ กับพฤติกรรมการค้นหาแบบล่วงหน้าของช่องค้นหา Google Maps บริการเติมข้อความอัตโนมัติสามารถจับคู่กับคำเต็มและสตริงย่อย โดยจะแก้ไขชื่อสถานที่ ที่อยู่ และ Plus Codes ดังนั้น แอปพลิเคชันจึงสามารถส่งข้อความค้นหาในขณะที่ผู้ใช้พิมพ์ไปยัง สามารถคาดเดาสถานที่ได้ทันที ตามที่กำหนดโดย Places API "สถานที่" อาจเป็นสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือ จุดที่น่าสนใจ
เริ่มต้นใช้งาน
ก่อนที่จะใช้ไลบรารีสถานที่ใน Maps JavaScript API โปรดตรวจสอบ ได้เปิดใช้ Places API ใน Google Cloud Console ที่คุณสร้างสำหรับ Maps JavaScript API
วิธีดูรายการ API ที่เปิดใช้มีดังนี้
- ไปที่คอนโซล Google Cloud
- คลิกปุ่มเลือกโปรเจ็กต์ จากนั้นเลือกโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สำหรับ Maps JavaScript API แล้วคลิกเปิด
- จากรายการ API ในแดชบอร์ด ให้มองหา Places API
- หากเห็น API ในรายการ แสดงว่าทุกอย่างเรียบร้อยแล้ว หากไม่อยู่ในรายการ API
เปิดใช้งาน:
- ที่ด้านบนของหน้า ให้เลือกเปิดใช้ API เพื่อแสดงแท็บคลัง หรือจากเมนูด้านซ้าย เลือกคลัง
- ค้นหา Places API แล้วเลือกจาก รายการผลลัพธ์
- เลือกเปิดใช้ เมื่อกระบวนการเสร็จสมบูรณ์แล้ว Places API จะปรากฏในรายการ API ในหน้าแดชบอร์ด
กำลังโหลดคลัง
บริการ Places เป็นไลบรารีแบบสแตนด์อโลนแยกจากโค้ด Maps JavaScript API หลัก หากต้องการใช้ฟังก์ชันที่อยู่ในไลบรารีนี้ คุณต้องโหลดไลบรารีก่อนโดยใช้พารามิเตอร์ libraries
ใน URL ของบูตสแtrap ของ 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 class)
ด้านล่างนี้เป็นสรุปของชั้นเรียนที่มีให้
-
Autocomplete
เพิ่มช่องป้อนข้อความลงในหน้าเว็บ และตรวจสอบช่องนั้นเพื่อหารายการอักขระ ขณะที่ผู้ใช้ป้อนข้อความ ระบบจะแสดงการคาดคะเนสถานที่ในรูปแบบรายการตัวเลือกแบบเลื่อนลง เมื่อผู้ใช้เลือกสถานที่จากรายการ ระบบจะแสดงข้อมูลเกี่ยวกับสถานที่นั้นไปยังออบเจ็กต์การเติมข้อความอัตโนมัติ และแอปพลิเคชันจะเรียกข้อมูลดังกล่าวได้ ดูรายละเอียดได้ด้านล่าง -
SearchBox
เพิ่มช่องป้อนข้อความลงในหน้าเว็บในลักษณะเดียวกับAutocomplete
ความแตกต่างมีดังนี้- ความแตกต่างหลักอยู่ที่ผลลัพธ์ที่ปรากฏในรายการตัวเลือก วัสดุของ
SearchBox
รายการเพิ่มเติมของการคาดคะเน ซึ่งอาจรวมถึงสถานที่ต่างๆ (ตามที่กำหนดโดย Places API) พร้อมกับข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ ป้อน "พิซซ่าใน ใหม่" รายการตัวเลือกอาจมีข้อความ "พิซซ่าในกรุงเทพมหานคร" ตลอดจนชื่อของพิซซ่าชนิดต่างๆ เต้ารับ SearchBox
มีตัวเลือกในการจำกัดการค้นหาน้อยกว่าAutocomplete
ในกรณีแรก คุณสามารถกําหนดให้ระบบค้นหาLatLngBounds
หนึ่งๆ เป็นหลัก ในกรณีหลัง คุณสามารถจำกัดการค้นหาให้อยู่ในบางประเทศและบางประเภทสถานที่ รวมถึงกำหนดขอบเขตได้ สำหรับข้อมูลเพิ่มเติม โปรดดู ด้านล่าง
- ความแตกต่างหลักอยู่ที่ผลลัพธ์ที่ปรากฏในรายการตัวเลือก วัสดุของ
- คุณสามารถสร้างออบเจ็กต์
AutocompleteService
เพื่อดึงข้อมูลการคาดการณ์แบบเป็นโปรแกรมได้ โทรหาgetPlacePredictions()
ถึง เรียกข้อมูลสถานที่ที่ตรงกัน หรือโทรไปที่getQueryPredictions()
เพื่อ ดึงข้อมูลสถานที่ที่ตรงกันและข้อความค้นหาที่แนะนำ หมายเหตุ:AutocompleteService
จะไม่เพิ่มการควบคุม UI ใดๆ แต่เมธอดข้างต้นจะแสดงผลอาร์เรย์ของออบเจ็กต์การคาดการณ์แทน ออบเจ็กต์การคาดการณ์แต่ละรายการจะมีข้อความของการคาดการณ์ รวมถึงข้อมูลอ้างอิงและรายละเอียดว่าผลลัพธ์ตรงกับข้อมูลที่ผู้ใช้ป้อนอย่างไร ดูรายละเอียดด้านล่าง
การเพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติ
Autocomplete
วิดเจ็ตสร้างฟิลด์ป้อนข้อความในหน้าเว็บของคุณ แสดงการคาดคะเนสถานที่ต่างๆ ในตัวเลือก UI
และแสดงรายละเอียดสถานที่ตามคำขอ getPlace()
แต่ละรายการใน
รายการสำหรับเลือกสอดคล้องกับสถานที่แห่งเดียว (ตามที่กำหนดโดย Places API)
ตัวสร้าง Autocomplete
จะใช้อาร์กิวเมนต์ 2 รายการดังนี้
- องค์ประกอบ HTML
input
ประเภท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 ข้อมูลสถานที่ ที่คุณไม่ต้องการ รวมพร็อพเพอร์ตี้ 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
ช่วยให้ผู้ใช้ดำเนินการทางภูมิศาสตร์แบบข้อความได้
การค้นหา เช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านรองเท้าใกล้ถนนรามอินทรา"
คุณสามารถแนบ SearchBox
กับช่องข้อความ และ
มีการป้อน บริการจะแสดงการคาดการณ์ใน
จากเมนูแบบเลื่อนลง
SearchBox
แสดงรายการการคาดคะเนเพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่ Places API กำหนด) บวกข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ป้อน "pizza in new" รายการตัวเลือกอาจประกอบด้วยวลี "pizza in New York, NY" รวมถึงชื่อร้านพิซซ่าต่างๆ เมื่อผู้ใช้เลือกสถานที่จากรายการ
ข้อมูลเกี่ยวกับสถานที่นั้นจะถูกส่งกลับไปยังออบเจ็กต์ SearchBox และสามารถ
จากแอปพลิเคชันของคุณ
ตัวสร้าง SearchBox
จะใช้อาร์กิวเมนต์ 2 รายการดังนี้
- องค์ประกอบ HTML
input
ประเภทtext
นี่คือ ช่องป้อนข้อมูลที่บริการSearchBox
จะตรวจสอบและ และแนบผลลัพธ์ไปที่ - อาร์กิวเมนต์
options
ซึ่งมีค่า พร็อพเพอร์ตี้bounds
:bounds
เป็นgoogle.maps.LatLngBounds
ที่ระบุพื้นที่ที่จะค้นหาสถานที่ ผลลัพธ์ มีความลำเอียงต่อ แต่ไม่จำกัดเพียง สถานที่ที่อยู่ภายใน ขอบเขตเหล่านี้
โค้ดต่อไปนี้ใช้พารามิเตอร์ขอบเขตเพื่อทำให้ผลลัพธ์คลาดเคลื่อน ไปยังสถานที่ภายในพื้นที่ทางภูมิศาสตร์ที่ระบุ โดยใช้ พิกัด Laitude/ลองจิจูด
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
เป็นคำที่ตรงกัน
ตัวอย่างด้านล่างจะดำเนินการตามคำขอการคาดคะเนการค้นหาสำหรับวลี "พิซซ่าใกล้ๆ" และแสดงผลลัพธ์ในรายการ
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 หรือ Places SDK สำหรับ iOS การควบคุม UI การเติมข้อความอัตโนมัติ
- ทําความเข้าใจช่องข้อมูลการเติมข้อความอัตโนมัติของสถานที่สําคัญตั้งแต่เริ่มต้น
- ฟิลด์การให้น้ำหนักสถานที่และการจำกัดตำแหน่งเป็นฟิลด์ที่ไม่บังคับแต่สามารถใส่ได้ จะมีผลอย่างมากต่อประสิทธิภาพการเติมข้อความอัตโนมัติ
- ใช้การจัดการข้อผิดพลาดเพื่อดูแลให้แอปมีประสิทธิภาพลดลง หาก API แสดงผลข้อผิดพลาด
- ตรวจสอบว่าแอปของคุณแฮนเดิลเมื่อไม่ได้เลือกและเสนอทางเลือกให้กับผู้ใช้ เพื่อดำเนินการต่อ
แนวทางปฏิบัติแนะนำในการใช้ต้นทุนให้เกิดประโยชน์สูงสุด
การเพิ่มประสิทธิภาพต้นทุนขั้นพื้นฐาน
หากต้องการเพิ่มประสิทธิภาพต้นทุนในการใช้บริการการเติมข้อความอัตโนมัติของสถานที่ ให้ใช้มาสก์ช่องในรายละเอียดสถานที่และวิดเจ็ตการเติมข้อความอัตโนมัติของสถานที่เพื่อแสดงเฉพาะช่องข้อมูลสถานที่ที่คุณต้องการ
การเพิ่มประสิทธิภาพต้นทุนขั้นสูง
พิจารณาการใช้การเติมข้อความอัตโนมัติแบบเป็นโปรแกรมเพื่อเข้าถึงการกำหนดราคาตามคำขอ และขอผลลัพธ์ Geocoding API เกี่ยวกับสถานที่ที่เลือกแทนรายละเอียดสถานที่ ราคาต่อคำขอที่จับคู่กับ Geocoding API จะประหยัดกว่าราคาต่อเซสชัน (ตามเซสชัน) หากเป็นไปตามเงื่อนไขทั้ง 2 ข้อต่อไปนี้
- หากต้องการเพียงละติจูด/ลองจิจูดหรือที่อยู่ของสถานที่ที่ผู้ใช้เลือก Geocoding API จะแสดงข้อมูลนี้ในราคาที่ถูกกว่าการเรียกใช้รายละเอียดสถานที่
- หากผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติภายในคำขอการคาดการณ์การเติมข้อความอัตโนมัติโดยเฉลี่ย 4 คำขอหรือน้อยกว่า การกำหนดราคาต่อคำขออาจคุ้มค่ากว่าการกำหนดราคาต่อเซสชัน
แอปพลิเคชันของคุณต้องใช้ข้อมูลอื่นนอกเหนือจากที่อยู่และละติจูด/ลองจิจูดของการคาดการณ์ที่เลือกไหม
ใช่ ต้องขอรายละเอียดเพิ่มเติม
ใช้การเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ตามเซสชันพร้อมรายละเอียดสถานที่
เนื่องจากแอปพลิเคชันของคุณจำเป็นต้องมีรายละเอียดสถานที่ เช่น ชื่อสถานที่ สถานะธุรกิจ หรือเวลาทำการ การใช้การเติมข้อความอัตโนมัติในสถานที่ควรใช้โทเค็นเซสชัน (แบบเป็นโปรแกรมหรือมีอยู่ในวิดเจ็ต JavaScript, Android หรือ iOS) โดยมีค่าใช้จ่ายรวม $0.017 ต่อเซสชัน และ SKU ข้อมูลสถานที่ โดยขึ้นอยู่กับฟิลด์ข้อมูลสถานที่ที่คุณขอ
การติดตั้งใช้งานวิดเจ็ต
การจัดการเซสชันจะฝังอยู่ในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมทั้งคำขอเติมข้อความอัตโนมัติและคำขอรายละเอียดสถานที่ในการคาดการณ์ที่เลือก อย่าลืมระบุพารามิเตอร์ fields
เพื่อให้แน่ใจว่าคุณขอเฉพาะ
วางฟิลด์ข้อมูลที่ต้องการ
การใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ เมื่อขอรายละเอียดสถานที่เกี่ยวกับการคาดการณ์ที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากคำตอบของฟีเจอร์ Place Autocomplete
- โทเค็นเซสชันที่ใช้ในคำขอการเติมข้อความอัตโนมัติของสถานที่
- พารามิเตอร์
fields
ที่ระบุ วางฟิลด์ข้อมูลที่ต้องการ
ไม่ ต้องใช้เฉพาะที่อยู่และตำแหน่ง
Geocoding API จะเป็นตัวเลือกที่ประหยัดต้นทุนได้ดีกว่ารายละเอียดสถานที่สำหรับแอปพลิเคชันของคุณ ทั้งนี้ขึ้นอยู่กับประสิทธิภาพการใช้งานการเติมข้อความอัตโนมัติใน Place ของคุณ ประสิทธิภาพการเติมข้อความอัตโนมัติของแอปพลิเคชันทุกตัวจะแตกต่างกันไปโดยขึ้นอยู่กับสิ่งที่ผู้ใช้ป้อน ตำแหน่งที่ใช้แอปพลิเคชัน และมีการใช้งานแนวทางปฏิบัติแนะนำสำหรับการเพิ่มประสิทธิภาพหรือไม่
หากต้องการตอบคําถามต่อไปนี้ ให้วิเคราะห์จํานวนตัวอักษรที่ผู้ใช้พิมพ์โดยเฉลี่ยก่อนที่จะเลือกการคาดคะเนการเติมข้อความอัตโนมัติของสถานที่ในแอปพลิเคชัน
ผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติใน 4 คำขอโดยเฉลี่ยหรือไม่
ใช่
ใช้ฟีเจอร์การเติมข้อความอัตโนมัติของสถานที่แบบเป็นโปรแกรมโดยไม่ต้องใช้โทเค็นเซสชัน และเรียกใช้ Geocoding API ในการคาดคะเนสถานที่ที่เลือก
Geocoding API จะแสดงที่อยู่และพิกัดละติจูด/ลองจิจูดในราคา $0.005 ต่อคำขอ การส่งคําขอ Place Autocomplete - ต่อคําขอ 4 รายการจะมีค่าใช้จ่าย $0.01132 ดังนั้นต้นทุนทั้งหมดของคําขอ 4 รายการบวกการเรียกใช้ Geocoding API เกี่ยวกับการคาดคะเนสถานที่ที่เลือกจะเท่ากับ $0.01632 ซึ่งน้อยกว่าราคาของฟีเจอร์ Autocomplete ต่อเซสชันที่ $0.017 ต่อเซสชัน1
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้คำที่คาดเดาซึ่งต้องการโดยใช้อักขระน้อยลง
ไม่ได้
ใช้การเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ตามเซสชันพร้อมรายละเอียดสถานที่
เนื่องจากจำนวนคำขอเฉลี่ยที่คุณคาดว่าจะสร้างก่อนที่ผู้ใช้จะเลือกการคาดการณ์การเติมข้อความอัตโนมัติเกินราคาต่อเซสชัน การใช้การเติมข้อความอัตโนมัติในสถานที่ควรใช้โทเค็นเซสชันสำหรับทั้งคำขอเติมข้อความอัตโนมัติและคำขอรายละเอียดสถานที่ที่เกี่ยวข้อง โดยมีค่าใช้จ่ายรวม $0.017 ต่อเซสชัน1
การใช้งานวิดเจ็ต
การจัดการเซสชันจะมาพร้อมกับวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมถึงทั้งคำขอการเติมข้อความอัตโนมัติของสถานที่และคําขอรายละเอียดสถานที่ในการคาดคะเนที่เลือก ตรวจสอบว่าได้ระบุพารามิเตอร์ fields
แล้ว เพื่อให้แน่ใจว่าคุณขอเฉพาะช่องข้อมูลพื้นฐาน
การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้ โทเค็นเซสชันกับคำขอการเติมข้อความอัตโนมัติของสถานที่ เมื่อขอรายละเอียดสถานที่เกี่ยวกับการคาดการณ์ที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากการตอบกลับการเติมข้อความอัตโนมัติเกี่ยวกับสถานที่
- โทเค็นเซสชันที่ใช้ในคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่
- พารามิเตอร์
fields
ที่ระบุช่องข้อมูลพื้นฐาน เช่น ที่อยู่และเรขาคณิต
พิจารณาชะลอคำขอเติมสถานที่อัตโนมัติ
คุณสามารถใช้กลยุทธ์ต่างๆ เช่น ชะลอคำขอเติมสถานที่อัตโนมัติ จนกว่าผู้ใช้จะพิมพ์อักขระ 3 หรือ 4 ตัวแรกเพื่อให้แอปพลิเคชันส่งคำขอน้อยลง ตัวอย่างเช่น การสร้างคำขอการเติมข้อความอัตโนมัติสำหรับแต่ละอักขระหลังจากที่ผู้ใช้พิมพ์อักขระตัวที่ 3 หมายความว่าหากผู้ใช้พิมพ์อักขระตัวที่ 3 ตัว จากนั้นจะเลือกการคาดคะเนที่คุณขอ Geocoding API 1 รายการ ค่าใช้จ่ายรวมจะเท่ากับ $0.01632 (4 * $0.00283 การเติมข้อความอัตโนมัติต่อคำขอ + $0.005)1
หากความล่าช้าของคำขออาจทำให้คำขอแบบเป็นโปรแกรมโดยเฉลี่ยต่ำกว่า 4 ครั้ง คุณสามารถทำตามคำแนะนำในการใช้งานการเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ด้วย Geocoding API ที่มีประสิทธิภาพ โปรดทราบว่าผู้ใช้อาจมองว่าคำขอที่ล่าช้าเป็นเวลาในการตอบสนอง ซึ่งผู้ใช้อาจคาดหวังว่าจะเห็นการคาดคะเนทุกครั้งที่กดแป้นพิมพ์ใหม่
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้คำที่คาดเดาซึ่งต้องการโดยใช้อักขระน้อยลง
-
ค่าใช้จ่ายที่แสดงที่นี่เป็นสกุลเงิน USD โปรดดูข้อมูลราคาทั้งหมดในหน้าการเรียกเก็บเงินของ 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