Trang này giải thích sự khác biệt giữa tính năng tìm kiếm lân cận được dùng trong lớp Place (mới) và PlacesService (cũ), đồng thời cung cấp một số đoạn mã để so sánh.
PlacesServicecũ có một phương thứcnearbySearch(), cho phép bạn tìm kiếm địa điểm trong một khu vực cụ thể theo từ khoá hoặc loại.- Lớp
Placecó một phương thứcsearchNearby()cho phép bạn tìm kiếm các địa điểm trong một khu vực cụ thể theo loại địa điểm, sử dụng một lựa chọn mở rộng về các trường dữ liệu địa điểm và loại địa điểm để có tính linh hoạt cao hơn.
Bảng sau đây liệt kê một số điểm khác biệt chính trong các phương thức tìm kiếm lân cận giữa lớp Place và PlacesService:
PlacesService (Phiên bản cũ) |
Place (Mới) |
|---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
Yêu cầu sử dụng một lệnh gọi lại để xử lý đối tượng kết quả và phản hồi google.maps.places.PlacesServiceStatus. |
Sử dụng Promises và hoạt động không đồng bộ. |
Cần có chế độ kiểm tra PlacesServiceStatus. |
Không cần kiểm tra trạng thái bắt buộc, có thể sử dụng quy trình xử lý lỗi tiêu chuẩn. Tìm hiểu thêm. |
| Chỉ hỗ trợ thiên vị về vị trí. | Hỗ trợ thiên kiến về vị trí và hạn chế về vị trí. |
| Trả về tất cả các trường dữ liệu có sẵn (một tập hợp con của các trường được hỗ trợ); không thể bị hạn chế đối với các trường cụ thể. | Chỉ trả về các trường dữ liệu địa điểm được yêu cầu; lớp Place cung cấp một lựa chọn mở rộng và thường xuyên cập nhật các trường. |
| Chỉ giới hạn trong một nhóm loại địa điểm cố định. | Truy cập vào danh sách các loại địa điểm được mở rộng và cập nhật thường xuyên. |
| Hỗ trợ tìm kiếm dựa trên văn bản bằng từ khoá. | Tính năng tìm kiếm dựa trên văn bản không được hỗ trợ, hãy sử dụng Tìm kiếm văn bản (Mới). |
So sánh mã
Phần này so sánh mã cho các phương thức tìm kiếm lân cận để minh hoạ sự khác biệt giữa Places Service và lớp Place. Các đoạn mã này cho thấy mã cần thiết trên mỗi API tương ứng để thực hiện một yêu cầu tìm kiếm dựa trên văn bản.
Nearby Search (Phiên bản cũ)
Tính năng Nearby Search cũ cho phép bạn tìm kiếm địa điểm trong một khu vực cụ thể theo từ khoá hoặc loại. Không có cách nào để hạn chế tìm kiếm bằng cách sử dụng các trường dữ liệu về địa điểm, do đó, tất cả các trường có sẵn đều được trả về theo từng yêu cầu.
Đoạn mã sau cho thấy cách gọi nearbySearch() để trả về thông tin về các nhà hàng ở Sydney, Úc. Yêu cầu này là đồng bộ, sử dụng một lệnh gọi lại và bao gồm một bước kiểm tra điều kiện bắt buộc trên 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,
});
}
Tìm hiểu thêm
Tìm kiếm lân cận (Mới)
Phiên bản mới của tính năng Tìm kiếm lân cận có những điểm cải tiến so với phiên bản trước như sau:
- Khả năng chỉ định những trường dữ liệu địa điểm cần trả về.
- Sử dụng Promise để cho phép hoạt động không đồng bộ.
- Không cần kiểm tra trạng thái của
PlacesService; thay vào đó, bạn có thể sử dụng tính năng xử lý lỗi tiêu chuẩn.
Đoạn mã sau đây cho thấy một hàm tạo yêu cầu Nearby Search cho nhà hàng. Ví dụ này cho thấy cách sử dụng lựa chọn rankPreference để xếp hạng kết quả tìm kiếm theo mức độ phổ biến (trong phiên bản trước, thứ hạng được chỉ định bằng lựa chọn rankBy). Vì phương thức searchNearby() sử dụng toán tử await nên bạn chỉ có thể dùng phương thức này bên trong hàm 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");
}
}
Tìm hiểu thêm
- Xem mã ví dụ hoàn chỉnh
- Xem tài liệu về tính năng Tìm kiếm lân cận (Mới)
- Xem thông tin tham khảo về
searchNearby()