是否有正确的方法来解析google自动完成响应,以便我们始终获得邮局期望的地址?

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

是否有解析Google自动完成响应的正确方法,以便我们总能获得一个地址部分,该地址部分具有邮局期望的地址的不同部分?

例如,当您使用Google自动完成输入482 East 9th St Brooklyn NY时,会得到以下内容。

         "address_components" : [
            {
               "long_name" : "482",
               "short_name" : "482",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "East 9th Street",
               "short_name" : "E 9th St",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Kensington",
               "short_name" : "Kensington",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Brooklyn",
               "short_name" : "Brooklyn",
               "types" : [ "political", "sublocality", "sublocality_level_1" ]
            },
            {
               "long_name" : "Kings County",
               "short_name" : "Kings County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "New York",
               "short_name" : "NY",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "11218",
               "short_name" : "11218",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "482 E 9th St, Brooklyn, NY 11218, USA",

格式化的地址正确显示。但是,当您尝试使用诸如以下脚本之类的脚本进行解析时,您会把肯辛顿称为“城市”]

function parseAddressConponents(addressComponents, address, slot) {
  addressComponents.forEach(function (c) {
    switch (c.types[slot]) {
      case 'street_number':
        address.streetNumber = c.short_name;
        break;
      case 'route':
        address.streetName = c.short_name;
        break;
      case 'neighborhood':
        address.neighborhood = c.short_name;
        address.city = c.short_name;
        break;
      case 'locality':
        address.locality = c.short_name;
        address.city = !address.neighborhood ? c.short_name : address.city;
        break;
      case 'sublocality':
        address.sublocality = c.short_name;
        address.city = !address.locality && !address.city && !address.neighborhood ? c.short_name : address.city;
        break;
      case 'administrative_area_level_3':
        address.city = (!address.neighborhood && !address.locality && !address.sublocality) ? c.short_name : address.city;
        break;
      case 'postal_town':
        address.city = (!address.neighborhood && !address.locality && !address.sublocality) ? c.short_name : address.city;
        break;
      case 'administrative_area_level_1':     //  Note some countries don't have states
        address.state = c.short_name;
        break;
      case 'postal_code':
        address.zip = c.short_name;
        break;
      case 'country':
        address.country = c.long_name === 'United States' ? 'USA' : c.long_name;
        break;
      default:
    }
  });
  return address;
}

有人知道Google是否有用于formatted_address字段的算法吗?

是否有解析Google自动完成响应的正确方法,以便我们总能获得一个地址部分,该地址部分具有邮局期望的地址的不同部分?例如,当...

javascript google-maps-api-3 street-address
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.