متوفر أيضًا بلغات أخرى: English · Español · Português · Français
محوّل geohash
رمّز وفكّ رموز geohash، وانظر الخلية التي يسمّيها كل واحد، واحصل على الخلايا الثماني الجارة التي يحتاجها البحث بالقرب.
ما geohash؟
يكتب geohash خط العرض وخط الطول سلسلةً قصيرة واحدة، مثل u09tunquc. وطريقته أن يشطر العالم نصفين مرةً بعد مرة: أفي النصف الشرقي النقطةُ أم في الغربي، أفي الشمالي أم في الجنوبي، بالتناوب بين المحورين. وكل جواب بتٌ، وتُجمع البتات خمسةً خمسة، ويصير كل تجمّع محرفًا من أبجدية من اثنين وثلاثين.
ولأن الشطر تدريجي، فالتجزيء الأقصر يسمّي صندوقًا أكبر. فأربعة محارف تغطي نحو عشرين كيلومترًا، وتسعة تغطي أمتارًا قليلة. والأهم: أن اقتطاع التجزيء يعطي بالضبط تجزيء المكان نفسه بتلك الدقة الأدنى. فـu09tunquc يقع دائمًا داخل u09tun، وذاك يقع دائمًا داخل u09.
وهذه الخاصية الأخيرة هي سبب استعمال geohash أصلًا. فهي تجعل فهرس نصوص عاديًا قادرًا على الإجابة عن سؤال مكاني: لتجد ما قرب نقطة، ابحث عن الصفوف التي يبدأ geohash فيها بالبادئة نفسها. فلا قاعدة بيانات مكانية ولا فهرس خاص، بل عمود نصي واستعلام LIKE. وتترك الأبجدية a وi وl وo للسبب نفسه الذي يتركها له الرمز البريدي: فهي المحارف التي يخطئ الناس في قراءتها.
كيفية الاستخدام
- أدخل إحداثيات، أو الصق تجزيئًا. الاتجاهان يعملان. ومن الأماكن القطب الشمالي، وهو حيث تنكسر حسابات الجارات عادةً.
- اختر طولًا. تعرض اللوحة الخلية التي يسمّيها التجزيء وحدودها وحجمها الحقيقي بالأمتار عند ذلك العرض؛ فالخلايا تضيق نحو القطبين بينما لا يتغير ارتفاعها.
- خذ الجارات معك. تعرض الشبكة الخلايا الثماني الملاصقة لخليتك. والبحث بالقرب يحتاج التسع، والقسم التالي هو القياس الذي يشرح السبب.
حيلة البادئة تصح في اتجاه واحد فقط
التجزيئان اللذان يشتركان في بادئة متقاربان حقًا، وهذا الاتجاه يضمنه البناء نفسه، وهو ما يجعل الطريقة تعمل. أما العكس فليس صحيحًا، وهنا تفشل عمليات البحث بالقرب باستعمال geohash في صمت. فقد يبعد موضعان مترًا واحدًا ولا يشتركان في أي بادئة، إن مرّ حدُّ خلية بينهما.
والمعتاد أن تُروى الصيغة المثيرة: مترٌ واحد، ولا شيء مشترك. وهي صحيحة ونادرة كذلك: فبالقياس على أزواج عشوائية، لا يشترك موضعان على بعد مئة متر في شيء نحو 0.01% من المرات، أي واحد من عشرة آلاف. وذكر هذا الرقم يجعل المشكلة تبدو حالةً حدّيةً تُهمَل.
أما الكلفة الحقيقية فأكبر بكثير ومنهجية تمامًا. فقد قسنا ما يجده البحث في خلية واحدة فعلًا: من المواضع التي تقع حقًا دون ثلاثمئة متر، يعيد استعلام ببادئة من ستة محارف 68.9% منها. وبسبعة محارف وستين مترًا يعيد 65.8%. وبخمسة محارف وألف وخمسمئة متر يعيد 72.6%. وفي كل الحالات يغيب نحو ثلث الجارات لأنها خلف حدّ، لا واحدة من عشرة آلاف بل واحدة من ثلاث.
والعلاج هو الشبكة في هذه الصفحة. فابحث في الخلية وجاراتها الثماني يعد القياس نفسه بأكثر من 99%. ولهذا يحسب كل استعمال جادّ لـgeohash في القرب الجاراتِ، ولهذا فأداةٌ تكتفي بالترميز تعطيك نصف ما تحتاج.
حدود صريحة، وكيف جرى التحقق
الخلايا ليست مربعة ولا متساوية الحجم. فخلية geohash مستطيل بالدرجات، فيضيق عرضها بالأمتار كلما ابتعدت عن خط الاستواء بينما لا يتغير ارتفاعها. وتعطي الأداة الاثنين عند العرض الذي تنظر إليه بدل رقم عالمي واحد، وفي العروض العالية يكون الفرق هائلًا.
والجارات تُحسب هندسيًا: يُفكّ رمز الخلية إلى حدودها، ثم يُخطى خلية كاملة إلى الخارج، ثم يُعاد الترميز. وذلك قابل للبرهان من المرمِّز نفسه بدل نقله عن جداول الحدود التقليدية بالأساس 32، ويجعل الأطراف قابلةً للاختبار. فشمال الصف الأعلى وجنوب الصف الأدنى لا جارة فيهما حقًا، ولا تعيد الأداة شيئًا بدل الالتفاف إلى الجهة الأخرى من الكوكب. أما الشرق والغرب فيلتفّان، لأن خط الطول يلتفّ.
وفحوص الصواب بنيوية لا جدولَ أجوبةٍ متوقعة، إذ ليس لـgeohash وثيقة معيارية واحدة. فخمسة آلاف موضع عشوائي تمر بالترميز وفكّه وتقع داخل الخلية التي يسمّيها تجزيئها هي؛ واقتطاع تجزيء يعادل الترميز بتلك الدقة، على ألفي موضع وبكل الأطوال؛ وعلاقة الجوار متناظرة، فالخلية شرق خليتي تجعلني جارتها الغربية. والأرقام أعلاه تعيد طقم الاختبارات حسابها بدل التسليم بها ثوابتَ.
وما لا تفعله: لن تخبرك بالمسافة بين تجزيئين، لأن اشتراك البادئة يحدّها حدًّا فضفاضًا فحسب، ولا ترسم خريطة، إذ يعني ذلك جلب بلاطات من خادم غيرنا وإخباره أين تنظر.
لماذا هي مجانية؟
هذه إزاحات بتات على عددين تجري داخل متصفحك. فلا خادم، ولا بلاطة خريطة، ولا حساب.
ولا يُرفع شيء مما تكتبه ولا يُخزَّن ولا يُسجَّل، ويحسن قول ذلك صراحةً لأن المُدخَل موقع.