Usługa Zdjęcia miejsc umożliwia dodawanie do stron internetowych treści fotograficznych wysokiej jakości.
Na tej stronie wyjaśniamy różnice między funkcjami zdjęć miejsc w klasie Place (nowa) i PlacesService (starsza) oraz podajemy fragmenty kodu do porównania.
- PlacesService(starsza wersja) zwraca tablicę zawierającą maksymalnie 10 obiektów- PlacePhotow ramach obiektu- PlaceResultw przypadku każdego żądania- getDetails(), jeśli w żądaniu określono pole- photos. W przypadku- textSearch()i- nearbySearch()domyślnie zwracane jest pierwsze zdjęcie miejsca, jeśli jest dostępne.
- Klasa Placezwraca tablicę zawierającą maksymalnie 10 obiektówPhotow ramach żądaniafetchFields(), jeśli w żądaniu określono polephotos.
W tabeli poniżej przedstawiono niektóre główne różnice w używaniu zdjęć miejsc między klasami Place i PlacesService:
| PlacesService(starsza wersja) | Place(Nowy) | 
|---|---|
| PlacePhotointerfejs | Photozajęcia | 
| PlacePhotozwracahtml_attributionsjako ciąg znaków. | Photozwraca instancjęAuthorAttribution. | 
| Metody wymagają 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. | 
| Metody wymagają sprawdzenia PlacesServiceStatus. | Nie wymaga sprawdzania stanu, można użyć standardowej obsługi błędów. Więcej informacji | 
| PlacesServicemusi być utworzony za pomocą mapy lub elementu div. | Placemożna utworzyć w dowolnym miejscu bez odwoływania się do mapy lub elementu strony. | 
Porównanie kodu
W tej sekcji porównujemy kod zdjęć miejsc, aby zilustrować różnice między usługą Miejsca a klasą Place. Fragmenty kodu pokazują kod wymagany do wysyłania żądań dotyczących zdjęć miejsc w poszczególnych interfejsach API.
Usługa Miejsca (starsza wersja)
Poniższy fragment kodu pokazuje zwracanie zdjęć za pomocą PlacesService i wyświetlanie pierwszego wyniku zdjęcia na stronie. W tym przykładzie żądanie szczegółów miejsca określa identyfikator miejsca oraz pola name i photos.
Po sprawdzeniu stanu usługi pierwsza fotografia jest wyświetlana na stronie.
Podczas tworzenia instancji elementu PlacesService należy określić mapę lub element div. W tym przykładzie nie ma mapy, więc użyto elementu div.
function getPhotos() {
  // Construct the Place Details request.
  const request = {
    placeId: "ChIJydSuSkkUkFQRsqhB-cEtYnw",
    fields: ["name", "photos"],
  };
  // Create an instance of PlacesService.
  const attributionDiv = document.getElementById("attribution-div");
  const service = new google.maps.places.PlacesService(attributionDiv);
  // Check status and display the first photo in an img element.
  service.getDetails(request, (place, status) => {
    if (
      status === google.maps.places.PlacesServiceStatus.OK && place
    ) {
      const photoImg = document.getElementById('image-container');
      photoImg.src = place.photos[0].getUrl({maxHeight: 400});
    }
  });
}
Atrybucje autorów w PlacesService
Funkcja PlacesService zwraca wymagane atrybucje autora w postaci html_attributions
ciągu znaków zawierającego adres URL strony profilu autora w Google. Poniższy fragment kodu pokazuje pobieranie danych o atrybucji pierwszego wyniku zdjęcia.
let attributionUrl = place.photos[0].html_attributions;
Więcej informacji
Klasa miejsca (nowość)
Poniższy fragment kodu pokazuje użycie metody 
fetchFields()
do zwracania szczegółów miejsca, w tym wyświetlanej nazwy i zdjęć miejsca.
Najpierw tworzony jest nowy obiekt Place z użyciem identyfikatora miejsca, a następnie wywoływana jest funkcja fetchFields(), w której określone są pola displayName i photos.
Zdjęcie z pierwszego miejsca zostanie wyświetlone na stronie. Jeśli używasz klasy Place, nie musisz sprawdzać stanu usługi, ponieważ jest to obsługiwane automatycznie.
async function getPhotos() {
  // Use a place ID to create a new Place instance.
  const place = new google.maps.places.Place({
      id: 'ChIJydSuSkkUkFQRsqhB-cEtYnw', // Woodland Park Zoo, Seattle WA
  });
  // Call fetchFields, passing the needed data fields.
  await place.fetchFields({ fields: ['displayName','photos'] });
  console.log(place.displayName);
  console.log(place.photos[0]);
  // Add the first photo to an img element.
  const photoImg = document.getElementById('image-container');
  photoImg.src = place.photos[0].getURI({maxHeight: 400});
}
Atrybucje autorów w przypadku Place
Klasa Place zwraca atrybucje autora jako instancję AuthorAttribution, która zawiera imię i nazwisko autora, URI strony profilu autora w Google oraz URI zdjęcia profilowego autora. Poniższy fragment kodu pokazuje pobieranie danych o atrybucji pierwszego wyniku zdjęcia.
let name = place.photos[0].authorAttributions[0].displayName;
let attributionUrl = place.photos[0].authorAttributions[0].uri;
let photoUrl = place.photos[0].authorAttributions[0].photoUri;