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

מפתחים באזור הכלכלי האירופי (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 class. קטעי הקוד מציגים את הקוד שנדרש בכל 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,
  });
}

מידע נוסף

חיפוש בקרבת מקום (חדש)

הגרסה החדשה של Nearby Search משופרת לעומת הגרסה הקודמת בכמה דרכים:

  • אפשרות לציין אילו שדות של נתוני מקומות יוחזרו.
  • שימוש ב-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");
  }
}

מידע נוסף