หน้านี้อธิบายความแตกต่างระหว่างการค้นหาในบริเวณใกล้เคียงที่ใช้ในคลาส Place (ใหม่) และ PlacesService (เดิม) รวมถึงแสดงข้อมูลโค้ดบางส่วนเพื่อเปรียบเทียบ
PlacesServiceเดิมมีเมธอดnearbySearch()ซึ่งช่วยให้คุณค้นหาสถานที่ภายในพื้นที่ที่ระบุตามคีย์เวิร์ดหรือประเภทได้- คลาส
PlaceมีเมธอดsearchNearby()ซึ่งช่วยให้คุณค้นหาสถานที่ภายในพื้นที่ที่ระบุตามประเภทสถานที่ได้ โดยใช้ฟิลด์ข้อมูลสถานที่และประเภทสถานที่ที่ขยายเพิ่มเติมเพื่อความยืดหยุ่นที่มากขึ้น
ตารางต่อไปนี้แสดงความแตกต่างหลักๆ บางประการในวิธีการค้นหาในบริเวณใกล้เคียงระหว่างคลาส Place กับ PlacesService
PlacesService (เดิม) |
Place (ใหม่) |
|---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
ต้องใช้ Callback เพื่อจัดการออบเจ็กต์ผลลัพธ์และการตอบกลับ google.maps.places.PlacesServiceStatus |
ใช้ Promises และทำงานแบบอะซิงโครนัส |
ต้องมีการตรวจสอบ PlacesServiceStatus |
ไม่จำเป็นต้องตรวจสอบสถานะ สามารถใช้การจัดการข้อผิดพลาดมาตรฐานได้ ดูข้อมูลเพิ่มเติม |
| รองรับเฉพาะการให้น้ำหนักตามสถานที่ตั้ง | รองรับการให้น้ำหนักสถานที่และการจำกัดสถานที่ |
| แสดงผลฟิลด์ข้อมูลทั้งหมดที่ใช้ได้ (ชุดย่อยของฟิลด์ที่รองรับ) โดยไม่สามารถจำกัดให้แสดงเฉพาะฟิลด์ที่ต้องการได้ | แสดงเฉพาะฟิลด์ข้อมูลสถานที่ที่ขอ โดยคลาส Place มีฟิลด์ที่ขยายและอัปเดตเป็นประจำให้เลือก |
| จำกัดเฉพาะประเภทสถานที่ที่กำหนดไว้ | เข้าถึงประเภทสถานที่ที่เพิ่มขึ้นและอัปเดตเป็นประจำ |
| รองรับการค้นหาตามข้อความด้วยคีย์เวิร์ด | ระบบไม่รองรับการค้นหาตามข้อความ ให้ใช้การค้นหาข้อความ (ใหม่) แทน |
การเปรียบเทียบโค้ด
ส่วนนี้จะเปรียบเทียบโค้ดสำหรับวิธีการค้นหาในบริเวณใกล้เคียงเพื่อแสดงความแตกต่างระหว่างบริการ Places กับคลาส Place ข้อมูลโค้ดแสดงโค้ดที่จำเป็นใน API แต่ละรายการเพื่อส่งคำขอการค้นหาตามข้อความ
การค้นหาในบริเวณใกล้เคียง (เดิม)
การค้นหาในบริเวณใกล้เคียงแบบเดิมช่วยให้คุณค้นหาสถานที่ภายในพื้นที่ที่ระบุตามคีย์เวิร์ดหรือประเภทได้ คุณไม่สามารถจำกัดการค้นหาโดยใช้ฟิลด์ข้อมูลสถานที่ได้ ดังนั้นระบบจะแสดงฟิลด์ที่ใช้ได้ทั้งหมดพร้อมกับคำขอแต่ละรายการ
ข้อมูลโค้ดต่อไปนี้แสดงการเรียกใช้ nearbySearch() เพื่อแสดงข้อมูลเกี่ยวกับร้านอาหารในซิดนีย์ ประเทศออสเตรเลีย คำขอเป็นแบบซิงโครนัส ใช้ Callback และมีการตรวจสอบแบบมีเงื่อนไขที่จำเป็นใน PlacesServiceStatus
let map;
let service;
function initMap() {
const sydney = new google.maps.LatLng(-33.867, 151.195);
map = new google.maps.Map(document.getElementById("map"), {
center: sydney,
zoom: 15,
});
const request = {
location: sydney,
radius: '500',
type: ['restaurant']
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
// Helper function to create markers.
function createMarker(place) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
title: place.name,
});
}
ดูข้อมูลเพิ่มเติม
การค้นหาในบริเวณใกล้เคียง (ใหม่)
การค้นหาในบริเวณใกล้เคียงเวอร์ชันใหม่ได้รับการปรับปรุงจากเวอร์ชันก่อนหน้าในด้านต่อไปนี้
- ความสามารถในการระบุฟิลด์ข้อมูลสถานที่ที่จะแสดงผล
- การใช้ Promise ซึ่งช่วยให้ดำเนินการแบบอะซิงโครนัสได้
- ไม่จำเป็นต้องตรวจสอบสถานะของ
PlacesServiceแต่สามารถใช้การจัดการข้อผิดพลาดมาตรฐานแทนได้
ข้อมูลโค้ดต่อไปนี้แสดงฟังก์ชันที่ส่งคำขอการค้นหาในบริเวณใกล้เคียงสำหรับร้านอาหาร ตัวอย่างนี้แสดงการใช้ตัวเลือก rankPreference เพื่อจัดอันดับผลการค้นหาตามความนิยม (ในเวอร์ชันก่อนหน้า การจัดอันดับจะระบุโดยใช้ตัวเลือก rankBy) เนื่องจากเมธอด searchNearby() ใช้โอเปอเรเตอร์ await จึงใช้ได้เฉพาะภายในฟังก์ชัน async เท่านั้น
async function nearbySearch() {
// Restrict within the map viewport.
let center = new google.maps.LatLng(52.369358, 4.889258);
const request = {
// Required parameters.
fields: ["displayName", "location", "businessStatus"],
locationRestriction: {
center: center,
radius: 500,
},
// Optional parameters.
includedPrimaryTypes: ["restaurant"],
maxResultCount: 5,
rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
language: "en-US",
region: "us",
};
const { places } = await google.maps.places.Place.searchNearby(request);
if (places.length) {
console.log(places);
// Create a new bounds, which will be extended with each result.
const bounds = new google.maps.LatLngBounds();
// Loop through and get all the results.
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");
}
}
ดูข้อมูลเพิ่มเติม
- ดูโค้ดตัวอย่างที่เสร็จสมบูรณ์
- ดูเอกสารประกอบสำหรับการค้นหาในบริเวณใกล้เคียง (ใหม่)
- ดูข้อมูลอ้างอิง
searchNearby()