ย้ายข้อมูลไปยังการค้นหาสถานที่แบบใหม่

นักพัฒนาซอฟต์แวร์ในเขตเศรษฐกิจยุโรป (EEA)

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

PlacesService เดิมมีวิธีการค้นหาตามข้อความต่อไปนี้

  • เมธอด findPlaceFromQuery() ซึ่งรับคำค้นหาข้อความและแสดงผลลัพธ์สถานที่เดียว รวมถึงรองรับการใช้ฟิลด์ข้อมูลสถานที่
  • เมธอด findPlaceFromPhoneNumber() ซึ่งช่วยให้คุณค้นหาสถานที่โดยใช้หมายเลขโทรศัพท์ และรองรับการใช้ฟิลด์ข้อมูลสถานที่
  • เมธอด textSearch() ซึ่งรับคำค้นหาข้อความและแสดงรายการผลลัพธ์ของสถานที่ textSearch() เป็นเวอร์ชันเก่าและไม่รองรับการใช้ฟิลด์ข้อมูลสถานที่

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

ตารางต่อไปนี้แสดงความแตกต่างหลักบางประการในวิธีการค้นหาสถานที่ระหว่างคลาส Place และ PlacesService

PlacesService (เดิม) Place (ใหม่)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
ตัวเลือกการค้นหาที่จำกัด ตัวเลือกการค้นหาที่ครอบคลุมมากขึ้น
ต้องใช้ Callback เพื่อจัดการออบเจ็กต์ผลลัพธ์และการตอบกลับ google.maps.places.PlacesServiceStatus ใช้ Promises และทำงานแบบอะซิงโครนัส
ต้องมีการตรวจสอบ PlacesServiceStatus ไม่จำเป็นต้องตรวจสอบสถานะ สามารถใช้การจัดการข้อผิดพลาดมาตรฐานได้ ดูข้อมูลเพิ่มเติม
รองรับเฉพาะการให้น้ำหนักตามสถานที่ตั้ง รองรับการให้น้ำหนักสถานที่และการจำกัดสถานที่
ฟิลด์ข้อมูลสถานที่จะจัดรูปแบบโดยใช้ Snake Case ฟิลด์ข้อมูลสถานที่จะจัดรูปแบบโดยใช้การเขียนแบบ Camel Case
แสดงผลการค้นหาสถานที่เดียว แสดงผลการค้นหาสถานที่สูงสุด 20 รายการ
จำกัดเฉพาะประเภทสถานที่และฟิลด์ข้อมูลสถานที่ที่กำหนดไว้ มีประเภทสถานที่และฟิลด์ข้อมูลสถานที่ที่อัปเดตเป็นประจำให้เลือกมากขึ้น
textSearch()
searchByText()
แสดงผลฟิลด์ข้อมูลทั้งหมดที่ใช้ได้ (ชุดย่อยของฟิลด์ที่รองรับ) โดยไม่สามารถจำกัดให้แสดงเฉพาะฟิลด์ที่ต้องการได้ แสดงเฉพาะฟิลด์ข้อมูลสถานที่ที่ขอ

การเปรียบเทียบโค้ด

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

Places Service (เดิม)

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

function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };

  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);

  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;

      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}

ดูข้อมูลเพิ่มเติม

การค้นหาข้อความ (ใหม่)

ข้อมูลโค้ดต่อไปนี้แสดงการใช้เมธอด searchByText() เพื่อค้นหาสถานที่ คำขอเป็นแบบอะซิงโครนัสและไม่จำเป็นต้องตรวจสอบสถานะ (ใช้การจัดการข้อผิดพลาดมาตรฐานได้) ในตัวอย่างนี้ คำขอมี maxResultCount เป็น 8 (ค่าต้องอยู่ระหว่าง 1 ถึง 20) ฟังก์ชันนี้จะวนซ้ำผลลัพธ์และเพิ่มเครื่องหมายสำหรับแต่ละรายการ โดยปรับขอบเขตของแผนที่ตามตำแหน่งของเครื่องหมาย เนื่องจากเมธอด searchByText() ใช้โอเปอเรเตอร์ await จึงใช้ได้เฉพาะภายในฟังก์ชัน async เท่านั้น

async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };

  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);

  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();

    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

เมธอด searchByText() รองรับตัวเลือกคำขอมากกว่าเวอร์ชันก่อนหน้าหลายรายการ ซึ่งรวมถึงตัวเลือกต่อไปนี้

  • includedType ซึ่งช่วยให้คุณจำกัดการค้นหาเฉพาะสถานที่บางประเภทได้
  • isOpenNow ซึ่งช่วยให้คุณจำกัดการค้นหาให้แสดงเฉพาะสถานที่ที่เปิดอยู่ได้
  • minRating ซึ่งช่วยให้คุณกรองผลลัพธ์ที่ต่ำกว่าขีดจำกัดที่ระบุออกได้ (เช่น แสดงเฉพาะสถานที่ที่มีคะแนนตั้งแต่ 3 ดาวขึ้นไป)
  • locationRestriction ซึ่งจะละเว้นผลลัพธ์ที่อยู่นอกสถานที่ตั้งที่ระบุ (รองรับ locationBias ด้วย)

ดูข้อมูลเพิ่มเติม