टेक्स्ट से खोजें (नई सुविधा) में, टेक्स्ट क्वेरी का इस्तेमाल किया जाता है. इसके बाद, क्वेरी से मैच करने वाली जगहों की सूची दिखती है.
टेक्स्ट से खोजें (नया वर्शन), किसी स्ट्रिंग के आधार पर जगहों के सेट के बारे में जानकारी दिखाता है. उदाहरण के लिए, "न्यूयॉर्क में पिज़्ज़ा" या "ओटावा के आस-पास जूतों की दुकानें" या "123 मेन स्ट्रीट". यह सेवा, टेक्स्ट स्ट्रिंग और सेट की गई जगह के हिसाब से जगहों की सूची दिखाती है. टेक्स्ट से खोजें (नया वर्शन) की मदद से, जगहों को उनके टाइप के हिसाब से खोजा जा सकता है. साथ ही, कारोबार के खुले होने का समय और रेटिंग जैसी शर्तों का इस्तेमाल करके, नतीजों को फ़िल्टर किया जा सकता है. इसके अलावा, नतीजों को किसी खास जगह तक सीमित किया जा सकता है या किसी खास जगह के हिसाब से नतीजे दिखाए जा सकते हैं.
टेक्स्ट से खोजें (नया वर्शन) का इस्तेमाल करने के लिए, आपको अपने Google Cloud प्रोजेक्ट पर "Places API (नया वर्शन)" चालू करना होगा. ज़्यादा जानकारी के लिए, शुरू करें लेख पढ़ें.
टेक्स्ट क्वेरी की मदद से जगहें ढूंढना
टेक्स्ट क्वेरी या फ़ोन नंबर के आधार पर जगहों की सूची पाने के लिए, searchByText को कॉल करें.
अनुरोध का इस्तेमाल करके, खोज के पैरामीटर तय करें. इसके बाद, searchByText() को कॉल करें. नतीजे, Place ऑब्जेक्ट की सूची के तौर पर दिखाए जाते हैं. इससे आपको जगह की जानकारी मिल सकती है. नीचे दिए गए स्निपेट में, searchByText को किए गए अनुरोध और कॉल का उदाहरण दिया गया है:
TypeScript
const request = { textQuery: query, fields: ['displayName', 'location', 'businessStatus'], includedType: '', // Restrict query to a specific type (leave blank for any). useStrictTypeFiltering: true, locationRestriction: map.getBounds(), isOpenNow: true, language: 'en-US', maxResultCount: 8, minRating: 1, // Specify a minimum rating. region: 'us', }; const { places } = await Place.searchByText(request);
JavaScript
const request = { textQuery: query, fields: ['displayName', 'location', 'businessStatus'], includedType: '', // Restrict query to a specific type (leave blank for any). useStrictTypeFiltering: true, locationRestriction: map.getBounds(), isOpenNow: true, language: 'en-US', maxResultCount: 8, minRating: 1, // Specify a minimum rating. region: 'us', }; const { places } = await Place.searchByText(request);
textQueryपैरामीटर की मदद से खोजने के लिए, टेक्स्ट क्वेरी या फ़ोन नंबर डालें.fieldsपैरामीटर (ज़रूरी) का इस्तेमाल करके, कैमल केस में एक या इससे ज़्यादा डेटा फ़ील्ड की कॉमा लगाकर अलग की गई लिस्ट डालें. अनुरोध की कीमत, अनुरोध किए गए फ़ील्ड के हिसाब से तय होती है. डेटा फ़ील्ड चुनें देखें.- सिर्फ़ तय किए गए टाइप के नतीजे पाने के लिए,
includedTypeपैरामीटर का इस्तेमाल करें. - टेक्स्ट से खोज के नतीजों को किसी खास इलाके तक सीमित करने या उस इलाके के हिसाब से नतीजे दिखाने के लिए,
locationBiasयाlocationRestrictionका इस्तेमाल करें.
अगर क्वेरी में कोई फ़ोन नंबर शामिल है, तो क्षेत्र पैरामीटर सेट होना चाहिए. उदाहरण के लिए, अगर जापान में किसी जगह को खोजने के लिए फ़ोन नंबर का इस्तेमाल किया जाता है और अनुरोध करने वाला डोमेन jp है, तो आपको region पैरामीटर को 'jp' पर सेट करना होगा. अगर अनुरोध में region को शामिल नहीं किया जाता है, तो एपीआई डिफ़ॉल्ट रूप से अमेरिका ('us') को चुनेगा.
Place ऑब्जेक्ट की सूची के तौर पर दिखाए जाते हैं. इनसे आपको जगह की जानकारी मिल सकती है.
उदाहरण
इस उदाहरण में, दी गई क्वेरी के टेक्स्ट के साथ searchByText को कॉल किया गया है. इसके बाद, नतीजे दिखाने के लिए, मैप में क्लिक किए जा सकने वाले मार्कर जोड़े गए हैं.
TypeScript
let map: google.maps.Map; let markers: Record<string, google.maps.marker.AdvancedMarkerElement> = {}; let infoWindow: google.maps.InfoWindow; async function init() { const [{ Map, InfoWindow }, { ControlPosition }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('core'), ]); const center = { lat: 37.4161493, lng: -122.0812166 }; map = new Map(document.getElementById('map')!, { center, zoom: 11, mapTypeControl: false, mapId: 'DEMO_MAP_ID', }); const textInput = document.getElementById('text-input') as HTMLInputElement; const textInputButton = document.getElementById( 'text-input-button' ) as HTMLButtonElement; const card = document.getElementById('text-input-card')!; map.controls[ControlPosition.TOP_LEFT].push(card); textInputButton.addEventListener('click', () => { void findPlaces(textInput.value); }); textInput.addEventListener('keydown', (event) => { if (event.key === 'Enter') { void findPlaces(textInput.value); } }); infoWindow = new InfoWindow(); } async function findPlaces(query: string) { const [{ Place }, { AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('places'), google.maps.importLibrary('marker'), ]); const request = { textQuery: query, fields: ['displayName', 'location', 'businessStatus'], includedType: '', // Restrict query to a specific type (leave blank for any). useStrictTypeFiltering: true, locationRestriction: map.getBounds(), isOpenNow: true, language: 'en-US', maxResultCount: 8, minRating: 1, // Specify a minimum rating. region: 'us', }; const { places } = await Place.searchByText(request); if (places.length) { const { LatLngBounds } = await google.maps.importLibrary('core'); const bounds = new LatLngBounds(); // First remove all existing markers. for (const id in markers) { markers[id].map = null; } markers = {}; // Loop through and get all the results. places.forEach((place: google.maps.places.Place) => { const marker = new AdvancedMarkerElement({ map, position: place.location, title: place.displayName, gmpClickable: true, }); markers[place.id] = marker; marker.addEventListener('gmp-click', () => { map.panTo(place.location!); updateInfoWindow(place.displayName!, place.id, marker); }); if (place.location != null) { bounds.extend(place.location); } }); map.fitBounds(bounds); } else { console.log('No results'); } } // Helper function to create an info window. function updateInfoWindow( title: string | Element | null, content: string | Element | null, anchor: google.maps.marker.AdvancedMarkerElement ) { infoWindow.setContent(content); infoWindow.setHeaderContent(title); infoWindow.open({ map, anchor, shouldFocus: false, }); } void init();
JavaScript
let map; let markers = {}; let infoWindow; async function init() { const [{ Map, InfoWindow }, { ControlPosition }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('core'), ]); const center = { lat: 37.4161493, lng: -122.0812166 }; map = new Map(document.getElementById('map'), { center, zoom: 11, mapTypeControl: false, mapId: 'DEMO_MAP_ID', }); const textInput = document.getElementById('text-input'); const textInputButton = document.getElementById('text-input-button'); const card = document.getElementById('text-input-card'); map.controls[ControlPosition.TOP_LEFT].push(card); textInputButton.addEventListener('click', () => { void findPlaces(textInput.value); }); textInput.addEventListener('keydown', (event) => { if (event.key === 'Enter') { void findPlaces(textInput.value); } }); infoWindow = new InfoWindow(); } async function findPlaces(query) { const [{ Place }, { AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('places'), google.maps.importLibrary('marker'), ]); const request = { textQuery: query, fields: ['displayName', 'location', 'businessStatus'], includedType: '', // Restrict query to a specific type (leave blank for any). useStrictTypeFiltering: true, locationRestriction: map.getBounds(), isOpenNow: true, language: 'en-US', maxResultCount: 8, minRating: 1, // Specify a minimum rating. region: 'us', }; const { places } = await Place.searchByText(request); if (places.length) { const { LatLngBounds } = await google.maps.importLibrary('core'); const bounds = new LatLngBounds(); // First remove all existing markers. for (const id in markers) { markers[id].map = null; } markers = {}; // Loop through and get all the results. places.forEach((place) => { const marker = new AdvancedMarkerElement({ map, position: place.location, title: place.displayName, gmpClickable: true, }); markers[place.id] = marker; marker.addEventListener('gmp-click', () => { map.panTo(place.location); updateInfoWindow(place.displayName, place.id, marker); }); if (place.location != null) { bounds.extend(place.location); } }); map.fitBounds(bounds); } else { console.log('No results'); } } // Helper function to create an info window. function updateInfoWindow(title, content, anchor) { infoWindow.setContent(content); infoWindow.setHeaderContent(title); infoWindow.open({ map, anchor, shouldFocus: false, }); } void init();
सीएसएस
/* * 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; } #text-input-card { width: 25%; background-color: #fff; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; margin: 10px; padding: 5px; font-family: Roboto, sans-serif; font-size: large; font-weight: bold; } #text-input { width: 100%; padding: 10px; margin: 0; box-sizing: border-box; } #text-input-button { display: inline-block; margin-top: 0.5rem; width: auto; padding: 0.6rem 0.75rem; font-size: 0.875rem; font-weight: 500; color: #fff; background-color: #2563eb; border: none; border-radius: 0.375rem; cursor: pointer; transition: background-color 0.15s ease-in-out; text-align: center; }
एचटीएमएल
<html>
<head>
<title>Text Search</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(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: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<div id="text-input-card">
<input
type="text"
id="text-input"
placeholder="Search for a place" />
<input type="button" id="text-input-button" value="Search" />
</div>
<div id="map"></div>
</body>
</html>डेटा फ़ील्ड चुनना
खोज के लिए किए गए हर अनुरोध की कीमत, आपके अनुरोध किए गए फ़ील्ड के हिसाब से तय होती है. अनुरोध के लिए,
अनुरोध किए गए फ़ील्ड में से सबसे ज़्यादा कीमत वाले एसकेयू के हिसाब से,
एक बार बिल भेजा जाता है. उदाहरण के लिए, reviews को fields में जोड़ने पर, पूरे अनुरोध के लिए, टेक्स्ट से खोजें (Enterprise) + Atmosphere के हिसाब से बिल जनरेट होता है.
खोज के अनुरोधों को Text Search Pro पर बनाए रखने के लिए, सिर्फ़ उन फ़ील्ड का अनुरोध करें जो खोज के नतीजों में दिखते हैं. जैसे, id, displayName, formattedAddress, और location.
जब कोई उपयोगकर्ता किसी जगह को चुनता है, तो उस जगह पर fetchFields() को कॉल करें, ताकि reviews, nationalPhoneNumber या websiteURI जैसे फ़ील्ड मिल सकें.
हर fetchFields() कॉल, जगह की जानकारी का एक अलग अनुरोध होता है. इसके लिए, अनुरोध किए गए फ़ील्ड में से सबसे ज़्यादा कीमत वाले एसकेयू के हिसाब से बिल भेजा जाता है. इस तरीके से पैसे बचेंगे या नहीं, यह इस बात पर निर्भर करता है कि आपके उपयोगकर्ता कितनी जगहों की जानकारी खोलते हैं.
हर SKU को ट्रिगर करने वाले फ़ील्ड
इन फ़ील्ड से, टेक्स्ट से खोजें एसेंशियल्स (सिर्फ़ आईडी) एसकेयू ट्रिगर होता है:
idइन फ़ील्ड से, टेक्स्ट से खोजें Pro एसकेयू ट्रिगर होता है:
accessibilityOptions
addressComponents
adrFormatAddress
businessStatus
displayName
formattedAddress
googleMapsUri
iconBackgroundColor
location
photos
plusCode
svgIconMaskURI
types
utcOffsetMinutes
viewportइन फ़ील्ड से, टेक्स्ट सर्च एंटरप्राइज़ एसकेयू ट्रिगर होता है:
internationalPhoneNumber
nationalPhoneNumber
priceLevel
rating
regularOpeningHours
userRatingCount
websiteURIइन फ़ील्ड की वजह से, Text Search Enterprise + Atmosphere SKU ट्रिगर होता है:
allowsDogs
editorialSummary
evChargeOptions
fuelOptions
hasCurbsidePickup
hasDelivery
hasDineIn
hasLiveMusic
hasMenuForChildren
hasOutdoorSeating
hasRestroom
hasTakeout
hasWifi
isGoodForChildren
isGoodForGroups
isGoodForWatchingSports
isReservable
parkingOptions
paymentOptions
reviews
servesBeer
servesBreakfast
servesBrunch
servesCocktails
servesCoffee
servesDessert
servesDinner
servesLunch
servesVegetarianFood
servesWine
हर फ़ील्ड के एसकेयू के लिए, Place क्लास के डेटा फ़ील्ड देखें.