gmaps地址组件类型获取国家/地区名称

时间:2010-06-07 12:14:04

标签: javascript google-maps-api-3

我试图使用gmaps V3提供的地址组件类型获取国家/地区名称。

我不知道我怎么能以正确的方式得到它...... http://code.google.com/apis/maps/documentation/javascript/services.html#GeocodingAddressTypes

我试图在这里提醒国家名字:

alert(results[1].address_component[country]);

这里是代码..任何帮助都非常感谢..谢谢

function codeLatLng() { 
    var input = document.getElementById("latlng").value; 
    var latlngStr = input.split(",",2); 
    var lat = parseFloat(latlngStr[0]); 
    var lng = parseFloat(latlngStr[1]); 
    var latlng = new google.maps.LatLng(lat, lng); 
    if (geocoder) { 
      geocoder.geocode({'latLng': latlng}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
          if (results[1]) { 
          alert(results[1].address_component[country]); 
          } else { 
            alert("No results found"); 
          } 
        } else { 
          alert("Geocoder failed due to: " + status); 
        } 
      }); 
    } 
  } 

3 个答案:

答案 0 :(得分:10)

首先,address_components应该是复数。由于输入错误,Google文档会因此而误导。

address_components数组为地址的每个组件都有一个项目。每个项目中的类型数组告诉您适用于每个地址组件的所有类型(例如:国家,地区等) - 所以您真正想要做的是找到具有“country”作为其中一个的address_components数组项它的类型,然后获取该数组项的short_name或long_name。

此外,您可能并不总是有结果值[1]。这将假设返回至少2个搜索结果。结果[0]将是第一个。

这是一个例子:

var country;

for (i=0;i<results[0].address_components.length;i++){
    for (j=0;j<results[0].address_components[i].types.length;j++){
       if(results[0].address_components[i].types[j]=="country")
          country = results[0].address_components[i].long_name
    }
}

答案 1 :(得分:0)

alert(results[1].address_component['country']); // country是一个字符串

答案 2 :(得分:-1)

根据Google's documentation,结果总是按照最具体到最不具体的顺序返回:

  

通常,地址从最具体到最不具体地返回;更确切的地址是最突出的结果,就像在这种情况下一样。请注意,我们会返回不同类型的地址,从最具体的街道地址到不太具体的政治实体,如社区,城市,县,州等。如果您希望匹配更一般的地址,您可能希望检查{{ 1}}返回的"types" s。的字段。

鉴于这一事实,我们甚至不必遍历结果。只需选择最后的那些:

Placemark

如果结果是“结果”或“address_components”可能丢失或长度为0,则可以添加一些简单的错误检查。