جستجوی متن (جدید)

پلتفرم مورد نظر را انتخاب کنید: اندروید، iOS، جاوا اسکریپت، وب سرویس

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

جستجوی متن (جدید) اطلاعاتی درباره مجموعه‌ای از مکان‌ها بر اساس یک رشته (مثلاً «پیتزا در نیویورک» یا «کفش‌فروشی‌های نزدیک اتاوا» یا «خیابان اصلی ۱۲۳») برمی‌گرداند. این سرویس با فهرستی از مکان‌هایی که با رشته متن مطابقت دارند و هرگونه سوگیری مکانی که تنظیم شده است، پاسخ می‌دهد.

علاوه بر پارامترهای مورد نیاز ، جستجوی متن (جدید) از اصلاح پرس‌وجوها با استفاده از پارامترهای اختیاری برای نتایج بهتر پشتیبانی می‌کند.

دریافت فهرست مکان‌ها از طریق جستجوی متنی

با فراخوانی GMSPlacesClient searchByTextWithRequest: یک درخواست جستجوی متن ایجاد کنید و یک شیء GMSPlaceSearchByTextRequest که پارامترهای درخواست و یک متد callback از نوع GMSPlaceSearchByTextResultCallback را برای مدیریت پاسخ تعریف می‌کند، ارسال کنید.

شیء GMSPlaceSearchByTextRequest تمام پارامترهای مورد نیاز و اختیاری برای درخواست را مشخص می‌کند. پارامترهای مورد نیاز عبارتند از:

  • فهرست فیلدهایی که باید در شیء GMSPlace برگردانده شوند، که به آن field mask نیز گفته می‌شود، همانطور که توسط GMSPlaceProperty تعریف شده است. اگر حداقل یک فیلد را در فهرست فیلدها مشخص نکنید، یا اگر فهرست فیلدها را حذف کنید، فراخوانی خطا می‌دهد.
  • پرس و جوی متنی .

این نمونه درخواست جستجوی متن مشخص می‌کند که اشیاء GMSPlace پاسخ، شامل نام مکان و شناسه مکان برای هر شیء GMSPlace در نتایج جستجو هستند. همچنین پاسخ را فیلتر می‌کند تا فقط مکان‌هایی از نوع "رستوران" را برگرداند.

مکان‌های Swift SDK

let restriction = GMSPlaceRectangularLocationOption(
      northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30),
      southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50)
)
let searchByTextRequest = SearchByTextRequest(
        textQuery: "pizza in New York",
        placeProperties: [ .name, .placeID ],
        locationRestriction: restriction,
        includedType: .restaurant,
        maxResultCount: 5,
        minRating: 3.5,
        priceLevels: [ .moderate, .inexpensive ],
        isStrictTypeFiltering: true
)
switch await placesClient.searchByText(with: searchByTextRequest) {
case .success(let places):
  // Handle places
case .failure(let placesError):
  // Handle error
}

سویفت

// Create the GMSPlaceSearchByTextRequest object.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.placeID].map {$0.rawValue}
let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York", placeProperties:myProperties)
request.isOpenNow = true
request.includedType = "restaurant"
request.maxResultCount = 5
request.minRating = 3.5
request.rankPreference = .distance
request.isStrictTypeFiltering = true
request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)

// Array to hold the places in the response
var placeResults: [GMSPlace] = []

let callback: GMSPlaceSearchByTextResultCallback = { [weak self] results, error in
  guard let self, error == nil else {
    if let error {
      print(error.localizedDescription)
    }
    return
  }
  guard let results = results as? [GMSPlace] else {
    return
  }
  placeResults = results
}

GMSPlacesClient.shared().searchByText(with: request, callback: callback)

هدف-سی

// Create the GMSPlaceSearchByTextRequest object.
GMSPlaceSearchByTextRequest *request =
    [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]];
request.isOpenNow = YES;
request.includedType = @"restaurant";
request.maxResultCount = 5;
request.minRating = 3.5;
request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance;
request.isStrictTypeFiltering = YES;
request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ];
request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0);

// Array to hold the places in the response
_placeResults = [NSArray array];

// Create the GMSPlaceSearchByTextRequest object.
[_placesClient searchByTextWithRequest:request
    callback:^(NSArray<GMSPlace *> *_Nullable placeResults, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"An error occurred %@", [error localizedDescription]);
        return;
      } else {
        if (placeResults.count > 0) {
          // Get list of places.
          _placeResults = placeResults;
      }
    }
  }
];

پاسخ‌های جستجوی متن

API جستجوی متن، آرایه‌ای از تطابق‌ها را به شکل اشیاء GMSPlace برمی‌گرداند، که در هر مکان تطابق، یک شیء GMSPlace وجود دارد.

دریافت وضعیت باز بودن

شیء GMSPlacesClient حاوی یک تابع عضو به نام isOpenWithRequest ( isOpenRequest در Swift و isPlaceOpenRequest در GooglePlacesSwift) است که بر اساس زمان مشخص شده در فراخوانی، پاسخی را برمی‌گرداند که نشان می‌دهد آیا مکان در حال حاضر باز است یا خیر.

این متد یک آرگومان واحد از نوع GMSPlaceIsOpenWithRequest دریافت می‌کند که شامل موارد زیر است:

  • یک شیء GMSPlace یا رشته‌ای که شناسه مکان را مشخص می‌کند. برای اطلاعات بیشتر در مورد ایجاد شیء Place با فیلدهای لازم، به جزئیات Place مراجعه کنید.
  • یک شیء اختیاری NSDate (Obj-C) یا Date (Swift) که زمان مورد نظر برای بررسی را مشخص می‌کند. اگر زمانی مشخص نشود، مقدار پیش‌فرض now است.
  • یک متد GMSPlaceOpenStatusResponseCallback برای مدیریت پاسخ.
  • >

متد GMSPlaceIsOpenWithRequest نیاز دارد که فیلدهای زیر در شیء GMSPlace تنظیم شوند:

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

اگر این فیلدها در شیء Place ارائه نشده باشند، یا اگر یک شناسه مکان ارسال کنید، متد GMSPlacesClient GMSFetchPlaceRequest: برای دریافت آنها استفاده می‌کند.

پاسخ isOpenWithRequest

isOpenWithRequest یک شیء GMSPlaceIsOpenResponse برمی‌گرداند که حاوی یک مقدار بولی به نام status است که نشان می‌دهد آیا کسب‌وکار باز، بسته یا وضعیت آن نامشخص است.

زبان مقدار در صورت باز بودن ارزش در صورت بسته بودن مقدار اگر وضعیت نامشخص باشد
مکان‌های سویفت true false nil
سویفت .open .closed .unknown
هدف-سی GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

صدور صورتحساب برای isOpenWithRequest

مثال: یک درخواست GMSPlaceIsOpenWithRequest ایجاد کنید

مثال زیر نحوه مقداردهی اولیه یک GMSPlaceIsOpenWithRequest را درون یک شیء GMSPlace موجود نشان می‌دهد.

مکان‌های Swift SDK

        let isOpenRequest = IsPlaceOpenRequest(place: place)
        switch await placesClient.isPlaceOpen(with: isOpenRequest) {
          case .success(let isOpenResponse):
            switch isOpenResponse.status {
              case true:
                // Handle open
              case false:
                // Handle closed
              case nil:
                // Handle unknown
          case .failure(let placesError):
            // Handle error
        }
        

سویفت

    let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil)
      GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in
        if let error = error {
          // Handle Error
        }
        switch response.status {
          case .open:
            // Handle open
          case .closed:
            // Handle closed
          case .unknown:
            // Handle unknown
        }
      }
        

هدف-سی

          GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil];

          [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) {
            if (error) {
              // Handle error
            }

            switch (response.status) {
              case GMSPlaceOpenStatusOpen:
                // Handle open
              case GMSPlaceOpenStatusClosed:
                // Handle closed
              case GMSPlaceOpenStatusUnknown:
                // Handle unknown
            }
          }];
          

صفحه بندی

جستجوی متن یک شیء صفحه‌بندی ، از نوع بولی hasNextPage ، ارائه می‌دهد که در اولین پاسخ به فراخوانی جستجوی متن بازگردانده می‌شود. اگر صفحه بعدی در دسترس باشد، می‌توانید از تابع fetchNextPage() برای بارگذاری آن استفاده کنید.

مثال زیر نحوه بررسی وجود صفحه بعدی و سپس بارگذاری صفحه را نشان می‌دهد.

سویفت

public struct PlaceSearchPagination {
  public var pageSize: Int
  public var hasNextPage: Bool
  public func fetchNextPage() async -> SearchByTextResponse
}

public struct SearchByTextResponse {
  public var pagination: PlaceSearchPagination?
  public var places: [Place]?
  public var error: PlaceError?
}

PlacesClient.swift
public func searchByText(with request: SearchByTextRequest) async -> SearchByTextResponse

let searchByTextRequest = SearchByTextRequest(textQuery: "restaurants",
    placeProperties: [PlaceProperty.displayName],
    locationBias: CircularCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 100))

searchByTextRequest.maxResultCount = 10

var searchByTextResponse = await PlacesClient.shared.searchByText(with: searchByTextRequest)
print("Found \(searchByTextResponse.places.count) places")

searchByTextResponse.pagination.pageSize = 20

// Continue making requests until no more results are found in pagination object
while searchByTextResponse.pagination.hasNextPage {
    searchByTextResponse = await searchByTextResponse.pagination.fetchNextPage()
    print("Found \(searchByTextResponse.places.count) places")
}
    

هدف-سی

GMSPlaceSearchByTextRequest *searchByTextRequest = [[GMSPlaceSearchByTextRequest alloc]
    initWithTextQuery: @"restaurants"
    placeProperties: @[GMSPlacePropertyAll]];

searchByTextRequest.maxResultCount = 10;

__block void (^recursiveCallback)(GMSPlaceSearchByTextResponse *, NSError *);
recursiveCallback = ^(GMSPlaceSearchByTextResponse * response, NSError* error) {
    NSLog(@"Found %d places", response.places.count);
    if (response.pagination.hasNextPage) {
      [response.pagination fetchNextPageWithCompletion:recursiveCallback];
   }
};
[GMSPlacesClient.sharedClient searchByTextWithRequest:searchByTextRequest  
                                           completion:recursiveCallback];
    

پارامترهای مورد نیاز

از شیء GMSPlaceSearchByTextRequest برای تعیین پارامترهای مورد نیاز برای جستجو استفاده کنید.

  • فهرست فیلدها

    مشخص کنید کدام ویژگی‌های داده‌ی مکان را برگردانید. فهرستی از ویژگی‌های GMSPlace را که فیلدهای داده‌ی مورد نظر برای برگرداندن را مشخص می‌کنند، ارسال کنید. اگر ماسک فیلد را حذف کنید، درخواست خطا برمی‌گرداند.

    فهرست‌های فیلد یک روش طراحی خوب برای اطمینان از عدم درخواست داده‌های غیرضروری هستند که به جلوگیری از زمان پردازش غیرضروری و هزینه‌های صورتحساب کمک می‌کند.

    یک یا چند مورد از فیلدهای زیر را مشخص کنید:

    • فیلدهای زیر، SKU مربوط به جستجوی متنی ملزومات با شناسه‌ی فقط (Text Search Essentials ID Only SKU) را فعال می‌کنند:

      GMSPlacePropertyPlaceID
    • فیلدهای زیر SKU مربوط به Text Search Pro را فعال می‌کنند:

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyName
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance
    • فیلدهای زیر SKU مربوط به جستجوی متنی Enterprise را فعال می‌کنند:

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite
    • فیلدهای زیر SKU مربوط به Text Search Enterprise Plus را فعال می‌کنند:

      GMSPlacePropertyCurbsidePickup
      GMSPlacePropertyDelivery
      GMSPlacePropertyDineIn
      GMSPlacePropertyEditorialSummary
      GMSPlacePropertyReservable
      GMSPlacePropertyReviews
      GMSPlacePropertyServesBeer
      GMSPlacePropertyServesBreakfast
      GMSPlacePropertyServesBrunch
      GMSPlacePropertyServesDinner
      GMSPlacePropertyServesLunch
      GMSPlacePropertyServesVegetarianFood
      GMSPlacePropertyServesWine
      GMSPlacePropertyTakeout
  • پرس و جوی متنی

    رشته متنی که باید جستجو شود، برای مثال: "رستوران"، "خیابان اصلی ۱۲۳" یا "بهترین مکان برای بازدید در سانفرانسیسکو".

پارامترهای اختیاری

از شیء GMSPlaceSearchByTextRequest برای تعیین پارامترهای اختیاری جستجو استفاده کنید.

  • شاملنوع

    نتایج را به مکان‌هایی که با نوع مشخص‌شده‌ی تعریف‌شده در جدول الف مطابقت دارند، محدود می‌کند. فقط یک نوع می‌تواند مشخص شود. برای مثال:

    • let request = SearchByTextRequest()
      request.includedType = "bar"
    • let request = SearchByTextRequest()
      request.includedType = "pharmacy"
  • اکنون باز است

    اگر true ، فقط مکان‌هایی را برمی‌گرداند که در زمان ارسال پرس‌وجو باز هستند. اگر مقدار آن false ، همه مکان‌های کسب‌وکار را صرف نظر از وضعیت باز بودنشان برمی‌گرداند. مکان‌هایی که ساعات کاری مشخصی در پایگاه داده Google Places ندارند، در صورت تنظیم این پارامتر روی false ، بازگردانده می‌شوند.

  • فیلترینگ نوع سخت‌گیرانه

    با پارامتر includeType استفاده می‌شود. وقتی روی true تنظیم شود، فقط مکان‌هایی که با انواع مشخص‌شده توسط includeType مطابقت دارند، برگردانده می‌شوند. وقتی false باشد، پیش‌فرض این است که پاسخ می‌تواند شامل مکان‌هایی باشد که با انواع مشخص‌شده مطابقت ندارند.

  • موقعیت مکانی

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

    شما می‌توانید locationRestriction یا locationBias را مشخص کنید، اما نمی‌توانید هر دو را با هم داشته باشید. locationRestriction را به عنوان مشخص‌کننده‌ی ناحیه‌ای که نتایج باید درون آن باشند، و locationBias به عنوان مشخص‌کننده‌ی ناحیه‌ای که نتایج باید نزدیک به آن باشند اما می‌توانند خارج از آن ناحیه باشند، در نظر بگیرید.

    منطقه را به عنوان یک نمای مستطیلی یا به عنوان یک دایره مشخص کنید.

    • یک دایره با نقطه مرکز و شعاع بر حسب متر تعریف می‌شود. شعاع باید بین 0.0 تا 50000.0 باشد. شعاع پیش‌فرض 0.0 است. برای مثال:

      let request = SearchByTextRequest()
      request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
    • مستطیل، یک نمای طول و عرض جغرافیایی است که به صورت دو نقطه پایین و بالا که به صورت مورب روبروی هم قرار دارند، نمایش داده می‌شود. نقطه پایین، گوشه جنوب غربی مستطیل و نقطه بالا، گوشه شمال شرقی مستطیل را نشان می‌دهد.

      یک منظره یاب یک منطقه بسته در نظر گرفته می‌شود، به این معنی که مرز خود را شامل می‌شود. محدوده عرض جغرافیایی باید بین ۹۰- تا ۹۰ درجه و محدوده طول جغرافیایی باید بین ۱۸۰- تا ۱۸۰ درجه باشد:

      • اگر low = high ، نمای دید از آن نقطه واحد تشکیل شده است.
      • اگر low.longitude > high.longitude ، محدوده طول جغرافیایی معکوس می‌شود (صفحه نمایش از خط طول جغرافیایی ۱۸۰ درجه عبور می‌کند).
      • اگر low.longitude = -180 درجه و high.longitude = 180 درجه باشد، صفحه نمایش شامل تمام طول‌های جغرافیایی می‌شود.
      • اگر low.longitude = 180 درجه و high.longitude = -180 درجه باشد، محدوده طول جغرافیایی خالی است.
      • اگر low.latitude > high.latitude ، محدوده عرض جغرافیایی خالی است.
  • محدودیت مکانی

    ناحیه‌ای را برای جستجو مشخص می‌کند. نتایج خارج از ناحیه مشخص شده بازگردانده نمی‌شوند. ناحیه را به عنوان یک Viewport مستطیلی مشخص کنید. برای اطلاعات بیشتر در مورد تعریف Viewport به توضیحات locationBias مراجعه کنید.

    شما می‌توانید locationRestriction یا locationBias را مشخص کنید، اما نمی‌توانید هر دو را با هم داشته باشید. locationRestriction را به عنوان مشخص‌کننده‌ی ناحیه‌ای که نتایج باید درون آن باشند، و locationBias به عنوان مشخص‌کننده‌ی ناحیه‌ای که نتایج باید نزدیک به آن باشند اما می‌توانند خارج از آن ناحیه باشند، در نظر بگیرید.

  • حداکثر تعداد نتیجه

    حداکثر تعداد نتایج مکانی را که باید برگردانده شود، مشخص می‌کند. باید بین ۱ تا ۲۰ (پیش‌فرض) باشد.

  • دقیقه رتبه‌بندی

    نتایج را فقط به مواردی محدود می‌کند که میانگین امتیاز کاربران آنها بزرگتر یا مساوی این حد باشد. مقادیر باید بین 0.0 تا 5.0 (شامل) با گام‌های 0.5 باشند. برای مثال: 0، 0.5، 1.0، ...، 5.0 (شامل). مقادیر به نزدیکترین عدد 0.5 به بالا گرد می‌شوند. برای مثال، مقدار 0.6 تمام نتایج با امتیاز کمتر از 1.0 را حذف می‌کند.

  • قیمت‌ها

    جستجو را به مکان‌هایی که در سطوح قیمت خاصی علامت‌گذاری شده‌اند محدود کنید. پیش‌فرض این است که همه سطوح قیمت را انتخاب کنید.

    آرایه‌ای از یک یا چند مقدار تعریف شده توسط PriceLevel را مشخص کنید.

    برای مثال:

        let request = SearchByTextRequest()
        request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
  • رتبه بندی

    نحوه رتبه‌بندی نتایج در پاسخ را بر اساس نوع پرس‌وجو مشخص می‌کند:

    • برای یک عبارت جستجوی دسته‌بندی‌شده مانند «رستوران‌ها در شهر نیویورک»، مقدار پیش‌فرض .relevance (رتبه‌بندی نتایج بر اساس ارتباط جستجو) است. می‌توانید rankPreference روی .relevance یا .distance (رتبه‌بندی نتایج بر اساس فاصله) تنظیم کنید.
    • برای یک عبارت جستجوی غیر دسته‌بندی‌شده مانند «مانتین ویو، کالیفرنیا»، توصیه می‌کنیم rankPreference بدون تنظیم رها کنید.
  • کد منطقه

    کد منطقه‌ای مورد استفاده برای قالب‌بندی پاسخ، که به عنوان یک مقدار کد CLDR دو کاراکتری مشخص شده است. این پارامتر همچنین می‌تواند تأثیر جانبدارانه‌ای بر نتایج جستجو داشته باشد. مقدار پیش‌فرضی وجود ندارد.

    اگر نام کشور فیلد آدرس در پاسخ با کد منطقه مطابقت داشته باشد، کد کشور از آدرس حذف می‌شود.

    بیشتر کدهای CLDR با کدهای ISO 3166-1 یکسان هستند، به جز برخی استثنائات قابل توجه. برای مثال، ccTLD بریتانیا "uk" (.co.uk) است در حالی که کد ISO 3166-1 آن "gb" است (از نظر فنی برای موجودیت "پادشاهی متحده بریتانیای کبیر و ایرلند شمالی"). این پارامتر می‌تواند بر اساس قانون مربوطه بر نتایج تأثیر بگذارد.

  • shouldIncludePureServiceAreaBusinesses

    اگر true ، کسب‌وکارهای صرفاً دارای حوزه خدماتی را در نتایج جستجو برمی‌گرداند. کسب‌وکار صرفاً دارای حوزه خدماتی، کسب‌وکاری است که مستقیماً از مشتریان بازدید می‌کند یا به آنها کالا ارسال می‌کند، اما به مشتریان در آدرس کسب‌وکارشان خدمات ارائه نمی‌دهد.

    برای مثال:

    مکان‌های Swift SDK

    let request = SearchByTextRequest()
    request.shouldIncludePureServiceAreaBusinesses = true

    سویفت

    let request = SearchByTextRequest()
    request.shouldIncludePureServiceAreaBusinesses: true

    هدف-سی

    GMSPlaceSearchByTextRequest *request =
        [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyAll]];
    request.shouldIncludePureServiceAreaBusinesses = YES;

نمایش انتساب‌ها در برنامه شما

وقتی برنامه شما اطلاعات به دست آمده از GMSPlacesClient ، مانند عکس‌ها و نظرات را نمایش می‌دهد، باید ویژگی‌های مورد نیاز را نیز نمایش دهد.

برای مثال، ویژگی reviews از شیء GMSPlacesClient شامل آرایه‌ای از حداکثر پنج شیء GMSPlaceReview است. هر شیء GMSPlaceReview می‌تواند شامل ویژگی‌ها و ویژگی نویسندگان باشد. اگر نقد و بررسی را در برنامه خود نمایش می‌دهید، باید هرگونه ویژگی یا ویژگی نویسنده را نیز نمایش دهید.

برای اطلاعات بیشتر، به مستندات مربوط به انتساب‌ها مراجعه کنید.