Place Autocomplete (Baru)

Pilih platform: Android iOS JavaScript Layanan Web

Layanan Autocomplete (Baru) adalah API iOS yang menampilkan saran tempat sebagai respons terhadap permintaan. Dalam permintaan, tentukan string penelusuran teks dan batas geografis yang mengontrol area penelusuran.

Layanan Autocomplete (Baru) dapat dicocokkan sepenuhnya kata dan substring input, me-resolve nama tempat, alamat, dan plus kode tersebut. Karena itu aplikasi dapat mengirimkan kueri sebagai pengguna jenis, untuk memberikan saran tempat dengan cepat.

Saran tempat adalah tempat, seperti bisnis, alamat, dan lokasi minat, berdasarkan string teks input dan area penelusuran yang ditentukan.

Misalnya, Anda memanggil API menggunakan string yang berisi sebagian input pengguna, "Spagh", dengan area penelusuran terbatas untuk New York City. Respons tersebut kemudian akan berisi daftar saran tempat yang cocok dengan penelusuran string dan area penelusuran, seperti restoran bernama "Cafe Spaghetti", beserta detail tentang tempat tersebut.

Saran tempat yang ditampilkan dirancang untuk ditampilkan kepada pengguna sehingga mereka dapat memilih tempat yang diinginkan. Anda dapat membuat Place Details (Baru) untuk mendapatkan lebih banyak permintaan informasi tentang saran tempat yang ditampilkan.

Permintaan Autocomplete (Baru)

Buat permintaan pelengkapan otomatis dengan memanggil metode di GMSPlaceClient Anda bisa meneruskan parameter dalam GMSAutocompleteRequest . Responsnya memberikan saran Autocomplete dalam GMSAutocompletePlaceSuggestion .

Kunci API dan parameter query wajib diisi. Anda juga dapat menyertakan GMSAutocompleteSessionToken mengaitkan permintaan dengan sesi penagihan dan GMSAutocompleteFilter untuk diterapkan pada hasil.

Untuk informasi selengkapnya tentang parameter wajib dan opsional, lihat bagian parameter dalam dokumen ini.

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

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

Respons Autocomplete (Baru)

Pelengkapan otomatis menampilkan array maksimum lima GMSAutocompleteSuggestion instance. Array berisi:

  • placeID
  • types: Jenis yang berlaku untuk tempat ini.
  • distanceMeters: Jarak dari asal.
  • attributedFullText: Teks saran lengkap yang dapat dibaca manusia.
  • attributedPrimaryText: Teks utama saran yang dapat dibaca manusia.
  • attributedSecondaryText: Teks sekunder saran yang dapat dibaca manusia.
  • structuredFormat: Nama spesifik dan teks yang membedakan, seperti kota atau teritorial Anda.

Parameter wajib

kueri

String teks yang akan ditelusuri. Menentukan kata lengkap dan substring, menempatkan nama, alamat, dan Plus Codes. Tujuan Layanan Autocomplete (Baru) menampilkan kandidat yang cocok berdasarkan {i>string<i} ini dan mengurutkan hasil berdasarkan relevansi yang terlihat.

Parameter opsional

tipe

Suatu tempat hanya dapat memiliki satu jenis utama dari jenis Tabel A atau Tabel B yang terkait dengannya. Misalnya, jenis utama mungkin adalah mexican_restaurant atau steak_house.

Secara default, API menampilkan semua tempat berdasarkan parameter input, terlepas dari nilai jenis utama yang terkait dengan tempat. Membatasi hasil menjadi jenis primer atau jenis primer tertentu dengan meneruskan Parameter types.

Gunakan parameter ini untuk menentukan hingga lima nilai jenis dari Tabel A atau Tabel M. Tempat harus cocok salah satu nilai jenis utama yang ditentukan untuk disertakan dalam respons.

Permintaan ditolak dengan error INVALID_REQUEST jika:

  • Lebih dari lima jenis ditentukan.
  • Setiap jenis yang tidak dikenal akan ditentukan.

negara

Hanya menyertakan hasil dari daftar region yang ditentukan, yang ditentukan sebagai array hingga 15 ccTLD ("level teratas ") nilai yang sama dengan dua karakter. Jika dihilangkan, tidak ada batasan yang diterapkan pada respons. Misalnya, untuk membatasi wilayah ke Jerman dan Prancis:

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

Jika Anda menentukan locationRestriction dan countries, hasilnya adalah yang terletak di area persimpangan dari dua pengaturan.

inputOffset

Offset karakter Unicode berbasis nol yang menunjukkan posisi kursor pada input. Posisi kursor dapat memengaruhi prediksi yang ditampilkan. Jika kosong, nilai defaultnya adalah panjang input.

locationBias atau locationRestriction

Anda dapat menentukan locationBias atau locationRestriction, tetapi tidak keduanya, untuk menentukan area pencarian. Bayangkan locationRestriction sebagai menentukan region yang hasilnya harus berada dalam, dan locationBias sebagai menetapkan region hasil harus dekat namun dapat berada di luar area tersebut.

  • locationBias menentukan area yang akan ditelusuri. Lokasi ini berfungsi sebagai bias, yang berarti hasil di sekitar lokasi yang ditentukan dapat ditampilkan, termasuk hasil di luar area yang ditentukan.

  • locationRestriction menentukan area yang akan ditelusuri. Hasil di luar area yang ditentukan tidak ditampilkan.

Tentukan wilayah locationBias atau locationRestriction sebagai persegi panjang area pandang atau dalam bentuk lingkaran.

Lingkaran ditentukan dengan titik pusat dan jari-jari dalam meter. Radius harus antara 0,0 dan 50000,0, inklusif. Nilai defaultnya adalah 0.0. Sebagai locationRestriction, Anda harus menetapkan radius ke nilai yang lebih besar dari 0,0. Jika tidak, permintaan tidak akan menampilkan hasil.

Contoh:

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)      
  

Persegi panjang adalah area pandang garis lintang dan garis bujur, yang direpresentasikan sebagai dua garis diagonal berlawanan dengan low dan high poin. Sebuah area pandang dianggap sebagai area tertutup, artinya mencakup {i>border<i}. Batas lintang harus berkisar antara -90 hingga 90 derajat inklusif, dan batas bujur harus berkisar antara -180 hingga 180 derajat inklusif:

  • Jika low = high, area pandang terdiri dari titik tunggal tersebut.
  • Jika low.longitude > high.longitude, rentang bujur dibalik (garis bujur) area pandang melintasi garis bujur 180 derajat).
  • Jika low.longitude = -180 derajat dan high.longitude= 180 derajat, area pandang mencakup semua bujur.
  • Jika low.longitude = 180 derajat dan high.longitude = -180 derajat, rentang bujur kosong.

low dan high harus diisi, dan kotak yang direpresentasikan tidak boleh diisi kosong. Area pandang kosong akan menyebabkan error.

Misalnya, area pandang ini sepenuhnya mencakup New York City:

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

GooglePlacesSwift

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

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

asal

Titik asal untuk menghitung jarak garis lurus ke tujuan (ditampilkan sebagai distanceMeters). Jika nilai ini dihilangkan, jarak garis lurus tidak akan dikembalikan. Harus ditetapkan sebagai lintang dan koordinat bujur:

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

Kode wilayah yang digunakan untuk memformat respons, ditetapkan sebagai ccTLD ("top-level ") nilai yang sama dengan dua karakter. Sebagian besar kode ccTLD identik dengan kode ISO 3166-1, dengan beberapa pengecualian penting. Misalnya, ccTLD Inggris Raya adalah "uk" (.co.uk) sedangkan kode ISO 3166-1-nya adalah "gb" (secara teknis untuk entitas "The Inggris Raya dan Irlandia Utara").

Jika Anda menetapkan kode wilayah yang tidak valid, API akan menampilkan INVALID_ARGUMENT {i>error<i}. Parameter ini dapat memengaruhi hasil berdasarkan hukum yang berlaku.

sessionToken

Token sesi adalah string buatan pengguna yang melacak Panggilan Autocomplete (Baru) sebagai "sesi". Autocomplete (Baru) menggunakan token sesi untuk mengelompokkan fase kueri dan pemilihan dari penelusuran pelengkapan otomatis pengguna ke dalam sesi terpisah untuk tujuan penagihan. Untuk informasi selengkapnya, lihat Sesi token.

Contoh Autocomplete (Baru)

Menggunakan locationRestriction dan locationBias

Autocomplete (Baru) menggunakan pembiasan IP secara default ke mengontrol area pencarian. Dengan pembiasan IP, API menggunakan alamat IP perangkat untuk membuat hasilnya menjadi bias. Jika ingin, Anda dapat menggunakan locationRestriction atau locationBias, tetapi tidak keduanya, untuk menentukan area yang akan ditelusuri.

Pembatasan lokasi menentukan area yang akan ditelusuri. Hasil di luar yang ditentukan area tidak ditampilkan. Contoh berikut menggunakan pembatasan lokasi untuk membatasi permintaan ke pembatasan lokasi lingkaran dengan radius 5.000 meter yang berpusat di 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:"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.
    }
  }
}];

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

Dengan bias lokasi, lokasi berfungsi sebagai bias, yang berarti hasil seputar lokasi yang ditentukan dapat ditampilkan, termasuk hasil di luar yang telah ditentukan area tersebut. Contoh berikutnya mengubah permintaan sebelumnya untuk menggunakan bias lokasi:

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

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

Jenis penggunaan

Gunakan parameter jenis untuk membatasi hasil dari permintaan menjadi permintaan tertentu seperti yang tercantum dalam Tabel A dan Tabel M. Anda dapat menentukan {i>array<i} hingga lima nilai. Jika dihilangkan, semua jenis akan ditampilkan.

Contoh berikut menentukan string kueri "Sepak Bola" dan menggunakan jenis parameter untuk membatasi hasil pada pembentukan jenis "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
      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.
    }
  }
}];

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

Gunakan origin

Saat Anda menyertakan parameter origin dalam permintaan, yang ditentukan sebagai koordinat lintang dan bujur, API ini menyertakan jarak garis lurus dari tempat asal ke tujuan dalam respons. Respons akan menampilkan jarak sebagai distanceMeters.

Contoh ini menyetel tempat asal ke pusat 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
      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.
      }
    }
}];

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

Atribusi

Anda dapat menggunakan Autocomplete (Baru) bahkan tanpa peta. Jika Anda menampilkan peta, maka harus peta Google. Saat Anda menampilkan saran dari layanan Autocomplete (Baru) tanpa peta, Anda harus menyertakan logo Google yang ditampilkan sesuai dengan hasil penelusuran bidang/hasil. Untuk informasi selengkapnya, lihat Menampilkan logo Google dan atribusi.