11

I'm working on Google Place API with Text Search Requests and I'm wondering how to filter results for a specific country. Is there a way?

What I'm trying to do is call the api with results filtered by country and then manage the json result with php.

So, this is a kind of query

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

I wish to add a parameter like &country=us, but it seems it doesn't exists.

Thanks

Luca
  • 848
  • 1
  • 14
  • 33
  • possible duplicate of [Google Places AutocompleteService filtering by country](http://stackoverflow.com/questions/14659008/google-places-autocompleteservice-filtering-by-country) – geocodezip Jan 01 '15 at 16:00
  • Why the -1? I checked answers already in stackoverflow and nothing answer my question. Anyhow, I edit it in order to provide more information – Luca Jan 01 '15 at 16:29
  • https://developers.google.com/places/documentation/autocomplete#place_autocomplete_requests see the option components parameter – geocodezip Jan 01 '15 at 17:48
  • 2
    That option component is for Place Autocomplete and not for Place Search. Thank you the same. In the meantime I take another -1. I don't understand why... – Luca Jan 01 '15 at 19:10
  • 2
    @Luca - I'm looking for the same thing. The only thing I see is to check the FormattedAddress in the Results and see if it contains the country. However, I've noticed variations such as "USA" and "United States", so I'm not sure how helpful that will be. – Evan Aug 20 '15 at 14:49
  • Every answer below is incorrect. This is about using text search WITHOUT the autocomplete API and restricting by country. – j0hnstew Oct 20 '16 at 19:21

5 Answers5

1

Google maps platform provide parameter region for next search types :

  • Text search
  • Place Details

So, enjoy your pizza in United Arab Emirates: https://maps.googleapis.com/maps/api/place/textsearch/json?query=pizza&region=ae&key=mykey

Please pay attention that this "region" parameter should be from: country top-level domains.

Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions

0

Pass country code as a parameter in componentRestrictions in options. Then pass this options as parameter to google.maps.places.Autocomplete

e.g.

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

autocomplete = new google.maps.places.Autocomplete(input, options);
Dinesh
  • 35
  • 9
  • 2
    The question is about the Text Search, not the autocomplete. However, this might useful for someone else. – Evan Aug 20 '15 at 14:47
0
for API : country:in

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
        .setCountry("IN")
        .build();
DynamicMind
  • 4,240
  • 1
  • 26
  • 43
0

I tried to find the same way of filtering but finally decided to use geocode api:

https://maps.googleapis.com/maps/api/geocode/json?address=SOME_VALUE&key=YOUR_KEY&language=en&components=country:US

The last query parametercomponents=country:US filters the request (set to US in my example).

Hope it'll help anyone with the same issue.

Daniyal Lukmanov
  • 1,149
  • 10
  • 21
-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>
Muddasir Abbas
  • 1,699
  • 1
  • 20
  • 37