放置API - 将地点照片作为标记图标

时间:2017-07-05 06:07:22

标签: google-maps google-places-api

我遵循本指南 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

  

标记为固定
  好消息!我们已经解决了这个问题。谢谢你的耐心。   

快乐映射!

3 个答案:

答案 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,
  };
}