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.
PlacesService
cũ có 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
Place
có 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 (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 Promise 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, 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 nhóm nhỏ các trường được hỗ trợ); không thể bị giới hạn ở 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 về các trường. |
Chỉ giới hạn trong một nhóm các loại địa điểm cố định. | Truy cập vào danh sách mở rộng và thường xuyên cập nhật về các loại địa điểm. |
Hỗ trợ tìm kiếm dựa trên văn bản bằng từ khoá. | Không hỗ trợ tìm kiếm dựa trên văn bản, hãy sử dụng Tìm kiếm bằng 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ã 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 (Cũ)
Tính năng Tìm kiếm lân cận 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ế các lượt 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ề cùng với mỗi 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 quy trình kiểm tra có đ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 Nearby Search có những điểm cải tiến so với phiên bản 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 Tìm kiếm lân cận 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
searchNearby()
tài liệu tham khảo