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

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

توضّح هذه الصفحة الاختلافات بين ميزات البحث عن الأماكن المستندة إلى النصوص في الفئة 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).

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