我需要根据给定的文本获取位置数据。
例如,如果我在Google地图中搜索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"
}
我需要根据给定名称获取数据。谁能找到原因。
答案 0 :(得分:2)
Places API提供三种搜索类型:Find Place,Nearby Search和Text Search。每一个都允许您指定一个半径范围作为开始搜索的位置。该位置被指定为纬度/经度对。您未为请求指定位置,因此收到ZERO_RESULTS。如果未指定location参数,则根据文档,“ API默认使用IP地址偏差”。因此,在您的IP地址位置范围内没有Aldi存储。
查找位置只会返回一个结果,但是根据我的经验,有时会返回两个结果。 附近搜索和文本搜索将最多返回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 :(得分: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超市,如我的屏幕截图所示
与“查找地点”相同,您应指定位置偏向
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
还请注意,“查找地点”仅返回一个结果。
我希望这能解决您的疑问。
答案 2 :(得分:0)
@艺术答案带有较高的赞誉,仅部分正确。答案表明,Find Place api(例如maps / api / place / findplacefromtext)通常会返回1个结果,最多返回2个。我倾向于同意他的观点。即使您的搜索命中了多个目标,Find Place api也只会返回一个目标。因此,他建议使用“附近搜索”或“文本搜索”,这两种方法最多可产生60个结果。
但是,这两次搜索都需要某种形式的位置参数,否则,它们很可能会返回0结果,默认情况下将使用您的IP地址,正如他指出的那样。但是他建议使用带有半径参数的位置。问题在于半径参数有一个最大限制。因此,如果您要在整个国家/地区(例如美国)进行搜索,它就不会定位您想要的所有类型的事物。
事实是您不需要使用位置和半径。还有另一个选项称为区域。而且,您可以使用地区搜索一个国家的整个距离。
@Art建议:
更全面的选择: