نقشه ایزوکرون چندضلعیای است که به سؤالی بهظاهر ساده جواب میدهد: از اینجا در X دقیقه به کجاها میشود رسید؟ ایزوکرون ۱۵ دقیقه رانندگی را دور یک کافه بکشید تا محدوده واقعی مشتریانش را ببینید. ایزوکرون ۳۰ دقیقه پیادهروی را دور یک ایستگاه مترو بکشید تا ببینید پیاده تا کجا میشود از آن رفت. هر قابلیت «نزدیک من»، هر بررسی محدوده مشتریان فروشگاه و هر فیلتر املاک بر اساس زمان رفتوآمد بر همین ایده ساخته شده است.
این راهنما توضیح میدهد ایزوکرون دقیقاً چیست، چطور روی شبکه جادهها حساب میشود، در سامانههای واقعی کجا به کار میرود و کدام مشکلات برای تیمها وقت و هزینه درست میکنند.
ایزوکرون دقیقاً چیست
این واژه از دو کلمه یونانی isos (برابر) و chronos (زمان) آمده است: منحنیای که زمان سفر در همه نقاط آن یکسان است. در سامانههای نقشه امروزی، ایزوکرون چندضلعی (یا مجموعهای از چندضلعیهای تودرتو) است که همه جاهایی را نشان میدهد که از یک مبدأ، با یک نوع سفر مشخص و در بودجه زمانی مشخص، میشود به آنها رسید.
دو چیز ایزوکرون را از یک محدوده ساده دور یک نقطه جدا میکند. اول اینکه روی شبکه جادهها حساب میشود، نه روی صفحهای صاف. رودخانهها، آزادراهها، کوهها و خیابانهای یکطرفه همه شکل آن را تغییر میدهند. دوم اینکه به نوع سفر بستگی دارد: ایزوکرون ۲۰ دقیقه رانندگی، ۲۰ دقیقه دوچرخه و ۲۰ دقیقه پیادهروی از یک نقطه، سه چندضلعی کاملاً متفاوتاند.
خروجی تقریباً همیشه GeoJSON است، با هندسه Polygon یا MultiPolygon و ویژگیهایی که آستانه زمان سفر و نوع سفر را نگه میدارند. نقشه سمت کاربر شما همین را نمایش میدهد و پایگاه داده مکانیتان کوئریهایش را روی همین اجرا میکند.
ایزوکرون چطور حساب میشود
سادهترین روش این است که از مبدأ جستوجوی کوتاهترین مسیر را اجرا کنید و وقتی زمان سفر انباشته به آستانه رسید، متوقف شوید. در عمل این روش برای حجم بالا کند است، پس سامانههای واقعی از گرافهای ازپیشمحاسبهشده شبکه جادهها و الگوریتمهای جستوجوی سریعتر استفاده میکنند.
گراف جادهها یک بار از منبعی مثل OpenStreetMap یا یک مجموعه داده تجاری جاده ساخته میشود. هر تقاطع یک گره میشود و هر بخش جاده یک یال که برای هر نوع سفر، زمان سفر وزن آن است. از مبدأ، یک جستوجوی گراف (Dijkstra، A* یا نسخه دوطرفه آنها) به بیرون پیش میرود و هر بار ارزانترین گره بازدیدنشده را باز میکند تا بودجه زمانی تمام شود. گرههایی که به آنها رسیدهاید، همراه با یالهایی که تا نیمه طی شدهاند، مرز را تعیین میکنند.
موتورهای امروزی برای سرعت از سلسلهمراتب انقباضی (contraction hierarchies) یا روشهای مشابه استفاده میکنند. گراف از قبل به سلسلهمراتبی تبدیل میشود که در آن یالهای میانبر از روی گرههای کماهمیتتر رد میشوند. به این ترتیب کوئریای که در حالت عادی به میلیونها یال سر میزد، در چند میلیثانیه جواب میگیرد. بعد گرههای قابل دسترس در یک چندضلعی قرار میگیرند، معمولاً با concave hull یا alpha shape، تا خط بیرونی به محدوده واقعی جادهها بچسبد و در فضای خالی پف نکند.
نتیجه یک چندضلعی GeoJSON است که میتوانید مستقیم به نقشه Leaflet، Mapbox GL یا MapLibre بفرستید یا برای اتصال مکانی در PostGIS بارگذاری کنید.
ایزوکرون کجا به کار میرود
بسیاری از قابلیتهای مکانمحور محصولات در پشت صحنه با ایزوکرون کار میکنند.
- محدوده مشتریان فروشگاه و مکان: خردهفروشان دور هر شعبه ایزوکرون رانندگی میکشند تا جمعیتی را که آن شعبه واقعاً به آن خدمت میدهد تخمین بزنند. بعد داده سرشماری یا هزینه خانوار را روی آن میگذارند تا اندازه بازار را حساب کنند
- برنامهریزی برد خودروی برقی: ایزوکرونهایی که باتری را در نظر میگیرند نشان میدهند خودروی برقی با شارژ باقیمانده تا کجا میرود، با حساب ارتفاع، سرعت و مصرف
- فیلتر زمان رفتوآمد در املاک: «همه آپارتمانهایی را نشان بده که تا این دفتر حداکثر ۳۰ دقیقه راه دارند» یعنی یک ایزوکرون که با جدول آگهیهای ملک تقاطع داده میشود
- تحلیل دسترسی به خدمات درمانی: برنامهریزان ایزوکرونهای اطراف بیمارستانها و درمانگاهها را با شبکه جمعیت مقایسه میکنند تا مناطق کمبرخوردار را پیدا کنند
- محدوده خدمات لجستیک: پیکها، تیمهای خدمات میدانی و سرویسهای تحویل فوری با ایزوکرون تعیین میکنند از هر انبار کدام سفارشها را بپذیرند
- برنامهریزی شهری و حملونقل عمومی: مطالعات «شهر ۱۵ دقیقهای»، طرحهای محدوده ایستگاه و بررسیهای دسترسی همه بر پایه ایزوکرونهای چندوجهی انجام میشوند
در همه این موارد، ایزوکرون فیلتر مکانی است. سؤالی مبهم مثل «چقدر نزدیک، کافی است؟» را به چندضلعیای تبدیل میکند که میتوانید با دادههای دیگر تقاطع بدهید، نمایش دهید و بر پایهاش تصمیم بگیرید.
پیادهروی، دوچرخه و رانندگی شکلهای متفاوتی دارند
همان ۱۵ دقیقه از همان مبدأ سه شکل بسیار متفاوت میسازد. پیادهروی با سرعت حدود ۵ کیلومتر در ساعت تقریباً ۱ تا ۱٫۲۵ کیلومتر جلو میرود. پس چندضلعی نزدیک به دایره است و فقط جایی که رودخانه، راهآهن یا آزادراه گذرگاه کمی دارد فرورفتگی پیدا میکند. رانندگی در امتداد جادههای سریع بازوهای بلندی میسازد و در خیابانهای شلوغ و فشرده جمع میشود. دوچرخه میان این دو قرار میگیرد و به جای سلسلهمراتب جادهها، شبکه دوچرخهسواری را دنبال میکند. اگر این سه شکل را برای یک مبدأ کنار هم نشان دهید، اغلب سریعترین راه را برای توضیح این نکته به ذینفعان پیدا کردهاید که چرا شعاع گمراهکننده بود.
درخواست ایزوکرون
با درگاه MapAtlas، ایزوکرون فقط یک درخواست POST است. مکانها شیءهای {lat, lon} هستند، costing نوع سفر را انتخاب میکند (auto، bicycle یا pedestrian) و هر عضو contours یک زمان به دقیقه میگیرد:
curl -X POST "https://gateway.mapmetrics-atlas.net/isochrone/?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"locations": [{"lat": 52.3791, "lon": 4.9001}],
"costing": "pedestrian",
"contours": [{"time": 15}, {"time": 10}, {"time": 5}],
"polygons": true
}'
پاسخ یک FeatureCollection از نوع GeoJSON است، با یک چندضلعی برای هر زمان، از بزرگ به کوچک. هر feature مقدار contour خود و یک رنگ پرکننده را در ویژگیهایش دارد. پس میتوانید آن را بهعنوان منبع GeoJSON اضافه کنید و بدون هیچ پردازش اضافه، با یک لایه fill در MapLibre نمایش دهید.
برای پوشش چند انبار یا فروشگاه، برای هر مبدأ یک ایزوکرون بگیرید، featureها را در یک مجموعه ادغام کنید و روی هرکدام مبدأش را بنویسید. اجتماع آنها محدوده خدمات کل شماست. بخشهایی که فقط یک مبدأ به آنها میرسد، جاهایی را نشان میدهد که پشتیبان ندارید. جایی که چندضلعیها روی هم میافتند، معلوم نمیکنند کدام مبدأ به یک آدرس مشخص نزدیکتر است. ماتریس فاصله مستقیماً به این سؤال جواب میدهد.
مشکلات رایج در محیط واقعی
ایزوکرون در نمونه نمایشی ساده به نظر میرسد و در محیط واقعی سختتر میشود.
نوع سفر نادرست. ایزوکرون رانندگی با سرعت آزادراه حساب میشود و قواعد عبور عابر پیاده را در نظر نمیگیرد. ایزوکرون پیادهروی از پیادهروها و میانبرهایی استفاده میکند که خودرو نمیتواند از آنها برود. قاطی کردن این دو رایجترین دلیل گزارشهای «این چندضلعی درست به نظر نمیرسد» است. همیشه نوع سفر را صریح بفرستید و آن را در رابط کاربری نشان دهید.
ساعت روز و ترافیک. ۱۵ دقیقه رانندگی در ساعت ۰۳:۰۰ محدودهای بسیار بزرگتر از همان ۱۵ دقیقه در ساعت ۱۷:۳۰ را پوشش میدهد. اگر کاربرد شما به زمان رفتوآمد وابسته است (فیلتر املاک، ساعت کار فروشگاه، اعزام)، departure_time را بفرستید و از موتوری استفاده کنید که ترافیک را حساب میکند. ایزوکرونی که ترافیک را حساب نکند، ساعت اوج را درست نشان نمیدهد.
ترکیب چند نوع سفر. سفرهای واقعی چند نوع جابهجایی را ترکیب میکنند: پیاده تا مترو، دو ایستگاه با قطار، بعد پیاده تا مقصد. ایزوکرونهای ساده تکحالته این را کاملاً نادیده میگیرند. ایزوکرون چندوجهی واقعی به جدول زمانی حملونقل عمومی و گرافی نیاز دارد که یالهای پیاده و حملونقل عمومی را به هم وصل کند. این کار بسیار پیچیدهتر از ایزوکرون رانندگی است.
نرم کردن بیش از حد مرز. بعضی موتورها چندضلعی را آنقدر نرم میکنند که زیبا به نظر برسد. این کار بیسروصدا پوشش را بیشتر از واقعیت نشان میدهد، چون جاهایی را هم در بر میگیرد که هیچ جادهای به آنها نمیرسد. برای تصمیمهای مهم، مثل باز کردن فروشگاه یا پذیرفتن یک منطقه تحویل، به جای اعتماد به شکل نمایشدادهشده، مرز خام را بررسی کنید.
اندازه چندضلعی در حجم بالا. ایزوکرونهای طولانی (۶۰ یا ۹۰ دقیقه) ممکن است دهها هزار رأس داشته باشند. پیش از فرستادن به مرورگر آنها را ساده کنید یا سمت سرور نمایش دهید، وگرنه نقشه کند میشود.
محاسبه دوباره چیزی که تغییر نمیکند. منطقه تحویل اطراف یک انبار ثابت برای ساعتها یا روزها همان چندضلعی است. پس آن را در کش نگه دارید و با هر بار باز شدن صفحه دوباره درخواستش نکنید. در نقشههای تعاملی که کاربر با کلیک مبدأ را تعیین میکند، برای کنترلکننده کلیک debounce بگذارید تا چند کلیک پشت سر هم، چند درخواست پشت سر هم نفرستد.
ایزوکرون در MapAtlas
MapAtlas Isochrone API چندضلعیهای زمان سفر را برای رانندگی، پیادهروی، دوچرخه و رانندگی با ترافیک بهصورت GeoJSON برمیگرداند. در یک درخواست میتوانید چند آستانه زمانی بخواهید و با دادن زمان حرکت، نتیجه را با ترافیک بگیرید. چندضلعیها روی گراف جادهای حساب میشوند که مدام بهروز میشود و به شکلی برمیگردند که کتابخانه نقشه شما بدون پردازش اضافه نمایش میدهد.
اگر کارتان هم به چندضلعی محدوده دسترسی نیاز دارد و هم به زمان سفر میان جفت نقاط، Isochrone API را کنار Distance Matrix API به کار ببرید. به این ترتیب یک روند کاری واحد هم به «در ۲۰ دقیقه به کجاها میرسم؟» جواب میدهد و هم به «این گزینهها را بر اساس زمان رانندگی مرتب کن».
ایزوکرون در نهایت فقط یک چندضلعی است. اما همین چندضلعی زمان سفر را به شکلی تبدیل میکند که برنامه شما میتواند با آن فیلتر کند، نمایشش دهد و بر پایهاش تصمیم بگیرد. فرق یک قابلیت واقعی بر اساس زمان رفتوآمد با دایرهای که دور یک نشانگر کشیده شده، همینجاست.
سوالات متداول
نقشه ایزوکرون چیست؟
نقشه ایزوکرون چندضلعی یا مجموعهای از چندضلعیهای تودرتوست که همه جاهایی را نشان میدهد که از یک نقطه شروع در زمان سفر مشخصی میشود به آنها رسید. برای نمونه، ایزوکرون ۱۵ دقیقه رانندگی دور یک فروشگاه، شکلی روی نقشه میکشد که همه بخشهای جادهای را در بر میگیرد که مشتری در ۱۵ دقیقه یا کمتر به آنها میرسد. این شکل تقریباً هیچوقت دایره نیست، چون شبکه واقعی جادهها رودخانه، آزادراه، بنبست و خیابان یکطرفه دارد.
تفاوت ایزوکرون با شعاع چیست؟
شعاع محدودهای بر پایه خط مستقیم است که با پرگار کشیده میشود: هر نقطه داخل آن تا مرکز همان فاصله هوایی را دارد. ایزوکرون محدودهای بر پایه زمان سفر است که روی شبکه واقعی جادهها حساب میشود: به هر نقطه داخل آن در همان تعداد دقیقه میشود رسید. شعاع ۱۰ کیلومتری و ایزوکرون ۱۰ دقیقه رانندگی تقریباً هیچوقت بر هم منطبق نیستند، چون پستی و بلندی زمین، آزادراهها و ترافیک شکل را تغییر میدهند.
API ایزوکرون چه چیزی برمیگرداند؟
API ایزوکرون یک یا چند چندضلعی را بهصورت GeoJSON برمیگرداند و روی هرکدام آستانه زمان سفرش را مینویسد (مثلاً ۵، ۱۰ یا ۱۵ دقیقه). این چندضلعیها روی گراف جادهها و برای نوع سفری که انتخاب کردهاید (رانندگی، پیادهروی، دوچرخه، حملونقل عمومی) حساب میشوند. اگر ترافیک را در نظر بگیرید، میتوانید آنها را برای زمان حرکت مشخصی هم بگیرید. GeoJSON را مستقیم روی نقشه بگذارید یا در PostGIS بهعنوان فیلتر مکانی از آن استفاده کنید.
چرا لبه ایزوکرونها اینقدر دندانهدار است؟
ایزوکرون از گرافی از بخشهای جاده ساخته میشود، نه از یک سطح پیوسته. مرز چندضلعی از دورترین گرههایی به دست میآید که در بودجه زمانی به آنها میرسید، پس لبهها شکل جادهها را دنبال میکنند. با concave hull یا alpha shape میشود شکل نرمتری ساخت، اما خط بیرونی کمی دندانهدار دقیقتر است: نشان میدهد شبکه واقعاً کجا تمام میشود، نه جایی که یک تابع هموارسازی حدس زده است.
نوع سفر چه تأثیری روی ایزوکرون دارد؟
نوع سفر هم برد و هم شکل ایزوکرون را تغییر میدهد. در ۱۵ دقیقه پیادهروی با سرعت حدود ۵ کیلومتر در ساعت، در هر جهت تقریباً ۱ تا ۱٫۲۵ کیلومتر جلو میروید. پس ایزوکرون پیادهروی تقریباً گرد است و فقط کنار رودخانه، راهآهن و جاهایی که گذرگاه ندارند فرورفتگی دارد. ایزوکرون رانندگی در امتداد آزادراهها دور میرود و در مرکز شلوغ شهر جمع میشود و برای همین شکلی ستارهمانند دارد. دوچرخه میان این دو است و شبکه دوچرخهسواری را دنبال میکند. در شهرهایی با شبکه دوچرخه خوب، برد آن از چیزی که شبکه خیابانها بهتنهایی نشان میدهد بیشتر است.

