Text Search (Baru)

Pilih platform: Android iOS JavaScript Layanan Web

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

Layanan ini sangat berguna untuk membuat alamat ambigu kueri secara otomatis, dan non-alamat pada {i>string<i} dapat cocok dengan bisnis serta untuk alamat internal dan eksternal. Contoh kueri alamat ambigu adalah alamat yang tidak diformat dengan baik atau permintaan yang menyertakan komponen bukan alamat, seperti nama bisnis. Permintaan seperti dua contoh pertama mungkin menampilkan nol hasil kecuali jika lokasi (seperti wilayah, pembatasan lokasi, atau bias lokasi) ditetapkan.

"10 High Street, Inggris" atau "123 Main Street, US" Beberapa "High Street" di Inggris Raya; beberapa "Main Street" di AS. Kueri tidak menampilkan hasil yang diinginkan kecuali pembatasan lokasi atur.
"Jaringan restoran New York" Beberapa "restoran jaringan" lokasi di New York; tidak ada alamat atau bahkan nama jalan.
"10 High Street, Escher, Inggris Raya" atau "123 Main Street, Pleasanton US" Hanya satu "Jalan Raya" di kota Escher di Inggris; hanya satu "Jalan Utama" di kota Pleasanton, AS.
"Nama Restoran Unik New York" Hanya satu tempat usaha dengan nama ini di New York; tidak ada alamat yang berbeda.
"restoran pizza di New York" Kueri ini berisi pembatasan lokasinya, dan "restoran pizza" bernilai jenis tempat yang terdefinisi dengan baik. Operator ini memberikan banyak hasil.
"+1 514-670-8700"

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

Mendapatkan daftar tempat melalui penelusuran teks

Buat permintaan Text Search dengan memanggil GMSPlacesClient searchByTextWithRequest:, meneruskan GMSPlaceSearchByTextRequest yang mendefinisikan parameter permintaan dan metode callback, berjenis GMSPlaceSearchByTextResultCallback, untuk menangani responsnya.

Objek GMSPlaceSearchByTextRequest menentukan semua Parameter wajib dan opsional untuk permintaan tersebut. Parameter yang diperlukan mencakup:

  • 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 menghilangkan daftar kolom, maka panggilan akan menampilkan error.
  • Kueri teks.

Contoh permintaan penelusuran teks ini menetapkan bahwa objek GMSPlace respons berisi nama tempat dan ID tempat untuk setiap objek GMSPlace dalam penelusuran hasil pengujian tersebut. Fungsi ini juga memfilter respons untuk hanya menampilkan tempat jenis "restoran".

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

Places Swift SDK for iOS (Pratinjau)

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
}

Respons Text Search

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

Mendapatkan status buka

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

Metode ini menggunakan satu argumen jenis GMSPlaceIsOpenWithRequest yang berisi:

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

Metode GMSPlaceIsOpenWithRequest mengharuskan kolom berikut ditetapkan di objek GMSPlace:

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Jika kolom ini tidak disediakan di 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 apakah statusnya tidak diketahui.

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

Penagihan untuk isOpenWithRequest

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

Contoh: Membuat permintaan GMSPlaceIsOpenWithRequest

Contoh berikut menunjukkan cara melakukan inisialisasi GMSPlaceIsOpenWithRequest dalam objek GMSPlace yang ada.

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

GooglePlacesSwift

          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
          }
          

Parameter wajib

Gunakan objek GMSPlaceSearchByTextRequest untuk menentukan parameter untuk penelusuran.

  • Daftar kolom

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

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

    Tentukan satu atau beberapa kolom berikut:

    • Kolom berikut memicu SKU Text Search (Khusus ID):

      GMSPlacePropertyPlaceID, GMSPlacePropertyName
    • Kolom berikut memicu SKU Text Search (Basic):

      GMSPlacePropertyAddressComponents, GMSPlacePropertyBusinessStatus, GMSPlacePropertyFormattedAddress, GMSPlacePropertyIconBackgroundColor, GMSPlacePropertyIconImageURL, GMSPlacePropertyCoordinate, GMSPlacePropertyPhotos, GMSPlacePropertyPlusCode, GMSPlacePropertyTypes, GMSPlacePropertyUTCOffsetMinutes, GMSPlacePropertyViewport, GMSPlacePropertyWheelchairAccessibleEntrance
    • Kolom berikut memicu SKU Text Search (Advanced):

      GMSPlacePropertyCurrentOpeningHours, GMSPlacePropertySecondaryOpeningHours, GMSPlacePropertyPhoneNumber, GMSPlacePropertyPriceLevel, GMSPlacePropertyRating, GMSPlacePropertyOpeningHours, GMSPlacePropertyUserRatingsTotal, GMSPlacePropertyWebsite
    • Kolom berikut memicu SKU Text Search (Preferred):

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

    String teks yang digunakan untuk menelusuri, misalnya: "restaurant", "123 Main Street", atau "best place to visit in San Francisco".

Parameter opsional

Gunakan objek GMSPlaceSearchByTextRequest untuk menentukan atribut parameter untuk penelusuran.

  • includedType

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

    • request.includedType = "bar"
    • request.includedType = "pharmacy"
  • isOpenNow

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

  • isStrictTypeFiltering

    Digunakan dengan parameter includeType. Jika ditetapkan ke true, hanya tempat yang cocok dengan jenis yang ditentukan oleh includeType ditampilkan. Jika salah, respons default 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 menentukan wilayah tempat hasil harus berada dalam cakupan, dan locationBias sebagai yang menetapkan wilayah di mana hasilnya harus dekat tetapi bisa berada di luar area tersebut.

    Tentukan wilayah sebagai Area Pandang persegi panjang atau dalam bentuk lingkaran.

    • Lingkaran ditentukan dengan titik pusat dan jari-jari dalam meter. Radius harus antara 0,0 dan 50000,0, inklusif. Radius defaultnya adalah 0,0. Contoh:

      request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
    • Persegi panjang adalah area pandang garis lintang dan garis bujur, yang direpresentasikan sebagai dua berlawanan dengan titik tinggi dan rendah secara diagonal. Titik rendah menandai barat daya sudut persegi panjang tersebut, dan titik tertinggi melambangkan arah timur laut sudut persegi panjang.

      Area pandang dianggap sebagai wilayah tertutup, yang berarti mencakup batasnya. Batas lintang harus berkisar antara -90 hingga 90 derajat inklusif, dan batas bujur harus berkisar antara -180 hingga 180 derajat, termasuk:

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

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

    Anda dapat menentukan locationRestriction atau locationBias, tetapi tidak keduanya. Anggap locationRestriction sebagai menentukan wilayah tempat hasil harus berada dalam cakupan, dan locationBias sebagai yang menetapkan wilayah di mana hasilnya harus dekat tetapi bisa berada di luar area tersebut.

  • maxResultCount

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

  • minRating

    Membatasi hasil hanya untuk hasil yang nilai pengguna rata-ratanya lebih besar dari atau sama dengan batas ini. Nilai harus antara 0,0 dan 5,0 (inklusif) di kenaikan sebesar 0,5. Misalnya: 0, 0.5, 1.0, ... , 5.0 inklusif. Nilai adalah dibulatkan ke angka 0,5 terdekat. Misalnya, nilai 0,6 menghilangkan semua hasil dengan peringkat kurang dari 1,0.

  • priceLevels

    Batasi penelusuran ke tempat yang ditandai dengan tingkat harga tertentu. Setelan defaultnya adalah memilih semua tingkat harga.

    Menentukan array dari satu atau beberapa nilai yang ditentukan oleh PriceLevel

    Contoh:

    request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
  • rankPreference

    Menentukan bagaimana hasil diberi peringkat dalam respons berdasarkan jenis kueri:

    • Untuk kueri kategori seperti "Restoran di New York City", .relevance (beri peringkat hasil menurut relevansi penelusuran) adalah default. Anda dapat menetapkan rankPreference ke .relevance atau .distance (peringkat 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, yang ditetapkan sebagai kode CLDR dua karakter. Parameter ini juga dapat memiliki efek bias pada hasil penelusuran. Tidak ada nilai default.

    Jika nama negara dari kolom alamat dalam respons sesuai dengan kode wilayah, kode negara dihilangkan 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 "Inggris Raya dan Irlandia Utara"). Parameter ini dapat memengaruhi hasil berdasarkan hukum yang berlaku.

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 GMSPlaceReview objek terstruktur dalam jumlah besar. Setiap objek GMSPlaceReview dapat berisi atribusi dan atribusi penulis. Jika Anda menampilkan ulasan di aplikasi, Anda juga harus menampilkan atribusi atau penulis atribusi.

Untuk mengetahui informasi selengkapnya, lihat dokumentasi tentang atribusi.