انتقال به «جزئیات مکان» جدید

توسعه‌دهندگان منطقه اقتصادی اروپا (EEA)

Places API می‌تواند اطلاعات دقیقی درباره مکانی خاص برگرداند. این صفحه تفاوت‌های بین جزئیات مکان را که در کلاس Place (جدید) و PlacesService (قدیمی) استفاده می‌شود توضیح می‌دهد و چند تکه‌کد برای مقایسه ارائه می‌دهد. جدول زیر برخی‌از تفاوت‌های اصلی در استفاده از جزئیات مکان بین کلاس Place و PlacesService را فهرست می‌کند:

PlacesService (قدیمی) Place (جدید)
getDetails() fetchFields()
PlaceDetailsRequest FetchFieldsRequest
روش‌ها برای مدیریت کردن شیء نتایج و google.maps.places.PlacesServiceStatus پاسخ نیاز به استفاده از تماس برگشتی دارند. از Promises استفاده می‌کند و به‌صورت ناهمگام کار می‌کند.
روش‌ها نیاز به بررسی PlacesServiceStatus دارند. بررسی وضعیت الزامی نیست، می‌توان از مدیریت خطای استاندارد استفاده کرد. بیشتر بدانید.
فیلدهای داده مکان بااستفاده از حروف کوچک مارپیچی قالب‌بندی می‌شوند. فیلدهای داده مکان بااستفاده از حروف شتری قالب‌بندی می‌شوند.
به مجموعه ثابتی از انواع مکان و فیلدهای داده مکان محدود می‌شود. انتخاب گسترده‌ای از انواع مکان و فیلدهای داده مکان را که به‌طور منظم به‌روزرسانی می‌شوند ارائه می‌دهد.

مقایسه کد

این بخش دو قطعه کد مشابه را برای نشان دادن تفاوت‌های بین «سرویس مکان‌ها» و کلاس «مکان» مقایسه می‌کند. تکه‌کدها کد موردنیاز در هریک از «میاناهای برنامه‌سازی کاربردی» مربوطه را برای ایجاد درخواست جزئیات مکان نشان می‌دهد، و سپس از داده‌های مکان حاصل برای افزودن نشانگر به نقشه استفاده می‌کند.

«سرویس مکان‌ها» (قدیمی)

تکه‌کد فشرده زیر نحوه درخواست جزئیات مکان را بااستفاده از 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,
  });
}

بیشتر بدانید