Google maps 获取组件的地址

Google maps 获取组件的地址,google-maps,google-api,google-places-api,Google Maps,Google Api,Google Places Api,我正在使用GooglePlacesAPI进行地理编码。我的地址组件类型有问题 我想获取有关用户以以下格式在自动完成中键入的地址的信息: 街道编号/街道/城市/省/国家 如果用户自动完成了“Street 12,SomeCity,SomeProvince,SomeCountry”,我想提醒您所有这些信息。但当用户只输入“someProvince,SomeCountry”时,我只希望有省和国家地址类型 这是我的密码: google.maps.event.addListener(autocomplete

我正在使用GooglePlacesAPI进行地理编码。我的地址组件类型有问题

我想获取有关用户以以下格式在自动完成中键入的地址的信息:
街道编号/街道/城市/省/国家

如果用户自动完成了“Street 12,SomeCity,SomeProvince,SomeCountry”,我想提醒您所有这些信息。但当用户只输入“someProvince,SomeCountry”时,我只希望有省和国家地址类型

这是我的密码:

google.maps.event.addListener(autocomplete, 'place_changed', function () {
    var place = autocomplete.getPlace();
    alert('0: ' + place.address_components[0].long_name);
    alert('1: ' + place.address_components[1].long_name);
    alert('2: ' + place.address_components[2].long_name);
    alert('3: ' + place.address_components[3].long_name);
    alert('4: ' + place.address_components[4].long_name);
    alert('5: ' + place.address_components[5].long_name);
    alert('6: ' + place.address_components[6].long_name);
    alert('7: ' + place.address_components[7].long_name);
)};
问题是,当用户自动完成完整地址时,它会正确显示所有这些警报。但当只自动完成部分信息(仅国家)时,它将显示键入的国家的7倍

我希望,当街道和城市没有给出时,它会显示警报(“街道为空”等)。如何操作?

根据,您需要检查每个返回的地址组件,以查看是否已返回街道/城市:

google.maps.event.addListener(autocomplete, 'place_changed', function() {
    var place = autocomplete.getPlace();
    var components = place.address_components;
    var street = null;
    for (var i = 0, component; component = components[i]; i++) {
        console.log(component);
        if (component.types[0] == 'route') {
            street = component['long_name'];
        }
    }
    alert('Street: ' + street);
});

为项目创建此功能。它解析

  • 街头
  • 国家
  • 拉链
  • 城市
来自谷歌地理应答

function parseGoogleResponse(components) {
    _.each(components, function(component) {
      _.each(component.types, function(type) {
        if (type === 'route') {
          $("input[name=street]").val(component.long_name)
        }
        if (type === 'street_number') {
          $("input[name=nr]").val(component.long_name)
        }
        if (type === 'locality') {
          $("input[name=city]").val(component.long_name)
        }
        if (type === 'country') {
          $("input[name=country]").val(component.long_name)
        }
        if (type === 'postal_code') {
          $("input[name=zip]").val(component.long_name)
        }
      })
    })
  }

使用这些类型并将它们映射到您的地址字段。请记住,城市、县、州等根据其上下文可能有不同的含义。例如,
North Hollywood
提出了类型
Neighborary
,因为它位于洛杉矶(“Location”)


为AngularJS创建此函数:

function getAddressComponentByPlace(place) {
    var components;

    components = {};

    angular.forEach(place.address_components, function(address_component) {
        angular.forEach(address_component.types, function(type) {
            components[type] = address_component.long_name;
        });
    });

    return components;
}
结果如下所示:

administrative_area_level_1: "Berlin"
country: "Deutschland"
locality: "Berlin"
political: "Deutschland"
postal_code: "10719"
route: "Kurfürstendamm"
street_number: "1"
sublocality: "Bezirk Charlottenburg-Wilmersdorf"
sublocality_level_1: "Bezirk Charlottenburg-Wilmersdorf"
ES6版本
我用纯Javascript编写了这个函数,以从
google.maps.geocoderadescomponent
对象获取相应的类型

//gets "street_number", "route", "locality", "country", "postal_code"
function getAddressComponents(components, type) {    

    for (var key in components) {
        if (components.hasOwnProperty(key)) {            

            if (type == components[key].types[0]) {
                return components[key].long_name;
            }  
        }        
    }
}

这里有一个简单的建议:

function parseGoogleResponse (components) {
  var newComponents = {}, type;
  $.each(components, function(i, component) {
    type = component.types[0];
    newComponents[type] = {
      long_name: component.long_name,
      short_name: component.short_name
    }
  });
  return newComponents;
}
其用途如下:


var-components=parseGoogleResponse(位置[0]。地址\组件)

这很有用,谢谢!如果使用jQuery,
$可能会补充一点。每个
都需要一个
索引
和一个
组件
传递到它的回调函数中。我只想说非常感谢你的解决方案,它为查询谷歌返回的地址信息提供了一个可靠的方法。谢谢你!演示不存在
//gets "street_number", "route", "locality", "country", "postal_code"
function getAddressComponents(components, type) {    

    for (var key in components) {
        if (components.hasOwnProperty(key)) {            

            if (type == components[key].types[0]) {
                return components[key].long_name;
            }  
        }        
    }
}
function parseGoogleResponse (components) {
  var newComponents = {}, type;
  $.each(components, function(i, component) {
    type = component.types[0];
    newComponents[type] = {
      long_name: component.long_name,
      short_name: component.short_name
    }
  });
  return newComponents;
}