API مکانها میتواند اطلاعات دقیقی در مورد یک مکان خاص را برگرداند. این صفحه تفاوتهای بین جزئیات مکان را آنطور که در کلاس Place (جدید) و PlacesService (قدیمی) استفاده میشود، توضیح میدهد و چند قطعه کد برای مقایسه ارائه میدهد. جدول زیر برخی از تفاوتهای اصلی در استفاده از جزئیات مکان بین کلاس Place و PlacesService را فهرست میکند:
PlacesService (قدیمی) | Place (جدید) |
|---|---|
getDetails() | fetchFields() |
PlaceDetailsRequest | FetchFieldsRequest |
متدها برای مدیریت شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus نیاز به استفاده از یک تابع فراخوانی (callback) دارند. | از Promiseها استفاده میکند و به صورت ناهمگام کار میکند. |
متدها نیاز به بررسی PlacesServiceStatus دارند. | نیازی به بررسی وضعیت نیست، میتواند از مدیریت خطای استاندارد استفاده کند. اطلاعات بیشتر . |
| فیلدهای داده مکان با استفاده از حالت مار (snake case) قالببندی میشوند. | فیلدهای داده مکان با استفاده از حالت شتری قالببندی میشوند. |
| محدود به مجموعهای ثابت از انواع مکانها و فیلدهای داده مکان . | طیف گستردهای از انواع مکانها و فیلدهای داده مکان که مرتباً بهروزرسانی میشوند را ارائه میدهد. |
مقایسه کد
این بخش دو قطعه کد مشابه را مقایسه میکند تا تفاوتهای بین سرویس مکانها و کلاس مکان را نشان دهد. قطعه کدها، کد مورد نیاز در هر API مربوطه را برای ایجاد درخواست جزئیات مکان نشان میدهند و سپس از دادههای مکان حاصل برای افزودن یک نشانگر به نقشه استفاده میکنند.
خدمات اماکن (قدیمی)
قطعه کد خلاصه زیر، نحوه ایجاد درخواست جزئیات مکان با استفاده از PlacesService را نشان میدهد. این درخواست از یک فراخوانی برگشتی استفاده میکند و شامل یک بررسی شرطی مورد نیاز روی PlacesServiceStatus است. فیلدهای داده مکان مورد نیاز در بدنه درخواست مشخص شدهاند.
function getPlaceDetails() {
// Instantiate the Places Service.
const service = new google.maps.places.PlacesService(map);
// Make a request using the Place ID.
const request = {
placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4",
fields: ["name", "formatted_address", "place_id", "geometry"],
};
// Request place details.
service.getDetails(request, (place, status) => {
// Check whether PlacesServiceStatus is OK.
if (
status === google.maps.places.PlacesServiceStatus.OK &&
place &&
place.geometry &&
place.geometry.location
) {
// Log the result.
console.log(place.name);
console.log(place.formatted_address);
// Add a marker for the place.
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
title: place.name,
});
}
});
}
بیشتر بدانید
کلاس مکان (جدید)
قطعه کد فشرده زیر، نحوه ایجاد درخواست جزئیات مکان با استفاده از کلاس Place را نشان میدهد. این درخواست ناهمزمان است و شامل بررسی وضعیت نمیشود (میتوان از مدیریت خطای استاندارد استفاده کرد). از یک شناسه مکان برای ایجاد یک نمونه جدید Place استفاده میشود که برای ایجاد درخواست استفاده میشود ( fetchFields() ). فیلدهای داده مکان مورد نیاز تا زمانی که fetchFields() فراخوانی نشود، ارسال نمیشوند، که انعطافپذیری بیشتری را به همراه دارد. از آنجا که متد fetchFields() از عملگر await استفاده میکند، فقط میتوان از آن در داخل یک تابع async استفاده کرد.
async function getPlaceDetails() {
// Use place ID to create a new Place instance.
const place = new google.maps.places.Place({
id: "ChIJN5Nz71W3j4ARhx5bwpTQEGg",
requestedLanguage: "en", // optional
});
// Call fetchFields, passing the needed data fields.
await place.fetchFields({
fields: ["displayName", "formattedAddress", "location"],
});
// Log the result.
console.log(place.displayName);
console.log(place.formattedAddress);
// Add an Advanced Marker.
const marker = new google.maps.marker.AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
}