地点自动补全(新)

请选择平台: Android iOS JavaScript 网络服务

欧洲经济区 (EEA) 开发者

自动补全(新)服务是一种 iOS API,可返回地点建议以响应请求。在请求中,指定文本搜索字符串和用于控制搜索区域的地理边界。

自动补全(新)服务可以根据输入的完整字词和子字符串进行匹配,从而解析地点名称、地址和 Plus Codes。这样,应用就可以在用户输入内容时发送查询,从而即时提供地点建议。

地点建议是指根据指定的输入文本字符串和搜索区域提供的地点,例如商家、地址和地图注点。

例如,您调用 API 时,输入包含部分用户输入内容“Spagh”的字符串,并将搜索区域限制为纽约市。然后,响应会包含与搜索字符串和搜索区域匹配的地点建议列表,例如名为“Cafe Spaghetti”的餐厅,以及有关该地点的详细信息。

返回的地点建议旨在向用户显示,以便用户可以选择所需的地点。您可以发出地点详情(新)请求,以获取有关返回的任何地点建议的更多信息。

您可以通过以下两种主要方式将自动补全(新)功能集成到应用中:

以编程方式获取地点预测结果

自动补全(新)请求

通过调用 GMSPlacesClient 上的方法来创建自动补全请求。 您可以在 GMSAutocompleteRequest 对象中传递参数。响应会在 GMSAutocompletePlaceSuggestion 对象中提供自动补全建议。

必须提供 API 密钥和 query 参数。您还可以添加 GMSAutocompleteSessionToken 将请求与结算会话相关联,并添加 GMSAutocompleteFilter 以应用于结果。

Places Swift SDK 版本

通过调用 PlacesClient 上的方法来创建自动补全请求。 您可以在 AutocompleteRequest 对象中传递参数。响应会在 AutocompletePlaceSuggestion 对象中提供自动补全建议。

必须提供 API 密钥和 query 参数。您还可以添加 AutocompleteSessionToken 将请求与结算会话相关联,并添加 AutocompleteFilter 以应用于结果。

如需详细了解必需参数和可选参数,请参阅本文档的“参数”部分

Places Swift SDK

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

自动补全(新)响应

自动补全功能会返回一个最多包含 5 个 GMSAutocompleteSuggestion 实例的数组。该数组包含:

  • placeID
  • types:适用于相应地点的类型。
  • distanceMeters:与原点的距离。
  • attributedFullText:建议的完整直观易懂的文本。
  • attributedPrimaryText:建议的直观易懂的主要文本。
  • attributedSecondaryText:建议的易于理解的辅助文本。
  • structuredFormat:具体名称和消歧文本,例如城市或地区。

必需参数

查询

要搜索的文本字符串。指定完整字词和子字符串、地点名称、地址和 Plus Codes。自动补全(新)服务将根据此字符串返回候选匹配结果,并按照其判断的相关性对结果进行排序。

可选参数

sessionToken

会话令牌是由用户生成的字符串,用于将自动补全(新)调用(包括通过 widget 进行的调用和程序化调用)视为“会话”进行跟踪。自动补全(新)使用会话令牌将用户自动补全搜索的查询和选择阶段归入不同的会话,以便进行结算。如需了解详情,请参阅会话令牌

可选的 AutocompleteFilter 参数

类型

一个地点只能有一个关联的主要类型(来自表 A表 B)。例如,主要类型可以是 mexican_restaurantsteak_house

默认情况下,该 API 会根据 input 参数返回所有地点,而无需考虑与地点关联的主要类型值。通过传递 types 参数,将结果限制为特定主要类型或主要类型。

使用此参数可指定表 A表 B 中的最多五个类型值。地点必须与指定的主类型值之一匹配,才能包含在响应中。

如果出现以下情况,请求会被拒绝并显示 INVALID_REQUEST 错误:

  • 指定了超过五种类型。
  • 指定了任何无法识别的类型。

例如,如需将结果限制为体育用品商店,请在 AutocompleteFilter 中指定该类型:

Places Swift SDK

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

国家/地区

仅包含指定地区列表中的结果,以数组形式指定,最多包含 15 个 ccTLD(“顶级域名”)双字符值。如果省略,则对响应不应用任何限制。 例如,如需将区域限制为德国和法国,请执行以下操作:

Places Swift SDK

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

如果您同时指定了 locationRestrictioncountries,则结果位于这两个设置的交集区域。

inputOffset

从零开始的 Unicode 字符偏移量,用于指示 input 中的光标位置。光标位置可能会影响返回的预测结果。如果为空,则默认为 input 的长度。

locationBias 或 locationRestriction

您可以指定 locationBiaslocationRestriction,但不能同时指定这两者,以定义搜索区域。您可以将 locationRestriction 视为指定结果必须位于的区域,而将 locationBias 视为指定结果必须靠近但可以位于区域之外的区域。

  • locationBias 用于指定搜索区域。此位置用作偏差,这意味着系统可能会返回指定位置附近的结果,包括指定区域以外的结果。

  • locationRestriction 用于指定搜索区域。系统不会返回指定区域以外的结果。

locationBiaslocationRestriction 区域指定为矩形视口或圆形视口。

圆由中心点和半径(以米为单位)定义。半径必须介于 0.0 到 50000.0 之间(含边界值)。默认值为 0.0。对于 locationRestriction,您必须将半径设置为大于 0.0 的值。否则,请求不会返回任何结果。

例如:

Places Swift SDK

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

矩形是一个经纬度视口,以两个对角相对的 lowhigh 点表示。视口被视为一个封闭区域,这意味着它包含其边界。纬度范围必须介于 -90 度到 90 度之间(含),经度范围必须介于 -180 度到 180 度之间(含):

  • 如果 low = high,则视口由该单个点组成。
  • 如果 low.longitude > high.longitude,则经度范围会反转(视口会跨越 180 度经度线)。
  • 如果 low.longitude = -180 度且 high.longitude= 180 度,则视口包含所有经度。
  • 如果 low.longitude = 180 度且 high.longitude = -180 度,则经度范围为空。

lowhigh 都必须填充,并且所表示的框不能为空。空视口会导致错误。

例如,此视口完全包含纽约市:

Places Swift SDK

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

用于计算到目的地(以 distanceMeters 形式返回)的直线距离的起点。如果省略此值,则不会返回直线距离。必须指定为纬度和经度坐标:

Places Swift SDK

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

用于设置响应格式的地区代码,以 ccTLD(“顶级域名”)双字符值的形式指定。除了某些明显的例外情况之外,大多数 ccTLD 代码都与 ISO 3166-1 代码完全一致。例如,英国的 ccTLD 为“uk”(.co.uk),而其 ISO 3166-1 代码为“gb”(从技术上讲,是指“大不列颠及北爱尔兰联合王国”这一实体)。

如果您指定的区域代码无效,则 API 会返回 INVALID_ARGUMENT 错误。此参数可能会根据适用法律影响结果。

shouldIncludePureServiceAreaBusinesses

如果为 true,则在响应数组中返回纯上门服务商家。纯上门服务商家是指为客户送货上门或提供上门服务,但不在自己的商家地址为客户提供服务的商家。

例如:

Places Swift SDK

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Swift

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Objective-C

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

添加地点自动补全 widget

为了更轻松地提供一致的地点自动补全体验,您可以向应用中添加地点自动补全 widget。该 widget 提供了一个专用全屏界面,用于处理用户输入内容并向用户显示地点预测结果,同时向应用返回 AutocompletePlaceSuggestion 对象。然后,您可以发出地点详情(新)请求,以获取有关任何地点预测结果的更多信息。

地点自动补全 widget

以程序化方式获取地点预测结果类似,地点自动补全 widget 可让您使用会话令牌将自动补全请求分组到会话中,以便进行结算。您可以通过调用 AutocompleteSessionToken() 传递会话令牌。

如果您未提供会话令牌,该 widget 将为您创建一个自动补全会话令牌,然后您可以通过 onSelection 回调获取该令牌。如需详细了解如何使用会话令牌,请参阅关于会话令牌

show 绑定值设置为 true 时,系统会将用户带到全屏视图,用户可以在其中选择地点。当用户输入内容时,该 widget 会返回地点建议,例如商家、地址和地图注点。当用户选择某个地点时,微件会使用所选地点调用 onSelection 处理程序,并关闭全屏视图。

地点自动补全 widget 参数

除了可通过编程方式使用的参数之外,地点自动补全 widget 还提供以下参数。

显示

show 用于指定是否显示 widget。

AutocompleteUICustomization

AutocompleteUICustomization 参数指定要应用于 widget 的界面自定义设置。自定义选项包括:

onSelection

选择地点时要运行的闭包。

onError

发生错误时要运行的闭包。如果发生错误,系统会传递 PlacesError

查看完整的代码示例

自动补全(新)示例

使用 locationRestriction 和 locationBias

自动补全(新)默认使用 IP 偏向来控制搜索区域。借助 IP 偏向,API 会使用设备的 IP 地址来偏向结果。您可以视需要使用 locationRestrictionlocationBias(但不能同时使用这两者)来指定要搜索的区域。

位置限制用于指定搜索区域。系统不会返回指定区域以外的结果。以下示例使用位置限制将请求限制为以旧金山为中心、半径为 5,000 米的圆形位置限制:

Places Swift SDK

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

使用位置偏差时,位置会用作偏差,这意味着系统可能会返回指定位置附近的结果,包括指定区域以外的结果。以下示例将之前的请求更改为使用位置偏差:

Places Swift SDK

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

使用类型

使用 types 参数可将请求的结果限定为表 A表 B 中列出的特定类型。您可以指定一个最多包含 5 个值的数组。如果省略,则返回所有类型。

以下示例指定了“Soccer”的查询字符串,并使用 types 参数将结果限制为 "sporting_goods_store" 类型的场所:

Places Swift SDK

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

使用来源

如果您在请求中添加 origin 参数(指定为纬度和经度坐标),API 会在响应中包含从出发地到目的地的直线距离。响应会返回距离,即 distanceMeters

此示例将原点设置为旧金山的中心:

Places Swift SDK

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

添加地点自动补全 widget

Places Swift SDK

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