如何仅从反向地理编码结果中获取邮政编码
How do I get just the postal code from a reverse geocode result?
我已经在互联网上寻找一个简单的答案,但我似乎在任何地方都找不到。我对纬度和经度进行了简单的反向地理编码,并返回了巨大的结果对象。我该何去何从?这是我到目前为止所拥有的。当前邮政编码返回"未定义"。
geocoder.geocode( {'latLng' : event.latLng}, function(results, status) {
for(var i; i < results.length; i++){
for(var j=0;j < results[i].address_components.length; j++){
for(var k=0; k < results[i].address_components[j].types.length; k++){
if(results[i].address_components[j].types[k] == "postal_code"){
var zipcode = results[i].address_components[j].short_name;
}
}
}
}
});
for(var i=0; i < results[0].address_components.length; i++)
{
var component = results[0].address_components[i];
if(component.types[0] == "postal_code")
{
console.log(component.long_name);
}
}
这就是我的工作。基本上,它只是在第一个地址组件中搜索邮政编码,因为它包含所有信息。请记住,console.log() 是你的朋友。
多年后编辑
多亏了移动浏览器中支持的可爱的 ES6,现在可以更轻松地完成此操作,让我们来看看一些更简单的方法。首先,我们可以简化循环
for(let component of results[0].address_components))
{
if(component.types[0] == "postal_code")
{
console.log(component.long_name);
}
}
或者我们可以使用查找方法
let postalCode = results[0].address_components.find(function (component) {
return component.types[0] == "postal_code";
});
console.log(postalCode.long_name);
发现这个简洁的函数(https://stackoverflow.com/users/638040/johann)作为另一个堆栈溢出问题的答案发布。
它将找到与您要求的类型匹配并返回它。
function extractFromAdress(components, type){
for (var i=0; i<components.length; i++)
for (var j=0; j<components[i].types.length; j++)
if (components[i].types[j]==type) return components[i].long_name;
return "";
}
用法:
var postCode = extractFromAdress(results[0].address_components, "postal_code");
var country = extractFromAdress(results[0].address_components, "country");
您的问题是邮政编码变量是函数的局部变量。我有一个关于这个jsfiddle的工作示例
var zipcode = null;
function testFunct (results, status) {
for(var i in results){
var result = results[i];
for(var j in result.address_components){
var address_component = result.address_components[j];
for(var k in address_component.types){
var addrtype = address_component.types[k];
if(addrtype == "postal_code"){
zipcode = results[i].address_components[j].short_name;
console.log(zipcode);
return;
}
}
}
}
}
您的代码执行以下操作:例如,如果有两个或三个答案;它将最后一行存储在邮政编码变量中。即使它是未定义的。您应该进行检查以查看邮政编码是否有效;然后您应该将其返回到您的邮政编码变量。并在函数外部定义变量;否则它将卡在函数中。
相关文章:
- 将地理编码结果转换为php变量以发布到mysql数据库
- 一个javascript实现base64图像编码并将结果写入文本文件
- 为什么我的javascript地理编码函数返回空白结果
- 读取一个本地文件,编码为base64,我想给用户一个将结果保存到文件的选项
- 如何在php JSON编码结果中包含谷歌分析
- AJAX PHP JSON编码未返回所有结果
- 谷歌应用程序脚本和JavaScript中base64编码的不同结果
- 如何防止谷歌地理编码器从其他国家/地区返回结果
- 如何仅从反向地理编码结果中获取邮政编码
- 返回英国邮政编码只是谷歌地图地理编码结果的一部分
- 反向地理编码结果不正确
- iso-8859-1中的perl utf8 encode向javascript utf8编码返回不同的结果
- 传单地理编码和可拖动标记在输入字段中显示结果
- Javascript-谷歌地图,简单的反向地理编码-总是零结果
- 为什么不是'我的谷歌地图API反向地理编码显示结果
- 地址地理编码返回无效的结果使用谷歌地理编码
- 如何在jquery中制作链接,编码实时搜索结果
- 如何在即时搜索结果上编码导航键
- phonegap geocoder.地理编码,从结果中找到门牌号
- 通过Google maps api编码地址并延迟结果