یک درخواست جستجوی نزدیک (جدید) ناحیهای را که باید جستجو شود به عنوان ورودی دریافت میکند، که به صورت یک دایره مشخص شده است و توسط مختصات عرض و طول جغرافیایی نقطه مرکزی دایره و شعاع آن بر حسب متر تعریف میشود. این درخواست لیستی از مکانهای منطبق را برمیگرداند که هر کدام توسط یک شیء GMSPlace در محدوده جستجوی مشخص شده نمایش داده میشوند.
به طور پیشفرض، پاسخ شامل مکانهایی از همه نوع در ناحیه جستجو است. شما میتوانید به صورت اختیاری پاسخ را با مشخص کردن لیستی از انواع مکانها فیلتر کنید تا به طور صریح در پاسخ گنجانده یا از آن حذف شوند. به عنوان مثال، میتوانید مشخص کنید که فقط مکانهایی در پاسخ گنجانده شوند که از نوع "رستوران"، "نانوایی" و "کافه" هستند یا همه مکانهای از نوع "مدرسه" را حذف کنید.
درخواستهای جستجوی نزدیک (جدید)
با فراخوانی GMSPlacesClient searchNearbyWithRequest: یک درخواست جستجوی نزدیک ایجاد کنید و یک شیء GMSPlaceSearchNearbyRequest که پارامترهای درخواست و یک متد callback از نوع GMSPlaceSearchNearbyResultCallback را برای مدیریت پاسخ تعریف میکند، ارسال کنید.
شیء GMSPlaceSearchNearbyRequest تمام پارامترهای مورد نیاز و اختیاری برای درخواست را مشخص میکند. پارامترهای مورد نیاز عبارتند از:
- فهرست فیلدهایی که باید در شیء
GMSPlaceبرگردانده شوند، که به آن field mask نیز گفته میشود، همانطور که توسطGMSPlacePropertyتعریف شده است. اگر حداقل یک فیلد را در فهرست فیلدها مشخص نکنید، یا اگر فهرست فیلدها را حذف کنید، فراخوانی خطا میدهد. - محدودیت مکانی ، به معنی دایرهای که ناحیه جستجو را مشخص میکند.
این مثال از درخواست جستجوی مجاور، مشخص میکند که اشیاء GMSPlace پاسخ، شامل نام مکان ( GMSPlacePropertyName ) و مختصات مکان ( GMSPlacePropertyCoordinate ) برای هر شیء GMSPlace در نتایج جستجو هستند. همچنین پاسخ را فیلتر میکند تا فقط مکانهایی از نوع "رستوران" و "کافه" را برگرداند.
مکانهای Swift SDK
let restriction = CircularCoordinateRegion(center: CLLocationCoordinate2DMake(37.7937, -122.3965), radius: 500) let searchNearbyRequest = SearchNearbyRequest( locationRestriction: restriction, placeProperties: [ .name, .coordinate], includedTypes: [ .restaurant, .cafe ], ) switch await placesClient.searchNearby(with: searchNearbyRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
سویفت
// Array to hold the places in the response var placeResults: [GMSPlace] = [] // Define the search area as a 500 meter diameter circle in San Francisco, CA. let circularLocationRestriction = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500) // Specify the fields to return in the GMSPlace object for each place in the response. let placeProperties = [GMSPlaceProperty.name, GMSPlaceProperty.coordinate].map {$0.rawValue} // Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return. var request = GMSPlaceSearchNearbyRequest(locationRestriction: circularLocationRestriction, placeProperties: placeProperties) let includedTypes = ["restaurant", "cafe"] request.includedTypes = includedTypes let callback: GMSPlaceSearchNearbyResultCallback = { [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().searchNearby(with: request, callback: callback)
هدف-سی
// Array to hold the places in the response _placeResults = [NSArray array]; // Define the search area as a 500 meter diameter circle in San Francisco, CA. id<GMSPlaceLocationRestriction> circularLocation = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500); // Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return. GMSPlaceSearchNearbyRequest *request = [[GMSPlaceSearchNearbyRequest alloc] initWithLocationRestriction:circularLocation placeProperties:@[ GMSPlacePropertyName, GMSPlacePropertyCoordinate ]]; // Set the place types to filter on. NSArray<NSString *> *includedTypes = @[ @"restaurant", @"cafe" ]; request.includedTypes = [[NSMutableArray alloc] initWithArray:includedTypes]; [_placesClient searchNearbyWithRequest:request callback:^(NSArray<GMSPlace *> *_Nullable places, NSError *_Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { // Get list of places. _placeResults = places; } } ];
پاسخهای جستجوی نزدیک
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
- فیلدهای
GMSPlacePropertyUTCOffsetMinutesوGMSPlacePropertyBusinessStatusتحت SKU دادههای پایه (Basic Data SKU) محاسبه میشوند. بقیهی ساعات کاری تحت SKU جزئیات مکان (Place Details Enterprise SKU) محاسبه میشوند. - اگر شیء
GMSPlaceشما از قبل این فیلدها را از درخواست قبلی داشته باشد، دیگر هزینهای از شما دریافت نخواهد شد.
مثال: یک درخواست 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 } }];
پارامترهای مورد نیاز
از شیء GMSPlaceSearchNearbyRequest برای تعیین پارامترهای مورد نیاز برای جستجو استفاده کنید.
فهرست فیلدها
وقتی جزئیات مکان را درخواست میکنید، باید دادههایی را که میخواهید در شیء
GMSPlaceبرای آن مکان به عنوان یک ماسک فیلد برگردانید، مشخص کنید. برای تعریف ماسک فیلد، آرایهای از مقادیر را ازGMSPlacePropertyبه شیءGMSPlaceSearchNearbyRequestارسال کنید. ماسک فیلد یک روش طراحی خوب برای اطمینان از عدم درخواست دادههای غیرضروری است که به جلوگیری از زمان پردازش غیرضروری و هزینههای صورتحساب کمک میکند.یک یا چند مورد از فیلدهای زیر را مشخص کنید:
فیلدهای زیر SKU مربوط به Nearby Search Pro را فعال میکنند:
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyName
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyPhotos
GMSPlacePropertyPlaceID
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntranceفیلدهای زیر SKU جستجوی نزدیک سازمانی را فعال میکنند:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsiteفیلدهای زیر، SKU مربوط به Nearby Search Enterprise Plus را فعال میکنند:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
مثال زیر لیستی از دو مقدار فیلد را ارسال میکند تا مشخص کند که شیء
GMSPlaceکه توسط یک درخواست برگردانده میشود، شامل فیلدهایnameوplaceIDاست:مکانهای Swift SDK
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
سویفت
// Specify the place data types to return. let fields: [GMSPlaceProperty] = [.placeID, .name]
هدف-سی
// Specify the place data types to return. NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
محدودیت مکانی
یک شیء
GMSPlaceLocationRestrictionکه ناحیه مورد جستجو را به صورت یک دایره مشخص میکند که با نقطه مرکزی و شعاع بر حسب متر تعریف میشود. شعاع باید بین 0.0 تا 50000.0 باشد. شعاع پیشفرض 0.0 است. شما باید آن را در درخواست خود روی مقداری بزرگتر از 0.0 تنظیم کنید.
پارامترهای اختیاری
از شیء GMSPlaceSearchNearbyRequest برای تعیین پارامترهای اختیاری جستجو استفاده کنید.
انواع گنجاندهشده/انواع مستثنیشده، انواع اولیه گنجاندهشده/انواع اولیه مستثنیشده
به شما امکان میدهد لیستی از انواع را از انواع جدول A که برای فیلتر کردن نتایج جستجو استفاده میشوند، مشخص کنید. حداکثر ۵۰ نوع را میتوان در هر دسته محدودیت نوع مشخص کرد.
یک مکان فقط میتواند یک نوع اصلی از انواع جدول A مرتبط با خود داشته باشد. برای مثال، نوع اصلی ممکن است
"mexican_restaurant"یا"steak_house"باشد.includedPrimaryTypesوexcludedPrimaryTypesبرای فیلتر کردن نتایج بر اساس نوع اصلی یک مکان استفاده کنید.یک مکان همچنین میتواند چندین مقدار نوع از انواع جدول A مرتبط با خود داشته باشد. برای مثال، یک رستوران ممکن است انواع زیر را داشته باشد:
"seafood_restaurant"،"restaurant"،"food"،"point_of_interest"،"establishment".includedTypesوexcludedTypesبرای فیلتر کردن نتایج در لیست انواع مرتبط با یک مکان استفاده کنید.وقتی یک نوع اصلی عمومی مانند
"restaurant"یا"hotel"را مشخص میکنید، پاسخ میتواند شامل مکانهایی با نوع اصلی خاصتر از نوع مشخص شده باشد. برای مثال، شما مشخص میکنید که نوع اصلی"restaurant"را شامل شود. در این صورت پاسخ میتواند شامل مکانهایی با نوع اصلی"restaurant"باشد، اما پاسخ همچنین میتواند شامل مکانهایی با نوع اصلی خاصتر مانند"chinese_restaurant"یا"seafood_restaurant"باشد.اگر جستجو با چندین محدودیت نوع مشخص شود، فقط مکانهایی که همه محدودیتها را برآورده میکنند، بازگردانده میشوند. برای مثال، اگر شما
{"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}را مشخص کنید، مکانهای برگردانده شده خدمات مرتبط با"restaurant"را ارائه میدهند اما در درجه اول به عنوان"steak_house"فعالیت نمیکنند.شاملانواع
فهرستی از انواع مکانها از جدول A برای جستجو. اگر این پارامتر حذف شود، مکانهایی از همه نوع بازگردانده میشوند.
انواع مستثنی
فهرستی از انواع مکانها از جدول A برای حذف از جستجو.
اگر هم
includedTypes(مانند"school") و هم نوعهایexcludedTypes(مانند"primary_school") را در درخواست مشخص کنید، پاسخ شامل مکانهایی میشود که به عنوان"school"طبقهبندی شدهاند اما به عنوان"primary_school"طبقهبندی نشدهاند. پاسخ شامل مکانهایی است که حداقل با یکی ازincludedTypesمطابقت دارند و هیچکدام ازexcludedTypesنمیشوند.اگر انواع متناقضی وجود داشته باشد، مانند نوعی که هم در
includedTypesو همexcludedTypesظاهر میشود، خطایINVALID_REQUESTبرگردانده میشود.شامل انواع اولیه
فهرستی از انواع مکانهای اصلی از جدول A برای گنجاندن در جستجو.
انواع اولیه مستثنی شده
فهرستی از انواع مکانهای اصلی از جدول A برای حذف از جستجو.
اگر انواع اصلی متناقضی وجود داشته باشد، مانند نوعی که هم در
includedPrimaryTypesو همexcludedPrimaryTypesظاهر میشود، خطایINVALID_ARGUMENTبرگردانده میشود.حداکثر تعداد نتیجه
حداکثر تعداد نتایج مکانی را که باید برگردانده شود، مشخص میکند. باید بین ۱ تا ۲۰ (پیشفرض) باشد.
رتبه بندی
نوع رتبهبندی مورد استفاده. اگر این پارامتر حذف شود، نتایج بر اساس محبوبیت رتبهبندی میشوند. این میتواند یکی از موارد زیر باشد:
-
.popularity(پیشفرض) نتایج را بر اساس محبوبیت آنها مرتب میکند. - مرتبسازیهای
.distanceنتایج را به ترتیب صعودی بر اساس فاصلهشان از مکان مشخصشده مرتب میکنند.
-
کد منطقه
کد منطقهای مورد استفاده برای قالببندی پاسخ، که به عنوان یک مقدار کد CLDR دو کاراکتری مشخص شده است. مقدار پیشفرضی وجود ندارد.
اگر نام کشور فیلد
formattedAddressدر پاسخ باregionCodeمطابقت داشته باشد، کد کشور ازformattedAddressحذف میشود. این پارامتر هیچ تاثیری برadrFormatAddressکه همیشه شامل نام کشور است، یاshortFormattedAddressکه هرگز شامل آن نمیشود، ندارد.بیشتر کدهای CLDR با کدهای ISO 3166-1 یکسان هستند، به جز برخی استثنائات قابل توجه. برای مثال، ccTLD بریتانیا "uk" (.co.uk) است در حالی که کد ISO 3166-1 آن "gb" است (از نظر فنی برای موجودیت "پادشاهی متحده بریتانیای کبیر و ایرلند شمالی"). این پارامتر میتواند بر اساس قانون مربوطه بر نتایج تأثیر بگذارد.
نمایش انتسابها در برنامه شما
وقتی برنامه شما اطلاعات به دست آمده از GMSPlacesClient ، مانند عکسها و نظرات را نمایش میدهد، باید ویژگیهای مورد نیاز را نیز نمایش دهد.
برای مثال، ویژگی reviews از شیء GMSPlacesClient شامل آرایهای از حداکثر پنج شیء GMSPlaceReview است. هر شیء GMSPlaceReview میتواند شامل ویژگیها و ویژگی نویسندگان باشد. اگر نقد و بررسی را در برنامه خود نمایش میدهید، باید هرگونه ویژگی یا ویژگی نویسنده را نیز نمایش دهید.
برای اطلاعات بیشتر، به مستندات مربوط به انتسابها مراجعه کنید.