Will D 所说的是正确的。悉尼、墨尔本等地区不会返回邮政编码,因此您需要进行反向地理编码查找。
我遇到了完全相同的问题。我想使用 Google Places 自动完成功能来选择郊区,然后总是返回邮政编码。
下面的 JSFiddle 展示了如何做到这一点。
Place Autocomplete Address Form
这是使用地理编码反向查找扩展的股票代码。
它的作用如下:
- 获取自动完成结果
- 如果没有邮政编码
- 从结果中获取地理坐标
- 调用 geocoder.geocode 以获取返回坐标处的地址
- 询问地址响应并从在这些地理坐标返回的地址中读取城市和邮政编码值
HTML 更改
为 lat long 添加额外的字段
<tr>
<td class="label">Lat</td>
<td class="wideField" colspan="3"><input class="field" id="lat" disabled="true"/></td>
</tr>
<tr>
<td class="label">Long</td>
<td class="wideField" colspan="3"><input class="field" id="lng" disabled="true"/></td>
</tr>
不仅需要地址组件,还需要几何,以便获取地理坐标
autocomplete.setFields(['address_component', 'geometry']);
功能
function fillInAddress() {
// Get the place details from the autocomplete object.
var place = autocomplete.getPlace();
for (var component in componentForm) {
document.getElementById(component).value = '';
document.getElementById(component).disabled = false;
}
// Get each component of the address from the place details,
// and then fill-in the corresponding field on the form.
for (var i = 0; i < place.address_components.length; i++) {
var addressType = place.address_components[i].types[0];
if (componentForm[addressType]) {
var val = place.address_components[i][componentForm[addressType]];
document.getElementById(addressType).value = val;
}
}
// geometry
var geometry = place.geometry;
var lat = geometry.location.lat();
var lng = geometry.location.lng();
document.getElementById("lat").value = lat;
document.getElementById("lng").value = lng;
var postcode = document.getElementById("postal_code");
if(postcode.value == ""){
//alert("no postcode use lat/lng to lookup place")
var geocoder = new google.maps.Geocoder();
var latlng = {lat: parseFloat(lat), lng: parseFloat(lng)};
geocoder.geocode({'location': latlng}, function(results, status) {
if (status === 'OK') {
if (results[0]) {
var faddress = results[0].formatted_address;
var addressParts = results[0].address_components;
for (var i = 0; i < addressParts.length; i++) {
var addressType = addressParts[i].types[0];
if (addressType == "postal_code" || addressType == "locality") {
var val = addressParts[i][componentForm[addressType]];
document.getElementById(addressType).value = val;
}
}
//alert(faddress);
} else {
window.alert('No results found');
}
} else {
window.alert('Geocoder failed due to: ' + status);
}
});
}
}
这是基于谷歌在此处Place Autocomplete Address Form提供的示例