سرویس ژئوکدینگ

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

نمای کلی

ژئوکدینگ فرآیند تبدیل آدرس‌ها (مانند «۱۶۰۰ آمفی‌تئاتر پارک‌وی، مانتین ویو، کالیفرنیا») به مختصات جغرافیایی (مانند عرض جغرافیایی ۳۷.۴۲۳۰۲۱ و طول جغرافیایی -۱۲۲.۰۸۳۷۳۹) است که می‌توانید از آن برای قرار دادن نشانگرها یا تعیین موقعیت نقشه استفاده کنید.

ژئوکدینگ معکوس فرآیند تبدیل مختصات جغرافیایی به آدرسی قابل خواندن توسط انسان است (به ژئوکدینگ معکوس (جستجوی آدرس) مراجعه کنید).

همچنین می‌توانید از geocoder برای یافتن آدرس یک شناسه مکان مشخص استفاده کنید.

API جاوا اسکریپت Maps یک کلاس Geocoder برای ژئوکدینگ و ژئوکدینگ معکوس به صورت پویا از ورودی کاربر ارائه می‌دهد. اگر به جای آن می‌خواهید آدرس‌های ایستا و شناخته شده را ژئوکدینگ کنید، به سرویس وب Geocoding مراجعه کنید.

شروع کنید

قبل از استفاده از سرویس Geocoding در Maps JavaScript API، ابتدا مطمئن شوید که Geocoding API در کنسول Google Cloud، در همان پروژه‌ای که برای Maps JavaScript API تنظیم کرده‌اید، فعال شده است.

برای مشاهده لیست API های فعال خود:

  1. به کنسول گوگل کلود بروید.
  2. روی دکمه‌ی «انتخاب پروژه» کلیک کنید، سپس همان پروژه‌ای را که برای Maps JavaScript API تنظیم کرده‌اید، انتخاب کنید و روی «باز کردن» کلیک کنید.
  3. از لیست APIهای موجود در داشبورد ، به دنبال Geocoding API بگردید.
  4. اگر API را در لیست مشاهده کردید، همه چیز آماده است. اگر API در لیست نیست ، آن را فعال کنید:
    1. در بالای صفحه، گزینه‌ی ENABLE API را انتخاب کنید تا تب کتابخانه نمایش داده شود. همچنین می‌توانید از منوی سمت چپ، گزینه‌ی کتابخانه را انتخاب کنید.
    2. عبارت Geocoding API را جستجو کنید، سپس آن را از لیست نتایج انتخاب کنید.
    3. گزینه فعال‌سازی (ENABLE) را انتخاب کنید. پس از اتمام فرآیند، Geocoding API در لیست APIهای موجود در داشبورد ظاهر می‌شود.

قیمت‌گذاری و سیاست‌ها

قیمت‌گذاری

برای کسب اطلاعات بیشتر در مورد قیمت‌گذاری و سیاست‌های استفاده از سرویس Geocoding جاوا اسکریپت، به بخش نحوه استفاده و پرداخت برای API Geocoding مراجعه کنید.

سیاست‌ها

استفاده شما از سرویس Geocoding باید مطابق با سیاست‌های API Geocoding باشد.

درخواست‌های ژئوکدینگ

دسترسی به سرویس Geocoding به صورت غیرهمزمان است و نیاز به فراخوانی یک سرور خارجی دارد. به همین دلیل، متد geocode یک promise را برمی‌گرداند که پس از اتمام درخواست، resolve می‌شود. پس از resolve شدن، می‌توانید .then() یا await برای مدیریت پاسخ استفاده کنید.

دوباره

شما با استفاده از شیء سازنده google.maps.Geocoder در کد خود به سرویس geocoding API نقشه‌های گوگل دسترسی پیدا می‌کنید. متد Geocoder.geocode() درخواستی را به سرویس geocoding آغاز می‌کند و یک شیء GeocoderRequest به صورت تحت‌اللفظی حاوی عبارات ورودی و یک متد callback برای اجرا پس از دریافت پاسخ به آن ارسال می‌کند.

شیء GeocoderRequest به صورت تحت‌اللفظی شامل فیلدهای زیر است:

{
 address: string,
 location: LatLng,
 placeId: string,
 bounds: LatLngBounds,
 componentRestrictions: GeocoderComponentRestrictions,
 region: string
}

پارامترهای الزامی: شما باید یک و فقط یکی از فیلدهای زیر را وارد کنید:

  • address — آدرسی که می‌خواهید آن را ژئوکد کنید.
    یا
    locationLatLng (یا LatLngLiteral ) که می‌خواهید نزدیکترین آدرس قابل خواندن توسط انسان را برای آن بدست آورید. ژئوکودر یک ژئوکود معکوس انجام می‌دهد. برای اطلاعات بیشتر به ژئوکود معکوس مراجعه کنید.
    یا
    placeId — شناسه مکان مکانی که می‌خواهید نزدیک‌ترین آدرس قابل خواندن برای انسان را برای آن بدست آورید. درباره بازیابی آدرس برای یک شناسه مکان بیشتر ببینید.

پارامترهای اختیاری:

  • boundsLatLngBounds که در آن می‌توان نتایج geocode را به طور برجسته‌تری بایاس کرد. پارامتر bounds فقط بر نتایج geocoder تأثیر می‌گذارد، نه به طور کامل آنها را محدود می‌کند. اطلاعات بیشتر در مورد بایاس viewport را در زیر ببینید.
  • componentRestrictions — برای محدود کردن نتایج به یک ناحیه خاص استفاده می‌شود. اطلاعات بیشتر در مورد فیلتر کردن کامپوننت را در زیر ببینید.
  • region — کد منطقه، که به عنوان یک زیربرچسب منطقه یونیکد دو کاراکتری (غیر عددی) مشخص شده است. در بیشتر موارد، این برچسب‌ها مستقیماً به مقادیر دو کاراکتری ccTLD ("دامنه سطح بالا") نگاشت می‌شوند. پارامتر region فقط بر نتایج حاصل از geocoder تأثیر می‌گذارد، نه به طور کامل آنها را محدود می‌کند. اطلاعات بیشتر در مورد بایاس کد منطقه را در زیر ببینید.
  • extraComputations — تنها مقدار مجاز برای این پارامتر ADDRESS_DESCRIPTORS است. برای جزئیات بیشتر به بخش address descriptors مراجعه کنید.
  • fulfillOnZeroResults — در صورت وجود وضعیت ZERO_RESULT در پاسخ، قول را برآورده کنید. این ممکن است مطلوب باشد زیرا حتی با نتایج geocoding صفر، ممکن است هنوز فیلدهای سطح پاسخ اضافی بازگردانده شوند. برای جزئیات بیشتر به Fulfill on Zero Results مراجعه کنید.

پاسخ‌های جغرافیایی

سرویس Geocoding به یک متد فراخوانی نیاز دارد تا پس از بازیابی نتایج geocoder اجرا شود. این فراخوانی باید دو پارامتر برای نگهداری results و یک کد status ، به ترتیب، ارسال کند.

نتایج کدگذاری جغرافیایی

شیء GeocoderResult یک نتیجه geocoding واحد را نشان می‌دهد. یک درخواست geocode ممکن است چندین شیء نتیجه را برگرداند:

results[]: {
 types[]: string,
 formatted_address: string,
 address_components[]: {
   short_name: string,
   long_name: string,
   postcode_localities[]: string,
   types[]: string
 },
 partial_match: boolean,
 place_id: string,
 postcode_localities[]: string,
 geometry: {
   location: LatLng,
   location_type: GeocoderLocationType
   viewport: LatLngBounds,
   bounds: LatLngBounds
 }
}

این فیلدها در زیر توضیح داده شده‌اند:

  • types[] آرایه‌ای است که نوع آدرس نتیجه‌ی برگردانده شده را نشان می‌دهد. این آرایه شامل مجموعه‌ای از صفر یا چند برچسب است که نوع ویژگی برگردانده شده در نتیجه را مشخص می‌کند. برای مثال، یک کد جغرافیایی "شیکاگو" "محلی" را برمی‌گرداند که نشان می‌دهد "شیکاگو" یک شهر است و همچنین "سیاسی" را برمی‌گرداند که نشان می‌دهد یک نهاد سیاسی است. اطلاعات بیشتر در مورد انواع آدرس و انواع مؤلفه‌های آدرس را در زیر مشاهده کنید.
  • formatted_address رشته‌ای است که حاوی آدرس قابل خواندن توسط انسان این مکان است.

    اغلب این آدرس معادل آدرس پستی است. توجه داشته باشید که برخی کشورها، مانند بریتانیا، به دلیل محدودیت‌های صدور مجوز، اجازه توزیع آدرس‌های پستی واقعی را نمی‌دهند.

    آدرس قالب‌بندی شده به طور منطقی از یک یا چند جزء آدرس تشکیل شده است. برای مثال، آدرس "111 خیابان هشتم، نیویورک، نیویورک" از اجزای زیر تشکیل شده است: "111" (شماره خیابان)، "خیابان هشتم" (مسیر)، "نیویورک" (شهر) و "NY" (ایالت ایالات متحده).

    آدرس فرمت‌شده را به صورت برنامه‌نویسی تجزیه نکنید. در عوض، باید از اجزای آدرس منفرد استفاده کنید که پاسخ API علاوه بر فیلد آدرس فرمت‌شده، شامل آن‌ها نیز می‌شود.

  • address_components[] آرایه‌ای است که شامل اجزای جداگانه‌ای است که برای این آدرس قابل استفاده هستند.

    هر جزء آدرس معمولاً شامل فیلدهای زیر است:

    • types[] آرایه‌ای است که نوع مؤلفه آدرس را نشان می‌دهد. لیست انواع پشتیبانی شده را ببینید.
    • long_name توضیحات متنی کامل یا نام کامپوننت آدرس است که توسط Geocoder برگردانده می‌شود.
    • short_name یک نام متنی خلاصه شده برای کامپوننت آدرس است، در صورت وجود. برای مثال، یک کامپوننت آدرس برای ایالت آلاسکا ممکن است دارای یک long_name به شکل "Alaska" و یک short_name به شکل "AK" با استفاده از مخفف پستی دو حرفی باشد.

    به نکات زیر در مورد آرایه address_components[] توجه کنید:

    • آرایه اجزای آدرس ممکن است شامل اجزای بیشتری نسبت به formatted_address باشد.
    • این آرایه لزوماً شامل تمام موجودیت‌های سیاسی که حاوی یک آدرس هستند، به جز آنهایی که در formatted_address قرار دارند، نمی‌شود. برای بازیابی تمام موجودیت‌های سیاسی که حاوی یک آدرس خاص هستند، باید از geocoding معکوس استفاده کنید و طول/عرض جغرافیایی آدرس را به عنوان پارامتر به درخواست ارسال کنید.
    • تضمینی وجود ندارد که قالب پاسخ بین درخواست‌ها یکسان باقی بماند. به طور خاص، تعداد address_components بر اساس آدرس درخواستی متفاوت است و می‌تواند در طول زمان برای همان آدرس تغییر کند. یک جزء می‌تواند موقعیت خود را در آرایه تغییر دهد. نوع جزء می‌تواند تغییر کند. یک جزء خاص ممکن است در پاسخ بعدی وجود نداشته باشد.

    اطلاعات بیشتر در مورد انواع آدرس و انواع مؤلفه آدرس را در زیر مشاهده کنید.

  • partial_match نشان می‌دهد که geocoder تطابق دقیقی برای درخواست اصلی برنگردانده است، اگرچه توانسته بخشی از آدرس درخواستی را مطابقت دهد. شما می‌توانید درخواست اصلی را از نظر غلط املایی و/یا آدرس ناقص بررسی کنید.

    تطابق‌های جزئی اغلب برای آدرس‌های خیابانی رخ می‌دهند که در محلی که در درخواست وارد می‌کنید وجود ندارند. تطابق‌های جزئی همچنین ممکن است زمانی برگردانده شوند که یک درخواست با دو یا چند مکان در یک محل مطابقت داشته باشد. به عنوان مثال، "خیابان هیلپار، بریستول، انگلستان" یک تطابق جزئی برای هر دو خیابان هنری و خیابان هنریتا برمی‌گرداند. توجه داشته باشید که اگر درخواستی شامل یک جزء آدرس با املای اشتباه باشد، سرویس کدگذاری جغرافیایی ممکن است یک آدرس جایگزین پیشنهاد دهد. پیشنهادهایی که به این روش فعال می‌شوند نیز به عنوان یک تطابق جزئی علامت‌گذاری می‌شوند.

  • place_id یک شناسه منحصر به فرد برای یک مکان است که می‌تواند با سایر APIهای گوگل مورد استفاده قرار گیرد. برای مثال، می‌توانید از place_id با کتابخانه Google Places API برای دریافت جزئیات یک کسب و کار محلی، مانند شماره تلفن، ساعات کاری، نظرات کاربران و موارد دیگر استفاده کنید. به نمای کلی شناسه مکان مراجعه کنید.
  • postcode_localities[] آرایه‌ای است که تمام محل‌های موجود در یک کد پستی را نشان می‌دهد و فقط زمانی وجود دارد که نتیجه یک کد پستی باشد که شامل چندین محل باشد.
  • geometry شامل اطلاعات زیر است:

    • location شامل مقدار طول و عرض جغرافیایی با کد جغرافیایی است. توجه داشته باشید که ما این مکان را به عنوان یک شیء LatLng برمی‌گردانیم، نه به عنوان یک رشته فرمت شده.
    • location_type داده‌های اضافی در مورد مکان مشخص شده را ذخیره می‌کند. مقادیر زیر پشتیبانی می‌شوند:
      • ROOFTOP نشان می‌دهد که نتیجه‌ی برگردانده شده، یک کد جغرافیایی دقیق را نشان می‌دهد.
      • RANGE_INTERPOLATED نشان می‌دهد که نتیجه‌ی برگردانده شده، تقریبی (معمولاً در یک جاده) را نشان می‌دهد که بین دو نقطه‌ی دقیق (مانند تقاطع‌ها) درون‌یابی شده است. نتایج درون‌یابی شده معمولاً زمانی بازگردانده می‌شوند که کدهای جغرافیایی پشت بام برای آدرس خیابان در دسترس نباشند.
      • GEOMETRIC_CENTER نشان می‌دهد که نتیجه‌ی برگردانده شده، مرکز هندسی یک نتیجه مانند یک چندخطی (مثلاً یک خیابان) یا چندضلعی (منطقه) است.
      • APPROXIMATE نشان می‌دهد که نتیجه‌ی برگشتی تقریبی است.

    • viewport viewport پیشنهادی برای نتیجه‌ی برگشتی را ذخیره می‌کند.
    • bounds (که به صورت اختیاری برگردانده می‌شود) LatLngBounds ذخیره می‌کند که می‌تواند به طور کامل نتیجه برگردانده شده را در بر بگیرد. توجه داشته باشید که این bounds ممکن است با نمای پیشنهادی مطابقت نداشته باشند. (به عنوان مثال، سانفرانسیسکو شامل جزایر فارالون است که از نظر فنی بخشی از شهر هستند، اما نباید در نمای دید برگردانده شوند.)

آدرس‌ها توسط Geocoder با استفاده از تنظیمات زبان ترجیحی مرورگر یا زبانی که هنگام بارگذاری API جاوا اسکریپت با استفاده از پارامتر language مشخص شده است، بازگردانده می‌شوند. (برای اطلاعات بیشتر، به محلی‌سازی مراجعه کنید. )

انواع آدرس و انواع مؤلفه آدرس

آرایه types[] در GeocoderResult در پاسخ، نوع آدرس را نشان می‌دهد. نمونه‌هایی از انواع آدرس شامل آدرس خیابان، کشور یا یک نهاد سیاسی است. آرایه types در GeocoderAddressComponent نوع هر بخش از آدرس را نشان می‌دهد. مثال‌هایی از جمله شماره خیابان یا کشور.

آدرس‌ها ممکن است انواع مختلفی داشته باشند. این انواع ممکن است به عنوان «برچسب» در نظر گرفته شوند. برای مثال، بسیاری از شهرها با انواع political و locality برچسب‌گذاری شده‌اند.

انواع زیر پشتیبانی می‌شوند و در هر دو آرایه نوع آدرس و نوع جزء آدرس بازگردانده می‌شوند:

نوع آدرس توضیحات
street_address یک آدرس دقیق خیابان.
route یک مسیر نامگذاری شده (مانند "US 101").
intersection تقاطع اصلی، معمولاً بین دو جاده اصلی
political یک نهاد سیاسی. معمولاً این نوع، چندضلعیِ نوعی مدیریت شهری را نشان می‌دهد.
country نهاد سیاسی ملی، و معمولاً بالاترین نوع مرتبۀ برگردانده شده توسط ژئوکودر است.
administrative_area_level_1 یک نهاد مدنی درجه یک پایین‌تر از سطح کشور. در ایالات متحده، این سطوح اداری، ایالت‌ها هستند. همه کشورها این سطوح اداری را ندارند. در بیشتر موارد، نام‌های کوتاه administrative_area_level_1 با زیربخش‌های ISO 3166-2 و سایر فهرست‌های رایج مطابقت نزدیکی دارند؛ با این حال، این تضمین نمی‌شود زیرا نتایج کدگذاری جغرافیایی ما بر اساس انواع سیگنال‌ها و داده‌های مکانی است.
administrative_area_level_2 یک نهاد مدنی درجه دو پایین‌تر از سطح کشور. در ایالات متحده، این سطوح اداری، شهرستان‌ها هستند. همه کشورها این سطوح اداری را ندارند.
administrative_area_level_3 یک نهاد مدنی درجه سه زیر سطح کشور. این نوع نشان دهنده یک تقسیم مدنی جزئی است. همه کشورها این سطوح اداری را ندارند.
administrative_area_level_4 یک نهاد مدنی مرتبه چهارم پایین‌تر از سطح کشور. این نوع نشان‌دهنده یک تقسیم‌بندی مدنی جزئی است. همه کشورها این سطوح اداری را ندارند.
administrative_area_level_5 یک نهاد مدنی مرتبه پنجم پایین‌تر از سطح کشور. این نوع نشان‌دهنده یک تقسیم‌بندی مدنی جزئی است. همه کشورها این سطوح اداری را ندارند.
administrative_area_level_6 یک نهاد مدنی مرتبه ششم پایین‌تر از سطح کشور. این نوع نشان‌دهنده یک تقسیم‌بندی مدنی جزئی است. همه کشورها این سطوح اداری را ندارند.
administrative_area_level_7 یک نهاد مدنی مرتبه هفتم پایین‌تر از سطح کشور. این نوع نشان‌دهنده یک تقسیم‌بندی مدنی جزئی است. همه کشورها این سطوح اداری را ندارند.
colloquial_area یک نام جایگزین رایج برای موجودیت.
locality یک شهر یا نهاد سیاسی شهریِ ثبت‌شده.
sublocality یک موجودیت مدنی مرتبه اول زیر یک محل. برای برخی از مکان‌ها ممکن است یکی از انواع اضافی sublocality_level_1 تا sublocality_level_5 را دریافت کند. هر سطح زیرمحلیت یک موجودیت مدنی است. اعداد بزرگتر نشان دهنده منطقه جغرافیایی کوچکتر هستند.
neighborhood محله ای با نام.
premise یک مکان دارای نام، معمولاً یک ساختمان یا مجموعه‌ای از ساختمان‌ها با یک نام مشترک.
subpremise یک موجودیت قابل آدرس‌دهی پایین‌تر از سطح محل، مانند یک آپارتمان، واحد یا سوئیت.
plus_code یک مرجع مکانی کدگذاری شده، مشتق شده از طول و عرض جغرافیایی. کدهای پلاس می‌توانند به عنوان جایگزینی برای آدرس خیابان‌ها در مکان‌هایی که وجود ندارند (جایی که ساختمان‌ها شماره‌گذاری نشده‌اند یا خیابان‌ها نامگذاری نشده‌اند) استفاده شوند. برای جزئیات بیشتر به https://plus.codes مراجعه کنید.
postal_code کد پستی که برای آدرس‌دهی نامه‌های پستی در داخل کشور استفاده می‌شود.
natural_feature یک ویژگی طبیعی برجسته.
airport یک فرودگاه.
park یک پارک نامگذاری شده.
point_of_interest یک نقطه مورد علاقه نامگذاری شده. معمولاً این "POI" ها نهادهای محلی برجسته ای هستند که به راحتی در دسته دیگری مانند "ساختمان امپایر استیت" یا "برج ایفل" قرار نمی گیرند.

یک لیست خالی از انواع نشان می‌دهد که هیچ نوع شناخته‌شده‌ای برای مؤلفه آدرس خاص (مثلاً Lieu-dit در فرانسه) وجود ندارد.

علاوه بر موارد فوق، اجزای آدرس ممکن است شامل انواع زیر باشند.

توجه: این لیست کامل نیست و ممکن است تغییراتی در آن ایجاد شود.

علاوه بر موارد فوق، اجزای آدرس ممکن است شامل انواع ذکر شده در زیر باشند.

نوع مؤلفه آدرس توضیحات
floor آدرس طبقه یک ساختمان.
establishment معمولاً مکانی که هنوز طبقه‌بندی نشده است.
landmark مکانی نزدیک که به عنوان مرجع برای کمک به جهت‌یابی استفاده می‌شود.
point_of_interest یک نقطه مورد علاقه نامگذاری شده.
parking پارکینگ یا سازه پارکینگ.
post_box یک صندوق پستی خاص.
postal_town گروهی از مناطق جغرافیایی، مانند locality و sublocality ، که برای آدرس‌های پستی در برخی کشورها استفاده می‌شود.
room آدرس اتاق یک ساختمان.
street_number شماره دقیق خیابان.
bus_station ، train_station و transit_station محل ایستگاه اتوبوس، قطار یا وسایل حمل و نقل عمومی.

کدهای وضعیت

کد status ممکن است یکی از مقادیر زیر را برگرداند:

  • "OK" نشان می‌دهد که هیچ خطایی رخ نداده است؛ آدرس با موفقیت تجزیه شده و حداقل یک کد جغرافیایی بازگردانده شده است.
  • "ZERO_RESULTS" نشان می‌دهد که کد جغرافیایی موفقیت‌آمیز بوده اما هیچ نتیجه‌ای برنگردانده است. این ممکن است در صورتی رخ دهد که به کد جغرافیایی یک address ناموجود داده شده باشد.
  • "OVER_QUERY_LIMIT" نشان می‌دهد که از سهمیه خود فراتر رفته‌اید.
  • "REQUEST_DENIED" نشان می‌دهد که درخواست شما رد شده است. صفحه وب مجاز به استفاده از geocoder نیست.
  • "INVALID_REQUEST" عموماً نشان می‌دهد که عبارت جستجو ( address ، components یا latlng ) وجود ندارد.
  • "UNKNOWN_ERROR" نشان می‌دهد که درخواست به دلیل خطای سرور قابل پردازش نیست. اگر دوباره امتحان کنید، ممکن است درخواست با موفقیت انجام شود.
  • "ERROR" نشان می‌دهد که مهلت درخواست تمام شده یا مشکلی در ارتباط با سرورهای گوگل وجود دارد. اگر دوباره امتحان کنید، ممکن است درخواست موفقیت‌آمیز باشد.

مثال جغرافیایی

مثال زیر، کدگذاری جغرافیایی یک آدرس و قرار دادن یک نشانگر در مقادیر طول و عرض جغرافیایی برگردانده شده را نشان می‌دهد. نتیجه کدگذاری جغرافیایی با استفاده از یک promise مدیریت می‌شود. برای کدگذاری جغرافیایی آدرس در آن مکان، روی هر نقطه‌ای از نقشه کلیک کنید.

تایپ اسکریپت

async function geocode(request: google.maps.GeocoderRequest) {
    clear();

    geocoder
        .geocode(request)
        .then((result) => {
            const { results } = result;
            innerMap.setCenter(results[0].geometry.location);
            marker.position = new google.maps.LatLng(results[0].geometry.location);
            mapElement.append(marker);
            responseDiv.style.display = 'block';
            response.innerText = JSON.stringify(result, null, 2);
            return results;
        })
        .catch((e) => {
            alert('Geocode was not successful for the following reason: ' + e);
        });
}

جاوا اسکریپت

async function geocode(request) {
    clear();
    geocoder
        .geocode(request)
        .then((result) => {
        const { results } = result;
        innerMap.setCenter(results[0].geometry.location);
        marker.position = new google.maps.LatLng(results[0].geometry.location);
        mapElement.append(marker);
        responseDiv.style.display = 'block';
        response.innerText = JSON.stringify(result, null, 2);
        return results;
    })
        .catch((e) => {
        alert('Geocode was not successful for the following reason: ' + e);
    });
}

مثال کامل را ببینید.

بایاس کردن ویوپورت

شما می‌توانید به سرویس Geocoding دستور دهید که نتایج درون یک نمای مشخص (که به صورت یک کادر مرزی بیان می‌شود) را ترجیح دهد. شما این کار را با تنظیم پارامتر bounds درون شیء GeocoderRequest به صورت تحت‌اللفظی برای تعریف مرزهای این نمای انجام می‌دهید. توجه داشته باشید که biasing فقط نتایج درون مرزها را ترجیح می‌دهد . اگر نتایج مرتبط‌تری خارج از این مرزها وجود داشته باشد، ممکن است گنجانده شوند.

برای مثال، یک کد جغرافیایی برای "Winnetka" عموماً این حومه شیکاگو را برمی‌گرداند:

{
  "types":["locality","political"],
  "formatted_address":"Winnetka, IL, USA",
  "address_components":[{
    "long_name":"Winnetka",
    "short_name":"Winnetka",
    "types":["locality","political"]
  },{
    "long_name":"Illinois",
    "short_name":"IL",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "geometry":{
    "location":[ -87.7417070, 42.1083080],
    "location_type":"APPROXIMATE"
  },
  "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q"
}

با این حال، تعیین پارامتر bounds که یک کادر مرزی برای دره سن فرناندو لس‌آنجلس تعریف می‌کند، منجر به این می‌شود که این geocode محله‌ای به نام "Winnetka" را در آن مکان بازگرداند:

{
  "types":["sublocality","political"],
  "formatted_address":"Winnetka, California, USA",
  "address_components":[{
    "long_name":"Winnetka",
    "short_name":"Winnetka",
    "types":["sublocality","political"]
  },{
    "long_name":"Los Angeles",
    "short_name":"Los Angeles",
    "types":["administrative_area_level_3","political"]
  },{
    "long_name":"Los Angeles",
    "short_name":"Los Angeles",
    "types":["administrative_area_level_2","political"]
  },{
    "long_name":"California",
    "short_name":"CA",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "geometry":{
    "location": [34.213171,-118.571022],
    "location_type":"APPROXIMATE"
  },
  "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ"
}

بایاس کد منطقه

شما می‌توانید سرویس Geocoding را طوری تنظیم کنید که نتایج را با استفاده از پارامتر region به طور صریح به یک منطقه خاص ارجاع دهد. این پارامتر یک کد منطقه را می‌گیرد که به عنوان یک زیربرچسب منطقه Unicode دو کاراکتری (غیر عددی) مشخص می‌شود. این برچسب‌ها مستقیماً به مقادیر دو کاراکتری ccTLD ("دامنه سطح بالا") آشنا مانند "uk" در "co.uk" نگاشت می‌شوند. در برخی موارد، برچسب region همچنین از کدهای ISO-3166-1 پشتیبانی می‌کند که گاهی اوقات با مقادیر ccTLD متفاوت هستند (به عنوان مثال "GB" برای "بریتانیای کبیر").

هنگام استفاده از پارامتر region :

  • فقط یک کشور یا منطقه را مشخص کنید. مقادیر چندگانه نادیده گرفته می‌شوند و می‌توانند منجر به درخواست ناموفق شوند.
  • فقط از زیربرچسب‌های ناحیه‌ای دو کاراکتری (با فرمت Unicode CLDR) استفاده کنید. سایر ورودی‌ها منجر به خطا خواهند شد.
  • فقط کشورها و مناطقی که در جزئیات پوشش پلتفرم نقشه‌های گوگل فهرست شده‌اند، پشتیبانی می‌شوند.

درخواست‌های ژئوکدینگ را می‌توان برای هر دامنه‌ای که برنامه اصلی نقشه‌های گوگل در آن ژئوکدینگ ارائه می‌دهد، ارسال کرد. توجه داشته باشید که بایاس کردن فقط نتایج مربوط به یک دامنه خاص را ترجیح می‌دهد ؛ اگر نتایج مرتبط‌تری خارج از این دامنه وجود داشته باشد، ممکن است گنجانده شوند.

برای مثال، یک کد جغرافیایی برای "تولدو" این نتیجه را برمی‌گرداند، زیرا دامنه پیش‌فرض سرویس کد جغرافیایی روی ایالات متحده تنظیم شده است:

{
  "types":["locality","political"],
  "formatted_address":"Toledo, OH, USA",
  "address_components":[{
    "long_name":"Toledo",
    "short_name":"Toledo",
    "types":["locality","political"]
  },{
    "long_name":"Ohio",
    "short_name":"OH",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw"
}

یک کد جغرافیایی برای "تولدو" با فیلد region تنظیم شده روی 'es' (اسپانیا)، شهر اسپانیا را برمی‌گرداند:

{
  "types":["locality","political"],
  "formatted_address":"Toledo, España",
  "address_components":[{
    "long_name":"Toledo",
    "short_name":"Toledo",
    "types":["locality","political"]
  },{
    "long_name":"Toledo",
    "short_name":"TO",
    "types":["administrative_area_level_2","political"]
  },{
    "long_name":"Castilla-La Mancha",
    "short_name":"CM",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"España",
    "short_name":"ES",
    "types":["country","political"]
  }],
  "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y"
}

فیلتر کردن کامپوننت

شما می‌توانید با استفاده از یک فیلتر اجزا، سرویس Geocoding را طوری تنظیم کنید که نتایج آدرس را محدود به یک منطقه خاص برگرداند. فیلتر را در پارامتر componentRestrictions مشخص کنید. مقادیر فیلتر از همان روش‌های تصحیح املا و تطبیق جزئی مانند سایر درخواست‌های geocoding پشتیبانی می‌کنند.

ژئوکودر فقط نتایجی را برمی‌گرداند که با تمام فیلترهای اجزا مطابقت دارند. یعنی، مشخصات فیلتر را به صورت AND ارزیابی می‌کند، نه OR.

یک فیلتر کامپوننت شامل یک یا چند مورد از موارد زیر است:

  • route با نام بلند یا کوتاه یک مسیر مطابقت دارد.
  • تطابق locality با انواع محلی و زیرمحلی.
  • administrativeArea با تمام سطوح ناحیه اداری مطابقت دارد.
  • postalCode با کدهای پستی و پیشوندهای کد پستی مطابقت دارد.
  • country با نام کشور یا کد دو حرفی ISO 3166-1 کشور مطابقت دارد. توجه: API از استاندارد ISO برای تعریف کشورها پیروی می‌کند و فیلتر کردن هنگام استفاده از کد ISO مربوطه برای کشور، بهترین عملکرد را دارد.

مثال زیر استفاده از پارامتر componentRestrictions را برای فیلتر کردن بر اساس country و postalCode نشان می‌دهد:

async function codeAddress(request: google.maps.GeocoderRequest) {
    clear();
    geocoder.geocode({
        componentRestrictions: {
            country: 'AU',
            postalCode: '2000'
        }
    })
    .then((result) => {
        const { results } = result;
        innerMap.setCenter(results[0].geometry.location);
        let marker = new google.maps.marker.AdvancedMarkerElement({
            map: innerMap,
            position: results[0].geometry.location
        });
    })
    .catch((e) => {
        alert('Geocode was not successful for the following reason: ' + e);
    });
};

بدون نتیجه، به خواسته‌هایتان برسید

برای ژئوکدینگ معکوس، به طور پیش‌فرض، promise در status=ZERO_RESULTS شکسته می‌شود. با این حال، فیلدهای سطح پاسخ اضافی plus_code و address_descriptor ممکن است در این مورد همچنان پر شوند. اگر برای پارامتر fulfillOnZeroResults مقدار true ارائه شود، در این مورد پر می‌شوند. اگر برای پارامتر fulfillOnZeroResults مقدار true ارائه شود، promise خراب نمی‌شود و این فیلدهای اضافی در صورت وجود، از promise قابل دسترسی هستند.

در ادامه مثالی از این رفتار برای طول/عرض جغرافیایی در قطب جنوب آمده است. اگرچه هیچ نتیجه‌ی معکوسی برای geocoding وجود ندارد، اما اگر مقدار fulfillOnZeroResults=true تنظیم کنیم، می‌توانیم کد مثبت را در promise چاپ کنیم.

function addressDescriptorReverseGeocoding() {
  var latlng = new google.maps.LatLng(-75.290330, 38.653861);
  geocoder
    .geocode({
      'location': latlng,
      'fulfillOnZeroResults': true,
    })
    .then((response) => {
      console.log(response.plus_code);
    })
    .catch((error) => {
      window.alert(`Error: ${error}`);
    });
}

توصیف‌گرهای آدرس

توصیف‌گرهای آدرس شامل اطلاعات اضافی هستند که به توصیف یک مکان با استفاده از علائم و مناطق کمک می‌کنند. برای بررسی این ویژگی ، نسخه آزمایشی توصیف‌گرهای آدرس را بررسی کنید.

توصیف‌گرهای آدرس را می‌توان با استفاده از پارامتر extraComputations فعال کرد. برای دریافت توصیف‌گرهای آدرس در پاسخ خود extra_computations=ADDRESS_DESCRIPTORS را در یک درخواست geocoding ، درخواست geocoding معکوس یا درخواست geocoding مکان‌ها وارد کنید.

مثال در مکان‌های جغرافیایی

عبارت جستجوی زیر شامل آدرس مکانی در دهلی است.

function addressDescriptorPlaceIdLookup() {
  geocoder.geocode({
  geocoder.geocode({
    'placeId': 'ChIJyxAX8Bj9DDkRgBfAnBYa66Q',
    'extraComputations': ['ADDRESS_DESCRIPTORS']
    }, function(results, status) {
    if (status == 'OK') {
      console.log(results[0].address_descriptor);
    } else {
      window.alert('Geocode was not successful for the following reason: ' + status);
    }
  });
}

مثال در ژئوکدینگ معکوس

کوئری زیر شامل مقدار طول/عرض جغرافیایی برای مکانی در دهلی است.

    function addressDescriptorReverseGeocoding() {
      var latlng = new google.maps.LatLng(28.640964,77.235875);
      geocoder
        .geocode({
          'location': latlng,
          'extraComputations': ["ADDRESS_DESCRIPTORS"],
        })
        .then((response) => {
          console.log(response.address_descriptor);
        })
        .catch((error) => {
          window.alert(`Error`);
        });
    }
  

مثال توصیفگر آدرس

یک مثال address_descriptor به شرح زیر است.

  {
    "address_descriptor" : {
       "areas" : [
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Turkman Gate"
             },
             "place_id" : "ChIJ_7LLvyb9DDkRMKKxP9YyXgs"
          },
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Chandni Chowk"
             },
             "place_id" : "ChIJWcXciBr9DDkRUb4dCDykTwI"
          },
          {
             "containment" : "NEAR",
             "display_name" : {
                "language_code" : "en",
                "text" : "Katar Ganj"
             },
             "place_id" : "ChIJH3cWUyH9DDkRaw-9CjvcRvY"
          }
       ],
       "landmarks" : [
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delite Cinema"
             },
             "straight_line_distance_meters" : 29.9306755065918,
             "place_id" : "ChIJLfiYDCT9DDkROoEa7NdupUM",
             "travel_distance_meters" : 418.7794799804688,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "establishment", "movie_theater", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "YES Bank"
             },
             "straight_line_distance_meters" : 66.83731079101562,
             "place_id" : "ChIJFYHM3yb9DDkRRKGkZl2mpSQ",
             "travel_distance_meters" : 489.0340270996094,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "UCO Bank"
             },
             "straight_line_distance_meters" : 25.38849639892578,
             "place_id" : "ChIJ-c6_wCb9DDkRjIk1LeqRtGM",
             "travel_distance_meters" : 403.2246398925781,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "atm", "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delhi By Cycle Meeting Point"
             },
             "straight_line_distance_meters" : 44.02867126464844,
             "place_id" : "ChIJNxVfkSb9DDkRJD22l-eGFdM",
             "travel_distance_meters" : 97.41281890869141,
             "spatial_relationship" : "AROUND_THE_CORNER",
             "types" : [
                "establishment",
                "point_of_interest",
                "tourist_attraction",
                "travel_agency"
             ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Axis Bank Branch"
             },
             "straight_line_distance_meters" : 102.3495178222656,
             "place_id" : "ChIJr3uaDCT9DDkR8roHTVSn1x4",
             "travel_distance_meters" : 330.8566284179688,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          }
       ]
    }
  }

در هر شیء address_descriptor دو آرایه وجود دارد: landmarks و areas . آرایه landmarks شامل حداکثر ۵ نتیجه است که به ترتیب ارتباط با در نظر گرفتن نزدیکی به مختصات درخواستی، شیوع نشانه جغرافیایی و میزان دید آن رتبه‌بندی شده‌اند. هر نتیجه نشانه جغرافیایی شامل مقادیر زیر است:

  • place_id شناسه مکان نتیجه لندمارک‌ها است. نمای کلی شناسه مکان را ببینید.
  • display_name نام نمایشی لندمارک است و شامل language_code و text می‌شود.
  • straight_line_distance_meters فاصله نقطه به نقطه بر حسب متر بین مختصات ورودی و نتیجه نقاط دیدنی است.
  • travel_distance_meters مسافت پیموده شده بر حسب متر با استفاده از شبکه جاده‌ای (با نادیده گرفتن محدودیت‌های جاده‌ای) بین مختصات ورودی و نتیجه‌ی نقاط دیدنی است.
  • spatial_relationship رابطه تخمینی بین مختصات ورودی و نتیجه نقاط دیدنی است:
    • رابطه‌ی پیش‌فرض زمانی "NEAR" است که هیچ یک از موارد زیر صدق نکند.
    • "WITHIN" زمانی که مختصات ورودی در محدوده سازه مرتبط با نقطه عطف قرار دارد.
    • وقتی مختصات ورودی مستقیماً در مجاورت بنای تاریخی یا نقطه دسترسی به آن باشد، "BESIDE" .
    • "ACROSS_THE_ROAD" وقتی مختصات ورودی مستقیماً روبروی نقطه عطف در طرف دیگر مسیر است.
    • وقتی مختصات ورودی در امتداد همان مسیر نقطه عطف باشد، "DOWN_THE_ROAD" ، اما "BESIDES" یا "ACROSS_THE_ROAD" نمی‌شود.
    • "AROUND_THE_CORNER" زمانی که مختصات ورودی در امتداد یک مسیر عمود بر مسیر اصلی (محدود به یک چرخش) باشد.
    • "BEHIND" زمانی که مختصات ورودی از نظر مکانی به نقطه عطف نزدیک است، اما از نقطه دسترسی آن دور است.
  • types ، انواع مکانِ نشانه هستند.

شیء areas شامل حداکثر ۳ پاسخ است و خود را به مکان‌هایی محدود می‌کند که نشان‌دهنده مناطق کوچک مانند محله‌ها، زیرمحله‌ها و مجتمع‌های بزرگ هستند. مناطقی که شامل مختصات درخواستی هستند، ابتدا فهرست شده و از کوچکترین به بزرگترین مرتب می‌شوند. نتیجه هر areas شامل مقادیر زیر است:

  • place_id شناسه مکان نتیجه مناطق است. به نمای کلی شناسه مکان مراجعه کنید.
  • display_name نام نمایشی ناحیه است و شامل language_code و text می‌شود.
  • containment رابطه مهار تخمینی بین مختصات ورودی و نتیجه مساحت‌ها است:
    • رابطه‌ی پیش‌فرض زمانی "NEAR" است که هیچ یک از موارد زیر صدق نکند.
    • وقتی مختصات ورودی نزدیک به مرکز ناحیه باشد، "WITHIN" .
    • "OUTSKIRTS" وقتی مختصات ورودی نزدیک به لبه منطقه باشد.

پوشش توصیفگر آدرس

توصیف‌گرهای آدرس برای هند به صورت GA هستند. استفاده از توصیف‌گرهای آدرس در هند هیچ هزینه اضافی ندارد و استفاده از آنها توسط SKU موجود Geocoding (India) Essentials پوشش داده می‌شود.

بازخورد

این ویژگی در همه مناطق موجود است. این ویژگی برای هند در جورجیا و برای سایر مناطق در مرحله آزمایشی پیش از جورجیا است. از بازخورد شما سپاسگزاریم:

ژئوکدینگ معکوس (جستجوی آدرس)

اصطلاح ژئوکدینگ (geocding) عموماً به ترجمه یک آدرس قابل خواندن توسط انسان به مکانی روی نقشه اشاره دارد. فرآیند انجام عکس این عمل، یعنی ترجمه یک مکان روی نقشه به آدرسی قابل خواندن توسط انسان، به عنوان ژئوکدینگ معکوس شناخته می‌شود.

به جای ارائه address متنی، یک جفت طول و عرض جغرافیایی که با کاما از هم جدا شده‌اند را در پارامتر location وارد کنید.

مثال زیر یک مقدار طول/عرض جغرافیایی را ژئوکد می‌کند و نقشه را در آن مکان متمرکز می‌کند و یک پنجره اطلاعات با آدرس قالب‌بندی شده را نمایش می‌دهد. برای ژئوکد کردن مکان، روی هر جایی از نقشه کلیک کنید یا مختصات خود را وارد کنید.

تایپ اسکریپت

let marker;

async function initMap() {
    //  Request the needed libraries.
    const [{ Map, InfoWindow }, { Geocoder }, { AdvancedMarkerElement }] =
        await Promise.all([
            google.maps.importLibrary(
                'maps'
            ) as Promise<google.maps.MapsLibrary>,
            google.maps.importLibrary(
                'geocoding'
            ) as Promise<google.maps.GeocodingLibrary>,
            google.maps.importLibrary(
                'marker'
            ) as Promise<google.maps.MarkerLibrary>,
        ]);

    // Get the gmp-map element.
    const mapElement = document.querySelector(
        'gmp-map'
    ) as google.maps.MapElement;

    // Get the inner map.
    const innerMap = mapElement.innerMap;

    // Get the latlng input box.
    const latLngQuery = document.getElementById('latlng') as HTMLInputElement;

    // Get the submit button.
    const submitButton = document.getElementById('submit') as HTMLElement;

    // Set the cursor to crosshair.
    innerMap.setOptions({
        draggableCursor: 'crosshair',
        zoom: 13,
        mapTypeControl: false,
    });

    // Create a marker for re-use.
    marker = new AdvancedMarkerElement({
        map: innerMap,
    });

    marker.anchorTop = "40px";

    const geocoder = new Geocoder();
    const infowindow = new InfoWindow();

    // Add a click event listener to the submit button.
    submitButton.addEventListener('click', () => {
        geocodeLatLng(geocoder, innerMap, infowindow);
    });

    // Add a click event listener to the map.
    innerMap.addListener('click', (event) => {
        latLngQuery.value = `${event.latLng.lat()}, ${event.latLng.lng()}`;
        geocodeLatLng(geocoder, innerMap, infowindow);
    });

    // Make an initial request upon loading.
    geocodeLatLng(geocoder, innerMap, infowindow);
}

async function geocodeLatLng(
    geocoder: google.maps.Geocoder,
    map: google.maps.Map,
    infowindow: google.maps.InfoWindow
) {
    const input = (document.getElementById('latlng') as HTMLInputElement).value;
    const latlngStr = input.split(',', 2);
    const latlng = {
        lat: parseFloat(latlngStr[0]),
        lng: parseFloat(latlngStr[1]),
    };

    geocoder
        .geocode({ location: latlng })
        .then((response) => {
            if (response.results[0]) {
                marker.position = latlng;
                map.setCenter(latlng);
                infowindow.setContent(response.results[0].formatted_address);
                infowindow.open(map, marker);
            } else {
                window.alert('No results found');
            }
        })
        .catch((e) => window.alert('Geocoder failed due to: ' + e));
}

initMap();

جاوا اسکریپت

let marker;
async function initMap() {
    //  Request the needed libraries.
    const [{ Map, InfoWindow }, { Geocoder }, { AdvancedMarkerElement }] = await Promise.all([
        google.maps.importLibrary('maps'),
        google.maps.importLibrary('geocoding'),
        google.maps.importLibrary('marker'),
    ]);
    // Get the gmp-map element.
    const mapElement = document.querySelector('gmp-map');
    // Get the inner map.
    const innerMap = mapElement.innerMap;
    // Get the latlng input box.
    const latLngQuery = document.getElementById('latlng');
    // Get the submit button.
    const submitButton = document.getElementById('submit');
    // Set the cursor to crosshair.
    innerMap.setOptions({
        draggableCursor: 'crosshair',
        zoom: 13,
        mapTypeControl: false,
    });
    // Create a marker for re-use.
    marker = new AdvancedMarkerElement({
        map: innerMap,
    });
    marker.anchorTop = "40px";
    const geocoder = new Geocoder();
    const infowindow = new InfoWindow();
    // Add a click event listener to the submit button.
    submitButton.addEventListener('click', () => {
        geocodeLatLng(geocoder, innerMap, infowindow);
    });
    // Add a click event listener to the map.
    innerMap.addListener('click', (event) => {
        latLngQuery.value = `${event.latLng.lat()}, ${event.latLng.lng()}`;
        geocodeLatLng(geocoder, innerMap, infowindow);
    });
    // Make an initial request upon loading.
    geocodeLatLng(geocoder, innerMap, infowindow);
}
async function geocodeLatLng(geocoder, map, infowindow) {
    const input = document.getElementById('latlng').value;
    const latlngStr = input.split(',', 2);
    const latlng = {
        lat: parseFloat(latlngStr[0]),
        lng: parseFloat(latlngStr[1]),
    };
    geocoder
        .geocode({ location: latlng })
        .then((response) => {
        if (response.results[0]) {
            marker.position = latlng;
            map.setCenter(latlng);
            infowindow.setContent(response.results[0].formatted_address);
            infowindow.open(map, marker);
        }
        else {
            window.alert('No results found');
        }
    })
        .catch((e) => window.alert('Geocoder failed due to: ' + e));
}
initMap();
مشاهده مثال

نمونه را امتحان کنید

توجه داشته باشید که در مثال قبلی، اولین نتیجه را با انتخاب results[0] نشان دادیم. کد جغرافیایی معکوس اغلب بیش از یک نتیجه را برمی‌گرداند. آدرس‌های کد جغرافیایی فقط آدرس‌های پستی نیستند، بلکه هر روشی برای نامگذاری جغرافیایی یک مکان هستند. به عنوان مثال، هنگام کد جغرافیایی یک نقطه در شهر شیکاگو، نقطه کد جغرافیایی ممکن است به عنوان آدرس خیابان، به عنوان شهر (شیکاگو)، به عنوان ایالت آن (ایلینوی) یا به عنوان یک کشور (ایالات متحده) برچسب گذاری شود. همه اینها آدرس‌هایی برای کد جغرافیایی هستند. کد جغرافیایی معکوس همه این نتایج را برمی‌گرداند.

ژئوکودر معکوس، موجودیت‌های سیاسی (کشورها، استان‌ها، شهرها و محله‌ها)، آدرس‌های خیابان‌ها و کدهای پستی را با هم تطبیق می‌دهد.

در اینجا مثالی از لیست آدرس‌هایی که کوئری بالا ممکن است برگرداند، آورده شده است:

results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA"
results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA"
results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA"
results[3].formatted_address: "Brooklyn, NY, USA"
results[4].formatted_address: "New York, NY, USA"
results[5].formatted_address: "Brooklyn, NY 11211, USA"
results[6].formatted_address: "Kings County, NY, USA"
results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA"
results[8].formatted_address: "New York Metropolitan Area, USA"
results[9].formatted_address: "New York, USA"

آدرس‌ها به ترتیب از بهترین تا کمترین تطابق برگردانده می‌شوند. به‌طورکلی، آدرس دقیق‌تر، برجسته‌ترین نتیجه است، همانطور که در این مورد نیز همینطور است. توجه داشته باشید که ما انواع مختلفی از آدرس‌ها را برمی‌گردانیم، از خاص‌ترین آدرس خیابان گرفته تا نهادهای سیاسی کمتر خاص مانند محله‌ها، شهرها، شهرستان‌ها، ایالت‌ها و غیره. اگر می‌خواهید یک آدرس عمومی‌تر را مطابقت دهید، می‌توانید فیلد results[].types را بررسی کنید.

نکته: ژئوکدینگ معکوس یک علم دقیق نیست. ژئوکدینگر تلاش می‌کند تا نزدیک‌ترین مکان قابل آدرس‌دهی را در یک تلرانس مشخص پیدا کند.

بازیابی آدرس برای یک شناسه مکان

برای یافتن آدرس یک شناسه مکان مشخص، یک placeId ارائه دهید. شناسه مکان یک شناسه منحصر به فرد است که می‌تواند با سایر APIهای گوگل مورد استفاده قرار گیرد. برای مثال، می‌توانید placeId برگردانده شده توسط Roads API را ارائه دهید تا آدرس یک نقطه snap شده را دریافت کنید. برای اطلاعات بیشتر در مورد شناسه‌های مکان، به مرور کلی شناسه مکان مراجعه کنید.

وقتی یک placeId ارائه می‌دهید، درخواست نمی‌تواند شامل هیچ یک از فیلدهای زیر باشد:

  • address
  • latLng
  • location
  • componentRestrictions

مثال زیر یک شناسه مکان را می‌پذیرد، آدرس مربوطه را پیدا می‌کند و نقشه را در آن مکان متمرکز می‌کند. همچنین یک پنجره اطلاعات نمایش می‌دهد که آدرس قالب‌بندی شده مکان مربوطه را نشان می‌دهد:

تایپ اسکریپت

// Initialize the map.
function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 8,
      center: { lat: 40.72, lng: -73.96 },
    }
  );
  const geocoder = new google.maps.Geocoder();
  const infowindow = new google.maps.InfoWindow();

  (document.getElementById("submit") as HTMLElement).addEventListener(
    "click",
    () => {
      geocodePlaceId(geocoder, map, infowindow);
    }
  );
}

// This function is called when the user clicks the UI button requesting
// a geocode of a place ID.
function geocodePlaceId(
  geocoder: google.maps.Geocoder,
  map: google.maps.Map,
  infowindow: google.maps.InfoWindow
) {
  const placeId = (document.getElementById("place-id") as HTMLInputElement)
    .value;

  geocoder
    .geocode({ placeId: placeId })
    .then(({ results }) => {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);

        const marker = new google.maps.Marker({
          map,
          position: results[0].geometry.location,
        });

        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert("No results found");
      }
    })
    .catch((e) => window.alert("Geocoder failed due to: " + e));
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

جاوا اسکریپت

// Initialize the map.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 8,
    center: { lat: 40.72, lng: -73.96 },
  });
  const geocoder = new google.maps.Geocoder();
  const infowindow = new google.maps.InfoWindow();

  document.getElementById("submit").addEventListener("click", () => {
    geocodePlaceId(geocoder, map, infowindow);
  });
}

// This function is called when the user clicks the UI button requesting
// a geocode of a place ID.
function geocodePlaceId(geocoder, map, infowindow) {
  const placeId = document.getElementById("place-id").value;

  geocoder
    .geocode({ placeId: placeId })
    .then(({ results }) => {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);

        const marker = new google.maps.Marker({
          map,
          position: results[0].geometry.location,
        });

        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert("No results found");
      }
    })
    .catch((e) => window.alert("Geocoder failed due to: " + e));
}

window.initMap = initMap;
مشاهده مثال

نمونه را امتحان کنید