این صفحه تفاوتهای بین جستجوی نزدیک را که در کلاس Place
(جدید) و PlacesService
(میراث) استفاده میشود، توضیح میدهد و چند قطعه کد برای مقایسه ارائه میکند.
-
PlacesService
قدیمی دارای یک متدnearbySearch()
است که به شما امکان میدهد مکانها را در یک منطقه مشخص با کلمه کلیدی یا نوع جستجو کنید. - کلاس
Place
دارای یک متدsearchNearby()
است که به شما امکان می دهد مکان ها را در یک منطقه مشخص شده بر اساس نوع مکان جستجو کنید، با استفاده از انتخاب گسترده ای از فیلدهای داده مکان و انواع مکان برای انعطاف پذیری بیشتر.
جدول زیر برخی از تفاوتهای اصلی در روشهای جستجوی نزدیک بین کلاس Place
و PlacesService
را فهرست میکند:
PlacesService (قدیمی) | Place (جدید) |
---|---|
nearbySearch() | searchNearby() |
PlaceSearchRequest | SearchNearbyRequest |
برای رسیدگی به شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus به استفاده از یک تماس پاسخ نیاز دارد. | از Promises استفاده می کند و به صورت ناهمزمان کار می کند. |
به بررسی PlacesServiceStatus نیاز دارد. | بدون بررسی وضعیت مورد نیاز، می توان از مدیریت خطای استاندارد استفاده کرد. |
فقط از تعصب موقعیت مکانی پشتیبانی می کند. | از تعصب مکان و محدودیت مکان پشتیبانی می کند. |
تمام فیلدهای داده موجود ( زیر مجموعه ای از فیلدهای پشتیبانی شده ) را برمی گرداند. نمی توان آن را محدود به زمینه های خاص کرد. | فقط فیلدهای داده مکان درخواستی را برمی گرداند. کلاس Place مجموعه ای گسترده و مرتباً به روز شده از فیلدها را ارائه می دهد. |
محدود به مجموعه ای ثابت از انواع مکان . | به مجموعه ای گسترده و مرتباً به روز شده از انواع مکان ها دسترسی داشته باشید. |
پشتیبانی از جستجوی متنی با کلمه کلیدی | جستجوی متنی پشتیبانی نمی شود، به جای آن از جستجوی متن (جدید) استفاده کنید. |
مقایسه کدها
این بخش کدهای روشهای جستجوی نزدیک را مقایسه میکند تا تفاوتهای بین سرویس Places و کلاس Place را نشان دهد. قطعه کد کد مورد نیاز در هر API مربوطه را برای درخواست جستجوی متنی نشان می دهد.
جستجوی نزدیک (قدمتی)
جستجوی قدیمی Nearby به شما امکان میدهد مکانها را در یک منطقه مشخص بر اساس کلمه کلیدی یا نوع جستجو کنید. هیچ راهی برای محدود کردن جستجوها با استفاده از فیلدهای داده مکان وجود ندارد، به طوری که تمام فیلدهای موجود با هر درخواست بازگردانده می شوند. قطعه زیر فراخوانی 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 به روشهای زیر نسبت به نسخه قبلی خود بهبود مییابد:
- توانایی تعیین فیلدهای داده ای برای بازگرداندن کدام مکان.
- استفاده از 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");
}
}