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

Chọn nền tảng: Android iOS JavaScript Dịch vụ web

Bạn có thể sử dụng SDK Địa điểm dành cho Android để yêu cầu hiển thị ảnh địa điểm 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ả chủ doanh nghiệp và ảnh do người dùng đóng góp. Để truy xuất hình ảnh cho một địa điểm, bạn phải làm theo các bước sau:

  1. Sử dụng Place Details (Thông tin chi tiết về địa điểm) để tìm nạp đối tượng Place (sử dụng fetchPlace() hoặc findCurrentPlace()). Nhớ đưa trường Place.Field PHOTO_METADATAS vào danh sách các trường để đưa vào đối tượng Place phản hồi.
  2. Trong OnSuccessListener cho FetchPlaceResponse hoặc FindCurrentPlaceResponse của bạn:
    1. Sử 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.
    2. Tạo một đối tượng FetchPhotoRequest, tuỳ ý 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.
    3. Sử dụng PlacesClient.fetchPhoto() để yêu cầu ảnh.
    4. Thêm OnSuccessListener và lấy ảnh từ FetchPhotoResponse.

Truy cập dữ liệu PhotoMetadata được thêm trong phiên bản 3.3.0

SDK Địa điểm dành cho Android (Mới) sẽ thêm trường AuthorAttributions vào lớp PhotoMetadata. Nếu ứng dụng của bạn bật SDK mới, thì đối tượng PhotoMetadata do Place.getPhotoMetadas() trả về có thể chứa một hoặc nhiều thuộc tính tác giả.

Khi đối tượng PhotoMetadata chứa bất kỳ thuộc tính nào, thì thuộc tính tác giả mới được thêm vào phiên bản 3.3.0 hoặc các thuộc tính hiện có trong phiên bản 3.2.0 trở xuống, bạn phải hiển thị các thuộc tính đó cùng với ảnh. Để biết thêm thông tin về cách xử lý mọi loại mô hình phân bổ, hãy xem bài viết Phân bổ.

Để điền thông tin ghi nhận tác giả cho đối tượng PhotoMetadata, bạn phải:

  1. Bật SDK mới khi bạn Thiết lập dự án trên Google Cloud.
  2. Khởi chạy SDK mới trong một hoạt động hoặc mảnh.
  3. Đưa Place.Field.PHOTO_METADATAS vào danh sách trường của yêu cầu cung cấp thông tin chi tiết về địa điểm.
  4. Gọi PlacesClient.fetchPlace() để lấy đối tượng PlacePlace.getPhotoMetadas() để lấy đối tượng PhotoMetadata. PlacesClient.findCurrentPlace() không hỗ trợ trường ghi công tác giả.
  5. Sử dụng PhotoMetadata.getAuthorAttributions() để nhận thông tin ghi công của tác giả.

Tải ảnh địa điểm

Ví dụ sau đây minh hoạ cách tải ảnh đị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 các trường hợp, bạn có thể sử dụng hình ảnh địa điểm mà không cần ghi nhận tác giả hoặc sẽ có thuộc tính bắt buộc trong hình ả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 thuộc tính bổ sung:

Nếu đối tượng PhotoMetadata được trả về có chứa một trong hai loại thuộc tính này, thì bạn phải đưa thuộc tính đó vào ứng dụng ở bất cứ nơi nào hiển thị hình ảnh. Để biết thêm thông tin, hãy xem bài viết Hiển thị thuộc tính.

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

SKU Địa điểm ảnh được tính phí cho các cuộc gọi đến fetchPhoto(). Xem trang Sử dụng và thanh toán để biết chi tiết.