Google 地方搜索不返回结果

Jan*_*ana 1 google-maps google-places-api google-places

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

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

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

结果

{
   "html_attributions" : [],
   "results" : [],
   "status" : "ZERO_RESULTS"
}
Run Code Online (Sandbox Code Playgroud)

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

结果

{
   "candidates" : [],
   "status" : "ZERO_RESULTS"
}
Run Code Online (Sandbox Code Playgroud)

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

小智 5

Places API 提供三种类型的搜索:查找地点附近搜索文本搜索。每个都允许您指定一个半径位置来开始搜索。该位置被指定为纬度/经度对。由于您没有为请求指定位置,因此您收到了 ZERO_RESULTS。如果未指定位置参数,则根据文档,“API 默认使用 IP 地址偏置”。因此,您的 IP 地址所在位置范围内没有 Aldi 商店。

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

我花了几周的时间进行一个类似的项目,以查找美国连锁餐厅列表的所有地点。我发现附近搜索对于我的用例来说是更好的选择,并且在提交项目的文本搜索之前应该始终考虑。我用附近搜索和文本搜索测试了阿尔迪搜索,发现它们提供了相同的 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
Run Code Online (Sandbox Code Playgroud)

这与文本搜索相同:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&location=40.785276%2C-73.9651827&radius=50000&key=MY_API_KEY
Run Code Online (Sandbox Code Playgroud)

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

我发现了一些额外的障碍,对于试图在大范围内找到企业的所有位置的项目来说,应该考虑这些障碍:

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