حساب إجمالي مسافة مسار متعدد المحطات
لا يكتمل المسار متعدد المحطات إلا عند توفر الوصلات بين كل محطتين متتاليتين. تستقبل هذه الحاسبة ترتيب الزيارة الدقيق ومجموعة من المسافات بين أزواج المحطات، ثم تجمع المقاطع المستخدمة فعليًا فقط. وتعرض تفصيلًا واضحًا لكل مقطع مع الإجمالي، وتصدر خطأ محددًا عند غياب وصلة مطلوبة. ولا ترتبط الأزواج باتجاه، لذلك تصلح المسافة الواحدة للسفر في الاتجاهين.
شغّل الأداة مجانًا
حدد المسار والمسافات المتاحة
ابدأ بمصفوفة المحطات، وأدرج كل مكان وفق ترتيب زيارته الدقيق. تُحذف المسافات البيضاء من طرفي الاسم، لكن حالة الأحرف والمسافات الداخلية تظل مؤثرة، لذلك ينبغي استعمال تسميات متسقة. ويمكن تكرار محطة عندما يعود المسار إلى المستودع أو يزور موقعًا مرة أخرى. بعد ذلك، قدم سجلات تتضمن نقطة البداية ونقطة النهاية والمسافة. يصف كل سجل زوجًا غير موجه؛ فالقيمة بين المستودع والمتحف تصلح أيضًا بين المتحف والمستودع. يجب أن تكون المسافات أعدادًا منتهية وغير سالبة، وأن تستخدم كلها الوحدة المحددة. لا تحول الحاسبة الوحدات المختلطة لأن جمع الكيلومترات والأميال يعطي نتيجة مضللة. يجوز إدراج أزواج إضافية، وستُهمل إن لم يستعملها ترتيب الزيارة المطلوب. يتيح ذلك إعادة استخدام جدول مسافات شامل مع تغيير التسلسل وحده. وإذا ظهر الزوج نفسه بقيم مختلفة، يُرفض الطلب بدل اختيار إحدى القيم المتعارضة دون تنبيه.
تعرف على طريقة حساب المسافة الإجمالية
تمر عملية الحساب على المحطات من اليسار إلى اليمين، وتعالج كل زوج متجاور مرة واحدة. فإذا كان التسلسل هو المستودع ثم المتحف ثم الفندق ثم المستودع، تكون المقاطع المطلوبة: المستودع–المتحف، والمتحف–الفندق، والفندق–المستودع. تبحث الخوارزمية عن كل زوج بصرف النظر عن الاتجاه، وتضيف مسافته إلى المجموع الجاري، وتسجل المقطع في النتيجة. وهي لا تعيد ترتيب المواقع، ولا تضيف مكانًا غير مدرج، ولا تستبدل الوصلة بمسار غير مباشر. هذه أداة لجمع تسلسل محدد وليست محركًا لتحسين المسارات، ولذلك يبقى الترتيب المدخل هو المعتمد. ينتج عن تكرار الاسم نفسه في محطتين متتاليتين مقطع مسافته صفر. تشمل النتيجة المسافة الإجمالية والوحدة وعدد المحطات وعدد المقاطع والقائمة المرتبة التي استُخدمت في الجمع. وتحد معالجة ثابتة للدقة من آثار الفاصلة العائمة غير المهمة مع الحفاظ على الكسور المفيدة. وبما أن كل قيمة مستخدمة ظاهرة، يمكن مراجعة الإجمالي مباشرة مقابل الجدول الأصلي.
عالج البيانات الناقصة قبل أن تسبب مشكلة
قبل عرض أي إجمالي، تتحقق الحاسبة من وجود مسافة لكل زوج متتالٍ في ترتيب الزيارة. فإذا غابت المسافة بين المتحف والفندق، تسمي المحطتين وترفض الطلب؛ ولا تفترض أن المسافة صفر ولا تعرض مجموعًا جزئيًا. يفيد هذا السلوك الآمن في تنظيم المركبات وإعداد الرحلات وتعويض المسافات وتخطيط التوصيل، حيث قد تؤثر المسافة المنقوصة في المواعيد والميزانيات. أضف الزوج المحدد ثم أرسل الطلب مجددًا، وستنتج المدخلات الحتمية نفسها النتيجة ذاتها دائمًا. يقتصر الفحص على المقاطع المستخدمة فعلًا، لذا لا يهم غياب قيم بين مواقع لا تدخل في التسلسل. يمكن أخذ المسافات من مصفوفة طرق أو ورقة تخطيط أو مقاطع مقيسة أو مصدر موثوق آخر. لا تتصل الحاسبة بخدمة خرائط، ولا تعرف الإغلاقات الحالية أو رسوم الطرق أو قيود المركبات. تحقق بصورة مستقلة من حداثة المصدر عندما تعتمد قرارات تشغيلية على ظروف السفر الواقعية.
حالات الاستخدام
مراجعة جولة توصيل
اجمع المقاطع المعروفة بين المستودع والعملاء وفق ترتيب الإرسال، واكتشف أي وصلة ناقصة قبل المغادرة.
جمع مسافة برنامج رحلة
احسب طول تسلسل مخطط من المعالم والفنادق ومراكز النقل بالاعتماد على جدول مسافات معد مسبقًا.
تدقيق حسابات المسافة
اعرض المقاطع الدقيقة الداخلة في الإجمالي لمقارنة التعويض أو التقدير ببيانات المسافات الأصلية.
الأسئلة الشائعة
ما تكلفة طلب API؟
تبلغ تكلفة كل طلب API $0.002. ويمكن تشغيل نسخة المتصفح محليًا من دون إجراء اتصال شبكي.
هل تعثر الحاسبة على أقصر مسار؟
لا. تحافظ على ترتيب الزيارة الذي تقدمه، وتجمع المقاطع المتتالية ضمن ذلك التسلسل.
هل تعتمد مسافات الأزواج على الاتجاه؟
لا. تُستخدم المسافة من A إلى B كذلك من B إلى A، وتُرفض القيم المكررة المتعارضة للزوج نفسه.
ماذا يحدث عند غياب مقطع من المسار؟
يفشل الطلب بخطأ إدخال غير صالح يحدد المحطتين المتتاليتين اللتين لم تُقدم المسافة بينهما.
هل يمكن الجمع بين الكيلومترات والأميال؟
لا. يجب أن تستخدم جميع المسافات الوحدة المحددة مسبقًا. تعرض الأداة الوحدة، لكنها لا تحول القيم الفردية.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/travel/route-stop-sequence-distance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"stops":["Depot","Museum","Hotel","Depot"],"distances":[{"from":"Depot","to":"Museum","distance":4.8},{"from":"Museum","to":"Hotel","distance":3.25},{"from":"Hotel","to":"Depot","distance":6.1}]}'const res = await fetch("https://api.kit.forhosting.com/travel/route-stop-sequence-distance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"stops": [
"Depot",
"Museum",
"Hotel",
"Depot"
],
"distances": [
{
"from": "Depot",
"to": "Museum",
"distance": 4.8
},
{
"from": "Museum",
"to": "Hotel",
"distance": 3.25
},
{
"from": "Hotel",
"to": "Depot",
"distance": 6.1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/route-stop-sequence-distance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"stops": [
"Depot",
"Museum",
"Hotel",
"Depot"
],
"distances": [
{
"from": "Depot",
"to": "Museum",
"distance": 4.8
},
{
"from": "Museum",
"to": "Hotel",
"distance": 3.25
},
{
"from": "Hotel",
"to": "Depot",
"distance": 6.1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/route-stop-sequence-distance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"stops":["Depot","Museum","Hotel","Depot"],"distances":[{"from":"Depot","to":"Museum","distance":4.8},{"from":"Museum","to":"Hotel","distance":3.25},{"from":"Hotel","to":"Depot","distance":6.1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"stops":["Depot","Museum","Hotel","Depot"],"distances":[{"from":"Depot","to":"Museum","distance":4.8},{"from":"Museum","to":"Hotel","distance":3.25},{"from":"Hotel","to":"Depot","distance":6.1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/route-stop-sequence-distance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"stops": [
"Depot",
"Museum",
"Hotel",
"Depot"
],
"distances": [
{
"from": "Depot",
"to": "Museum",
"distance": 4.8
},
{
"from": "Museum",
"to": "Hotel",
"distance": 3.25
},
{
"from": "Hotel",
"to": "Depot",
"distance": 6.1
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.route_stop_sequence_distance",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_stops | 500 |
max_distances | 10000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |