Tự động hoàn thành địa điểm (Mới)

Dịch vụ Tự động hoàn thành (Mới) là một API iOS trả về các đề xuất đị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 dạng văn bản và những 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 với toàn bộ từ và chuỗi con của thông tin đầ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 dưới dạng loại người dùng để cung cấp đề xuất về địa điểm một cách nhanh chóng.

Đề xuất về địa điểm là những địa điểm, chẳng hạn như doanh nghiệp, địa chỉ hoặc địa điểm yêu thích, dựa trên chuỗi văn bản đã nhập và khu vực tìm kiếm được chỉ định.

Ví dụ: bạn gọi API bằng cách sử dụng làm đầu vào một chuỗi chứa một phần thông tin đầu vào của người dùng là "Sicilian piz", với khu vực tìm kiếm được giới hạn ở San Francisco, CA. Sau đó, phản hồi sẽ chứa một 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 "Sicilian Pizza Kitchen", 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ị với người dùng để họ có thể chọn địa điểm mong muốn. Bạn có thể đưa ra yêu cầu Chi tiết địa điểm (Mới) để nhận thêm thông tin về mọi đề xuất địa điểm được trả về.

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 GMSPlaceClient. Bạn có thể truyền các tham số vào đố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.

Khoá API và tham số query là bắt buộc. 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 các kết quả.

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

Swift

let token = GMSAutocompleteSessionToken()

let northEastBounds = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWestBounds = CLLocationCoordinate2DMake(37.395804, -122.077023)

let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.locationBias = GMSPlaceRectangularLocationOption(northEastBounds, southWestBounds)
    
let request = GMSAutocompleteRequest(query:"Sicilian piz")
request.filter = filter
request.sessionToken = token
GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { results, error in
  // Handle response
})

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.
    }
  }
}];

GooglePlacesSwift

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.
}

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ừ điểm khởi hành.
  • attributedFullText: Văn bản đầy đủ của đề xuất mà con người có thể đọc được.
  • attributedPrimaryText: Văn bản chính của đề xuất mà con người có thể đọc được.
  • attributedSecondaryText: Văn bản phụ có thể đọc được của đề 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

query

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

Thông số tùy chọn

loại

Một địa điểm chỉ có thể có một loại chính duy nhất trong 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 trả về tất cả địa điểm dựa trên tham số input, bất kể giá trị loại chính liên kết với địa điểm là gì. Hạn chế kết quả thuộc một loại chính hoặc kiểu 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. Đị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:

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

quốc gia

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

Swift

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

Objective-C

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

GooglePlacesSwift

let filter = AutocompleteFilter(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 này.

inputOffset

Độ lệch 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 cụm từ gợi ý mà hệ thống trả về. Nếu trống, giá trị mặc định sẽ là độ dài input.

Vị tríBias hoặc locationRestriction (Hạn chế vị trí)

Bạn có thể chỉ định locationBias hoặc locationRestriction, nhưng không thể chỉ định cả hai để xác định khu vực tìm kiếm. Hãy xem locationRestriction là khu vực chỉ định kết quả, và locationBias là khu vực chỉ định 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 cần tìm kiếm. Vị trí này được coi là một độ lệch, tức là có thể trả về kết quả liên quan đến vị trí cụ thể, bao gồm cả kết quả bên ngoài khu vực đã chỉ định.

  • locationRestriction chỉ định một khu vực cần tìm kiếm. Kết quả nằm ngoài khu vực đã chỉ định sẽ không được trả về.

Hãy 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.

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,0 đến 50000,0. 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. Nếu không, yêu cầu sẽ không trả về kết quả nào.

Ví dụ:

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);

GooglePlacesSwift

let center = CLLocationCoordinate2DMake(40.477398, -74.259087)

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

let filter = AutocompleteFilter(coordinateRegionBias: bias)      
  

Hình chữ nhật là một khung nhìn vĩ độ – kinh độ, được biểu thị dưới dạng hai điểm đối diện đường chéo với điểm lowhigh. Một khung nhìn được coi là một khu vực đóng, nghĩa là nó 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 chỉ 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ả kinh độ.
  • Nếu low.longitude = 180 độ và high.longitude = -180 độ, thì phạm vi kinh độ sẽ trống.

Cả lowhigh đều phải được điền và không được để trống hộp được biểu thị. Khung nhìn trống dẫn đến lỗi.

Ví dụ: khung nhìn này bao quanh hoàn toàn Thành phố New York:

Swift

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

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);

GooglePlacesSwift

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

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

nguồn gốc

Điểm gốc để tính 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àm sẽ không trả về khoảng cách đường thẳng. Phải được chỉ định là vĩ độ và kinh độ:

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];

GooglePlacesSwift

let filter = AutocompleteFilter(origin: CLLocation(latitude: 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 ccTLD ("miền cấp cao nhất") có 2 ký tự. Hầu hết các mã ccTLD (miền cấp cao nhất theo mã quốc gia) đều giống với mã ISO 3166-1, trừ 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).

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

sessionToken

Mã thông báo phiên là các chuỗi do người dùng tạo theo dõi lệnh gọi Tự động hoàn thành (Mới) 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 trong 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 nhằm mục đích thanh toán. Để biết thêm thông tin, hãy xem phần Mã thông báo của phiên.

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

Sử dụng vị trí Hạn chế và vị tríBias

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

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

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:"Sicilian piz")
request.filter = filter
request.sessionToken = token
GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { results, error in
  // Handle response
  })

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.
    }
  }
}];

GooglePlacesSwift

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.
}
  

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

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:"Sicilian piz")
request.filter = filter
request.sessionToken = token
GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { results, error in
  // Handle response
})

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.
    }
  }
}];

GooglePlacesSwift

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.
}
  

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

Sử dụng tham số loại để hạn chế kết quả từ một yêu cầu thuộc một loại nhất định như 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ỏ qua, hàm sẽ trả về tất cả các loại.

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

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
  // Handle response
})

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.
    }
  }
}];

GooglePlacesSwift

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.
}
    

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 vĩ độ và kinh độ), API sẽ bao gồm khoảng cách đường thẳng từ điểm gốc đến đích đến trong phản hồi. Phản hồi trả về khoảng cách dưới dạng distanceMeters.

Ví dụ sau đặt điểm khởi hành là trung tâm của San Francisco:

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
  // Handle response
})

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.
      }
    }
}];

GooglePlacesSwift

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.
}
  

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ị một bản đồ, đó phải là bản đồ của Google. Khi hiện các nội dung đề xuất của dịch vụ Tự động hoàn thành (Mới) mà không có bản đồ, bạn phải thêm biểu trưng của Google xuất hiện 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 nội dung Hiển thị biểu trưng và các nguồn cấp dữ liệu phân bổ của Google.