نقل البيانات إلى ميزة "بحث في الجوار" الجديدة

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

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

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

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

PlacesService (قديم) Place (جديد)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
يتطلّب ذلك استخدام دالة ردّ اتصال لمعالجة عنصر النتائج واستجابة google.maps.places.PlacesServiceStatus. تستخدم هذه الواجهة Promises وتعمل بشكل غير متزامن.
يتطلّب ذلك إجراء فحص PlacesServiceStatus. لا حاجة إلى التحقّق من الحالة، ويمكن استخدام المعالجة العادية للأخطاء. مزيد من المعلومات
تتيح هذه الميزة الانحياز للموقع الجغرافي فقط. يتيح هذا الحقل استخدام ميزتَي "تفضيل الموقع الجغرافي" و"تقييد الموقع الجغرافي".
تعرض هذه السمة جميع حقول البيانات المتاحة (مجموعة فرعية من الحقول المتوافقة)، ولا يمكن حصرها في حقول معيّنة. تعرض هذه الطريقة حقول بيانات الأماكن المطلوبة فقط، وتوفّر فئة Place مجموعة موسّعة من الحقول التي يتم تعديلها بانتظام.
تقتصر على مجموعة ثابتة من أنواع الأماكن. الوصول إلى مجموعة موسّعة ومحدَّثة بانتظام من أنواع الأماكن
البحث النصي المتوافق باستخدام الكلمة الرئيسية. لا يتوفّر البحث النصي، لذا استخدِم "البحث النصي" (الجديد) بدلاً من ذلك.

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

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

بحث في الجوار (الإصدار القديم)

تتيح لك ميزة "البحث في الجوار" القديمة البحث عن أماكن ضمن منطقة محدّدة حسب الكلمة الرئيسية أو النوع. لا توجد طريقة لتقييد عمليات البحث باستخدام حقول بيانات الأماكن، بحيث يتم عرض جميع الحقول المتاحة مع كل طلب. يعرض المقتطف التالي استدعاء nearbySearch() لعرض معلومات عن المطاعم في سيدني، أستراليا. الطلب متزامن ويستخدم دالة رد اتصال، ويتضمّن فحصًا شرطيًا مطلوبًا على PlacesServiceStatus.

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

  const marker = new google.maps.Marker({
    map,
    position: place.geometry.location,
    title: place.name,
  });
}

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

Nearby Search (New)

يقدّم الإصدار الجديد من خدمة "البحث في الجوار" تحسينات على الإصدار السابق بالطرق التالية:

  • إمكانية تحديد حقول بيانات الأماكن المطلوب عرضها
  • استخدام Promises الذي يتيح التشغيل غير المتزامن
  • لا حاجة إلى التحقّق من حالة PlacesService، بل يمكن استخدام المعالجة العادية للأخطاء بدلاً من ذلك.

يوضّح مقتطف الرمز التالي دالة تُرسل طلب "بحث في الجوار" عن المطاعم. يوضّح هذا المثال استخدام الخيار rankPreference لترتيب نتائج البحث حسب مدى رواجها (في الإصدار السابق، يتم تحديد الترتيب باستخدام الخيار rankBy). بما أنّ طريقة searchNearby() تستخدم عامل التشغيل await، لا يمكن استخدامها إلا داخل دالة async.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    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");
  }
}

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