mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 21:24:28 +00:00
116 lines
5.9 KiB
Markdown
116 lines
5.9 KiB
Markdown
---
|
||
toc_title: "Функции для работы с системой Geohash"
|
||
---
|
||
|
||
# Функции для работы с системой Geohash {#geohash}
|
||
|
||
[Geohash](https://en.wikipedia.org/wiki/Geohash) — это система геокодирования, которая делит поверхность Земли на участки в виде "решетки", и каждую ячейку решетки кодирует в виде строки из букв и цифр. Система поддерживает иерархию (вложенность) ячеек, поэтому чем точнее определена геопозиция, тем длиннее строка с кодом соответствующей ячейки.
|
||
|
||
Для ручного преобразования географических координат в строку geohash можно использовать сайт [geohash.org](http://geohash.org/).
|
||
|
||
## geohashEncode {#geohashencode}
|
||
|
||
Кодирует широту и долготу в строку [geohash](#geohash).
|
||
|
||
``` sql
|
||
geohashEncode(longitude, latitude, [precision])
|
||
```
|
||
|
||
**Входные значения**
|
||
|
||
- longitude — долгота. Диапазон — `[-180°, 180°].`
|
||
- latitude — широта. Диапазон — `[-90°, 90°].`
|
||
- precision — длина результирующей строки, по умолчанию `12`. Опционально. Целое число в диапазоне `[1, 12]`. Любое значение меньше, чем `1` или больше `12` автоматически преобразуются в `12`.
|
||
|
||
**Возвращаемые значения**
|
||
|
||
- Строка с координатой, закодированной модифицированной версией алфавита base32.
|
||
|
||
**Пример**
|
||
|
||
``` sql
|
||
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res──────────┐
|
||
│ ezs42d000000 │
|
||
└──────────────┘
|
||
```
|
||
|
||
## geohashDecode {#geohashdecode}
|
||
|
||
Декодирует любую строку, закодированную в [geohash](#geohash), на долготу и широту.
|
||
|
||
``` sql
|
||
geohashDecode(geohash_string)
|
||
```
|
||
|
||
**Входные значения**
|
||
|
||
- `geohash_string` — строка, содержащая geohash.
|
||
|
||
**Возвращаемые значения**
|
||
|
||
- `(longitude, latitude)` — широта и долгота. Кортеж из двух значений типа `Float64`.
|
||
|
||
**Пример**
|
||
|
||
``` sql
|
||
SELECT geohashDecode('ezs42') AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────────────────────────────┐
|
||
│ (-5.60302734375,42.60498046875) │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
## geohashesInBox {#geohashesinbox}
|
||
|
||
Формирует массив участков, которые находятся внутри или пересекают границу заданного участка на поверхности. Каждый участок описывается строкой [geohash](#geohash) заданной точности.
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)
|
||
```
|
||
|
||
**Аргументы**
|
||
|
||
- `longitude_min` — минимальная долгота. Диапазон возможных значений: `[-180°, 180°]`. Тип данных: [Float](../../../sql-reference/data-types/float.md)).
|
||
- `latitude_min` — минимальная широта. Диапазон возможных значений: `[-90°, 90°]`. Тип данных: [Float](../../../sql-reference/data-types/float.md).
|
||
- `longitude_max` — максимальная долгота. Диапазон возможных значений: `[-180°, 180°]`. Тип данных: [Float](../../../sql-reference/data-types/float.md).
|
||
- `latitude_max` — максимальная широта. Диапазон возможных значений: `[-90°, 90°]`. Тип данных: [Float](../../../sql-reference/data-types/float.md).
|
||
- `precision` — точность geohash. Диапазон возможных значений: `[1, 12]`. Тип данных: [UInt8](../../../sql-reference/data-types/int-uint.md).
|
||
|
||
!!! info "Замечание"
|
||
Все передаваемые координаты должны быть одного и того же типа: либо `Float32`, либо `Float64`.
|
||
|
||
**Возвращаемые значения**
|
||
|
||
- Массив строк, описывающих участки, покрывающие заданный участок. Длина каждой строки соответствует точности geohash. Порядок строк — произвольный.
|
||
- \[\] - Если переданные минимальные значения широты и долготы больше соответствующих максимальных значений, функция возвращает пустой массив.
|
||
|
||
Тип данных: [Array](../../../sql-reference/data-types/array.md)([String](../../../sql-reference/data-types/string.md)).
|
||
|
||
!!! info "Замечание"
|
||
Если возвращаемый массив содержит свыше 10 000 000 элементов, функция сгенерирует исключение.
|
||
|
||
**Пример**
|
||
|
||
Запрос:
|
||
|
||
``` sql
|
||
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos;
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─thasos──────────────────────────────────────┐
|
||
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|