Ảnh địa điểm (Mới)

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

Place Photos (Mới) cho phép bạn thêm nội dung ảnh chất lượng cao vào ứng dụng. Place Photos cho phép bạn truy cập vào hàng triệu bức ảnh được lưu trữ trong cơ sở dữ liệu của Places. Place Photos trả về một URI đến một hình ảnh bitmap. Hình ảnh bitmap có kích thước tối đa là 4800x4800 pixel.

Yêu cầu về ảnh về địa điểm

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

  1. Sử dụng Thông tin chi tiết về địa điểm (Mới) để tìm nạp đối tượng Place bằng fetchPlace(). Hãy nhớ đưa trường Place.Field PHOTO_METADATAS vào danh sách các trường cần đưa vào đối tượng Place phản hồi.
  2. Trong OnSuccessListener cho FetchPlaceResponse, hãy gọi Place.getPhotoMetadas() để lấy đối tượng siêu dữ liệu ảnh thuộc loại PhotoMetadata từ đối tượng Place phản hồi.
  3. Tạo đối tượng FetchResolvedPhotoUriRequest để đưa ra yêu cầu và truyền đối tượng siêu dữ liệu ảnh, cũng như các giá trị cho chiều cao tối đa, chiều rộng tối đa hoặc cả hai.
  4. Sử dụng PlacesClient.fetchResolvedPhotoUri() để yêu cầu URI ảnh.
  5. Thêm OnSuccessListener và lấy URI ảnh từ đối tượng FetchResolvedPhotoUriResponse.

Thông số bắt buộc

Các tham số bắt buộc cho FetchResolvedPhotoUriRequest là:

  • Siêu dữ liệu ảnh

    Đối tượng siêu dữ liệu của ảnh cần trả về.

  • Chiều cao tối đa hoặc chiều rộng tối đa

    Chỉ định chiều cao và chiều rộng tối đa (tính bằng pixel) của hình ảnh cần trả về. Nếu hình ảnh nhỏ hơn các giá trị đã chỉ định, hình ảnh gốc sẽ được trả về. Nếu lớn hơn ở một trong hai kích thước, hình ảnh sẽ được điều chỉnh theo tỷ lệ cho phù hợp với kích thước nhỏ hơn trong hai kích thước, bị giới hạn ở tỷ lệ khung hình ban đầu. Cả thuộc tính chiều cao tối đa và chiều rộng tối đa đều chấp nhận số nguyên từ 1 đến 4800. Bạn phải chỉ định chiều cao tối đa, chiều rộng tối đa hoặc cả hai.

    • Để đặt tham số chiều cao tối đa, hãy gọi phương thức setMaxHeight() khi tạo đối tượng FetchResolvedPhotoUriRequest.
    • Để đặt tham số chiều rộng tối đa, hãy gọi phương thức setMaxWidth() khi tạo đối tượng FetchResolvedPhotoUriRequest.

Ví dụ về ảnh về địa điểm

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

// 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 and author attributions.
    final String attributions = photoMetadata.getAttributions();
    final AuthorAttributions authorAttributions = photoMetadata.getAuthorAttributions();

    // Create a FetchResolvedPhotoUriRequest.
    final FetchResolvedPhotoUriRequest photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata)
        .setMaxWidth(500)
        .setMaxHeight(300)
        .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.
        }
    });
});

Phân bổ

Trong hầu hết trường hợp, bạn có thể sử dụng ảnh địa điểm mà không cần ghi công hoặc sẽ có phần ghi công 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ề bao gồm một trong hai loại thuộc tính, thì bạn phải đưa thuộc tính đó vào ứng dụng của mình bất cứ khi nào hiển thị hình ảnh. Để biết thêm thông tin, hãy xem phần Hiển thị thông tin phân bổ.