В любом случае, представьте, что следующий адрес «13 Manor Close» ищется с помощью API автозаполнения Google Адресов со следующим фрагментом кода.
Код: Выделить всё
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)
Код: Выделить всё
{
"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"
}
13 Manor Close, Лондон SE28
https://www.google.com/maps/place/13+Ma ... f66c71b357 9:0x9a72e5f3c90e4276!8m2!3d51.5088256!4d0.1216716!16s%2Fg%2F11cs94cnzx?entry=ttu&g_ep=EgoyMDI0MTEyNC4xIKXMDSoASAFQAw%3D%3D
13 Manor Close, Лондон NW9
https://www.google.com/maps/place/13+Ma ... b1!4m6!3m5 !1s0x4876115a17f0 204f:0xf13ec4987368f8dd!8m2!3d51.58704!4d-0.2763626!16s%2Fg%2F11c23r9v_f?entry=ttu&g_ep=EgoyMDI0MTEyNC4xIKXMDSoASAFQAw%3D%3D
13 Manor Close, Лондон E17
https://www.google.com/maps/place/13+Ma ... b1!4m6!3m5 !1s0x48761dd91d45 01ad:0x163048f90f55c230!8m2!3d51.5964954!4d-0.0315569!16s%2Fg%2F11c22cjwml?entry=ttu&g_ep=EgoyMDI0MTEyNC4xIKXMDSoASAFQAw%3D%3D
И, к сожалению, Google возвращает не более 5 результатов автозаполнения. Если мы ищем конкретно «13 Manor Close, London», возвращаются только NW9 и E27, а SE28 — нет.
Похоже, что единственный способ вернуть их — это передать почтовый индекс. в поисковом запросе для примера: 13 Manor Close SE28, но это не то, чего мы можем ожидать от клиента.
Удалось ли мне найти угловой случай, или это карта Лондона это сломано? Открыт для обсуждения, вопросов и предложений, как действовать в этом случае.
Подробнее здесь: https://stackoverflow.com/questions/792 ... oogle-plac