Text Search (Baru)

Pilih platform: Android iOS JavaScript Layanan Web

Developer Wilayah Ekonomi Eropa (EEA)

Text Search menampilkan informasi tentang serangkaian tempat berdasarkan suatu string. Misalnya, "pizza di Bandung", "toko sepatu di dekat Solo", atau "Jl. Rajawali 3". Layanan ini merespons dengan daftar tempat yang cocok dengan string teks dan bias lokasi yang ditetapkan.

Layanan ini sangat berguna untuk membuat kueri alamat yang ambigu dalam sistem otomatis, dan komponen string non-alamat dapat mencocokkan bisnis serta alamat. Contoh kueri alamat yang ambigu adalah alamat yang diformat dengan buruk atau permintaan yang menyertakan komponen non-alamat, seperti nama bisnis. Permintaan seperti dua contoh pertama dapat menampilkan nol hasil kecuali jika lokasi (seperti wilayah, pembatasan lokasi, atau bias lokasi) ditetapkan.

"10 High Street, UK" atau "123 Main Street, US" Beberapa "High Street" di Inggris Raya; beberapa "Main Street" di Amerika Serikat. Kueri tidak menampilkan hasil yang diinginkan kecuali jika batasan lokasi ditetapkan.
"Restoran berantai New York" Beberapa lokasi "Restoran waralaba" di New York; tidak ada alamat jalan atau bahkan nama jalan.
"10 High Street, Escher UK" atau "123 Main Street, Pleasanton US" Hanya ada satu "High Street" di kota Escher, Inggris Raya; hanya ada satu "Main Street" di kota Pleasanton, CA, Amerika Serikat.
"UniqueRestaurantName New York" Hanya ada satu tempat usaha dengan nama ini di New York; tidak perlu alamat jalan untuk membedakannya.
"restoran pizza di Jakarta" Kueri ini berisi batasan lokasi, dan "restoran pizza" adalah jenis tempat yang terdefinisi dengan baik. Fungsi ini menampilkan beberapa hasil.
"+1 514-670-8700"

Kueri ini berisi nomor telepon. API ini menampilkan beberapa hasil untuk tempat yang terkait dengan nomor telepon tersebut.

Mendapatkan daftar tempat berdasarkan penelusuran teks

Buat permintaan Penelusuran Teks dengan memanggil GMSPlacesClient searchByTextWithRequest:, meneruskan objek GMSPlaceSearchByTextRequest yang menentukan parameter permintaan dan metode callback, dengan jenis GMSPlaceSearchByTextResultCallback, untuk menangani respons.

Objek GMSPlaceSearchByTextRequest menentukan semua parameter wajib dan opsional untuk permintaan. Parameter yang diperlukan meliputi:

  • Daftar kolom yang akan ditampilkan dalam objek GMSPlace, juga disebut mask kolom, seperti yang ditentukan oleh GMSPlaceProperty. Jika Anda tidak menentukan setidaknya satu kolom dalam daftar kolom, atau jika Anda menghapus daftar kolom, panggilan akan menampilkan error.
  • Kueri teks.

Contoh permintaan penelusuran teks ini menentukan bahwa objek respons GMSPlace berisi nama tempat dan ID tempat untuk setiap objek GMSPlace dalam hasil penelusuran. Selain itu, respons difilter untuk hanya menampilkan tempat berjenis "restoran".

Places Swift SDK

let restriction = RectangularLocationRestriction(
      northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30),
      southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50)
)
let searchByTextRequest = SearchByTextRequest(
        textQuery: "pizza in New York",
        placeProperties: [ .name, .placeID ],
        locationRestriction: restriction,
        includedType: .restaurant,
        maxResultCount: 5,
        minRating: 3.5,
        priceLevels: [ .moderate, .inexpensive ],
        isStrictTypeFiltering: true
)
switch await placesClient.searchByText(with: searchByTextRequest) {
case .success(let places):
  // Handle places
case .failure(let placesError):
  // Handle error
}

Swift

// Create the GMSPlaceSearchByTextRequest object.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.placeID].map {$0.rawValue}
let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York", placeProperties:myProperties)
request.isOpenNow = true
request.includedType = "restaurant"
request.maxResultCount = 5
request.minRating = 3.5
request.rankPreference = .distance
request.isStrictTypeFiltering = true
request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)

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

let callback: GMSPlaceSearchByTextResultCallback = { [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().searchByText(with: request, callback: callback)

Objective-C

// Create the GMSPlaceSearchByTextRequest object.
GMSPlaceSearchByTextRequest *request =
    [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]];
request.isOpenNow = YES;
request.includedType = @"restaurant";
request.maxResultCount = 5;
request.minRating = 3.5;
request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance;
request.isStrictTypeFiltering = YES;
request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ];
request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0);

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

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

Respons Text Search

Text Search API menampilkan array kecocokan dalam bentuk objek GMSPlace, dengan satu objek GMSPlace per tempat yang cocok.

Mendapatkan status buka

Objek GMSPlacesClient berisi fungsi anggota bernama isOpenWithRequest (isOpenRequest di Swift dan isPlaceOpenRequest di GooglePlacesSwift) yang menampilkan respons yang menunjukkan apakah tempat saat ini buka, berdasarkan waktu yang ditentukan dalam panggilan.

Metode ini mengambil satu argumen jenis GMSPlaceIsOpenWithRequest yang berisi:

  • Objek GMSPlace, atau string yang menentukan ID tempat. Untuk mengetahui informasi selengkapnya tentang cara membuat objek Place dengan kolom yang diperlukan, lihat Detail tempat.
  • Objek NSDate (Obj-C) atau Date (Swift) opsional yang menentukan waktu yang ingin Anda periksa. Jika tidak ada waktu yang ditentukan, setelan default-nya adalah sekarang.
  • Metode GMSPlaceOpenStatusResponseCallback untuk menangani respons.
  • >

Metode GMSPlaceIsOpenWithRequest mengharuskan kolom berikut ditetapkan dalam objek GMSPlace:

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Jika kolom ini tidak disediakan dalam objek Place, atau jika Anda meneruskan ID tempat, metode ini akan menggunakan GMSPlacesClient GMSFetchPlaceRequest: untuk mengambilnya.

isOpenWithRequest tanggapan

isOpenWithRequest menampilkan objek GMSPlaceIsOpenResponse yang berisi nilai boolean bernama status yang menunjukkan apakah bisnis buka, tutup, atau jika statusnya tidak diketahui.

Language Nilai jika terbuka Nilai jika ditutup Nilai jika status tidak diketahui
Places Swift true false nil
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

Penagihan untuk isOpenWithRequest

  • Kolom GMSPlacePropertyUTCOffsetMinutes dan GMSPlacePropertyBusinessStatus dikenai biaya berdasarkan SKU Basic Data. Jam Buka lainnya dikenai biaya berdasarkan SKU Enterprise Place Details.
  • Jika objek GMSPlace Anda sudah memiliki kolom ini dari permintaan sebelumnya, Anda tidak akan dikenai biaya lagi.

Contoh: Membuat permintaan GMSPlaceIsOpenWithRequest

Contoh berikut menunjukkan cara menginisialisasi GMSPlaceIsOpenWithRequest dalam objek GMSPlace yang ada.

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

Parameter wajib

Gunakan objek GMSPlaceSearchByTextRequest untuk menentukan parameter yang diperlukan untuk penelusuran.

  • Daftar kolom

    Tentukan properti data tempat yang akan ditampilkan. Teruskan daftar properti GMSPlace yang menentukan kolom data yang akan ditampilkan. Jika Anda menghilangkan mask kolom, permintaan akan menampilkan error.

    Daftar kolom adalah praktik desain yang baik untuk memastikan Anda tidak meminta data yang tidak diperlukan, sehingga membantu menghindari waktu pemrosesan dan biaya penagihan yang tidak perlu.

    Tentukan satu atau beberapa kolom berikut:

    • Kolom berikut memicu SKU Text Search Essentials ID Only:

      GMSPlacePropertyPlaceID
    • Kolom berikut memicu SKU Text Search Pro:

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyName
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance
    • Kolom berikut memicu SKU Text Search Enterprise:

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite
    • Kolom berikut memicu SKU Text Search Enterprise Plus:

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

    String teks yang digunakan untuk menelusuri, misalnya: "restoran", "123 Main Street", atau "tempat terbaik untuk dikunjungi di San Francisco".

Parameter opsional

Gunakan objek GMSPlaceSearchByTextRequest untuk menentukan parameter opsional untuk penelusuran.

  • includedType

    Membatasi hasil ke tempat yang cocok dengan jenis yang ditentukan yang ditentukan oleh Tabel A. Hanya satu jenis yang dapat ditentukan. Contoh:

    • let request = SearchByTextRequest()
      request.includedType = "bar"
    • let request = SearchByTextRequest()
      request.includedType = "pharmacy"
  • isOpenNow

    Jika true, hanya menampilkan tempat yang buka pada saat kueri dikirim. Jika false, tampilkan semua bisnis terlepas dari status buka. Tempat yang tidak menentukan jam buka dalam database Google Places akan ditampilkan jika Anda menyetel parameter ini ke false.

  • isStrictTypeFiltering

    Digunakan dengan parameter includeType. Jika disetel ke true, hanya tempat yang cocok dengan jenis yang ditentukan oleh includeType yang akan ditampilkan. Jika salah (default), respons dapat berisi tempat yang tidak cocok dengan jenis yang ditentukan.

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

    Anda dapat menentukan locationRestriction atau locationBias, tetapi tidak keduanya. Anggap locationRestriction sebagai penentuan region tempat hasil harus berada, dan locationBias sebagai penentuan region tempat hasil harus berada di dekatnya, tetapi dapat berada di luar area.

    Tentukan wilayah sebagai Area Tampilan persegi panjang atau sebagai lingkaran.

    • Lingkaran ditentukan oleh titik tengah dan radius dalam meter. Radius harus antara 0,0 dan 50000,0, inklusif. Radius defaultnya adalah 0,0. Contoh:

      let request = SearchByTextRequest()
      request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
    • Persegi panjang adalah area tampilan lintang-bujur, yang ditampilkan sebagai dua titik rendah dan tinggi yang berlawanan secara diagonal. Titik rendah menandai sudut barat daya persegi panjang, dan titik tinggi merepresentasikan sudut timur laut persegi panjang.

      Area pandang dianggap sebagai area tertutup, yang berarti area pandang mencakup batasnya. 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 tampilan terdiri dari satu titik tersebut.
      • Jika low.longitude > high.longitude, rentang bujur terbalik (area tampilan 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.
      • Jika low.latitude > high.latitude, rentang lintang kosong.
  • locationRestriction

    Menentukan area yang akan ditelusuri. Hasil di luar area yang ditentukan tidak ditampilkan. Tentukan wilayah sebagai Area Tampilan persegi panjang. Lihat deskripsi locationBias untuk mengetahui informasi tentang cara menentukan Area Pandang.

    Anda dapat menentukan locationRestriction atau locationBias, tetapi tidak keduanya. Anggap locationRestriction sebagai penentuan region tempat hasil harus berada, dan locationBias sebagai penentuan region tempat hasil harus berada di dekatnya, tetapi dapat berada di luar area.

  • maxResultCount

    Menentukan jumlah maksimum hasil tempat yang akan ditampilkan. Harus antara 1 dan 20 (default) inklusif.

  • minRating

    Membatasi hasil hanya pada hasil yang memiliki rating pengguna rata-rata lebih besar dari atau sama dengan batas ini. Nilai harus antara 0,0 dan 5,0 (inklusif) dengan kenaikan 0,5. Misalnya: 0, 0,5, 1,0, ... , 5,0 inklusif. Nilai dibulatkan ke atas ke 0,5 terdekat. Misalnya, nilai 0,6 akan menghilangkan semua hasil dengan rating kurang dari 1,0.

  • priceLevels

    Membatasi penelusuran ke tempat yang ditandai pada tingkat harga tertentu. Setelan defaultnya adalah memilih semua tingkat harga.

    Tentukan array yang berisi satu atau beberapa nilai yang ditentukan oleh PriceLevel.

    Contoh:

        let request = SearchByTextRequest()
        request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
  • rankPreference

    Menentukan cara peringkat hasil dalam respons berdasarkan jenis kueri:

    • Untuk kueri kategori seperti "Restoran di New York City", .relevance (peringkat hasil berdasarkan relevansi penelusuran) adalah defaultnya. Anda dapat menyetel rankPreference ke .relevance atau .distance (mengurutkan hasil menurut jarak).
    • Untuk kueri non-kategoris seperti "Mountain View, CA", sebaiknya Anda membiarkan rankPreference tidak ditetapkan.
  • regionCode

    Kode wilayah yang digunakan untuk memformat respons, ditentukan sebagai nilai kode CLDR dua karakter. Parameter ini juga dapat menimbulkan efek bias pada hasil penelusuran. Tidak ada nilai default.

    Jika nama negara di kolom alamat dalam respons cocok dengan kode wilayah, kode negara akan dihapus dari alamat.

    Sebagian besar kode CLDR identik dengan kode ISO 3166-1, dengan beberapa pengecualian. Misalnya, ccTLD Inggris Raya adalah "uk" (.co.uk), sedangkan kode ISO 3166-1-nya adalah "gb" (secara teknis untuk entitas "The United Kingdom of Great Britain and Northern Ireland"). Parameter dapat memengaruhi hasil berdasarkan hukum yang berlaku.

  • shouldIncludePureServiceAreaBusinesses

    Jika true, menampilkan bisnis area layanan murni di hasil penelusuran. Bisnis jasa sistem panggilan murni adalah bisnis yang melakukan kunjungan atau pengiriman ke pelanggan secara langsung, tetapi tidak melayani pelanggan di alamat bisnisnya.

    Contoh:

    Places Swift SDK

    let request = SearchByTextRequest()
    request.shouldIncludePureServiceAreaBusinesses = true

    Swift

    let request = SearchByTextRequest()
    request.shouldIncludePureServiceAreaBusinesses: true

    Objective-C

    GMSPlaceSearchByTextRequest *request =
        [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyAll]];
    request.shouldIncludePureServiceAreaBusinesses = YES;

Menampilkan atribusi dalam aplikasi Anda

Saat aplikasi Anda menampilkan informasi yang diperoleh dari GMSPlacesClient, seperti foto dan ulasan, aplikasi juga harus menampilkan atribusi yang diperlukan.

Misalnya, properti reviews dari objek GMSPlacesClient berisi array hingga lima objek GMSPlaceReview. Setiap objek GMSPlaceReview dapat berisi atribusi dan atribusi penulis. Jika Anda menampilkan ulasan di aplikasi, Anda juga harus menampilkan atribusi atau atribusi penulis.

Untuk mengetahui informasi selengkapnya, lihat dokumentasi tentang atribusi.