Tìm kiếm lân cận (Mới)

Chọn nền tảng: Android iOS JavaScript Dịch vụ web
Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Yêu cầu Tìm kiếm lân cận (Mới) lấy đầu vào là khu vực cần tìm kiếm được chỉ định dưới dạng một hình tròn, được xác định bằng toạ độ vĩ độ và kinh độ của điểm trung tâm của hình tròn và bán kính tính bằng mét. Yêu cầu này trả về một danh sách các địa điểm trùng khớp, mỗi địa điểm được biểu thị bằng một đối tượng GMSPlace trong khu vực tìm kiếm được chỉ định.

Theo mặc định, phản hồi chứa các địa điểm thuộc mọi loại trong khu vực tìm kiếm. Bạn có thể tuỳ ý lọc phản hồi bằng cách chỉ định danh sách các loại địa điểm để đưa vào hoặc loại trừ một cách rõ ràng khỏi phản hồi. Ví dụ: bạn có thể chỉ định chỉ bao gồm những địa điểm có loại "nhà hàng", "tiệm bánh" và "quán cà phê" trong phản hồi, hoặc loại trừ tất cả những địa điểm có loại "trường học".

Yêu cầu Nearby Search (Mới)

Đưa ra yêu cầu Tìm kiếm lân cận bằng cách gọi GMSPlacesClient searchNearbyWithRequest:, truyền một đối tượng GMSPlaceSearchNearbyRequest xác định các tham số yêu cầu và một phương thức gọi lại, thuộc loại GMSPlaceSearchNearbyResultCallback, để xử lý phản hồi.

Đối tượng GMSPlaceSearchNearbyRequest chỉ định tất cả các tham số bắt buộckhô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à mặt nạ trường, do GMSPlaceProperty 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.
  • hạn chế về vị trí, tức là vòng tròn xác định khu vực tìm kiếm.

Yêu cầu tìm kiếm lân cận trong ví dụ này chỉ định rằng các đối tượng GMSPlace trong phản hồi chứa tên địa điểm (GMSPlacePropertyName) và toạ độ địa điểm (GMSPlacePropertyCoordinate) cho mỗi đối tượng GMSPlace trong kết quả tìm kiếm. Thao tác này cũng lọc phản hồi để chỉ trả về những địa điểm thuộc loại "nhà hàng" và "quán cà phê".

Places Swift SDK

let restriction = CircularCoordinateRegion(center: CLLocationCoordinate2DMake(37.7937, -122.3965), radius: 500)
let searchNearbyRequest = SearchNearbyRequest(
  locationRestriction: restriction,
  placeProperties: [ .name, .coordinate],
  includedTypes: [ .restaurant, .cafe ],
)
switch await placesClient.searchNearby(with: searchNearbyRequest) {
case .success(let places):
  // Handle places
case .failure(let placesError):
  // Handle error
}

Swift

// Array to hold the places in the response
var placeResults: [GMSPlace] = []

// Define the search area as a 500 meter diameter circle in San Francisco, CA.
let circularLocationRestriction = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500)

// Specify the fields to return in the GMSPlace object for each place in the response.
let placeProperties = [GMSPlaceProperty.name, GMSPlaceProperty.coordinate].map {$0.rawValue}

// Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return.
var request = GMSPlaceSearchNearbyRequest(locationRestriction: circularLocationRestriction, placeProperties: placeProperties)
let includedTypes = ["restaurant", "cafe"]
request.includedTypes = includedTypes

let callback: GMSPlaceSearchNearbyResultCallback = { [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
  }
  placeResults = results
}

GMSPlacesClient.shared().searchNearby(with: request, callback: callback)

Objective-C

// Array to hold the places in the response
_placeResults = [NSArray array];

// Define the search area as a 500 meter diameter circle in San Francisco, CA.
id<GMSPlaceLocationRestriction> circularLocation = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500);

// Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return.
GMSPlaceSearchNearbyRequest *request = [[GMSPlaceSearchNearbyRequest alloc]
  initWithLocationRestriction:circularLocation
              placeProperties:@[ GMSPlacePropertyName, GMSPlacePropertyCoordinate ]];

// Set the place types to filter on.
NSArray<NSString *> *includedTypes = @[ @"restaurant", @"cafe" ];
request.includedTypes = [[NSMutableArray alloc] initWithArray:includedTypes];

[_placesClient searchNearbyWithRequest:request
  callback:^(NSArray<GMSPlace *> *_Nullable places, NSError *_Nullable error) {
    if (error != nil) {
      NSLog(@"An error occurred %@", [error localizedDescription]);
      return;
    } else {
        // Get list of places.
        _placeResults = places;
    }
  }
];

Câu trả lời của Nearby Search

Nearby Search API trả về một mảng các kết quả trùng khớp dưới dạng các đối tượng GMSPlace, với một đối tượng GMSPlace cho mỗi địa điểm trùng khớp.

Lấy trạng thái đang mở

Đối tượng GMSPlacesClient chứa một hàm thành phần có tên là isOpenWithRequest (isOpenRequest trong Swift và isPlaceOpenRequest trong GooglePlacesSwift). Hàm này trả về một phản hồi cho biết địa điểm hiện có mở cửa hay không, dựa trên thời gian được chỉ định trong lệnh gọi.

Phương thức này nhận một đối số duy nhất thuộc loại GMSPlaceIsOpenWithRequest chứa:

  • Một đối tượng GMSPlace hoặc một chuỗi chỉ định mã địa điểm. Để biết thêm thông tin về cách tạo đối tượng Place bằng các trường cần thiết, hãy xem phần Thông tin chi tiết về địa điểm.
  • Một đối tượng NSDate (Obj-C) hoặc Date (Swift) không bắt buộc, chỉ định thời gian bạn muốn kiểm tra. Nếu bạn không chỉ định thời gian, giá trị mặc định sẽ là thời gian hiện tại.
  • Phương thức GMSPlaceOpenStatusResponseCallback để xử lý phản hồi.
  • >

Phương thức GMSPlaceIsOpenWithRequest yêu cầu bạn phải đặt các trường sau trong đối tượng GMSPlace:

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Nếu bạn không cung cấp các trường này trong đối tượng Place hoặc nếu bạn truyền một mã địa điểm, thì phương thức này sẽ dùng GMSPlacesClient GMSFetchPlaceRequest: để tìm nạp các trường đó.

isOpenWithRequest câu trả lời

isOpenWithRequest trả về một đối tượng GMSPlaceIsOpenResponse chứa một giá trị boolean có tên là status cho biết doanh nghiệp đang mở cửa, đóng cửa hay không xác định được trạng thái.

Ngôn ngữ Giá trị nếu mở Giá trị nếu đóng Giá trị nếu trạng thái không xác định
Places Swift true false nil
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

Thanh toán cho isOpenWithRequest

Ví dụ: Tạo yêu cầu GMSPlaceIsOpenWithRequest

Ví dụ sau đây cho thấy cách khởi tạo một GMSPlaceIsOpenWithRequest trong một đối tượng GMSPlace hiện có.

Places Swift SDK

        let isOpenRequest = IsPlaceOpenRequest(place: place)
        switch await placesClient.isPlaceOpen(with: isOpenRequest) {
          case .success(let isOpenResponse):
            switch isOpenResponse.status {
              case true:
                // Handle open
              case false:
                // Handle closed
              case nil:
                // Handle unknown
          case .failure(let placesError):
            // Handle error
        }
        

Swift

    let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil)
      GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in
        if let error = error {
          // Handle Error
        }
        switch response.status {
          case .open:
            // Handle open
          case .closed:
            // Handle closed
          case .unknown:
            // Handle unknown
        }
      }
        

Objective-C

          GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil];

          [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) {
            if (error) {
              // Handle error
            }

            switch (response.status) {
              case GMSPlaceOpenStatusOpen:
                // Handle open
              case GMSPlaceOpenStatusClosed:
                // Handle closed
              case GMSPlaceOpenStatusUnknown:
                // Handle unknown
            }
          }];
          

Thông số bắt buộc

Sử dụng đối tượng GMSPlaceSearchNearbyRequest để chỉ định các tham số bắt buộc cho hoạt động tìm kiếm.

  • Danh sách trường

    Khi yêu cầu thông tin chi tiết về địa điểm, bạn phải chỉ định dữ liệu cần trả về trong đối tượng GMSPlace cho địa điểm dưới dạng một mặt nạ trường. Để xác định mặt nạ trường, hãy truyền một mảng giá trị từ GMSPlaceProperty đến đối tượng GMSPlaceSearchNearbyRequest. Che phủ trường là một phương pháp thiết kế hay để đảm bảo rằng bạn không yêu cầu dữ liệu không cần thiết. Điều này giúp tránh thời gian xử lý và phí thanh toán không cần thiết.

    Chỉ định một hoặc nhiều trường sau:

    • Các trường sau đây sẽ kích hoạt SKU Tìm kiếm lân cận Pro:

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyName
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlaceID
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance

    • Các trường sau đây sẽ kích hoạt SKU Tìm kiếm lân cận cho doanh nghiệp:

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite

    • Các trường sau đây sẽ kích hoạt SKU Nearby Search Enterprise Plus:

      GMSPlacePropertyCurbsidePickup
      GMSPlacePropertyDelivery
      GMSPlacePropertyDineIn
      GMSPlacePropertyEditorialSummary
      GMSPlacePropertyReservable
      GMSPlacePropertyReviews
      GMSPlacePropertyServesBeer
      GMSPlacePropertyServesBreakfast
      GMSPlacePropertyServesBrunch
      GMSPlacePropertyServesDinner
      GMSPlacePropertyServesLunch
      GMSPlacePropertyServesVegetarianFood
      GMSPlacePropertyServesWine
      GMSPlacePropertyTakeout

    Ví dụ sau đây truyền một danh sách gồm hai giá trị trường để chỉ định rằng đối tượng GMSPlace do một yêu cầu trả về chứa các trường nameplaceID:

    Places Swift SDK

    // Specify the place data types to return.
    let fields: [PlaceProperty] = [.placeID, .displayName]
            

    Swift

    // Specify the place data types to return.
    let fields: [GMSPlaceProperty] = [.placeID, .name]
            

    Objective-C

    // Specify the place data types to return.
    NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
            
  • locationRestriction

    Một đối tượng GMSPlaceLocationRestriction xác định khu vực cần tìm kiếm được chỉ định dưới dạng một hình tròn, được xác định bằng 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,0 đến 50000,0. Bán kính mặc định là 0.0. Bạn phải đặt giá trị này trong yêu cầu thành một giá trị lớn hơn 0.0.

Thông số tùy chọn

Sử dụng đối tượng GMSPlaceSearchNearbyRequest để chỉ định các tham số không bắt buộc cho tìm kiếm.

  • includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes

    Cho phép bạn chỉ định một danh sách các loại trong bảng các loại Bảng A dùng để lọc kết quả tìm kiếm. Bạn có thể chỉ định tối đa 50 loại trong mỗi danh mục hạn chế về loại.

    Một địa điểm chỉ có thể có một loại chính duy nhất trong số các loại thuộc Bảng A được liên kết với địa điểm đó. Ví dụ: loại chính có thể là "mexican_restaurant" hoặc "steak_house". Sử dụng includedPrimaryTypesexcludedPrimaryTypes để lọc kết quả theo loại chính của một địa điểm.

    Một địa điểm cũng có thể có nhiều giá trị loại từ các loại Bảng A được liên kết với địa điểm đó. Ví dụ: một nhà hàng có thể có các loại sau: "seafood_restaurant", "restaurant", "food", "point_of_interest", "establishment". Sử dụng includedTypesexcludedTypes để lọc kết quả trong danh sách các loại được liên kết với một địa điểm.

    Khi bạn chỉ định một loại chính chung, chẳng hạn như "restaurant" hoặc "hotel", phản hồi có thể chứa những địa điểm có loại chính cụ thể hơn loại bạn đã chỉ định. Ví dụ: bạn chỉ định bao gồm một loại chính là "restaurant". Sau đó, phản hồi có thể chứa những địa điểm có loại chính là "restaurant", nhưng phản hồi cũng có thể chứa những địa điểm có loại chính cụ thể hơn, chẳng hạn như "chinese_restaurant" hoặc "seafood_restaurant".

    Nếu bạn chỉ định một cụm từ tìm kiếm có nhiều hạn chế về loại, thì chỉ những địa điểm đáp ứng tất cả các hạn chế đó mới được trả về. Ví dụ: nếu bạn chỉ định {"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}, những địa điểm được trả về sẽ cung cấp các dịch vụ liên quan đến "restaurant" nhưng không hoạt động chủ yếu như một "steak_house".

    includedTypes

    Danh sách các loại địa điểm trong Bảng A để tìm kiếm. Nếu bạn bỏ qua tham số này, thì các địa điểm thuộc mọi loại sẽ được trả về.

    excludedTypes

    Danh sách các loại địa điểm trong Bảng A cần loại trừ khỏi một cụm từ tìm kiếm.

    Nếu bạn chỉ định cả includedTypes (chẳng hạn như "school") và excludedTypes (chẳng hạn như "primary_school") trong yêu cầu, thì phản hồi sẽ bao gồm những địa điểm được phân loại là "school" nhưng không phải là "primary_school". Phản hồi bao gồm những địa điểm khớp với ít nhất một trong số includedTypeskhông có trong số excludedTypes.

    Nếu có bất kỳ loại nào xung đột, chẳng hạn như một loại xuất hiện trong cả includedTypesexcludedTypes, thì lỗi INVALID_REQUEST sẽ được trả về.

    includedPrimaryTypes

    Danh sách các loại địa điểm chính trong Bảng A để đưa vào một cụm từ tìm kiếm.

    excludedPrimaryTypes

    Danh sách các loại địa điểm chính trong Bảng A cần loại trừ khỏi một lượt tìm kiếm.

    Nếu có bất kỳ loại chính nào xung đột, chẳng hạn như một loại xuất hiện trong cả includedPrimaryTypesexcludedPrimaryTypes, thì lỗi INVALID_ARGUMENT sẽ được trả về.

  • maxResultCount

    Chỉ định số lượng kết quả về địa điểm tối đa cần trả về. Phải nằm trong khoảng từ 1 đến 20 (mặc định).

  • rankPreference

    Loại thứ hạng cần sử dụng. Nếu bạn bỏ qua tham số này, kết quả sẽ được xếp hạng theo mức độ phổ biến. Có thể là một trong những giá trị sau:

    • .popularity (mặc định) Sắp xếp kết quả dựa trên mức độ phổ biến.
    • .distance Sắp xếp kết quả theo thứ tự tăng dần theo khoảng cách từ vị trí đã chỉ định.
  • regionCode

    Mã khu vực dùng để định dạng phản hồi, được chỉ định là giá trị mã CLDR gồm 2 ký tự. Không có giá trị mặc định.

    Nếu tên quốc gia của trường formattedAddress trong phản hồi khớp với regionCode, thì mã quốc gia sẽ bị bỏ qua trong formattedAddress. Tham số này không ảnh hưởng đến adrFormatAddress (luôn bao gồm tên quốc gia) hoặc shortFormattedAddress (không bao giờ bao gồm tên quốc gia).

    Hầu hết mã CLDR đều giống với mã ISO 3166-1, trừ một số trường hợp ngoại lệ đáng chú ý. Ví dụ: ccTLD của Vương quốc Anh là "uk" (.co.uk) trong khi mã ISO 3166-1 của quốc gia này là "gb" (về mặt kỹ thuật là cho thực thể "Vương quốc Anh và Bắc Ireland"). Tham số này có thể ảnh hưởng đến kết quả dựa trên luật hiện hành.

Hiển thị thông tin ghi nhận quyền tác giả trong ứng dụng

Khi hiển thị thông tin lấy từ GMSPlacesClient, chẳng hạn như ảnh và bài đánh giá, ứng dụng của bạn cũng phải hiển thị thông tin ghi nhận bắt buộc.

Ví dụ: thuộc tính reviews của đối tượng GMSPlacesClient chứa một mảng gồm tối đa 5 đối tượng GMSPlaceReview. Mỗi đối tượng GMSPlaceReview có thể chứa thông tin ghi nhận quyền tác giả và thông tin ghi nhận tác giả. Nếu hiển thị bài đánh giá trong ứng dụng, bạn cũng phải hiển thị mọi thông tin ghi nhận quyền tác giả hoặc thông tin ghi nhận tác giả.

Để biết thêm thông tin, hãy xem tài liệu về phân bổ.