เติมข้อความอัตโนมัติ (ใหม่)

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

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

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

คำขอเติมข้อความอัตโนมัติ (ใหม่)

แอปของคุณสามารถรับรายการชื่อสถานที่ที่คาดการณ์ไว้ และ/หรือ จาก API การเติมข้อความอัตโนมัติด้วยการเรียก PlacesClient.findAutocompletePredictions(), การส่งผ่าน FindAutocompletePredictionsRequest ออบเจ็กต์ ตัวอย่างด้านล่างแสดงการเรียกที่สมบูรณ์เพื่อ PlacesClient.findAutocompletePredictions().

Places.initializeWithNewPlacesApiEnabled(context, apiKey);
final List<Field> placeFields = getPlaceFields();
LatLng center = new LatLng(37.7749, -122.4194);
CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000);
final FindAutocompletePredictionsRequest autocompletePlacesRequest =
    FindAutocompletePredictionsRequest.builder()
            .setQuery("Sicilian piz")
            .setRegionCode("ES")
            .setLocationRestriction(circle)
            .build());
placesClient.findAutocompletePredictions(autoCompletePlacesRequest)
    .addOnSuccessListener(
        (response) -> {
            List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions();
          }
    ).addOnFailureListener(
        exception -> {
            Log.e(TAG, "some exception happened" + exception.getMessage());
        })
    );

การตอบกลับที่เติมข้อความอัตโนมัติ (ใหม่)

API จะแสดงผล FindAutocompletePredictionsResponse ใน Task. FindAutocompletePredictionsResponse มีรายการได้สูงสุด 5 รายการ AutocompletePrediction ซึ่งแสดงสถานที่ที่คาดการณ์ไว้ รายการอาจว่างเปล่าหากไม่มี ตำแหน่งที่ทราบ ซึ่งตรงกับข้อความค้นหาและเกณฑ์ตัวกรอง

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

  • getFullText(CharacterStyle) จะแสดงข้อความทั้งหมดของคำอธิบายสถานที่ โดยเป็นการรวมระหว่าง ข้อความหลักและรอง ตัวอย่าง: "Eiffel Tower, Avenue Anatole France, ปารีส ฝรั่งเศส" นอกจากนี้ วิธีการนี้ช่วยให้คุณไฮไลต์ส่วนของ ที่ตรงกับการค้นหากับรูปแบบที่คุณต้องการ โดยใช้ CharacterStyle. คุณจะระบุพารามิเตอร์ CharacterStyle หรือไม่ก็ได้ ตั้งค่าเป็น Null หากไม่ต้องการให้แสดง ไฮไลต์ใดก็ได้
  • getPrimaryText(CharacterStyle) จะแสดงข้อความหลักที่อธิบายสถานที่ ซึ่งโดยปกติจะเป็นชื่อของ ตัวอย่างเช่น "Eiffel Tower" และ "123 Pitt Street"
  • getSecondaryText(CharacterStyle) แสดงข้อความของบริษัทในเครือของคำอธิบายสถานที่ ซึ่งจะเป็นประโยชน์สำหรับ เช่น ในบรรทัดที่สองเมื่อแสดงการคาดคะเนการเติมข้อความอัตโนมัติ ตัวอย่าง: "Avenue Anatole France, Paris, France" และ "ซิดนีย์ นิวเซาท์เวลส์"
  • getPlaceId() จะแสดงรหัสสถานที่ของสถานที่ที่คาดคะเน รหัสสถานที่เป็นข้อความ ข้อมูลที่ใช้ในการระบุสถานที่แบบไม่ซ้ำ ซึ่งคุณสามารถใช้เพื่อเรียกดู เวลา Place อีกครั้งในภายหลัง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรหัสสถานที่ใน เติมข้อความอัตโนมัติ โปรดดูรายละเอียดสถานที่ (ใหม่) ทั่วไป ข้อมูลเกี่ยวกับรหัสสถานที่ โปรดดูรหัสสถานที่ ภาพรวม
  • getTypes() แสดงรายการประเภทสถานที่ที่เชื่อมโยงกับสถานที่นี้
  • getDistanceMeters() จะแสดงระยะทางของเส้นตรงเป็นเมตรระหว่างสถานที่นี้กับ ต้นทางที่ระบุไว้ในคำขอ

พารามิเตอร์ที่จำเป็น

  • การค้นหา

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

    หากต้องการตั้งค่าพารามิเตอร์การค้นหา ให้เรียก setQuery() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

พารามิเตอร์ที่ไม่บังคับ

  • ประเภทหลัก

    รายการค่าประเภทสูงสุด 5 ประเภทจากประเภท ตาราง ก หรือตาราง B ใช้เพื่อกรองสถานที่ที่แสดงในคำตอบ สถานที่ต้องตรงกับค่าประเภทหลักค่าใดค่าหนึ่งที่ระบุไว้จึงจะรวมไว้ในการตอบกลับได้

    สถานที่มีประเภทหลักได้ประเภทเดียวจากประเภท ตาราง ก หรือเชื่อมโยงตาราง B แล้ว ด้วย ตัวอย่างเช่น ประเภทหลักอาจเป็น "mexican_restaurant" หรือ "steak_house".

    คำขอจะถูกปฏิเสธโดยมีข้อผิดพลาด INVALID_REQUEST ในกรณีต่อไปนี้

    • มีการระบุมากกว่า 5 ประเภท
    • ระบบจะระบุประเภทที่ไม่รู้จัก

    หากต้องการตั้งค่าพารามิเตอร์ประเภทหลัก ให้เรียก setTypesFilter() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

  • ประเทศ

    รวมเฉพาะผลการค้นหาจากรายชื่อประเทศที่ระบุ โดยระบุเป็นลิสต์สูงสุด 15 รายการ ccTLD ("โดเมนระดับบนสุด") ซึ่งมีอักขระ 2 ตัว หากไม่ระบุ จะไม่มีการใช้ข้อจำกัดกับคำตอบ ตัวอย่างเช่น หากต้องการจำกัดภูมิภาคเป็นเยอรมนีและฝรั่งเศส ให้ทำดังนี้

    หากคุณระบุทั้ง locationRestriction และ includedRegionCodes ผลลัพธ์จะอยู่ในบริเวณที่เป็นจุดตัดของการตั้งค่าทั้งสอง

    หากต้องการตั้งค่าพารามิเตอร์ประเทศ ให้เรียกใช้ setCountries() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

  • ออฟเซ็ตอินพุต

    ออฟเซ็ตอักขระ Unicode แบบ 0 ซึ่งระบุตำแหน่งเคอร์เซอร์ในคำค้นหา ตำแหน่งเคอร์เซอร์อาจมีผลต่อการคาดคะเนที่แสดง หากเว้นว่างไว้ ระบบจะใช้ค่าเริ่มต้นเป็น ความยาวของคำค้นหา

    หากต้องการตั้งค่าพารามิเตอร์ออฟเซ็ตอินพุต ให้เรียกsetInputOffset() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

  • อคติเรื่องตำแหน่งหรือการจำกัดสถานที่

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

    • ความเอนเอียงของตำแหน่ง

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

      หากต้องการตั้งค่าพารามิเตอร์ความเอนเอียงของตำแหน่ง ให้เรียก setLocationBias() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

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

      ระบุพื้นที่ที่จะค้นหา ผลลัพธ์นอกพื้นที่ที่ระบุไม่ได้ ส่งคืนแล้ว

      หากต้องการตั้งค่าพารามิเตอร์การจำกัดตำแหน่ง ให้เรียกsetLocationRestriction() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

    ระบุความโน้มเอียงของตำแหน่งหรือภูมิภาคของการจำกัดตำแหน่งเป็น วิวพอร์ตสี่เหลี่ยมผืนผ้าหรือเป็นวงกลม

    • วงกลมกำหนดด้วยจุดศูนย์กลางและรัศมีเป็นเมตร รัศมีต้องอยู่ระหว่าง 0.0 และ 50000.0 เท่านั้น ค่าเริ่มต้นคือ 0.0 สําหรับการจํากัดตําแหน่ง คุณต้องกำหนดรัศมีเป็นค่าที่มากกว่า 0.0 มิเช่นนั้น คำขอจะส่งคืนค่า ไม่มีผลลัพธ์

    • สี่เหลี่ยมผืนผ้าคือวิวพอร์ตละติจูด-ลองจิจูด ซึ่งแสดงเป็น แนวทแยงมุมตรงข้าม low และ high จุด วิวพอร์ตถือว่าเป็น บริเวณที่ถูกปิด ซึ่งหมายความว่ามีอาณาเขตรวมอยู่ด้วย ขอบเขตของละติจูด ต้องอยู่ระหว่าง -90 ถึง 90 องศา และขอบเขตของลองจิจูด ต้องอยู่ในช่วง -180 ถึง 180 องศา

      • หาก low = high วิวพอร์ตจะประกอบด้วยจุดเดียวดังกล่าว
      • หาก low.longitude > high.longitude ระบบจะกลับช่วงลองจิจูด (วิวพอร์ตข้ามเส้นลองจิจูด 180 องศา)
      • หาก low.longitude = -180 องศาและ high.longitude = 180 องศา วิวพอร์ตจะมีลองจิจูดทั้งหมด
      • หาก low.longitude = 180 องศาและ high.longitude = -180 องศา ช่วงลองจิจูดว่างเปล่า

      ต้องป้อนข้อมูลทั้ง low และ high และช่องที่แสดง ต้องระบุ วิวพอร์ตที่ว่างเปล่าจะทำให้เกิดข้อผิดพลาด

  • Origin

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

    หากต้องการตั้งค่าพารามิเตอร์ต้นทาง ให้เรียก setOrigin() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

  • รหัสภูมิภาค

    รหัสภูมิภาคที่ใช้ในการจัดรูปแบบการตอบกลับ รวมถึงการจัดรูปแบบที่อยู่ ซึ่งระบุเป็น ccTLD ("โดเมนระดับบนสุด") ที่เป็นค่าสองตัว รหัส ccTLD ส่วนใหญ่เหมือนกับรหัส ISO 3166-1 โดยมีข้อยกเว้นบางประการเด่นๆ ตัวอย่างเช่น ccTLD ของสหราชอาณาจักรคือ "uk" (.co.uk) ในขณะที่รหัส ISO 3166-1 คือ "gb" (โดยทางเทคนิคสำหรับ นิติบุคคล "สหราชอาณาจักรบริเตนใหญ่และไอร์แลนด์เหนือ")

    หากคุณระบุรหัสภูมิภาคไม่ถูกต้อง API จะแสดงผล INVALID_ARGUMENT พารามิเตอร์อาจส่งผลต่อผลลัพธ์ตามกฎหมายที่เกี่ยวข้อง

    หากต้องการตั้งค่าพารามิเตอร์รหัสภูมิภาค ให้เรียก setRegionCode() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

  • โทเค็นของเซสชัน

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

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

    หากต้องการตั้งค่าพารามิเตอร์โทเค็นเซสชัน ให้เรียก setSessionToken() เมื่อสร้างวัตถุ FindAutocompletePredictionsRequest

    สำหรับข้อมูลเพิ่มเติม โปรดดู โทเค็นของเซสชัน

ตัวอย่างการเติมข้อความอัตโนมัติ (ใหม่)

ใช้การจำกัดตำแหน่งและการให้น้ำหนักตำแหน่ง

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

การจํากัดตําแหน่งจะระบุพื้นที่ที่จะค้นหา ผลลัพธ์ภายนอกที่ระบุ ไม่ได้แสดงผล ตัวอย่างต่อไปนี้ใช้การจำกัดตำแหน่งเพื่อจำกัดคำขอให้เป็น การจำกัดตำแหน่งวงเวียนที่มีรัศมี 5,000 เมตรมีศูนย์กลางอยู่ที่ซานฟรานซิสโก

Places.initializeWithNewPlacesApiEnabled(context, apiKey);
final List<Field> placeFields = getPlaceFields();

LatLng center = new LatLng(37.7749, -122.4194);
CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000);

final FindAutocompletePredictionsRequest autocompletePlacesRequest =
    FindAutocompletePredictionsRequest.builder()
            .setQuery("Amoeba")
            .setLocationRestriction(circle)
            .build());
placesClient.findAutocompletePredictions(autoCompletePlacesRequest)
    .addOnSuccessListener(
        (response) -> {
            List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions();
          }
    ).addOnFailureListener(
        exception -> {
            Log.e(TAG, "some exception happened" + exception.getMessage());
        })
    );

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

Places.initializeWithNewPlacesApiEnabled(context, apiKey);
final List<Field> placeFields = getPlaceFields();

LatLng center = new LatLng(37.7749, -122.4194);
CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000);

final FindAutocompletePredictionsRequest autocompletePlacesRequest =
    FindAutocompletePredictionsRequest.builder()
            .setQuery("Amoeba")
            .setLocationBias(circle)
            .build());
placesClient.findAutocompletePredictions(autoCompletePlacesRequest)
    .addOnSuccessListener(
        (response) -> {
            List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions();
          }
    ).addOnFailureListener(
        exception -> {
            Log.e(TAG, "some exception happened" + exception.getMessage());
        })
    );

ใช้ประเภทหลัก

ใช้พารามิเตอร์ ประเภทหลัก เพื่อจำกัดผลลัพธ์จาก เป็นประเภทที่ระบุไว้ใน ตาราง ตาราง A และตาราง B. คุณสามารถระบุ อาร์เรย์ที่มีค่าสูงสุด 5 ค่า หากไม่ระบุ ระบบจะแสดงผลทุกประเภท

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

Places.initializeWithNewPlacesApiEnabled(context, apiKey);
final List<Field> placeFields = getPlaceFields();

final List<Place.Field> primaryTypes = Arrays.asList("sporting_goods_store");

LatLng center = new LatLng(37.7749, -122.4194);
CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000);

final FindAutocompletePredictionsRequest autocompletePlacesRequest =
    FindAutocompletePredictionsRequest.builder()
            .setQuery("Soccer")
            .setIncludedPrimaryTypes(primaryTypes)
            .setLocationBias(circle)
            .build());
placesClient.findAutocompletePredictions(autoCompletePlacesRequest)
    .addOnSuccessListener(
        (response) -> {
            List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions();
          }
    ).addOnFailureListener(
        exception -> {
            Log.e(TAG, "some exception happened" + exception.getMessage());
        })
    );

หากไม่ใส่พารามิเตอร์ประเภทหลัก ผลลัพธ์อาจมีสถานประกอบการ ประเภทที่คุณอาจไม่ต้องการ เช่น "athletic_field"

ใช้ต้นทาง

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

Places.initializeWithNewPlacesApiEnabled(context, apiKey);
final List<Field> placeFields = getPlaceFields();

LatLng center = new LatLng(37.7749, -122.4194);
CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000);

final FindAutocompletePredictionsRequest autocompletePlacesRequest =
    FindAutocompletePredictionsRequest.builder()
            .setQuery("Amoeba")
            .setOrigin(center)
            .setLocationRestriction(circle)
            .build());
placesClient.findAutocompletePredictions(autoCompletePlacesRequest)
    .addOnSuccessListener(
        (response) -> {
            List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions();
          }
    ).addOnFailureListener(
        exception -> {
            Log.e(TAG, "some exception happened" + exception.getMessage());
        })
    );

การระบุแหล่งที่มา

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