我在使用 Google Places API 和自动完成端点时遇到伦敦地区问题。我们为什么要使用自动完成功能?因为我们的输入有时是含糊的。背景故事是我们向客户询问具体位置。
无论如何,想象一下使用 Google Places Autocomplete API 和以下代码片段搜索以下地址“13 Manor Close”。
import requests
import json
"""Autocomplete search parameters
"""
api = "XXXX"
address = "13 Manor Close"
lat = "51.5072"
long = "-0.1138486"
radius = 50000
language = "en"
"""Google Autocomplete payload
"""
payload = {
"input": address,
"locationRestriction": {
"circle": {
"center": {
"latitude": lat,
"longitude": long
},
"radius": radius
}
}
}
"""Get suggestions using autocomplete api
"""
response = requests.request(
"POST",
"https://places.googleapis.com/v1/places:autocomplete",
headers={"Content-Type": "application/json; charset=utf-8",
"X-Goog-Api-Key": api},
json=payload
)
response_dict = json.loads(response.text)
"""Iterate over returned suggestions
"""
for res in response_dict["suggestions"]:
place_id = res["placePrediction"]["placeId"]
"""Use Google Places Detail lookup for the suggested place id
"""
place = requests.request(
"GET",
f"https://places.googleapis.com/v1/places/{place_id}?key={api}",
headers={
"Content-Type": "application/json; charset=utf-8",
"X-Goog-Api-Key": api,
"X-Goog-FieldMask": "*"
}
)
place_dict = json.loads(place.text)
print(place_dict)
如果我们使用 locationRestriction 和半径 50,000m 查询自动完成功能,我们会得到 5 个结果。
{
"description":"13 Manor Close, Bengeo, Hertford"
},
{
"description":"13 Manor Close, Hatching Green, Harpenden"
},
{
"description":"13 Manor Close, London"
},
{
"description":"13 Manor Close, Aveley, South Ockendon"
},
{
"description":"13 Manor Close, Horley"
}
现在是这样的,上面的结果在邮政编码 NW9 中返回了“13 Manor Close, London”,但是“13 Manor Close, London”也存在于 SE28 和 E17 中。
不幸的是,Google 最多只返回 5 个自动完成结果。如果我们专门搜索“13 Manor Close, London”,则只会返回 NW9 和 E27,但不会返回 SE28。
返回它们的唯一方法似乎是在搜索查询中传递邮政编码,例如:13 Manor Close SE28,但这不是我们对客户的期望。
我是否设法找到了一个极端案例,或者伦敦地图已经损坏了?开放讨论、提问和建议如何处理这种情况。
这与 https://issuetracker.google.com/73730686 是同一问题,尽管解决方案不一定强制在未请求时显示邮政编码。无论如何,我建议订阅该问题报告并添加您的示例以供考虑。
为了扩展那里的内容,请考虑自动完成预测的目的是帮助用户找到他们心目中的一个地方,这样他们就会(或多或少)知道该地址并继续输入,直到找到可以识别的地方。这里的问题是一个复合问题:
"description"
中是一个大部分独立于哪些邮政编码出现在“前 5 位”的问题。