Hình ảnh về địa điểm

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Bạn có thể sử dụng Places SDK for Android để yêu cầu một bức ảnh về địa điểm hiển thị trong ứng dụng của mình. Ảnh do dịch vụ ảnh trả về đến từ nhiều nguồn, bao gồm cả ảnh do chủ doanh nghiệp và người dùng đóng góp.

Places SDK for Android trả về một hình ảnh bitmap có kích thước tối đa là 1600 x 1600 pixel.

Quy trình truy xuất ảnh

Cách truy xuất hình ảnh cho một địa điểm:

  1. Sử dụng Place Details (Thông tin chi tiết về địa điểm) để tìm nạp một đối tượng Place (bằng cách sử dụng fetchPlace()). Nhớ thêm trường Place.Field PHOTO_METADATAS vào danh sách các trường cần thêm vào đối tượng Place phản hồi.
  2. Trong OnSuccessListener cho FetchPlaceResponse, hãy dùng Place.getPhotoMetadas() để lấy đối tượng siêu dữ liệu ảnh, thuộc loại PhotoMetadata từ đối tượng phản hồi Place.
  3. Tạo một đối tượng FetchPhotoRequest, không bắt buộc phải chỉ định chiều cao và chiều rộng tối đa (tính bằng pixel). Ảnh có thể có chiều rộng hoặc chiều cao tối đa là 1600px.
  4. Sử dụng PlacesClient.fetchPhoto() để yêu cầu bitmap ảnh.
  5. Thêm OnSuccessListener và lấy ảnh từ FetchPhotoResponse.

Lấy ảnh

Ví dụ sau đây minh hoạ cách lấy ảnh về địa điểm:

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

      

Phân bổ

Trong hầu hết trường hợp, bạn có thể sử dụng ảnh về địa điểm mà không cần ghi nhận quyền tác giả hoặc sẽ có thông tin ghi nhận quyền tác giả bắt buộc trong ảnh. Tuy nhiên, đối tượng siêu dữ liệu ảnh, thuộc loại PhotoMetadata, có thể chứa một trong hai loại thông tin ghi nhận bổ sung:

Nếu đối tượng PhotoMetadata được trả về có một trong hai loại thông tin ghi công, thì bạn phải đưa thông tin ghi công đó vào ứng dụng của mình bất cứ khi nào bạn hiển thị hình ảnh. Để biết thêm thông tin, hãy xem phần Hiển thị thông tin ghi nhận quyền tác giả.

Mức sử dụng và thanh toán

SKU Ảnh địa điểm được tính phí cho các lệnh gọi đến fetchPhoto(). Hãy xem trang Mức sử dụng và thanh toán để biết thông tin chi tiết.