【问题标题】:Find locations by name in Google Maps API within lat/lng bounds在 lat/lng 范围内按名称在 Google Maps API 中查找位置
【发布时间】:2019-09-30 17:10:57
【问题描述】:

我有一个命名位置列表和一组纬度/经度界限,我想将它们插入 Google Maps API 并让它为我找到位置。名字可能很模糊,就像简单的“寄宿学校”。使用 lat/lng 界限,有没有办法让 GMaps 在提供的坐标内找到这些名称模糊的位置?

我的应用程序是基于 Web 的,并由后端的 Python Flask 提供支持。我试过调查 Maps 的 Place Search,但它似乎只能“更喜欢”某个区域进行搜索,而且我的地名含糊不清:

https://maps.googleapis.com/maps/api/place/findplacefromtext/xml?input=beach&inputtype=textquery&fields=formatted_address,geometry&locationbias=rectangle:43.3145,-79.8236|43.3490,-79.7741&key=XXXXXXX

此查询的偏差覆盖了安大略省伯灵顿的部分地区,但结果位于邻近的奥克维尔镇,明显超出范围。但是,如果您使用“伯灵顿海滩”一词进行搜索,则会找到范围内的海滩。

我需要查询来查找伯灵顿的海滩,只需给出术语“海滩”,以及所述海滩所在的范围。

编辑:这是我在测试原始查询和 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


【解决方案1】:

这种不一致似乎与 Google 的问题跟踪器中报告的以下问题有关:

https://issuetracker.google.com/issues/35822155

语言参数会影响您从地方搜索请求中获得的结果,对于此类通用/广泛查询更是如此。所以这是 API 的预期行为。

Find Place 的潜在替代方案包括使用Nearby SearchText Search 服务。这些更适合不明确的查询,您可以过滤掉给定半径+位置之外的结果。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多