我正在使用 Google Place Api,其中一些结果是“photo_reference”(类似于“reference”)值。我找不到任何关于如何使用它来获取那张照片的信息。我知道如何使用“参考”来获取 PlaceDetail,并且我确信 photo_reference 的用法会相似,但我找不到此 photo_reference 请求的 JSON/XML URL。感谢您的任何帮助。帕维尔
6 回答
请在此处查看文档:https ://developers.google.com/places/documentation/photos
他们刚刚宣布了这个新的地方照片功能
简而言之,这就是您应该如何使用这个新功能:
只需用您自己的价值观代替:
- PHOTO_REFERENCE
- MAX_HEIGHT - 从 1 到 1600 的整数值
- MAX_WIDTH - 从 1 到 1600 的整数值
- YOUR_API_KEY
你完成了
Places API 现在支持返回一张地点照片(如果可用于地点搜索请求)和最多十张地点照片用于地点详情请求。
如果您的请求返回了照片数组,您可以将photo_reference
包含的照片对象中的和/或,和参数传递给放置照片请求:maxheight
maxwidth
sensor
key
https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CnRvAAAAwMpdHeWlXl-lH0vp7lez4znKPIWSWvgvZFISdKx45AwJVP1Qp37YOrH7sqHMJ8C-vBDC546decipPHchJhHZL94RcTUfPa1jWzo-rSHaTlbNtjh-N68RkcToUCuY9v2HNpo5mziqkir37WU8FJEqVBIQ4k938TI3e7bf8xq-uwDZcxoUbO_ZJzPxremiQurAYzCTwRhE_V0&sensor=false&key=AddYourOwnKeyHere
有关详细信息,请参阅文档。
请记住,不再有免费的照片请求。此刻(2020 年 11 月),是$7.0 for 1000 requests
(如果你的音量达到 100,000)。检查下面的照片。
在Google Places 结算信息页面上阅读更多信息。
第 1 步:您应该用来调用 Google Place Photos 的 URL 是:
String url = https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=PHOTOREF&key=YOUR_API_KEY
参考:https ://developers.google.com/places/web-service/photos
第 2 步:由于上述 URL 重定向到另一个 URL,请使用 HTTPClient,因为它会自动处理重定向内容。
代码:
DefaultHttpClient hc = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpContext context = new BasicHttpContext();
hc.setRedirectHandler(new DefaultRedirectHandler() {
@Override
public URI getLocationURI(HttpResponse response,
HttpContext context) throws org.apache.http.ProtocolException {
//Capture the Location header here - This is your redirected URL
System.out.println(Arrays.toString(response.getHeaders("Location")));
return super.getLocationURI(response,context);
}
});
// Response contains the image you want. If you test the redirect URL in a browser or REST CLIENT you can see it's data
HttpResponse response = hc.execute(httpget, context);
if(response.getStatusLine().getStatusCode() == 200) {
// Todo: use the Image response
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
Bitmap bmp = BitmapFactory.decodeStream(instream);
ImageView imageView = new ImageView(context);
imageView.setImageBitmap(bmp);
images.add(imageView);
instream.close();
}
}
else {
System.out.println(response.getStatusLine().getStatusCode()+"");
}
希望这对每个人都有帮助。
启动地图后,您可以使用其图像获取地点详细信息
const service = new window.google.maps.places.PlacesService(map);
service.getDetails(
{
placeId: "some_place_id_here"
},
(data, status) => {
if (status === window.google.maps.places.PlacesServiceStatus.OK) {
data.photos &&
data.photos.forEach(photo => {
console.log(photo.getUrl({ maxWidth: 500, maxHeight: 500 }));
});
}
}
);
解决 Javascript 的 PhotoReference 问题
用户@RK 在 java 中解决了这个问题,但是在 js 中你需要使用fetch()
. 这是我使用的代码:
await fetch(proxyUrl+url).then(async(ref)=>{
await ref.blob()}).then((image)=>{
// do what you need to do
console.log(image)
}).catch((err)=>{
console.log(err);
})
在此,我使用了一个 heroku 链接proxyUrl
和@Chriss Green 的帖子中显示的 url url
。希望这可以帮助任何使用 js 感到困惑的人!