Google地方搜索无法返回结果

问题描述 投票:-1回答:2

我需要根据给定的文本获取位置数据。例如,如果我在谷歌地图中搜索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"
}

我需要根据给定的名称获取数据。任何人都可以找出原因。

google-maps google-places-api google-places
2个回答
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

另请注意,“查找位置”仅返回一个结果。

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


3
投票

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

Find Place只会返回一个结果,但根据我的经验,它有时会返回两个结果。 “附近搜索”和“文字搜索”最多可返回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个结果。全球搜索需要大量配额和预算。

0
投票

@Art回答,标有更高的upvotes,只是部分正确。答案表明Find Place api(例如maps / api / place / findplacefromtext)通常会返回1个结果,最多2个。我倾向于同意他的看法。即使您的搜索达到多个目标,只有一个将与Find Place api一起返回。因此,他建议使用“附近搜索”或“文字搜索”,这两种搜索都会产生最多60个结果。

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

事实是你不需要使用位置和半径。还有另一种叫做区域的选择。您可以使用区域搜索一个国家的整个距离。

@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

© www.soinside.com 2019 - 2024. All rights reserved.