Tự động hoàn thành địa điểm (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)

Dịch vụ Tự động hoàn thành (Mới) là một API iOS trả về các đề xuất về địa điểm để phản hồi một yêu cầu. Trong yêu cầu, hãy chỉ định một chuỗi tìm kiếm văn bản và các giới hạn địa lý kiểm soát khu vực tìm kiếm.

Dịch vụ Tự động hoàn thành (Mới) có thể so khớp theo từ đầy đủ và chuỗi con của dữ liệu đầu vào, phân giải tên địa điểm, địa chỉ và mã cộng. Do đó, các ứng dụng có thể gửi truy vấn khi người dùng nhập để cung cấp đề xuất địa điểm nhanh chóng.

Đề xuất địa điểm là các địa điểm, chẳng hạn như doanh nghiệp, địa chỉ và điểm tham quan, dựa trên chuỗi văn bản đầu vào và khu vực tìm kiếm đã chỉ định.

Ví dụ: bạn gọi API bằng cách sử dụng một chuỗi chứa một phần dữ liệu đầu vào của người dùng, "Spagh", với khu vực tìm kiếm giới hạn ở Thành phố New York. Sau đó, phản hồi sẽ chứa danh sách đề xuất địa điểm khớp với chuỗi tìm kiếm và khu vực tìm kiếm, chẳng hạn như nhà hàng có tên "Cafe Spaghetti", cùng với thông tin chi tiết về địa điểm đó.

Đề xuất địa điểm được trả về được thiết kế để hiển thị cho người dùng để họ có thể chọn địa điểm mong muốn. Bạn có thể tạo yêu cầu Thông tin chi tiết về địa điểm (Mới) để biết thêm thông tin về bất kỳ đề xuất địa điểm nào được trả về.

Bạn có thể tích hợp chức năng Tự động hoàn thành (Mới) vào ứng dụng theo hai cách chính:

Nhận thông tin dự đoán về địa điểm theo phương thức lập trình

Yêu cầu tự động hoàn thành (Mới)

Tạo yêu cầu tự động hoàn thành bằng cách gọi một phương thức trên GMSPlacesClient. Bạn có thể truyền các tham số trong đối tượng GMSAutocompleteRequest. Phản hồi cung cấp các đề xuất Tự động hoàn thành trong đối tượng GMSAutocompletePlaceSuggestion.

Bạn phải có khoá API và tham số query. Bạn cũng có thể thêm GMSAutocompleteSessionToken để liên kết các yêu cầu với một phiên thanh toán và GMSAutocompleteFilter để áp dụng cho kết quả.

Phiên bản SDK Swift của Places

Tạo yêu cầu tự động hoàn thành bằng cách gọi một phương thức trên PlacesClient. Bạn có thể truyền các tham số trong đối tượng AutocompleteRequest. Phản hồi cung cấp các đề xuất Tự động hoàn thành trong đối tượng AutocompletePlaceSuggestion.

Bạn phải có khoá API và tham số query. Bạn cũng có thể thêm AutocompleteSessionToken để liên kết các yêu cầu với một phiên thanh toán và AutocompleteFilter để áp dụng cho kết quả.

Để biết thêm thông tin về các tham số bắt buộc và không bắt buộc, hãy xem phần tham số của tài liệu này.

SDK Places Swift

let center = (37.3913916, -122.0879074)
let northEast = (37.388162, -122.088137)
let southWest = (37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  // Handle suggestions.
case .failure(let placesError):
  // Handle error.
}

Swift

let token = GMSAutocompleteSessionToken()

let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051)
let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087)

let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds)

let request = GMSAutocompleteRequest(query:"Spagh")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137);
CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023);

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ kGMSPlaceTypeRestaurant ];
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Câu trả lời tự động hoàn thành (Mới)

Tính năng tự động hoàn thành trả về một mảng gồm tối đa 5 thực thể GMSAutocompleteSuggestion. Mảng này chứa:

  • placeID
  • types: Các loại áp dụng cho địa điểm này.
  • distanceMeters: Khoảng cách từ gốc.
  • attributedFullText: Văn bản đầy đủ mà con người có thể đọc được của một đề xuất.
  • attributedPrimaryText: Văn bản chính mà con người có thể đọc được của một đề xuất.
  • attributedSecondaryText: Văn bản phụ mà con người có thể đọc được của một đề xuất.
  • structuredFormat: Tên cụ thể và văn bản phân biệt, chẳng hạn như thành phố hoặc khu vực.

Thông số bắt buộc

truy vấn

Chuỗi văn bản cần tìm kiếm. Chỉ định từ và chuỗi con đầy đủ, tên địa điểm, địa chỉ và mã cộng. Dịch vụ Tự động hoàn thành (Mới) trả về các kết quả trùng khớp dựa trên chuỗi này và sắp xếp kết quả dựa trên mức độ liên quan được nhận thấy.

Thông số tùy chọn

sessionToken

Mã thông báo phiên là các chuỗi do người dùng tạo để theo dõi các lệnh gọi Tự động hoàn thành (Mới) – cả lệnh gọi được thực hiện thông qua tiện ích và lệnh gọi theo lập trình – dưới dạng "phiên". Tính năng Tự động hoàn thành (Mới) sử dụng mã thông báo phiên để nhóm các giai đoạn truy vấn và lựa chọn của một lượt tìm kiếm tự động hoàn thành của người dùng thành một phiên riêng biệt cho mục đích thanh toán. Để biết thêm thông tin, hãy xem phần Mã thông báo phiên.

Các thông số AutocompleteFilter không bắt buộc

loại

Một địa điểm chỉ có thể có một loại chính trong số các loại Bảng A hoặc Bảng B đượ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.

Theo mặc định, API sẽ trả về tất cả địa điểm dựa trên thông số input, bất kể giá trị loại chính được liên kết với địa điểm đó. Hạn chế kết quả thuộc một loại chính hoặc các loại chính nhất định bằng cách truyền tham số types.

Sử dụng tham số này để chỉ định tối đa 5 giá trị loại trong Bảng A hoặc Bảng B. Một địa điểm phải khớp với một trong các giá trị loại chính được chỉ định để được đưa vào phản hồi.

Yêu cầu sẽ bị từ chối kèm theo lỗi INVALID_REQUEST nếu:

  • Chỉ định nhiều hơn 5 loại.
  • Mọi loại không được nhận dạng đều được chỉ định.

Ví dụ: để giới hạn kết quả ở các cửa hàng bán đồ thể thao, hãy chỉ định loại đó trong AutocompleteFilter:

SDK Places Swift

let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
  

Swift

let filter = GMSAutocompleteFilter()
filter.types = ["sporting_goods_store"]
  

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ "sporting_goods_store" ];

quốc gia

Chỉ bao gồm kết quả từ danh sách các khu vực được chỉ định, được chỉ định dưới dạng một mảng gồm tối đa 15 giá trị gồm hai ký tự ccTLD ("miền cấp cao nhất"). Nếu bạn bỏ qua, hệ thống sẽ không áp dụng quy định hạn chế nào cho phản hồi. Ví dụ: để giới hạn các khu vực ở Đức và Pháp:

SDK Places Swift

let filter = AutocompleteFilter(countries: ["DE", "FR"])
  

Swift

let filter = GMSAutocompleteFilter()
filter.countries = ["DE", "FR"]

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.countries = @[ @"DE", @"FR" ];

Nếu bạn chỉ định cả locationRestrictioncountries, thì kết quả sẽ nằm trong khu vực giao nhau của hai chế độ cài đặt.

inputOffset

Độ dời ký tự Unicode dựa trên 0 cho biết vị trí con trỏ trong input. Vị trí con trỏ có thể ảnh hưởng đến nội dung dự đoán được trả về. Nếu trống, giá trị này sẽ mặc định là độ dài input.

locationBias hoặc locationRestriction

Bạn có thể chỉ định locationBias hoặc locationRestriction, nhưng không được chỉ định cả hai để xác định vùng tìm kiếm. Hãy coi locationRestriction là chỉ định khu vực mà kết quả phải nằm trong đó và locationBias là chỉ định khu vực mà kết quả phải ở gần nhưng có thể nằm ngoài khu vực đó.

  • locationBias chỉ định một khu vực để tìm kiếm. Vị trí này đóng vai trò là độ lệch, nghĩa là có thể trả về kết quả xung quanh vị trí đã chỉ định, bao gồm cả kết quả bên ngoài khu vực đã chỉ định.

  • locationRestriction chỉ định một khu vực để tìm kiếm. Hệ thống sẽ không trả về kết quả nằm ngoài khu vực được chỉ định.

Chỉ định vùng locationBias hoặc locationRestriction dưới dạng khung nhìn hình chữ nhật hoặc hình tròn.

Đường 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 đến 50000. Giá trị mặc định là 0.0. Đối với locationRestriction, bạn phải đặt bán kính thành một giá trị lớn hơn 0.0. Nếu không, yêu cầu sẽ không trả về kết quả nào.

Ví dụ:

SDK Places Swift

let center = CLLocationCoordinate2DMake(40.477398, -74.259087)

let bias = CircularCoordinateRegion(center: center, radius: 1000.0)

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

Swift

let center = CLLocationCoordinate2DMake(40.730610, -73.935242)
let radius = 1000.0

filter.locationBias = GMSPlaceCircularLocationOption(center, radius)

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242);
radius = 1000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceCircularLocationOption(center, radius);

Hình chữ nhật là khung nhìn vĩ độ-kinh độ, được biểu thị dưới dạng hai điểm lowhigh đối diện nhau theo đường chéo. Khung nhìn được coi là một vùng kín, nghĩa là khung nhìn bao gồm cả ranh giới của nó. Giới hạn vĩ độ phải nằm trong khoảng từ -90 đến 90 độ và 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 (cửa sổ xem sẽ vượt qua đường kinh độ 180 độ).
  • Nếu low.longitude = -180 độ và high.longitude= 180 độ, thì khung nhìn sẽ bao gồm tất cả kinh độ.
  • Nếu low.longitude = 180 độ và high.longitude = -180 độ, thì phạm vi kinh độ sẽ trống.

Bạn phải điền cả lowhigh, đồng thời hộp được biểu thị không được trống. Khung nhìn trống sẽ dẫn đến lỗi.

Ví dụ: khung nhìn này bao gồm toàn bộ thành phố New York:

SDK Places Swift

let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087)
let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051)

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

Swift

let high = CLLocationCoordinate2DMake(40.921628, -73.700051)
let low = CLLocationCoordinate2DMake(40.477398, -74.259087)

let filter = GMSAutocompleteFilter()
filter.locationBias = GMSPlaceRectangularLocationOption(high, low)

Objective-C

CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087);
CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051);

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceRectangularLocationOption(high, low);

nguồn gốc

Điểm gốc để tính toán khoảng cách theo đường thẳng đến đích (được trả về dưới dạng distanceMeters). Nếu bạn bỏ qua giá trị này, hệ thống sẽ không trả về khoảng cách theo đường thẳng. Phải được chỉ định dưới dạng toạ độ vĩ độ và kinh độ:

SDK Places Swift

let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
  

Swift

let filter = GMSAutocompleteFilter()
filter.origin =  CLLocation(latitude: 37.395804, longitude: -122.077023)
 

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];

filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];

regionCode

Mã khu vực dùng để định dạng phản hồi, được chỉ định dưới dạng giá trị hai ký tự ccTLD ("miền cấp cao nhất"). Hầu hết mã ccTLD giống hệt với mã ISO 3166-1, ngoại 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) còn mã ISO 3166-1 là "gb" (về mặt kỹ thuật là cho thực thể "Vương quốc Anh và Bắc Ireland").

Nếu bạn chỉ định mã vùng không hợp lệ, API sẽ trả về lỗi INVALID_ARGUMENT. Thông số này có thể ảnh hưởng đến kết quả dựa trên luật hiện hành.

shouldIncludePureServiceAreaBusinesses

Nếu true, trả về các doanh nghiệp cung cấp dịch vụ tại cơ sở khách hàng thuần tuý trong mảng phản hồi. Doanh nghiệp cung cấp dịch vụ tại cơ sở khách hàng thuần tuý là một doanh nghiệp trực tiếp cung cấp dịch vụ tận nơi hoặc giao hàng cho khách hàng, nhưng không phục vụ khách hàng tại địa chỉ của doanh nghiệp.

Ví dụ:

SDK Places Swift

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Swift

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.shouldIncludePureServiceAreaBusinesses = YES;

Thêm tiện ích Place Autocomplete

Để dễ dàng cung cấp trải nghiệm tự động hoàn thành địa điểm nhất quán hơn, bạn có thể thêm tiện ích Tự động hoàn thành địa điểm vào ứng dụng. Tiện ích này cung cấp một giao diện toàn màn hình chuyên dụng để xử lý dữ liệu đầu vào của người dùng và hiển thị thông tin dự đoán về địa điểm cho người dùng trong khi trả về các đối tượng AutocompletePlaceSuggestion cho ứng dụng. Sau đó, bạn có thể tạo yêu cầu Thông tin chi tiết về địa điểm (Mới) để nhận thêm thông tin về bất kỳ thông tin dự đoán địa điểm nào.

Tiện ích tự động hoàn thành địa điểm

Giống như khi nhận thông tin dự đoán về địa điểm theo phương thức lập trình, tiện ích Tự động hoàn thành địa điểm cho phép bạn sử dụng mã thông báo phiên để nhóm các yêu cầu tự động hoàn thành thành phiên cho mục đích thanh toán. Bạn có thể truyền mã thông báo phiên bằng cách gọi AutocompleteSessionToken().

Nếu bạn không cung cấp mã thông báo phiên, tiện ích sẽ tạo mã thông báo phiên Tự động hoàn thành cho bạn. Sau đó, bạn có thể lấy mã thông báo phiên này từ lệnh gọi lại onSelection. Để biết thêm thông tin về cách sử dụng mã thông báo phiên, hãy xem bài viết Giới thiệu về mã thông báo phiên.

Khi giá trị liên kết show được đặt thành true, người dùng sẽ được chuyển đến một chế độ xem toàn màn hình để họ có thể chọn một địa điểm. Khi người dùng nhập, tiện ích sẽ trả về các đề xuất về địa điểm như doanh nghiệp, địa chỉ và điểm yêu thích. Khi người dùng chọn một địa điểm, tiện ích sẽ gọi trình xử lý onSelection bằng địa điểm đã chọn và đóng chế độ xem toàn màn hình.

Đặt các thông số tiện ích Tự động hoàn thành

Ngoài các tham số có sẵn bằng cách lập trình, tiện ích Tự động hoàn thành địa điểm cũng cung cấp các tham số sau.

hiện (lên)/cho thấy

show chỉ định xem tiện ích có hiển thị hay không.

AutocompleteUICustomization

Các thông số AutocompleteUICustomization chỉ định các tuỳ chỉnh giao diện người dùng để áp dụng cho tiện ích. Các tuỳ chọn tuỳ chỉnh là:

  • AutocompleteListDensity. Tham số này cho phép bạn chọn mật độ của danh sách đề xuất, multiLine hoặc twoLine.
  • AutocompleteUIIcon. Tham số này cho phép bạn chọn hiển thị biểu tượng mặc định cho từng mục trong danh sách hay không.

onSelection

Phần đóng để chạy khi một địa điểm được chọn.

onError

Phương thức đóng để chạy khi xảy ra lỗi. PlacesError sẽ được truyền nếu xảy ra lỗi.

Xem ví dụ đầy đủ về mã.

Ví dụ về tính năng Tự động hoàn thành (Mới)

Sử dụng locationRestriction và locationBias

Tính năng Tự động hoàn thành (Mới) sử dụng tính năng thiên vị IP theo mặc định để kiểm soát khu vực tìm kiếm. Với độ lệch IP, API sử dụng địa chỉ IP của thiết bị để tạo độ lệch cho kết quả. Bạn có thể tuỳ ý sử dụng locationRestriction hoặc locationBias, nhưng không được sử dụng cả hai để chỉ định một khu vực cần tìm kiếm.

Quy định hạn chế về vị trí chỉ định khu vực cần tìm kiếm. Hệ thống sẽ không trả về kết quả nằm ngoài khu vực được chỉ định. Ví dụ sau đây sử dụng quy tắc hạn chế vị trí để giới hạn yêu cầu ở một quy tắc hạn chế vị trí hình tròn có bán kính 5.000 mét, tâm là San Francisco:

SDK Places Swift

let center = (37.775061, -122.419400)
let radius = 5000.0
let restriction = CircularCoordinateRegion(center: center, radius: radius)
let filter = AutocompleteFilter(coordinateRegionRestriction: restriction)
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Swift

let token = GMSAutocompleteSessionToken()

let center = CLLocationCoordinate2DMake(37.775061, -122.419400)
let radius = 5000.0

let filter = GMSAutocompleteFilter()
filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius)

let request = GMSAutocompleteRequest(query:"Piz")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400);
radius = 5000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Với độ lệch vị trí, vị trí đóng vai trò là độ lệch, tức là các kết quả xung quanh vị trí được chỉ định có thể được trả về, bao gồm cả các kết quả nằm ngoài khu vực được chỉ định. Ví dụ tiếp theo thay đổi yêu cầu trước đó để sử dụng độ lệch vị trí:

SDK Places Swift

let center = (37.775061, -122.419400)
let radius = 5000.0
let bias = CircularCoordinateRegion(center: center, radius: radius)
let filter = AutocompleteFilter(coordinateRegionBias: bias)
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Swift

let token = GMSAutocompleteSessionToken()

let center = CLLocationCoordinate2DMake(37.775061, -122.419400)
let radius = 5000.0

let filter = GMSAutocompleteFilter()
filter.locationBias = GMSPlaceCircularLocationOption(center, radius)

let request = GMSAutocompleteRequest(query:"Piz")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400);
radius = 5000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Các hình thức sử dụng

Sử dụng tham số loại để hạn chế kết quả của một yêu cầu thuộc một loại nhất định như được liệt kê trong Bảng ABảng B. Bạn có thể chỉ định một mảng gồm tối đa 5 giá trị. Nếu bạn bỏ qua, tất cả các loại đều được trả về.

Ví dụ sau đây chỉ định một chuỗi truy vấn là "Soccer" (Bóng đá) và sử dụng tham số types để hạn chế kết quả ở những cơ sở thuộc loại "sporting_goods_store":

SDK Places Swift

let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
    

Swift

let token = GMSAutocompleteSessionToken()

let filter = GMSAutocompleteFilter()
filter.types = ["sporting_goods_store"]

let request = GMSAutocompleteRequest(query:"Soccer")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ "sporting_goods_store" ];
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Sử dụng nguồn gốc

Khi bạn đưa tham số origin vào yêu cầu, được chỉ định dưới dạng toạ độ vĩ độ và kinh độ, API sẽ bao gồm khoảng cách theo đường thẳng từ điểm xuất phát đến điểm đến trong phản hồi. Phản hồi trả về khoảng cách dưới dạng distanceMeters.

Ví dụ này đặt gốc thành trung tâm của San Francisco:

SDK Places Swift

let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194))
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Swift

let token = GMSAutocompleteSessionToken()

let origin = CLLocation(latitude: 37.7749, longitude: -122.4194)

let filter = GMSAutocompleteFilter()

filter.origin =  origin

let request = GMSAutocompleteRequest(query:"Amoeba")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))")
        }
      }
    })

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023];
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
      }
    }
}];

Thêm tiện ích Tự động hoàn thành địa điểm

SDK Places Swift

struct PlaceAutocompleteDemoView: View {

  @State private var fetchedPlace: Place?
  @State private var placesError: PlacesError?
  @State private var showWidget = false

  public var body: some View {
    VStack {
      Button("Search for a place") {
        showWidget.toggle()
      }
      .placeAutocomplete(
        show: $showWidget,
        onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in
          Task {
            let placesClient = await PlacesClient.shared
            let fetchPlaceRequest = FetchPlaceRequest(
              placeID: autocompletePlaceSuggestion.placeID,
              placeProperties: [.displayName, .formattedAddress],
              sessionToken: autocompleteSessionToken
            )

            switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
            case .success(let place):
              print("Fetched place: \(place)")
              self.fetchedPlace = place
            case .failure(let placesError):
              print("Failed to fetch place: \(placesError)")
              self.placesError = placesError
            }
          }
        },
        onError: { placesError in
          self.placesError = placesError
        }
      )
    }
  }
}

Phân bổ

Bạn có thể sử dụng tính năng Tự động hoàn thành (Mới) ngay cả khi không có bản đồ. Nếu bạn hiển thị bản đồ, thì đó phải là bản đồ của Google. Khi hiển thị các đề xuất từ dịch vụ Tự động hoàn thành (Mới) mà không có bản đồ, bạn phải đưa biểu trưng Google vào cùng dòng với trường/kết quả tìm kiếm. Để biết thêm thông tin, hãy xem phần Hiển thị biểu trưng Google và thông tin ghi công.