Google 地点搜索没有 return 结果

Google Place Search does not return result

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

来获得该结果

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

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"
}

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

您应该知道,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

此请求将return巴塞罗那地区的Aldi超市如我截图所示

查找地点也是如此,您应该指定位置偏差

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

另请注意,查找地点 return 只有一个结果。

希望这能解决您的疑问。

Places API 提供三种类型的搜索:Find Place, Nearby Search and Text Search。每个都允许您指定一个具有半径的位置以开始搜索。该位置指定为 latitude/longitude 对。您收到了 ZERO_RESULTS,因为您没有为您的请求指定位置。如果根据文档未指定位置参数 "the API uses IP address biasing by default"。因此,在您的 IP 地址位置范围内没有 Aldi 商店。

Find Place 只会 return 一个结果,但根据我的经验,它有时会 return 两个。 附近搜索文本搜索 都会return 最多 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 文档进行文本搜索“... returns selected 地点的所有可用数据字段,您将被相应地收费。”此外,“......文本搜索服务受 10 倍乘数约束。也就是说,您发出的每个文本搜索请求都将计为 10 个请求,超出您的配额。” Nearby Search 请求的成本较低,并且不受 10 倍乘数的限制。它 return 是您可能觉得足够的可用数据字段的子集。如果您需要额外的数据字段,您可以从地点详细信息请求中只获得您需要的内容。在 select 文本搜索之前为您的应用程序计算一下。如果有必要,使用附近搜索然后使用地点详细信息请求来实施可能会大大降低成本。在任何情况下,当您因为 10 倍乘数或计费交易成本超出您的预期而意外达到配额限制时,您都不希望感到震惊!

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

  1. The Places API 会优先考虑您半径范围内的地点,但如果它确定这些地点相关且在 60 个地点限制内,则会包括您半径以外的地点。我有一些地方 return 距离我请求的搜索位置超过 450 公里。
  2. 结果将被 return 编辑为名称不是您搜索的地方。在我搜索西雅图的 Benihana 餐厅时,附近的搜索请求仅 return 是一家名为 Hamansu 的餐厅。经查,这是因为西雅图没有红花店,不过Hamansu和红花店类似,都是在桌边烤日式料理。 API 文档指出您的搜索词将是 "matched against all content that Google has indexed for this place, including but not limited to name, type, and address, as well as customer reviews and other third-party content."
  3. 结果一次 returned 20。如果有更多结果,将提供 page_token 以请求获取最多 20 个结果的下一页。每个请求都是收费的。您需要为获得 60 个结果所需的 3 个请求付费。我并不是说这很糟糕,只是要注意您为此 API.
  4. 产生的费用和配额使用情况
  5. 如果您的半径有超过 60 个结果,那么您还没有找到其中所有可能的位置。而且,您无法确定 60 个结果覆盖的有效半径是多少。您需要使用足够小的半径搜索每个请求 return < 60 个结果。全球搜索将需要大量配额和美元预算来进行。

@Art 的回答,标有较高的赞成票,但仅部分正确。答案表明查找地点api(例如maps/api/place/findplacefromtext)通常会return 1个结果,最多2个。我倾向于同意他的看法。即使您的搜索命中了多个目标,也只有一个目标会被 return 使用查找地点 api 编辑。因此,他建议使用 Nearby Search 或 Text Search,这两种方法最多都会产生 60 个结果。

然而,这两个搜索需要某种形式的位置参数,否则它们可能会 return 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