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

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

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

  • לספרייה מדור קודם PlacesService יש שיטה nearbySearch() שמאפשרת לחפש מקומות באזור מוגדר לפי מילת מפתח או סוג.
  • למחלקת Place יש שיטה searchNearby() שמאפשרת לחפש מקומות באזור מוגדר לפי סוג המקום, תוך שימוש במבחר מורחב של שדות נתוני מקומות וסוגי מקומות, כדי להגביר את הגמישות.

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

‫PlacesService (השיטה הקודמת) Place (חדש)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
נדרש שימוש בקריאה חוזרת כדי לטפל באובייקט התוצאות ובgoogle.maps.places.PlacesServiceStatus התגובה. משתמש ב-Promises ופועל באופן אסינכרוני.
נדרשת בדיקת PlacesServiceStatus. אין צורך בבדיקת סטטוס, אפשר להשתמש בטיפול רגיל בשגיאות. מידע נוסף
תומך רק בהטיית מיקום. יש תמיכה בהטיה לפי מיקום ובהגבלת מיקום.
מחזירה את כל שדות הנתונים הזמינים (קבוצת משנה של השדות הנתמכים). אי אפשר להגביל את השאילתה לשדות ספציפיים. הפונקציה מחזירה רק את שדות הנתונים של המקום שביקשתם. המחלקה Place מציעה מבחר מורחב של שדות שמתעדכנים באופן קבוע.
מוגבל לקבוצה קבועה של סוגי מקומות. גישה למבחר מורחב ומתעדכן באופן קבוע של סוגי מקומות.
חיפוש נתמך מבוסס-טקסט עם מילת המפתח. חיפוש מבוסס-טקסט לא נתמך, צריך להשתמש במקום זאת בחיפוש טקסט (חדש).

השוואת קוד

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

חיפוש בסביבה (גרסה קודמת)

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

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

  const marker = new google.maps.Marker({
    map,
    position: place.geometry.location,
    title: place.name,
  });
}

מידע נוסף

חיפוש בסביבה (חדש)

הגרסה החדשה של "חיפוש בסביבה" משפרת את הגרסה הקודמת בדרכים הבאות:

  • אפשרות לציין אילו שדות של נתוני מקומות יוחזרו.
  • שימוש ב-Promises שמאפשר פעולה אסינכרונית.
  • אין צורך לבדוק את הסטטוס של PlacesService. אפשר להשתמש במקומו בטיפול רגיל בשגיאות.

בקטע הקוד הבא מוצגת פונקציה ששולחת בקשה לחיפוש בסביבה של מסעדות. בדוגמה הזו מוצגת האפשרות rankPreference לדירוג תוצאות החיפוש לפי פופולריות (בגרסה הקודמת, הדירוג צוין באמצעות האפשרות rankBy). מכיוון שהשיטה searchNearby() משתמשת באופרטור await אפשר להשתמש בה רק בתוך פונקציה async.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    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");
  }
}

מידע נוסף