تكثيف خط جيوديسي برؤوس متساوية التباعد
يمكنكم تكثيف خط جغرافي بإدراج رؤوس وسيطة لخط العرض والطول على كل قطعة. قدّموا خطا مرتبا وحدا أقصى للتباعد بالأمتار؛ فتتبع النتيجة قوس الدائرة العظمى الأقصر وتضمن ألا تتجاوز أي فجوة مولدة ذلك الحد.
شغّل الأداة مجانًا
تبقى الرؤوس الأصلية بترتيبها، وتساعد أعداد النقاط وملخصات المسافة على مراجعة الناتج أو رسمه أو تمريره إلى سير عمل مكاني آخر من دون الاعتماد على تطبيق نظم معلومات جغرافية مكتبي.
اختاروا تباعدا يناسب المعالجة اللاحقة
يفيد تكثيف الخطوط عندما تحتاج عملية ما إلى عينات أكثر تقاربا مما توفره الهندسة الأصلية. ابدؤوا بمصفوفة مرتبة من السجلات التي تحتوي على lat وlon، ثم اضبطوا spacing_m على أكبر فجوة مقبولة بالأمتار. تفحص الحاسبة كل قطعة أصلية على حدة. إذا كانت القطعة أقصر من التباعد المطلوب، تبقى فجوة واحدة ولا تضاف نقطة غير لازمة. أما إذا كانت أطول، فتقسم إلى أقل عدد صحيح من الفجوات الجيوديسية المتساوية التي تلتزم بالحد الأقصى. ولذلك يمثل التباعد سقفا لا شرطا بأن تساوي كل فجوة القيمة المدخلة تماما. ولأن كل قطعة تقسم منفردة، تظل نقطة نهايتها محفوظة وتبدأ القطعة التالية من الرأس الأصلي نفسه. استخدموا تباعدا واسعا لخرائط النظرة العامة، وتباعدا أدق عند تغذية استعلامات التضاريس أو التغطية أو الرسوم المتحركة أو الحسابات التي تفترض حواف قصيرة. قد ينتج عن التباعد الصغير جدا عدد كبير من النقاط، لذا ترفض الأداة النتائج التي تتجاوز الحد المعلن بدلا من اقتطاع الخط من دون تنبيه.
افهموا الحساب الجيوديسي الكروي
يحدد كل زوج من الإحداثيات المتتالية قطعة على سطح كرة. تحول الخوارزمية نقطتي النهاية إلى متجهين وحديين ثلاثيي الأبعاد، وتقيس الزاوية المركزية بينهما، ثم تستوفي النقاط على قوس الدائرة العظمى الأقصر. تساوي المسافة تلك الزاوية مضروبة في earth_radius_m، وقيمته الافتراضية نصف قطر الأرض المتوسط المتعارف عليه. تتعامل الطريقة بصورة صحيحة مع خط الزوال المقابل: فالخط من 179 درجة شرقا إلى 179 درجة غربا يسلك الطريق القصير عبر خط التاريخ بدلا من الدوران حول معظم الأرض. كما أنها لا تعامل خطوط العرض والطول كإحداثيات ديكارتية مستوية، وهي مقاربة تصبح مضللة في المسافات الطويلة أو قرب القطبين. تكون الإحداثيات الأصلية والمضافة حتمية ومدورة بدقة مستقرة لتسهيل مقارنة JSON. تحتفظ الأداة بالنقاط المتتالية المتطابقة لأنها قد تحمل معنى بنيويا، مع أن الفجوة بينها صفر. وترفض نقطتي النهاية المتقابلتين تماما لأن عددا لا نهائيا من الدوائر العظمى يصل بينهما، فلا يوجد مسار أقصر وحيد. ولأعمال المسح الإهليلجية الدقيقة، يرجى الانتباه إلى أن الحساب يستخدم كرة قابلة للضبط لا مجسم WGS-84 الإهليلجي الكامل.
اقرؤوا النتيجة وتحققوا منها
النتيجة الأساسية هي vertices، وهي مصفوفة مرتبة جاهزة لتحويلها إلى إحداثيات أو إلى صيغة الهندسة التي يستخدمها تطبيقكم. يمثل العنصران الأول والأخير نقطتي النهاية الأصليتين، ويظهر كل رأس داخلي أصلي عند حد قطعته. تعرض الاستجابة أيضا input_vertices وoutput_vertices وinserted_vertices كي يكون مقدار التوسع واضحا ويسهل ضبط ميزانية التخزين أو الرسم. يجمع total_distance_m أطوال القطع الجيوديسية الأصلية، بينما يعرض max_segment_distance_m أكبر فجوة فعلية بعد التقسيم. ينبغي أن تكون هذه القيمة أقل من التباعد المطلوب أو مساوية له، باستثناء أثر ضئيل لتقريب الفاصلة العائمة. تحققوا منها عندما يضمن التكثيف شرط أخذ عينات لاحق. حافظوا على ترتيب الإحداثيات عند التحويل إلى GeoJSON، مع ملاحظة أن الأزواج هناك تضع عادة خط الطول قبل خط العرض، بينما تستخدم هذه API خاصيتي lat وlon المسميتين. الحساب نقي ولا يجري طلبات شبكة ولا يحتفظ بالخط المرسل. يمكنكم إجراء فحص تفاعلي في المتصفح أو التشغيل الآلي عبر API مقابل $0.002 لكل طلب، مع الحصول على البنية الحتمية نفسها.
حالات الاستخدام
إعداد مسار لأخذ عينات منتظمة
أضيفوا رؤوسا كافية قبل الاستعلام عن الارتفاع أو الطقس أو تغطية الإشارة أو أي قيمة تتغير على امتداد المسار.
تحسين رسم الحواف الطويلة
مثلوا الحواف الجغرافية الطويلة بنقاط وسيطة على دائرة عظمى كي تتبع المسارات المسقطة أو المتحركة الطريق المقصود.
توحيد خطوط مختلفة الدقة
طبقوا قاعدة واحدة لأقصى فجوة على خطوط التقطت رؤوسها الأصلية بفواصل غير متسقة.
الأسئلة الشائعة
هل يحدد spacing_m مسافة مطابقة بين جميع النقاط؟
لا. إنه يحدد أكبر فجوة مسموحة، وتقسم كل قطعة أصلية إلى أجزاء جيوديسية متساوية لا تتجاوز تلك القيمة.
هل تبقى الرؤوس الأصلية محفوظة؟
نعم. تبقى جميعها بالترتيب نفسه، وتدرج الرؤوس الجديدة بين كل رأسين أصليين متتاليين.
هل تعمل الأداة عند عبور خط الزوال المقابل؟
نعم. يتبع الاستيفاء قوس الدائرة العظمى الأقصر، بما في ذلك العبور القصير بين خطي طول قريبين من 180 درجة.
لماذا ترفض نقطتا النهاية المتقابلتان؟
لا تحدد النقطتان المتقابلتان دائرة عظمى وحيدة. يمنع الرفض اختيار مسار اعتباطي.
هل يعتمد الحساب على مجسم WGS-84 الإهليلجي؟
لا. يستخدم هندسة كروية لدائرة عظمى بنصف قطر قابل للضبط، وقيمته الافتراضية نصف قطر الأرض المتوسط.
ما تكلفة طلب API؟
يكلف كل طلب $0.002. لا يتصل الحساب الحتمي بأي خدمة خارجية.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/geo/densify-line \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}'const res = await fetch("https://api.kit.forhosting.com/geo/densify-line", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/densify-line",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/densify-line", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/densify-line", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.densify_line",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_points | 10000 |
max_output_vertices | 100000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |