توضّح هذه الصفحة الاختلافات بين ميزة "البحث عن الأماكن القريبة" المستخدَمة في فئة
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");
}
}