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