我遵循本指南 https://developers.google.com/maps/documentation/javascript/places#places_photos 创建地方照片作为标记图标。这是我的地图初始化代码:
var map;
function initMap() {
// Create a map centered in Pyrmont, Sydney (Australia).
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -6.920812, lng: 107.604116},
zoom: 13
});
var request = {
location: map.getCenter(),
radius: '5000',
type: ['shopping_mall']
};
var service = new google.maps.places.PlacesService(map);
service.textSearch(request, callback);
}
// Checks that the PlacesServiceStatus is OK, and adds a marker
// using the place ID and location from the PlacesService.
function callback(results, status) {
console.log(results);
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
createPhotoMarker(place);
}
}
}
google.maps.event.addDomListener(window, 'load', initMap);
这是createPhotoMarker函数
function createPhotoMarker(place) {
var photos = place.photos;
if (!photos) {
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location,
title: place.name
});
return;
}
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location,
title: place.name,
icon: photos[0].getUrl({'maxWidth': 35, 'maxHeight': 35})
});
}
如果地方照片不可用,该功能将创建常规标记。但是对于有照片的地方,我收到了这个错误:
无法加载资源:服务器响应状态为404() lh3.googleusercontent.com/w35-h35-p/AF1QipOIL6GVVmtqp_cw_hBEQxdILZSa8poMO0HAqFHd=k
并且地图仅显示常规标记。
我做错了什么?
这是小提琴http://jsfiddle.net/v90fmrhp/
==========更新2017-07-07 ============
感谢您的回答和解决方案
看来这个问题已经解决了。我的小提琴现在正在工作
https://issuetracker.google.com/issues/63298126
标记为固定
好消息!我们已经解决了这个问题。谢谢你的耐心。
快乐映射!
答案 0 :(得分:7)
您看到的错误似乎是由Google方面的某些问题引起的。它也影响了其他一些用户,看看他们的公共问题跟踪器:
感谢您报告此问题。我们验证了它,我们会继续跟踪它。 https://issuetracker.google.com/issues/63298126
更新(2017-07-06):
对此的修复现在进入我们的发布过程,它应该很快就会出来 - 最迟可能是星期一。 https://issuetracker.google.com/issues/63298126#comment13
答案 1 :(得分:1)
有同样的问题,Sulyman提出了一个有效的解决方法,但我不知道谷歌修复这个问题需要多长时间。
Google Places Photos .GetUrl is adding width and height to url
这就是我们所做的。
if(place.photos != null){
for(var i = 0; i < place.photos.length; i++){
//Do a string replace to get the w-h-p out of there.
var str = place.photos[i].getUrl({"maxWidth": 100, "maxHeight": 100});
var res = str.replace("w100-h100-p", "p");
self.pacPhotos.push({
id : res
});
}
}else {
console.log("no photo");
}
}
答案 2 :(得分:1)
我也遇到了google places api。一切都很好,然后随机停止。这似乎可能是由于谷歌正在做出改变,因为他们准备好发布更好的地图api来支持向量
@DKinnison用他的解决方案救了我,所以我只想发布我的ES6解决方案来解析收到的地方。我评论了我个人不会使用的其他属性,以备你需要时使用。
const PHOTO_WIDTH = 600;
const PHOTO_HEIGHT = 600;
export function parseGooglePlace(place) {
if (!place) {
return;
}
const {
// address_components,
formatted_address,
geometry,
// icon,
// id,
// international_phone_number,
name,
// rating,
// reviews,
// opening_hours,
photos: _photos = [],
place_id,
// reference,
types = [],
// url: mapsURL,
// utc_offset,
// vicinity,
website,
} = place;
const photos = _photos.map(p =>
p
.getUrl({ maxWidth: PHOTO_WIDTH, maxHeight: PHOTO_HEIGHT })
.replace(`w${PHOTO_WIDTH}-h${PHOTO_HEIGHT}-p`, 'p'),
);
return {
website,
name,
photos,
address: formatted_address,
placeId: place_id,
geometry,
types,
};
}