Trang này giải thích sự khác biệt giữa các tính năng tìm kiếm địa điểm dựa trên văn bản 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ó các phương thức tìm kiếm dựa trên văn bản sau:
- Phương thức
findPlaceFromQuery()lấy một truy vấn văn bản và trả về một kết quả địa điểm duy nhất, đồng thời hỗ trợ việc sử dụng các trường dữ liệu địa điểm. - Phương thức
findPlaceFromPhoneNumber()cho phép bạn tìm kiếm một địa điểm bằng số điện thoại và hỗ trợ việc sử dụng các trường dữ liệu địa điểm. - Phương thức
textSearch()lấy một truy vấn văn bản và trả về danh sách kết quả địa điểm.textSearch()là phương thức cũ hơn và không hỗ trợ việc sử dụng các trường dữ liệu địa điểm.
Lớp Place mới cung cấp phương thức Place.searchByText(), cho phép bạn
tìm kiếm địa điểm bằng truy vấn văn bản hoặc số điện thoại, đồng thời cho phép bạn
tuỳ chỉnh lượt tìm kiếm bằng cách sử dụng 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 cập nhật thường xuyê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 địa điểm
giữa lớp Place và PlacesService:
PlacesService (Cũ) |
Place (Mới) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| Các lựa chọn truy vấn bị hạn chế. | Các lựa chọn truy vấn mở rộng hơn. |
Yêu cầu sử dụng lệnh gọi lại để xử lý đối tượng kết quả và
google.maps.places.PlacesServiceStatus phản hồi. |
Sử dụng Promises và hoạt động không đồng bộ. |
Yêu cầu kiểm tra PlacesServiceStatus. |
Không yêu cầu kiểm tra trạng thái, có thể sử dụng tính năng xử lý lỗi tiêu chuẩn. Tìm hiểu thêm. |
| Chỉ hỗ trợ độ lệch vị trí. | Hỗ trợ độ lệch vị trí và quy định hạn chế về vị trí. |
| Các trường dữ liệu địa điểm được định dạng bằng cách sử dụng snake case. | Các trường dữ liệu địa điểm được định dạng bằng cách sử dụng camel case. |
| Trả về một kết quả địa điểm duy nhất. | Trả về tối đa 20 kết quả địa điểm. |
| Giới hạn ở một tập hợp cố định gồm các loại địa điểm và trường dữ liệu địa điểm. | Cung cấp lựa chọn mở rộng về các loại địa điểm và trường dữ liệu địa điểm được cập nhật thường xuyên. |
textSearch() |
searchByText() |
| 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ể 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 . |
So sánh mã
Phần này so sánh mã cho các phương thức tìm kiếm văn bản để minh hoạ sự khác biệt giữa Dịch vụ địa điểm và lớp Địa điểm. Các đoạn mã cho thấy mã cần thiết trên từng API tương ứng để đưa ra yêu cầu tìm kiếm dựa trên văn bản.
Dịch vụ địa điểm (Cũ)
Đoạn mã sau đây cho thấy cách sử dụng phương thức findPlaceFromQuery() để tìm kiếm một địa điểm. Yêu cầu này là đồng bộ và bao gồm một bước kiểm tra có điều kiện trên PlacesServiceStatus. Các trường dữ liệu địa điểm cần thiết được chỉ định trong nội dung yêu cầu, được xác định trước khi đưa ra yêu cầu thực tế.
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);
}
});
}
Tìm hiểu thêm
Tìm kiếm văn bản (Mới)
Đoạn mã sau đây cho thấy cách sử dụng phương thức searchByText() để tìm kiếm địa điểm. Yêu cầu này là không đồng bộ và không yêu cầu kiểm tra trạng thái (có thể sử dụng tính năng xử lý lỗi tiêu chuẩn). Trong ví dụ này, yêu cầu bao gồm maxResultCount là 8 (giá trị phải nằm trong khoảng từ 1 đến 20). Hàm này lặp lại các kết quả và thêm một điểm đánh dấu cho từng kết quả, điều chỉnh ranh giới trên bản đồ dựa trên vị trí của các điểm đánh dấu. Vì phương thức searchByText() sử dụng toán tử await nên phương thức này chỉ có thể được sử dụng bên trong hàm 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");
}
}
Phương thức searchByText() hỗ trợ nhiều lựa chọn yêu cầu hơn so với phiên bản trước, bao gồm:
includedTypecho phép bạn giới hạn lượt tìm kiếm ở một loại địa điểm cụ thể.isOpenNowcho phép bạn giới hạn lượt tìm kiếm để chỉ trả về những địa điểm đang mở cửa.minRatingcho phép bạn lọc ra những kết quả dưới giới hạn đã chỉ định (ví dụ: chỉ trả về những địa điểm có 3 sao trở lên).locationRestrictionbỏ qua những kết quả bên ngoài vị trí đã chỉ định (locationBiascũng được hỗ trợ).
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 văn bản (Mới)
- Xem tài liệu tham khảo về
searchByText()