Reverse geocoding فرآیند تبدیل یک مختصات به یک آدرس قابل خواندن برای انسان است. تصویر آینهای forward geocoding است، که از متن به یک نقطه میرود. اگر forward geocoding چیزی است که autocomplete checkout را قدرت میدهد، reverse geocoding چیزی است که هر تعامل "یک پین بینداز و به من بگو کجا هستم" در یک اپ مدرن را قدرت میدهد.
در این راهنما توضیح میدهم reverse geocoding واقعاً چیست، یک پاسخ محصولی چه شکلی است، در سیستمهای واقعی کجا ظاهر میشود و برای کدام دامها باید برنامه داشت. برای جهت دیگر، مقاله همراه ما دربارهٔ geocode چیست را ببینید.
Reverse Geocoding واقعاً چیست
Reverse geocoding یک طول و عرض جغرافیایی روی datum WGS84 را میگیرد و نزدیکترین مکان معنادار را برمیگرداند. ورودی: 48.8584, 2.2945. خروجی: یک آدرس ساختاریافته (Avenue Gustave Eiffel, 75007 Paris, France)، نوع مکان (در این مورد landmark) و لیستی از مناطق اداری که نقطه داخل آنها قرار دارد.
بخش "نزدیکترین معنادار" همان جایی است که جالب میشود. مختصاتی که در وسط یک پارکینگ نشسته به یک آدرس خیابان متناظر نیست. نقطهای ده متر در دریا اصلاً روی خشکی نیست. Reverse geocoder باید تصمیم بگیرد کاربر تقریباً مطمئناً چه feature ای را منظور داشته: ساختمانی که جلویش ایستاده بوده، جادهای که روی آن رانندگی میکرده، یا پارکی که تازه به آن قدم گذاشته. آن تصمیم در نوع مکان و در فاصله از نقطه کوئری تا feature match شده کدگذاری شده است.
یک مختصات بهتنهایی به شما میگوید کجا. یک reverse geocode به شما میگوید کجا به زبان انسانی.
یک پاسخ Reverse Geocoding چه شکلی است
یک پاسخ مفید reverse geocoding یک شیء ساختاریافته است، نه یک رشته واحد. فیلدهایی که اهمیت دارند:
formatted_address: رشته آدرس canonical برای نمایش، فرمتشده برای locale پاسخplace_id: یک شناسه پایدار که میتوانید ذخیره و بعداً resolve کنیدcountry_codeبه فرم ISO 3166-1 alpha-2 (FR،DE،JP)address_components: آدرس که به اجزای ساختاریافته تقسیم شده (خیابان، شماره، شهر، منطقه، کشور، کد پستی)، هر کدام با نام کوتاه و بلند خودplace_type(گاهیmatch_type): rooftop، street، neighbourhood، locality، water، park یا unknown. از این برای تصمیمگیری دربارهٔ اینکه آیا نتیجه برای عمل کردن امن است یا نه استفاده کنیدdistance: feature match شده چقدر از نقطه کوئری دور است، به متر. یک match rooftop در سه متری محکم است؛ یک match street در هفتاد متری یعنی کاربر پین خود را در یک مزرعه انداخته
در کد محصولی، نوع مکان و فاصله دو فیلدی هستند که اول به آنها میرسید. اینها همانها هستند که با آن تفاوت بین "این نقطه درب جلوی یک ساختمان واقعی است" و "این نقطه جایی در یک جنگل است، اینجا نزدیکترین جادهای است که توانستم پیدا کنم" را تشخیص میدهید.
Reverse Geocoding کجا ظاهر میشود
Reverse geocoding بیسروصدا زیر فهرست بلندی از قابلیتها اجرا میشود.
- Checkout drop-a-pin: کاربر یک پین را برای تنظیم دقیق موقعیت تحویل خود حرکت میدهد، و اپ مختصات جدید را reverse geocode میکند تا آدرس را به او تأیید کند
- عکسهای geotag شده: هر عکس روی گوشی یک مختصات EXIF دارد، و اپها آن را reverse geocode میکنند تا به جای دو اعشار "Paris, France" نشان دهند
- دکمههای "نزدیک من": ضربه به دکمه GPS دستگاه را میگیرد، آن را reverse geocode میکند، و از locality نتیجه برای seed کردن یک جستجو استفاده میکند
- برچسبگذاری رویداد IoT: یک سنسور یک مختصات گزارش میدهد، و پلتفرم آن را یکبار در زمان ingest reverse geocode میکند تا dashboard بتواند به جای lat/lng خام "Warehouse 3, Rotterdam" نشان دهد
- Telemetry ناوگان: رویدادهای شروع و پایان سفر بهعنوان مختصات میرسند، و UI dispatch آنها را reverse geocode میکند تا انسانی که صفحه را میخواند نام خیابانها را ببیند
- Backfill EXIF: یک کتابخانه رسانه هزاران عکس قدیمی با مختصات اما بدون برچسب مکان وارد میکند، و یک reverse geocode دستهای metadata مکان را در یک گذر پر میکند
نخ مشترک این است که کاربر، دستگاه یا سنسور اول یک نقطه تولید کرده، و آدرس دوم استخراج میشود. مختصات منبع حقیقت است و آدرس یک جزئیات نمایش است.
دامها در محصول واقعی
Reverse geocoding ساده به نظر میرسد، و هست، تا وقتی که کوئریهای شما در مکانهای غیرعادی فرود بیایند.
نقاط ساحلی و آبی. نویز GPS مرتباً پینها را چند متر در دریا یا روی یک رودخانه میاندازد. برخی API ها یک نتیجه خالی برمیگردانند، برخی به نزدیکترین جاده میچسبانند، برخی با کمککاری به شما میگویند نقطه در اقیانوس است. از قبل تصمیم بگیرید UI شما یک match آبی را چگونه مدیریت میکند نه اینکه هر پاسخ را بهعنوان یک آدرس خیابان در نظر بگیرید.
Match های فقط کد پستی. بیرون از مرکز شهرهای متراکم، نزدیکترین "آدرس" میتواند یک منطقه پستی باشد که چند کیلومتر مربع را پوشش میدهد. پاسخ معتبر به نظر میرسد ولی قابل عمل نیست. همیشه قبل از نمایش نتیجه بهعنوان یک آدرس خیابان تأییدشده، نوع مکان را بازرسی کنید.
زبان و locale. یک reverse geocode از یک نقطه در توکیو میتواند بسته به locale درخواست به کانجی ژاپنی، romaji یا انگلیسی برگردد. زبان خروجی درست را برای مصرفکننده نتیجه انتخاب کنید: کاربران نهایی نامهای محلیسازیشده میبینند، لاگهای داخلی وقتی در یک زبان canonical میمانند راحتتر grep میشوند.
معنای polygon در برابر point. بسیاری از feature ها (پارکها، مالها، پردیسها) چندضلعی هستند. یک نقطه داخل چندضلعی باید با feature match شود، اما برخی پیادهسازیها فقط در صورتی match میکنند که نقطه کوئری centroid باشد. اگر کاربران شما پینها را هر جا داخل یک محوطه میاندازند، تست کنید که API محوطه را برمیگرداند نه فقط نزدیکترین جاده را.
حریم خصوصی. یک آدرس reverse geocode شده که به یک شناسه کاربر گره خورده داده شخصی است. مختصات بهتنهایی وقتی با timestamp جفت شود از قبل PII است؛ آدرس resolve شده آن را قابل خواندن برای انسان میکند. ذخیرهسازی را قفل کنید، دسترسی را لاگ کنید و قوانین GDPR را برای locale ای که در آن کار میکنید رعایت کنید.
Reverse Geocoding در MapAtlas
MapAtlas Geocoding API reverse geocoding را از همان endpoint forward geocoding مدیریت میکند. فیلدهای استاندارد بالا را برمیگرداند (آدرس فرمتشده، شناسه مکان، کد کشور، اجزای آدرس، نوع مکان، فاصله از نقطه کوئری) و از درخواستهای دستهای برای پایپلاینهای ingest که نیاز دارند میلیونها مختصات قدیمی را در یک گذر برچسبگذاری کنند پشتیبانی میکند. پارامترهای bias زبان و کشور آدرس برگرداندهشده را در locale ای که کاربران شما انتظار دارند نگه میدارند.
برای زمینه غنیتر مکان، Geocoding API با Search API جفت میشود وقتی یک مختصات باید به نقاط مورد علاقه نزدیک resolve شود نه فقط یک آدرس، و با Map Matching API وقتی نقطه ورودی از یک trace نویزی GPS میآید و باید قبل از reverse geocoding به شبکه جادهای چسبانده شود.
Reverse geocoding جذاب نیست. فقط یک مختصات وارد میشود و یک نام بیرون میآید. اما همان مرحله است که یک خوانش خام GPS را به چیزی تبدیل میکند که یک انسان میتواند بخواند، یک پایگاه داده میتواند index کند و یک سیستم پاییندستی میتواند روی آن مسیریابی کند، و درست به دست آوردنش همان چیزی است که یک محصول آگاه به مکان واقعی را از یک صفحه پر از اعشار جدا میکند.
سوالات متداول
Reverse geocoding چیست؟
Reverse geocoding فرآیند تبدیل یک مختصات (یک جفت طول و عرض جغرافیایی) به آدرس یا نام مکان قابل خواندن برای انسان است. یک نقطه مثل 48.8584, 2.2945 را به یک reverse geocoding API میفرستید و یک پاسخ ساختاریافته میگیرید: یک آدرس فرمتشده، یک شناسه مکان، اجزای آدرس، یک کد کشور و نوع feature ای که نقطه روی آن افتاده.
تفاوت reverse geocoding با forward geocoding چیست؟
Forward geocoding از متن به مختصات میرود: ورودی '10 Downing Street, London' و خروجی 51.5034, -0.1276. Reverse geocoding برعکس میرود: ورودی مختصات و خروجی آدرس. بیشتر geocoding API ها هر دو جهت را از یک endpoint ارائه میدهند، و سیستمهای واقعی از هر دو با هم استفاده میکنند تا بین متن واردشده توسط کاربر و مختصات ذخیرهشده round-trip کنند.
یک reverse geocoding API چه برمیگرداند؟
یک reverse geocoding API جدی بیش از یک رشته آدرس برمیگرداند. انتظار داشته باشید: یک formatted_address برای نمایش، یک place_id پایدار، address_components که به خیابان، شهر، منطقه، کد پستی و کشور تقسیم شدهاند، یک country_code ISO، نوع مکان (rooftop، street، locality، water، park) و فاصله از نقطه کوئری تا feature match شده. فاصله و نوع مکان همان چیزی هستند که با آن تصمیم میگیرید آیا نتیجه قابل اعتماد است یا نه.
چه زمانی به جای ذخیره مستقیم آدرس باید از reverse geocoding استفاده کرد؟
هر زمانی که کاربر به جای متن یک نقطه به شما میدهد از reverse geocoding استفاده کنید. این شامل جریانهای checkout drop-a-pin، عکسهای geotag شده، trace های GPS از اپهای تحویل و ناوگان، رویدادهای IoT و دکمههای 'نزدیک من' روی موبایل میشود. مختصات منبع حقیقت است: در زمان نمایش reverse geocode میکنید تا آدرس همیشه تازه باشد و با locale کاربر مطابقت کند.

