mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-14 18:32:29 +00:00
9ec78855cd
* DOCSUP-2806: Add meta intro. * DOCSUP-2806: Update meta intro. * DOCSUP-2806: Fix meta. * DOCSUP-2806: Add quotes for meta headers. * DOCSUP-2806: Remove quotes from meta headers. * DOCSUP-2806: Add meta headers. * DOCSUP-2806: Fix quotes in meta headers. * DOCSUP-2806: Update meta headers. * DOCSUP-2806: Fix link to nowhere in EN. * DOCSUP-2806: Fix link (settings to tune) * DOCSUP-2806: Fix links. * DOCSUP-2806:Fix links EN * DOCSUP-2806: Fix build errors. * DOCSUP-2806: Fix meta intro. * DOCSUP-2806: Fix toc_priority in examples datasets TOC. * DOCSUP-2806: Fix items order in toc. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc order. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc index in create * DOCSUP-2806: Fix toc order in create. Co-authored-by: romanzhukov <romanzhukov@yandex-team.ru> Co-authored-by: alexey-milovidov <milovidov@yandex-team.ru>
116 lines
6.1 KiB
Markdown
116 lines
6.1 KiB
Markdown
---
|
||
toc_title: "\u0424\u0443\u043d\u043a\u0446\u0438\u0438\u0020\u0434\u043b\u044f\u0020\u0440\u0430\u0431\u043e\u0442\u044b\u0020\u0441\u0020\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439\u0020\u0047\u0065\u006f\u0068\u0061\u0073\u0068"
|
||
---
|
||
|
||
# Функции для работы с системой 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'] │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
[Оригинальная статья](https://clickhouse.tech/docs/ru/sql-reference/functions/geo/geohash) <!--hide-->
|