# 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).
-`(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.
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