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