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

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

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

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

PlacesService (قديمة) Place (ميزة جديدة)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
تتطلّب استخدام دالة ردّ اتصال لمعالجة عنصر النتائج وgoogle.maps.places.PlacesServiceStatus الاستجابة. يستخدم وعدًا، ويعمل بشكل غير متزامن.
يتطلب وضع علامة PlacesServiceStatus. لا يلزم التحقّق من الحالة، ويمكن استخدام معالجة الأخطاء العادية.
تتيح هذه الميزة التركيز على الموقع الجغرافي فقط. تتيح هذه الميزة التركيز على موقع جغرافي معيّن أو فرض قيود على المواقع الجغرافية.
عرض جميع حقول البيانات المتاحة (مجموعة فرعية من الحقول المتوافقة) لا يمكن حصرها بحقول معيّنة لا تعرض سوى حقول بيانات الأماكن المطلوبة، وتقدّم فئة 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,
  });
}

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

البحث في الأماكن القريبة (ميزة جديدة)

يُحسِّن الإصدار الجديد من ميزة "البحث عن الأماكن القريبة" الإصدار السابق من الميزة بالطرق التالية:

  • إمكانية تحديد حقول بيانات الأماكن التي سيتم عرضها
  • استخدام 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");
  }
}

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