2016-01-05 25 views
0

我正在以用戶輸入他/她的位置的形式實現Google Places。該位置可以是完整的地址或只是一個城市。從Google Places API響應中獲取地址組件的最佳方式

我想獲得用戶提供的地址的每個單獨組件。獲得每個組件的最佳方式是什麼,例如地址,城市,州,郵政編碼和國家。

在下面的代碼中,我得到的組件看起來像一個數組。我是否必須循環訪問它,還是有直接的方式讓我訪問每個組件?

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script> 
<script type="text/javascript"> 
     google.maps.event.addDomListener(window, 'load', function() { 
      var places = new google.maps.places.Autocomplete(document.getElementById('location')); 
      google.maps.event.addListener(places, 'place_changed', function() { 
       var place = places.getPlace(); 
       var components = place.address_components; 


      }); 
     }); 
</script> 

回答

0

看看這裏從谷歌的例子:

var address = ''; 
    if (place.address_components) { 
     address = [ 
     (place.address_components[0] && place.address_components[0].short_name || ''), 
     (place.address_components[1] && place.address_components[1].short_name || ''), 
     (place.address_components[2] && place.address_components[2].short_name || '') 
     ].join(' '); 
} 

這是函數來創建:大溫哥華溫哥華(從下面的鏈接)。

因此你可以直接訪問中的每個array。 然後做你想做的事情。 這裏是鏈接到這個例子: https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete

1

循環可能是最簡單的。沒有直接跳到例如地址組件(如果有一個),它是一個簡單的數組。

您也可以在陣列處理到的東西,通過類型允許直接查找:

var components_by_type = {}; 
for (var i = 0; i < place.address_components.length; i++) { 
    var c = place.address_components[i]; 
    components_by_type[c.types[0]] = c; 
} 

console.log(components_by_type['state'].short_name); 

如果要處理超過每個組件的第一種類型的更多的會得到一個更復雜一點,雖然。

相關問題