این صفحه تفاوتهای بین ویژگیهای جستجوی مکان مبتنی بر متن در کلاس Place
(جدید) و PlacesService
(میراث) را توضیح میدهد، و چند قطعه کد را برای مقایسه ارائه میکند.
PlacesService
قدیمی دارای روش های جستجوی متنی زیر است:
- متد
findPlaceFromQuery()
که یک پرس و جوی متنی را می گیرد و یک نتیجه مکان واحد را برمی گرداند و از استفاده از فیلدهای داده مکان پشتیبانی می کند. - متد
findPlaceFromPhoneNumber()
که به شما امکان می دهد مکان را با استفاده از شماره تلفن جستجو کنید و از فیلدهای داده مکان پشتیبانی می کند. - متد
textSearch()
که یک پرس و جو متنی را می گیرد و لیستی از نتایج مکان را برمی گرداند.textSearch()
قدیمیتر است و استفاده از فیلدهای داده مکان را پشتیبانی نمیکند.
کلاس Place
جدید متد Place.searchByText()
را ارائه می دهد که به شما امکان می دهد مکان ها را با استفاده از یک پرس و جو متنی یا شماره تلفن جستجو کنید و به شما امکان می دهد جستجوهای خود را با استفاده از مجموعه گسترده ای از فیلدهای داده مکان و انواع مکان که به طور منظم به روز می شوند سفارشی کنید.
جدول زیر برخی از تفاوت های اصلی در روش های جستجوی مکان بین کلاس Place
و PlacesService
را فهرست می کند:
PlacesService (قدیمی) | Place (جدید) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber() | searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest | SearchByTextRequest |
گزینه های پرس و جو محدود | گزینه های پرس و جو گسترده تر. |
برای رسیدگی به شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus به استفاده از یک تماس پاسخ نیاز دارد. | از Promises استفاده می کند و به صورت ناهمزمان کار می کند. |
به بررسی PlacesServiceStatus نیاز دارد. | بدون بررسی وضعیت مورد نیاز، می توان از مدیریت خطای استاندارد استفاده کرد. |
فقط از تعصب موقعیت مکانی پشتیبانی می کند. | از تعصب مکان و محدودیت مکان پشتیبانی می کند. |
فیلدهای داده مکان با استفاده از snake case قالب بندی می شوند. | فیلدهای داده مکان با استفاده از جعبه شتر قالب بندی می شوند. |
نتیجه یک مکان را برمیگرداند. | نتایج تا 20 مکان را برمی گرداند. |
محدود به مجموعه ثابتی از انواع مکان و فیلدهای داده مکان . | انتخاب گسترده ای از انواع مکان و فیلدهای داده مکان که به طور منظم به روز می شوند را ارائه می دهد. |
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
8 است (مقدار باید بین 1 و 20 باشد). این تابع در نتایج حلقه می زند و برای هر یک نشانگر اضافه می کند و محدوده نقشه را بر اساس موقعیت نشانگرها تنظیم می کند. از آنجایی که متد 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
نیز پشتیبانی می شود).