google places api使用基于餐厅美食的自定义标记图标

时间:2017-08-28 12:21:42

标签: javascript google-maps google-maps-api-3 google-places-api

我正在尝试使用不同类型的菜肴的不同标记图标,用于在Google地方附近搜索产生的餐馆。

作为一个例子,如果一家餐馆是比萨店,它应该显示一个定制的比萨店图标(我已经存储在当地)或者如果一个餐馆是汉堡店,它应该显示一个汉堡图标而不是默认的餐馆图标。

据我搜索,只有可能使用自定义图标的地方类型(例如“餐厅”,“图书馆”,“停车”......)我找不到办法得到餐馆类型的子类型。有办法解决这个问题吗?

以下是真正绘制标记的搜索和回调函数的示例代码:

     var MARKER_PATH =
    "https://developers.google.com/maps/documentation/javascript/images/marker_green";
unction search() {
  var search = {
    bounds: map.getBounds(),
    types: ["restaurant"]
  };

  places.nearbySearch(search, callback);
}

function callback(results, status) {
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    document.getElementById("lat").value = results[0].geometry.location.lat();
    document.getElementById("lng").value = results[0].geometry.location.lng();
      // Create a marker for each restaurant found, and
      // assign a letter of the alphabetic to each marker icon.
      for (var i = 0; i < results.length; i++) {
        var markerLetter = String.fromCharCode("A".charCodeAt(0) + i % 26);
        var markerIcon = MARKER_PATH + markerLetter + ".png";
        // Use marker animation to drop the icons incrementally on the map.
        markers[i] = new google.maps.Marker({
          position: results[i].geometry.location,
          animation: google.maps.Animation.DROP,
          icon: markerIcon
        });
        // If the user clicks a restaurant marker, show the details of that restaurant
        // in an info window.
        markers[i].placeResult = results[i];
        google.maps.event.addListener(markers[i], "click", showInfoWindow);
        setTimeout(dropMarker(i), i * 100);
        addResult(results[i], i);
      }
    }
  }

我的想法是通过使用生成结果的关键字属性获取菜肴类型,例如这样(例如,只有两种美食类型):

if (results[i].keyword === "pizzaria") {
          markerIcon = "img/icons/pizzaria.png";
        } else if (results[i].keyword === "burger") {
          markerIcon = "img/icons/fastfood.png";
        } 

不幸的是,这不起作用,我想知道是否有办法解决它..

2 个答案:

答案 0 :(得分:0)

不,你不能试图找到一些&#34;比萨店&#34;由Google官方文档的this条款指定。

但是,您可以查看餐馆的types(如关键字)并尝试找到&#34; pizzeria&#34;在他们:

if (results[i].name.indexOf ("pizzeria") || results[i].name.indexOf ("pizza hut") /*...*/) {
          markerIcon = "img/icons/pizzaria.png";
        } else if (results[i].name.indexOf ("burger")) {
          markerIcon = "img/icons/fastfood.png";
        } 

如果您有疑问,请告诉我。

祝你好运。

斯芬克斯

答案 1 :(得分:0)

您需要有关每个地方的详细信息,而不是现有信息。

Places API会在其types字段中显示所有带有“restaurant”的餐馆,您需要更多更详细的类型,例如“hamburger_restaurant”或“italian_restaurant”,因为它们会显示在Google地图中({{ 3}})。这是您可以订阅的功能请求:

example:详细/主要地点类型(如Google地图所示)