Text Search (New) takes a text query and returns a list of matching
places.
Text Search (New) returns information about a set of
places based on a string ? for example "pizza in New York" or "shoe stores near Ottawa" or
"123 Main Street". The service responds with a list of places matching the text string and any
location bias that has been set. Text Search (New) lets you search for
places by type, filter using criteria such as business hours and rating, and restrict or bias
results to a specific location.
To use Text Search (New), you must enable "Places API (New)" on your
Google Cloud project. See
Get started
for details.
Find places by text query
Call
searchByText
to return a list of places from a text query or phone number.
Specify search parameters using a request, and then call
searchByText
. Results are
returned as a list of
Place
objects, from which you can get
place details
. The
following snippet shows an example of a request and call to
searchByText
:
TypeScript
const request = {
textQuery: 'Tacos in Mountain View',
fields: ['displayName', 'location', 'businessStatus'],
includedType: 'restaurant',
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: 'en-US',
maxResultCount: 8,
minRating: 3.2,
region: 'us',
useStrictTypeFiltering: false,
};
//@ts-ignore
const { places } = await Place.searchByText(request);
JavaScript
const request = {
textQuery: "Tacos in Mountain View",
fields: ["displayName", "location", "businessStatus"],
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
//@ts-ignore
const { places } = await Place.searchByText(request);
- Specify a text query or phone number to search with the
textQuery
parameter.
- Use the
fields
parameter (required) to specify a comma-separated list of one or
more
data fields
in camel
case.
- Use the
includedType
parameter to return only results of the specified type.
- Use either
locationBias
or
locationRestriction
to bias or restrict
your text search results to a specific region.
See the full
list of properties.
If the query contains a phone number, the region parameter should be set. For example, if you
use a phone number to search for a place in Japan, and the requesting domain is
jp
,
you must set the
region
parameter to 'jp'. If
region
is omitted from
the request, the API will default to the United States ('us') region.
Results are returned as a list of
Place
objects, from which you can get
place details
.
Example
The following example uses
searchByText
to query for taco restaurants in the
Mountain View vicinity, and populates a map with markers to show the results.
TypeScript
let map;
let center;
async function initMap() {
const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary;
center = { lat: 37.4161493, lng: -122.0812166 };
map = new Map(document.getElementById('map') as HTMLElement, {
center: center,
zoom: 11,
mapId: 'DEMO_MAP_ID',
});
findPlaces();
}
async function findPlaces() {
const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary;
const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary;
const request = {
textQuery: 'Tacos in Mountain View',
fields: ['displayName', 'location', 'businessStatus'],
includedType: 'restaurant',
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: 'en-US',
maxResultCount: 8,
minRating: 3.2,
region: 'us',
useStrictTypeFiltering: false,
};
//@ts-ignore
const { places } = await Place.searchByText(request);
if (places.length) {
console.log(places);
const { LatLngBounds } = await google.maps.importLibrary("core") as google.maps.CoreLibrary;
const bounds = new LatLngBounds();
// Loop through and get all the results.
places.forEach((place) => {
const markerView = new AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
bounds.extend(place.location as google.maps.LatLng);
console.log(place);
});
map.fitBounds(bounds);
} else {
console.log('No results');
}
}
initMap();
JavaScript
let map;
let center;
async function initMap() {
const { Map } = await google.maps.importLibrary("maps");
center = { lat: 37.4161493, lng: -122.0812166 };
map = new Map(document.getElementById("map"), {
center: center,
zoom: 11,
mapId: "DEMO_MAP_ID",
});
findPlaces();
}
async function findPlaces() {
const { Place } = await google.maps.importLibrary("places");
const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
const request = {
textQuery: "Tacos in Mountain View",
fields: ["displayName", "location", "businessStatus"],
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
//@ts-ignore
const { places } = await Place.searchByText(request);
if (places.length) {
console.log(places);
const { LatLngBounds } = await google.maps.importLibrary("core");
const bounds = new LatLngBounds();
// Loop through and get all the results.
places.forEach((place) => {
const markerView = new AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
bounds.extend(place.location);
console.log(place);
});
map.fitBounds(bounds);
} else {
console.log("No results");
}
}
initMap();
CSS
/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
HTML
<html>
<head>
<title>Text Search</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<div id="map"></div>
<!-- prettier-ignore -->
<script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script>
</body>
</html>
Try Sample