Cómo migrar a la nueva experiencia de Place Search

Desarrolladores del Espacio Económico Europeo (EEE)

En esta página, se explican las diferencias entre las funciones de búsqueda de lugares basadas en texto en la clase Place (nueva) y PlacesService (heredada), y se proporcionan algunos fragmentos de código para la comparación.

El PlacesService heredado tiene los siguientes métodos de búsqueda basados en texto:

  • El método findPlaceFromQuery(), que toma una consulta de texto y muestra un solo resultado de lugar, y admite el uso de campos de datos de lugares.
  • El método findPlaceFromPhoneNumber(), que te permite buscar un lugar con un número de teléfono y admite el uso de campos de datos de lugares.
  • El método textSearch(), que toma una consulta de texto y muestra una lista de resultados de lugares. textSearch() es más antiguo y no admite el uso de campos de datos de lugares.

La nueva clase Place ofrece el método Place.searchByText(), que te permite buscar lugares con una consulta de texto o un número de teléfono, y te permite personalizar tus búsquedas con una selección ampliada de campos de datos de lugares y tipos de lugares que se actualizan con regularidad.

En la siguiente tabla, se enumeran algunas de las principales diferencias en los métodos de búsqueda de lugares entre la clase Place y PlacesService:

PlacesService (heredado) Place (nuevo)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Opciones de consulta limitadas Opciones de consulta más amplias
Requiere el uso de una devolución de llamada para controlar el objeto de resultado y google.maps.places.PlacesServiceStatus respuesta. Usa Promises y funciona de forma asíncrona
Requiere una verificación de PlacesServiceStatus No se requiere una verificación de estado, se puede usar el manejo de errores estándar Obtén más información.
Solo admite el sesgo de ubicación Admite el sesgo de ubicación y la restricción de ubicación
Los campos de datos de lugares se formatean con snake_case Los campos de datos de lugares se formatean con camelCase
Muestra un solo resultado de lugar Muestra hasta 20 resultados de lugares
Se limita a un conjunto fijo de tipos de lugares y campos de datos de lugares. Proporciona una selección ampliada de tipos de lugares y campos de datos de lugares que se actualizan con regularidad y .
textSearch()
searchByText()
Muestra todos los campos de datos disponibles (un subconjunto de los campos admitidos); no se puede restringir a campos específicos. Muestra solo los campos de datos de lugares solicitados.

Comparación de código

En esta sección, se compara el código de los métodos de búsqueda de texto para ilustrar las diferencias entre el servicio Places y la clase Place. Los fragmentos de código muestran el código requerido en cada API respectiva para realizar una solicitud de búsqueda basada en texto.

Servicio Places (heredado)

En el siguiente fragmento de código, se muestra el uso del método findPlaceFromQuery() para buscar un lugar. La solicitud es síncrona e incluye una verificación condicional en PlacesServiceStatus. Los campos de datos de lugares necesarios se especifican en el cuerpo de la solicitud, que se define antes de realizar la solicitud real.

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

Más información

Text Search (nueva)

En el siguiente fragmento de código, se muestra el uso del método searchByText() para buscar lugares. La solicitud es asíncrona y no requiere una verificación de estado (se puede usar el manejo de errores estándar). En este ejemplo, la solicitud incluye un maxResultCount de 8 (el valor debe estar entre 1 y 20). Esta función itera por los resultados y agrega un marcador para cada uno, ajustando los límites del mapa según la posición de los marcadores. Debido a que el método searchByText() usa el operador await, solo se puede usar dentro de una función 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");
  }
}

El método searchByText() admite muchas más opciones de solicitud en comparación con la versión anterior, incluidas las siguientes:

  • includedType, que te permite restringir las búsquedas a un tipo de lugar específico.
  • isOpenNow , que te permite restringir las búsquedas para que solo muestren los lugares que están abiertos.
  • minRating , que te permite filtrar los resultados por debajo del límite especificado (por ejemplo, solo muestra los lugares con tres estrellas o más).
  • locationRestriction , que omite los resultados fuera de la ubicación especificada (locationBias también es compatible).

Más información