This section covers a series of example requests to the Places Aggregate API.
Return places within a circle
Return all restaurants within a 200m radius of Trafalgar Square, London.
- The search area is a circle centered on a specific latitude and longitude. The radius of this circle is 200 meters, which determines the size of the search area.
- The place type
requested is restaurant, and this is passed using
includedTypes
withintypeFilters
. - The count is requested using
INSIGHTS_COUNT
, and the place IDs are requested usingINSIGHTS_PLACES
.
Rest
curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \ --header 'X-Goog-Api-Key: API_KEY ' \ --header 'Content-Type: application/json' \ --data '{ "insights": ["INSIGHT_COUNT", "INSIGHT_PLACES"], "filter": { "locationFilter": { "circle": { "latLng": { "latitude": 51.508, "longitude": -0.128}, "radius": 200 } }, "typeFilter": { "includedTypes": "restaurant" } } }'
Python (gRPC)
from google.maps import areainsights_v1 from google.maps.areainsights_v1.types import ( ComputeInsightsRequest , Filter , LocationFilter , TypeFilter , Insight ) from google.type import latlng_pb2 from google.oauth2 import service_account def get_area_insights (): # Initialize the client credentials = service_account . Credentials . from_service_account_file ( ' path/to/service_account.json ' , scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ] ) client = areainsights_v1 . AreaInsightsClient ( credentials = credentials ) # Create location filter with circle lat_lng = latlng_pb2 . LatLng ( latitude = 51.508 , longitude =- 0.128 ) location_filter = LocationFilter ( circle = LocationFilter . Circle ( lat_lng = lat_lng , radius = 200 ) ) # Create type filter type_filter = TypeFilter ( included_types = [ "restaurant" ] ) # Create the main filter filter = Filter ( location_filter = location_filter , type_filter = type_filter ) # Create the request request = ComputeInsightsRequest ( insights = [ Insight . INSIGHT_COUNT , Insight . INSIGHT_PLACES ], filter = filter ) try : # Make the request response = client . compute_insights ( request = request ) # Print results print ( f "Total count: { response . count } " ) print ( " \n Places found:" ) for place in response . place_insights : print ( f "Place ID: { place . place } " ) except Exception as e : print ( f "Error occurred: { e } " ) if __name__ == "__main__" : get_area_insights ()
Exclude place types
You can exclude place types from the count.
The following request is the same as the first example, but adds excludedTypes
to the typeFilters
. You can use either a string or an array
of strings for the includedTypes
and excludedTypes
.
This example excludes two place types: cafe
and bakery
, from the restaurant
count.
Rest
curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \ --header 'X-Goog-Api-Key: API_KEY ' \ --header 'Content-Type: application/json' \ --data '{ "insights": ["INSIGHT_COUNT", "INSIGHT_PLACES"], "filter": { "locationFilter": { "circle": { "latLng": { "latitude": 51.508, "longitude": -0.128}, "radius": 200 } }, "typeFilter": { "includedTypes": "restaurant", "excludedTypes": [ "cafe", "bakery" ] } } }'
Python (gRPC)
from google.maps import areainsights_v1 from google.maps.areainsights_v1.types import ( ComputeInsightsRequest , Filter , LocationFilter , TypeFilter , Insight ) from google.type import latlng_pb2 from google.oauth2 import service_account def get_area_insights (): # Initialize the client with service account credentials = service_account . Credentials . from_service_account_file ( ' path/to/service_account.json ' , scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ] ) client = areainsights_v1 . AreaInsightsClient ( credentials = credentials ) # Create location filter with circle lat_lng = latlng_pb2 . LatLng ( latitude = 51.508 , longitude =- 0.128 ) location_filter = LocationFilter ( circle = LocationFilter . Circle ( lat_lng = lat_lng , radius = 200 ) ) # Create type filter with both included and excluded types type_filter = TypeFilter ( included_types = [ "restaurant" ], excluded_types = [ "cafe" , "bakery" ] ) # Create the main filter filter = Filter ( location_filter = location_filter , type_filter = type_filter ) # Create the request request = ComputeInsightsRequest ( insights = [ Insight . INSIGHT_COUNT , Insight . INSIGHT_PLACES ], filter = filter ) try : # Make the request response = client . compute_insights ( request = request ) # Print results print ( f "Total count: { response . count } " ) print ( " \n Places found:" ) for place in response . place_insights : print ( f "Place ID: { place . place } " ) except Exception as e : print ( f "Error occurred: { e } " ) if __name__ == "__main__" : get_area_insights ()
Use primary type
This example modifies the request from the first example to include only places
that have a primaryType
of restaurant
in the count.
Rest
curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \ --header 'X-Goog-Api-Key: API_KEY ' \ --header 'Content-Type: application/json' \ --data '{ "insights": ["INSIGHT_COUNT", "INSIGHT_PLACES"], "filter": { "locationFilter": { "circle": { "latLng": { "latitude": 51.508, "longitude": -0.128}, "radius": 200 } }, "typeFilter": { "includedPrimaryTypes": "restaurant" } } }'
Python (gRPC)
from google.maps import areainsights_v1 from google.maps.areainsights_v1.types import ( ComputeInsightsRequest , Filter , LocationFilter , TypeFilter , Insight ) from google.type import latlng_pb2 from google.oauth2 import service_account def get_area_insights (): # Initialize the client with service account credentials = service_account . Credentials . from_service_account_file ( ' path/to/service_account.json ' , scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ] ) client = areainsights_v1 . AreaInsightsClient ( credentials = credentials ) # Create location filter with circle lat_lng = latlng_pb2 . LatLng ( latitude = 51.508 , longitude =- 0.128 ) location_filter = LocationFilter ( circle = LocationFilter . Circle ( lat_lng = lat_lng , radius = 200 ) ) # Create type filter with primary types type_filter = TypeFilter ( included_primary_types = [ "restaurant" ] ) # Create the main filter filter = Filter ( location_filter = location_filter , type_filter = type_filter ) # Create the request request = ComputeInsightsRequest ( insights = [ Insight . INSIGHT_COUNT , Insight . INSIGHT_PLACES ], filter = filter ) try : # Make the request response = client . compute_insights ( request = request ) # Print results print ( f "Total count: { response . count } " ) print ( " \n Places found:" ) for place in response . place_insights : print ( f "Place ID: { place . place } " ) except Exception as e : print ( f "Error occurred: { e } " ) if __name__ == "__main__" : get_area_insights ()
Custom polygon
This example demonstrates how to use a custom polygon to define your search
area. Keep in mind that specifying INSIGHTS_PLACES
restricts the search to
areas small enough to return up to 100 place IDs. For larger areas, use INSIGHTS_COUNT
to bypass this limitation so that the service won't need to
return individual place IDs.
As before, the place type used is restaurant
. This example also introduces
three other filters:
-
operatingStatus
: This example counts only operational places. -
priceLevel
: This example counts only inexpensive and moderately priced places. -
ratingFilter
: This example counts only places with a review score between 4.0 and 5.0.
Rest
curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \ --header 'X-Goog-Api-Key: API_KEY ' \ --header 'Content-Type: application/json' \ --data '{ "insights": [ "INSIGHT_COUNT" ], "filter": { "locationFilter": { "customArea": { "polygon": { "coordinates": [ { "latitude": 37.776, "longitude": -122.666 }, { "latitude": 37.130, "longitude": -121.898 }, { "latitude": 37.326, "longitude": -121.598 }, { "latitude": 37.912, "longitude": -122.247 }, { "latitude": 37.776, "longitude": -122.666 } ] } } }, "typeFilter": { "includedTypes": "restaurant" }, "operatingStatus": [ "OPERATING_STATUS_OPERATIONAL" ], "priceLevels": [ "PRICE_LEVEL_INEXPENSIVE", "PRICE_LEVEL_MODERATE" ], "ratingFilter": { "minRating": 4.0, "maxRating": 5.0 } } }'
Python (gRPC)
from google.maps import areainsights_v1 from google.maps.areainsights_v1.types import ( ComputeInsightsRequest , Filter , LocationFilter , TypeFilter , Insight , RatingFilter , OperatingStatus , PriceLevel ) from google.type import latlng_pb2 from google.oauth2 import service_account def get_area_insights (): # Initialize the client with service account credentials = service_account . Credentials . from_service_account_file ( ' path/to/service_account.json ' , scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ] ) client = areainsights_v1 . AreaInsightsClient ( credentials = credentials ) # Create coordinates for the polygon coordinates = [ latlng_pb2 . LatLng ( latitude = 37.776 , longitude =- 122.666 ), latlng_pb2 . LatLng ( latitude = 37.130 , longitude =- 121.898 ), latlng_pb2 . LatLng ( latitude = 37.326 , longitude =- 121.598 ), latlng_pb2 . LatLng ( latitude = 37.912 , longitude =- 122.247 ), latlng_pb2 . LatLng ( latitude = 37.776 , longitude =- 122.666 ) # Closing point ] # Create custom area with polygon using the nested structure location_filter = LocationFilter ( custom_area = LocationFilter . CustomArea ( polygon = LocationFilter . CustomArea . Polygon ( coordinates = coordinates ) ) ) # Create type filter type_filter = TypeFilter ( included_types = [ "restaurant" ] ) # Create rating filter rating_filter = RatingFilter ( min_rating = 4.0 , max_rating = 5.0 ) # Create the main filter filter = Filter ( location_filter = location_filter , type_filter = type_filter , operating_status = [ OperatingStatus . OPERATING_STATUS_OPERATIONAL ], price_levels = [ PriceLevel . PRICE_LEVEL_INEXPENSIVE , PriceLevel . PRICE_LEVEL_MODERATE ], rating_filter = rating_filter ) # Create the request request = ComputeInsightsRequest ( insights = [ Insight . INSIGHT_COUNT ], filter = filter ) try : # Make the request response = client . compute_insights ( request = request ) # Print results print ( f "Total count: { response . count } " ) except Exception as e : print ( f "Error occurred: { e } " ) if __name__ == "__main__" : get_area_insights ()
Geographical area
This example uses a Geographical Area
place ID to set the search area.
These place IDs include the geometry of a place, such as a town or city. The
place ID used here is ChIJiQHsW0m3j4ARm69rRkrUF3w
, which corresponds to the
city of Mountain View, California
.
Passing the place ID to the Places Aggregate API sets the search area to the bounds
of the geographic area. The place ID is passed using place
, in the format places/ place_ID
.
You can obtain a Geographical Area place ID in any of the following ways:
- Place ID Finder
- Geocoding API
- Text Search (New)
- Nearby Search (New)
- Address Validation API
- Place Autocomplete
Rest
curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \ --header 'X-Goog-Api-Key: API_KEY ' \ --header 'Content-Type: application/json' \ --data '{ "insights": [ "INSIGHT_COUNT" ], "filter": { "locationFilter": { "region": { "place": "places/ChIJiQHsW0m3j4ARm69rRkrUF3w" } }, "typeFilter": { "includedTypes": [ "restaurant" ] } } }'
Python (gRPC)
from google.maps import areainsights_v1 from google.maps.areainsights_v1.types import ( ComputeInsightsRequest , Filter , LocationFilter , TypeFilter , Insight ) from google.oauth2 import service_account def get_area_insights (): # Initialize the client with service account credentials = service_account . Credentials . from_service_account_file ( ' path/to/service_account.json ' , scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ] ) client = areainsights_v1 . AreaInsightsClient ( credentials = credentials ) # Create location filter with region location_filter = LocationFilter ( region = LocationFilter . Region ( place = "places/ChIJiQHsW0m3j4ARm69rRkrUF3w" ) ) # Create type filter type_filter = TypeFilter ( included_types = [ "restaurant" ] ) # Create the main filter filter = Filter ( location_filter = location_filter , type_filter = type_filter ) # Create the request request = ComputeInsightsRequest ( insights = [ Insight . INSIGHT_COUNT ], filter = filter ) try : # Make the request response = client . compute_insights ( request = request ) # Print results print ( f "Total count: { response . count } " ) except Exception as e : print ( f "Error occurred: { e } " ) if __name__ == "__main__" : get_area_insights ()