توضّح هذه الصفحة الاختلافات بين ميزات البحث عن الأماكن المستندة إلى النص في الفئة Place (الجديدة) وPlacesService (القديمة)، وتوفّر بعض مقتطفات الرموز للمقارنة.
تتضمّن واجهة برمجة التطبيقات القديمة PlacesService طرق البحث النصية التالية:
- الطريقة
findPlaceFromQuery()التي تستخدم طلب بحث نصيًا وتُرجع نتيجة مكان واحد، وتتيح استخدام حقول بيانات المكان - طريقة
findPlaceFromPhoneNumber()التي تتيح لك البحث عن مكان باستخدام رقم هاتف، وتتيح استخدام حقول بيانات المكان. - الطريقة
textSearch()التي تأخذ طلب بحث نصيًا وتعرض قائمة بنتائج الأماكن textSearch()هو إصدار قديم ولا يتيح استخدام حقول بيانات الأماكن.
توفّر فئة Place الجديدة طريقة Place.searchByText() التي تتيح لك البحث عن الأماكن باستخدام طلب بحث نصي أو رقم هاتف، وتتيح لك تخصيص عمليات البحث باستخدام مجموعة موسّعة من حقول بيانات الأماكن وأنواع الأماكن التي يتم تحديثها بانتظام.
يسرد الجدول التالي بعض الاختلافات الرئيسية في طرق البحث عن الأماكن
بين فئة Place وPlacesService:
PlacesService (قديم) |
Place (جديد) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| خيارات طلب البحث محدودة. | خيارات طلب بحث أكثر توسّعًا |
يتطلب استخدام دالة رد اتصال لمعالجة عنصر النتائج واستجابة google.maps.places.PlacesServiceStatus. |
تستخدم Promises وتعمل بشكل غير متزامن. |
يتطلّب ذلك إجراء فحص PlacesServiceStatus. |
لا حاجة إلى التحقّق من الحالة، ويمكن استخدام معالجة الأخطاء المعيارية. مزيد من المعلومات |
| يتيح هذا الحقل استخدام ميزة "الانحياز للموقع الجغرافي" فقط. | يتيح هذا الحقل استخدام ميزتَي "تفضيل الموقع الجغرافي" و"تقييد الموقع الجغرافي". |
| يتم تنسيق حقول بيانات الأماكن باستخدام تنسيق snake case. | يتم تنسيق حقول بيانات الأماكن باستخدام تنسيق Camel Case. |
| تعرض هذه الدالة نتيجة مكان واحد. | تعرض ما يصل إلى 20 نتيجة مكان. |
| تقتصر على مجموعة ثابتة من أنواع الأماكن وحقول بيانات الأماكن. | توفّر مجموعة موسّعة من أنواع الأماكن وحقول بيانات الأماكن التي يتم تعديلها بانتظام. |
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 بقيمة 8 (يجب أن تكون القيمة بين 1 و20). تتكرر هذه الدالة
من خلال النتائج وتضيف علامة لكل منها، مع ضبط حدود الخريطة
بناءً على موضع العلامات. بما أنّ طريقة 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).
مزيد من المعلومات
- الاطّلاع على الرمز النموذجي الكامل
- الاطّلاع على مستندات البحث النصي (الجديد)
- الاطّلاع على مرجع
searchByText()