You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Places API getDetails()未返回地点评分字段问题排查

Google Places API 无评分字段返回问题排查

你遇到的问题由3个核心原因导致,对应修复方案如下:

  • 匹配到的place实体类型错误
    从你贴的接口返回结果可以看到,当前拿到的place_id对应实体的types值为["route"],属于道路类地理要素,并非时代广场景点/商圈这类POI实体。道路、行政区划、社区这类纯地理属性的实体,本身就不存在用户评分、商户联系电话这类经营类字段,自然不会返回相关内容。
  • 评分字段名书写错误
    Google Places API返回的平均评分字段为单数形式rating,你代码中写的place.ratings是不存在的复数字段名,即使接口正常返回评分,该写法也只能取到undefined。另外用户评论列表对应的字段是reviews,注意不要混淆命名。
  • getDetails请求未指定返回字段列表
    新版Places API的getDetails方法如果不在请求参数中显式声明fields字段列表,默认仅返回地址、坐标、place_id这类基础地理信息,不会主动返回评分、联系电话、评论这类扩展字段,必须明确声明需要的字段才会返回对应内容。

修复方案

  1. 源头过滤无效实体类型
    在初始化Google Places Autocomplete控件时,添加types: ['establishment']配置,限制用户仅可选择商户、景点、公共服务类带经营属性的POI,避免选中道路、行政区这类无评分无电话的地理实体。如果是用Text Search接口搜索,也可以在请求参数中添加types=establishment做结果过滤。
  2. 修正getDetails请求配置,补全fields声明,修正字段名
    参考如下修改你的请求代码:
var deetsreq = {
  placeId: res[0].place_id,
  // 按需填写你需要拉取的字段即可
  fields: ["name", "address_components", "formatted_phone_number", "rating"]
};

var service = new google.maps.places.PlacesService(map);
service.getDetails(deetsreq, callback);

function callback(place, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    console.log(place);
    document.getElementById("table-title").innerHTML = res[0].name
    var table = document.getElementById("deets-entries");
    var r = table.insertRow();
    r.insertCell().innerHTML =  place.address_components[1].short_name + ' ' + place.address_components[2].short_name;
    // 修正字段名为rating,做空值兜底
    r.insertCell().innerHTML= place.rating ?? "暂无评分";
    if(place.formatted_phone_number==null){
        r.insertCell().innerHTML= "NA";
    }
    else{
        r.insertCell().innerHTML= place.formatted_phone_number;
    }
  }
}

注意:如果某POI确实没有足够的用户评分,接口也不会返回rating字段,代码里一定要做空值兜底,避免页面显示异常。

内容的提问来源于stack exchange,提问作者R S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:15:43