ClickHouse/docs/ru/sql-reference/functions/geo/geohash.md
olgarev e2287959a8
DOCSUP-1585: Edit and sync geo functions (#12584)
* Geo functions - en/ru sync.

* Fixed bug with levels.

* Apply suggestions from code review

Co-authored-by: Ivan Blinkov <github@blinkov.ru>
Co-authored-by: BayoNet <da-daos@yandex.ru>

* Geo functions splitted into 3 files.

* Links fixed.

* Link fixed.

* Anchor fixed.

* Add into TOC.

* Temporarily removed anchors.

* Working on TOC.

* Links to original article.

* TOC and links in English and Russian.

* TOC in English, content in index.

* Link fixed.

* TOC in Russian, with content in index file.

* Added index file to geo functions

* fixed links in ru

Co-authored-by: Olga Revyakina <revolg@yandex-team.ru>
Co-authored-by: Ivan Blinkov <github@blinkov.ru>
Co-authored-by: BayoNet <da-daos@yandex.ru>
Co-authored-by: Sergei Shtykov <bayonet@yandex-team.ru>
2020-07-28 10:57:28 +03:00

5.9 KiB
Raw Blame History

toc_title
Geohash

Функции для работы с системой 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.

!!! info "Замечание" Все передаваемые координаты должны быть одного и того же типа: либо Float32, либо Float64.

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

  • Массив строк, описывающих участки, покрывающие заданный участок. Длина каждой строки соответствует точности geohash. Порядок строк — произвольный.

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

!!! info "Замечание" Если возвращаемый массив содержит свыше 10 000 000 элементов, функция сгенерирует исключение.

Пример

Запрос:

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

Результат:

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

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