2011-05-10 59 views
1

所以反地理编码,结果是这样的:循环通过谷歌地图造成的Javascript

results[0].formatted_address: "275-291 Bedford Ave, Brooklyn, NY 11211, USA", 
results[1].formatted_address: "Williamsburg, NY, USA", 
results[2].formatted_address: "New York 11211, USA", 
results[3].formatted_address: "Kings, New York, USA", 
results[4].formatted_address: "Brooklyn, New York, USA", 
results[5].formatted_address: "New York, New York, USA", 
results[6].formatted_address: "New York, USA", 
results[7].formatted_address: "United States" 

这是地址阵列,一个不太详细依次类推。我需要遍历这个列表并获取只包含城市/州的地址。我将如何做到这一点?

它并不总是一个特定的元素(感谢谷歌)。

+0

我最近做了这个,让我找到它。 – Chad 2011-05-10 15:21:54

+0

我觉得有人不得不。谢谢乍得。 – slandau 2011-05-10 15:22:54

回答

1
//store the most specific address for easy access 
var a = results[0].address_components; 

var city = null, state = null; 
for(i = 0; i < a.length; ++i) 
{ 
    var t = a[i].types; 
    if(compIsType(t, 'administrative_area_level_1')) 
     state = a[i].long_name; //store the state 
    else if(compIsType(t, 'locality')) 
     city = a[i].long_name; //store the city 

    //we can break early if we find both 
    if(state != null && city != null) break; 
} 

function compIsType(t, s) { 
    for(z = 0; z < t.length; ++z) 
     if(t[z] == s) 
     return true; 

    return false; 
} 

基本上发生了什么是你循环他的地址组件,每个都有'类型'与它关联。您可以使用这些来确定组件所代表的内容。几乎100%的时间(在美国)'administrative_area_level_1'是国家,'locality'是城市。更多信息:TypesJSON Output

如果您有任何问题要告诉我,请为我的可变变量命名表示歉意。

+0

完美谢谢! – slandau 2011-05-10 15:34:31

+0

这在大多数情况下都适用,但是对于一个特定的纬度/经度位置,我们已经得到了一个未定义的城市,但却是正确的状态。是否有这种情况发生,以及解决方法? – slandau 2011-05-16 14:28:01

+0

从地理编码返回的结果对象并不总是包含所有部分。它不是这个代码的问题,但只是地理编码器没有找到这些信息。 – Chad 2011-05-16 19:54:46