Przejście na nową funkcję wyszukiwania w pobliżu

Na tej stronie znajdziesz wyjaśnienie różnic między wyszukiwaniem w pobliżu używanym w klasie Place (nowej) a PlacesService (starszej) oraz fragmenty kodu do porównania.

  • Starsza wersja usługi PlacesService zawiera metodę nearbySearch(), która umożliwia wyszukiwanie miejsc w określonym obszarze według słowa kluczowego lub typu.
  • Klasa Place zawiera metodę searchNearby(), która umożliwia wyszukiwanie miejsc w określonym obszarze według typu miejsca. W tym celu możesz korzystać z rozszerzonego wyboru pól danych miejsc i typów miejsc, aby uzyskać większą elastyczność.

W tej tabeli opisano niektóre główne różnice między metodami wyszukiwania w pobliżu w klasie PlacePlacesService:

PlacesService (starsza wersja) Place (Nowy)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Wymaga użycia wywołania zwrotnego do obsługi obiektu wyników i odpowiedzi google.maps.places.PlacesServiceStatus. Korzysta z obietnic i działa asynchronicznie.
Wymaga sprawdzenia PlacesServiceStatus. Nie wymaga sprawdzania stanu, może używać standardowej obsługi błędów.
Obsługuje tylko uczenie z uwzględnieniem lokalizacji. Obsługuje ustawienie preferencji lokalizacji i ograniczenia dotyczące lokalizacji.
Zwraca wszystkie dostępne pola danych (podzbiór obsługiwanych pól); nie można ograniczyć go do określonych pól. Zwraca tylko żądane pola danych o miejscach. Klasa Place zawiera rozszerzony i regularnie aktualizowany zestaw pól.
Ograniczony do stałego zestawu typów miejsc. Dostęp do powiększonego i regularnie aktualizowanego wyboru typów miejsc.
Obsługiwane wyszukiwanie tekstowe z słowem kluczowym. Wyszukiwanie tekstowe nie jest obsługiwane. Zamiast tego użyj opcji Wyszukiwanie tekstowe (nowa).

Porównanie kodu

W tej sekcji porównujemy kod metod wyszukiwania w pobliżu, aby zilustrować różnice między usługą Places a klasą Place. Fragmenty kodu pokazują kod wymagany w poszczególnych interfejsach API do wysłania żądania wyszukiwania tekstowego.

Wyszukiwanie w pobliżu (starsza wersja)

Starsza funkcja wyszukiwania w pobliżu umożliwia wyszukiwanie miejsc w określonym obszarze za pomocą słowa kluczowego lub typu. Nie można ograniczać wyszukiwania za pomocą pól danych o miejscach, dlatego wszystkie dostępne pola są zwracane z każdym żądaniem. Poniższy fragment kodu pokazuje wywołanie funkcji nearbySearch(), aby zwrócić informacje o restauracjach w Sydney w Australii. Żądanie jest synchroniczne, używa wywołania zwrotnego i zawiera wymagany warunek warunkowy 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,
  });
}

Więcej informacji

Wyszukiwanie w pobliżu (nowość)

Nowa wersja wyszukiwania w pobliżu jest lepsza od poprzedniej pod tymi względami:

  • Możliwość określenia, które pola danych o miejscach mają być zwracane.
  • Używanie obietników, które umożliwiają działanie asynchroniczne.
  • Nie trzeba sprawdzać stanu PlacesService; można użyć standardowej obsługi błędów.

Poniższy fragment kodu pokazuje funkcję, która wysyła żądanie wyszukiwania w pobliżu dotyczące restauracji. Ten przykład pokazuje użycie opcji rankPreference do sortowania wyników wyszukiwania według popularności (w poprzedniej wersji ranking jest określany za pomocą opcji rankBy). Metoda searchNearby() używa operatora await, dlatego można jej używać tylko w ramach funkcji 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");
  }
}

Więcej informacji