Migrar para os novos detalhes do lugar

Desenvolvedores do Espaço Econômico Europeu (EEE)

A API Places pode retornar informações detalhadas sobre um lugar específico. Esta página explica as diferenças entre os detalhes do lugar usados nas classes Place (nova) e PlacesService (legada) e fornece alguns snippets de código para comparação. A tabela a seguir lista algumas das principais diferenças no uso de detalhes do lugar entre a classe Place e PlacesService:

PlacesService (legado) Place (Novo)
getDetails() fetchFields()
PlaceDetailsRequest FetchFieldsRequest
Os métodos exigem o uso de um callback para processar o objeto de resultados e a resposta google.maps.places.PlacesServiceStatus. Usa promessas e funciona de forma assíncrona.
Os métodos exigem uma verificação de PlacesServiceStatus. Nenhuma verificação de status necessária, pode usar o tratamento de erros padrão. Saiba mais.
Os campos de dados de lugar são formatados usando snake case. Os campos de dados de lugar são formatados usando camel case.
Limitado a um conjunto fixo de tipos de lugar e campos de dados de lugar. Oferece uma seleção expandida de tipos de lugares e campos de dados de lugares atualizados regularmente.

Comparação de código

Esta seção compara dois trechos de código semelhantes para ilustrar as diferenças entre o serviço Places e a classe Place. Os snippets de código mostram o código necessário em cada API respectiva para fazer uma solicitação de detalhes do lugar e usar os dados resultantes para adicionar um marcador ao mapa.

Serviço do Places (legado)

O snippet de código condensado a seguir mostra como fazer uma solicitação de detalhes de lugar usando PlacesService. A solicitação usa um callback e inclui uma verificação condicional obrigatória em PlacesServiceStatus. Os campos de dados de lugar necessários são especificados no corpo da solicitação.

function getPlaceDetails() {
  // Instantiate the Places Service.
  const service = new google.maps.places.PlacesService(map);

  // Make a request using the Place ID.
  const request = {
    placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4",
    fields: ["name", "formatted_address", "place_id", "geometry"],
  };

  // Request place details.
  service.getDetails(request, (place, status) => {
    // Check whether PlacesServiceStatus is OK.
    if (
      status === google.maps.places.PlacesServiceStatus.OK &&
      place &&
      place.geometry &&
      place.geometry.location
    ) {

      // Log the result.
      console.log(place.name);
      console.log(place.formatted_address);

      // Add a marker for the place.
      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
        title: place.name,
      });
    }
  });
}

Saiba mais

Classe Place (novo)

O snippet de código condensado a seguir mostra como fazer uma solicitação de detalhes de lugar usando a classe Place. A solicitação é assíncrona e não inclui uma verificação de status. O tratamento de erros padrão pode ser usado. Um ID de lugar é usado para criar uma nova instância Place, que é usada para fazer a solicitação (fetchFields()). Os campos de dados de lugar necessários não são transmitidos até que fetchFields() seja chamado, o que oferece mais flexibilidade. Como o método fetchFields() usa o operador await, ele só pode ser usado em uma função async.

async function getPlaceDetails() {
  // Use place ID to create a new Place instance.
  const place = new google.maps.places.Place({
    id: "ChIJN5Nz71W3j4ARhx5bwpTQEGg",
    requestedLanguage: "en", // optional
  });

  // Call fetchFields, passing the needed data fields.
  await place.fetchFields({
    fields: ["displayName", "formattedAddress", "location"],
  });

  // Log the result.
  console.log(place.displayName);
  console.log(place.formattedAddress);

  // Add an Advanced Marker.
  const marker = new google.maps.marker.AdvancedMarkerElement({
    map,
    position: place.location,
    title: place.displayName,
  });
}

Saiba mais