限制谷歌地点自动完成只返回地址

33
autocomplete = new google.maps.places.Autocomplete(input, { types: ['geocode'] });

返回街道和城市以及其他较大的区域。是否可以仅限于街道?


嗯,你能解释一下吗?Google Places会根据定义的半径和类别给出地点列表。请举个例子,你已经尝试过什么了? - Maxim Shoustin
3个回答

9

这个问题比较老,但我想补充一下,以防其他人也遇到了这个问题。仅仅限制类型为'address'并不能达到预期的结果,因为路线仍然会被包含在内。因此,我决定遍历结果并实现以下检查:

result.predictions[i].types.includes('street_address')

不幸的是,我惊奇地发现我的地址没有被包括进来,因为它返回了以下类型:{ types: ['geocode', 'premise'] }

因此,我决定从中开始计数,并且任何包含'geocode'或'route'类型的结果必须包含至少一个其他术语才能被包括进来(无论是'street_address'还是'premise'或其他)。因此,路线被排除,在具有完整地址的任何内容都将被包括。它不是万无一失的,但它工作得相当好。

循环遍历结果预测,并实现以下内容:

if (result.predictions[i].types.includes('street_address')) {
    // Results that include 'street_address' should be included
    suggestions.push(result.predictions[i])
} else {
    // Results that don't include 'street_address' will go through the check
    var typeCounter = 0;
    if (result.predictions[i].types.includes('geocode')) {
        typeCounter++;
    }
    if (result.predictions[i].types.includes('route')) {
        typeCounter++;
    }
    if (result.predictions[i].types.length > typeCounter) {
        suggestions.push(result.predictions[i])
    }
}

有没有钩子可以放置这些条件? - Ricky Boyce
是的,这也是我处理它的唯一方法,毫无意义,特别是当你明确告诉谷歌“地址”时。 - sMyles
这个逻辑是否过滤掉了地址、号码和邮政编码都不存在的 西班牙维拉诺瓦卡特鲁 - Roni Castro

1
看起来我们可以相当好地解决这个问题(至少对于美国地址),方法是限制类型为'street_address'和'premise',并且只有在输入的第一个字符是数字(0-9)时才执行操作。

0

41
使用 { types: ['address'] } 并不能仅限于返回 street_address 类型的结果,它还会包括类型为 route 的结果,即没有编号的道路。 - MaryKN
9
有没有一种方法可以从结果中排除“route”? - mosses
@MaryKN 这种行为不太直觉。这是有意为之吗?我也遇到了同样的问题,但最奇怪的是当服务器主机位于欧洲时api可以正常工作,而当相同的代码放置在位于美国的机器上时它就不能正常工作 Google自动完成问题 - krypru
Google自动完成功能不能保证始终提供包含街道号码和邮政编码的有效地址。在这些情况下,他们建议要求用户手动输入。https://issuetracker.google.com/issues/225210134 - Roni Castro
即使是地理编码API也不能过滤完整地址,可能只有当用户通过邮政编码或使用纬度/经度搜索时才能过滤。以下链接返回了一个意外的西班牙地址:https://maps.googleapis.com/maps/api/geocode/json?address=spain&result_type=street_address&location_type=ROOFTOP&key=YOUR_API_KEY - Roni Castro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接