مهاجرت به جستجوی جدید Nearby، مهاجرت به جستجوی جدید Nearby

توسعه‌دهندگان منطقه اقتصادی اروپا (EEA)

این صفحه تفاوت‌های بین جستجوی نزدیک (neighbory search) که در کلاس Place (جدید) و PlacesService (قدیمی) استفاده می‌شود را توضیح می‌دهد و چند قطعه کد برای مقایسه ارائه می‌دهد.

  • سرویس قدیمی PlacesService دارای متدی به nearbySearch() است که به شما امکان می‌دهد مکان‌ها را در یک منطقه مشخص شده بر اساس کلمه کلیدی یا نوع جستجو کنید.
  • کلاس Place دارای متدی searchNearby() است که به شما امکان می‌دهد مکان‌ها را در یک منطقه مشخص شده بر اساس نوع مکان جستجو کنید و از طیف گسترده‌ای از فیلدهای داده مکان و انواع مکان برای انعطاف‌پذیری بیشتر استفاده کنید.

جدول زیر برخی از تفاوت‌های اصلی در متدهای جستجوی مجاور بین کلاس Place و PlacesService را فهرست می‌کند:

PlacesService (قدیمی) Place (جدید)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
برای مدیریت شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus به استفاده از یک تابع فراخوانی (callback) نیاز دارد. از Promiseها استفاده می‌کند و به صورت ناهمگام کار می‌کند.
نیاز به بررسی PlacesServiceStatus دارد. نیازی به بررسی وضعیت نیست، می‌تواند از مدیریت خطای استاندارد استفاده کند. اطلاعات بیشتر .
فقط از سوگیری مکانی پشتیبانی می‌کند. پشتیبانی از تعصب مکانی و محدودیت مکانی.
تمام فیلدهای داده موجود ( زیرمجموعه‌ای از فیلدهای پشتیبانی‌شده ) را برمی‌گرداند؛ نمی‌تواند به فیلدهای خاصی محدود شود. فقط فیلدهای داده مکان درخواستی را برمی‌گرداند؛ کلاس Place مجموعه‌ای گسترده و مرتباً به‌روز شده از فیلدها را ارائه می‌دهد.
محدود به مجموعه‌ای ثابت از انواع مکان‌ها . به مجموعه‌ای گسترده و مرتباً به‌روز شده از انواع مکان‌ها دسترسی پیدا کنید.
جستجوی مبتنی بر متن با کلمه کلیدی پشتیبانی می‌شود. جستجوی متنی پشتیبانی نمی‌شود، به جای آن از جستجوی متنی (جدید) استفاده کنید.

مقایسه کد

این بخش، کد مربوط به متدهای جستجوی مجاور را مقایسه می‌کند تا تفاوت‌های بین سرویس Places و کلاس Place را نشان دهد. قطعه کدها، کد مورد نیاز در هر API مربوطه را برای ایجاد یک درخواست جستجوی مبتنی بر متن نشان می‌دهند.

جستجوی نزدیک (قدیمی)

جستجوی قدیمی Nearby Search به شما امکان می‌دهد مکان‌ها را در یک منطقه مشخص شده بر اساس کلمه کلیدی یا نوع جستجو کنید. هیچ راهی برای محدود کردن جستجوها با استفاده از فیلدهای داده مکان وجود ندارد، به طوری که همه فیلدهای موجود با هر درخواست بازگردانده شوند. قطعه کد زیر فراخوانی nearbySearch() را برای بازگرداندن اطلاعات مربوط به رستوران‌ها در سیدنی، استرالیا نشان می‌دهد. درخواست همزمان است، از یک callback استفاده می‌کند و شامل یک بررسی شرطی مورد نیاز در 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");
  }
}

بیشتر بدانید