این صفحه تفاوتهای بین جستجوی اطراف را که در کلاس
Place (جدید) و
PlacesService
(قدیمی) استفاده میشود توضیح میدهد و چند تکهکد برای مقایسه ارائه میدهد.
PlacesServiceقدیمی روشnearbySearch()دارد که به شما امکان میدهد مکانها را در منطقهای مشخص براساس کلیدواژه یا نوع جستجو کنید.- کلاس
Placeدارای روشsearchNearby()است که به شما امکان میدهد مکانها را در یک منطقه مشخص براساس نوع مکان جستجو کنید، و از انتخاب گستردهای از فیلدهای داده مکان و انواع مکان برای انعطافپذیری بیشتر استفاده کنید.
جدول زیر برخیاز تفاوتهای اصلی در روشهای جستجوی اطراف
بین کلاس Place و PlacesService را فهرست میکند:
PlacesService (قدیمی) |
Place (جدید) |
|---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
Requires the use of a callback to handle the results object and
google.maps.places.PlacesServiceStatus response. |
از Promises استفاده میکند و بهصورت ناهمگام کار میکند. |
به بررسی 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");
}
}