जगह की जानकारी के नए वर्शन पर माइग्रेट करना

इस पेज पर, Place क्लास (नई) और PlacesService (लेगसी) में, टेक्स्ट के आधार पर जगह खोजने की सुविधाओं के बीच के अंतर के बारे में बताया गया है. साथ ही, तुलना करने के लिए कुछ कोड स्निपेट भी दिए गए हैं.

लेगसी PlacesService में, टेक्स्ट पर आधारित खोज के ये तरीके हैं:

  • findPlaceFromQuery() तरीका, टेक्स्ट क्वेरी लेता है और एक जगह का नतीजा दिखाता है. साथ ही, जगह की जानकारी वाले फ़ील्ड का इस्तेमाल करता है.
  • findPlaceFromPhoneNumber() तरीका, जिसकी मदद से फ़ोन नंबर का इस्तेमाल करके किसी जगह को खोजा जा सकता है. साथ ही, यह जगह के डेटा फ़ील्ड का इस्तेमाल करता है.
  • textSearch() वह तरीका है जो टेक्स्ट क्वेरी लेता है और जगह के नतीजों की सूची दिखाता है. textSearch() पुराना है और इसमें जगह की जानकारी वाले डेटा फ़ील्ड का इस्तेमाल नहीं किया जा सकता.

नई Place क्लास में Place.searchByText() तरीका उपलब्ध है. इसकी मदद से, टेक्स्ट क्वेरी या फ़ोन नंबर का इस्तेमाल करके जगहें खोजी जा सकती हैं. साथ ही, जगह के डेटा फ़ील्ड और जगह के टाइप के बड़े सेट का इस्तेमाल करके, अपनी खोजों को पसंद के मुताबिक बनाया जा सकता है. ये डेटा फ़ील्ड और जगह के टाइप, नियमित तौर पर अपडेट किए जाते हैं.

यहां दी गई टेबल में, Place क्लास और PlacesService के बीच, जगह खोजने के तरीकों में कुछ मुख्य अंतर बताए गए हैं:

PlacesService (लेगसी) Place (नया)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
क्वेरी के सीमित विकल्प. क्वेरी के ज़्यादा विकल्प.
नतीजों के ऑब्जेक्ट और google.maps.places.PlacesServiceStatus रिस्पॉन्स को मैनेज करने के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है. यह Promises का इस्तेमाल करता है और एसिंक्रोनस तरीके से काम करता है.
PlacesServiceStatus पर सही का निशान लगाना ज़रूरी है. स्थिति की जांच ज़रूरी नहीं है. गड़बड़ी को मैनेज करने के लिए, स्टैंडर्ड तरीके का इस्तेमाल किया जा सकता है.
सिर्फ़ जगह के हिसाब से रुझान का पता लगाने की सुविधा के साथ काम करता है. जगह के हिसाब से रुझान और जगह के हिसाब से पाबंदी की सुविधा के साथ काम करता है.
जगह के डेटा फ़ील्ड को स्नेक केस का इस्तेमाल करके फ़ॉर्मैट किया जाता है. जगह के डेटा फ़ील्ड को कैमल केस का इस्तेमाल करके फ़ॉर्मैट किया जाता है.
किसी एक जगह का नतीजा दिखाता है. इससे जगह की जानकारी के ज़्यादा से ज़्यादा 20 नतीजे मिलते हैं.
यह जगह के टाइप और जगह के डेटा फ़ील्ड के तय किए गए सेट तक ही सीमित है. इसमें, नियमित तौर पर अपडेट होने वाले जगह के टाइप और जगह के डेटा फ़ील्ड का बड़ा विकल्प मिलता है.
textSearch()
searchByText()
सभी उपलब्ध डेटा फ़ील्ड दिखाता है (काम करने वाले फ़ील्ड का सबसेट); इसे खास फ़ील्ड तक सीमित नहीं किया जा सकता. सिर्फ़ मांगे गए जगह के डेटा फ़ील्ड दिखाता है.

कोड की तुलना

इस सेक्शन में, टेक्स्ट खोज के तरीकों के लिए कोड की तुलना की गई है, ताकि Places सेवा और जगह की जानकारी देने वाली क्लास के बीच के अंतर को दिखाया जा सके. कोड स्निपेट में, टेक्स्ट पर आधारित खोज का अनुरोध करने के लिए, हर एपीआई पर ज़रूरी कोड दिखता है.

जगहों की जानकारी देने वाली सेवा (लेगसी)

नीचे दिए गए कोड स्निपेट में, किसी जगह को खोजने के लिए 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() तरीके का इस्तेमाल करने का तरीका बताया गया है. अनुरोध एसिंक्रोनस है और इसके लिए स्थिति की जांच की ज़रूरत नहीं होती है (गड़बड़ी को मैनेज करने के लिए स्टैंडर्ड तरीके का इस्तेमाल किया जा सकता है). इस उदाहरण में, अनुरोध में maxResultCount की वैल्यू 8 है. यह वैल्यू 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 भी काम करता है).

ज़्यादा जानें