Bermigrasi ke Nearby Search versi baru

Halaman ini menjelaskan perbedaan antara penelusuran terdekat seperti yang digunakan di class Place (baru) dan PlacesService (lama), serta memberikan beberapa cuplikan kode untuk perbandingan.

  • PlacesService lama memiliki metode nearbySearch(), yang memungkinkan Anda menelusuri tempat dalam area yang ditentukan berdasarkan kata kunci atau jenis.
  • Class Place memiliki metode searchNearby() yang memungkinkan Anda menelusuri tempat dalam area yang ditentukan berdasarkan jenis tempat, menggunakan pilihan yang diperluas dari kolom data tempat dan jenis tempat untuk fleksibilitas yang lebih besar.

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

PlacesService (Lama) Place (Baru)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
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.
Menampilkan semua kolom data yang tersedia (subkumpulan kolom yang didukung); tidak dapat dibatasi ke kolom tertentu. Hanya menampilkan kolom data tempat yang diminta; class Place menawarkan pilihan kolom yang diperluas dan diperbarui secara rutin.
Dibatasi untuk kumpulan jenis tempat tetap. Akses pilihan jenis tempat yang diperluas dan diperbarui secara rutin.
Penelusuran berbasis teks yang didukung dengan kata kunci. Penelusuran berbasis teks tidak didukung, gunakan Text Search (Baru).

Perbandingan kode

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

Nearby Search (Lama)

Nearby Search lama memungkinkan Anda menelusuri tempat dalam area yang ditetapkan dengan kata kunci atau jenis. Tidak ada cara untuk membatasi penelusuran menggunakan kolom data tempat, sehingga semua kolom yang tersedia ditampilkan dengan setiap permintaan. Cuplikan berikut menunjukkan pemanggilan nearbySearch() untuk menampilkan informasi tentang restoran di Sydney, Australia. Permintaan ini bersifat sinkron, menggunakan callback, dan menyertakan pemeriksaan kondisional yang diperlukan pada PlacesServiceStatus.

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

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

Pelajari lebih lanjut

Nearby Search (Baru)

Versi baru Nearby Search meningkatkan kualitas versi sebelumnya dengan cara berikut:

  • Kemampuan untuk menentukan kolom data tempat yang akan ditampilkan.
  • Penggunaan Promise yang memungkinkan operasi asinkron.
  • Tidak perlu memeriksa status PlacesService; penanganan error standar dapat digunakan sebagai gantinya.

Cuplikan kode berikut menunjukkan fungsi yang membuat permintaan Penelusuran Langsung untuk restoran. Contoh ini menunjukkan penggunaan opsi rankPreference untuk memberi peringkat hasil penelusuran berdasarkan popularitas (dalam versi sebelumnya, peringkat ditentukan menggunakan opsi rankBy). Karena metode searchNearby() menggunakan operator await, metode ini hanya dapat digunakan di dalam fungsi async.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    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");
  }
}

Pelajari lebih lanjut