Tìm kiếm văn bản trả về thông tin về một tập hợp địa điểm dựa trên một chuỗi. Ví dụ: "pizza ở New York", "cửa hàng giày gần Ottawa" hoặc "123 Main Street". Dịch vụ này phản hồi bằng một danh sách các địa điểm khớp với chuỗi văn bản và bất kỳ độ lệch vị trí nào đã đặt.
Dịch vụ này đặc biệt hữu ích khi thực hiện các truy vấn địa chỉ không rõ ràng trong một hệ thống tự động và các thành phần không có địa chỉ của chuỗi có thể khớp với các doanh nghiệp cũng như địa chỉ. Ví dụ về truy vấn địa chỉ không rõ ràng là địa chỉ có định dạng kém hoặc yêu cầu chứa các thành phần không có địa chỉ, chẳng hạn như tên doanh nghiệp. Các yêu cầu như 2 ví dụ đầu tiên có thể trả về kết quả bằng 0 trừ phi bạn đặt vị trí (chẳng hạn như khu vực, hạn chế về vị trí hoặc sai lệch về vị trí).
"10 High Street, UK" hoặc "123 Main Street, US" | Nhiều "Đường cao tốc" ở Vương quốc Anh; nhiều "Đường chính" ở Hoa Kỳ. Truy vấn không trả về kết quả mong muốn trừ phi bạn đặt giới hạn về vị trí. |
"Nhà hàng chuỗi New York" | Nhiều địa điểm "Nhà hàng theo chuỗi" ở New York; không có địa chỉ đường phố hoặc thậm chí là tên đường phố. |
"10 High Street, Escher UK" hoặc "123 Main Street, Pleasanton US" | Chỉ có một "High Street" (Đường cao tốc) trong thành phố Escher của Vương quốc Anh; chỉ có một "Main Street" ở thành phố Pleasanton CA của Hoa Kỳ. |
"UniqueRestaurantName New York" | Chỉ có một cơ sở có tên này tại New York; không cần địa chỉ đường phố để phân biệt. |
"nhà hàng pizza ở New York" | Truy vấn này có chứa giới hạn về vị trí và "nhà hàng pizza" là một loại địa điểm được xác định rõ. Hàm này trả về nhiều kết quả. |
"+1 514-670-8700" | Truy vấn này có chứa số điện thoại. Công cụ này trả về nhiều kết quả cho các địa điểm liên kết với số điện thoại đó. |
Nhận danh sách địa điểm bằng cách tìm kiếm bằng văn bản
Thực hiện yêu cầu Tìm kiếm văn bản bằng cách gọi GMSPlacesClient
searchByTextWithRequest:
, truyền đối tượng GMSPlaceSearchByTextRequest
xác định tham số yêu cầu và phương thức gọi lại thuộc loại GMSPlaceSearchByTextResultCallback
để xử lý phản hồi.
Đối tượng GMSPlaceSearchByTextRequest
chỉ định tất cả các tham số bắt buộc và không bắt buộc cho yêu cầu. Các tham số bắt buộc bao gồm:
- Danh sách các trường cần trả về trong đối tượng
GMSPlace
, còn được gọi là trường mặt nạ, như đượcGMSPlaceProperty
xác định. Nếu bạn không chỉ định ít nhất một trường trong danh sách trường hoặc nếu bạn bỏ qua danh sách trường, thì lệnh gọi sẽ trả về lỗi. - Truy vấn văn bản.
Yêu cầu tìm kiếm văn bản mẫu này chỉ định rằng các đối tượng GMSPlace
phản hồi có chứa tên địa điểm và mã địa điểm cho từng đối tượng GMSPlace
trong kết quả tìm kiếm. Bộ lọc này cũng lọc phản hồi để chỉ trả về các địa điểm thuộc loại "nhà hàng".
Swift
// Create the GMSPlaceSearchByTextRequest object. let placeProperties: [GMSPlaceProperty] = [GMSPlacePropertyName, GMSPlacePropertyPlaceID]; let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York" placeProperties:placeProperties) request.isOpenNow = true request.includedType = "restaurant" request.maxResultCount = 5 request.minRating = 3.5 request.rankPreference = .distance request.isStrictTypeFiltering = true request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue] request.locationRestriction = GMSPlaceRectangularLocationOption( CLLocationCoordinate2D(latitude: 20, longitude: 30), CLLocationCoordinate2D(latitude: 40, longitude: 50) ) // Array to hold the places in the response placeResults = []; let callback: GMSPlaceSearchByTextResultCallback = { [weak self] results, error in guard let self, error == nil else { if let error { print(error.localizedDescription) } return } guard let results = results as? [GMSPlace] else { return } self.placeResults = results } GMSPlacesClient.shared().searchByTextWithRequest(with: request, callback: callback)
Objective-C
// Create the GMSPlaceSearchByTextRequest object. GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]]; request.isOpenNow = YES; request.includedType = @"restaurant"; request.maxResultCount = 5; request.minRating = 3.5; request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance; request.isStrictTypeFiltering = YES; request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ]; request.locationRestriction = GMSPlaceRectangularLocationOption( CLLocationCoordinate2DMake(20, 30), CLLocationCoordinate2DMake(40, 50)); request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(20, 30), 2.0); // Array to hold the places in the response _placeResults = [NSArray array]; // Create the GMSPlaceSearchByTextRequest object. [_placesClient searchByTextWithRequest:request callback:^(NSArray<GMSPlace *> _Nullable placeResults, NSError * _Nullable error) { if (placeResults.count > 0) { // Get list of places. _placeResults = placeResults; } }];
GooglePlacesSwift
let restriction = RectangularLocationRestriction( northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30), southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50) ) let searchByTextRequest = SearchByTextRequest( textQuery: "pizza in New York", placeProperties: [ .name, .placeID ], locationRestriction: restriction, includedType: .restaurant, maxResultCount: 5, minRating: 3.5, priceLevels: [ .moderate, .inexpensive ], isStrictTypeFiltering: true ) switch await placesClient.searchByText(with: searchByTextRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
Câu trả lời trên tính năng Tìm kiếm bằng văn bản
Text Search API trả về một mảng các kết quả trùng khớp ở dạng các đối tượng GMSPlace
, với một đối tượng GMSPlace
cho mỗi vị trí trùng khớp.
Cùng với các trường dữ liệu, đối tượng GMSPlace
trong phản hồi còn chứa các hàm thành phần sau:
-
isOpen
tính toán xem một địa điểm có mở cửa tại thời điểm nhất định hay không. isOpenAtDate
tính toán xem một địa điểm có mở cửa vào một ngày nhất định hay không.
Thông số bắt buộc
Sử dụng đối tượng GMSPlaceSearchByTextRequest
để chỉ định các tham số bắt buộc cho thao tác tìm kiếm.
-
Danh sách trường
Chỉ định những thuộc tính dữ liệu địa điểm cần trả về. Truyền danh sách thuộc tính
GMSPlace
chỉ định các trường dữ liệu cần trả về. Nếu bạn bỏ qua mặt nạ trường, yêu cầu sẽ trả về lỗi.Bạn nên thiết kế danh sách trường để đảm bảo rằng bạn không yêu cầu dữ liệu không cần thiết, nhờ đó tránh được các khoản phí thanh toán và thời gian xử lý không cần thiết.
Chỉ định một hoặc nhiều trường sau:
Các trường sau đây kích hoạt SKU của Tìm kiếm văn bản (chỉ mã nhận dạng):
GMSPlacePropertyPlaceID
,GMSPlacePropertyName
Các trường sau đây kích hoạt SKU Tìm kiếm văn bản (Cơ bản):
GMSPlacePropertyAddressComponents
,GMSPlacePropertyBusinessStatus
,GMSPlacePropertyFormattedAddress
,GMSPlacePropertyIconBackgroundColor
,GMSPlacePropertyIconImageURL
,GMSPlacePropertyCoordinate
,GMSPlacePropertyPhotos
,GMSPlacePropertyPlusCode
,GMSPlacePropertyTypes
,GMSPlacePropertyUTCOffsetMinutes
,GMSPlacePropertyViewport
,GMSPlacePropertyWheelchairAccessibleEntrance
Các trường sau đây kích hoạt SKU Tìm kiếm văn bản (Nâng cao):
GMSPlacePropertyCurrentOpeningHours
,GMSPlacePropertySecondaryOpeningHours
,GMSPlacePropertyPhoneNumber
,GMSPlacePropertyPriceLevel
,GMSPlacePropertyRating
,GMSPlacePropertyOpeningHours
,GMSPlacePropertyUserRatingsTotal
,GMSPlacePropertyWebsite
Các trường sau đây kích hoạt SKU của Tìm kiếm văn bản (Ưu tiên):
GMSPlacePropertyCurbsidePickup
,GMSPlacePropertyDelivery
,GMSPlacePropertyDineIn
,GMSPlacePropertyEditorialSummary
,GMSPlacePropertyReservable
,GMSPlacePropertyReviews
,GMSPlacePropertyServesBeer
,GMSPlacePropertyServesBreakfast
,GMSPlacePropertyServesBrunch
,GMSPlacePropertyServesDinner
,GMSPlacePropertyServesLunch
,GMSPlacePropertyServesVegetarianFood
,GMSPlacePropertyServesWine
,GMSPlacePropertyTakeout
-
textQuery
Chuỗi văn bản cần tìm kiếm, ví dụ: "nhà hàng", "123 Main Street" hoặc "nơi tốt nhất để ghé thăm ở San Francisco".
Thông số tùy chọn
Sử dụng đối tượng GMSPlaceSearchByTextRequest
để chỉ định các tham số không bắt buộc cho thao tác tìm kiếm.
includedType
Giới hạn kết quả ở các vị trí khớp với loại đã chỉ định trong Bảng A. Bạn chỉ có thể chỉ định một loại. Ví dụ:
request.includedType = "bar"
request.includedType = "pharmacy"
isOpenNow
Nếu là
true
, hãy chỉ trả về những địa điểm đang mở cửa kinh doanh tại thời điểm gửi truy vấn. Nếu làfalse
, hãy trả về tất cả các doanh nghiệp bất kể trạng thái mở cửa. Những địa điểm không chỉ định giờ mở cửa trong cơ sở dữ liệu Google Địa điểm sẽ được trả về nếu bạn đặt tham số này thànhfalse
.isStrictTypeFiltering
Được dùng với tham số
includeType
. Khi bạn đặt thànhtrue
, chỉ những vị trí khớp với các kiểu đã chỉ định doincludeType
chỉ định mới được trả về. Khi đặt là false, theo mặc định, phản hồi có thể chứa các vị trí không khớp với loại đã chỉ định.locationBias
Chỉ định một vùng để tìm kiếm. Vị trí này đóng vai trò là một độ lệch, tức là có thể trả về kết quả liên quan đến vị trí đã chỉ định, bao gồm cả kết quả nằm ngoài khu vực đã chỉ định.
Bạn có thể chỉ định
locationRestriction
hoặclocationBias
, nhưng không thể chỉ định cả hai. Bạn có thể coilocationRestriction
là khu vực chỉ định kết quả, cònlocationBias
dùng để chỉ định khu vực mà kết quả phải ở gần nhưng có thể ở bên ngoài khu vực đó.Chỉ định khu vực dưới dạng Cửa sổ xem hình chữ nhật hoặc hình tròn.
Một đường tròn được xác định bởi tâm điểm và bán kính tính bằng mét. Bán kính phải nằm trong khoảng từ 0 đến 50000, 0. Bán kính mặc định là 0.0. Ví dụ:
request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(latitude: 20, longitude: 30), radius: 2.0)
Hình chữ nhật là một khung nhìn vĩ độ – kinh độ, được biểu thị dưới dạng hai đường chéo đối diện điểm thấp và điểm cao. Điểm thấp đánh dấu góc Tây Nam của hình chữ nhật, còn điểm cao biểu thị góc Đông Bắc của hình chữ nhật.
Một khung nhìn được coi là một khu vực đóng, có nghĩa là khu vực đó bao gồm cả ranh giới của khung nhìn đó. Giới hạn vĩ độ phải nằm trong khoảng từ -90 đến 90 độ, còn giới hạn kinh độ phải nằm trong khoảng từ -180 đến 180 độ:
- Nếu
low
=high
, khung nhìn sẽ bao gồm một điểm duy nhất đó. - Nếu
low.longitude
>high.longitude
, thì phạm vi kinh độ sẽ bị đảo ngược (khung nhìn vượt qua đường kinh độ 180 độ). - Nếu
low.longitude
= -180 độ vàhigh.longitude
= 180 độ, khung nhìn sẽ bao gồm tất cả các kinh độ. - Nếu
low.longitude
= 180 độ vàhigh.longitude
= -180 độ, thì phạm vi kinh độ sẽ trống. - Nếu
low.latitude
>high.latitude
, thì phạm vi vĩ độ sẽ trống.
- Nếu
locationRestriction
Chỉ định một vùng để tìm kiếm. Kết quả nằm ngoài khu vực đã chỉ định sẽ không được trả về. Chỉ định khu vực dưới dạng một Khung nhìn hình chữ nhật. Hãy xem nội dung mô tả về
locationBias
để biết thông tin về cách xác định Khung nhìn.Bạn có thể chỉ định
locationRestriction
hoặclocationBias
, nhưng không thể chỉ định cả hai. Bạn có thể coilocationRestriction
là khu vực chỉ định kết quả, cònlocationBias
dùng để chỉ định khu vực mà kết quả phải ở gần nhưng có thể ở bên ngoài khu vực đó.-
maxResultCount
Chỉ định số lượng kết quả địa điểm tối đa cần trả về. Phải nằm trong khoảng từ 1 đến 20 (mặc định).
minRating
Chỉ cung cấp kết quả cho những người dùng có điểm xếp hạng trung bình của người dùng lớn hơn hoặc bằng giới hạn này. Giá trị phải nằm trong khoảng từ 0 đến 5 (bao gồm) và tăng từng 0,5. Ví dụ: bao gồm 0, 0.5, 1.0, ... , 5.0. Các giá trị được làm tròn lên đến 0,5 gần nhất. Ví dụ: giá trị 0, 6 sẽ loại bỏ mọi kết quả có điểm xếp hạng nhỏ hơn 1.
-
priceLevels
Hạn chế tìm kiếm ở những địa điểm được đánh dấu ở các mức giá nhất định. Lựa chọn mặc định là chọn tất cả các mức giá.
Chỉ định một mảng gồm một hoặc nhiều giá trị do
PriceLevel
xác định.Ví dụ:
request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
Chỉ định cách xếp hạng kết quả trong phản hồi dựa trên loại cụm từ tìm kiếm:
- Đối với cụm từ tìm kiếm theo danh mục, chẳng hạn như "Nhà hàng ở thành phố New York",
.relevance
(xếp hạng kết quả theo mức độ liên quan với cụm từ tìm kiếm) là giá trị mặc định. Bạn có thể đặtrankPreference
thành.relevance
hoặc.distance
(xếp hạng kết quả theo khoảng cách). - Đối với cụm từ tìm kiếm không theo danh mục như "Mountain View, CA", bạn không nên đặt
rankPreference
.
- Đối với cụm từ tìm kiếm theo danh mục, chẳng hạn như "Nhà hàng ở thành phố New York",
regionCode
Mã vùng dùng để định dạng phản hồi, được chỉ định dưới dạng giá trị mã CLDR hai ký tự. Tham số này cũng có thể gây ảnh hưởng đến kết quả tìm kiếm. Không có giá trị mặc định.
Nếu tên quốc gia của trường địa chỉ trong phản hồi khớp với mã khu vực, thì mã quốc gia sẽ bị bỏ qua khỏi địa chỉ.
Hầu hết mã CLDR đều giống với mã ISO 3166-1, với một số ngoại lệ đáng chú ý. Ví dụ: ccTLD (miền cấp cao nhất theo mã quốc gia) của Vương quốc Anh là "uk" (.co.uk) trong khi mã ISO 3166-1 của mã này là "gb" (về mặt kỹ thuật là "Vương quốc Anh" và Bắc Ireland). Tuỳ theo luật hiện hành, thông số này có thể ảnh hưởng đến kết quả.
Hiển thị thuộc tính trong ứng dụng của bạn
Khi hiển thị thông tin thu được từ GMSPlacesClient
, chẳng hạn như ảnh và bài đánh giá, ứng dụng cũng phải cho thấy các thuộc tính bắt buộc.
Ví dụ: thuộc tính reviews
của đối tượng GMSPlacesClient
chứa một mảng tối đa 5 đối tượng GMSPlaceReview
. Mỗi đối tượng GMSPlaceReview
có thể chứa thông tin ghi nhận sự đóng góp và thông tin ghi nhận tác giả.
Nếu hiển thị bài đánh giá trong ứng dụng của mình, thì bạn cũng phải hiển thị mọi thuộc tính ghi nhận tác giả hoặc ghi nhận tác giả.
Để biết thêm thông tin, hãy xem tài liệu về mô hình phân bổ.