需要帮助处理大城市和 Google Places API 中的某些地址场景

问题描述 投票:0回答:1

我在使用 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 中。

13 庄园街,伦敦 SE28 https://www.google.com/maps/place/13+Manor+Cl,+伦敦+SE28+8EY,+UK/@51.5088256,0.1190967,17z/data=!4m6!3m5!1s0x47d8af66c71b3 579: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+Manor+Cl,+伦敦+NW9+9HD,+UK/@51.58704,-0.2789375,16z/data=!3m1!4b1!4m6!3m5! 1s0x4876115a17 f0204f:0xf13ec4987368f8dd!8m2!3d51.58704!4d-0.2763626!16s%2Fg%2F11c23r9v_f?entry=ttu&g_ep=EgoyMDI0MTEyNC4xIKXMDSoASAFQAw%3D%3D

13 庄园街,伦敦 E17 https://www.google.com/maps/place/13+Manor+Cl,+伦敦+E17+5RT,+UK/@51.5964954,-0.0341318,17z/data=!3m1!4b1!4m6!3m5! 1s0x48761dd91d 4501ad:0x163048f90f55c230!8m2!3d51.5964954!4d-0.0315569!16s%2Fg%2 F11c22cjwml?entry=ttu&g_ep=EgoyMDI0MTEyNC4xIKXMDSoASAFQAw%3D%3D

不幸的是,Google 最多只返回 5 个自动完成结果。如果我们专门搜索“13 Manor Close, London”,则只会返回 NW9 和 E27,但不会返回 SE28。

返回它们的唯一方法似乎是在搜索查询中传递邮政编码,例如:13 Manor Close SE28,但这不是我们对客户的期望。

我是否设法找到了一个极端案例,或者伦敦地图已经损坏了?开放讨论、提问和建议如何处理这种情况。

python google-maps google-places-api
1个回答
0
投票

这与 https://issuetracker.google.com/73730686 是同一问题,尽管解决方案不一定强制在未请求时显示邮政编码。无论如何,我建议订阅该问题报告并添加您的示例以供考虑。

为了扩展那里的内容,请考虑自动完成预测的目的是帮助用户找到他们心目中的一个地方,这样他们就会(或多或少)知道该地址并继续输入,直到找到可以识别的地方。这里的问题是一个复合问题:

  1. 只能提供一个“13 Manor Close, London”预测(因为如果您显示其中 2 个或更多,那么人们怎么知道该选择哪一个?)
  2. 在没有用户额外输入的情况下,伦敦这些地方正在与该国所有其他“13 Manor Close”“竞争”这 5 个“顶级”位置
  3. 在输入中添加“伦敦”会产生更多关于伦敦的预测,但同时也可能出现“足够接近”的预测,例如“伦敦庄园广场 13 号”
  4. 将邮政编码添加到预测的
    "description"
    中是一个大部分独立于哪些邮政编码出现在“前 5 位”的问题。
© www.soinside.com 2019 - 2024. All rights reserved.