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

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

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

PlacesService قدیمی روش‌های جستجوی نوشتارمحور زیر را دارد:

  • روش findPlaceFromQuery() که پُرسمان نوشتاری را می‌گیرد و یک نتیجه مکان برمی‌گرداند و از استفاده از فیلدهای داده مکان پشتیبانی می‌کند.
  • روش findPlaceFromPhoneNumber() که به شما امکان می‌دهد بااستفاده از شماره تلفن، مکانی را جستجو کنید و از فیلدهای داده مکان پشتیبانی می‌کند.
  • روش textSearch() که پُرسمان نوشتاری را می‌گیرد و فهرستی از نتایج مکان را برمی‌گرداند. textSearch() قدیمی‌تر است و از استفاده از فیلدهای داده مکان پشتیبانی نمی‌کند.

کلاس جدید Place روش Place.searchByText() را ارائه می‌دهد که به شما امکان می‌دهد بااستفاده از پُرسمان نوشتاری یا شماره تلفن، مکان‌ها را جستجو کنید و بااستفاده از انتخاب گسترده‌ای از فیلدهای داده مکان و انواع مکان که به‌طور مرتب به‌روز می‌شوند، جستجوهایتان را سفارشی‌سازی کنید.

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

PlacesService (قدیمی) Place (جدید)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
گزینه‌های پُرسمان محدود. گزینه‌های پُرسمان گسترده‌تر.
نیازمند استفاده از فراخوانی برگشتی برای مدیریت شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus است. از Promises استفاده می‌کند و به‌صورت ناهمگام کار می‌کند.
به بررسی PlacesServiceStatus نیاز دارد. بررسی وضعیت لازم نیست، می‌توان از رسیدگی به خطای استاندارد استفاده کرد. بیشتر بدانید.
فقط از سوگیری مکان پشتیبانی می‌کند. از سوگیری مکان و محدودیت مکان پشتیبانی می‌کند.
فیلدهای داده مکان بااستفاده از نگارش ماری قالب‌بندی می‌شوند. فیلدهای داده مکان بااستفاده از نگارش شتری قالب‌بندی می‌شوند.
یک نتیجه مکان تکی برمی‌گرداند. حداکثر ۲۰ نتیجه مکان را برمی‌گرداند.
محدود به مجموعه ثابتی از انواع مکان و فیلدهای داده مکان. انتخاب گسترده‌ای از انواع مکان و فیلدهای داده مکان را که به‌طور منظم به‌روزرسانی می‌شوند ارائه می‌دهد.
textSearch()
searchByText()
همه فیلدهای داده دردسترس (زیرمجموعه‌ای از فیلدهای پشتیبانی‌شده) را برمی‌گرداند؛ نمی‌توان آن را به فیلدهای خاصی محدود کرد. فقط فیلدهای داده مکان درخواست‌شده را برمی‌گرداند.

مقایسه کد

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

سرویس مکان‌ها (قدیمی)

تکه‌کد زیر استفاده از روش 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);
    }
  });
}

بیشتر بدانید

جستجوی نوشتار (جدید)

تکه‌کد زیر استفاده از روش searchByText() را برای جستجوی مکان‌ها نشان می‌دهد. درخواست ناهمگام است و نیازی به بررسی وضعیت ندارد (می‌توان از رسیدگی به خطای استاندارد استفاده کرد). در این مثال، درخواست شامل maxResultCount ۸ است (مقدار باید بین ۱ تا ۲۰ باشد). This function loops through the results and adds a marker for each one, adjusting the map bounds based on the position of the markers. چون روش 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");
  }
}

روش searchByText() درمقایسه با نسخه قبلی از گزینه‌های درخواست بسیار بیشتری پشتیبانی می‌کند، ازجمله:

  • includedType که به شما امکان می‌دهد جستجوها را به نوع مکان خاصی محدود کنید.
  • isOpenNow که به شما امکان می‌دهد جستجوها را محدود کنید تا فقط مکان‌هایی را که باز هستند برگرداند.
  • minRating که به شما امکان می‌دهد نتایج زیر حد مشخص‌شده را فیلتر کنید (برای مثال، فقط مکان‌های دارای سه ستاره یا بیشتر را برگردانید).
  • locationRestriction که نتایج خارج از مکان مشخص‌شده را حذف می‌کند (locationBias نیز پشتیبانی می‌شود).

بیشتر بدانید