به «جستجوی اطراف» جدید انتقال دهید

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

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

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

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

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

مقایسه کد

این بخش کد روش‌های جستجوی اطراف را مقایسه می‌کند تا تفاوت‌های بین «سرویس مکان‌ها» و کلاس «مکان» را نشان دهد. تکه‌کدها کد موردنیاز در هر میانای برنامه‌سازی کاربردی مربوطه را برای ایجاد درخواست جستجوی نوشتاری نشان می‌دهند.

جستجوی اطراف (قدیمی)

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

بیشتر بدانید