Google Place Search不返回结果

时间:2019-01-30 16:58:00

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

我需要根据给定的文本获取位置数据。 例如,如果我在Google地图中搜索Aldi,则会显示很多带有分页的数据。我需要使用Google Places API来获得该结果。

我尝试了两个API调用。但是它会按照结果返回我

  

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&key=MY_KEY

结果

{
   "html_attributions" : [],
   "results" : [],
   "status" : "ZERO_RESULTS"
}
  

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=ALDI&inputtype=textquery&fields=place_id,name,formatted_address,geometry&key=MY_KEY

结果

{
   "candidates" : [],
   "status" : "ZERO_RESULTS"
}

我需要根据给定名称获取数据。谁能找到原因。

3 个答案:

答案 0 :(得分:2)

Places API提供三种搜索类型:Find PlaceNearby SearchText Search。每一个都允许您指定一个半径范围作为开始搜索的位置。该位置被指定为纬度/经度对。您未为请求指定位置,因此收到ZERO_RESULTS。如果未指定location参数,则根据文档,“ API默认使用IP地址偏差”。因此,在您的IP地址位置范围内没有Aldi存储。

查找位置只会返回一个结果,但是根据我的经验,有时会返回两个结果。 附近搜索文本搜索将最多返回60个地方结果。这三个“地点”搜索请求均允许您指定您周围位置的半径,最长不超过50公里。如果您需要在全球范围内寻找Aldi的地方,则需要提出很多要求。

我在一个类似的项目中工作了数周,以查找美国连锁餐厅清单的所有位置。我发现,就我的用例而言,“附近搜​​索”是一个更好的选择,在为项目提交“文本搜索”之前,应始终考虑“附近搜索”。我已经通过“附近搜索”和“文字搜索”对Aldi搜索进行了测试,发现它们提供了相同的place_id结果。该“附近搜索”请求将找到距纽约市50公里以内的所有Aldi位置:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=40.785276%2C-73.9651827&name=Aldi&radius=50000&key=MY_API_KEY

这里与文本搜索相同:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&location=40.785276%2C-73.9651827&radius=50000&key=MY_API_KEY

那我们为什么要关心呢?根据API文档进行文本搜索“ ...将返回所选位置的所有可用数据字段,并会相应向您收费。”此外,“ ...文本搜索服务将乘以10倍。也就是说,您提出的每个文本搜索请求都将计为配额中的10个请求。”附近搜索请求的价格较低,并且不受10倍乘数的影响。它返回您可能会发现足够的可用数据字段的子集。如果您需要其他数据字段,则只能从“地点详细信息”请求中获取所需的内容。在选择“文本搜索”之前,请为您的应用程序进行数学计算。如果需要的话,使用“附近的搜索”和“地点详细信息”请求来实施可能会便宜得多。无论如何,当您意外地达到配额限制时,您不会因为10倍的乘数而感到震惊,或者计费的交易成本超出了您的预期!

我发现了其他障碍,这些障碍对于试图在大范围内寻找企业所有地点的项目应予以考虑:

  1. Places API会优先选择您半径范围内的位置,但如果它确定相关且在60个位置限制之内,则将包括半径范围之外的位置。我的地点距我要求的搜索位置超过450公里。
  2. 名称不是您要搜索的地方的结果将被返回。在我搜索西雅图的Benihana餐厅时,“附近搜​​索”请求仅返回名称为Hamansu的餐厅。经调查,这是因为西雅图没有Benihana,但是,Hamansu与Benihana相似,因为它可以将日本料理烤在桌上。 API文档指出,您的搜索字词将“与Google为此位置编入索引的所有内容匹配,包括但不限于名称,类型和地址,以及客户评论和其他第三方内容。”
  3. 结果一次返回20。如果有更多结果,则提供page_token来请求获取最多20个结果的下一页。每个请求都是收费的。您需要为获得60个结果所需的3个请求付费。我并不是说这很不好,只是要知道您使用此API会产生的费用和配额使用情况。
  4. 如果您的半径结果超过60个,则说明您在其中找不到所有可能的位置。而且,您无法确定60个结果覆盖的有效半径是多少。您需要以足够小的半径进行搜索,以针对每个请求返回<60个结果。进行全球搜索将需要大量配额和$预算。

答案 1 :(得分:1)

您应该注意,Places API搜索并非旨在提供全球范围内的结果。在示例中,您仅指定文本值“ Aldi”。但是,为了获得结果,您还应该指定要搜索的位置。

例如,如果我想将结果偏向西班牙的巴塞罗那地区,则必须在请求中添加位置和半径

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&location=41.3850639%2C2.1734035&radius=10000&key=MY_API_KEY

此请求将退还巴塞罗那地区的Aldi超市,如我的屏幕截图所示

enter image description here

与“查找地点”相同,您应指定位置偏向

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Aldi&inputtype=textquery&fields=formatted_address,geometry,name,place_id&locationbias=circle%3A1000%4041.3850639%2C2.1734035&key=MY_API_KEY

还请注意,“查找地点”仅返回一个结果。

我希望这能解决您的疑问。

答案 2 :(得分:0)

@艺术答案带有较高的赞誉,仅部分正确。答案表明,Find Place api(例如maps / api / place / findplacefromtext)通常会返回1个结果,最多返回2个。我倾向于同意他的观点。即使您的搜索命中了多个目标,Find Place api也只会返回一个目标。因此,他建议使用“附近搜索”或“文本搜索”,这两种方法最多可产生60个结果。

但是,这两次搜索都需要某种形式的位置参数,否则,它们很可能会返回0结果,默认情况下将使用您的IP地址,正如他指出的那样。但是他建议使用带有半径参数的位置。问题在于半径参数有一个最大限制。因此,如果您要在整个国家/地区(例如美国)进行搜索,它就不会定位您想要的所有类型的事物。

事实是您不需要使用位置和半径。还有另一个选项称为区域。而且,您可以使用地区搜索一个国家的整个距离。

@Art建议:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=25.7392%2C-80.3103&name=Law%Offices%of%Alex&radius=50000&key=KEY

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Law%Offices%of%Alex&location=25.7392%2C-80.3103&radius=50000&key=KEY

更全面的选择:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Law%Offices%of%Alex&region=us&key=KEY