使用Google Places获取郊区的邮政编码
Get postcode for suburb using Google Places
我正在使用Google Place Autocomplete按郊区名称检索邮政编码。我目前使用的代码工作得很好,确实可以检索到我需要的一切,然而,它只适用于一些郊区,而不给你邮政编码。
例如:
- 澳大利亚维多利亚州拉弗顿(良好)
- 澳大利亚维多利亚墨尔本机场(良好)
- 澳大利亚维多利亚州墨尔本(无邮政编码)
- 澳大利亚维多利亚州里士满(无邮政编码)
- 等等
HTML
<input id="supplier-area" type="text">
JS
var autocomplete;
function initialize() {
autocomplete = new google.maps.places.Autocomplete(
(document.getElementById('supplier-area')),
{
types: ['(cities)'],
componentRestrictions: {
country: 'au'
}
}
);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
alert(JSON.stringify(place));
});
}
initialize();
由于墨尔本是一个城市,它跨越了许多邮政编码。同样,里士满是一个跨越多个邮政编码的郊区(西北部为3067,其他大部分地区为3121)。
您需要在查询中更加具体,才能获得postal_code。
如果你需要邮政编码,你可以对getPlace()
返回的lat/lng进行反向地理编码。谷歌通常会返回您查询的区域的逻辑中心(市中心/CBD等)。由于纬度/lng是一个精确的点,而不是一个区域,因此没有歧义,它将有一个邮政编码。
谷歌做出这种假设是不合适的,因为它不是在所有情况下都是正确的,但如果这是你的应用程序需要的行为,那么你可以"故意"做出这个决定。
我也有同样的问题。我想使用谷歌位置自动完成功能来选择郊区,然后总是返回邮政编码。
下面的JSFiddle展示了如何做到这一点。放置自动填写地址表单这是通过地理代码反向查找扩展的股票代码。
其作用如下:
- 获取自动完成结果
- 如果没有邮政编码
- 将地理坐标从结果中删除
- 调用geocoder.geocode以获取返回坐标处的地址
- 询问地址响应,并从这些地理坐标处返回的地址中读取城市和邮政编码值
HTML更改为纵向添加额外字段
<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>
不仅需要询问地址组件,还需要询问几何结构,这样你就可以获得geo corinates
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
您可以使用此
google.maps.event.addListener(autocomplete, 'place_changed', function () {
var place = autocomplete.getPlace();
for (var i = 0; i < place.address_components.length; i++) {
var addressType = place.address_components[i].types[0];
if (addressType == "postal_code") {
var postalcode = place.address_components[i].long_name;
$("#Address_Postcode").val(postalcode);
}
}
});
相关文章:
- 在谷歌api v3中使用地理自动完成功能获取邮政编码
- 根据客户的地理位置、邮政编码和位置切换图像
- 使用地图框 API 将邮政编码转换为纬度和经度
- 如何通过邮政编码确定美国县
- 如何快速确定给定邮政编码的状态
- 如何根据表单输入值(即邮政编码)显示不同的页面?jQuery或.PHP
- 获取属性(邮政编码)并在Google地图API 3中使用
- 使用javascript计算两个邮政编码之间的距离
- 为什么这种模式不适用于敲除验证?(分隔的邮政编码)
- jQuery使用inArray搜索和重定向邮政编码
- 从名称或邮政编码获取纬度和经度-谷歌API
- 英国邮政编码谷歌API不返回街道地址
- 如何使用Google Places API获取邮政编码
- 在谷歌地图API中设置邮政编码边界
- 如果在JavaScript w/HTML中选择了特定国家/地区,如何要求邮政编码为数字
- 通过将鼠标悬停在距离矩阵上然后轻拔输入地址和邮政编码来更改输入地址和邮政编码
- 用于邮政编码验证的 Javascript
- 需要javascript检查夏威夷阿拉斯加等的邮政编码
- 邮政编码未出现在自动完成框谷歌地图上
- 使用Google Places获取郊区的邮政编码