Calcule la distancia entre dos puntos en la superficie de la Tierra usando [la fórmula del gran círculo](https://en.wikipedia.org/wiki/Great-circle_distance).
Comprueba si el punto pertenece al polígono en el plano.
``` sql
pointInPolygon((x, y), [(a, b), (c, d) ...], ...)
```
**Valores de entrada**
-`(x, y)` — Coordenadas de un punto en el plano. Tipo de datos — [Tupla](../../data_types/tuple.md) — Una tupla de dos números.
-`[(a, b), (c, d) ...]` — Vértices de polígono. Tipo de datos — [Matriz](../../data_types/array.md). Cada vértice está representado por un par de coordenadas `(a, b)`. Los vértices deben especificarse en sentido horario o antihorario. El número mínimo de vértices es 3. El polígono debe ser constante.
- La función también admite polígonos con agujeros (secciones recortadas). En este caso, agregue polígonos que definan las secciones recortadas utilizando argumentos adicionales de la función. La función no admite polígonos no simplemente conectados.
**Valores devueltos**
`1` si el punto está dentro del polígono, `0` si no lo es.
Si el punto está en el límite del polígono, la función puede devolver 0 o 1.
**Ejemplo**
``` sql
SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
```
``` text
┌─res─┐
│ 1 │
└─────┘
```
## geohashEncode {#geohashencode}
Codifica la latitud y la longitud como una cadena geohash, consulte (http://geohash.org/, https://en.wikipedia.org/wiki/Geohash).
``` sql
geohashEncode(longitude, latitude, [precision])
```
**Valores de entrada**
- longitud - longitud parte de la coordenada que desea codificar. Flotando en el rango`[-180°, 180°]`
- latitude : parte de latitud de la coordenada que desea codificar. Flotando en el rango `[-90°, 90°]`
- precision - Opcional, longitud de la cadena codificada resultante, por defecto es `12`. Entero en el rango `[1, 12]`. Cualquier valor menor que `1` o mayor que `12` se convierte silenciosamente a `12`.
**Valores devueltos**
- alfanumérico `String` de coordenadas codificadas (se utiliza la versión modificada del alfabeto de codificación base32).
**Ejemplo**
``` sql
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res
```
``` text
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘
```
## geohashDecode {#geohashdecode}
Decodifica cualquier cadena codificada por geohash en longitud y latitud.
- (longitud, latitud) - 2-tupla de `Float64` valores de longitud y latitud.
**Ejemplo**
``` sql
SELECT geohashDecode('ezs42') AS res
```
``` text
┌─res─────────────────────────────┐
│ (-5.60302734375,42.60498046875) │
└─────────────────────────────────┘
```
## geoToH3 {#geotoh3}
Devoluciones [Hombre](https://uber.github.io/h3/#/documentation/overview/introduction) índice de punto `(lon, lat)` con la resolución especificada.
[Hombre](https://uber.github.io/h3/#/documentation/overview/introduction) es un sistema de indexación geográfica donde la superficie de la Tierra se divide en incluso azulejos hexagonales. Este sistema es jerárquico, es decir, cada hexágono en el nivel superior se puede dividir en siete incluso pero más pequeños y así sucesivamente.
Este índice se utiliza principalmente para ubicaciones de bucketing y otras manipulaciones geoespaciales.
-`resolution` — Resolución del índice. Gama: `[0, 15]`. Tipo: [UInt8](../../data_types/int_uint.md).
**Valores devueltos**
- Número de índice hexagonal.
- 0 en caso de error.
Tipo: `UInt64`.
**Ejemplo**
Consulta:
``` sql
SELECT geoToH3(37.79506683, 55.71290588, 15) as h3Index
```
Resultado:
``` text
┌────────────h3Index─┐
│ 644325524701193974 │
└────────────────────┘
```
## Información adicional {#geohashesinbox}
Devuelve una matriz de cadenas codificadas por geohash de precisión dada que caen dentro e intersecan los límites de un cuadro dado, básicamente una cuadrícula 2D aplanada en una matriz.
**Valores de entrada**
- longitude\_min - longitud mínima, valor flotante en el rango `[-180°, 180°]`
- latitude\_min - latitud mínima, valor flotante en el rango `[-90°, 90°]`
- longitude\_max - longitud máxima, valor flotante en el rango `[-180°, 180°]`
- latitude\_max - latitud máxima, valor flotante en el rango `[-90°, 90°]`