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

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

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