【发布时间】:2019-09-30 17:10:57
【问题描述】:
我有一个命名位置列表和一组纬度/经度界限,我想将它们插入 Google Maps API 并让它为我找到位置。名字可能很模糊,就像简单的“寄宿学校”。使用 lat/lng 界限,有没有办法让 GMaps 在提供的坐标内找到这些名称模糊的位置?
我的应用程序是基于 Web 的,并由后端的 Python Flask 提供支持。我试过调查 Maps 的 Place Search,但它似乎只能“更喜欢”某个区域进行搜索,而且我的地名含糊不清:
此查询的偏差覆盖了安大略省伯灵顿的部分地区,但结果位于邻近的奥克维尔镇,明显超出范围。但是,如果您使用“伯灵顿海滩”一词进行搜索,则会找到范围内的海滩。
我需要查询来查找伯灵顿的海滩,只需给出术语“海滩”,以及所述海滩所在的范围。
编辑:这是我在测试原始查询和 Evan 的较小查询(cmets 中的 URL)时在 Chrome 和 Edge 中的 HTTP 请求+标头:
==== Google Chrome: Original Request ====
:authority: maps.googleapis.com
:method: GET
:path: /maps/api/place/findplacefromtext/json?input=beach&inputtype=textquery&fields=formatted_address,geometry&locationbias=rectangle:43.3145,-79.8236|43.3490,-79.7741&key=
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
accept-encoding: gzip, deflate, br
accept-language: en-CA,en;q=0.9,it;q=0.8,el-GR;q=0.7,el;q=0.6
cache-control: max-age=0
dnt: 1
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
x-client-data: CIi2yQEIprbJAQjBtskBCKmdygEIup/KAQioo8oBCOKoygEIl63KAQjNrcoBCMqvygEIh7TKARjwsMoB
==== Google Chrome: Evan's Request ====
:authority: maps.googleapis.com
:method: GET
:path: /maps/api/place/findplacefromtext/json?input=beach&inputtype=textquery&fields=formatted_address,geometry&locationbias=rectangle:43.3145,-79.8236|43.3490,-79.800879&key=
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
accept-encoding: gzip, deflate, br
accept-language: en-CA,en;q=0.9,it;q=0.8,el-GR;q=0.7,el;q=0.6
cache-control: max-age=0
dnt: 1
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
x-client-data: CIi2yQEIprbJAQjBtskBCKmdygEIup/KAQioo8oBCOKoygEIl63KAQjNrcoBCMqvygEIh7TKARjwsMoB
==== Edge: Original Request ====
Request URL: https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=beach&inputtype=textquery&fields=formatted_address,geometry&locationbias=rectangle:43.3145,-79.8236|43.3490,-79.7741&key=
Request Method: GET
Status Code: 200 /
Accept: text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-CA
Cache-Control: max-age=0
Host: maps.googleapis.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362
==== Edge: Evan's Request ====
Request URL: https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=beach&inputtype=textquery&fields=formatted_address,geometry&locationbias=rectangle:43.3145,-79.8236|43.3490,-79.800879&key=
Request Method: GET
Status Code: 200 /
Accept: text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-CA
Host: maps.googleapis.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362
【问题讨论】:
-
嗯,你可以“手动”过滤掉超出范围的结果吗?
-
@SuperStew 问题不是我得到了相关和不相关的结果,而是如果搜索词不够具体,我只会得到不相关的结果。 API 更侧重于返回它认为更接近搜索词的结果,而不是获取范围内的结果。
-
我收到
Burlington Beach, Burlington, Ontario, Canadá上面的请求,这不是您要寻找的伯灵顿海滩吗?它在您的矩形范围内。 -
在任何情况下,对于广泛的输入,我建议您使用较小的范围,这样您就可以确保找到您正在寻找的正确位置。即便如此,请注意,非常广泛的输入只能走这么远。
-
@evan,您是否更改了查询?您只是在浏览器中运行它还是以其他方式运行它?我得到
45 West River Street Bronte, Oakville, ON超出范围。边界大约是 4 公里 x 4 公里,我认为这不应该太宽以至于无法工作。至于海滩的例子,在这些范围内只有一条海岸线,所以结果应该总是非常接近。
标签: python python-3.x google-maps flask