我正在尝试对澳大利亚邮政编码0821进行地理编码,并且无法可靠地识别北领地内存在的此邮政编码。 0820和0822工作正常。
我在做什么的例子
var gm = google.maps;
var gc = new gm.Geocoder();
var grq:google.maps.GeocoderRequest = {
address:s, region:"au"
};
var m = /[0-9]{4}/.exec(s);
if(m && m.length == 1)
grq.componentRestrictions = {
country:'au'/*, postalCode:m[1]*/
};
gc.geocode(grq,(results, status)=>{
if(status == gm.GeocoderStatus.OK) {
var latLng = results[0].geometry.location;
$.ajax({
url:`${apiUrl}near/${latLng.lat()},${latLng.lng()}`,
success: (response)=>this.parseResult(response,latLng)});
} else {
this.search.searchEnded();
console.warn("Gecode Failed",results,status);
alert('Unable to find location, try entering more specific search');
}
这个例子https://google-developers.appspot.com/maps/documentation/javascript/examples/full/geocoding-simple似乎也显示出类似的问题,而不是找到0821,在布宜诺斯艾利斯(搜索'澳大利亚0821'或'0821澳大利亚')显示它,搜索'澳大利亚0822'作品发现。
我也尝试过使用postalCode限制,这会让事情变得更糟。
您如何可靠地对邮政编码进行地理编码?
答案 0 :(得分:1)
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
componentRestrictions: {
country: 'AU',
postalCode: postcode
}
}
答案 1 :(得分:0)
我建议查看AusPost's postcode api如果这是澳大利亚特定的,否则有许多API(http://www.zippopotam.us/)是一个很好的imo。
这可能只是谷歌系统中的一个错误,如果所有类似的邮政编码都有效,我可能会在他们的产品论坛中报告。
答案 2 :(得分:0)
我今天在AU的两个不同的邮政编码(5000,0800)遇到了同样的问题,并决定使用故障转移方法并拨打两个电话,而不是一个。
邮政编码5000将返回结果而0800不会,反之亦然,只使用单一方法,所以我想出了这个:
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<script>
var region = 'AU';
var zip = '2000';
var address = zip + ',' + region;
geocoder = new google.maps.Geocoder();
geocoder.geocode({
'address': address,
'componentRestrictions': {
'country': region,
'postalCode': zip
}
}, function(results, status) {
//check status
if (status == google.maps.GeocoderStatus.OK) {
//do work here
} else {
console.log('STATUS - ', status);
console.log('Trying with only component restrictions.');
geocoder.geocode({
'componentRestrictions': {
'country': region,
'postalCode': zip
}
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
console.log("Works! - ", status);
} else {
console.log("noResults - ", status);
}
});
}
});
</script>