2011-05-10 50 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