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