در حال بارگذاری

پرش به مطلب اصلی

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

اطلاع

صفحه‌ای که در حال مشاهده آن هستید، حاوی مستندات آخرین نسخه سرویس تبدیل آدرس به موقعیت می‌باشد. مستندات مرتبط با نسخه‌های قدیمی این سرویس را در صفحات نسخه 6.0.0 و نسخه 4.0.0 می‌توانید مشاهده کنید.

اطلاع
  1. ۱

    اولین قدم ثبت‌نام و دریافت API KEY برای اپلیکیشنی است که قصد دارید در آن از Map Api نشان استفاده کنید. کافیست در لینک فوق فرم مربوطه را تکمیل کنید تا بلافاصله API KEY را دریافت نمایید.

  2. ۲

    Api Key دریافتی از پنل توسعه‌دهندگان نشان را به صورتی که در ادامه مشاهده می‌کنید از طریق کلید Api-Key در header درخواست سرویس بگنجانید.

  3. ۳

    درخواست خود را با توجه به پارامترهایی که مربوط به سرویس موردنظرتان است با متد GET فراخوانی کنید.

  4. ۴

    چنانچه درخواست شما با موفقیت پردازش و پاسخ داده شود، خروجی با فرمت JSON دریافت خواهید کرد و چنانچه به هر دلیل خطایی رخ دهد، کد خطا بصورت HTTP Status Code و نوع آن با فرمت JSON ارسال می‌گردد. کدهای خطای احتمالی نیز در ادامه به صورت کامل توضیح داده شده‌اند.

معرفی سرویس

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

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

آدرس‌های متنی که معمولا در سامانه‌ها و کسب‌وکارها مورد استفاده قرار می‌گیرند را می‌توانیم به دو دسته تقسیم کنیم:

۱. آدرس‌های مبتنی بر اطلاعات پستی (برگرفته از سرویس‌های کد پستی)

۲. آدرس‌های واردشده توسط کاربران (آدرس‌های عام)

هرکدام از این دسته‌ها، ویژگی‌ها و چالش‌های مخصوص به خود را دارند. به‌عنوان مثال، آدرس‌های پستی معمولا استاندارد هستند، اما ممکن است برای کاربران ناآشنا باشند؛ در نتیجه، کاربران آدرس یک نقطه را به شکلی که بهتر می‌شناسند ثبت می‌کنند که ممکن است دقیقا منطبق بر آدرس پستی آن نقطه نباشد. برای نمونه، منطقه «جردن» در آدرس‌های پستی با محله «امانیه» شناخته می‌شود:

استان تهران، شهر تهران، امانیه بلوار نلسون ماندلا/خیابان گلفام، پلاک 68، طبقه -1، کد پستی:1915673491
استان تهران، شهر تهران، امانیه بلوار نلسون ماندلا/خیابان تندیس، پلاک -2، طبقه همکف، کد پستی:1915613491

در آدرس‌های عام، کاربران براساس شناخت شخصی که از یک منطقه و عوارض شهری دارند، ممکن است همان موقعیت را به شیوه‌های مختلف بیان کنند (به‌طور مثال: نرسیده به چهارراه، بعد از میدان، بعد از بریدگی دوم) یا از مکان‌های مهم به‌عنوان نشانه در آدرس‌دهی استفاده کنند (مانند: جنب بانک، رو‌به‌روی هتل و …). این تنوع در بیان، فرایند تشخیص و تطبیق آدرس را پیچیده می‌کند و نیازمند پردازش هوشمند متن است.

رویکرد نشان در تبدیل آدرس به مختصات

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

سرویس تبدیل آدرس به مختصات عادیسرویس تبدیل آدرس به مختصات پلاس
امکان تبدیل آدرس متنی به آدرس تا آخرین معبر اصلی
امکان دریافت محدوده جستجو براساس استان و شهر
امکان دریافت کادر جستجو در یک ناحیه مرزی مشخص (bounding-box)
امکان جستجو آدرس در حول یک مرکز جستجو
امکان آدرس‌یابی بر اساس پلاک ساختمان‌ها (در شهرهای تهران، مشهد، کرج، اصفهان و اهواز)-
در نظر گرفتن اطلاعات مکانی ثبت‌شده در نشان (در نظر گرفتن POIها)-

چطور دقت سرویس را برای رسیدن به نتایج بهتر افزایش دهیم؟

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

  • استان
  • شهر
  • کادر مورد نظر کاربر برای جستجو (Bounding Box)
  • مختصات مرکز جستجو

این پارامترها به‌عنوان فیلتر عمل می‌کنند:

  • استان و شهر: نتایج را به محدوده‌ جغرافیایی مشخص‌شده محدود می‌کنند.
  • کادر جستجو (Bounding Box): خروجی را به یک چارچوب معین محدود می‌کند.
  • مختصات مرکز جستجو: دقیق‌ترین نتایج را در اطراف نقطه‌ مرکزی ارائه می‌دهد.
  • بدون فیلتر: درصورتی‌که هیچ‌ کدام از این موارد ارسال نشوند، سرویس تنها براساس تحلیل متن آدرس، بهترین تطابق را پیدا می‌کند.

اولویت اعمال محدودیت پاسخ:

در زمان تشخیص موقعیت براساس آدرس واردشده، خروجی بر اساس توکن‌های موجود در آدرس تشخیص داده می‌شود. توصیه ما این است که این توکن‌ها به‌ترتیب از سطح بالا تا آخرین معبر اصلی وارد شود (مثلا استان، شهر، محله و…). در آدرس‌های پستی، وارد کردن گشت کدپستی ( ۵ رقم ابتدایی کد پستی) می‌تواند به تولید خروجی دقیق‌تر کمک کند.

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

Geocoding Plus

مستندات سرویس ژئوکدینگ

شیوه‌ فراخوانی:

GET https://api.neshan.org/geocoding/v1?json={}

Headers:

Api-Key: YOUR_API_KEY

شیوه‌ فراخوانی: (سرویس پلاس، امکان جستجو با در نظر گرفتن کد پستی و پلاک ثبت‌شده در آدرس)

GET https://api.neshan.org/geocoding/v1/plus?json={}

Headers:

Api-Key: YOUR_API_KEY

پارامتر ورودی:

ورودی این درخواست یک json با پارامترهای جدول زیر است:

پارامترنوع داده (Data Type)توضیحات
addressStringآدرس مورد نظر کاربر برای موقعیت‌یابیاجباری
provinceStringاستاناختیاری
cityStringشهراختیاری
extentObjectناحیه مورد نظر برای جستجو، شامل دو نقطه شمال شرقی و جنوب غربیاختیاری
locationObjectمرکز جستجواختیاری

ساختار آبجکت location:

پارامترنوع دادهاجباری/اختیاریتوضیحاتمثال
latitudeFloatاجباریعرض جغرافیایی35.6892
longitudeFloatاجباریطول جغرافیایی51.3890

ساختار آبجکت extent:

پارامترنوع دادهاجباری/اختیاریتوضیحاتمثال
southWestLocationاجباریمختصات جنوب غربی محدوده{"latitude": 35.5, "longitude": 51.2}
northEastLocationاجباریمختصات شمال شرقی محدوده{"latitude": 35.8, "longitude": 51.6}

نمونه درخواست

curl --location --globoff 'https://api.neshan.org/geocoding/v1/plus?json={
"address": "تهران بلوار ستارخان خیابان داوود اسدی رحیمی",
"city": "تهران",
"province": "تهران",
"location": {
"latitude": 35.6892,
"longitude": 51.3890
},
"extent": {
"southWest": {"latitude": 35.5, "longitude": 51.2},
"northEast": {"latitude": 35.8, "longitude": 51.6}
}
}' \
--header 'Content-Type: application/json' \
--header 'Api-Key: YOUR_API_KEY'

فرمت پاسخ:

{
"items": [
{
"location": {
"latitude": 35.719934,
"longitude": 51.340742
},
"province": "تهران",
"city": "تهران",
"neighbourhood": "صادقیه",
"unMatchedTerm": ""
},
{
"location": {
"latitude": 35.721686,
"longitude": 51.343201
},
"province": "تهران",
"city": "تهران",
"neighbourhood": "صادقیه",
"unMatchedTerm": "رحیمی"
},
{
"location": {
"latitude": 35.710275,
"longitude": 51.372291
},
"province": "تهران",
"city": "تهران",
"neighbourhood": "توحید",
"unMatchedTerm": "خیابان داوود اسدی رحیمی"
},
{
"location": {
"latitude": 35.689809,
"longitude": 51.445475
},
"province": "تهران",
"city": "تهران",
"neighbourhood": "ایران",
"unMatchedTerm": ""
},
{
"location": {
"latitude": 35.721654,
"longitude": 51.343876
},
"province": "تهران",
"city": "تهران",
"neighbourhood": "صادقیه",
"unMatchedTerm": "رحیمی"
}
]
}

اجزای پاسخ:

نام پارامتر (Field)نوع داده (Data Type)توضیحات (Description)مثال (Example)
itemsArrayلیستی از نتایج یافت‌شده برای آدرس مورد نظر.[...]
locationObjectشیء حاوی مختصات جغرافیایی مکان یافت‌شده.{...}
location.latitudeNumberعرض جغرافیایی نقطه مکانی.35.720997
location.longitudeNumberطول جغرافیایی نقطه مکانی.51.460834
provinceStringنام استانی که مکان در آن قرار دارد."تهران"
cityStringنام شهری که مکان در آن قرار دارد."تهران"
neighbourhoodStringنام محله یا منطقه شهری شناسایی‌شده."ارامنه شمالی"
unMatchedTermStringبخشی از آدرس ورودی که سرویس نتوانسته آن را با نقشه تطبیق دهد"، نبش خالقی"

نکات تکمیلی:

unMatchedTerm: این فیلد بسیار کاربردی است. اگر کاربر آدرس دقیقی را وارد کند (به‌عنوان مثال "تهران، ارامنه، خیابان پلیس، پلاک ۱۰")، ممکن است نقشه بخشی از این آدرس را شناسایی کند که در این‌صورت، بخشی که شناسایی نشده (به‌عنوان مثال "پلاک ۱۰")، در این فیلد قرار می‌گیرد.

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

چند نتیجه‌ای بودن (Items): از آنجایی‌که items یک آرایه است، ممکن است سرویس برای یک آدرس ناقص، چندین پیشنهاد مختلف بازگرداند که به‌ترتیب جواب‌های مرتبط‌تر در اولویت بالاتری قرار می‌گیرند.

کد خطاهای سرویس:

Http CodeStatusDescription
400INVALID_ARGUMENTخطا در پارامترهای ورودی
470CoordinateParseErrorچنانچه مختصات جغرافیایی ارسالی معتبر نباشد، این خطا رخ خواهد داد.
480KeyNotFoundدر صورتی‌که در فراخوانی وب‌سرویس از یک Api Key نامعتبر استفاده کنید یا Api Key خود را در header ارسال نکنید، با این خطا مواجه می‌شوید.
481LimitExceededدر صورتی‌که تعداد فراخوانی وب‌سرویس‌ها از میزان مجازی که برای شما تعیین شده‌، عبور کند شاهد این خطا خواهید بود.
482RateExceededچنانچه تعداد درخواست وب‌سرویس در دقیقه از حد مجاز عبور کند، این خطا رخ خواهد داد.
483ApiKeyTypeErrorکلید دسترسی استفاده‌شده با سرویس فراخوانی‌شده همخوانی ندارد. باید از کلید دسترسی مرتبط با سرویس مورد نظر استفاده کنید.
484ApiWhiteListErrorبا توجه به اسکوپ تعریف‌شده برای این کلید، شما مجاز به استفاده نیستید.
485ApiServiceListErrorسرویس فراخوانی‌شده، با سرویس‌های تعریف‌شده برای این کلید دسترسی، همخوانی ندارد.
500GenericErrorوقوع خطای ناشناخته