提问者:小点点

Google Place搜索不返回结果


我需要根据给定的文本获取位置数据。例如,如果我在谷歌地图中搜索Aldi,它会显示给我很多带分页的数据。我需要得到的结果使用谷歌地方api。

我尝试了两次API调用。但它返回给我以下结果

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

后果

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

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=ALDI

后果

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

我需要根据给定的名称获取数据。有人能找出原因吗。


共3个答案

匿名用户

PlacesAPI提供了三种类型的搜索:查找地点、附近搜索和文本搜索。每个都允许您指定一个具有半径的位置以开始搜索。该位置指定为纬度/经度对。您收到的结果为零,因为您没有为请求指定位置。根据文档,如果未指定位置参数,“API默认使用IP地址偏置”。因此,在您的IP地址的位置范围内没有Aldi存储。

“查找位置”只返回一个结果,但根据我的经验,它有时返回两个结果。附近搜索和文本搜索都将返回多达60个位置的结果。所有三个地点搜索请求都允许在您的位置周围指定一个最大50公里的半径。如果你需要在全球范围内找到Aldi places,你需要提出很多请求。

我在一个类似的项目中工作了几周,目的是为美国的连锁餐厅列表找到所有的位置。我发现,对于我的用例来说,就近搜索是一个更好的选择,在提交项目的文本搜索之前,应该始终考虑它。我已经用邻近搜索和文本搜索测试了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倍乘数的限制。它返回您可能认为足够的可用数据字段的子集。如果需要其他数据字段,则只能从Places Detail请求中获得所需的内容。在选择文本搜索之前,先对应用程序进行计算。如果需要的话,使用邻近搜索和地点详细信息请求来实现可能会大大降低成本。在任何情况下,当您意外地达到配额限制时,您都不想感到震惊,因为10倍的乘数或账单交易成本超出您的预期!

我发现了一些额外的障碍,这些障碍应该是试图在大区域内找到所有业务地点的项目的考虑因素:

  1. 地点API将更喜欢您半径范围内的地点,但如果它确定这些地点相关且在60个地点限制内,则将包括半径范围以外的地点。我已经从我要求的搜索位置返回了450多公里的地方。
  2. 结果将返回与名称不是你搜索的地方。在我对西雅图Benihana餐厅的搜索中,附近搜索请求只返回一家名为哈姆苏的餐厅。经过调查,这是因为西雅图没有Benihana,然而,哈姆苏与Benihana相似,它提供日式菜肴烧烤桌边。API留档声明您的搜索词将“与谷歌为该地方索引的所有内容相匹配,包括但不限于名称、类型和地址,以及客户评论和其他第三方内容。”
  3. 每次返回20个结果。如果有更多的结果,则提供page_token来请求获取多达20个结果的下一页。每个请求都是收费的。您将为获得60个结果所需的3个请求付费。我并不是说这是不好的,只是要注意这个应用编程接口带来的费用和配额使用。
  4. 如果你的半径有超过60个结果,那么你还没有找到其中所有可能的位置。而且,你不能确定60个结果的有效半径是多少。你需要搜索一个足够小的半径来返回

匿名用户

您应该知道Place API搜索不是为提供全球范围的结果而设计的。在您的示例中,您只指定文本值Aldi。但是,为了获得结果,您还应该指定您正在搜索的位置。

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

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

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

对于“查找位置”也一样,应该指定位置偏差

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Aldi

还要注意,查找位置只返回一个结果。

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

匿名用户

@标有较高支持率的艺术答案只是部分正确。答案表明,查找位置api(例如map/api/place/findplace efromtext)通常会返回1个结果,最多返回2个。我倾向于同意他的观点。即使您的搜索命中多个目标,也只能返回一个带有查找位置api的目标。因此,他建议使用附近搜索或文本搜索,这两种搜索最多产生60个结果。

然而,这两个搜索需要某种形式的位置参数,否则它们可能会返回0个结果,默认使用您的IP地址,正如他所指出的。但他建议使用带有半径参数的位置。问题是半径参数有一个最大限制。因此,如果你要搜索整个国家,比如美国,它不会针对你想要的所有类型的东西。

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

@Art的建议:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=25.7392-80.3103

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Law%Offices%of%Alex

一个更全面的备选方案:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Law%Offices%of%Alex