2015-01-01 13 views
7

Tôi đang làm việc theo số Google Place API với Yêu cầu tìm kiếm văn bản và tôi tự hỏi cách lọc kết quả cho một quốc gia cụ thể. Là có một cách?Địa điểm Google api: Đặt bộ lọc Tìm kiếm theo quốc gia

Những gì tôi đang cố gắng làm là gọi api với kết quả được lọc theo quốc gia và sau đó quản lý kết quả json bằng php.

Vì vậy, đây là một loại truy vấn

https://maps.googleapis.com/maps/api/place/textsearch/json?query=pizza&sensor=true&key=mykey 

Tôi muốn thêm một tham số như & country = chúng ta, nhưng có vẻ như nó không tồn tại.

Cảm ơn

+0

thể trùng lặp của [Google Địa điểm AutocompleteService lọc theo quốc gia] (http://stackoverflow.com/questions/14659008/google-places-autocompleteservice-filtering-by-country) – geocodezip

+0

Tại sao -1? Tôi đã kiểm tra câu trả lời đã có trong stackoverflow và không có gì trả lời câu hỏi của tôi. Nhưng dù sao, tôi chỉnh sửa nó để cung cấp thêm thông tin – Luca

+0

https://developers.google.com/places/documentation/autocomplete#place_autocomplete_requests xem tham số thành phần tùy chọn – geocodezip

Trả lời

0

Vượt mã quốc gia làm thông số trong thành phầnĐối với các tùy chọn. Sau đó, chuyển các tùy chọn này làm thông số cho google.maps.places.Autocomplete

ví dụ:

var options = { 
    componentRestrictions: {country: 'in'} 
}; 

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

Câu hỏi là về Tìm kiếm văn bản, không phải là tự động điền. Tuy nhiên, điều này có thể hữu ích cho người khác. – Evan

-1
<script> 
function initMap() { 

var minZoomLevel = 7; 

    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: minZoomLevel, 
     center: {lat: 24.4667, lng: 54.52901} 
    }); 

    // Bounds for North America 
    var allowedBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(24.4667, 54.3667) 
    ); 

    // Listen for the dragend event 
    google.maps.event.addListener(map, 'dragend', function() { 
    if (allowedBounds.contains(map.getCenter())) return; 

    // Out of bounds - Move the map back within the bounds 

    var c = map.getCenter(), 
     x = c.lng(), 
     y = c.lat(), 
     maxX = allowedBounds.getNorthEast().lng(), 
     maxY = allowedBounds.getNorthEast().lat(), 
     minX = allowedBounds.getSouthWest().lng(), 
     minY = allowedBounds.getSouthWest().lat(); 

    if (x < minX) x = minX; 
    if (x > maxX) x = maxX; 
    if (y < minY) y = minY; 
    if (y > maxY) y = maxY; 

    map.setCenter(new google.maps.LatLng(y, x)); 
    }); 

    // Limit the zoom level 
    google.maps.event.addListener(map, 'zoom_changed', function() { 
    if (map.getZoom() < minZoomLevel) map.setZoom(minZoomLevel); 
    }); 


    var input = (
    document.getElementById('pac-input') 
); 

    var types = document.getElementById('type-selector'); 

    map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 
    map.controls[google.maps.ControlPosition.TOP_LEFT].push(types); 
    var options = { 
    componentRestrictions: {country: 'AE'} 
    }; 
    var autocomplete = new google.maps.places.Autocomplete(input,options); 

    autocomplete.bindTo('bounds', map); 
    var infowindow = new google.maps.InfoWindow(); 
    var marker = new google.maps.Marker({ 
    map: map, 
    anchorPoint: new google.maps.Point(0, -29) 
    }); 
    autocomplete.addListener('place_changed', function() { 
    infowindow.close(); 
    marker.setVisible(false); 
    var place = autocomplete.getPlace(); 
    if (!place.geometry) { 
     window.alert("Autocomplete's returned place contains no geometry"); 
     return; 
    } 
    // If the place has a geometry, then present it on a map. 
    if (place.geometry.viewport) { 
     map.fitBounds(place.geometry.viewport); 
    } else { 
     map.setCenter(place.geometry.location); 
     map.setZoom(17); // Why 17? Because it looks good. 
    } 
    marker.setIcon(({ 
     url: place.icon, 
     size: new google.maps.Size(71, 71), 
     origin: new google.maps.Point(0, 0), 
     anchor: new google.maps.Point(17, 34), 
     scaledSize: new google.maps.Size(35, 35) 
    })); 
    marker.setPosition(place.geometry.location); 
    marker.setVisible(true); 
    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(' '); 
    } 
    infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address); 
    infowindow.open(map, marker); 
    }); 





    // Sets a listener on a radio button to change the filter type on Places 
    // Autocomplete. 
    function setupClickListener(id, types) { 
    var radioButton = document.getElementById(id); 
    radioButton.addEventListener('click', function() { 
     autocomplete.setTypes(types); 
    }); 
    } 
    setupClickListener('changetype-all', []); 
    setupClickListener('changetype-address', ['address']); 
    setupClickListener('changetype-establishment', ['establishment']); 
    setupClickListener('changetype-geocode', ['geocode']); 


} 
</script> 
<script src="https://maps.googleapis.com/maps/api/js?key=KEY&signed_in=true&libraries=places&callback=initMap" async defer></script> 
+2

Câu hỏi là về dịch vụ 'textSearch', không phải Tự động điền. – 10basetom

0
for API : country:in 

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
     .setCountry("IN") 
     .build(); 
Các vấn đề liên quan