使用Google Places API HTTP服务调用URL获取某个位置的照片数据,
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<LOCATION>&radius=<RADIUS>&sensor=false&key=<API_KEY>
产生预期的回调。下面是我用于测试的请求的响应。
2017-09-19 11:20:32.968347-0400 <MY_APP_NAME>[7502:2809094] Places Found: (
{
...
...
photos = (
{
height = 5312;
"html_attributions" = (
"<a href=\"https://maps.google.com/maps/contrib/110407035205544174409/photos\">leah steen</a>"
);
"photo_reference" = "CmRaAAAAcppPDrYGBnLqlyYQ_EMmsvgKXXpVjp0drGkJPWLBwlSzrWzuhtFFGCzQPl1pSez92QVktthtaMSsV1IlAWMIMPboycElhruKgUg-KFHWWrhLKOR6h8GGiR349rhokAFJEhApc7ghYIH0guUQBGJi1bKBGhQMcElN7-lSBzvCgAG3vVzANLkf6A";
width = 2988;
}
);
...
...
}
)如您所见,这个地方有一个包含关联图像的html_attributions值的照片字典,我在整个应用程序中都在适当地处理它。
发行:
当我通过使用place_id获取同一位置的照片数据时,我得到的图片和属性如下:
2017-09-19 11:22:08.548253-0400 <MY_APP_NAME>[7502:2809094] photo data: (
"<UIImage: 0x17048b720> size {169, 300} orientation 0 scale 2.000000",
"leah steen{\n}"
)当然,我收到了同样的照片,,但是没有链接的属性。从我使用web服务的其他方法可以看出,这个地方的照片确实有一个属性和链接。
我不知所措。如果他们的iOS SDK不返回相同的数据,我该如何从谷歌获得全部属性呢?
代码:
使用谷歌建议的另一种通过place_id获取位置照片数据的方法,您可以获得图像和图像属性(如果有)。
按照Google的要求,我使用这两种方法获取数据:
- (void)lookUpPhotosForPlaceID:(NSString *)placeID
callback:(GMSPlacePhotoMetadataResultCallback)callback;
- (void)loadPlacePhoto:(GMSPlacePhotoMetadata *)photo
callback:(GMSPlacePhotoImageResultCallback)callback;下面是我用来获取照片数据的代码。
// Look up photos for the place
[[GMSPlacesClient sharedClient] lookUpPhotosForPlaceID:placeID callback:^(GMSPlacePhotoMetadataList * _Nullable photos, NSError * _Nullable error) {
if (error != nil) {
response(error, NULL);
return;
}
if (photos.results.count > 0) {
GMSPlacePhotoMetadata *metaData = photos.results.firstObject; // Using the first photo
// Load the photo
[[GMSPlacesClient sharedClient] loadPlacePhoto:metaData constrainedToSize:<SOME_SIZE> scale:[UIApplication sharedApplication].keyWindow.screen.scale callback:^(UIImage * _Nullable photo, NSError * _Nullable error) {
if (error) {
response(error, NULL);
return;
}
NSArray *photoData = @[photo, metaData.attributions];
response(nil, photoData);
}];
}
else response(error, NULL);
}];编辑:
作为参考,Google确实告诉它的用户,这些数据可能会发生变化,并且多个回调应该返回相同的数据。但是使用不同API的多个调用不会.
发布于 2017-09-29 13:06:29
你可以做几件事来验证正确的行为:
这个方法的多次调用可能每次都会返回相同的照片。但是,这不能保证,因为底层数据可能已经更改。
此时,我正在放松属性字符串,但只保留纯文本(Leah)。检查此metaData的好方法是在loadPlacePhoto:回调之前:
https://stackoverflow.com/questions/46304901
复制相似问题