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

นักพัฒนาซอฟต์แวร์ในเขตเศรษฐกิจยุโรป (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 Service กับคลาส 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 ก็ได้รับการรองรับด้วย)

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