【问题标题】:Google Maps API places.url returns "undefined"?Google Maps API places.url 返回“未定义”?
【发布时间】:2018-04-11 12:32:19
【问题描述】:

我无法将一些Google Places API data types 添加到信息窗口中,当用户点击地图上的标记时,该信息窗口将显示数据。我已经包含了以下数据类型place.name、place.rating、place.vacinity,这些数据类型将成功地在信息窗口中显示企业的名称、评级和地址。但是,当我尝试添加 place.url 以返回“此地点的官方 Google 页面的 URL”时,它会返回 undefined。如果我通过 Google 搜索这些机构,它们就有 URL,所以我知道有 URL,但是由于某种原因它无法访问它们?

这是创建标记并将信息窗口添加到单击时将调用的侦听器的 Javascript 代码 sn-p。

    function createMarker(place) {

   infowindow = new google.maps.InfoWindow();
  var placeLoc = place.geometry.location;

  var reportmarker = new google.maps.Marker({
    map: map,
    position: place.geometry.location
  });

  markers.push(reportmarker);
  google.maps.event.addListener(reportmarker, 'click', function() {
    infowindow.setContent("<p>" + place.name + "<br />" + place.rating + "<br />" + place.vicinity + "<br />" + place.url+ "<br />" +"</p>");
    infowindow.open(map, this);
  });
}

【问题讨论】:

  • 对我来说很好用。
  • 正如您使用上面的代码,place.url 返回一个工作 URL?
  • 是的,效果很好。
  • place 来自哪里?你怎么称呼createMarker?请提供一个 minimal reproducible example 来证明您的问题。
  • @Hikarunomemory 你知道为什么你的有效而我的无效吗?

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


【解决方案1】:

在您的 Jsfiddle 中,您使用的是 nearbySearch(),它响应没有 url 信息的数据。您必须使用getDetails() 来获取网址。

从文档中不是很清楚,但只有PlaceDetails result 包含网址。

var map;
var infowindow;

function initMap() {
  var pyrmont = {
    lat: -33.867,
    lng: 151.195
  };

  map = new google.maps.Map(document.getElementById('map'), {
    center: pyrmont,
    zoom: 15
  });

  infowindow = new google.maps.InfoWindow();
  var service = new google.maps.places.PlacesService(map);
  service.nearbySearch({
    location: pyrmont,
    radius: 500,
    type: ['store']
  }, callback);
}

function callback(results, status) {
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    var service = new google.maps.places.PlacesService(map);
    for (var i = 0; i < results.length; i++) {
      var request = {
        placeId: results[i].place_id
      }
      service.getDetails(request, createMarker)
    }
  } else console.log("nearbySearch:"+status);
}

function createMarker(place, status) {
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    var placeLoc = place.geometry.location;
    var marker = new google.maps.Marker({
      map: map,
      position: place.geometry.location
    });

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.setContent(place.name + ": " + place.rating + ": " + place.url);
      infowindow.open(map, this);
    });
  } else console.log("placeDetails:"+status);
}

$(function() {
  initMap()
})
#map {
  height: 100vh;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
<div id="map"></div>

【讨论】:

  • 发布的代码正在从 PlaceDetails 请求返回 ~11 OVER_QUERY_LIMIT 状态响应(添加代码以记录错误)
  • Geocoding API 请求似乎返回了 OVER_QUERY_LIMIT 状态。 read more
猜你喜欢
  • 2020-05-06
  • 2013-11-12
  • 2014-03-05
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 2013-12-27
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多