این صفحه تفاوتهای بین ویژگیهای جستجوی مکان مبتنی بر متن در کلاس Place (جدید) و PlacesService (قدیمی) را توضیح میدهد و چند قطعه کد برای مقایسه ارائه میدهد.
سرویس قدیمی PlacesService روشهای جستجوی مبتنی بر متن زیر را دارد:
- متد
findPlaceFromQuery()که یک کوئری متنی را دریافت کرده و یک نتیجه تک مکانی را برمیگرداند و از استفاده از فیلدهای داده مکانی پشتیبانی میکند. - متد
findPlaceFromPhoneNumber()که به شما امکان میدهد با استفاده از شماره تلفن، مکانی را جستجو کنید و از استفاده از فیلدهای داده مکان پشتیبانی میکند. - متد
textSearch()که یک کوئری متنی را دریافت کرده و لیستی از نتایج مکان را برمیگرداند.textSearch()قدیمیتر است و از استفاده از فیلدهای داده مکان پشتیبانی نمیکند.
کلاس جدید Place متد Place.searchByText() را ارائه میدهد که به شما امکان میدهد مکانها را با استفاده از یک کوئری متنی یا شماره تلفن جستجو کنید و به شما امکان میدهد جستجوهای خود را با استفاده از مجموعه گستردهای از فیلدهای داده مکان که مرتباً بهروزرسانی میشوند و انواع مکانها، سفارشیسازی کنید.
جدول زیر برخی از تفاوتهای اصلی در متدهای جستجوی مکان بین کلاس Place و PlacesService را فهرست میکند:
PlacesService (قدیمی) | Place (جدید) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber() | searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest | SearchByTextRequest |
| گزینههای محدود پرسوجو | گزینههای پرسوجوی گستردهتر. |
برای مدیریت شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus به استفاده از یک تابع فراخوانی (callback) نیاز دارد. | از Promiseها استفاده میکند و به صورت ناهمگام کار میکند. |
نیاز به بررسی PlacesServiceStatus دارد. | نیازی به بررسی وضعیت نیست، میتواند از مدیریت خطای استاندارد استفاده کند. اطلاعات بیشتر . |
| فقط از سوگیری مکانی پشتیبانی میکند. | پشتیبانی از تعصب مکانی و محدودیت مکانی. |
| فیلدهای داده مکان با استفاده از حالت مار (snake case) قالببندی میشوند. | فیلدهای داده مکان با استفاده از حالت شتری قالببندی میشوند. |
| نتیجه یک مکان واحد را برمیگرداند. | نتایج تا رتبه ۲۰ را برمیگرداند. |
| محدود به مجموعهای ثابت از انواع مکانها و فیلدهای داده مکان . | طیف گستردهای از انواع مکانها و فیلدهای داده مکان که مرتباً بهروزرسانی میشوند را ارائه میدهد. |
textSearch() | searchByText() |
| تمام فیلدهای داده موجود ( زیرمجموعهای از فیلدهای پشتیبانیشده ) را برمیگرداند؛ نمیتواند به فیلدهای خاصی محدود شود. | فقط فیلدهای داده مکان درخواستی را برمیگرداند. |
مقایسه کد
این بخش، کد مربوط به روشهای جستجوی متن را مقایسه میکند تا تفاوتهای بین سرویس Places و کلاس Place را نشان دهد. قطعه کدها، کد مورد نیاز در هر API مربوطه برای ایجاد یک درخواست جستجوی مبتنی بر متن را نشان میدهند.
خدمات اماکن (قدیمی)
قطعه کد زیر استفاده از متد findPlaceFromQuery() را برای جستجوی یک مکان نشان میدهد. درخواست همگام است و شامل بررسی شرطی PlacesServiceStatus میشود. فیلدهای داده مکان مورد نیاز در بدنه درخواست مشخص شدهاند که قبل از انجام درخواست واقعی تعریف شده است.
function findPlaces() {
const request = {
query: "Museum of Contemporary Art Australia",
fields: ["name", "geometry"],
};
// Create an instance of PlacesService.
service = new google.maps.places.PlacesService(map);
// Make a findPlaceFromQuery request.
service.findPlaceFromQuery(request, (results, status) => {
let place = results[0];
if (status === google.maps.places.PlacesServiceStatus.OK && results) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
map.setCenter(place.geometry.location);
}
});
}
بیشتر بدانید
جستجوی متن (جدید)
قطعه کد زیر استفاده از متد searchByText() را برای جستجوی مکانها نشان میدهد. درخواست ناهمزمان است و نیازی به بررسی وضعیت ندارد (میتوان از مدیریت خطای استاندارد استفاده کرد). در این مثال، درخواست شامل maxResultCount برابر با ۸ است (مقدار باید بین ۱ تا ۲۰ باشد). این تابع نتایج را پیمایش میکند و برای هر کدام یک نشانگر اضافه میکند و مرزهای نقشه را بر اساس موقعیت نشانگرها تنظیم میکند. از آنجا که متد searchByText() از عملگر await استفاده میکند، فقط میتوان از آن در داخل یک تابع async استفاده کرد.
async function findPlaces() {
// Define a request.
// The `fields` property is required; all others are optional.
const request = {
fields: ["displayName", "location", "businessStatus"],
textQuery: "Tacos in Mountain View",
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
// Call searchByText passing the request.
const { places } = await google.maps.places.Place.searchByText(request);
// Add a marker for each result.
if (places.length) {
const bounds = new google.maps.LatLngBounds();
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");
}
}
متد searchByText() در مقایسه با نسخه قبلی، از گزینههای درخواست بسیار بیشتری پشتیبانی میکند، از جمله:
-
includedTypeکه به شما امکان میدهد جستجوها را به یک نوع مکان خاص محدود کنید. -
isOpenNowکه به شما امکان میدهد جستجوها را فقط به مکانهای باز محدود کنید. -
minRatingکه به شما امکان میدهد نتایج پایینتر از حد مشخصشده را فیلتر کنید (برای مثال، فقط مکانهایی را که سه ستاره یا بیشتر دارند، برگردانید). -
locationRestrictionکه نتایج خارج از مکان مشخص شده را حذف میکند (locationBiasنیز پشتیبانی میشود).
بیشتر بدانید
- کد کامل مثال را ببینید
- مستندات مربوط به جستجوی متن (جدید) را ببینید
- به مرجع
searchByText()مراجعه کنید