如何限制新版Google Maps Autocomplete仅返回街道地址
如何限制新版Google Maps Autocomplete仅返回街道地址
嘿,我之前也碰到过新版Google Places Autocomplete的这个坑,旧的type: ["address"]参数确实被替换了,刚开始用includedPrimaryTypes的时候也没得到预期结果,后来摸索出了几个关键点,给你分享下:
1. 怎么过滤出仅街道地址?
核心是类型过滤+地理范围限制双管齐下:
- 只靠类型参数的话,API不知道你要哪个区域的地址,输入宽泛的关键词(比如"V")自然会优先返回国家、城市这类大区域结果;
- 加上地理范围限制(比如用户当前位置附近,或者你业务覆盖的区域),再配合精准的类型列表,就能过滤出目标街道地址了。
2. 旧type: ["address"]参数的替代方案
新版API里,旧的type参数被拆分成了更细粒度的includedPrimaryTypes和includedSecondaryTypes,其中includedPrimaryTypes就是用来替代旧type: ["address"]的核心参数,但你需要指定更具体的类型值,而不是笼统的"address"。
3. includedPrimaryTypes的正确用法
你之前的类型列表少了几个关键值,而且没加地理范围限制,所以效果不好。试试下面的配置:
- 类型列表建议包含:
"street_address"(完整街道地址,带门牌号)、"premise"(独立楼宇/建筑)、"route"(街道本身,不带门牌号),这三个基本能覆盖所有用户需要的街道级地址; - 加上
locationBias或者locationRestriction来缩小地理范围,比如用用户的当前坐标+半径,或者指定一个城市的边界。
给你修改后的代码示例:
const { AutocompleteSuggestion } = await google.maps.importLibrary("places"); // 假设你能获取到用户的当前位置坐标 const userLocation = new google.maps.LatLng(37.7749, -122.4194); // 示例:旧金山坐标 const { suggestions: fetchedSuggestions } = await AutocompleteSuggestion.fetchAutocompleteSuggestions({ input, sessionToken: token.value, // 正确的类型列表 includedPrimaryTypes: ["street_address", "premise", "route"], // 限制结果在用户位置50公里范围内,按需调整半径 locationBias: { center: userLocation, radius: 50000, // 单位:米 }, }); suggestions.value = await Promise.all( fetchedSuggestions.map( async (suggestion: google.maps.places.AutocompleteSuggestion) => { const place = suggestion.placePrediction.toPlace(); await place.fetchFields({ fields: ["formattedAddress"], }); return { placePrediction: suggestion.placePrediction, formattedAddress: place.formattedAddress, }; }, ), );
另外补充个小细节:如果你的业务只针对特定国家,还可以加上region参数(比如region: "us"),进一步过滤掉其他国家的结果,这样输入关键词时就不会出现越南这种跨区域的结果了。
备注:内容来源于stack exchange,提问作者Floky99
相关产品推荐
相关产品推荐

