2012-10-16 35 views
12

Tôi đang sử dụng API Google Maps để nhận danh sách thành phố và quốc gia tự động hoàn chỉnh (không có chi tiết khác) và hoạt động không tốt.Chỉ nhận các quốc gia tự động hoàn tất từ ​​API Google Maps

var input = document.getElementById('newAddress'); 
    var options = { 
     types: ['(cities)'] 
    }; 

    autocomplete = new google.maps.places.Autocomplete(input, options); 

Bây giờ tôi muốn làm chính xác như nhau nhưng chỉ nhận tên các quốc gia. Somthing như thay thế types: ['(cities)'] với types: ['(countries)'] ...
(những gì tôi đã cố gắng nhưng đã không làm việc)

Tôi nên làm gì để có được chỉ các nước thành autocomplete của tôi?

Trả lời

5

Không có giải pháp nhanh chóng như Google chỉ cung cấp hai bộ sưu tập loại: [ '(thành phố)'] và [ '(vùng)']

Không có [ '(quốc gia)'] có sẵn.

Tài liệu ở đây: https://developers.google.com/places/documentation/autocomplete#place_types

EDIT:

Bạn có thể là một thay thế sử dụng một plugin autocomplete có nguồn gốc từ url này: http://www.geognos.com/api/en/countries/info/all.json

+0

Vì vậy, hoàn toàn không có cách nào khác để chỉ có quốc gia? – ParPar

+0

Không nếu bạn tự ép mình vào API Google Maps Tự động hoàn thành – sainiuc

+0

Cảm ơn bạn rất nhiều – ParPar

19

Tôi đã chơi đùa với các API của Google Autocomplete một chút và đây là giải pháp tốt nhất tôi có thể tìm thấy để giới hạn kết quả của bạn chỉ cho các quốc gia:

var autocomplete = new google.maps.places.Autocomplete(input, options); 
var result = autocomplete.getPlace(); 
console.log(result); // take a look at this result object 
console.log(result.address_components); // a result has multiple address components 

for(var i = 0; i < result.address_components.length; i += 1) { 
    var addressObj = result.address_components[i]; 
    for(var j = 0; j < addressObj.types.length; j += 1) { 
    if (addressObj.types[j] === 'country') { 
     console.log(addressObj.types[j]); // confirm that this is 'country' 
     console.log(addressObj.long_name); // confirm that this is the country name 
    } 
    } 
} 

Nếu bạn nhìn vào đối tượng kết quả được trả về, bạn sẽ thấy rằng có một mảng address_components sẽ chứa một số đối tượng đại diện cho các phần khác nhau của một địa chỉ. Trong mỗi đối tượng này, nó sẽ chứa mảng 'loại' và trong mảng 'loại' này, bạn sẽ thấy các nhãn khác nhau được liên kết với một địa chỉ, bao gồm một nhãn cho quốc gia.

+1

nỗ lực tuyệt vời, cảm ơn bạn –

+0

Bạn được chào đón - vui vì điều này hữu ích @TareqJobayere – wmock

+1

Cảm ơn rất nhiều vì điều này :) – user1012181

-2
<!DOCTYPE html> 
<html> 
<head> 
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"> 
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script> 
</head> 
<body> 
<div id="locationField"> 
<input id="autocomplete" placeholder="Enter your address" type="text"></input> 
</div> 
<div><pre><p id="data"></p></pre></div> 
<script type="> 
var autocomplete; 
function initialize() { 
autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'),{ types: ['(cities)'] }); 
google.maps.event.addListener(autocomplete, 'place_changed', function() { 
var address_components=autocomplete.getPlace().address_components; 
var city=''; 
var country=''; 
for(var j =0 ;j<address_components.length;j++) 
{ 
city =address_components[0].long_name; 
if(address_components[j].types[0]=='country') 
{ 
    country=address_components[j].long_name; 
} 
} 
document.getElementById('data').innerHTML="City Name : <b>" + city + "</b> <br/>Country Name : <b>" + country + "</b>"; 
}); 
} 
initialize(); 
</script> 
</body> 
</html> 
Các vấn đề liên quan