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

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Na tej stronie znajdziesz wyjaśnienie różnic między wyszukiwaniem w pobliżu w klasie Place (nowa) a w klasie PlacesService (starsza) oraz 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, wykorzystując rozszerzony wybór pól danych i typów miejsc, co zapewnia większą elastyczność.

W tabeli poniżej znajdziesz niektóre z głównych różnic w metodach wyszukiwania w pobliżu między klasą Place a PlacesService:

PlacesService (starsza wersja) Place (Nowość)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Wymaga użycia wywołania zwrotnego do obsługi obiektu wyników i odpowiedzi google.maps.places.PlacesServiceStatus. Używa obiektów Promise i działa asynchronicznie.
Wymaga sprawdzenia PlacesServiceStatus. Nie jest wymagane sprawdzanie stanu, można użyć standardowej obsługi błędów. Więcej informacji
Obsługuje tylko ograniczenie lokalizacji. Obsługuje lokalizację preferowaną i ograniczenie lokalizacji.
Zwraca wszystkie dostępne pola danych (podzbiór obsługiwanych pól); nie można ograniczyć go do konkretnych pól. Zwraca tylko żądane 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ą Places a klasą Place. Fragmenty kodu pokazują kod wymagany w każdym interfejsie API do wysłania żądania 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 można ograniczyć wyszukiwania za pomocą pól danych o miejscu, więc każde żądanie zwraca wszystkie dostępne pola. 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

Nearby Search (New)

Nowa wersja wyszukiwania w pobliżu jest ulepszona w porównaniu z poprzednią wersją w następujących aspektach:

  • możliwość określenia, które pola danych o miejscu mają być zwracane;
  • używanie obiektów Promise, które umożliwiają operacje 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, jak za pomocą opcji rankPreference uszeregować wyniki 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 wewnątrz 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