الانتقال إلى المحتوى الرئيسي

Geohash

Geohash هو نظام ترميز جغرافي يقسّم سطح الأرض إلى خلايا شبكية ويشفّر كل خلية إلى سلسلة قصيرة من الأحرف والأرقام. وهو بنية بيانات هرمية، لذا كلما زاد طول سلسلة geohash، زادت دقة الموقع الجغرافي. إذا كنت بحاجة إلى تحويل الإحداثيات الجغرافية يدويًا إلى سلاسل geohash، يمكنك استخدام geohash.org

geohashEncode

يُشفِّر خطَّي العرض والطول في سلسلة geohash. الصياغة
geohashEncode(longitude, latitude, [precision])
قيم الإدخال
  • longitude — جزء خط الطول من الإحداثي الذي تريد ترميزه. قيمة فاصلة عائمة ضمن النطاق [-180°, 180°]. Float.
  • latitude — جزء خط العرض من الإحداثي الذي تريد ترميزه. قيمة فاصلة عائمة ضمن النطاق [-90°, 90°]. Float.
  • precision (اختياري) — طول السلسلة المُرمَّزة الناتجة. القيمة الافتراضية هي 12. عدد صحيح ضمن النطاق [1, 12]. Int8.
  • يجب أن تكون جميع مَعلمات الإحداثيات من النوع نفسه: إما Float32 أو Float64.
  • بالنسبة إلى المَعلمة precision، فإن أي قيمة أقل من 1 أو أكبر من 12 تُحوَّل تلقائيًا إلى 12.
القيم المُعادة
  • سلسلة أبجدية رقمية تمثل الإحداثي المُرمَّز (تُستخدم نسخة معدّلة من أبجدية ترميز base32). String.
مثال
Query
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res;
Response
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘

geohashDecode

يفكّ ترميز أي سلسلة مُرمَّزة باستخدام geohash إلى إحداثيي خط الطول وخط العرض. الصياغة
geohashDecode(hash_str)
قيم الإدخال
  • hash_str — سلسلة مرمّزة بنظام Geohash.
القيم المُعادة
  • Tuple (longitude, latitude) من قيم Float64 تمثل خط الطول وخط العرض. Tuple(Float64)
مثال
SELECT geohashDecode('ezs42') AS res;
┌─res─────────────────────────────┐
│ (-5.60302734375,42.60498046875) │
└─────────────────────────────────┘

geohashesInBox

يعيد مصفوفة من السلاسل المُرمَّزة باستخدام geohash وبالدقة المحددة، تقع داخل حدود المربع المحدد وتتقاطع معها، وهي في الأساس شبكة ثنائية الأبعاد مُسطَّحة إلى مصفوفة. الصياغة
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)
الوسيطات
  • longitude_min — الحد الأدنى لخط الطول. النطاق: [-180°, 180°]. Float.
  • latitude_min — الحد الأدنى لخط العرض. النطاق: [-90°, 90°]. Float.
  • longitude_max — الحد الأقصى لخط الطول. النطاق: [-180°, 180°]. Float.
  • latitude_max — الحد الأقصى لخط العرض. النطاق: [-90°, 90°]. Float.
  • precision — دقة geohash. النطاق: [1, 12]. UInt8.
يجب أن تكون جميع معلمات الإحداثيات من النوع نفسه: إما Float32 أو Float64.
القيم المعادة
  • مصفوفة من سلاسل geohash بطول precision تغطي المنطقة المحددة، ولا ينبغي الاعتماد على ترتيب العناصر. Array(String).
  • [] - مصفوفة فارغة إذا لم تكن القيم الدنيا لخط العرض وخط الطول أقل من القيم القصوى المناظرة لها.
تُطلق الدالة استثناءً إذا تجاوزت المصفوفة الناتجة 10’000’000 عنصر.
مثال
Query
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos;
Response
┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘
آخر تعديل في ٢٩ يونيو ٢٠٢٦