تتيح لك ميزة "صور الأماكن" (الإصدار الجديد) إضافة محتوى فوتوغرافي عالي الجودة إلى تطبيقك. تتيح لك ميزة "صور الأماكن" الوصول إلى الملايين من الصور المخزّنة في قاعدة بيانات "الأماكن". تعرِض ميزة "صور المكان" معرّفًا لمسار موارد منتظم (URI) ينقل إلى صورة بتنسيق ملفات النقطة واللون. الحد الأقصى لحجم الصورةbitmap هو 4,800 x 4,800 بكسل.
طلبات "صور الأماكن"
لاسترداد صورة لمكان، اتّبِع الخطوات التالية:
- استخدِم تفاصيل المكان (جديد) لجلب عنصر
Place
باستخدامfetchPlace()
. احرص على تضمين الحقلPlace.Field PHOTO_METADATAS
في قائمة الحقول التي تريد تضمينها في عنصر الردPlace
. - في
OnSuccessListener
لملفFetchPlaceResponse
، استخدِمPlace.getPhotoMetadas()
للحصول على عنصر البيانات الوصفية للصورة من النوعPhotoMetadata
من عنصر الاستجابةPlace
. - أنشئ عنصر
FetchResolvedPhotoUriRequest
لتقديم الطلب وضبط عنصر البيانات الوصفية للصورة، بالإضافة إلى قيم الحد الأقصى للارتفاع أو العرض أو كليهما. - استخدِم
PlacesClient.fetchResolvedPhotoUri()
لطلب عنوان URI للصورة. - أضِف
OnSuccessListener
واحصل على معرّف الموارد المنتظم للصورة من عنصرFetchResolvedPhotoUriResponse
.
المعلمات المطلوبة
في ما يلي المَعلمات المطلوبة لسمة
FetchResolvedPhotoUriRequest
:
-
البيانات الوصفية للصور
عنصر البيانات الوصفية للصورة المطلوب عرضها.
-
الحد الأقصى للارتفاع أو الحد الأقصى للعرض
تُحدِّد الحد الأقصى للارتفاع والعرض بالبكسل للصورة التي سيتم عرضها. إذا كانت الصورة أصغر من القيم المحدّدة، سيتم عرض الصورة الأصلية. إذا كانت الصورة أكبر في أي من سمتَيها، سيتم تصغيرها لتتطابق مع أصغر سمتَيها، مع الالتزام بنسبة العرض إلى الارتفاع الأصلية. يقبل كلّ من السمتَين "الحد الأقصى للارتفاع" و"الحد الأقصى للعرض" عددًا صحيحًا بين 1 و4800. يجب تحديد الحد الأقصى للارتفاع أو العرض أو كليهما.
- لضبط مَعلمة الحد الأقصى للارتفاع، استخدِم طريقة
setMaxHeight()
عند إنشاء عنصرFetchResolvedPhotoUriRequest
. - لضبط مَعلمة الحد الأقصى للعرض، استخدِم طريقة
setMaxWidth()
عند إنشاء عنصرFetchResolvedPhotoUriRequest
.
- لضبط مَعلمة الحد الأقصى للارتفاع، استخدِم طريقة
أمثلة على "صور الأماكن"
يوضّح المثال التالي كيفية الحصول على معرّف 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.getAttributions()
. - AuthorAttributions، وهو كائن
AuthorAttributions
يتم الوصول إليه من خلالPhotoMetadata.getAuthorAttributions()
إذا كان عنصر PhotoMetadata
المعروض يتضمّن أيًا من نوعَي الإسناد، يجب
تضمين الإسناد في تطبيقك في أي مكان تعرض فيه الصورة. لمزيد من المعلومات،
اطّلِع على عرض الإسناد.