将现有地址作为参数的地理编码器仅返回street_address作为结果。为什么?地址有效。它已经在https://google-developers.appspot.com/maps/documentation/utils/geocoder/
进行了测试我的电话:
checkAddress(street, strNo, post_code, area, function (results) {
if (results) {
$.each(results, function (i, address) {
if (address.types[0] == "street_address") {
itemStreetNo = address.address_components[0].long_name;
itemStreet = address.address_components[1].long_name;
}
if (address.types[0] == "route") {
itemStreet = address.address_components[0].long_name;
}
if (address.types[0] == "postal_code") {
itemPostalCode = address.address_components[0].long_name;
}
if (address.types[0] == "country") {
itemCountry = address.address_components[0].long_name;
}
if (address.types[0] == "locality") {
itemRegion = address.address_components[0].long_name;
}
}
});
我的功能是:
function checkAddress(address, number, zipcode, area, callback) {
var geocoder = new google.maps.Geocoder;
var addr = address + ' ' + number + ' ' + zipcode + ' ' + area;
geocoder.geocode({ 'address': addr }, function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
if (results[0]) {
callback(results);
}
else {
callback(null);
}
}
else {
callback(null);
}
});
}
答案 0 :(得分:2)
您只搜索1个组件(address.address_components[0]
),因此您只能获得1个结果。
address.address_components[0]
包含一个组件,例如“route”。然后address.address_components[1]
包含另一个组件,例如“locality”,然后是address.address_components[2]
...据我记得,组件的顺序是随机的。
所以你需要的是迭代。对于您检查类型的每个组件,可以让您知道该值应该去哪里。
我为一个不同的Stack Overflow问题编写了一个函数来完成这个迭代,它可以“捕获”任何组件。
看看它是否适合你;让我知道。