Place Autocomplete

นักพัฒนาแอปในเขตเศรษฐกิจยุโรป (EEA)
หมายเหตุ: ไลบรารีฝั่งเซิร์ฟเวอร์

หน้านี้อธิบายไลบรารีฝั่งไคลเอ็นต์ที่พร้อมใช้งานกับ 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 ที่เปิดใช้

  1. ไปที่ Google Cloud Console
  2. คลิกปุ่มเลือกโปรเจ็กต์ จากนั้นเลือกโปรเจ็กต์เดียวกันกับที่คุณตั้งค่า สำหรับ Maps JavaScript API แล้วคลิกเปิด
  3. จากรายการ API ในแดชบอร์ด ให้มองหา Places API
  4. หากเห็น 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() คุณ สามารถระบุค่าใดค่าหนึ่งต่อไปนี้

ระบบจะปฏิเสธคำขอในกรณีต่อไปนี้

การสาธิตการเติมข้อความอัตโนมัติของ Places จะแสดงความแตกต่างในการคาดคะเนระหว่างสถานที่ประเภทต่างๆ

ดูเดโม

การรับข้อมูลสถานที่

เมื่อผู้ใช้เลือกสถานที่จากการคาดคะเนที่แนบมากับช่องข้อความเติมข้อความอัตโนมัติ บริการจะทริกเกอร์เหตุการณ์ place_changed วิธีดูรายละเอียดสถานที่ มีดังนี้

  1. สร้างตัวแฮนเดิลเหตุการณ์สำหรับเหตุการณ์ place_changed และเรียกใช้ addListener() ในออบเจ็กต์ Autocomplete เพื่อเพิ่มตัวแฮนเดิล
  2. เรียกใช้ 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 จะแสดงรายการการคาดคะเนเพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่กำหนดโดย 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 API
  • getQueryPredictions() จะแสดงรายการคำที่คาดการณ์เพิ่มเติม ซึ่งอาจรวมถึงสถานที่ (ตามที่กำหนดโดย 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 สำหรับวิดเจ็ตการเติมข้อความอัตโนมัติและ
      SearchBox
คลาส CSS สำหรับวิดเจ็ตการเติมข้อความอัตโนมัติและ 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 (เดิม)

ส่วนนี้อธิบายแนวทางปฏิบัติแนะนำที่จะช่วยให้คุณใช้บริการ การเติมข้อความอัตโนมัติของสถานที่ (เดิม) ได้อย่างเต็มที่

หลักเกณฑ์ทั่วไปมีดังนี้

แนวทางปฏิบัติแนะนำในการใช้ต้นทุนให้เกิดประโยชน์สูงสุด

การเพิ่มประสิทธิภาพต้นทุนขั้นพื้นฐาน

หากต้องการเพิ่มประสิทธิภาพค่าใช้จ่ายในการใช้บริการการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ให้ใช้มาสก์ฟิลด์ในวิดเจ็ตรายละเอียดสถานที่ (เดิม) และการเติมข้อความอัตโนมัติของสถานที่ (เดิม) เพื่อแสดงเฉพาะ ฟิลด์ข้อมูลสถานที่ที่คุณต้องการ

การเพิ่มประสิทธิภาพต้นทุนขั้นสูง

พิจารณาการติดตั้งใช้งาน 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 (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดคะเนที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้

  1. รหัสสถานที่จากการตอบกลับของ Place Autocomplete (เดิม)
  2. โทเค็นเซสชันที่ใช้ในคำขอ Place Autocomplete (เดิม)
  3. พารามิเตอร์ 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 (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดคะเนที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้

  1. รหัสสถานที่จากการตอบกลับของ Place Autocomplete (เดิม)
  2. โทเค็นเซสชันที่ใช้ในคำขอ Place Autocomplete (เดิม)
  3. พารามิเตอร์ fields ที่ระบุฟิลด์ข้อมูลพื้นฐาน เช่น ที่อยู่และเรขาคณิต

พิจารณาการหน่วงเวลาคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม)
คุณสามารถใช้กลยุทธ์ต่างๆ เช่น การหน่วงเวลาคำขอการเติมข้อความอัตโนมัติของสถานที่ (เดิม) จนกว่าผู้ใช้จะพิมพ์อักขระ 3-4 ตัวแรก เพื่อให้แอปพลิเคชันของคุณส่งคำขอน้อยลง เช่น การส่งคำขอ Place Autocomplete (เดิม) สำหรับอักขระแต่ละตัวหลังจากที่ผู้ใช้พิมพ์อักขระตัวที่ 3 หมายความว่าหากผู้ใช้พิมพ์อักขระ 7 ตัว แล้วเลือกการคาดคะเนที่คุณส่งคำขอ Geocoding API 1 รายการ ค่าใช้จ่ายทั้งหมดจะเป็นค่าใช้จ่ายสำหรับ Place Autocomplete (เดิม) 4 รายการต่อคำขอ + Geocoding1

หากการหน่วงเวลาคำขอช่วยให้คำขอแบบเป็นโปรแกรมโดยเฉลี่ยต่ำกว่า 4 ได้ คุณสามารถทำตามคำแนะนำในการติดตั้งใช้งาน Place Autocomplete (เดิม) ที่มีประสิทธิภาพด้วย Geocoding API โปรดทราบว่าการหน่วงเวลาคำขออาจทำให้ผู้ใช้ที่คาดหวังว่าจะเห็นการคาดคะเนทุกครั้งที่กดแป้นพิมพ์มองว่าเป็นการตอบสนองที่ช้า

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


  1. ดูค่าใช้จ่ายได้ที่รายการราคาของ Google Maps Platform

แนวทางปฏิบัติแนะนำด้านประสิทธิภาพ

หลักเกณฑ์ต่อไปนี้อธิบายวิธีเพิ่มประสิทธิภาพการเติมข้อความอัตโนมัติของสถานที่ (เดิม)

  • เพิ่มข้อจำกัดด้านประเทศ การกำหนดค่าตำแหน่ง และ (สำหรับการติดตั้งใช้งานแบบเป็นโปรแกรม) ค่ากำหนดภาษาลงในการติดตั้งใช้งานการเติมข้อความอัตโนมัติของสถานที่ (เดิม) ไม่จำเป็นต้องตั้งค่าภาษาสำหรับวิดเจ็ต เนื่องจากวิดเจ็ตจะเลือกค่ากำหนดภาษาจากเบราว์เซอร์หรืออุปกรณ์เคลื่อนที่ของผู้ใช้
  • หากการเติมข้อความอัตโนมัติของสถานที่ (เดิม) มาพร้อมกับแผนที่ คุณสามารถกำหนดตำแหน่งตามวิวพอร์ตของแผนที่ได้
  • ในกรณีที่ผู้ใช้ไม่เลือกการคาดคะเนจาก Place Autocomplete (เดิม) โดยทั่วไป เนื่องจากการคาดคะเนเหล่านั้นไม่ใช่ที่อยู่ผลลัพธ์ที่ต้องการ คุณสามารถนำอินพุตเดิมของผู้ใช้มาใช้ซ้ำเพื่อพยายามรับผลลัพธ์ที่เกี่ยวข้องมากขึ้นได้โดยทำดังนี้
    • หากคาดว่าผู้ใช้จะป้อนเฉพาะข้อมูลที่อยู่ ให้ใช้ข้อมูลที่ผู้ใช้ป้อนเดิมซ้ำ ในการเรียก Geocoding API
    • หากคาดว่าผู้ใช้จะป้อนคำค้นหาสถานที่ที่เฉพาะเจาะจงตามชื่อหรือที่อยู่ ให้ใช้คำขอค้นหาสถานที่ (เดิม) หากคาดหวังผลลัพธ์ในภูมิภาคที่เฉพาะเจาะจงเท่านั้น ให้ใช้ การเอนเอียงตำแหน่ง
    สถานการณ์อื่นๆ ที่ควรใช้ Geocoding API เป็นข้อมูลสำรอง ได้แก่
    • ผู้ใช้ที่ป้อนที่อยู่ของสถานที่ย่อย เช่น ที่อยู่ของยูนิตหรืออพาร์ตเมนต์ที่เฉพาะเจาะจง ภายในอาคาร เช่น ที่อยู่ "Stroupežnického 3191/17, Praha" ในเช็ก จะให้การคาดคะเนบางส่วนใน Place Autocomplete (เดิม)
    • ผู้ใช้ที่ป้อนที่อยู่ที่มีคำนำหน้าส่วนถนน เช่น "23-30 29th St, Queens" ใน นิวยอร์กซิตี้ หรือ "47-380 Kamehameha Hwy, Kaneohe" บนเกาะ Kauai ในฮาวาย

ขีดจำกัดการใช้งาน

โควต้า

ดูข้อมูลโควต้าและราคาได้ที่ เอกสารประกอบเกี่ยวกับการใช้งานและการเรียกเก็บเงินสำหรับ Places API