Bermigrasi ke Penelusuran Tempat baru

Halaman ini menjelaskan perbedaan antara fitur penelusuran tempat berbasis teks di class Place (baru) dan PlacesService (lama), serta memberikan beberapa cuplikan kode untuk perbandingan.

PlacesService lama memiliki metode penelusuran berbasis teks berikut:

  • Metode findPlaceFromQuery() yang menggunakan kueri teks dan menampilkan satu hasil tempat, serta mendukung penggunaan kolom data tempat.
  • Metode findPlaceFromPhoneNumber() yang memungkinkan Anda menelusuri tempat menggunakan nomor telepon, dan mendukung penggunaan kolom data tempat.
  • Metode textSearch() yang mengambil kueri teks dan menampilkan daftar hasil tempat. textSearch() lebih lama, dan tidak mendukung penggunaan kolom data tempat.

Class Place baru menawarkan metode Place.searchByText(), yang memungkinkan Anda menelusuri tempat menggunakan kueri teks atau nomor telepon, dan memungkinkan Anda menyesuaikan penelusuran menggunakan pilihan yang diperluas dari kolom data tempat dan jenis tempat yang diperbarui secara rutin.

Tabel berikut mencantumkan beberapa perbedaan utama dalam metode penelusuran tempat antara class Place dan PlacesService:

PlacesService (Lama) Place (Baru)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Opsi kueri terbatas. Opsi kueri yang lebih luas.
Memerlukan penggunaan callback untuk menangani objek hasil dan respons google.maps.places.PlacesServiceStatus. Menggunakan Promise, dan berfungsi secara asinkron.
Memerlukan pemeriksaan PlacesServiceStatus. Tidak diperlukan pemeriksaan status, dapat menggunakan penanganan error standar.
Hanya mendukung bias lokasi. Mendukung bias lokasi dan pembatasan lokasi.
Kolom data tempat diformat menggunakan snake case. Kolom data tempat diformat menggunakan camel case.
Menampilkan hasil satu tempat. Menampilkan hingga 20 hasil tempat.
Dibatasi pada kumpulan tetap jenis tempat dan kolom data tempat. Memberikan pilihan yang diperluas dari jenis tempat dan kolom data tempat yang diperbarui secara berkala.
textSearch()
searchByText()
Menampilkan semua kolom data yang tersedia (subkumpulan kolom yang didukung); tidak dapat dibatasi ke kolom tertentu. Hanya menampilkan kolom data tempat yang diminta.

Perbandingan kode

Bagian ini membandingkan kode untuk metode penelusuran teks guna mengilustrasikan perbedaan antara Layanan Places dan class Place. Cuplikan kode menunjukkan kode yang diperlukan di setiap API untuk membuat permintaan penelusuran berbasis teks.

Layanan Places (Lama)

Cuplikan kode berikut menunjukkan penggunaan metode findPlaceFromQuery() untuk menelusuri tempat. Permintaan bersifat sinkron, dan menyertakan pemeriksaan bersyarat pada PlacesServiceStatus. Kolom data tempat yang diperlukan ditentukan dalam isi permintaan, yang ditentukan sebelum membuat permintaan sebenarnya.

function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };

  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);

  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;

      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}

Pelajari lebih lanjut

Text Search (Baru)

Cuplikan kode berikut menunjukkan penggunaan metode searchByText() untuk menelusuri tempat. Permintaan bersifat asinkron, dan tidak memerlukan pemeriksaan status (penanganan error standar dapat digunakan). Dalam contoh ini, permintaan menyertakan maxResultCount sebesar 8 (nilai harus antara 1 dan 20). Fungsi ini melakukan loop pada hasil dan menambahkan penanda untuk setiap hasil, menyesuaikan batas peta berdasarkan posisi penanda. Karena metode searchByText() menggunakan operator await, metode ini hanya dapat digunakan di dalam fungsi async.

async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };

  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);

  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();

    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

Metode searchByText() mendukung lebih banyak opsi permintaan dibandingkan dengan versi sebelumnya, termasuk:

  • includedType yang memungkinkan Anda membatasi penelusuran ke jenis tempat tertentu.
  • isOpenNow yang memungkinkan Anda membatasi penelusuran agar hanya menampilkan tempat yang terbuka.
  • minRating yang memungkinkan Anda memfilter hasil di bawah batas yang ditentukan (misalnya, hanya menampilkan tempat dengan tiga bintang atau lebih).
  • locationRestriction yang menghilangkan hasil di luar lokasi yang ditentukan (locationBias juga didukung).

Pelajari lebih lanjut