مرمّز Geohash
حوّل زوج إحداثيات إلى رمز Geohash قصير: النقطة 37.7749 و-122.4194 بتسعة أحرف تصبح 9q8yyk8yt، وهو مفتاح بحجم مربع سكني يجمع الأماكن المتجاورة. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- خط العرض بالدرجات العشرية
- 37.7749
- خط الطول بالدرجات العشرية
- -122.4194
- الدقة
- 9
- الترميز الجغرافي
- 9q8yyk8yt
يحوّل رمز Geohash زوجاً من الإحداثيات الجغرافية إلى سلسلة قصيرة بترميز base32 تعرّف خلية مستطيلة على سطح الأرض. تتشارك النقاط المتجاورة بادئات مشتركة طويلة، ما يجعل هذا الترميز مفيداً للبحث بالقرب، ومفاتيح البلاطات، وتقسيم الذاكرة المؤقتة، ورموز المواقع المقروءة للبشر. تأخذ هذه القدرة خط العرض وخط الطول وطول الدقة، ثم تعيد سلسلة Geohash مع المربع المحيط بالخلية. الخوارزمية حساب صرف: لا اتصالات بالشبكة، ولا أخذ عيّنات عشوائي، ولا ساعة. تُرفض الدقة غير الصالحة أو الإحداثيات خارج المدى بخطأ إدخال واضح بدلاً من إعادة خلية خاطئة بصمت.
ما الذي يمثّله Geohash فعلاً
Geohash نظام ترميز عمومي يشابك بتات خط الطول وخط العرض، ثم يعبّئ تلك البتات خمساً في كل مرة ضمن أبجدية من 32 حرفاً تتجنّب عمداً الأحرف الملتبسة. كل حرف تضيفه يقسم الخلية تقريباً إلى نصف في بُعد ثم في الآخر، فالسلاسل الأطول تصف مستطيلات أصغر. يغطّي مقطع من حرف واحد رقعة هائلة من الكوكب؛ وتسعة أو عشرة أحرف تكفي عادةً لمربع سكني أو مساحة مبنى، بحسب خط العرض.
ولأن البادئات متداخلة، فإن موقعين يتشاركان الأحرف السبعة الأولى يقعان داخل الخلية الخشنة نفسها، وهذا بالضبط ما يجعل استعلامات البادئة وتجميع الخرائط عمليّين. السلسلة ليست تجزئة تعمية: يمكن لنقاط مختلفة أن تتشارك بادئة عن قصد، وتنتج الدقة نفسها دائماً السلسلة نفسها للإحداثيات نفسها. استعمله حين تحتاج مفتاحاً مدمجاً وآمناً للروابط يدلّ على مكان بدلاً من زوج فاصلة عائمة كامل في كل سطر سجلّ أو صف قاعدة بيانات.
كيف تختار الدقة وترسل الإحداثيات
أرسل درجات عشرية على كرة WGS84: خط العرض من ناقص تسعين إلى تسعين، وخط الطول من ناقص مئة وثمانين إلى مئة وثمانين. الدقة هي عدد أحرف base32 التي تريد استرجاعها، من واحد إلى اثني عشر. تناسب القيم المنخفضة الحاويات القُطرية أو الإقليمية؛ وتناسب القيم المتوسطة المدن والأحياء؛ وتناسب القيم العالية الخلايا الداخلية أو تتبّع المركبات.
يعيد الردّ المدخلات التي أرسلتها، وسلسلة Geohash الناتجة، وحدود خط العرض والطول للخلية التي تدلّ عليها تلك السلسلة. هذه الحدود هي الفترات التي انتهى إليها المرمّز بعد آخر بت، فتتحقّق من التغطية دون فكّ الترميز على حدة. تفشل الحقول الناقصة والقيم غير الرقمية على النحو نفسه.
فضّل الأرقام العشرية المستقرّة على السلاسل ذات الوحدات أو الأحرف الأصلية؛ وحوّل مراجع الدرجات والدقائق والثواني أو مراجع الشبكة قبل النداء.
أين تُوظَّف الخلايا المرمّزة في خطوط الإنتاج الحقيقية
تستعمل الفرق قيم Geohash مفاتيحَ تقسيم في مخازن السلاسل الزمنية، ومعرّفاتِ بلاطات خرائط للذاكرة المؤقتة على العميل، وبادئاتٍ مشتركة لمرشِّحات النقاط القريبة، ورموزاً قصيرة في الروابط أو حمولات QR حين يكون زوج العرض/الطول الكامل غير عملي. ولأن التحويل حتمي وخالٍ من الآثار الجانبية، يمكنك توليد المفتاح نفسه في المتصفح أو في عامل أو في مهمة دفعية وتتوقّع نتائج متطابقة بايتاً ببايت للمدخلات نفسها. هذا مهمّ للاختبارات المرجعية والنسخ المتعدّدة المناطق والأدوات دون اتصال التي يجب ألا تنحرف.
تذكّر أن خلايا Geohash مستطيلات في فضاء الدرجات، لا دوائر مثالية متساوية المساحة: قرب القطبين تكون الخلية الطويلة أضيق بكثير بالأمتار شرقاً–غرباً من خلية بالطول نفسه قرب خط الاستواء. للبحث الصارم بنصف قطر تحسب المسافة على النقاط الأصلية؛ استعمل التجزئة للحوسبة في حاويات ولاسترجاع المرشّحين ثم لِلتنقية.
حالات الاستخدام
مفاتيح تقسيم قاعدة البيانات والذاكرة المؤقتة
خزّن Geohash بطول ثابت بجانب كل سجلّ كي تُجمّع عمليات المسح المجالي وشظايا الذاكرة المؤقتة المواقعَ المتجاورة دون فهارس فاصلة عائمة.
تجميع الخرائط وعناوين البلاطات
احشُر الدبابيس حسب البادئات المشتركة عند دقة شبيهة بالتقريب المختار، ثم وسّع فقط الخلايا التي تحتاج التفصيل.
رموز موقع قصيرة في الروابط
استبدل سلاسل استعلام الإحداثيات الطويلة بـ Geohash مدمج يظلّ قادراً على استرجاع خلية معلومة عند فكّ ترميزه في مكان آخر.
الأسئلة الشائعة
ماذا يعيد مرمّز Geohash هذا؟
يعيد سلسلة Geohash، وخط العرض وخط الطول اللذين قدّمتهما، وطول الدقة، والمربع المحيط بالخلية التي تعرّفها تلك السلسلة.
أيّ دقة ينبغي أن أستعمل؟
استعمل أحرفاً أقلّ للمناطق الكبيرة وأكثر للخلايا الدقيقة. تشيع القيم حول سبعة إلى تسعة لمقياس المربع السكني؛ واثنا عشر هو الحدّ الأقصى الذي تقبله هذه الأداة.
كم تكلفته؟
أداة الصفحة مجانية في متصفحك. لا يُحاسَب على المدخلات غير الصالحة.
لماذا تبدأ رموز Geohash للأماكن المتقاربة بالحروف نفسها؟
لأن الخلايا متداخلة: كل حرف إضافي يقسم الخلية السابقة إلى أجزاء أصغر. والمكانان اللذان يشترك رمزاهما في الأحرف السبعة الأولى يقعان في الخلية الكبيرة نفسها، وهذا ما يتيح البحث بالبادئة وتجميع النقاط على الخريطة.
هل لخلية Geohash الحجم نفسه في كل مكان على الأرض؟
لا. الخلايا مستطيلات بالدرجات وليست دوائر متساوية المساحة، فقرب القطبين تكون الخلية أضيق كثيرًا من الشرق إلى الغرب بالأمتار مما هي قرب خط الاستواء. وللبحث الدقيق ضمن نصف قطر، احسب المسافة على الإحداثيات الأصلية.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/geo/geohash-encode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"latitude":37.7749,"longitude":-122.4194,"precision":9}'const res = await fetch("https://api.kit.forhosting.com/geo/geohash-encode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"latitude": 37.7749,
"longitude": -122.4194,
"precision": 9
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/geohash-encode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"latitude": 37.7749,
"longitude": -122.4194,
"precision": 9
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/geohash-encode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"latitude":37.7749,"longitude":-122.4194,"precision":9}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"latitude":37.7749,"longitude":-122.4194,"precision":9}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/geohash-encode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"latitude": 37.7749,
"longitude": -122.4194,
"precision": 9
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.geohash_encode",
"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 ولا يُحاسَب عليه.
أين تُوظَّف الخلايا المرمّزة في خطوط الإنتاج الحقيقية
شغّل أداة المتصفح المجانية لفحص موقع واحد، أو نادِ الواجهة حين تحتاج الترميز نفسه داخل الأتمتة بسعر $0.002 لكل طلب ناجح.
أسئلة تقنية
متى يفشل الترميز؟
يفشل بخطأ invalid_input حين تكون الدقة دون واحد (أو فوق اثني عشر)، أو خط العرض خارج −90…90، أو خط الطول خارج −180…180، أو حين يكون رقم مطلوب ناقصاً أو غير منتهٍ.
هل النتيجة نفسها في المتصفح والواجهة؟
نعم. كلاهما يشغّل المرمّز الصرف نفسه في lib.js، فتنتج المدخلات المتطابقة سلاسل Geohash ومربعات محيطة متطابقة.