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

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Na tej stronie wyjaśniamy różnice między wyszukiwaniem w pobliżu używanym w klasie Place (nowa) a klasą PlacesService (starsza) oraz podajemy fragmenty kodu do porównania.

  • Starsza wersja PlacesService ma metodę nearbySearch(), która umożliwia wyszukiwanie miejsc na określonym obszarze według słowa kluczowego lub typu.
  • Klasa Place ma metodę searchNearby(), która umożliwia wyszukiwanie miejsc na określonym obszarze według typu miejsca. Korzysta ona z rozszerzonego wyboru pól danych o miejscach i typów miejsc, co zapewnia większą elastyczność.

W tabeli poniżej znajdziesz główne różnice w metodach wyszukiwania w pobliżu między klasą Place a klasą PlacesService:

PlacesService (starsza wersja) Place (Nowy)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Wymaga użycia wywołania zwrotnego do obsługi obiektu wyników i google.maps.places.PlacesServiceStatus odpowiedzi. Korzysta z obiektów Promise i działa asynchronicznie.
Wymaga sprawdzenia PlacesServiceStatus. Nie wymaga sprawdzania stanu, można użyć standardowej obsługi błędów. Więcej informacji
Obsługuje tylko określanie lokalizacji. Obsługuje preferencje lokalizacyjne i ograniczenia lokalizacyjne.
Zwraca wszystkie dostępne pola danych (podzbiór obsługiwanych pól); nie można ograniczyć go do konkretnych pól. Zwraca tylko wybrane pola danych o miejscu. Klasa Place oferuje rozszerzony i regularnie aktualizowany wybór pól.
Ograniczone do stałego zestawu typów miejsc. Uzyskaj dostęp do rozszerzonego i regularnie aktualizowanego wyboru typów miejsc.
Obsługiwane wyszukiwanie tekstowe za pomocą słowa kluczowego. Wyszukiwanie na podstawie tekstu nie jest obsługiwane. Zamiast tego użyj wyszukiwania tekstowego (nowego).

Porównanie kodu

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

Wyszukiwanie w pobliżu (starsza wersja)

Starsza wersja wyszukiwania w pobliżu umożliwia wyszukiwanie miejsc na określonym obszarze według słowa kluczowego lub typu. Nie ma możliwości ograniczenia wyszukiwania za pomocą pól danych o miejscu, więc wszystkie dostępne pola są zwracane z każdym żądaniem. Poniższy fragment kodu pokazuje wywołanie funkcji nearbySearch() w celu zwrócenia informacji o restauracjach w Sydney w Australii. Żądanie jest synchroniczne, korzysta z wywołania zwrotnego i zawiera wymagane sprawdzenie warunkowe w przypadku 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 z tych powodów:

  • Możliwość określenia, które pola danych o miejscu mają być zwracane.
  • używanie obiektów Promise, które umożliwiają działanie asynchroniczne;
  • Nie musisz sprawdzać stanu PlacesService. Zamiast tego możesz użyć standardowej obsługi błędów.

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