장소 사진

플랫폼 선택: Android iOS JavaScript 웹 서비스

Android용 Places SDK를 사용하여 애플리케이션에 표시할 장소 사진을 요청할 수 있습니다. 사진 서비스에서 반환되는 사진은 비즈니스 소유자 및 사용자 제공 사진을 비롯한 다양한 소스에서 가져옵니다.

사진 형식 선택

Android용 Places SDK는 요청된 사진에 대해 다음 두 가지 형식을 지원합니다.

  • 모든 Android용 Places SDK 버전: 비트맵 이미지를 반환합니다. 비트맵 이미지의 최대 크기는 1600x1600픽셀입니다.
  • Android용 Places SDK (신규) 버전 3.4 이상: 비트맵 이미지의 URI를 반환합니다. 비트맵 이미지의 최대 크기는 4800x4800픽셀입니다.

사진 검색 프로세스

장소의 이미지를 검색하려면 다음 단계를 따르세요.

  1. 장소 세부정보를 사용하여 Place 객체를 가져옵니다 (fetchPlace() 또는 findCurrentPlace() 사용). 응답 Place 객체에 포함할 필드 목록에 Place.Field PHOTO_METADATAS 필드를 포함해야 합니다.
  2. FetchPlaceResponse 또는 FindCurrentPlaceResponseOnSuccessListener에서 다음을 실행합니다.
    1. Place.getPhotoMetadas()을 사용하여 응답 Place 객체에서 PhotoMetadata 유형의 사진 메타데이터 객체를 가져옵니다.
    2. 비트맵 이미지를 가져오는 방법:
      1. FetchPhotoRequest 객체를 만들고, 최대 높이와 너비를 픽셀 단위로 지정합니다. 사진의 최대 너비 또는 높이는 1,600픽셀입니다.
      2. PlacesClient.fetchPhoto()를 사용하여 사진 비트맵을 요청합니다.
      3. OnSuccessListener를 추가하고 FetchPhotoResponse에서 사진을 가져옵니다.
    3. 사진 URI를 가져오려면 다음 단계를 따르세요.
      1. FetchResolvedPhotoUriRequest 객체를 만들어 요청을 실행합니다. 사진의 최대 너비 또는 높이는 4,800픽셀입니다.
      2. PlacesClient.fetchResolvedPhotoUri()를 사용하여 사진 URI를 요청합니다.
      3. OnSuccessListener를 추가하고 FetchResolvedPhotoUriResponse 객체에서 사진 URI를 가져옵니다.

버전 3.3.0 이상에 추가된 PhotoMetadata 데이터에 액세스합니다.

Android용 Places SDK (신규)는 AuthorAttributions 필드를 PhotoMetadata 클래스에 추가합니다. 앱이 새 SDK를 사용 설정하는 경우 Place.getPhotoMetadas()에서 반환된 PhotoMetadata 객체에 하나 이상의 작성자 속성이 포함될 수 있습니다.

PhotoMetadata 객체에 저작자 표시가 포함된 경우 버전 3.3.0에서 추가된 새로운 작성자 저작자 표시 또는 버전 3.2.0 이하에서 사용할 수 있는 기존 저작자 표시를 모두 사진과 함께 표시해야 합니다. 모든 유형의 기여 분석 처리에 관한 자세한 내용은 기여 분석을 참고하세요.

작성자 저작자 표시를 사용하여 PhotoMetadata 객체를 채우려면 다음을 실행해야 합니다.

  1. Google Cloud 프로젝트를 설정할 때 새 SDK를 사용 설정합니다.
  2. 활동 또는 프래그먼트 내에서 새 SDK를 초기화합니다.
  3. 장소 세부정보 요청의 필드 목록에 Place.Field.PHOTO_METADATAS를 포함합니다.
  4. PlacesClient.fetchPlace()를 호출하여 Place 객체를 가져오고 Place.getPhotoMetadas()를 호출하여 PhotoMetadata 객체를 가져옵니다. 저작자 저작자 표시 필드는 PlacesClient.findCurrentPlace()에서 지원하지 않습니다.
  5. 작성자 저작자 표시를 가져오려면 PhotoMetadata.getAuthorAttributions()를 사용하세요.

사진 찍기

이 섹션에서는 사진을 비트맵 또는 URI로 검색하는 방법을 설명합니다.

장소 사진을 비트맵으로 가져오기

다음 예에서는 장소 사진을 비트맵으로 가져오는 방법을 보여줍니다.

Kotlin



// Define a Place ID.
val placeId = "INSERT_PLACE_ID_HERE"

// Specify fields. Requests for photos must always have the PHOTO_METADATAS field.
val fields = listOf(Place.Field.PHOTO_METADATAS)

// Get a Place object (this example uses fetchPlace(), but you can also use findCurrentPlace())
val placeRequest = FetchPlaceRequest.newInstance(placeId, fields)

placesClient.fetchPlace(placeRequest)
    .addOnSuccessListener { response: FetchPlaceResponse ->
        val place = response.place

        // Get the photo metadata.
        val metada = place.photoMetadatas
        if (metada == null || metada.isEmpty()) {
            Log.w(TAG, "No photo metadata.")
            return@addOnSuccessListener
        }
        val photoMetadata = metada.first()

        // Get the attribution text.
        val attributions = photoMetadata?.attributions

        // Create a FetchPhotoRequest.
        val photoRequest = FetchPhotoRequest.builder(photoMetadata)
            .setMaxWidth(500) // Optional.
            .setMaxHeight(300) // Optional.
            .build()
        placesClient.fetchPhoto(photoRequest)
            .addOnSuccessListener { fetchPhotoResponse: FetchPhotoResponse ->
                val bitmap = fetchPhotoResponse.bitmap
                imageView.setImageBitmap(bitmap)
            }.addOnFailureListener { exception: Exception ->
                if (exception is ApiException) {
                    Log.e(TAG, "Place not found: " + exception.message)
                    val statusCode = exception.statusCode
                    TODO("Handle error with given status code.")
                }
            }
    }

      

Java


// Define a Place ID.
final String placeId = "INSERT_PLACE_ID_HERE";

// Specify fields. Requests for photos must always have the PHOTO_METADATAS field.
final List<Place.Field> fields = Collections.singletonList(Place.Field.PHOTO_METADATAS);

// Get a Place object (this example uses fetchPlace(), but you can also use findCurrentPlace())
final FetchPlaceRequest placeRequest = FetchPlaceRequest.newInstance(placeId, fields);

placesClient.fetchPlace(placeRequest).addOnSuccessListener((response) -> {
    final Place place = response.getPlace();

    // Get the photo metadata.
    final List<PhotoMetadata> metadata = place.getPhotoMetadatas();
    if (metadata == null || metadata.isEmpty()) {
        Log.w(TAG, "No photo metadata.");
        return;
    }
    final PhotoMetadata photoMetadata = metadata.get(0);

    // Get the attribution text.
    final String attributions = photoMetadata.getAttributions();

    // Create a FetchPhotoRequest.
    final FetchPhotoRequest photoRequest = FetchPhotoRequest.builder(photoMetadata)
        .setMaxWidth(500) // Optional.
        .setMaxHeight(300) // Optional.
        .build();
    placesClient.fetchPhoto(photoRequest).addOnSuccessListener((fetchPhotoResponse) -> {
        Bitmap bitmap = fetchPhotoResponse.getBitmap();
        imageView.setImageBitmap(bitmap);
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            final ApiException apiException = (ApiException) exception;
            Log.e(TAG, "Place not found: " + exception.getMessage());
            final int statusCode = apiException.getStatusCode();
            // TODO: Handle error with given status code.
        }
    });
});

      

장소 사진 URI 가져오기

다음 예는 장소 사진 URI를 가져오는 방법을 보여줍니다.

// Define a Place ID.
final String placeId = "INSERT_PLACE_ID_HERE";

// Specify fields. Requests for photos must always have the PHOTO_METADATAS field.
final List<Place.Field> fields = Collections.singletonList(Place.Field.PHOTO_METADATAS);

// Get a Place object (this example uses fetchPlace(), but you can also use findCurrentPlace())
final FetchPlaceRequest placeRequest = FetchPlaceRequest.newInstance(placeId, fields);

placesClient.fetchPlace(placeRequest).addOnSuccessListener((response) -> {
    final Place place = response.getPlace();

    // Get the photo metadata.
    final List<PhotoMetadata> metadata = place.getPhotoMetadatas();
    if (metadata == null || metadata.isEmpty()) {
        Log.w(TAG, "No photo metadata.");
        return;
    }
    final PhotoMetadata photoMetadata = metadata.get(0);

    // Get the attribution text.
    final String attributions = photoMetadata.getAttributions();

    // Create a FetchResolvedPhotoUriRequest.
    final FetchResolvedPhotoUriRequest photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata)
        .setMaxWidth(500) // Optional.
        .setMaxHeight(300) // Optional.
        .build();

    // Request the photo URI
    placesClient.fetchResolvedPhotoUri(photoRequest).addOnSuccessListener((fetchResolvedPhotoUriResponse) -> {
        Uri uri = fetchResolvedPhotoUriResponse.getUri();
        RequestOptions requestOptions = new RequestOptions().override(Target.SIZE_ORIGINAL);
        Glide.with(this).load(uri).apply(requestOptions).into(imageView);
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            final ApiException apiException = (ApiException) exception;
            Log.e(TAG, "Place not found: " + exception.getMessage());
            final int statusCode = apiException.getStatusCode();
            // TODO: Handle error with given status code.
        }
    });
});

기여 분석

대부분의 경우 장소 사진은 저작자 표시 없이 사용할 수 있거나 필수 속성이 이미지의 일부로 포함됩니다. 그러나 PhotoMetadata 유형의 사진 메타데이터 객체에는 다음 두 가지 유형의 추가 속성 중 하나가 포함될 수 있습니다.

반환된 PhotoMetadata 객체에 두 가지 유형의 저작자 표시가 포함된 경우에는 이미지를 표시할 때마다 애플리케이션에 저작자 표시를 포함해야 합니다. 자세한 내용은 저작자 표시 표시를 참고하세요.

사용량 및 결제

Places Photo SKU는 fetchPhoto() 호출에 대해 요금이 청구됩니다. 자세한 내용은 사용량 및 결제 페이지를 참조하세요.