مرمِّز ومفسِّر Geohash
خصوصية بالتصميم — يعمل بالكامل في متصفحك
في وضع التشفير، أدخل خط العرض والطول مع شريط تمرير الدقّة لتحصل على سلسلة geohash. وفي وضع فك التشفير، الصق سلسلة لترى إحداثيات المركز وحدود الزاويتين الجنوبية الغربية والشمالية الشرقية لخليتها. مفيد لفهارس المكان والبحث بالقرب والحفظ المُعَرَّى من الاسم لبيانات الموقع.
ما الذي يُرمِّزه geohash فعلًا
يُشابك geohash بتات خطّي الطول والعرض ثم يُرمِّز الناتج إلى base32 بأبجدية مخصَّصة (0-9 و b-z دون a/i/l/o). يحمل كل حرف خمس بتات دقّة، ويتناوب التحسين بين الطول والعرض. الناتج سلسلة قصيرة آمنة في الـ URL، وعلاقة البادئات فيها تعكس مباشرةً علاقة الاحتواء المكاني: أيّ geohash يبدأ بـ "dr5ru" يقع داخل الخلية المسمّاة dr5ru.
الدقّة وحجم الخلية
عند الدقّة 1 يُقسَّم العالم إلى 32 خلية يبلغ عرضها نحو 5,000 كم. تناسب الدقّة 5 (نحو 4.9 كم × 4.9 كم بالقرب من خط الاستواء) تجميع البيانات على مستوى الحيّ. أما الدقّة 9 (نحو 5 م × 5 م) فهي المناسبة لمبنى منفرد. تصل الدقّة 12 إلى نحو 4 سم، وهي نادرة الاستعمال خارج أعمال المساحة. تتقلّص الخلايا كلما اقتربنا من القطبين.
لماذا نستخدم geohash
تُفهرَس بادئات السلاسل بكفاءة عالية في PostgreSQL و Redis و DynamoDB و SQLite. لاكتشاف النقاط ضمن 5 كم من هدف ما، احسب geohash الهدف على الدقّة 5 ثم ابحث عن البادئات المتطابقة — فهذا أرخص بكثير من استعلامات الدائرة الكبرى. ظاهرة حافة الخلية حقيقية لذا تُضيف المعالجة الإنتاجية الخلايا الثمانية المجاورة كذلك. يسبق geohash كلًّا من S2 و H3 ولا يزال أبسطها للأعباء الساخنة في البحث بالقرب.
الأسئلة الشائعة
- لماذا تغطّي الدقّة 5 مدينة بأكملها؟
- يحمل كل حرف 5 بتات؛ فتعطي الدقّة 5 نحو 25 بتًا وخلايا 4.9 كم × 4.9 كم قرب الاستواء. تتسع الخلية لمدينة بعرض بضعة كيلومترات، ولذلك تجمّع كثير من تطبيقات النقل والتوصيل السائقين والطلبات في geohash بدقّة 5 لتسريع المطابقة.
- هل يدل اختلاف geohash لنقطتين متجاورتين على خطأ؟
- ليس خطأً، بل خاصية شبكية. النقاط على جانبَي حدود الخلية لا تتشارك بادئة حتى لو ابتعدت بمتر واحد. تستعلم البيئات الإنتاجية عن hash الهدف مع الخلايا الثمانية المجاورة (حلقة 3×3).
- ما الأبجدية التي يستخدمها geohash؟
- 0-9 و b-z ما عدا a و i و l و o، أي 32 حرفًا. يُستبعد الأربعة لتفادي الالتباس مع 0/1 في الخطوط منخفضة التباين، وهذه أبجدية خاصة في base32 وليست base32 المعتمدة في RFC 4648.
- كيف يقارَن geohash بـ S2 و H3؟
- يعدّ geohash الأبسط والأقدم. يستخدم S2 (إسقاط مكعب على كرة) و H3 (شبكة سداسية) شبكات أفضل في احتواء تشوّه القطبين، لكنهما يتطلبان كودًا أكبر. يكفي geohash لأغلب أعمال القرب على مستوى التطبيق، أما الملاحة على مقاييس كوكبية فقد تكون S2 و H3 مجدِيتين.
- هل يمكن فهرسة geohash بأمان في PostgreSQL؟
- نعم. اجعل العمود text واربط به فهرس btree، عندئذٍ تصبح البحوث بالبادئة (LIKE 'dr5ru%') سريعة جدًا. للاستعلامات المكانية يمكن إكمال ذلك بـ PostGIS، أما الحالات الشائعة فيكفيها البادئة.
- هل تسجّل Toova الإحداثيات التي أُرمِّزها؟
- لا. يجري الترميز وفك الترميز داخل JavaScript الصفحة، فلا تصل الإحداثيات ولا الـ hash الناتج إلى خادم Toova إطلاقًا.