Na tej stronie znajdziesz wyjaśnienie różnic między funkcjami wyszukiwania miejsc na podstawie tekstu w klasie Place (nowa) i PlacesService (starsza) oraz fragmenty kodu do porównania.
Starsza wersja PlacesService ma te metody wyszukiwania oparte na tekście:
- Metoda findPlaceFromQuery(), która przyjmuje zapytanie tekstowe i zwraca pojedynczy wynik dotyczący miejsca oraz obsługuje użycie pól danych o miejscu.
- Metoda findPlaceFromPhoneNumber(), która umożliwia wyszukiwanie miejsca za pomocą numeru telefonu i obsługuje pola danych o miejscu.
- Metoda textSearch(), która przyjmuje zapytanie tekstowe i zwraca listę wyników dotyczących miejsc.textSearch()jest starsza i nie obsługuje pól danych o miejscu.
Nowa klasa Place oferuje metodę Place.searchByText(), która umożliwia wyszukiwanie miejsc za pomocą zapytania tekstowego lub numeru telefonu, a także dostosowywanie wyszukiwań za pomocą rozszerzonego wyboru regularnie aktualizowanych pól danych o miejscach i typów miejsc.
W tabeli poniżej znajdziesz główne różnice w metodach wyszukiwania miejsc między klasą Place a PlacesService:
| PlacesService(starsza wersja) | Place(Nowy) | 
|---|---|
| findPlaceFromQuery()findPlaceFromPhoneNumber() | searchByText() | 
| FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest | SearchByTextRequest | 
| Ograniczone opcje zapytań. | Więcej opcji zapytań. | 
| Wymaga użycia wywołania zwrotnego do obsługi obiektu wyników i google.maps.places.PlacesServiceStatusodpowiedzi. | 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. | 
| Pola danych o miejscach są formatowane przy użyciu notacji snake case. | Pola danych o miejscu są sformatowane w notacji camel case. | 
| Zwraca pojedynczy wynik miejsca. | Zwraca do 20 wyników wyszukiwania miejsc. | 
| Ograniczone do stałego zestawu typów miejsc i pól danych o miejscach. | Zapewnia rozszerzony wybór regularnie aktualizowanych typów miejsc i pól danych o miejscach. | 
| textSearch() | searchByText() | 
| 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. | 
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania tekstowego, aby zilustrować różnice między usługą Places a klasą Place. Fragmenty kodu pokazują kod wymagany w poszczególnych interfejsach API do wysyłania żądań wyszukiwania tekstowego.
Usługa Miejsca (starsza wersja)
Poniższy fragment kodu pokazuje użycie metody findPlaceFromQuery() do wyszukiwania miejsca. Żądanie jest synchroniczne i zawiera sprawdzanie warunkowe elementu PlacesServiceStatus. Wymagane pola danych o miejscu są określone w treści żądania, która jest definiowana przed wysłaniem właściwego żądania.
function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };
  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);
  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;
      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}
Więcej informacji
Wyszukiwanie tekstowe (nowość)
Poniższy fragment kodu pokazuje, jak użyć metody searchByText() do wyszukiwania miejsc. Żądanie jest asynchroniczne i nie wymaga sprawdzania stanu (można użyć standardowej obsługi błędów). W tym przykładzie żądanie zawiera wartość maxResultCount = 8 (wartość musi mieścić się w przedziale od 1 do 20). Ta funkcja przechodzi w pętli przez wyniki i dodaje znacznik dla każdego z nich, dostosowując granice mapy na podstawie pozycji znaczników. Metoda searchByText() używa operatora await, dlatego można jej używać tylko w funkcji async.
async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };
  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);
  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();
    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");
  }
}
Metoda searchByText() obsługuje znacznie więcej opcji żądania niż poprzednia wersja, w tym:
- includedType, która pozwala ograniczyć wyszukiwanie do określonego typu miejsca.
- isOpenNow, która pozwala ograniczyć wyszukiwanie tylko do otwartych miejsc.
- minRating, która umożliwia odfiltrowanie wyników poniżej określonego limitu (np. zwracanie tylko miejsc z oceną 3 gwiazdki lub wyższą).
- locationRestriction, który pomija wyniki spoza określonej lokalizacji (obsługiwany jest też parametr- locationBias).
Więcej informacji
- Zobacz pełny przykładowy kod
- Zobacz dokumentację wyszukiwania tekstowego (nowa wersja)
- Zobacz searchByText()materiał referencyjny