Place Autocomplete

เลือกแพลตฟอร์ม Android iOS JavaScript บริการผ่านเว็บ

บทนำ

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

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

ก่อนที่จะใช้ไลบรารีสถานที่ใน Maps JavaScript API โปรดตรวจสอบ ได้เปิดใช้ Places API ใน Google Cloud Console ที่คุณสร้างสำหรับ Maps JavaScript API

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

  1. ไปที่หน้า คอนโซล Google Cloud
  2. คลิกปุ่มเลือกโปรเจ็กต์ แล้วเลือกโปรเจ็กต์เดียวกับที่คุณสร้าง สำหรับ Maps JavaScript API แล้วคลิกเปิด
  3. จากรายการ API ในแดชบอร์ด ให้มองหา Places API
  4. หากเห็น API ในรายการ แสดงว่าทุกอย่างเรียบร้อยแล้ว หากไม่อยู่ในรายการ API เปิดใช้งาน:
    1. ที่ด้านบนของหน้า ให้เลือกเปิดใช้ API เพื่อแสดง คลัง หรือจากเมนูด้านซ้าย เลือกคลัง
    2. ค้นหา Places API แล้วเลือกจาก รายการผลลัพธ์
    3. เลือกเปิดใช้ เมื่อกระบวนการเสร็จสิ้น Places API จะปรากฏในรายการ API บน แดชบอร์ด

กำลังโหลดคลัง

บริการ Places เป็นห้องสมุดส่วนตัว ที่แยกออกจากห้องสมุดหลัก โค้ด Maps JavaScript API วิธีใช้ฟังก์ชันที่มีอยู่ ภายในไลบรารีนี้ คุณต้องโหลดโดยใช้ libraries ก่อน ใน URL เปิดเครื่องแผนที่ API ดังนี้

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>

โปรดดู ภาพรวมของไลบรารีสำหรับข้อมูลเพิ่มเติม

สรุปชั้นเรียน

API มีวิดเจ็ตเติมข้อความอัตโนมัติสองประเภท ซึ่งคุณสามารถเพิ่มผ่าน Autocomplete และ SearchBox ตามลำดับ นอกจากนี้ คุณยังใช้คลาส AutocompleteService เพื่อเรียกข้อมูล เติมผลลัพธ์อัตโนมัติโดยใช้โปรแกรม (ดูข้อมูลอ้างอิงของ Maps JavaScript API: AutocompleteService class)

ด้านล่างนี้เป็นสรุปของชั้นเรียนที่มีให้

  • Autocomplete เพิ่มช่องป้อนข้อความลงในหน้าเว็บ และตรวจสอบช่องนั้นเพื่อหารายการอักขระ ขณะที่ผู้ใช้ป้อนข้อความ การเติมข้อความอัตโนมัติจะแสดงการคาดคะเนสถานที่ในรูปของ สำหรับเลือกในเมนูแบบเลื่อนลง เมื่อผู้ใช้เลือกสถานที่จากรายการ ข้อมูล เกี่ยวกับสถานที่จะแสดงในออบเจ็กต์เติมข้อความอัตโนมัติ และสามารถดึง ตามแอปพลิเคชันของคุณ ดูรายละเอียดด้านล่าง
    วันที่ ช่องข้อความเติมข้อความอัตโนมัติ และรายการสถานที่ที่เลือก
    การคาดคะเนที่ระบุเมื่อผู้ใช้ป้อนคำค้นหา
    รูปที่ 1: ช่องข้อความเติมข้อความอัตโนมัติและรายการตัวเลือก
    แบบฟอร์มที่อยู่ที่กรอกเรียบร้อยแล้ว
    รูปที่ 2: แบบฟอร์มที่อยู่ที่กรอกครบถ้วนแล้ว
  • SearchBox เพิ่มช่องป้อนข้อความลงในหน้าเว็บโดยมาก ในลักษณะเดียวกับ Autocomplete ความแตกต่างมีดังนี้
    • ความแตกต่างที่สำคัญอยู่ใน ผลลัพธ์ที่ปรากฏในรายการตัวเลือก วัสดุของ SearchBox รายการเพิ่มเติมของการคาดคะเน ซึ่งอาจรวมถึงสถานที่ต่างๆ (ตามที่กำหนดโดย Places API) พร้อมกับข้อความค้นหาที่แนะนำ เช่น หากผู้ใช้ ป้อน "พิซซ่าใน ใหม่" รายการตัวเลือกอาจมีข้อความ "พิซซ่าในกรุงเทพมหานคร" ตลอดจนชื่อของพิซซ่าชนิดต่างๆ เต้ารับ
    • SearchBox มีตัวเลือกน้อยกว่า Autocomplete เพื่อจำกัดการค้นหา ก่อนหน้านี้ คุณ อาจให้น้ำหนักพิเศษกับการค้นหา LatLngBounds ที่ระบุ ใน หลังจากนั้น คุณสามารถจำกัดการค้นหาไว้เฉพาะประเทศใดประเทศหนึ่ง และ ประเภทสถานที่และการกำหนดขอบเขต สำหรับข้อมูลเพิ่มเติม โปรดดู ด้านล่าง
    แบบฟอร์มที่อยู่ที่กรอกเรียบร้อยแล้ว
    รูปที่ 3: SearchBox จะแสดงข้อความค้นหาและการคาดคะเนสถานที่
    ดูรายละเอียดด้านล่าง
  • คุณสามารถสร้าง AutocompleteService ออบเจ็กต์ที่จะดึงข้อมูล คาดการณ์แบบเป็นโปรแกรมได้ โทรหา getPlacePredictions() ถึง เรียกข้อมูลสถานที่ที่ตรงกัน หรือโทรไปที่ getQueryPredictions() เพื่อ เรียกข้อมูลสถานที่ที่ตรงกันและข้อความค้นหาที่แนะนำ หมายเหตุ: AutocompleteService จะไม่เพิ่มการควบคุม UI ใดๆ แต่วิธีการข้างต้นจะแสดงอาร์เรย์ของออบเจ็กต์การคาดการณ์ ชิ้น ออบเจ็กต์การคาดการณ์มีข้อความของการคาดการณ์และการอ้างอิง ข้อมูลและรายละเอียดว่าผลลัพธ์ตรงกับข้อมูลที่ผู้ใช้ป้อนอย่างไร โปรดดู รายละเอียดด้านล่าง

การเพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติ

Autocomplete วิดเจ็ตสร้างฟิลด์ป้อนข้อความในหน้าเว็บของคุณ แสดงการคาดคะเนสถานที่ต่างๆ ในตัวเลือก UI และแสดงรายละเอียดสถานที่ตามคำขอ getPlace() แต่ละรายการใน รายการสำหรับเลือกสอดคล้องกับสถานที่แห่งเดียว (ตามที่กำหนดโดย Places API)

ตัวสร้าง Autocomplete มีสองอาร์กิวเมนต์:

  • องค์ประกอบ 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 โค้ด ต้องส่งหลายประเทศเป็นรายการรหัสประเทศ

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

    • placeIdOnly สามารถใช้เพื่อสอนคำสั่ง วิดเจ็ต Autocomplete สำหรับเรียกดูเฉพาะรหัสสถานที่ กำลังโทร getPlace() ในออบเจ็กต์ Autocomplete ค่า PlaceResult ที่พร้อมใช้งานจะมีเฉพาะ place id ตั้งค่าพร็อพเพอร์ตี้ types และ name แล้ว คุณสามารถใช้ รหัสสถานที่ที่มีการเรียกไปยังเมทริกซ์สถานที่ การเข้ารหัสพิกัดภูมิศาสตร์ เส้นทาง หรือระยะทาง บริการต่างๆ

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

โดยค่าเริ่มต้น การเติมข้อมูลสถานที่อัตโนมัติจะแสดงสถานที่ทุกประเภท โดยมีความเอนเอียงในการคาดคะเนที่อยู่ใกล้กับ ตำแหน่งของผู้ใช้ และดึงข้อมูลฟิลด์ข้อมูลทั้งหมดที่ใช้ได้สำหรับสถานที่ที่เลือกของผู้ใช้ กำหนดสถานที่ ตัวเลือกการเติมข้อความอัตโนมัติเพื่อแสดงการคาดคะเนที่เกี่ยวข้องมากขึ้นโดยอิงตาม 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 ข้อมูลสถานที่ ที่คุณไม่ต้องการ รวมพร็อพเพอร์ตี้ 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 พร้อมด้วยรายการใดก็ได้ จากตาราง 3

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

ไปที่การสาธิต

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

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

  1. สร้างเครื่องจัดการเหตุการณ์สำหรับเหตุการณ์ place_changed และเรียกใช้ addListener() ในออบเจ็กต์ Autocomplete เพื่อเพิ่มเครื่องจัดการ
  2. โทร 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 จะเลือกภาษาที่จะใช้ โปรดอ่านเอกสารประกอบใน Localization

ดูการจัดรูปแบบวิดเจ็ตการเติมข้อความอัตโนมัติและ SearchBox เพื่อปรับแต่งรูปลักษณ์ของวิดเจ็ต

SearchBox ช่วยให้ผู้ใช้ดำเนินการทางภูมิศาสตร์แบบข้อความได้ การค้นหา เช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านรองเท้าใกล้ถนนรามอินทรา" คุณสามารถแนบ SearchBox กับช่องข้อความ และ มีการป้อน บริการจะแสดงการคาดการณ์ใน จากเมนูแบบเลื่อนลง

SearchBox มีรายการการคาดการณ์เพิ่มเติม สามารถรวมสถานที่ (ตามที่กำหนดโดย Places API) และคำค้นหาที่แนะนำ ตัวอย่างเช่น หากผู้ใช้ป้อน "พิซซ่าในเวอร์ชันใหม่" รายการที่เลือกอาจ ใส่วลี "พิซซ่าในนิวยอร์ก นิวยอร์ก" รวมถึงชื่อของ ร้านพิซซ่า เมื่อผู้ใช้เลือกสถานที่จากรายการ ข้อมูลเกี่ยวกับสถานที่นั้นจะถูกส่งกลับไปยังออบเจ็กต์ SearchBox และสามารถ จากแอปพลิเคชันของคุณ

ตัวสร้าง SearchBox มีสองอาร์กิวเมนต์:

  • องค์ประกอบ 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);
});

ดูตัวอย่าง

ดูการจัดรูปแบบวิดเจ็ตการเติมข้อความอัตโนมัติและ 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 ถนนพหลโยธิน" สำหรับ การค้นหาด้วยข้อความ เช่น "พิซซ่าในนิวยอร์ก" จะประกอบด้วยข้อความแบบเต็ม ของข้อความค้นหา โดยค่าเริ่มต้น pac-item-query จะเป็นสี สีดำ ถ้ามีข้อความเพิ่มเติมใน pac-item ภายนอก pac-item-query และรับการจัดรูปแบบจาก pac-item ซึ่งจะเป็นสีเทาโดยค่าเริ่มต้น ข้อความเพิ่มเติม มักจะเป็นที่อยู่
pac-matched ส่วนของการคาดการณ์ที่แสดงผลซึ่งตรงกับข้อมูลของผู้ใช้ โดย ค่าเริ่มต้น ข้อความที่ตรงกันนี้จะไฮไลต์เป็นข้อความตัวหนา โปรดทราบว่า ข้อความที่ตรงกันอาจอยู่ที่ใดก็ได้ภายใน pac-item ไม่ใช่ อาจเป็นส่วนหนึ่งของ pac-item-query และอาจเป็นบางส่วน ภายใน pac-item-query รวมถึงบางส่วนในข้อความที่เหลือ ใน pac-item

ใช้คอมโพเนนต์เครื่องมือเลือกสถานที่

หมายเหตุ: ตัวอย่างนี้ใช้ไลบรารีโอเพนซอร์ส โปรดดู README เพื่อการสนับสนุน และความคิดเห็น ที่เกี่ยวข้องกับไลบรารี

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

วันที่ GIF พร้อมช่องค้นหา ผู้ใช้เริ่มพิมพ์ที่อยู่เป็นอินพุตและเมนูแบบเลื่อนลงที่มี
      ที่อยู่จะปรากฏขึ้น ผู้ใช้คลิกที่อยู่จากเมนูแบบเลื่อนลงและช่องค้นหาเติมข้อความ
      ในส่วนที่เหลือของที่อยู่
รูปที่ 1: การป้อนข้อความเพื่อค้นหาที่อยู่หรือสถานที่ที่เฉพาะเจาะจงโดยใช้การเติมข้อความอัตโนมัติ

การเพิ่มประสิทธิภาพการเติมข้อความอัตโนมัติในสถานที่

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

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

  • วิธีที่รวดเร็วที่สุดในการพัฒนาอินเทอร์เฟซผู้ใช้ที่ใช้งานได้คือการใช้ วิดเจ็ตเติมข้อความอัตโนมัติของ 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 เพื่อให้แน่ใจว่าคุณขอเฉพาะ วางฟิลด์ข้อมูลที่ต้องการ

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

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

ไม่ ต้องใช้เฉพาะที่อยู่และตำแหน่งเท่านั้น

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

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

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

ใช่

ใช้การเติมข้อความอัตโนมัติในสถานที่แบบเป็นโปรแกรมโดยไม่ต้องใช้โทเค็นเซสชันและเรียกใช้ Geocoding API ในการคาดการณ์สถานที่ที่เลือก
Geocoding API จะแสดงที่อยู่และพิกัดละติจูด/ลองจิจูดในราคา $0.005 ต่อคำขอ การส่งคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ - ต่อคำขอ 4 รายการมีค่าใช้จ่าย $0.01132 ดังนั้นค่าใช้จ่ายทั้งหมดของคำขอ 4 รายการพร้อมการเรียก Geocoding API เกี่ยวกับการคาดการณ์สถานที่ที่เลือกจะเป็น $0.01632 ซึ่งต่ำกว่าราคาการเติมข้อความอัตโนมัติต่อเซสชันที่ $0.017 ต่อเซสชัน1

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

ไม่ได้

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

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

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

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

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

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

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


  1. ค่าใช้จ่ายที่แสดงที่นี่เป็นสกุลเงิน USD โปรดดูหน้าการเรียกเก็บเงินของ Google Maps Platform สำหรับข้อมูลราคาทั้งหมด

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

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

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

ขีดจำกัดและนโยบายการใช้งาน

โควต้า

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

นโยบาย

การใช้ไลบรารี Places นั้น Maps JavaScript API ต้องเป็นไปตาม นโยบายที่อธิบาย สำหรับ Places API