Nearby Search (Baru)

Pilih platform: Android iOS JavaScript Layanan Web

Permintaan Nearby Search (Baru) menggunakan input wilayah yang akan ditelusuri yang ditentukan sebagai lingkaran, yang ditentukan oleh koordinat lintang dan bujur titik tengah lingkaran dan radius dalam meter. Permintaan menampilkan daftar tempat yang cocok, masing-masing diwakili oleh objek GMSPlace, dalam area penelusuran yang ditentukan.

Secara default, respons berisi semua jenis tempat dalam area penelusuran. Secara opsional, Anda dapat memfilter respons dengan menentukan daftar jenis tempat yang akan disertakan secara eksplisit dalam atau dikecualikan dari respons. Misalnya, Anda dapat menentukan untuk hanya menyertakan tempat dalam respons yang berjenis "restoran", "toko roti", dan "kafe", atau mengecualikan semua tempat berjenis "sekolah".

Permintaan Nearby Search (Baru)

Buat permintaan Penelusuran Langsung dengan memanggil GMSPlacesClient searchNearbyWithRequest:, meneruskan objek GMSPlaceSearchNearbyRequest yang menentukan parameter permintaan dan metode callback, dari jenis GMSPlaceSearchNearbyResultCallback, untuk menangani respons.

Objek GMSPlaceSearchNearbyRequest 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.
  • Pembatasan lokasi, yang berarti lingkaran yang menentukan area penelusuran.

Contoh permintaan penelusuran terdekat ini menentukan bahwa objek GMSPlace respons berisi nama tempat (GMSPlacePropertyName) dan koordinat tempat (GMSPlacePropertyCoordinate) untuk setiap objek GMSPlace dalam hasil penelusuran. Kode ini juga memfilter respons agar hanya menampilkan tempat dengan jenis "restoran" dan "kafe".

Swift

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

// Define the search area as a 500 meter diameter circle in San Francisco, CA.
let circularLocationRestriction = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500)

// Specify the fields to return in the GMSPlace object for each place in the response.
let placeProperties = [GMSPlaceProperty.name, GMSPlaceProperty.coordinate].map {$0.rawValue}

// Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return.
var request = GMSPlaceSearchNearbyRequest(locationRestriction: circularLocationRestriction, placeProperties: placeProperties)
let includedTypes = ["restaurant", "cafe"]
request.includedTypes = includedTypes

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

Objective-C

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

// Define the search area as a 500 meter diameter circle in San Francisco, CA.
id<GMSPlaceLocationRestriction> circularLocation = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500);

// Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return.
GMSPlaceSearchNearbyRequest *request = [[GMSPlaceSearchNearbyRequest alloc]
  initWithLocationRestriction:circularLocation
              placeProperties:@[ GMSPlacePropertyName, GMSPlacePropertyCoordinate ]];

// Set the place types to filter on.
NSArray<NSString *> *includedTypes = @[ @"restaurant", @"cafe" ];
request.includedTypes = [[NSMutableArray alloc] initWithArray:includedTypes];

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

Places Swift SDK for iOS (Pratinjau)

let restriction = CircularCoordinateRegion(center: CLLocationCoordinate2DMake(37.7937, -122.3965), radius: 500)
let searchNearbyRequest = SearchNearbyRequest(
  locationRestriction: restriction,
  placeProperties: [ .name, .coordinate],
  includedTypes: [ .restaurant, .cafe ],
)
switch await placesClient.searchNearby(with: searchNearbyRequest) {
case .success(let places):
  // Handle places
case .failure(let placesError):
  // Handle error
}

Respons Nearby Search

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

Mendapatkan status terbuka

Objek GMSPlacesClient berisi fungsi anggota yang disebut 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 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, setelan defaultnya 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 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 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 Data Dasar. Jam Buka lainnya akan dikenai biaya berdasarkan SKU Place Details Enterprise.
  • Jika objek GMSPlace Anda sudah memiliki kolom ini dari permintaan sebelumnya, Anda tidak akan ditagih lagi.

Contoh: Membuat permintaan GMSPlaceIsOpenWithRequest

Contoh berikut menunjukkan cara menginisialisasi 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 GMSPlaceSearchNearbyRequest untuk menentukan parameter yang diperlukan untuk penelusuran.

  • Daftar kolom

    Saat meminta detail tempat, Anda harus menentukan data yang akan ditampilkan dalam objek GMSPlace untuk tempat tersebut sebagai mask kolom. Untuk menentukan mask kolom, teruskan array nilai dari GMSPlaceProperty ke objek GMSPlaceSearchNearbyRequest. Penyamaran kolom merupakan praktik desain yang baik untuk memastikan Anda tidak meminta data yang tidak diperlukan. Cara ini akan membantu Anda menghindari waktu pemrosesan dan biaya penagihan yang tidak perlu.

    Tentukan satu atau beberapa kolom berikut:

    • Kolom berikut memicu SKU Nearby Search Pro:

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyName
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlaceID
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance

    • Kolom berikut memicu SKU Nearby Search Enterprise:

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite

    • Kolom berikut memicu SKU Nearby Search Enterprise Plus:

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

    Contoh berikut meneruskan daftar dua nilai kolom untuk menentukan bahwa objek GMSPlace yang ditampilkan oleh permintaan berisi kolom name dan placeID:

    Swift

    // Specify the place data types to return.
    let fields: [GMSPlaceProperty] = [.placeID, .name]
            

    Objective-C

    // Specify the place data types to return.
    NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
            

    Places Swift SDK for iOS (Pratinjau)

    // Specify the place data types to return.
    let fields: [PlaceProperty] = [.placeID, .displayName]
            
  • locationRestriction

    Objek GMSPlaceLocationRestriction yang menentukan wilayah yang akan ditelusuri yang ditentukan sebagai lingkaran, yang ditentukan oleh titik tengah dan radius dalam meter. Radius harus antara 0,0 dan 50000,0, inklusif. Radius defaultnya adalah 0,0. Anda harus menetapkannya dalam permintaan ke nilai yang lebih besar dari 0,0.

Parameter opsional

Gunakan objek GMSPlaceSearchNearbyRequest untuk menentukan parameter opsional untuk penelusuran.

  • includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes

    Memungkinkan Anda menentukan daftar jenis dari jenis Tabel A yang digunakan untuk memfilter hasil penelusuran. Maksimal 50 jenis dapat ditentukan di setiap kategori batasan jenis.

    Tempat hanya dapat memiliki satu jenis utama dari jenis Tabel A yang terkait dengan tempat tersebut. Misalnya, jenis utama mungkin "mexican_restaurant" atau "steak_house". Gunakan includedPrimaryTypes dan excludedPrimaryTypes untuk memfilter hasil pada jenis utama tempat.

    Tempat juga dapat memiliki beberapa nilai jenis dari jenis Tabel A yang terkait dengannya. Misalnya, restoran mungkin memiliki jenis berikut: "seafood_restaurant", "restaurant", "food", "point_of_interest", "establishment". Gunakan includedTypes dan excludedTypes untuk memfilter hasil pada daftar jenis yang terkait dengan tempat.

    Saat Anda menentukan jenis utama umum, seperti "restaurant" atau "hotel", respons dapat berisi tempat dengan jenis utama yang lebih spesifik daripada yang ditentukan. Misalnya, Anda menentukan untuk menyertakan jenis utama "restaurant". Respons kemudian dapat berisi tempat dengan jenis utama "restaurant", tetapi respons juga dapat berisi tempat dengan jenis utama yang lebih spesifik, seperti "chinese_restaurant" atau "seafood_restaurant".

    Jika penelusuran ditentukan dengan beberapa batasan jenis, hanya tempat yang memenuhi semua batasan yang akan ditampilkan. Misalnya, jika Anda menentukan {"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}, tempat yang ditampilkan akan menyediakan layanan terkait "restaurant", tetapi tidak beroperasi terutama sebagai "steak_house".

    includedTypes

    Daftar jenis tempat dari Tabel A yang akan ditelusuri. Jika parameter ini dihilangkan, semua jenis tempat akan ditampilkan.

    excludedTypes

    Daftar jenis tempat dari Tabel A yang akan dikecualikan dari penelusuran.

    Jika Anda menentukan includedTypes (seperti "school") dan excludedTypes (seperti "primary_school") dalam permintaan, respons akan menyertakan tempat yang dikategorikan sebagai "school", tetapi bukan sebagai "primary_school". Responsnya mencakup tempat yang cocok dengan setidaknya satu dari includedTypes dan tidak satu pun dari excludedTypes.

    Jika ada jenis yang bertentangan, seperti jenis yang muncul di includedTypes dan excludedTypes, error INVALID_REQUEST akan ditampilkan.

    includedPrimaryTypes

    Daftar jenis tempat utama dari Tabel A untuk disertakan dalam penelusuran.

    excludedPrimaryTypes

    Daftar jenis tempat utama dari Tabel A untuk dikecualikan dari penelusuran.

    Jika ada jenis utama yang bertentangan, seperti jenis yang muncul di includedPrimaryTypes dan excludedPrimaryTypes, error INVALID_ARGUMENT akan ditampilkan.

  • maxResultCount

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

  • rankPreference

    Jenis peringkat yang akan digunakan. Jika parameter ini dihilangkan, hasil akan diberi peringkat berdasarkan popularitas. Dapat berupa salah satu dari hal berikut:

    • .popularity (default) Mengurutkan hasil berdasarkan popularitasnya.
    • .distance Mengurutkan hasil dalam urutan menaik berdasarkan jaraknya dari lokasi yang ditentukan.
  • regionCode

    Kode wilayah yang digunakan untuk memformat respons, yang ditentukan sebagai nilai kode CLDR dua karakter. Tidak ada nilai default.

    Jika nama negara kolom formattedAddress dalam respons cocok dengan regionCode, kode negara akan dihilangkan dari formattedAddress. Parameter ini tidak berpengaruh pada adrFormatAddress, yang selalu menyertakan nama negara, atau pada shortFormattedAddress, yang tidak pernah menyertakannya.

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

Untuk mengetahui informasi selengkapnya, lihat dokumentasi tentang atribusi.