หน้านี้อธิบายความแตกต่างระหว่างฟีเจอร์การค้นหาสถานที่ด้วยข้อความใน
คลาส Place (ใหม่) กับ
PlacesService
(เดิม) และแสดงข้อมูลโค้ดบางส่วนเพื่อใช้เปรียบเทียบ
PlacesService เดิมมีเมธอดการค้นหาด้วยข้อความต่อไปนี้
- เมธอด
findPlaceFromQuery()ซึ่งรับคำค้นหาข้อความและแสดงผลสถานที่เดียว และรองรับการใช้ฟิลด์ข้อมูลสถานที่ - เมธอด
findPlaceFromPhoneNumber()ซึ่งช่วยให้คุณค้นหาสถานที่โดยใช้หมายเลขโทรศัพท์ และรองรับการใช้ฟิลด์ข้อมูลสถานที่ - เมธอด
textSearch()ซึ่งรับคำค้นหาข้อความและแสดงผลรายการสถานที่textSearch()เป็นเมธอดที่เก่ากว่าและไม่รองรับการใช้ฟิลด์ข้อมูลสถานที่
คลาส Place ใหม่มีเมธอด Place.searchByText() ซึ่งช่วยให้คุณ ค้นหาสถานที่โดยใช้คำค้นหาข้อความหรือหมายเลขโทรศัพท์ และช่วยให้คุณ ปรับแต่งการค้นหาได้โดยใช้ตัวเลือกที่ขยายออกไปของฟิลด์ข้อมูลสถานที่และประเภทสถานที่ที่อัปเดตเป็นประจำ
ตารางต่อไปนี้แสดงความแตกต่างหลักบางประการในเมธอดการค้นหาสถานที่ ระหว่างคลาส Place กับ PlacesService
PlacesService (เดิม) |
Place (ใหม่) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
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ก็ได้รับการรองรับด้วย)