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