# Funciones Geoespaciales

# greatCircleDistance

Calcula la distancia entre dos puntos en la superficie de la Tierra utilizando la fórmula del gran círculo.

greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

Parámetros de entrada

  • lon1Deg — Longitud del primer punto en grados. Rango: [-180°, 180°].
  • lat1Deg — Latitud del primer punto en grados. Rango: [-90°, 90°].
  • lon2Deg — Longitud del segundo punto en grados. Rango: [-180°, 180°].
  • lat2Deg — Latitud del segundo punto en grados. Rango: [-90°, 90°].
  • Los valores positivos corresponden a latitud norte y longitud este, y los valores negativos corresponden a latitud sur y longitud oeste.

Valor devuelto

  • La distancia entre dos puntos en la superficie de la Tierra, en metros.
  • Genera una excepción cuando los valores de los parámetros de entrada están fuera del rango.

Ejemplo

SELECT greatCircleDistance(55.755831, 37.617673, 55.755831, 37.617673) AS greatCircleDistance
┌─greatCircleDistance─┐
│                   0 │
└─────────────────────┘

# geoDistance

Similar a greatCircleDistance pero calcula la distancia en el elipsoide WGS-84 en lugar de la esfera. Esta es una aproximación más precisa del geoide de la Tierra. El rendimiento es el mismo que para greatCircleDistance (sin desventaja de rendimiento). Se recomienda utilizar geoDistance para calcular las distancias en la Tierra.

Nota técnica: para puntos lo suficientemente cercanos, calculamos la distancia utilizando una aproximación plana con la métrica en el plano tangente en el punto medio de las coordenadas.

geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

Parámetros de entrada

  • lon1Deg — Longitud del primer punto en grados. Rango: [-180°, 180°].
  • lat1Deg — Latitud del primer punto en grados. Rango: [-90°, 90°].
  • lon2Deg — Longitud del segundo punto en grados. Rango: [-180°, 180°].
  • lat2Deg — Latitud del segundo punto en grados. Rango: [-90°, 90°].
  • Los valores positivos corresponden a latitud norte y longitud este, y los valores negativos corresponden a latitud sur y longitud oeste.

Valor devuelto

  • La distancia entre dos puntos en la superficie de la Tierra, en metros.
  • Genera una excepción cuando los valores de los parámetros de entrada están fuera del rango.

Ejemplo

SELECT geoDistance(38.8976, 77.0366, 39.9496, 75.1503) AS geoDistance
┌─geoDistance─┐
│ 212458.73   │
└─────────────┘

# H3

Obtener un índice: https://wolf-h3-viewer.glitch.me (opens new window)

  • (8831aa5039fffff)16 = (613363270285262847)10

Verificar si es válido h3IsValid(h3index)

SELECT h3IsValid(613363270285262847) AS h3IsValid;
┌─h3IsValid─┐
│ 1         │
└───────────┘

Convertir índice H3 a longitud y latitud h3ToGeo(h3Index)

SELECT h3ToGeo(613363270285262847) AS coordinates;
┌─coordinates───────────────────────────┐
│(116.29523629955709,39.984633235997315)│
└───────────────────────────────────────┘

Convertir a arreglo de vértices h3ToGeoBoundary

SELECT h3ToGeoBoundary(613363270285262847) AS coordinates;
┌─coordinates──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(39.98791325592796,116.2925333574096),(39.98386803718472,116.29020686993137),(39.98058822646115,116.29290984546513),(39.98135339622932,116.297938782017),(39.98539816328819,116.30026548576008),(39.98867821224181,116.29756303675612)] │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

# h3IsValid

Verifica si el número es un índice H3 válido.

h3IsValid(h3index)

Parámetro

h3index — Número de índice hexagonal. Tipo: UInt64.

Valores devueltos

  • 1 — El número es un índice H3 válido.
  • 0 — El número no es un índice H3 válido.
  • Tipo: UInt8.

Ejemplo

SELECT h3IsValid(617301318803390464) AS h3IsValid;
┌─h3IsValid─┐
│ 1         │
└───────────┘

# h3ToGeo

Devuelve la longitud y latitud del centroide correspondiente al índice H3 proporcionado.

h3ToGeo(h3Index)

Argumentos

h3Index — Índice H3. UInt64.

Valores devueltos

Una tupla que consta de dos valores: tuple(lon,lat). lon — Longitud. Float64. lat — Latitud. Float64.

Ejemplo

SELECT h3ToGeo(617301318803390464) AS coordinates;
┌─coordinates───────────────────────────┐
│ (35.537867206326645,54.20746993771632)│
└───────────────────────────────────────┘

# h3ToGeoBoundary

Devuelve un arreglo de pares (lon, lat), que corresponde al límite del índice H3 proporcionado.

h3ToGeoBoundary(h3Index)

Argumentos

h3Index — Índice H3. Tipo: UInt64.

Valores devueltos

Arreglo de pares '(lon, lat)'. Tipo: Array(Float64, Float64).

Ejemplo

SELECT h3ToGeoBoundary(617301318803390464) AS coordinates;
┌─coordinates───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(54.20668646205218,35.53529359582246),(54.20566163343774,35.537605905213915),(54.20644505711934,35.54017955058831),(54.208253376128475,35.54044097223983),(54.209278241418595,35.53812853031426),(54.20849475102178,35.535554799273164)] │
└────────────────────────────────────────────────────────