You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Google Places API rankby=distance参数异常:结果缺失且排序错误

Hey,我来帮你拆解下遇到的这两个问题,刚好对Google Places API的nearbySearch逻辑比较熟~

问题1:部分目标酒店没出现在结果里

首先得说你的keyword参数写法有问题!Google Places API的nearbySearch不支持你写的(xxx)OR(xxx)这种布尔逻辑格式,这种写法会被当成一整个完整的关键词去匹配,自然找不到对应的酒店。另外,你把酒店名称连写了(比如courtyardbymarriot),但官方名称是带空格的Courtyard by Marriott,这种连写的匹配度会很低,也是搜不到的原因之一。

给你两个解决思路:

  • 思路一:用Text Search替代nearbySearch
    Text Search的query参数支持更灵活的多关键词匹配,你可以直接用OR(注意前后加空格)分隔所有酒店名称,再结合type=lodging缩小范围,同时指定radius来限定搜索区域。比如修正后的请求大概是这样:

    https://maps.googleapis.com/maps/api/place/textsearch/json?location=41.711586,44.748187&radius=5000&type=lodging&query=tbilisimarriot OR courtyard by marriott OR ambassadori OR mercure OR ibis hotel OR holiday inn OR city avenue OR hotel city
    

    这里把连写的名称改成了更贴近官方的写法,匹配成功率会高很多。

  • 思路二:调整nearbySearch的keyword参数
    如果坚持用nearbySearch,就把所有关键词用空格分隔(API会匹配包含任意一个关键词的场所),同时加上type=lodging过滤无关结果。比如:

    https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=41.711586,44.748187&rankby=distance&type=lodging&keyword=tbilisimarriot "courtyard by marriott" ambassadori mercure "ibis hotel" "holiday inn" "city avenue" "hotel city"
    

    这里用双引号把带空格的名称括起来,能实现精准匹配。

问题2:结果没按由近及远排序

你用了rankby=distance但排序失效,大概率是踩了API的参数互斥坑:当使用rankby=distance时,绝对不能加radius参数!这两个参数是互斥的,如果同时存在,API会忽略rankby=distance,默认用「知名度」排序,自然就不是按距离来了。

解决方法很简单:

  • 检查你的请求URL,删掉radius参数;
  • 确认rankby=distance拼写正确(别写成rank_by或者其他错误格式);
  • 另外,rankby=distance要求必须指定keywordnametype中的至少一个,你已经加了keyword,这部分没问题。

最后再提两个小细节:

  1. 确保你的API密钥已经启用了Places API,并且设置了正确的 billing(免费额度用完或者没开billing的话,结果会被限制);
  2. 如果某家酒店在Google Maps上都搜不到,那API肯定也返回不了,先去地图上确认下该酒店是否被收录。

内容的提问来源于stack exchange,提问作者Shako Tskhadadze

火山引擎 最新活动