نقل البيانات إلى ميزة "بحث عن الأماكن" الجديدة

المطوّرون في المنطقة الاقتصادية الأوروبية

توضّح هذه الصفحة الاختلافات بين ميزات البحث عن الأماكن المستندة إلى النصوص في الفئة 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. لا يلزم التحقّق من الحالة، ويمكن استخدام معالجة الأخطاء العادية. مزيد من المعلومات
يتيح هذا النوع من المعلمات تحديد الموقع الجغرافي فقط. يتيح هذا التنسيق إمكانية تحديد الموقع الجغرافي المفضّل والموقع الجغرافي المحظور.
يتم تنسيق حقول بيانات الأماكن باستخدام تنسيق snake case. يتم تنسيق حقول بيانات الأماكن باستخدام طريقة الكتابة بالحروف الكبيرة والصغيرة المتداخلة.
تعرض هذه الطريقة نتيجة واحدة لمكان. تعرض هذه الطريقة ما يصل إلى 20 نتيجة خاصة بأماكن.
يقتصر على مجموعة ثابتة من أنواع الأماكن وحقول بيانات الأماكن. توفّر هذه الخدمة مجموعة موسّعة من أنواع الأماكن وحقول بيانات الأماكن التي يتم تعديلها بانتظام.
textSearch()
searchByText()
تعرض هذه الطريقة جميع حقول البيانات المتاحة (مجموعة فرعية من الحقول المتوافقة)، ولا يمكن حصرها بحقول معيّنة. تعرض هذه السمة حقول بيانات المكان المطلوبة فقط.

مقارنة الرموز

يقارن هذا القسم بين رموز طرق البحث النصي لتوضيح الاختلافات بين Places Service وفئة Place. تعرض مقتطفات الرموز البرمجية الرمز المطلوب في كل واجهة برمجة تطبيقات لإجراء طلب بحث مستند إلى نص.

خدمة "الأماكن" (الإصدار القديم)

يوضّح مقتطف الرمز التالي كيفية استخدام طريقة 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 متوافق أيضًا).

مزيد من المعلومات