Bermigrasi ke Penelusuran Tempat baru

Developer Wilayah Ekonomi Eropa (EEA)

Halaman ini menjelaskan perbedaan antara fitur penelusuran tempat berbasis teks di kelas 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 lebih luas 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 ada pemeriksaan status yang diperlukan, dapat menggunakan penanganan error standar. Pelajari lebih lanjut.
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 satu hasil tempat. Menampilkan hingga 20 hasil tempat.
Terbatas pada kumpulan tetap jenis tempat dan kolom data tempat. Menyediakan pilihan yang lebih luas untuk jenis tempat yang diperbarui secara berkala dan kolom data tempat.
textSearch()
searchByText()
Menampilkan semua kolom data yang tersedia (sub-kumpulan 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 Places Service dan Place class. Cuplikan kode menunjukkan kode yang diperlukan di setiap API masing-masing untuk membuat permintaan penelusuran berbasis teks.

Layanan Places (Lama)

Cuplikan kode berikut menunjukkan penggunaan metode findPlaceFromQuery() untuk menelusuri tempat. Permintaan bersifat sinkron, dan mencakup 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 8 (nilai harus antara 1 dan 20). Fungsi ini melakukan loop melalui 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 untuk hanya menampilkan tempat yang sedang buka.
  • 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