我需要根据给定的文本获取位置数据。例如,如果我在谷歌地图中搜索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"
}
结果
{
"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
此请求将返回巴塞罗那地区的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
另请注意,“查找位置”仅返回一个结果。
我希望这能解决你的疑问。
Places API提供了三种类型的搜索:Find Place,Nearby Search和Text 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倍乘数或者计费交易成本超出预期而意外达到配额限制时,您不会感到震惊!
我发现了额外的障碍,应该考虑试图在大范围内找到业务的所有位置的项目:
@Art回答,标有更高的upvotes,只是部分正确。答案表明Find Place api(例如maps / api / place / findplacefromtext)通常会返回1个结果,最多2个。我倾向于同意他的看法。即使您的搜索达到多个目标,只有一个将与Find Place api一起返回。因此,他建议使用“附近搜索”或“文字搜索”,这两种搜索都会产生最多60个结果。
但是,这两个搜索需要某种形式的位置参数,否则它们可能会返回0结果,默认使用您的IP地址,如他所指出的那样。但他建议使用附有半径参数的位置。这个问题是radius参数有一个最大限制。因此,如果您在整个国家(如美国)进行搜索,它不会针对您想要的所有类型的事物。
事实是你不需要使用位置和半径。还有另一种叫做区域的选择。您可以使用区域搜索一个国家的整个距离。
@Art建议:
更具包容性的替代方案: