Place Autocomplete

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

หน้านี้อธิบายไลบรารีฝั่งไคลเอ็นต์ที่พร้อมใช้งานกับ Maps JavaScript API หากต้องการใช้บริการเว็บ Places API ในเซิร์ฟเวอร์ โปรดดูไคลเอ็นต์ Node.js สำหรับบริการของ Google Maps หน้าเว็บที่ลิงก์นั้นยังแนะนำ Java Client, Python Client และ Go Client สำหรับบริการของ Google Maps ด้วย

บทนำ

การเติมข้อความอัตโนมัติเป็นฟีเจอร์ของไลบรารี Places ใน Maps JavaScript API คุณสามารถใช้การเติมข้อความอัตโนมัติเพื่อให้แอปพลิเคชันมีลักษณะการค้นหาแบบพิมพ์ล่วงหน้าของช่องค้นหา Google Maps บริการเติมข้อความอัตโนมัติสามารถจับคู่คำและสตริงย่อยทั้งหมดเพื่อแสดงชื่อสถานที่ ที่อยู่ และ Plus Codes ดังนั้นแอปพลิเคชันจึงสามารถส่งการค้นหาขณะที่ผู้ใช้พิมพ์เพื่อ แสดงการคาดคะเนสถานที่แบบเรียลไทม์ ตามที่กำหนดโดย Places API "สถานที่" อาจเป็นสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือจุดที่น่าสนใจที่โดดเด่น

เริ่มต้นใช้งาน

ก่อนใช้ไลบรารี Places ใน Maps JavaScript API ให้ตรวจสอบก่อน ว่าได้เปิดใช้ Places API ในคอนโซล Google Cloud แล้วในโปรเจ็กต์เดียวกัน กับที่ตั้งค่าไว้สำหรับ Maps JavaScript API

วิธีดูรายการ API ที่เปิดใช้

  1. ไปที่ คอนโซล Google Cloud
  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 รายการ ได้แก่

  • องค์ประกอบ HTML input ประเภท text นี่คือช่องป้อนข้อมูลที่บริการเติมข้อความอัตโนมัติ จะตรวจสอบและแนบผลลัพธ์
  • อาร์กิวเมนต์ AutocompleteOptions ซึ่งไม่บังคับ ซึ่งอาจมีพร็อพเพอร์ตี้ต่อไปนี้
    • อาร์เรย์ของข้อมูลfieldsที่จะรวมไว้ในPlace DetailsการตอบกลับสำหรับPlaceResultที่ผู้ใช้เลือก หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้หรือหากส่ง['ALL'] ระบบจะแสดงผลฟิลด์ที่มีอยู่ทั้งหมดและเรียกเก็บเงิน (ไม่แนะนำสำหรับการติดตั้งใช้งานจริง) ดูรายการฟิลด์ได้ที่ PlaceResult
    • อาร์เรย์ของ types ที่ ระบุประเภทที่ชัดเจนหรือคอลเล็กชันประเภทตามที่ระบุไว้ในประเภทที่รองรับ หากไม่ได้ระบุประเภท ระบบจะแสดงผลประเภททั้งหมด
    • bounds คือออบเจ็กต์ google.maps.LatLngBounds ที่ระบุ พื้นที่ที่จะค้นหาสถานที่ ผลการค้นหาจะเอนเอียงไปทางสถานที่ที่อยู่ภายในขอบเขตเหล่านี้ แต่ไม่ได้จำกัดอยู่เพียงเท่านั้น
    • strictBounds คือ boolean ที่ระบุว่า API ต้องแสดงเฉพาะ Places ที่อยู่ภายในภูมิภาคที่กำหนดโดย bounds ที่ระบุหรือไม่ API จะไม่แสดงผลลัพธ์ที่อยู่นอกภูมิภาคนี้แม้ว่าจะตรงกับข้อมูลจากผู้ใช้ก็ตาม
    • componentRestrictions ใช้เพื่อจำกัดผลลัพธ์ให้แสดงเฉพาะกลุ่มที่ต้องการได้ คุณใช้ componentRestrictions เพื่อกรองตามประเทศได้สูงสุด 5 ประเทศ โดยต้องส่งรหัสประเทศที่เข้ากันได้กับ ISO 3166-1 Alpha-2 ซึ่งมี 2 อักขระ หากต้องการส่งหลายประเทศ ให้ส่งเป็นรายการรหัสประเทศ

      หมายเหตุ: หากได้รับผลลัพธ์ที่ไม่คาดคิดเมื่อใช้รหัสประเทศ ให้ตรวจสอบว่าคุณใช้รหัสที่มีประเทศ เขตแดนขึ้นตรง และพื้นที่พิเศษที่น่าสนใจทางภูมิศาสตร์ที่คุณต้องการหรือไม่ คุณดูข้อมูลรหัสได้ที่ Wikipedia: รายชื่อรหัสประเทศ ISO 3166 หรือแพลตฟอร์มการเรียกดูออนไลน์ของ ISO

    • placeIdOnly ใช้เพื่อสั่งให้วิดเจ็ต Autocomplete ดึงเฉพาะรหัสสถานที่ได้ เมื่อเรียกใช้ getPlace() ในออบเจ็กต์ Autocomplete ระบบจะตั้งค่า PlaceResult ที่พร้อมใช้งานเป็น place id, types และ name เท่านั้น คุณใช้รหัสสถานที่ที่ระบบส่งคืนได้กับบริการ Places, Geocoding, Directions หรือ Distance Matrix

จำกัดการคาดคะเนการเติมข้อความอัตโนมัติ

โดยค่าเริ่มต้น Place Autocomplete จะแสดงสถานที่ทุกประเภท โดยจะให้ความสำคัญกับการคาดคะเนที่อยู่ใกล้กับตำแหน่งของผู้ใช้ และดึงข้อมูลทุกฟิลด์ข้อมูลที่มีอยู่สำหรับสถานที่ที่ผู้ใช้เลือก ตั้งค่าตัวเลือก Place Autocomplete เพื่อแสดงการคาดคะเนที่เกี่ยวข้องมากขึ้นตาม Use Case ของคุณ

ตั้งค่าตัวเลือกเมื่อสร้าง

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 Autocomplete คุณอ่านข้อมูลเพิ่มเติมเกี่ยวกับ 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 รายการ ได้แก่

  • องค์ประกอบ HTML input ประเภท 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 เพื่อปรับแต่งลักษณะที่ปรากฏของวิดเจ็ต

การดึงข้อมูลการคาดคะเนของ Place Autocomplete ด้วยโปรแกรม

หากต้องการดึงข้อมูลการคาดการณ์โดยใช้โปรแกรม ให้ใช้คลาส 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 องค์ประกอบภาพที่มีรายการการคาดคะเนที่บริการ Place Autocomplete ส่งคืน รายการนี้จะปรากฏเป็นรายการแบบเลื่อนลงใต้ วิดเจ็ต 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 (เดิม) ได้อย่างเต็มที่

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

  • วิธีที่เร็วที่สุดในการพัฒนาอินเทอร์เฟซผู้ใช้ที่ใช้งานได้คือการใช้ Maps JavaScript API วิดเจ็ต Place Autocomplete (เดิม) Places SDK สำหรับ Android วิดเจ็ต Place Autocomplete (เดิม) หรือ Places SDK สำหรับ iOS ตัวควบคุม UI Place Autocomplete (เดิม)
  • ทำความเข้าใจฟิลด์ข้อมูลที่สำคัญของ Place Autocomplete (เดิม) ตั้งแต่เริ่มต้น
  • ฟิลด์การเอนเอียงตามสถานที่ตั้งและข้อจำกัดด้านสถานที่ตั้งเป็นฟิลด์ที่ไม่บังคับ แต่ก็อาจ ส่งผลอย่างมากต่อประสิทธิภาพการเติมข้อความอัตโนมัติ
  • ใช้การจัดการข้อผิดพลาดเพื่อให้แน่ใจว่าแอปของคุณจะลดประสิทธิภาพลงอย่างราบรื่น หาก API แสดงข้อผิดพลาด
  • ตรวจสอบว่าแอปของคุณจัดการเมื่อไม่มีการเลือกและเสนอวิธีให้ผู้ใช้ ดำเนินการต่อ

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

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

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

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

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

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

แอปพลิเคชันของคุณต้องใช้ข้อมูลอื่นนอกเหนือจากที่อยู่และละติจูด/ลองจิจูดของการคาดคะเนที่เลือกไหม

ใช่ ต้องระบุรายละเอียดเพิ่มเติม

ใช้ Place Autocomplete ตามเซสชัน (เดิม) กับรายละเอียดสถานที่ (เดิม)
เนื่องจากแอปพลิเคชันของคุณต้องใช้รายละเอียดสถานที่ (เดิม) เช่น ชื่อสถานที่ สถานะธุรกิจ หรือเวลาทําการ การติดตั้งใช้งาน Place Autocomplete (เดิม) จึงควรใช้โทเค็นเซสชัน (โดยการเขียนโปรแกรมหรือสร้างไว้ใน วิดเจ็ต JavaScript, Android หรือ iOS ) ต่อเซสชัน รวมถึง SKU ข้อมูลสถานที่ที่เกี่ยวข้อง ขึ้นอยู่กับฟิลด์ข้อมูลสถานที่ที่คุณขอ1

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

การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้ โทเค็นของเซสชัน กับคำขอ Place Autocomplete (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดคะเนที่เลือก ให้รวมพารามิเตอร์ต่อไปนี้

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

ไม่ ไม่จำเป็น ต้องใช้แค่ที่อยู่และสถานที่

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

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

โดยเฉลี่ยแล้ว ผู้ใช้เลือกการคาดคะเน Place Autocomplete (เดิม) ในคำขอไม่เกิน 4 รายการใช่ไหม

ใช่

ใช้โปรแกรม Place Autocomplete (เดิม) โดยไม่ต้องใช้โทเค็นเซสชัน และเรียกใช้ Geocoding API ในการคาดคะเนสถานที่ที่เลือก
Geocoding API จะแสดงที่อยู่และพิกัดละติจูด/ลองจิจูด การส่งคำขอ 4 รายการ Autocomplete - ต่อคำขอ รวมถึงการเรียกใช้ Geocoding API เกี่ยวกับข้อมูลการคาดคะเนสถานที่ที่เลือกมีค่าใช้จ่ายต่อเซสชันน้อยกว่า Place Autocomplete (เดิม) ต่อเซสชัน1

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

ไม่

ใช้ Place Autocomplete ตามเซสชัน (เดิม) กับรายละเอียดสถานที่ (เดิม)
เนื่องจากจำนวนคำขอเฉลี่ยที่คุณคาดว่าจะทำก่อนที่ผู้ใช้จะเลือกการคาดคะเน Place Autocomplete (เดิม) เกินกว่าต้นทุนของการกำหนดราคาต่อเซสชัน การติดตั้งใช้งาน Place Autocomplete (เดิม) ควรใช้โทเค็นของเซสชันสำหรับทั้งคำขอ Place Autocomplete (เดิม) และคำขอรายละเอียดสถานที่ (เดิม) ที่เกี่ยวข้อง ต่อเซสชัน 1

การติดตั้งใช้งานวิดเจ็ต
ระบบจะสร้างการจัดการเซสชันลงใน วิดเจ็ต JavaScript Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมทั้งคำขอ Place Autocomplete (เดิม) และคำขอรายละเอียดสถานที่ (เดิม) ในการคาดคะเนที่เลือก อย่าลืมระบุพารามิเตอร์ fields เพื่อให้มั่นใจว่าคุณขอเฉพาะช่องที่ต้องการเท่านั้น

การติดตั้งใช้งานแบบเป็นโปรแกรม
ใช้ โทเค็นของเซสชัน กับคำขอ Place Autocomplete (เดิม) เมื่อขอรายละเอียดสถานที่ (เดิม) เกี่ยวกับการคาดคะเนที่เลือก ให้รวมพารามิเตอร์ต่อไปนี้

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

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

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

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


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

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

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

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

การให้น้ำหนักพิเศษกับบางตำแหน่ง

ให้น้ำหนักพิเศษกับผลลัพธ์ในพื้นที่ที่ระบุโดยส่งพารามิเตอร์ location และพารามิเตอร์ radius ซึ่งจะสั่งให้ Place Autocomplete (เดิม) แสดงผลลัพธ์ภายในพื้นที่ที่กำหนด ระบบอาจยังแสดงผลลัพธ์ที่อยู่นอกพื้นที่ที่กำหนด คุณสามารถใช้พารามิเตอร์ includedRegionCodes เพื่อกรองผลลัพธ์ ให้แสดงเฉพาะสถานที่ภายในประเทศที่ระบุ

การจำกัดตำแหน่ง

จำกัดผลลัพธ์ให้อยู่ในพื้นที่ที่ระบุโดยส่งพารามิเตอร์ locationRestriction

นอกจากนี้ คุณยังจำกัดผลลัพธ์ให้แสดงเฉพาะภูมิภาคที่กำหนดโดย location และพารามิเตอร์ radius ได้ด้วยโดยการเพิ่มพารามิเตอร์ strictbounds ซึ่งจะสั่งให้ Place Autocomplete (เดิม) แสดงผลลัพธ์เฉพาะ ภายในภูมิภาคนั้น

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

โควต้า

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