Examples

This section covers a series of example requests to the Places Aggregate API.

Client library installation

To use the Python (gRPC) examples, you must install the specific client library for the Places Aggregate API and the Google Auth library:

pip  
install  
google-maps-areainsights  
google-auth

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 within typeFilters .
  • The count is requested using INSIGHTS_COUNT , and the place IDs are requested using INSIGHTS_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:

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 
 () 
Design a Mobile Site
View Site in Mobile | Classic
Share by: