Перейти на новый поиск мест

Разработчики из Европейской экономической зоны (ЕЭЗ)

На этой странице объясняются различия между функциями текстового поиска мест в классе Place (новая версия) и PlacesService (устаревшая версия), а также приводятся фрагменты кода для сравнения.

Устаревшая PlacesService имеет следующие методы текстового поиска:

  • Метод findPlaceFromQuery() принимает текстовый запрос и возвращает результат в виде одного места, а также поддерживает использование полей данных, относящихся к месту.
  • Метод findPlaceFromPhoneNumber() позволяет искать место по номеру телефона и поддерживает использование полей данных, относящихся к месту.
  • Метод textSearch() принимает текстовый запрос и возвращает список результатов поиска мест. textSearch() устарел и не поддерживает использование полей данных о местах.

Новый класс Place предлагает метод Place.searchByText() , который позволяет искать места, используя текстовый запрос или номер телефона, а также настраивать поиск, используя расширенный набор регулярно обновляемых полей данных о местах и ​​типов мест.

В таблице ниже перечислены основные различия в методах поиска мест между классом Place и PlacesService :

PlacesService (Legacy) Place (Новое)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Ограниченные возможности для выполнения запросов. Более широкие возможности для выполнения запросов.
Для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus требуется использование функции обратного вызова. Использует промисы и работает асинхронно.
Требуется проверка PlacesServiceStatus . Проверка состояния не требуется, можно использовать стандартную обработку ошибок. Подробнее .
Поддерживается только смещение в сторону местоположения. Поддерживает предвзятость в отношении местоположения и ограничение выбора местоположения.
Поля данных, относящиеся к месту , отформатированы с использованием стиля "змеиный регистр". Поля данных места отформатированы с использованием стиля "верблюжий регистр".
Возвращает результат, занимающий одно место. Возвращает до 20 результатов, занявших призовые места.
Ограничено фиксированным набором типов мест и полей данных о местах . Предоставляет расширенный выбор регулярно обновляемых типов мест и полей данных о местах .
textSearch()
searchByText()
Возвращает все доступные поля данных ( подмножество поддерживаемых полей ); ограничение только определенными полями невозможно. Возвращает только запрошенные поля данных о месте .

Сравнение кода

В этом разделе сравнивается код методов текстового поиска, чтобы проиллюстрировать различия между службой Places и классом Place. Приведенные фрагменты кода показывают код, необходимый для выполнения запроса на текстовый поиск в каждом из соответствующих API.

Служба размещения (наследие)

Приведённый ниже фрагмент кода демонстрирует использование метода findPlaceFromQuery() для поиска места. Запрос является синхронным и включает условную проверку состояния PlacesServiceStatus . Необходимые поля данных о месте указываются в теле запроса, которое определяется до выполнения фактического запроса.

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);
    }
  });
}

Узнать больше

Поиск текста (новая функция)

Следующий фрагмент кода демонстрирует использование метода searchByText() для поиска мест. Запрос является асинхронным и не требует проверки состояния (можно использовать стандартную обработку ошибок). В этом примере запрос включает значение maxResultCount равное 8 (значение должно быть от 1 до 20). Эта функция перебирает результаты и добавляет маркер для каждого из них, корректируя границы карты в зависимости от положения маркеров. Поскольку метод searchByText() использует оператор await , его можно использовать только внутри 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");
  }
}

Метод searchByText() поддерживает гораздо больше параметров запроса по сравнению с предыдущей версией, включая:

  • includedType позволяет ограничить поиск определенным типом места.
  • isOpenNow позволяет ограничить поиск, чтобы отображались только открытые места.
  • minRating позволяет отфильтровывать результаты ниже указанного предела (например, отображать только места с тремя и более звездами).
  • locationRestriction , исключающий результаты за пределами указанного местоположения (также поддерживается locationBias ).

Узнать больше