מעבר לממשק החדש של חיפוש המקומות

מפתחים באזור הכלכלי האירופי (EEA)

בדף הזה מוסברים ההבדלים בין תכונות חיפוש המקומות מבוססות הטקסט בכיתה Place (החדשה) לבין אלה שבכיתה PlacesService (הקודמת), ומוצגים כמה קטעי קוד להשוואה.

בגרסה הקודמת של PlacesService יש את השיטות הבאות לחיפוש מבוסס-טקסט:

  • השיטה findPlaceFromQuery(), שמקבלת שאילתת טקסט ומחזירה תוצאה של מקום אחד, ותומכת בשימוש בשדות נתונים של מקומות.
  • השיטה findPlaceFromPhoneNumber(), שמאפשרת לחפש מקום באמצעות מספר טלפון, ותומכת בשימוש בשדות נתונים של מקומות.
  • ה-method‏ textSearch(), שמקבלת שאילתת טקסט ומחזירה רשימה של תוצאות מקומות. ‫textSearch() היא גרסה ישנה יותר, ואין בה תמיכה בשימוש בשדות נתונים של מקומות.

הכיתה החדשה Place מציעה את השיטה Place.searchByText(), שמאפשרת לחפש מקומות באמצעות שאילתת טקסט או מספר טלפון, ולהתאים אישית את החיפושים באמצעות מבחר מורחב של שדות נתונים וסוגים של מקומות שמתעדכנים באופן קבוע.

בטבלה הבאה מפורטים כמה מההבדלים העיקריים בשיטות לחיפוש מקומות בין המחלקה Place לבין PlacesService:

‫PlacesService (השיטה הקודמת) Place (חדש)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
אפשרויות שאילתה מוגבלות. אפשרויות שאילתה נרחבות יותר.
צריך להשתמש בקריאה חוזרת (callback) כדי לטפל באובייקט התוצאות ובתגובה של google.maps.places.PlacesServiceStatus. משתמש ב-Promises ופועל באופן אסינכרוני.
נדרשת בדיקת PlacesServiceStatus. אין בדיקת סטטוס נדרשת, אפשר להשתמש בטיפול בשגיאות רגיל. מידע נוסף
תומך רק בהטיית מיקום. תומך בהעדפת מיקום ובהגבלת מיקום.
שדות הנתונים של המקומות מעוצבים באמצעות קו תחתון בין המילים. שדות הנתונים של המקום מעוצבים בפורמט קאמל קייס.
מחזירה תוצאה של מקום אחד. הפונקציה מחזירה עד 20 תוצאות של מקומות.
מוגבל לקבוצה קבועה של סוגי מקומות ושדות נתונים של מקומות. מציע מבחר מורחב של סוגי מקומות ושדות נתונים של מקומות שמתעדכנים באופן קבוע.
textSearch()
searchByText()
מחזירה את כל שדות הנתונים הזמינים (קבוצת משנה של השדות הנתמכים). אי אפשר להגביל את השאילתה לשדות ספציפיים. היא מחזירה רק את שדות הנתונים של המקום שביקשתם.

השוואת קודים

בקטע הזה אנחנו משווים בין קודים של שיטות לחיפוש טקסט כדי להמחיש את ההבדלים בין Places Service לבין המחלקה Place. קטעי הקוד מציגים את הקוד שנדרש בכל API כדי לבצע בקשת חיפוש מבוססת-טקסט.

שירות Places (דור קודם)

בקטע הקוד הבא מוצג שימוש ב-method‏ 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);
    }
  });
}

מידע נוסף

חיפוש טקסט (חדש)

בקטע הקוד הבא מוצג שימוש ב-method‏ 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");
  }
}

ה-method‏ searchByText() תומך בהרבה יותר אפשרויות בקשה בהשוואה לגרסה הקודמת, כולל:

  • includedType שמאפשר להגביל את החיפושים לסוג מקום ספציפי.
  • isOpenNow, שמאפשר להגביל את החיפושים כך שיוחזרו רק מקומות פתוחים.
  • minRating, שמאפשר לסנן תוצאות מתחת למגבלה שצוינה (לדוגמה, להחזיר רק מקומות עם שלושה כוכבים או יותר).
  • ‫locationRestriction, שמשמיט תוצאות מחוץ למיקום שצוין (גם locationBias נתמך).

מידע נוסף