mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 09:32:01 +00:00
511 lines
14 KiB
Markdown
511 lines
14 KiB
Markdown
---
|
|
machine_translated: true
|
|
machine_translated_rev: f865c9653f9df092694258e0ccdd733c339112f5
|
|
toc_priority: 62
|
|
toc_title: "Travailler avec des coordonn\xE9es g\xE9ographiques"
|
|
---
|
|
|
|
# Fonctions pour travailler avec des coordonnées géographiques {#functions-for-working-with-geographical-coordinates}
|
|
|
|
## greatCircleDistance {#greatcircledistance}
|
|
|
|
Calculer la distance entre deux points sur la surface de la Terre en utilisant [la formule du grand cercle](https://en.wikipedia.org/wiki/Great-circle_distance).
|
|
|
|
``` sql
|
|
greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
|
|
```
|
|
|
|
**Les paramètres d'entrée**
|
|
|
|
- `lon1Deg` — Longitude of the first point in degrees. Range: `[-180°, 180°]`.
|
|
- `lat1Deg` — Latitude of the first point in degrees. Range: `[-90°, 90°]`.
|
|
- `lon2Deg` — Longitude of the second point in degrees. Range: `[-180°, 180°]`.
|
|
- `lat2Deg` — Latitude of the second point in degrees. Range: `[-90°, 90°]`.
|
|
|
|
Les valeurs positives correspondent à la latitude nord et à la longitude Est, et les valeurs négatives à la latitude Sud et à la longitude ouest.
|
|
|
|
**Valeur renvoyée**
|
|
|
|
La distance entre deux points sur la surface de la Terre, en mètres.
|
|
|
|
Génère une exception lorsque les valeurs des paramètres d'entrée se situent en dehors de la plage.
|
|
|
|
**Exemple**
|
|
|
|
``` sql
|
|
SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)
|
|
```
|
|
|
|
``` text
|
|
┌─greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)─┐
|
|
│ 14132374.194975413 │
|
|
└───────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## pointInEllipses {#pointinellipses}
|
|
|
|
Vérifie si le point appartient à au moins une des ellipses.
|
|
Coordonnées géométriques sont dans le système de coordonnées Cartésiennes.
|
|
|
|
``` sql
|
|
pointInEllipses(x, y, x₀, y₀, a₀, b₀,...,xₙ, yₙ, aₙ, bₙ)
|
|
```
|
|
|
|
**Les paramètres d'entrée**
|
|
|
|
- `x, y` — Coordinates of a point on the plane.
|
|
- `xᵢ, yᵢ` — Coordinates of the center of the `i`-ème points de suspension.
|
|
- `aᵢ, bᵢ` — Axes of the `i`- e ellipse en unités de coordonnées x, Y.
|
|
|
|
Les paramètres d'entrée doivent être `2+4⋅n`, où `n` est le nombre de points de suspension.
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
`1` si le point est à l'intérieur d'au moins l'un des ellipses; `0`si elle ne l'est pas.
|
|
|
|
**Exemple**
|
|
|
|
``` sql
|
|
SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)
|
|
```
|
|
|
|
``` text
|
|
┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐
|
|
│ 1 │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## pointtinpolygon {#pointinpolygon}
|
|
|
|
Vérifie si le point appartient au polygone sur l'avion.
|
|
|
|
``` sql
|
|
pointInPolygon((x, y), [(a, b), (c, d) ...], ...)
|
|
```
|
|
|
|
**Les valeurs d'entrée**
|
|
|
|
- `(x, y)` — Coordinates of a point on the plane. Data type — [Tuple](../../sql_reference/data_types/tuple.md) — A tuple of two numbers.
|
|
- `[(a, b), (c, d) ...]` — Polygon vertices. Data type — [Tableau](../../sql_reference/data_types/array.md). Chaque sommet est représenté par une paire de coordonnées `(a, b)`. Les sommets doivent être spécifiés dans le sens horaire ou antihoraire. Le nombre minimum de sommets est 3. Le polygone doit être constante.
|
|
- La fonction prend également en charge les polygones avec des trous (découper des sections). Dans ce cas, ajoutez des polygones qui définissent les sections découpées en utilisant des arguments supplémentaires de la fonction. La fonction ne prend pas en charge les polygones non simplement connectés.
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
`1` si le point est à l'intérieur du polygone, `0` si elle ne l'est pas.
|
|
Si le point est sur la limite du polygone, la fonction peut renvoyer 0 ou 1.
|
|
|
|
**Exemple**
|
|
|
|
``` sql
|
|
SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
|
|
```
|
|
|
|
``` text
|
|
┌─res─┐
|
|
│ 1 │
|
|
└─────┘
|
|
```
|
|
|
|
## geohashEncode {#geohashencode}
|
|
|
|
Encode la latitude et la longitude en tant que chaîne geohash, voir (http://geohash.org/, https://en.wikipedia.org/wiki/Geohash).
|
|
|
|
``` sql
|
|
geohashEncode(longitude, latitude, [precision])
|
|
```
|
|
|
|
**Les valeurs d'entrée**
|
|
|
|
- longitude longitude partie de la coordonnée que vous souhaitez encoder. Flottant dans la gamme`[-180°, 180°]`
|
|
- latitude latitude partie de la coordonnée que vous souhaitez encoder. Flottant dans la gamme `[-90°, 90°]`
|
|
- precision-facultatif, longueur de la chaîne codée résultante, par défaut `12`. Entier dans la gamme `[1, 12]`. Toute valeur inférieure à `1` ou supérieure à `12` silencieusement converti à `12`.
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- alphanumérique `String` de coordonnées codées (la version modifiée de l'alphabet de codage base32 est utilisée).
|
|
|
|
**Exemple**
|
|
|
|
``` sql
|
|
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res
|
|
```
|
|
|
|
``` text
|
|
┌─res──────────┐
|
|
│ ezs42d000000 │
|
|
└──────────────┘
|
|
```
|
|
|
|
## geohashDecode {#geohashdecode}
|
|
|
|
Décode toute chaîne codée geohash en longitude et latitude.
|
|
|
|
**Les valeurs d'entrée**
|
|
|
|
- chaîne codée-chaîne codée geohash.
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- (longitude, latitude) - 2-n-uplet de `Float64` les valeurs de longitude et de latitude.
|
|
|
|
**Exemple**
|
|
|
|
``` sql
|
|
SELECT geohashDecode('ezs42') AS res
|
|
```
|
|
|
|
``` text
|
|
┌─res─────────────────────────────┐
|
|
│ (-5.60302734375,42.60498046875) │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
## geoToH3 {#geotoh3}
|
|
|
|
Retourner [H3](https://uber.github.io/h3/#/documentation/overview/introduction) point d'indice `(lon, lat)` avec une résolution spécifiée.
|
|
|
|
[H3](https://uber.github.io/h3/#/documentation/overview/introduction) est un système d'indexation géographique où la surface de la Terre divisée en carreaux hexagonaux même. Ce système est hiérarchique, c'est-à-dire que chaque hexagone au niveau supérieur peut être divisé en sept, même mais plus petits, etc.
|
|
|
|
Cet indice est principalement utilisé pour les emplacements de bucketing et d'autres manipulations géospatiales.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
geoToH3(lon, lat, resolution)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `lon` — Longitude. Type: [Float64](../../sql_reference/data_types/float.md).
|
|
- `lat` — Latitude. Type: [Float64](../../sql_reference/data_types/float.md).
|
|
- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Numéro d'indice hexagonal.
|
|
- 0 en cas d'erreur.
|
|
|
|
Type: `UInt64`.
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT geoToH3(37.79506683, 55.71290588, 15) as h3Index
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌────────────h3Index─┐
|
|
│ 644325524701193974 │
|
|
└────────────────────┘
|
|
```
|
|
|
|
## geohashesInBox {#geohashesinbox}
|
|
|
|
Renvoie un tableau de chaînes codées geohash de précision donnée qui tombent à l'intérieur et croisent les limites d'une boîte donnée, essentiellement une grille 2D aplatie en tableau.
|
|
|
|
**Les valeurs d'entrée**
|
|
|
|
- longitude\_min-longitude min, valeur flottante dans la plage `[-180°, 180°]`
|
|
- latitude\_min-latitude min, valeur flottante dans la plage `[-90°, 90°]`
|
|
- longitude\_max-longitude maximale, valeur flottante dans la plage `[-180°, 180°]`
|
|
- latitude\_max-latitude maximale, valeur flottante dans la plage `[-90°, 90°]`
|
|
- précision - geohash précision, `UInt8` dans la gamme `[1, 12]`
|
|
|
|
Veuillez noter que tous les paramètres de coordonnées doit être du même type: soit `Float32` ou `Float64`.
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- gamme de précision de longues chaînes de geohash-boîtes couvrant la zone, vous ne devriez pas compter sur l'ordre des éléments.
|
|
- \[\] - tableau vide si *min* les valeurs de *latitude* et *longitude* ne sont pas moins de correspondant *Max* valeur.
|
|
|
|
Veuillez noter que la fonction lancera une exception si le tableau résultant a plus de 10'000'000 éléments.
|
|
|
|
**Exemple**
|
|
|
|
``` sql
|
|
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos
|
|
```
|
|
|
|
``` text
|
|
┌─thasos──────────────────────────────────────┐
|
|
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
|
|
└─────────────────────────────────────────────┘
|
|
```
|
|
|
|
## h3GetBaseCell {#h3getbasecell}
|
|
|
|
Renvoie le numéro de cellule de base de l'index.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
h3GetBaseCell(index)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Numéro de cellule de base hexagonale. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3GetBaseCell(612916788725809151) as basecell
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─basecell─┐
|
|
│ 12 │
|
|
└──────────┘
|
|
```
|
|
|
|
## h3HexAreaM2 {#h3hexaream2}
|
|
|
|
Surface hexagonale Moyenne en mètres carrés à la résolution donnée.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
h3HexAreaM2(resolution)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Area in m². Type: [Float64](../../sql_reference/data_types/float.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3HexAreaM2(13) as area
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─area─┐
|
|
│ 43.9 │
|
|
└──────┘
|
|
```
|
|
|
|
## h3IndexesAreNeighbors {#h3indexesareneighbors}
|
|
|
|
Renvoie si les H3Indexes fournis sont voisins ou non.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
h3IndexesAreNeighbors(index1, index2)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index1` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
- `index2` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Retourner `1` si les index sont voisins, `0` autrement. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3IndexesAreNeighbors(617420388351344639, 617420388352655359) AS n
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─n─┐
|
|
│ 1 │
|
|
└───┘
|
|
```
|
|
|
|
## h3enfants {#h3tochildren}
|
|
|
|
Retourne un tableau avec les index enfants de l'index donné.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
h3ToChildren(index, resolution)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Tableau avec les index H3 enfants. Tableau de type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3ToChildren(599405990164561919, 6) AS children
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─children───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ [603909588852408319,603909588986626047,603909589120843775,603909589255061503,603909589389279231,603909589523496959,603909589657714687] │
|
|
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## h3ToParent {#h3toparent}
|
|
|
|
Renvoie l'index parent (plus grossier) contenant l'index donné.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
h3ToParent(index, resolution)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Parent H3 index. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3ToParent(599405990164561919, 3) as parent
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─────────────parent─┐
|
|
│ 590398848891879423 │
|
|
└────────────────────┘
|
|
```
|
|
|
|
## h3ToString {#h3tostring}
|
|
|
|
Convertit la représentation H3Index de l'index en représentation de chaîne.
|
|
|
|
``` sql
|
|
h3ToString(index)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Représentation en chaîne de l'index H3. Type: [Chaîne](../../sql_reference/data_types/string.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3ToString(617420388352917503) as h3_string
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─h3_string───────┐
|
|
│ 89184926cdbffff │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## stringToH3 {#stringtoh3}
|
|
|
|
Convertit la représentation de chaîne en représentation H3Index (UInt64).
|
|
|
|
``` sql
|
|
stringToH3(index_str)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index_str` — String representation of the H3 index. Type: [Chaîne](../../sql_reference/data_types/string.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- Numéro d'indice hexagonal. Renvoie 0 en cas d'erreur. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT stringToH3('89184926cc3ffff') as index
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌──────────────index─┐
|
|
│ 617420388351344639 │
|
|
└────────────────────┘
|
|
```
|
|
|
|
## h3grésolution {#h3getresolution}
|
|
|
|
Retourne la résolution de l'index.
|
|
|
|
**Syntaxe**
|
|
|
|
``` sql
|
|
h3GetResolution(index)
|
|
```
|
|
|
|
**Paramètre**
|
|
|
|
- `index` — Hexagon index number. Type: [UInt64](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Valeurs renvoyées**
|
|
|
|
- L'indice de la résolution. Gamme: `[0, 15]`. Type: [UInt8](../../sql_reference/data_types/int_uint.md).
|
|
|
|
**Exemple**
|
|
|
|
Requête:
|
|
|
|
``` sql
|
|
SELECT h3GetResolution(617420388352917503) as res
|
|
```
|
|
|
|
Résultat:
|
|
|
|
``` text
|
|
┌─res─┐
|
|
│ 9 │
|
|
└─────┘
|
|
```
|
|
|
|
[Article Original](https://clickhouse.tech/docs/en/query_language/functions/geo/) <!--hide-->
|