who*_*oah 7 google-maps google-api google-places-api
我正在使用谷歌地方API与地理编码.我的地址组件类型有问题.
我想获取有关用户在此格式中输入自动填充的地址的信息:
街道号/街道/城市/省/国家/地区.
如果用户自动完成了"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);
)};
Run Code Online (Sandbox Code Playgroud)
问题是当用户自动完成完整地址时,它会正确显示所有这些警报.但是,当自动完成仅部分信息 - 仅限国家/地区 - 它将显示7次输入国家/地区的信息.
http://gmaps-samples-v3.googlecode.com/svn/trunk/places/autocomplete-addressform.html
我想要的是,当没有给出街道和城市时,它会显示警报("街道为空"等).怎么做?
Ant*_*ter 11
为项目制作了这个功能.它解析
来自谷歌地理响应
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)
}
})
})
}
Run Code Online (Sandbox Code Playgroud)
小智 7
使用类型并将它们映射到您的地址字段.请记住,城市,县,州等根据其背景可能有不同的含义.例如,North Hollywood有型上来neighborhood,因为它位于洛杉矶("当地").
function placeToAddress(place){
var address = {};
place.address_components.forEach(function(c) {
switch(c.types[0]){
case 'street_number':
address.StreetNumber = c;
break;
case 'route':
address.StreetName = c;
break;
case 'neighborhood': case 'locality': // North Hollywood or Los Angeles?
address.City = c;
break;
case 'administrative_area_level_1': // Note some countries don't have states
address.State = c;
break;
case 'postal_code':
address.Zip = c;
break;
case 'country':
address.Country = c;
break;
/*
* . . .
*/
}
});
return address;
}
Run Code Online (Sandbox Code Playgroud)
根据演示,您需要检查每个返回的地址组件,以查看是否已返回街道/城市:
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);
});
Run Code Online (Sandbox Code Playgroud)