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 w klasie Place (nowa) i PlacesService (starsza) oraz podajemy kilka fragmentów 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. Wykorzystuje ona 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 między metodami wyszukiwania w pobliżu w klasach Place i 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 lokalizację preferowaną. Obsługuje lokalizację preferowaną i ograniczenie lokalizacji.
Zwraca wszystkie dostępne pola danych (podzbiór obsługiwanych pól). Nie można ograniczyć do określonych pól. Zwraca tylko żądane pola danych miejsca. 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 z użyciem słowa kluczowego. Wyszukiwanie tekstowe 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 w każdym żądaniu zwracane są wszystkie dostępne pola. Poniższy fragment kodu pokazuje wywołanie nearbySearch(), które zwraca informacje o restauracjach w Sydney w Australii. Żądanie jest synchroniczne, używa wywołania zwrotnego i zawiera wymagane sprawdzenie warunkowe w 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 (nowa wersja)

Nowa wersja wyszukiwania w pobliżu ulepsza poprzednią wersję w następujący sposób:

  • możliwość określenia, które pola danych o miejscu mają być zwracane;
  • użycie obiektów Promise, które umożliwiają działanie asynchroniczne;
  • Nie trzeba sprawdzać stanu PlacesService. Zamiast tego 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 restauracji. Ten przykład pokazuje, jak użyć opcji rankPreference, aby 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 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