مسافة مسار متعدد التوقفات
من نيويورك إلى فيلادلفيا 120 كم، ثم 140 كم إلى واشنطن و110 كم إلى ريتشموند، فيكون المجموع 370 كم، مع مسافات تراكمية 120 و260 و370 كم. أدخل مسافات مراحلك لتعرف الإجمالي والمسافة عند كل توقف. مجانية في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- نقطة الانطلاق
- New York
- الإجمالي
- 370 km
- الإجمالي (km)
- 370
- الإجمالي (mi)
- 229.907341
- عدد المقاطع
- 3
يبدأ تخطيط رحلة برية متعددة المدن أو جولة توصيل أو برنامج إقامة متعددة الفنادق عادة بقائمة مسافات مقاطع تثقون بها أصلًا — من تطبيق خرائط أو دليل مطبوع أو ورقة الموزّع. ما تحتاجونه بعد ذلك هو إجمالي نظيف وقراءة مسافة تراكمية عند كل توقف حتى تبقى محطات الوقود والاستراحات وتقسيم التكاليف صادقة. تقبل حاسبة المسافة الإجمالية لمسار متعدد التوقفات قائمة مرتبة لمسافات المقاطع، مع تسميات اختيارية لأسماء الوجهات، وتجمعها في إجمالي واحد للمسار، وتبني جدولًا تراكميًا بأسلوب عدّاد المسافة من نقطة الانطلاق حتى آخر نقطة مرور.
كيف تعمل مسافة الرحلة متعددة التوقفات والمسافة التراكمية
المسار متعدد التوقفات هنا هو برنامج مفتوح ومرتّب من مقطع واحد أو أكثر. كل مقطع مسافة غير سالبة قستمها أو قدّرتموها بين توقفات متتالية — من مدينة إلى مدينة، أو من المستودع إلى العميل، أو من فندق إلى فندق. لا تبحث القدرة عن إحداثيات ولا تخترع مسارات طرق؛ بل تعامل مسافاتكم كمصدر للحقيقة وتركّز على المحاسبة التي يعيد المخططون استخدامها فعلًا.
مع n من المقاطع يوجد n زائد محطة واحدة: المحطة صفر هي نقطة الانطلاق بمسافة تراكمية صفر، وبعد كل مقطع مكتمل يتقدّم المجموع الجاري بمسافة ذلك المقطع. المسافة الإجمالية للمسار هي ببساطة مجموع كل المقاطع. هذه الهوية هي منطق عدّاد المسافة نفسه الذي يستخدمه السائقون عند تدوين علامات الميل في سجل الرحلة: ابدأوا من الصفر، وأضيفوا كل جزء، والقراءة عند آخر توقف تساوي إجمالي الرحلة.
التسميات الاختيارية على كل مقطع تسمّي وجهة ذلك الجزء؛ وسلسلة origin الاختيارية تسمّي التوقف الأول حتى يكون الجدول التراكمي مقروءًا في الواجهة دون دمج ثانٍ. تُسمح المقاطع ذات الطول صفر (توقف في الموقع نفسه أو عنصر نائب)، لكن المسافات السالبة تُرفض لأن المسافة لا يمكن أن تتراجع في هذا النموذج.
أين تناسب إجماليات المسار متعدد التوقفات المنتجات والأنابيب
استخدموا هذه النقطة النهائية كلما وُجدت مسافات المقاطع مسبقًا واحتجتم إجماليًا شفافًا مع مسافة تراكمية لكل توقف: مخططي رحلات برية يلصقون أطوالًا من مدينة إلى مدينة من تصدير خريطة، ومسودات توصيل متعددة التوقفات قبل وحدات الوقود والتكلفة، ومدونات سفر تنشر جدول برنامج بمسافة جارية، ولوحات أسطول تثري قائمة توقفات بتقدم بأسلوب عداد المسافة، وتمارين لوجستية صفّية تعلّم مجاميع البادئة على بيانات رحلة حقيقية. اقرنوها بأدوات حجم الوقود أو تكلفة الرحلة عند الحاجة لتقديرات المصروف؛ وبمتوسط السرعة أو ETA عند الحاجة للوقت.
لا تستخدموا هذا لمسافة الدائرة العظمى من خط العرض وخط الطول — فتلك نية بحث مختلفة تخدمها أدوات جغرافية لخط متعدد النقاط تقيس مقاطع haversine. هنا يملك المستخدم المسافات أصلًا ويريد فقط إجماليات البرنامج والمسافة التراكمية. التحقق الفاشل لا يستهلك الرصيد.
أبقوا القوائم متوسطة الحجم لتجربة تفاعلية، وثبّتوا الإجماليات المُقرَّبة في الاختبارات، فتحصلون على لبنة صغيرة قابلة للتدقيق لكل قناة يخدمها KIT فعلًا.
حالات الاستخدام
جداول برنامج الرحلة البرية
الصقوا مسافات المقاطع من مدينة إلى مدينة، وسمّوا كل توقف، وانشروا المسافة الإجمالية مع المسافة التراكمية عند كل ليلة فندق.
تقدم التوصيل متعدد التوقفات
اجمعوا أطوال المستودع إلى التوقف وبين التوقفات وأظهروا للسائقين كم ميلًا يتبقى بعد كل مقطع مكتمل.
خطوات مسبقة لتكلفة الرحلة والوقود
احسبوا مسافة إجمالية واحدة من مقاطع معروفة قبل استدعاء حاسبات حجم الوقود أو تكلفة الوقود أو ميزانية الرحلة.
الأسئلة الشائعة
كيف تُحسب المسافة الإجمالية لمسار متعدد التوقفات؟
تُتحقق كل مسافة مقطع كرقم محدود غير سالب ثم تُجمع. المسافة التراكمية عند التوقف k هي مجموع أول k مقاطع؛ وتبدأ نقطة الانطلاق من الصفر.
هل أحتاج إحداثيات GPS أو عناوين؟
لا. قدّموا مسافات المقاطع التي لديكم (من الخرائط أو القوائم أو التقديرات). هذه الأداة لا تقوم بالترميز الجغرافي ولا تقيس مسارات الدائرة العظمى من lat/lon.
ما الحد الأدنى لعدد المقاطع؟
يلزم مقطع واحد على الأقل (توقفان: انطلاق ووجهة).
هل يمكن خلط الكيلومترات والأميال في طلب واحد؟
لا. يجب أن تشترك كل مسافات المقاطع في نفس الوحدة المختارة بـ unit km أو mi.
هل يمكنني تسمية كل توقف؟
نعم. يمكن أن تحمل كل مرحلة اسم المكان الذي تنتهي عنده، ويمكنك أيضًا تسمية نقطة الانطلاق. الأسماء تعنون جدول المسافات التراكمية فقط، ولا تغيّر المسافات أو الإجمالي أبدًا.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/travel/multi-stop-route-distance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"legs":[{"distance":120,"label":"Philadelphia"},{"distance":140,"label":"Washington DC"},{"distance":110,"label":"Richmond"}]}'const res = await fetch("https://api.kit.forhosting.com/travel/multi-stop-route-distance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"legs": [
{
"distance": 120,
"label": "Philadelphia"
},
{
"distance": 140,
"label": "Washington DC"
},
{
"distance": 110,
"label": "Richmond"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/multi-stop-route-distance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"legs": [
{
"distance": 120,
"label": "Philadelphia"
},
{
"distance": 140,
"label": "Washington DC"
},
{
"distance": 110,
"label": "Richmond"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/multi-stop-route-distance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"legs":[{"distance":120,"label":"Philadelphia"},{"distance":140,"label":"Washington DC"},{"distance":110,"label":"Richmond"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"legs":[{"distance":120,"label":"Philadelphia"},{"distance":140,"label":"Washington DC"},{"distance":110,"label":"Richmond"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/multi-stop-route-distance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"legs": [
{
"distance": 120,
"label": "Philadelphia"
},
{
"distance": 140,
"label": "Washington DC"
},
{
"distance": 110,
"label": "Richmond"
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.multi_stop_route_distance",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
اختاروا الكيلومترات أو الأميال القانونية؛ وكل استجابة ناجحة تعيد أيضًا total_km و total_mi. يغذي نفس الوحدة الصرفة أداة المتصفح المجانية ومسار API المدفوع مسبقًا، فتتوافق دفاتر الملاحظات وعمال الحافة وتذاكر الدعم دائمًا على نفس الإجماليات المُقرَّبة دون ترميز جغرافي أو بلاطات خرائط أو قفزات شبكة.
كيف تعمل مسافة الرحلة متعددة التوقفات والمسافة التراكمية
عندما تكون الوحدة كيلومترات يتطابق total و total_km ويُشتق total_mi بمعامل دولي قدره 1.609344 كيلومترًا لكل ميل قانوني؛ وعندما تكون الوحدة أميالًا تسير التحويلة المزدوجة بالاتجاه المعاكس.
عقد الإدخال والوحدات والأسماء المستعارة وأخطاء التحقق
قد يكون كل عنصر كائنًا بحقل distance مطلوب وlabel اختياري، أو رقمًا محدودًا بسيطًا يُعامل كمسافة بلا تسمية. تفشل legs الفارغة أو أكثر من خمسمائة عنصر أو وحدة مجهولة في التحقق قبل أي جمع ولا تُفوتر. تبديل unit دون تحويل الأرقام خطأ شائع لدى العميل — إذا كانت ورقتكم بالأميال فأرسلوا unit mi بدل ترك الافتراضي. أرسلوا جسم JSON عبر POST مع مصفوفة legs إلزامية من عنصر واحد على الأقل. يجب أن تكون قيم المسافة محدودة وغير سالبة؛ والسلاسل الفارغة وNaN وInfinity وحقول distance المفقودة تفشل بـ invalid_input مع تسمية الصف. تقبل المصفوفة الأسماء المستعارة للنقل segments وstages وdistances حتى يربط عملاء الجوال والجداول الأعمدة دون إعادة تشكيل. تختار unit الاختيارية وحدة الإدخال والإجمالي الأساسي: km (الافتراضي) أو mi؛ وتشمل الأسماء المستعارة distance_unit. origin الاختياري (أسماء start وstart_label وorigin_label) يسمّي المحطة صفر فقط ولا يغيّر الحساب أبدًا. الحمولة الناجحة تعيد total وunit؛ ودائمًا total_km وtotal_mi؛ وleg_count وstop_count؛ وlegs كقائمة مرتبة لفهرس المقطع والمسافة والمسافة التراكمية بعد ذلك المقطع وlabel اختياري؛ وcumulative_at_stops بفهرس التوقف والمسافة التراكمية وlabel اختياري من الانطلاق حتى آخر نقطة؛ إضافة إلى سلسلتي formula وmethod للتدقيق والتوثيق. التسعير مبلغ ثابت $0.002 لكل عنصر ناجح على API؛ ومسار tier-A في المتصفح مجاني للفحوصات التفاعلية.
أين تناسب إجماليات المسار متعدد التوقفات المنتجات والأنابيب
استدعوها من Worker أو مهمة خلفية أو سكربت: مرّروا legs، واقرأوا total وcumulative_at_stops، واحفظوا اختياريًا تفصيل legs بجانب كل صف واجهة.
أسئلة تقنية
كم تبلغ تكلفة API؟
يُسعَّر كل طلب ناجح بمبلغ $0.002 من رصيد ForHosting KIT المدفوع مسبقًا. التحقق الفاشل لا يُخصم. أداة المتصفح مجانية.