2015-01-01 33 views
7

Ich arbeite an Google Place API mit Text Search Requests und ich frage mich, wie man Ergebnisse für ein bestimmtes Land filtern. Gibt es einen Weg?Google Ort api: Ort Suche Filter nach Land

Was ich versuche zu tun ist, rufen Sie die API mit Ergebnissen nach Land gefiltert und verwalten Sie dann das JSON-Ergebnis mit PHP.

Also, das ist eine Art von Abfrage

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

Ich möchte einen Parameter wie & Land hinzuzufügen = uns, aber es scheint, es existiert nicht.

Dank

+0

möglich Duplikat [Google Places Autocomplete Filterung nach Land] (http://stackoverflow.com/questions/14659008/google-places-autocompleteservice-filtering-by-country) – geocodezip

+0

Warum die -1? Ich habe die Antworten bereits im Stackoverflow überprüft und nichts beantwortet meine Frage. Jedenfalls bearbeite ich es, um weitere Informationen zu liefern. – Luca

+0

https://developers.google.com/places/documentation/autocomplete#place_autocomplete_requests siehe Parameter der Option components – geocodezip

Antwort

0

Pass Ländercode als Parameter in componentRestrictions in Optionen. Dann übergeben Sie diese Optionen als Parameter an google.maps.places.Autocomplete

z.

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

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

Die Frage bezieht sich auf die Textsuche, nicht auf die automatische Vervollständigung. Dies könnte jedoch für jemand anderen nützlich sein. – 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

Die Frage bezieht sich auf den Dienst 'textSearch', nicht auf Autocomplete. – 10basetom

0
for API : country:in 

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
     .setCountry("IN") 
     .build(); 
Verwandte Themen