На этой странице объясняются различия между поиском поблизости, используемым в классе Place (новый) и PlacesService (устаревший), а также приведены некоторые фрагменты кода для сравнения.
-  Устаревший PlacesServiceимеет методnearbySearch(), который позволяет искать места в указанной области по ключевому слову или типу.
-  Класс Placeимеет методsearchNearby(), который позволяет искать места в указанной области по типу места, используя расширенный выбор полей данных о месте и типов мест для большей гибкости.
 В следующей таблице перечислены некоторые основные различия в методах поиска поблизости между классом Place и PlacesService :
| PlacesService(устаревший) | Place(новое) | 
|---|---|
| nearbySearch() | searchNearby() | 
| PlaceSearchRequest | SearchNearbyRequest | 
| Требуется использование обратного вызова для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus. | Использует Promises и работает асинхронно. | 
| Требуется проверка PlacesServiceStatus. | Проверка статуса не требуется, можно использовать стандартную обработку ошибок. Подробнее . | 
| Поддерживает только смещение местоположения. | Поддерживает смещение местоположения и ограничение местоположения. | 
| Возвращает все доступные поля данных ( подмножество поддерживаемых полей ); не может быть ограничен конкретными полями. | Возвращает только запрошенные поля данных о месте ; класс Placeпредлагает расширенный и регулярно обновляемый выбор полей. | 
| Ограничено фиксированным набором типов мест . | Получите доступ к расширенному и регулярно обновляемому выбору типов мест . | 
| Поддерживается текстовый поиск по ключевому слову . | Текстовый поиск не поддерживается, вместо него используйте Текстовый поиск (новый) . | 
Сравнение кодов
В этом разделе сравнивается код методов поиска поблизости, чтобы проиллюстрировать различия между сервисом Places и классом Place. Фрагменты кода показывают код, необходимый для выполнения текстового поискового запроса в каждом API.
Поиск поблизости (устаревшая версия)
 Устаревший поиск поблизости позволяет искать места в указанной области по ключевому слову или типу. Невозможно ограничить поиск по полям данных о местах, поэтому все доступные поля возвращаются с каждым запросом. В следующем фрагменте кода показан вызов nearbySearch() для получения информации о ресторанах в Сиднее, Австралия. Запрос синхронный, использует обратный вызов и включает обязательную условную проверку 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,
  });
}
Узнать больше
Поиск поблизости (новый)
Новая версия Nearby Search превосходит предыдущую версию по следующим параметрам:
- Возможность указать, какие поля данных о месте следует возвращать.
- Использование Promises, которое обеспечивает асинхронную работу.
-  Нет необходимости проверять статус PlacesService; вместо этого можно использовать стандартную обработку ошибок.
 В следующем фрагменте кода показана функция, которая выполняет поиск ресторанов поблизости. В этом примере показано использование параметра rankPreference для ранжирования результатов поиска по популярности (в предыдущей версии ранжирование задавалось с помощью параметра rankBy ). Поскольку метод searchNearby() использует оператор await его можно использовать только внутри 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");
  }
}
Узнать больше
- Посмотреть полный пример кода
- См. документацию по Nearby Search (новая)
-  См. справочник searchNearby()