أقرب نقطة على خط متعدد القطع
للنقطة 40.73 و-74.01 ومسار من ثلاثة رؤوس، أقرب موضع على الخط هو 40.7227030704 و-73.9972969296 في المقطع الثاني. وتعرف أيضًا بُعده عن بداية المسار ومقدار ابتعادك عنه. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- خط العرض
- 40.73
- خط الطول
- -74.01
- خط العرض
- 40.7227030704
- خط الطول
- -73.9972969296
- خط عرض الاستعلام
- 40.73
- خط طول الاستعلام
- -74.01
إيجاد أقرب نقطة على خط متعدد القطع إلى خط عرض وخط طول حرّين هو أساس في نظم المعلومات الجغرافية والتوجيه: تطبيقات الخرائط تسقط تثبيت GPS على محور طريق، وأدوات اللوجستيات تقيس بُعد مركبة عن ممر مخطط، وسكربتات المساحة تبيّن مدى تقدمكم على طول مسار. تقبل هذه الأداة إحداثي WGS84 للاستعلام وقائمة مرتبة من الرؤوس، وتسقطها في إطار أسطواني متساوٍ محلي بالمتر، ثم تعيد أقرب موقع على أي قطعة محدودة. تحصلون على خط العرض والطول بعد الإسقاط، وفهرس القطعة من الصفر، والموضع الكسري على تلك القطعة، والمسافة على طول الخط من أول رأس، والطول الكلي للخط، والمسافة الأرضية من الاستعلام إلى نقطة الالتقاط.
معنى أقرب نقطة على خط متعدد القطع للمسارات الجغرافية
الخط متعدد القطع سلسلة مرتبة من القطع المستقيمة بين الرؤوس. في الفضاء الجغرافي كل رأس خط عرض وخط طول على كرة WGS84، وكل قطعة وتر قصير بين رأسين متتاليين بعد إسقاط خرائطي محلي. عند نقطة استعلام حرة قد تقع خارج المسار، تكون أقرب نقطة على الخط هي الموقع على أي من تلك القطع الذي يقلّل المسافة الأرضية إلى الاستعلام.
قد يقع ذلك الموقع داخل قطعة، أو عند رأس تلتقي فيه قطعتان، أو عند أحد طرفي المسار كاملًا حين يتجاوز الاستعلام البداية أو النهاية. يحدّد فهرس القطعة أي حافة تحمل الالتقاط، بدءًا من الصفر عند أول رأس. المسافة على طول الخط تقيس ما تقطعونه من أول رأس إلى الالتقاط لو سرتم على الخط نفسه، وهي تختلف عن المسافة المستقيمة من الاستعلام إلى الالتقاط.
معًا تجيب هذه الحقول عن «أين على المسار أقرب إليّ؟» و«كم بعدًا على طول المسار ذلك المكان؟» دون الحاجة إلى مخطط توجيه كامل أو قاعدة شبكة طرق.
متى يفيد ربط نقطة بمسار
منتجات الجوال والأساطيل تسقط عينات GPS الضوضائية على ممر مخطط لتعرض الواجهة التقدم على طول مسار بدل تثبيت حر متذبذب. العمليات الميدانية والمرافق تقيس بُعد طاقم أو أصل عن أنبوب أو درب أو خط كهرباء دون بناء محرك طوبولوجيا شبكة كامل. مواقع المحتوى والتعليم التي تستهدف عبارة أقرب نقطة على خط متعدد القطع تستفيد من أداة متصفح مجانية حية تطابق مسار الأتمتة المدفوع على الوحدة النقية نفسها.
فضّلوا رؤوسًا كثيفة بما يكفي على المنحنيات لتقصر كل قطعة حيث يكون التقريب الأسطواني المتساوي أقوى؛ وللخطوط القارية بطول آلاف الكيلومترات انظروا في التكثيف أو التقسيم إن لزم دقة مطلقة بالمتر عند الأطراف. ثبّتوا حقول الاستجابة المقربة في الاختبارات لتحصلوا على التقاطات قابلة للتكرار للخرائط ومختبرات LMS وعُقد الحافة دون استضافة حزمة GIS خاصة بكم.
حالات الاستخدام
التقاط GPS على محور طريق أو درب
أسقطوا تثبيت GPS حرًا على خط مسار مرتب وأظهروا خط العرض/الطول الملتقط مع مدى التقدم على طول المسار.
تقارير انحراف الممر والسلاسل
قيسوا المسافة الأرضية من الأصول إلى أنبوب أو محاذاة درب وأبلغوا السلسلة (المسافة على الطول) في تذاكر الصيانة.
تنظيف المسارات وعروض الخرائط
أعيدوا معلَمة نقاط المسار الضوضائية كمسافة على طول خط تصميم في سكربتات ETL أو ودجات خرائط تعليمية حية.
الأسئلة الشائعة
كيف أجد أقرب نقطة على خط متعدد القطع لإحداثي lat/lon؟
أرسلوا lat وlon للاستعلام مع مصفوفة polyline من رأسين على الأقل {lat, lon}.
ماذا لو كان خطي متعدد القطع نقطة واحدة فقط؟
يحتاج الخط إلى رأسين على الأقل لتعريف قطعة. الإحداثيات خارج النطاق تفشل أيضًا دون فوترة.
ما الفرق بين المسافة على طول المسار والمسافة إليه؟
المسافة على طول المسار هي ما ستقطعه على الخط نفسه من الرأس الأول حتى النقطة المطابقة. أما المسافة إلى المسار فهي البعد المستقيم على الأرض بين نقطتك وتلك النقطة المطابقة.
هل يمكن أن تكون أقرب نقطة رأسًا أو طرفًا من المسار؟
نعم. قد يقع أقرب موضع داخل مقطع، أو على رأس يلتقي عنده مقطعان، أو عند بداية المسار أو نهايته عندما تقع نقطتك خارج أحد الطرفين.
ما مدى الدقة في المسارات الطويلة جدًا؟
يُقاس كل مقطع في مستوى محلي يعطي أفضل النتائج مع المقاطع القصيرة. أضف رؤوسًا كافية على الطرق المنحنية، وقسّم المسارات التي تمتد آلاف الكيلومترات إذا كنت تحتاج دقة بالأمتار.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/geo/nearest-point-on-polyline \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":40.7128,"lon":-74.006,"polyline":[{"lat":40.7,"lon":-74.02},{"lat":40.72,"lon":-74},{"lat":40.74,"lon":-73.98}]}'const res = await fetch("https://api.kit.forhosting.com/geo/nearest-point-on-polyline", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 40.7128,
"lon": -74.006,
"polyline": [
{
"lat": 40.7,
"lon": -74.02
},
{
"lat": 40.72,
"lon": -74
},
{
"lat": 40.74,
"lon": -73.98
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/nearest-point-on-polyline",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 40.7128,
"lon": -74.006,
"polyline": [
{
"lat": 40.7,
"lon": -74.02
},
{
"lat": 40.72,
"lon": -74
},
{
"lat": 40.74,
"lon": -73.98
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/nearest-point-on-polyline", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":40.7128,"lon":-74.006,"polyline":[{"lat":40.7,"lon":-74.02},{"lat":40.72,"lon":-74},{"lat":40.74,"lon":-73.98}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":40.7128,"lon":-74.006,"polyline":[{"lat":40.7,"lon":-74.02},{"lat":40.72,"lon":-74},{"lat":40.74,"lon":-73.98}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/nearest-point-on-polyline", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"lat": 40.7128,
"lon": -74.006,
"polyline": [
{
"lat": 40.7,
"lon": -74.02
},
{
"lat": 40.72,
"lon": -74
},
{
"lat": 40.74,
"lon": -73.98
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.nearest_point_on_polyline",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
المنطق النقي نفسه يشغّل أداة المتصفح المجانية ومسار API، فلا تختلف العروض التفاعلية وخطوط المعالجة الآلية في نتيجة الالتقاط.
عقد الإدخال والخوارزمية وشكل الاستجابة والأخطاء
داخليًا يأخذ الحلّال متوسط رؤوس الخط أصلًا أسطوانيًا متساويًا، ويحوّل كل رأس والاستعلام إلى أمتار شرق–شمال محلية، ثم لكل قطعة محدودة يسقط الاستعلام على المستقيم اللانهائي ويقيد المعامل t في الفترة الوحدوية المغلقة ليبقى المرشح على القطعة. بين كل القطع يحتفظ بأقل مسافة مربعة، وعند التعادل التام يفضّل القطعة الأسبق لعقد مستقر. تُتخطى التكرارات المتتالية ذات الطول الصفري متى وُجدت قطعة حقيقية. أرسلوا جسم JSON يحوي lat وlon لنقطة الاستعلام، وهما عددان متناهيان في نطاقي WGS84 المعتادين من سالب تسعين إلى تسعين ومن سالب مئة وثمانين إلى مئة وثمانين، إضافة إلى polyline كمصفوفة مرتبة من رأسين على الأقل لكل منهما lat وlon. القيمة الاختيارية radius_m افتراضيها ستة ملايين وثلاثمئة وواحد وسبعون ألف متر لمقياس الأرض المتوسطة. تُقبل أسماء بديلة مثل latitude وlongitude وlng وvertices وpoints وpath لتقليل إعادة كتابة حمولات GIS القائمة. النجاح يعيد lat وlon للالتقاط، وquery_lat وquery_lon معكوسين، وsegment_index وt وdistance_along_m وdistance_along_km وdistance_to_m وdistance_to_km، وطول الخط بالوحدتين، وvertex_count وsegment_count وon_vertex وradius_m وmethod equirectangular_polyline. الإحداثيات خارج النطاق، وأقل من رأسين، والأعداد غير المتناهية، والخط المفقود تثير invalid_input ولا تُفوتر.
أين تُثبت API أقرب نقطة على خط متعدد القطع قيمتها
خطوط البيانات التي تنظف مسارات مستوردة تستخدم الالتقاط مع distance_along_m لإعادة معلَمة النقاط كسلاسل على محاذاة تصميم. ولأن التنفيذ parse خالص من المستوى A، كل استدعاء ناجح يكلف السعر الأساسي المنشور $0.002 بلا رموز نموذج ولا شبكة صادرة، وفشل التحقق لا يستهلك الرصيد.
أسئلة تقنية
ما هو segment_index؟
فهرس من الصفر لحافة الخط التي تحمل أقرب نقطة. القطعة 0 من الرأس الأول إلى الثاني، والقطعة 1 من الثاني إلى الثالث، وهكذا.
كيف تُقاس المسافة على طول الخط؟
distance_along_m هو الطول الأرضي من أول رأس إلى نقطة الالتقاط باتباع قطع الخط، وليس المسافة المستقيمة من الاستعلام إلى الالتقاط.
كم تكلفة أداة أقرب نقطة على خط متعدد القطع؟
أداة المتصفح مجانية. طلبات API تستخدم رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل استدعاء ناجح؛ الإدخال غير الصالح لا يُفوتر.