الاستيفاء على الدائرة العظمى: خطوط العرض والطول الوسيطة بين نقطتين
في منتصف الدائرة العظمى بين (40.7128، -74.006) و(51.5074، -0.1278) تقع النقطة (52.3684395875، -41.2903073562)، وهي أبعد شمالًا من الطرفين. اختر أي كسر من 0 إلى 1 لتحديد نقطة على المسار ومعرفة بعدها عن البداية. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- عرض 1
- 40.7128
- طول 1
- -74.006
- عرض 2
- 51.5074
- طول 2
- -0.1278
- الكسر
- 0.5
- نصف قطر الأرض م
- 6,371,000
- المسافة الزاوية درجات
- 50.0942115601
- المسافة الكلية م
- 5,570,222.17974
- المسافة من البداية م
- 2,785,111.08987
يجيب الاستيفاء على الدائرة العظمى عن سؤال ملاحي بسيط: إذا كانت لدينا نقطتا طرف ثابتتان بخطي عرض وطول، وكسر بين الصفر والواحد، فأين تقع النقطة الوسيطة الواقعة عند ذلك الكسر على امتداد القوس الكروي الأقصر الذي يربطهما؟ دمج خطي العرض والطول خطيًّا بشكل مستقل خطأ، لأن خطوط الطول تتقارب وتلتفّ؛ أما البناء الصحيح فيتعامل مع الأرض بوصفها كرة، ويحوّل كل طرف إلى متجه وحدة، ويجري الاستيفاء الخطي الكروي (slerp) بحيث تقع كل عينة وسيطة على الدائرة العظمى الوحيدة المارة بالنقطتين.
كيف تُحسب النقاط الوسيطة على الدائرة العظمى
حوّل كلا الطرفين من الدرجات العشرية إلى الراديان وكوِّن متجهي الوحدة n1 وn2 على الكرة. الزاوية المركزية δ بينهما مستمدة من قانون جيب التمام الكروي: cos δ يساوي sin φ1 sin φ2 زائد cos φ1 cos φ2 cos(λ2 − λ1)، مع تقييد القيمة إلى النطاق من سالب واحد إلى موجب واحد قبل دالة جيب التمام العكسي حتى لا يخرج تشويش الفاصلة العائمة عن المجال. عندما يكون sin δ صفرًا فعليًّا والنقطتان متطابقتين، يعيد أي كسر إحداثي البداية.
وإلا احسب أوزان slerp الكلاسيكية: A يساوي جيب واحد ناقص f مضروبًا في δ على sin δ، وB يساوي جيب f مضروبًا في δ على sin δ. متجه الوحدة الوسيط هو A مضروبًا في n1 زائد B مضروبًا في n2؛ وخط العرض هو ظل التمام العكسي لـ z على الوتر الأفقي، وخط الطول هو ظل التمام العكسي ذا الوسيطين لـ y على x، ثم يُطوى إلى النطاق نصف المفتوح حول خط مقابل خط التاريخ.
أين يظهر الاستيفاء على الدائرة العظمى في العمل الفعلي
يكثر التدريب الجوي والبحري من مسائل المواقع الوسيطة على امتداد مسارات الدائرة العظمى، ويحتاج المتدربون إلى مرجع موثوق يعيد lat/lon عند الكسر f دون فرجار الخرائط. وتكثّف فرق نظم المعلومات الجغرافية واللوجستيات قطاعات الطيران أو الشحن الطويلة إلى عينات متساوية التباعد لخرائط الحرارة وتقديرات الوقود وممرات السياج الجغرافي قبل اعتماد مكتبات الإهليلج الكاملة. وتضع خطط البحث والإنقاذ وأدلة التنزه ومناهج التوجيه نقاط تفتيش بحسب الكسر على امتداد قوس مخطط بين موقعين معروفين.
وتُحرك محركات الألعاب والمحاكاة الكيانات على مسارات كروية بالصيغة المغلقة نفسها حتى يبقى العميل والخادم متسقين دون تضمين حزمة جيوديزية ثقيلة. ويعاين رسامو الخرائط الذين يبنون أقواسًا متحركة على خرائط الويب نقاطًا وسيطة عند كسور منتظمة لرسم خطوط جيوديزية متعددة سلسة لا تشق الأرض في إسقاط مستوٍ. وإن احتجت لاحقًا إلى مسألة الوجهة المباشرة من الاتجاه والمسافة، أو الملاحة لوكسرومية، أو إحداثيات النقيض، أو جيوديزيات Vincenty الكاملة على إهليلج WGS84، فعاملها بوصفها نيات بحث وصفحات هبوط مستقلة بدلًا من تحميل صفحة الاستيفاء على الدائرة العظمى هذه فوق طاقتها.
حالات الاستخدام
التدريب الملاحي ومواقع منتصف المسار
احسب lat/lon الوسيطة عند الكسر f على امتداد قطاع من الدائرة العظمى، حتى يتشارك المدربون والمصححون الآليون مرجعًا واحدًا في تدريبات عرض البحر وفي الجو.
تكثيف مسارات الطيران والشحن
عاين waypoints متساوية التباعد بين المنشأ والوجهة لخرائط ونماذج الوقود وأسيجة الممرات الجغرافية دون بنية إهليلجية كاملة.
الأسئلة الشائعة
ما الصيغة التي يستخدمها هذا الاستيفاء على الدائرة العظمى؟
الاستيفاء الخطي الكروي (slerp): الزاوية المركزية δ من قانون جيب التمام الكروي، والأوزان A = sin((1−f)δ)/sin δ وB = sin(fδ)/sin δ، ومتجه الوحدة الوسيط A·n1 + B·n2، ثم φ وλ عبر atan2.
ماذا يحدث إذا كان الكسر خارج النطاق من 0 إلى 1؟
يجب أن يقع الكسر في النطاق المغلق [0, 1]. القيم الخارجة لا تُلتفّ ولا تُقتطع.
هل حساب المتوسط الخطي لخطي العرض والطول صحيح؟
لا. فحساب متوسط خطي العرض والطول بشكل مستقل يتجاهل الهندسة الكروية والتفاف خط الطول. تعمل هذه الأداة على الاستيفاء على كرة الوحدة بحيث تقع كل عينة على قوس الدائرة العظمى.
وماذا عن الطرفين المتقابلين قطريًّا؟
عندما تكون النقطتان متقابلتين (أو شبه متقابلتين) على الكرة، يربطهما عدد لا نهائي من الدوائر العظمى.
هل يغيّر نصف قطر الأرض موقع النقطة الوسيطة؟
لا. نصف القطر، وقيمته الافتراضية 6371000 متر، يؤثر فقط في المسافات المعروضة على طول القوس، أما خط العرض وخط الطول للنقطة الوسيطة فيبقيان كما هما مع أي نصف قطر.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/geo/geodesic-interpolate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat1":40.7128,"lon1":-74.006,"lat2":51.5074,"lon2":-0.1278,"fraction":0.5}'const res = await fetch("https://api.kit.forhosting.com/geo/geodesic-interpolate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat1": 40.7128,
"lon1": -74.006,
"lat2": 51.5074,
"lon2": -0.1278,
"fraction": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/geodesic-interpolate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat1": 40.7128,
"lon1": -74.006,
"lat2": 51.5074,
"lon2": -0.1278,
"fraction": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/geodesic-interpolate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat1":40.7128,"lon1":-74.006,"lat2":51.5074,"lon2":-0.1278,"fraction":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat1":40.7128,"lon1":-74.006,"lat2":51.5074,"lon2":-0.1278,"fraction":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/geodesic-interpolate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"lat1": 40.7128,
"lon1": -74.006,
"lat2": 51.5074,
"lon2": -0.1278,
"fraction": 0.5
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.geodesic_interpolate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
الكسر صفر يعيد نقطة البداية، والكسر واحد يعيد نقطة النهاية، والنصف يعيد نقطة المنتصف الجيوديزية. أما القيم الواقعة خارج الفترة الواحدية المغلقة فتُرفض بخطأ invalid_input واضح بدلًا من الالتفاف أو اختلاق نقطة خارج القطعة.
كيف تُحسب النقاط الوسيطة على الدائرة العظمى
وعندما تكون النقطتان متقابلتين قطريًّا، يكون sin δ صفرًا أيضًا لكن مستوى الدائرة العظمى غير وحيد، فيفشل الطلب مع invalid_input بدلًا من اختيار مسار اعتباطي في صمت. المسار بأكمله حساب فاصلة عائمة حتمي: لا بذور عشوائية، ولا طوابع زمنية، ولا استدعاءات شبكية، ولا انحراف نموذجي، فالمدخلات المتطابقة تنتج دائمًا JSON متطابقًا صالحًا للاختبارات الآلية ومفاتيح الإجابات.
ما الذي ترسله وما الذي تستعيده
يجب أن تقع خطوط العرض في الفترة المغلقة من سالب تسعين إلى موجب تسعين درجة، والشمال موجب. ويجب أن تقع خطوط الطول في الفترة المغلقة من سالب مئة وثمانين إلى موجب مئة وثمانين درجة، والشرق موجب. ومن الفحوص الكلاسيكية نيويورك إلى لندن عند الكسر نصف لعينة في وسط الأطلسي، ونقاط ربع خط الاستواء، والكسران صفر أو واحد اللذان يعيدان الطرفين بدقة. استخدم النموذج المجاني في المتصفح للواجبات وعروض المسارات، ثم استدعِ العقد نفسه من السكربتات عندما تحتاج إلى waypoints بالجملة أو عناصر اختبارات انحدار. أرسل خمسة أعداد منتهية إلزامية في الحقول lat1 وlon1 وlat2 وlon2 وfraction. ويجب أن يقع الكسر في الفترة المغلقة من صفر إلى واحد بما فيها الطرفان؛ وأي قيمة خارج هذا النطاق تمامًا تفشل مع invalid_input ولا تُحتسب. وتُقبل الأسماء البديلة الاختيارية latitude1 وlongitude1 وlatitude2 وlongitude2 وf تيسيرًا. يمكنك أيضًا تمرير earth_radius_m كنصف قطر كروي موجب منتهٍ عند الإبلاغ عن أطوال الأقواس؛ فخطا العرض والطول الوسيطان على كرة الوحدة لا يعتمدان على نصف القطر، لكن total_distance_m وdistance_from_start_m يتناسبان معه؛ والقيمة الافتراضية هي متوسط نصف قطر الأرض المتعارف عليه وقدره ستة ملايين وثلاثمئة وواحد وسبعون ألف متر. عند النجاح، يعيد الرد الطرفين والكسر بعد تنقيتهما، والفصل الزاوي بين الطرفين بالدرجات، والطول الكلي للقوس والمسافة من البداية بالأمتار، وكائن intermediate فيه latitude وlongitude، والحقلين المسطحين intermediate_latitude وintermediate_longitude للعملاء البسطاء، ووسم الطريقة great_circle_slerp، وسلسلة صيغة موجزة للتوثيق. تسعيرة استدعاءات API الناجحة هي الأساس المنشور $0.002 لكل عنصر؛ وإخفاقات التحقق لا تستهلك الرصيد المدفوع مسبقًا.
أين يظهر الاستيفاء على الدائرة العظمى في العمل الفعلي
ولأن هذه القدرة محرك parse خالص، فإن تسعيرة API هي الأساس المنشور $0.002 لكل عنصر ناجح، والتحقق الفاشل لا يستهلك رصيدًا.
حالات التكامل
أقواس جيوديزية متحركة ومحاكاة
حرّك الخرائط وكيانات الألعاب على مسارات كروية بتقديم الكسر من 0 إلى 1 مع نتائج متطابقة في المتصفح وAPI.
أسئلة تقنية
كم التكلفة؟
أداة المتصفح مجانية وتعمل محليًّا. تستخدم طلبات API رصيد KIT المدفوع مسبقًا بمقدار $0.002 لكل عنصر ناجح؛ والمدخلات غير الصالحة لا تُحتسب.