يتطلّب طلب "البحث المجاور" (جديد) إدخال المنطقة المطلوب البحث فيها، ويتم تحديدها كدائرة من خلال إحداثيات خطوط الطول والعرض الخاصة بنقطة مركز الدائرة ونصف القطر بالأمتار. يعرض الطلب قائمة بالأماكن المطابقة، ويمثّل كل مكان كائن GMSPlace
ضمن مساحة البحث المحدّدة.
يتضمّن الردّ تلقائيًا أماكن من جميع الأنواع ضمن منطقة البحث. يمكنك اختياريًا فلترة الردّ من خلال تحديد قائمة بأنواع الأماكن التي تريد تضمينها أو استبعادها بشكل صريح من الردّ. على سبيل المثال، يمكنك تحديد تضمين الأماكن التي يكون نوعها "مطعم" و"مخبز" و "مقهى" فقط في الردّ، أو استبعاد جميع الأماكن التي يكون نوعها "مدرسة".
طلبات "البحث في الجوار" (جديد)
أرسِل طلبًا باستخدام Nearby Search من خلال استدعاء
GMSPlacesClient searchNearbyWithRequest:
،
مع تمرير عنصر
GMSPlaceSearchNearbyRequest
يحدّد مَعلمات الطلب وطريقة ردّ الاتصال، من النوع
GMSPlaceSearchNearbyResultCallback
،
للتعامل مع الردّ.
يحدّد عنصر GMSPlaceSearchNearbyRequest
جميع المَعلمات المطلوبة والاختيارية للطلب. تشمل المَعلمات المطلوبة ما يلي:
- قائمة الحقول المطلوب عرضها في الكائن
GMSPlace
، ويُطلق عليها أيضًا اسم قناع الحقل، كما هو محدّد فيGMSPlaceProperty
. إذا لم تحدّد حقل واحدًا على الأقل في قائمة الحقول، أو إذا حذفت قائمة الحقول، سيعرض الطلب خطأ. - قيد الموقع الجغرافي، أي الدائرة التي تحدّد مساحة البحث
يوضّح مثال طلب البحث عن أماكن قريبة هذا أنّ عناصر GMSPlace
في الردّ تحتوي على اسم المكان (GMSPlacePropertyName
) وإحداثيات المكان (GMSPlacePropertyCoordinate
) لكل عنصر GMSPlace
في نتائج البحث. ويتم أيضًا فلترة الاستجابة لعرض الأماكن من النوع "مطعم" و "مقهى" فقط.
Places 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 }
Swift
// 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)
Objective-C
// 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; } } ];
ردود ميزة "البحث في الجوار"
تعرض Nearby Search API مصفوفة من النتائج المطابقة في شكلGMSPlace
كائنات، مع كائن GMSPlace
واحد لكل مكان مطابق.
الحصول على الحالة "مفتوح"
يحتوي العنصر GMSPlacesClient
على دالة عضوية تُسمى isOpenWithRequest
(isOpenRequest
في Swift وisPlaceOpenRequest
في GooglePlacesSwift) تعرض استجابة تشير إلى ما إذا كان المكان مفتوحًا حاليًا، استنادًا إلى الوقت المحدّد في الطلب.
تتلقّى هذه الطريقة وسيطًا واحدًا من النوع GMSPlaceIsOpenWithRequest
يحتوي على ما يلي:
- عنصر
GMSPlace
أو سلسلة تحدّد معرّف مكان لمزيد من المعلومات حول إنشاء عنصر Place مع الحقول اللازمة، يُرجى الاطّلاع على تفاصيل المكان.
- عنصر اختياري
NSDate
(Obj-C) أوDate
(Swift) يحدّد الوقت الذي تريد التحقّق منه. إذا لم يتم تحديد وقت، يكون الوقت التلقائي هو الوقت الحالي. GMSPlaceOpenStatusResponseCallback
طريقة للتعامل مع الردّ >
تتطلّب الطريقة GMSPlaceIsOpenWithRequest
ضبط الحقول التالية في الكائن GMSPlace
:
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyBusinessStatus
GMSPlacePropertyOpeningHours
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
إذا لم يتم توفير هذه الحقول في عنصر "المكان"، أو إذا مرّرت رقم تعريف مكان، تستخدم الطريقة GMSPlacesClient GMSFetchPlaceRequest:
لجلبها.
ردّ واحد (isOpenWithRequest
)
تعرض الدالة isOpenWithRequest
عنصر GMSPlaceIsOpenResponse
يحتوي على قيمة منطقية باسم status
تشير إلى ما إذا كان النشاط التجاري مفتوحًا أو مغلقًا أو إذا كانت الحالة غير معروفة.
اللغة | القيمة إذا كانت مفتوحة | القيمة في حال الإغلاق | القيمة إذا كانت الحالة غير معروفة |
---|---|---|---|
Places Swift | true |
false |
nil |
Swift | .open |
.closed |
.unknown |
Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
الفوترة في isOpenWithRequest
- يتم تحصيل رسوم الحقلَين
GMSPlacePropertyUTCOffsetMinutes
وGMSPlacePropertyBusinessStatus
ضمن رمز التخزين التعريفي للبيانات الأساسية. يتم تحصيل رسوم باقي ساعات العمل بموجب رمز التخزين التعريفي الخاص بميزة "تفاصيل المكان" في Enterprise. - إذا كان عنصر
GMSPlace
يتضمّن بالفعل هذه الحقول من طلب سابق، لن يتم تحصيل رسوم منك مرة أخرى.
مثال: تقديم طلب GMSPlaceIsOpenWithRequest
يوضّح المثال التالي كيفية تهيئة GMSPlaceIsOpenWithRequest
ضمن عنصر GMSPlace
حالي.
Places 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 }
Swift
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 } }
Objective-C
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
. يُعدّ إخفاء الحقول ممارسة تصميمية جيدة لضمان عدم طلب بيانات غير ضرورية، ما يساعد في تجنُّب وقت المعالجة ورسوم الفوترة غير الضرورية.حدِّد حقلاً واحدًا أو أكثر من الحقول التالية:
تؤدي الحقول التالية إلى تفعيل رمز التخزين التعريفي الخاص بميزة "البحث القريب":
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyName
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyPhotos
GMSPlacePropertyPlaceID
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntrance
تؤدي الحقول التالية إلى تفعيل رمز التخزين التعريفي لإصدار Nearby Search Enterprise:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsite
تؤدي الحقول التالية إلى تفعيل رمز التخزين التعريفي لميزة "البحث القريب" في Enterprise Plus:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
يعرض المثال التالي قائمة تتضمّن قيمتَي حقل لتحديد أنّ العنصر
GMSPlace
الذي يعرضه الطلب يحتوي على الحقلَينname
وplaceID
:Places Swift SDK
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
Swift
// Specify the place data types to return. let fields: [GMSPlaceProperty] = [.placeID, .name]
Objective-C
// Specify the place data types to return. NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
-
locationRestriction
عنصر
GMSPlaceLocationRestriction
يحدّد المنطقة المطلوب البحث فيها على شكل دائرة، ويتم تحديدها من خلال نقطة مركزية ونصف قطر بالأمتار. يجب أن يتراوح نصف القطر بين 0.0 و50000.0، بما في ذلك الرقمان. نصف القطر التلقائي هو 0.0. يجب ضبطها في طلبك على قيمة أكبر من 0.0.
المعلمات الاختيارية
استخدِم العنصر GMSPlaceSearchNearbyRequest
لتحديد المَعلمات الاختيارية الخاصة بالبحث.
-
includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes
تتيح لك تحديد قائمة بأنواع من الجدول A المستخدَمة لفلترة نتائج البحث. يمكن تحديد ما يصل إلى 50 نوعًا في كل فئة من فئات قيود الأنواع.
يمكن أن يكون للمكان نوع أساسي واحد فقط من الأنواع الواردة في الجدول أ المرتبطة به. على سبيل المثال، قد يكون النوع الأساسي
"mexican_restaurant"
أو"steak_house"
. استخدِمincludedPrimaryTypes
وexcludedPrimaryTypes
لفلترة النتائج حسب النوع الأساسي للمكان.يمكن أن يتضمّن المكان أيضًا قيم أنواع متعدّدة من الأنواع الواردة في الجدول أ المرتبطة به. على سبيل المثال، قد يكون لدى مطعم الأنواع التالية:
"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"
.includedTypes
قائمة بأنواع الأماكن من الجدول A للبحث عنها في حال حذف هذه المَعلمة، سيتم عرض الأماكن من جميع الأنواع.
excludedTypes
قائمة بأنواع الأماكن من الجدول A لاستبعادها من عملية بحث.
إذا حدّدت كلاً من
includedTypes
(مثل"school"
) وexcludedTypes
(مثل"primary_school"
) في الطلب، سيتضمّن الرد أماكن مصنّفة على أنّها"school"
ولكن ليس على أنّها"primary_school"
. يتضمّن الردّ أماكن تطابق واحدة على الأقل من قيمincludedTypes
ولا تتطابق مع أي من قيمexcludedTypes
.إذا كانت هناك أي أنواع متضاربة، مثل نوع يظهر في كل من
includedTypes
وexcludedTypes
، سيتم عرض الخطأINVALID_REQUEST
.includedPrimaryTypes
قائمة بأنواع الأماكن الأساسية من الجدول A لتضمينها في عملية بحث.
excludedPrimaryTypes
قائمة بأنواع الأماكن الأساسية من الجدول A لاستبعادها من عملية البحث
إذا كانت هناك أي أنواع أساسية متعارضة، مثل نوع يظهر في كل من
includedPrimaryTypes
وexcludedPrimaryTypes
، سيتم عرض الخطأINVALID_ARGUMENT
. -
maxResultCount
تحدّد هذه السمة الحد الأقصى لعدد نتائج الأماكن التي سيتم عرضها. يجب أن تتراوح القيمة بين 1 و20 (القيمة التلقائية)، بما في ذلك الرقمان.
-
rankPreference
نوع الترتيب المطلوب استخدامه. في حال حذف هذه المَعلمة، يتم ترتيب النتائج حسب مدى الرواج. يمكن أن تكون إحدى القيم التالية:
.popularity
(تلقائي) لترتيب النتائج حسب مدى شيوعها.distance
لترتيب النتائج تصاعديًا حسب المسافة بينها وبين الموقع الجغرافي المحدّد
-
regionCode
تمثّل هذه السمة رمز المنطقة المستخدَم لتنسيق الاستجابة، ويتم تحديدها كقيمة رمز CLDR مكوّن من حرفَين. لا توجد قيمة تلقائية.
إذا كان اسم البلد في الحقل
formattedAddress
ضمن الرد يتطابق معregionCode
، سيتم حذف رمز البلد منformattedAddress
. لا تؤثّر هذه المَعلمة فيadrFormatAddress
، الذي يتضمّن دائمًا اسم البلد، أو فيshortFormattedAddress
، الذي لا يتضمّنه أبدًا.معظم رموز CLDR مماثلة لرموز ISO 3166-1، مع بعض الاستثناءات البارزة. على سبيل المثال، نطاق المستوى الأعلى لرمز البلد في المملكة المتحدة هو "uk" (.co.uk)، بينما رمز ISO 3166-1 هو "gb" (وهو يشير تقنيًا إلى الكيان "المملكة المتحدة لبريطانيا العظمى وأيرلندا الشمالية"). يمكن أن تؤثّر المَعلمة في النتائج استنادًا إلى القانون الساري.
عرض مصادر تحديد المصدر في تطبيقك
عندما يعرض تطبيقك معلومات تم الحصول عليها من
GMSPlacesClient
،
مثل الصور والمراجعات، يجب أن يعرض التطبيق أيضًا بيانات المصدر المطلوبة.
على سبيل المثال، تحتوي السمة reviews
الخاصة بالكائن GMSPlacesClient
على مصفوفة تتضمّن ما يصل إلى خمسة كائنات GMSPlaceReview
. يمكن أن يحتوي كل عنصر GMSPlaceReview
على إشارات إلى المصدر وإشارات إلى المؤلف.
إذا عرضت المراجعة في تطبيقك، عليك أيضًا عرض أي إشارة إلى المصدر أو المؤلف.
لمزيد من المعلومات، يُرجى الاطّلاع على المستندات المتعلقة بالمراجع.