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

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

توضّح هذه الصفحة الاختلافات بين ميزات البحث عن الأماكن المستندة إلى النصوص في الفئة Place (الجديدة) و PlacesService (القديمة)، وتقدّم بعض مقتطفات الرموز للمقارنة.

تتضمّن واجهة برمجة التطبيقات القديمة PlacesService طرق البحث المستندة إلى النصوص التالية:

  • الطريقة findPlaceFromQuery() التي تأخذ طلب بحث نصيًا وتعرض نتيجة مكان واحدة، وتتيح استخدام حقول بيانات المكان.
  • الطريقة findPlaceFromPhoneNumber() التي تتيح لك البحث عن مكان باستخدام رقم هاتف، وتتيح استخدام حقول بيانات المكان.
  • الطريقة textSearch() التي تأخذ طلب بحث نصيًا وتعرض قائمة بنتائج الأماكن. الطريقة textSearch() أقدم ولا تتيح استخدام حقول بيانات المكان.

توفر الفئة الجديدة Place الطريقة Place.searchByText() التي تتيح لك البحث عن الأماكن باستخدام طلب بحث نصي أو رقم هاتف، وتتيح لك تخصيص عمليات البحث باستخدام مجموعة موسّعة من حقول بيانات المكان وأنواع الأماكن التي يتم تعديلها بانتظام.

يسرد الجدول التالي بعض الاختلافات الرئيسية في طرق البحث عن الأماكن بين الفئة Place وPlacesService:

PlacesService (قديمة) Place (جديدة)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
خيارات طلبات بحث محدودة خيارات طلبات بحث أكثر شمولاً
يتطلّب استخدام دالة رد اتصال للتعامل مع عنصر النتائج والاستجابة google.maps.places.PlacesServiceStatus تستخدم هذه الطريقة الوعود وتعمل بشكل غير متزامن.
تتطلّب التحقّق من PlacesServiceStatus لا يتطلّب التحقّق من الحالة، ويمكن استخدام معالجة الأخطاء العادية. مزيد من المعلومات.
تتيح هذه الطريقة استخدام الانحياز إلى الموقع الجغرافي فقط. تتيح هذه الطريقة استخدام الانحياز إلى الموقع الجغرافي والقيود المفروضة على الموقع الجغرافي.
يتم تنسيق حقول بيانات المكان باستخدام التنسيق snake case. يتم تنسيقحقول بيانات المكان باستخدام التنسيق camel case.
تعرض هذه الطريقة نتيجة مكان واحدة. تعرض هذه الطريقة ما يصل إلى 20 نتيجة مكان.
تقتصر هذه الطريقة على مجموعة ثابتة من أنواع الأماكن وحقول بيانات المكان. توفّر هذه الطريقة مجموعة موسّعة من أنواع الأماكن وحقول بيانات المكان التي يتم تعديلها بانتظام.
textSearch()
searchByText()
تعرض هذه الطريقة جميع حقول البيانات المتاحة (مجموعة فرعية من الحقول المتوافقة) ، ولا يمكن حصرها بحقول معيّنة. تعرض هذه الطريقة حقول بيانات الـ مكان المطلوبة فقط.

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

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

Places Service (قديمة)

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

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