地点照片(新)

请选择平台Android iOS Web 服务

欧洲经济区 (EEA) 开发者

借助 Place Photos(新),您可以向应用添加高品质照片内容。借助 Place Photos,您可以访问存储在地点数据库中的数百万张照片。Place Photos 会返回位图图像的 URI。位图图片的最大尺寸为 4800x4800 像素。

地点照片请求

如需检索某个地点的图片,请执行以下操作:

  1. 使用地点详情(新)通过 fetchPlace() 获取 Place 对象。 请务必在要包含在响应 Place 对象中的字段列表中添加 Place.Field PHOTO_METADATAS 字段。
  2. OnSuccessListener 中,针对您的 FetchPlaceResponse 调用 Place.getPhotoMetadas(),以从响应 Place 对象中获取 PhotoMetadata 类型的照片元数据对象。
  3. 创建 FetchResolvedPhotoUriRequest 对象以发出请求,并传递照片元数据对象以及最大高度、最大宽度或这两者的值。
  4. 使用 PlacesClient.fetchResolvedPhotoUri() 请求照片 URI。
  5. 添加 OnSuccessListener 并从 FetchResolvedPhotoUriResponse 对象获取照片 URI。

必需参数

FetchResolvedPhotoUriRequest 的必需参数如下:

  • 照片元数据

    要返回的照片的元数据对象。

  • 最大高度或最大宽度

    指定要返回的图片的最大高度和宽度(以像素为单位)。如果图片小于指定值,则返回原始图片。如果图片在任一维度上都大于指定尺寸,系统会将其缩放为与两个维度中较小的维度相匹配,但会限制为原始宽高比。最大高度和最大宽度属性均接受介于 1 到 4800 之间的整数。您必须指定最大高度、最大宽度或同时指定这两者。

    • 如需设置最大高度参数,请在构建 FetchResolvedPhotoUriRequest 对象时调用 setMaxHeight() 方法。
    • 如需设置最大宽度参数,请在构建 FetchResolvedPhotoUriRequest 对象时调用 setMaxWidth() 方法。

地点照片示例

以下示例演示了如何获取地点照片 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 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.
        }
    });
});

归因

在大多数情况下,使用地点照片时可以不包含提供方说明,或者可以在图片中显示必要的提供方说明。不过,照片元数据对象(类型为 PhotoMetadata)可以包含以下两种类型的附加提供方信息:

如果返回的 PhotoMetadata 对象包含任一类型的提供方信息,无论您在哪里显示相应图片,都要在应用中包含提供方信息。如需了解详情,请参阅显示提供方信息