इस पेज पर, टेक्स्ट के आधार पर जगह खोजने की सुविधाओं के बीच के अंतर के बारे में बताया गया है. ये सुविधाएं, Place क्लास (नया वर्शन) और PlacesService (लेगसी वर्शन) में उपलब्ध हैं. साथ ही, तुलना करने के लिए कुछ कोड स्निपेट भी दिए गए हैं.
लेगसी PlacesService में, टेक्स्ट के आधार पर खोजने के ये तरीके मौजूद हैं:
findPlaceFromQuery()तरीका, जो टेक्स्ट क्वेरी लेता है और किसी जगह का एक नतीजा दिखाता है. साथ ही, जगह के डेटा फ़ील्ड के इस्तेमाल के साथ काम करता है.findPlaceFromPhoneNumber()तरीका, जिसकी मदद से फ़ोन नंबर का इस्तेमाल करके किसी जगह को खोजा जा सकता है. साथ ही, यह जगह के डेटा फ़ील्ड के इस्तेमाल के साथ काम करता है.textSearch()तरीका, जो टेक्स्ट क्वेरी लेता है और जगह के नतीजों की सूची दिखाता है.textSearch()पुराना है और इसमें जगह के डेटा फ़ील्ड का इस्तेमाल नहीं किया जा सकता.
नई Place क्लास में Place.searchByText() तरीका उपलब्ध है. इसकी मदद से, टेक्स्ट क्वेरी या फ़ोन नंबर का इस्तेमाल करके जगहों को खोजा जा सकता है. साथ ही, नियमित तौर पर अपडेट किए जाने वाले जगह के डेटा फ़ील्ड और जगह के टाइप के ज़्यादा विकल्पों का इस्तेमाल करके, अपनी खोजों को पसंद के मुताबिक बनाया जा सकता है.
यहां दी गई टेबल में, Place क्लास और PlacesService के बीच, Place Search के तरीकों में कुछ मुख्य अंतर बताए गए हैं:
PlacesService (लेगसी) |
Place (नया) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| क्वेरी के सीमित विकल्प. | क्वेरी के ज़्यादा विकल्प. |
नतीजों के ऑब्जेक्ट और google.maps.places.PlacesServiceStatus रिस्पॉन्स को मैनेज करने के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है. |
यह Promises का इस्तेमाल करता है और एसिंक्रोनस तरीके से काम करता है. |
इसके लिए, PlacesServiceStatus की जांच ज़रूरी है. |
स्टेटस की जांच करने की ज़रूरत नहीं है, स्टैंडर्ड गड़बड़ी को ठीक करने के लिए इस्तेमाल किया जा सकता है. ज़्यादा जानें. |
| यह सिर्फ़ जगह के हिसाब से नतीजे दिखाता है. | यह जगह के हिसाब से नतीजे दिखाने और जगह के हिसाब से पाबंदी लगाने की सुविधा के साथ काम करता है. |
| जगह की जानकारी वाले डेटा फ़ील्ड को स्नेक केस (स्पेसिंग को अंडरस्कोर में बदलना) का इस्तेमाल करके फ़ॉर्मैट किया जाता है. | जगह के डेटा फ़ील्ड को कैमल केस का इस्तेमाल करके फ़ॉर्मैट किया जाता है. |
| यह किसी एक जगह का नतीजा दिखाता है. | यह ज़्यादा से ज़्यादा 20 जगहों के नतीजे दिखाता है. |
| यह जगह के टाइप और जगह के डेटा फ़ील्ड के तय सेट तक सीमित है. | नियमित तौर पर अपडेट किए जाने वाले जगह के टाइप और जगह के डेटा फ़ील्ड के लिए, ज़्यादा विकल्प उपलब्ध कराता है. |
textSearch() |
searchByText() |
| यह फ़ंक्शन, उपलब्ध सभी डेटा फ़ील्ड दिखाता है. ये फ़ील्ड, इस्तेमाल किए जा सकने वाले फ़ील्ड का सबसेट होते हैं. इन्हें कुछ खास फ़ील्ड तक सीमित नहीं किया जा सकता. | यह सिर्फ़ अनुरोध किए गए जगह के डेटा फ़ील्ड दिखाता है. |
कोड की तुलना
इस सेक्शन में, टेक्स्ट से खोजने के तरीकों के लिए इस्तेमाल किए गए कोड की तुलना की गई है. इससे, Places सेवा और Place क्लास के बीच के अंतर को समझने में मदद मिलती है. कोड स्निपेट, टेक्स्ट के आधार पर खोज करने का अनुरोध करने के लिए, हर एपीआई पर ज़रूरी कोड दिखाते हैं.
Places Service (लेगसी)
यहां दिए गए कोड स्निपेट में, किसी जगह को खोजने के लिए findPlaceFromQuery() तरीके का इस्तेमाल करने का तरीका बताया गया है. अनुरोध सिंक्रोनस है और इसमें PlacesServiceStatus पर शर्त के साथ जांच शामिल है. जगह की जानकारी वाले ज़रूरी डेटा फ़ील्ड, अनुरोध के मुख्य हिस्से में बताए जाते हैं. इसे असल अनुरोध करने से पहले तय किया जाता है.
function findPlaces() {
const request = {
query: "Museum of Contemporary Art Australia",
fields: ["name", "geometry"],
};
// Create an instance of PlacesService.
service = new google.maps.places.PlacesService(map);
// Make a findPlaceFromQuery request.
service.findPlaceFromQuery(request, (results, status) => {
let place = results[0];
if (status === google.maps.places.PlacesServiceStatus.OK && results) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
map.setCenter(place.geometry.location);
}
});
}
ज़्यादा जानें
टेक्स्ट से खोजें (नया)
यहां दिए गए कोड स्निपेट में, जगहों को खोजने के लिए searchByText() तरीके का इस्तेमाल दिखाया गया है. अनुरोध एसिंक्रोनस है और इसके लिए स्टेटस की जांच करने की ज़रूरत नहीं है. हालांकि, स्टैंडर्ड गड़बड़ी को ठीक करने की सुविधा का इस्तेमाल किया जा सकता है. इस उदाहरण में, अनुरोध में 8 का maxResultCount शामिल है. वैल्यू 1 से 20 के बीच होनी चाहिए. यह फ़ंक्शन, नतीजों को लूप करता है और हर नतीजे के लिए एक मार्कर जोड़ता है. साथ ही, मार्कर की पोज़िशन के आधार पर इलाके के दायरे को अडजस्ट करता है. searchByText() वाला तरीका, await ऑपरेटर का इस्तेमाल करता है. इसलिए, इसका इस्तेमाल सिर्फ़ async फ़ंक्शन के अंदर किया जा सकता है.
async function findPlaces() {
// Define a request.
// The `fields` property is required; all others are optional.
const request = {
fields: ["displayName", "location", "businessStatus"],
textQuery: "Tacos in Mountain View",
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
// Call searchByText passing the request.
const { places } = await google.maps.places.Place.searchByText(request);
// Add a marker for each result.
if (places.length) {
const bounds = new google.maps.LatLngBounds();
places.forEach((place) => {
const markerView = new google.maps.marker.AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
bounds.extend(place.location);
console.log(place);
});
map.fitBounds(bounds);
} else {
console.log("No results");
}
}
searchByText() तरीके में, पिछले वर्शन की तुलना में अनुरोध के कई और विकल्प काम करते हैं. इनमें ये शामिल हैं:
includedType, जिसकी मदद से किसी खास तरह की जगह के हिसाब से खोज को सीमित किया जा सकता है.isOpenNow, जिसकी मदद से खोज के नतीजों को सिर्फ़ खुली हुई जगहों तक सीमित किया जा सकता है.minRatingइससे आपको तय की गई सीमा से कम रेटिंग वाले नतीजों को फ़िल्टर करने की सुविधा मिलती है. उदाहरण के लिए, सिर्फ़ तीन या उससे ज़्यादा स्टार वाले नतीजे दिखाना.locationRestriction, जो चुनी गई जगह से बाहर के नतीजे नहीं दिखाता. (locationBiasभी इस्तेमाल किया जा सकता है).