Google Places API:Autocomplete函数多类型参数传递问题
Google Places Autocomplete 多类型筛选问题解决
核心问题
你使用的是Google Maps JavaScript API的Autocomplete组件,它的types参数不支持同时传入多个类型值(这和你参考的Web Service文档规则不同),所以你尝试的["address", "establishment"]或["address, establishment"]写法都无法生效。
直接解决方案
如果你需要同时显示家庭地址(地理编码类结果)和商务地址(商家/机构类结果),移除types参数即可——Autocomplete默认会返回这两类结果,刚好满足你的需求。修改后的初始化代码如下:
var ac = new google.maps.places.Autocomplete( document.getElementById('address_line_1'), { componentRestrictions: { country: ["uk"] }, fields: ["address_components", "geometry"] // 移除types参数,默认返回地址和商家结果 });
地址解析代码优化
你的原代码通过固定索引获取address_components的方式容易出错(不同地址的组件顺序、数量可能不一致),建议通过组件的types属性精准匹配字段,示例如下:
ac.addListener('place_changed', function() { var place = ac.getPlace(); var address_line_1 = ''; var address_town = ''; var address_county = ''; var address_postcode = ''; // 遍历地址组件,根据类型匹配对应字段 place.address_components.forEach(function(component) { if (component.types.includes('street_number')) { address_line_1 += component.long_name + ' '; } if (component.types.includes('route')) { address_line_1 += component.long_name; } if (component.types.includes('locality')) { address_town = component.long_name; } if (component.types.includes('administrative_area_level_2')) { address_county = component.long_name; } if (component.types.includes('postal_code')) { address_postcode = component.long_name; } }); $('input#address_line_1').val(address_line_1.trim()); $('input#address_town').val(address_town); $('input#address_county').val(address_county); $('input#address_postcode').val(address_postcode); });
特殊场景替代方案
如果必须显式控制结果范围,可根据需求选择单个类型:
types: ['geocode']:仅返回家庭地址类的地理编码结果types: ['establishment']:仅返回商务地址类的商家/机构结果
内容的提问来源于stack exchange,提问作者Lewis Hardisty
相关产品推荐
相关产品推荐

