Функции для работы с системой Geohash 

Geohash — это система геокодирования, которая делит поверхность Земли на участки в виде "решетки", и каждую ячейку решетки кодирует в виде строки из букв и цифр. Система поддерживает иерархию (вложенность) ячеек, поэтому чем точнее определена геопозиция, тем длиннее строка с кодом соответствующей ячейки.

Для ручного преобразования географических координат в строку geohash можно использовать сайт geohash.org.

geohashEncode 

Кодирует широту и долготу в строку geohash.

geohashEncode(longitude, latitude, [precision])

Входные значения

  • longitude — долгота. Диапазон — [-180°, 180°].
  • latitude — широта. Диапазон — [-90°, 90°].
  • precision — длина результирующей строки, по умолчанию 12. Опционально. Целое число в диапазоне [1, 12]. Любое значение меньше, чем 1 или больше 12 автоматически преобразуются в 12.

Возвращаемые значения

  • Строка с координатой, закодированной модифицированной версией алфавита base32.

Пример

SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘

geohashDecode 

Декодирует любую строку, закодированную в geohash, на долготу и широту.

geohashDecode(geohash_string)

Входные значения

  • geohash_string — строка, содержащая geohash.

Возвращаемые значения

  • (longitude, latitude) — широта и долгота. Кортеж из двух значений типа 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.

Возвращаемые значения

  • Массив строк, описывающих участки, покрывающие заданный участок. Длина каждой строки соответствует точности geohash. Порядок строк — произвольный.
  • [] - Если переданные минимальные значения широты и долготы больше соответствующих максимальных значений, функция возвращает пустой массив.

Тип данных: Array(String).

Пример

Запрос:

SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos

Результат:

┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘

Оригинальная статья

Rating: 4 - 1 votes

Was this content helpful?
★★★★☆